44#ifndef NIMBLE_MATERIAL_H
45#define NIMBLE_MATERIAL_H
71 const std::string& material_name,
72 const std::map<std::string, std::string>& string_params,
73 const std::map<std::string, double>& double_params,
74 int num_material_points = 0)
75 : material_name_(material_name),
76 material_string_parameters_(string_params),
77 material_double_parameters_(double_params),
78 num_material_points_(num_material_points)
85 std::transform(s.begin(), s.end(), s.begin(), ::toupper);
93 material_double_parameters_.insert(std::make_pair(std::string(parameter_name), parameter_value));
99 material_string_parameters_.insert(std::make_pair(std::string(parameter_name), std::string(parameter_value)));
105 return material_double_parameters_.find(parameter_name) != material_double_parameters_.end();
111 return material_string_parameters_.find(parameter_name) != material_string_parameters_.end();
117 std::string name = material_name_;
125 return static_cast<int>(material_double_parameters_.size());
131 return static_cast<int>(material_string_parameters_.size());
138 return material_double_parameters_.at(parameter_name);
140 std::string errMsg =
"Double parameter '" + std::string(parameter_name) +
"' does not exist";
141 throw std::invalid_argument(errMsg);
145 inline const std::string&
149 return material_string_parameters_.at(parameter_name);
151 std::string errMsg =
"String parameter '" + std::string(parameter_name) +
"' does not exist";
152 throw std::invalid_argument(errMsg);
159 return num_material_points_;
162 inline const std::map<std::string, double>&
165 return material_double_parameters_;
168 inline const std::map<std::string, std::string>&
171 return material_string_parameters_;
177 printf(
"\n--MaterialParameters\n");
178 printf(
" material name %s\n", material_name_.c_str());
179 int num_material_double_parameters_ =
static_cast<int>(material_double_parameters_.size());
180 printf(
" number of material double parameters %d\n", num_material_double_parameters_);
181 for (
const auto& p : material_double_parameters_) { printf(
" %s %f\n", p.first.c_str(), p.second); }
182 int num_material_string_parameters_ =
static_cast<int>(material_string_parameters_.size());
183 printf(
" number of material string parameters %d\n", num_material_string_parameters_);
184 for (
const auto& p : material_string_parameters_) { printf(
" %s %s\n", p.first.c_str(), p.second.c_str()); }
188 std::string material_name_;
190 std::map<std::string, double> material_double_parameters_;
191 std::map<std::string, std::string> material_string_parameters_;
193 int num_material_points_;
244 double time_previous,
246 const double* deformation_gradient_n,
247 const double* deformation_gradient_np1,
248 const double* stress_n,
250 const double* state_data_n,
251 double* state_data_np1,
253 bool is_output_step) = 0;
255#ifdef NIMBLE_HAVE_KOKKOS
256 struct DeviceElemState
271 double time_previous,
277 const nimble::Material::DeviceElemState& state_n,
278 nimble::Material::DeviceElemState& state_np1)
const
280 const int def_g_len = 9, stress_len = 6;
285 GetStress(time_previous, time_current, def_g_n, def_g_np1, s_n, s_np1);
297 const double& bulk_mod,
298 const double& shear_mod,
300 const double* deformation_gradient_np1,
301 double* stress_np1) = 0;
308 double time_previous,
332 return num_state_variables_;
340 "\n**** Error, bad index in "
341 "ElasticMaterial::GetStateVariableLabel().\n");
349 "\n**** Error, bad index in "
350 "ElasticMaterial::GetStateVariableInitialValue().\n");
365 return bulk_modulus_;
372 return shear_modulus_;
380 double time_previous,
382 const double* deformation_gradient_n,
383 const double* deformation_gradient_np1,
384 const double* stress_n,
386 const double* state_data_n,
387 double* state_data_np1,
389 bool is_output_step)
override;
393 GetTangent(
int num_pts,
double* material_tangent)
const override;
399 const double& bulk_mod,
400 const double& shear_mod,
402 const double* deformation_gradient_np1,
403 double* stress_np1)
override;
410 double time_previous,
418 int num_state_variables_;
421 double bulk_modulus_;
422 double shear_modulus_;
441 return num_state_variables_;
449 "\n**** Error, bad index in "
450 "NeohookeanMaterial::GetStateVariableLabel().\n");
458 "\n**** Error, bad index in "
459 "NeohookeanMaterial::GetStateVariableInitialValue().\n");
474 return bulk_modulus_;
481 return shear_modulus_;
489 double time_previous,
491 const double* deformation_gradient_n,
492 const double* deformation_gradient_np1,
493 const double* stress_n,
495 const double* state_data_n,
496 double* state_data_np1,
498 bool is_output_step)
override;
502 GetTangent(
int num_pts,
double* material_tangent)
const override;
508 const double& bulk_mod,
509 const double& shear_mod,
511 const double* deformation_gradient_np1,
512 double* stress_np1)
override;
519 double time_previous,
527 int num_state_variables_;
530 double bulk_modulus_;
531 double shear_modulus_;
Definition nimble_data_manager.h:70
NIMBLE_FUNCTION void GetStress(int elem_id, int num_pts, double time_previous, double time_current, const double *deformation_gradient_n, const double *deformation_gradient_np1, const double *stress_n, double *stress_np1, const double *state_data_n, double *state_data_np1, DataManager &data_manager, bool is_output_step) override
Definition nimble_material.cc:69
NIMBLE_FUNCTION double GetStateVariableInitialValue(int index) const override
Definition nimble_material.h:346
NIMBLE_FUNCTION void GetTangent(int num_pts, double *material_tangent) const override
Definition nimble_material.cc:161
static void register_supported_material_parameters(MaterialFactoryBase &factory)
Definition nimble_material.cc:52
NIMBLE_FUNCTION void GetStateVariableLabel(int index, char label[MaterialParameters::MAX_MAT_MODEL_STR_LEN]) const override
Definition nimble_material.h:337
NIMBLE_FUNCTION double GetDensity() const override
Definition nimble_material.h:356
NIMBLE_FUNCTION int NumStateVariables() const override
Definition nimble_material.h:330
NIMBLE_FUNCTION double GetBulkModulus() const override
Definition nimble_material.h:363
NIMBLE_FUNCTION ElasticMaterial(const ElasticMaterial &mat)=default
NIMBLE_FUNCTION double GetShearModulus() const override
Definition nimble_material.h:370
NIMBLE_FUNCTION ElasticMaterial(MaterialParameters const &material_parameters)
Definition nimble_material.cc:59
Definition nimble_material_factory_base.h:61
Definition nimble_material_factory.h:52
virtual NIMBLE_FUNCTION int NumStateVariables() const =0
virtual NIMBLE_FUNCTION ~Material()=default
NIMBLE_FUNCTION Material()=default
virtual NIMBLE_FUNCTION double GetBulkModulus() const =0
virtual NIMBLE_FUNCTION void GetTangent(int num_pts, double *material_tangent) const =0
virtual NIMBLE_FUNCTION double GetDensity() const =0
virtual NIMBLE_FUNCTION bool IsNGPLAMEModel() const
Definition nimble_material.h:210
NIMBLE_FUNCTION Material(const Material &mat)=default
virtual NIMBLE_FUNCTION void GetStateVariableLabel(int index, char label[MaterialParameters::MAX_MAT_MODEL_STR_LEN]) const =0
virtual NIMBLE_FUNCTION double GetShearModulus() const =0
virtual NIMBLE_FUNCTION void GetStress(double time_previous, double time_current, nimble::Viewify< 1, const double > &deformation_gradient_n, nimble::Viewify< 1, const double > &deformation_gradient_np1, nimble::Viewify< 1, const double > &stress_n, nimble::Viewify< 1 > stress_np1) const =0
virtual NIMBLE_FUNCTION double GetStateVariableInitialValue(int index) const =0
virtual NIMBLE_FUNCTION void GetStress(int elem_id, int num_pts, double time_previous, double time_current, const double *deformation_gradient_n, const double *deformation_gradient_np1, const double *stress_n, double *stress_np1, const double *state_data_n, double *state_data_np1, DataManager &data_manager, bool is_output_step)=0
Definition nimble_material.h:62
MaterialParameters()
Definition nimble_material.h:67
double GetParameterValue(const char *parameter_name) const
Definition nimble_material.h:135
bool IsParameter(const char *parameter_name) const
Definition nimble_material.h:103
std::string GetMaterialName(bool upper_case=false) const
Definition nimble_material.h:115
int GetNumMaterialPoints() const
Definition nimble_material.h:157
int GetNumParameters() const
Definition nimble_material.h:123
~MaterialParameters()=default
static const int MAX_MAT_MODEL_STR_LEN
Definition nimble_material.h:65
static void ConvertStringToUpperCase(std::string &s)
Definition nimble_material.h:83
const std::map< std::string, std::string > & GetStringParameters() const
Definition nimble_material.h:169
static const int MAX_NUM_MAT_PARAM
Definition nimble_material.h:64
void AddParameter(const char *parameter_name, double parameter_value)
Definition nimble_material.h:91
NIMBLE_INLINE_FUNCTION MaterialParameters(const std::string &material_name, const std::map< std::string, std::string > &string_params, const std::map< std::string, double > &double_params, int num_material_points=0)
Definition nimble_material.h:70
const std::map< std::string, double > & GetParameters() const
Definition nimble_material.h:163
const std::string & GetStringParameterValue(const char *parameter_name) const
Definition nimble_material.h:146
void Print() const
Definition nimble_material.h:175
bool IsStringParameter(const char *parameter_name) const
Definition nimble_material.h:109
void AddStringParameter(const char *parameter_name, const char *parameter_value)
Definition nimble_material.h:97
int GetNumStringParameters() const
Definition nimble_material.h:129
NIMBLE_FUNCTION double GetDensity() const override
Definition nimble_material.h:465
NIMBLE_FUNCTION double GetShearModulus() const override
Definition nimble_material.h:479
NIMBLE_FUNCTION void GetTangent(int num_pts, double *material_tangent) const override
Definition nimble_material.cc:345
NIMBLE_FUNCTION NeohookeanMaterial(const NeohookeanMaterial &mat)=default
NIMBLE_FUNCTION int NumStateVariables() const override
Definition nimble_material.h:439
NIMBLE_FUNCTION double GetBulkModulus() const override
Definition nimble_material.h:472
NIMBLE_FUNCTION double GetStateVariableInitialValue(int index) const override
Definition nimble_material.h:455
NIMBLE_FUNCTION void GetStress(int elem_id, int num_pts, double time_previous, double time_current, const double *deformation_gradient_n, const double *deformation_gradient_np1, const double *stress_n, double *stress_np1, const double *state_data_n, double *state_data_np1, DataManager &data_manager, bool is_output_step) override
Definition nimble_material.cc:227
static void register_supported_material_parameters(MaterialFactoryBase &factory)
Definition nimble_material.cc:209
NIMBLE_FUNCTION void GetStateVariableLabel(int index, char label[MaterialParameters::MAX_MAT_MODEL_STR_LEN]) const override
Definition nimble_material.h:446
Definition nimble_view.h:72
Field< FieldType::DeviceSymTensorIntPt >::SingleEntryView DeviceSymTensorIntPtSingleEntryView
Definition nimble_kokkos_defs.h:593
Field< FieldType::DeviceVectorIntPt >::SingleEntryView DeviceVectorIntPtSingleEntryView
Definition nimble_kokkos_defs.h:599
Field< FieldType::DeviceScalarIntPt >::SingleEntryView DeviceScalarIntPtSingleEntryView
Definition nimble_kokkos_defs.h:596
Field< FieldType::DeviceFullTensorIntPt >::SingleEntryView DeviceFullTensorIntPtSingleEntryView
Definition nimble_kokkos_defs.h:590
Definition kokkos_contact_manager.h:49
#define NIMBLE_INLINE_FUNCTION
Definition nimble_defs.h:50
#define NIMBLE_FUNCTION
Definition nimble_defs.h:49