32 #ifndef ELASTIC_SOLID_H 33 #define ELASTIC_SOLID_H 55 void setSoundSpeeds();
59 :
Solid(rho0), c0_(0.0), ct0_(0.0), cs0_(0.0),
60 E0_(0.0), G0_(0.0), K0_(0.0), nu_(0.0)
62 material_type_name_ =
"ElasticSolid";
66 Real ReferenceSoundSpeed() {
return c0_; };
67 Real TensileWaveSpeed() {
return ct0_; };
68 Real ShearWaveSpeed() {
return cs0_; };
69 Real YoungsModulus() {
return E0_; };
70 Real ShearModulus() {
return G0_; };
71 Real BulkModulus() {
return K0_; };
72 Real PoissonRatio() {
return nu_; };
75 virtual Matd
StressPK2(Matd &deformation,
size_t particle_index_i) = 0;
77 virtual Matd
StressCauchy(Matd &almansi_strain, Matd &F,
size_t particle_index_i) = 0;
79 virtual Matd
NumericalDampingRightCauchy(Matd &deformation, Matd &deformation_rate, Real smoothing_length,
size_t particle_index_i);
81 virtual Matd
NumericalDampingLeftCauchy(Matd &deformation, Matd &deformation_rate, Real smoothing_length,
size_t particle_index_i);
93 virtual ElasticSolid *ThisObjectPtr()
override {
return this; };
107 virtual Matd
StressPK2(Matd &deformation,
size_t particle_index_i)
override;
108 virtual Matd
StressCauchy(Matd &almansi_strain, Matd &F,
size_t particle_index_i)
override;
116 Real getPoissonRatio() {
return nu_; };
117 Real getDensity() {
return rho0_; };
121 Real getBulkModulus(Real youngs_modulus, Real poisson_ratio);
122 Real getShearModulus(Real youngs_modulus, Real poisson_ratio);
123 Real getLambda(Real youngs_modulus, Real poisson_ratio);
133 explicit NeoHookeanSolid(Real rho0, Real youngs_modulus, Real poisson_ratio)
136 material_type_name_ =
"NeoHookeanSolid";
141 virtual Matd
StressPK2(Matd &deformation,
size_t particle_index_i)
override;
142 virtual Matd
StressCauchy(Matd &almansi_strain, Matd &F,
size_t particle_index_i)
override;
160 material_type_name_ =
"NeoHookeanSolidIncompressible";
165 virtual Matd
StressPK2(Matd &deformation,
size_t particle_index_i)
override;
166 virtual Matd
StressCauchy(Matd &almansi_strain, Matd &F,
size_t particle_index_i)
override;
182 OrthotropicSolid(Real rho_0, std::array<Vecd, 3> a, std::array<Real, 3> E, std::array<Real, 3> G, std::array<Real, 3> poisson);
185 virtual Matd
StressPK2(Matd& deformation,
size_t particle_index_i)
override;
191 std::array<Vecd, 3> a_;
192 std::array<Real, 3> E_;
193 std::array<Real, 3> G_;
194 std::array<Real, 3> poisson_;
200 virtual void CalculateAllMu();
201 virtual void CalculateAllLambda();
202 virtual void CalculateA0();
217 material_type_name_ =
"FeneNeoHookeanSolid";
220 virtual Matd
StressPK2(Matd& deformation,
size_t particle_index_i)
override;
232 explicit Muscle(Real rho0, Real bulk_modulus,
233 const Vecd &f0,
const Vecd &s0,
const Real (&a0)[4],
const Real (&b0)[4])
235 f0_(f0),
s0_(s0), f0f0_(SimTK::outer(f0_, f0_)), s0s0_(SimTK::outer(
s0_,
s0_)),
238 material_type_name_ =
"Muscle";
239 std::copy(a0, a0 + 4, a0_);
240 std::copy(b0, b0 + 4,
b0_);
244 virtual Matd MuscleFiberDirection(
size_t particle_index_i) {
return f0f0_; };
246 virtual Matd
StressPK2(Matd &deformation,
size_t particle_index_i)
override;
252 virtual Muscle *ThisObjectPtr()
override {
return this; };
260 Real getPoissonRatio(Real bulk_modulus,
const Real (&a0)[4],
const Real (&b0)[4]);
261 Real getShearModulus(
const Real (&a0)[4],
const Real (&b0)[4]);
262 Real
getYoungsModulus(Real bulk_modulus,
const Real (&a0)[4],
const Real (&b0)[4]);
280 void initializeFiberAndSheetTensors();
287 const Vecd &f0,
const Vecd &s0,
const Real (&a0)[4],
const Real (&b0)[4])
288 :
Muscle(rho0, bulk_modulus, f0, s0, a0, b0)
290 material_type_name_ =
"LocallyOrthotropicMuscle";
295 virtual Matd MuscleFiberDirection(
size_t particle_index_i)
override {
return local_f0f0_[particle_index_i]; };
297 virtual Matd
StressPK2(Matd& deformation,
size_t particle_index_i)
override;
298 virtual void readFromXmlForLocalParameters(
const std::string &filefullpath)
override;
303 #endif //ELASTIC_SOLID_H virtual Matd StressCauchy(Matd &almansi_strain, Matd &F, size_t particle_index_i)=0
Neo-Hookean solid, Incompressible formulation! Currently only works with KirchhoffStressRelaxationFir...
Definition: elastic_solid.h:154
Globally orthotropic muscle.
Definition: elastic_solid.h:229
virtual std::string getRelevantStressMeasureName() override
Definition: elastic_solid.h:250
Vecd s0_
Definition: elastic_solid.h:252
virtual Real PairNumericalDamping(Real dE_dt_ij, Real smoothing_length)
Definition: elastic_solid.cpp:40
virtual Matd StressCauchy(Matd &almansi_strain, Matd &F, size_t particle_index_i) override
Definition: elastic_solid.cpp:128
StdLargeVec< Vecd > local_s0_
Definition: elastic_solid.h:284
StdLargeVec< Matd > local_f0s0_
Definition: elastic_solid.h:276
virtual Real VolumetricKirchhoff(Real J)=0
virtual std::string getRelevantStressMeasureName() override
Definition: elastic_solid.h:222
Base class of all solid materials.
Definition: base_material.h:113
Isotropic linear elastic solid. Note that only basic parameters are used to set ElasticSolid paramete...
Definition: elastic_solid.h:101
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i)=0
virtual Matd StressCauchy(Matd &almansi_strain, Matd &F, size_t particle_index_i) override
Definition: elastic_solid.cpp:84
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:78
virtual Real VolumetricKirchhoff(Real J) override
Definition: elastic_solid.cpp:265
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:250
virtual Matd NumericalDampingRightCauchy(Matd &deformation, Matd &deformation_rate, Real smoothing_length, size_t particle_index_i)
Definition: elastic_solid.cpp:24
virtual Real VolumetricKirchhoff(Real J) override
Definition: elastic_solid.cpp:89
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:221
This is the base classes of all materials. A function in a derived material class returns a value wit...
virtual Matd DeviatoricKirchhoff(const Matd &deviatoric_be)
Definition: elastic_solid.cpp:45
Matd f0s0_
Definition: elastic_solid.h:256
Neo-Hookean solid with finite extension.
Definition: elastic_solid.h:209
Real getYoungsModulus()
Definition: elastic_solid.h:115
virtual std::string getRelevantStressMeasureName() override
Definition: elastic_solid.h:112
Real j1_m_
Definition: elastic_solid.h:212
virtual Matd NumericalDampingLeftCauchy(Matd &deformation, Matd &deformation_rate, Real smoothing_length, size_t particle_index_i)
Definition: elastic_solid.cpp:32
virtual Real VolumetricKirchhoff(Real J) override
Definition: elastic_solid.cpp:114
Abstract class for a generalized elastic solid.
Definition: elastic_solid.h:44
virtual void initializeFiberAndSheet()
Definition: elastic_solid.cpp:291
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:155
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:94
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:119
virtual std::string getRelevantStressMeasureName() override
Definition: elastic_solid.h:300
Neo-Hookean solid, Compressible formulation!
Definition: elastic_solid.h:130
virtual Real VolumetricKirchhoff(Real J) override
Definition: elastic_solid.cpp:134
muscle model is a anisotropic material in which there are local fiber direction and cross-fiber sheet...
Definition: elastic_solid.h:273
virtual std::string getRelevantStressMeasureName()=0
virtual std::string getRelevantStressMeasureName() override
Definition: elastic_solid.h:146
virtual Matd StressCauchy(Matd &almansi_strain, Matd &F, size_t particle_index_i) override
Definition: elastic_solid.cpp:104
virtual Real VolumetricKirchhoff(Real J) override
Definition: elastic_solid.cpp:174
Orthotropic solid - generic definition with 3 orthogonal directions + 9 independent parameters...
Definition: elastic_solid.h:179
virtual Matd StressPK2(Matd &deformation, size_t particle_index_i) override
Definition: elastic_solid.cpp:270
Real b0_[4]
Definition: elastic_solid.h:257
virtual void assignBaseParticles(BaseParticles *base_particles) override
Definition: elastic_solid.cpp:285
Definition: solid_body_supplementary.cpp:9
Real rho0_
Definition: base_material.h:57
StdLargeVec< Vecd > local_f0_
Definition: elastic_solid.h:283