81 J = F.compute_determinant();
86 auto [ eVals, eVecs ] = C.
eigs();
91 for (
int i = 1; i <=
N; i++ ) {
92 double l1a, l2a, l3a, Ja;
94 Ja = pow(J, -
alpha.at(i) / 3.);
95 l1a = pow(eVals.at(1),
alpha.at(i) / 2.);
96 l2a = pow(eVals.at(2),
alpha.at(i) / 2.);
97 l3a = pow(eVals.at(3),
alpha.at(i) / 2.);
99 double I1a = ( l1a + l2a + l3a ) / 3.;
105 dSdE(
i_3,
j_3,
k_3,
l_3) += 2. *
mu.at(i) * Ja * (
Tensor2_3d::compute_dCm_dC_fromEigs( (
alpha.at(i) - 2. ) / 2., eVals, eVecs )(
i_3,
j_3,
k_3,
l_3) -
alpha.at(i) / 6. * iC(
i_3,
j_3) * powC(
k_3,
l_3) + I1a / 2. * iCiC(
i_3,
j_3,
k_3,
l_3) ) -
alpha.at(i) / 3. * iSdev(
i_3,
j_3) * iC(
k_3,
l_3);
114 dPdF(
i_3,
j_3,
k_3,
l_3) = I(
i_3,
k_3) * Sdev(
j_3,
l_3) + F(
i_3,
m_3) * dSdE(
m_3,
j_3,
n_3,
l_3) * F(
k_3,
n_3);
130 auto [ eVals, eVecs ] = C.
eigs();
136 for (
int i = 1; i <=
N; i++ ) {
137 double l1a, l2a, l3a, Ja;
140 l1a = pow(eVals.at(1),
alpha.at(i) / 2.);
141 l2a = pow(eVals.at(2),
alpha.at(i) / 2.);
142 l3a = pow(eVals.at(3),
alpha.at(i) / 2.);
143 Ja = pow(J, -
alpha.at(i) / 3.);
144 double I1a = ( l1a + l2a + l3a ) / 3.;
154std::unique_ptr<MaterialStatus>
157 return std::make_unique<StructuralMaterialStatus>(gp);
171 int M =
mu.giveSize();
#define REGISTER_Material(class)
BaseHyperElasticMaterial()
void initializeFrom(InputRecord &ir)
initialization for the input file
Tensor4_3d compute_d2VolumetricEnergy_dF2(const Tensor2_3d &F) const
Tensor2_3d compute_dVolumetricEnergy_dF(const Tensor2_3d &F) const
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initializeFrom(InputRecord &ir) override
FloatArrayF< 9 > giveFirstPKStressVector_3d(const FloatArrayF< 9 > &vF, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
FloatArray alpha
Array of Exponents alpha.
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
Tensor2_3d giveDeviatoricSecondPKStressVector_3d(const Tensor2_3d &C) const
OgdenCompressibleMaterial(int n, Domain *d)
FloatMatrixF< 9, 9 > give3dMaterialStiffnessMatrix_dPdF(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
int N
Number of material parameters in the arrays mu(alpha).
FloatArray mu
Array of Material parameters mu.
void letTempPVectorBe(const FloatArray &v)
Assigns tempPVector to given vector v.
const FloatArray & giveTempFVector() const
Returns the const pointer to receiver's temporary deformation gradient vector.
void letTempFVectorBe(const FloatArray &v)
Assigns tempFVector to given vector v.
void initializeFrom(InputRecord &ir) override
StructuralMaterial(int n, Domain *d)
const FloatArrayF< 9 > to_voigt_form()
std::pair< FloatArrayF< 3 >, FloatMatrixF< 3, 3 > > eigs(int nf=15) const
static Tensor2_3d computeTensorPowerFromEigs(const FloatArray &eVals, const FloatMatrix &eVecs, double m)
Tensor2_3d compute_inverse() const
static Tensor4_3d compute_dCm_dC_fromEigs(double m, const FloatArray &lam, const FloatMatrix &N)
static const Tensor2_3d UnitTensor()
double compute_determinant() const
FloatMatrixF< 9, 9 > to_voigt_form()
static FTensor::Index< 'k', 3 > k_3
static FTensor::Index< 'j', 3 > j_3
static FTensor::Index< 'n', 3 > n_3
static FTensor::Index< 'i', 3 > i_3
static FTensor::Index< 'l', 3 > l_3
static FTensor::Index< 'm', 3 > m_3
#define _IFT_OgdenCompressibleMaterial_alpha
#define _IFT_OgdenCompressibleMaterial_mu