NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble::ElasticMaterial Class Reference

#include <nimble_material.h>

Inheritance diagram for nimble::ElasticMaterial:
nimble::Material

Public Member Functions

NIMBLE_FUNCTION ElasticMaterial (MaterialParameters const &material_parameters)
 
NIMBLE_FUNCTION ElasticMaterial (const ElasticMaterial &mat)=default
 
NIMBLE_FUNCTION int NumStateVariables () const override
 
NIMBLE_FUNCTION void GetStateVariableLabel (int index, char label[MaterialParameters::MAX_MAT_MODEL_STR_LEN]) const override
 
NIMBLE_FUNCTION double GetStateVariableInitialValue (int index) const override
 
NIMBLE_FUNCTION double GetDensity () const override
 
NIMBLE_FUNCTION double GetBulkModulus () const override
 
NIMBLE_FUNCTION double GetShearModulus () const override
 
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
 
NIMBLE_FUNCTION void GetTangent (int num_pts, double *material_tangent) const override
 
- Public Member Functions inherited from nimble::Material
NIMBLE_FUNCTION Material ()=default
 
NIMBLE_FUNCTION Material (const Material &mat)=default
 
virtual NIMBLE_FUNCTION ~Material ()=default
 
virtual NIMBLE_FUNCTION bool IsNGPLAMEModel () const
 

Static Public Member Functions

static void register_supported_material_parameters (MaterialFactoryBase &factory)
 

Protected Member Functions

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 override
 

Constructor & Destructor Documentation

◆ ElasticMaterial() [1/2]

nimble::ElasticMaterial::ElasticMaterial ( MaterialParameters const & material_parameters)
explicit
60 : Material(), num_state_variables_(0), dim_(0), density_(0.0), bulk_modulus_(0.0), shear_modulus_(0.0)
61{
62 dim_ = 3;
63 density_ = material_parameters.GetParameterValue("density");
64 bulk_modulus_ = material_parameters.GetParameterValue("bulk_modulus");
65 shear_modulus_ = material_parameters.GetParameterValue("shear_modulus");
66}
NIMBLE_FUNCTION Material()=default

◆ ElasticMaterial() [2/2]

NIMBLE_FUNCTION nimble::ElasticMaterial::ElasticMaterial ( const ElasticMaterial & mat)
default

Member Function Documentation

◆ GetBulkModulus()

NIMBLE_FUNCTION double nimble::ElasticMaterial::GetBulkModulus ( ) const
inlineoverridevirtual

Implements nimble::Material.

364 {
365 return bulk_modulus_;
366 }

◆ GetDensity()

NIMBLE_FUNCTION double nimble::ElasticMaterial::GetDensity ( ) const
inlineoverridevirtual

Implements nimble::Material.

357 {
358 return density_;
359 }

◆ GetShearModulus()

NIMBLE_FUNCTION double nimble::ElasticMaterial::GetShearModulus ( ) const
inlineoverridevirtual

Implements nimble::Material.

371 {
372 return shear_modulus_;
373 }

◆ GetStateVariableInitialValue()

NIMBLE_FUNCTION double nimble::ElasticMaterial::GetStateVariableInitialValue ( int index) const
inlineoverridevirtual

Implements nimble::Material.

347 {
348 printf(
349 "\n**** Error, bad index in "
350 "ElasticMaterial::GetStateVariableInitialValue().\n");
351 return 0.0;
352 }

◆ GetStateVariableLabel()

NIMBLE_FUNCTION void nimble::ElasticMaterial::GetStateVariableLabel ( int index,
char label[MaterialParameters::MAX_MAT_MODEL_STR_LEN] ) const
inlineoverridevirtual

Implements nimble::Material.

338 {
339 printf(
340 "\n**** Error, bad index in "
341 "ElasticMaterial::GetStateVariableLabel().\n");
342 }

◆ GetStress() [1/2]

void nimble::ElasticMaterial::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
overrideprotectedvirtual

Implements nimble::Material.

103{
104 auto def_grad = deformation_gradient_np1.data();
105 double strain[6];
106 double trace_strain;
107
108 double two_mu = 2.0 * shear_modulus_;
109 double lambda = bulk_modulus_ - 2.0 * shear_modulus_ / 3.0;
110
111 strain[K_S_XX] = def_grad[K_F_XX] - 1.0;
112 strain[K_S_YY] = def_grad[K_F_YY] - 1.0;
113 strain[K_S_ZZ] = def_grad[K_F_ZZ] - 1.0;
114 strain[K_S_XY] = 0.5 * (def_grad[K_F_XY] + def_grad[K_F_YX]);
115 strain[K_S_YZ] = 0.5 * (def_grad[K_F_YZ] + def_grad[K_F_ZY]);
116 strain[K_S_ZX] = 0.5 * (def_grad[K_F_ZX] + def_grad[K_F_XZ]);
117
118 trace_strain = strain[K_S_XX] + strain[K_S_YY] + strain[K_S_ZZ];
119
120 stress_np1(K_S_XX) = two_mu * strain[K_S_XX] + lambda * trace_strain;
121 stress_np1(K_S_YY) = two_mu * strain[K_S_YY] + lambda * trace_strain;
122 stress_np1(K_S_ZZ) = two_mu * strain[K_S_ZZ] + lambda * trace_strain;
123 stress_np1(K_S_XY) = two_mu * strain[K_S_XY];
124 stress_np1(K_S_YZ) = two_mu * strain[K_S_YZ];
125 stress_np1(K_S_ZX) = two_mu * strain[K_S_ZX];
126}
Scalar * data() const
Definition nimble_view.h:130

◆ GetStress() [2/2]

void nimble::ElasticMaterial::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 )
overridevirtual

Implements nimble::Material.

82{
83 double* stress = stress_np1;
84 const double* def_grad = deformation_gradient_np1;
85
86 nimble::Viewify<1, const double> null_view;
87
88 for (int pt = 0; pt < num_pts; pt++, def_grad += 9, stress += 6) {
89 nimble::Viewify<1, const double> def_grap_np1(def_grad, 9);
90 GetStress(time_previous, time_current, null_view, def_grap_np1, null_view, {stress, 6});
91 }
92 // TODO rotate stress?
93}
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

◆ GetTangent()

void nimble::ElasticMaterial::GetTangent ( int num_pts,
double * material_tangent ) const
overridevirtual

Implements nimble::Material.

162{
163 double lambda = bulk_modulus_ - 2.0 * shear_modulus_ / 3.0;
164 double mu = shear_modulus_;
165 double two_mu = 2.0 * shear_modulus_;
166
167 for (int int_pt = 0; int_pt < num_pts; int_pt++) {
168 int offset = int_pt * 36;
169 material_tangent[offset] = lambda + two_mu;
170 material_tangent[offset + 1] = lambda;
171 material_tangent[offset + 2] = lambda;
172 material_tangent[offset + 3] = 0.0;
173 material_tangent[offset + 4] = 0.0;
174 material_tangent[offset + 5] = 0.0;
175 material_tangent[offset + 6] = lambda;
176 material_tangent[offset + 7] = lambda + two_mu;
177 material_tangent[offset + 8] = lambda;
178 material_tangent[offset + 9] = 0.0;
179 material_tangent[offset + 10] = 0.0;
180 material_tangent[offset + 11] = 0.0;
181 material_tangent[offset + 12] = lambda;
182 material_tangent[offset + 13] = lambda;
183 material_tangent[offset + 14] = lambda + two_mu;
184 material_tangent[offset + 15] = 0.0;
185 material_tangent[offset + 16] = 0.0;
186 material_tangent[offset + 17] = 0.0;
187 material_tangent[offset + 18] = 0.0;
188 material_tangent[offset + 19] = 0.0;
189 material_tangent[offset + 20] = 0.0;
190 material_tangent[offset + 21] = mu;
191 material_tangent[offset + 22] = 0.0;
192 material_tangent[offset + 23] = 0.0;
193 material_tangent[offset + 24] = 0.0;
194 material_tangent[offset + 25] = 0.0;
195 material_tangent[offset + 26] = 0.0;
196 material_tangent[offset + 27] = 0.0;
197 material_tangent[offset + 28] = mu;
198 material_tangent[offset + 29] = 0.0;
199 material_tangent[offset + 30] = 0.0;
200 material_tangent[offset + 31] = 0.0;
201 material_tangent[offset + 32] = 0.0;
202 material_tangent[offset + 33] = 0.0;
203 material_tangent[offset + 34] = 0.0;
204 material_tangent[offset + 35] = mu;
205 }
206}

◆ NumStateVariables()

NIMBLE_FUNCTION int nimble::ElasticMaterial::NumStateVariables ( ) const
inlineoverridevirtual

Implements nimble::Material.

331 {
332 return num_state_variables_;
333 };

◆ register_supported_material_parameters()

void nimble::ElasticMaterial::register_supported_material_parameters ( MaterialFactoryBase & factory)
static
53{
54 factory.add_valid_double_parameter_name("bulk_modulus");
55 factory.add_valid_double_parameter_name("shear_modulus");
56 factory.add_valid_double_parameter_name("density");
57}

The documentation for this class was generated from the following files: