1 #ifndef MODEL_SOLID_FINITE_NEOHOOKEAN_H_
2 #define MODEL_SOLID_FINITE_NEOHOOKEAN_H_
28 #elif AMREX_SPACEDIM==3
35 w += 0.5 *
mu * ((
F *
F.transpose()).trace() / J23 - 3.);
36 w += 0.5 *
kappa * (J - 1.0) * (J - 1.0);
47 #elif AMREX_SPACEDIM==3
57 dw +=
mu * (
F / J23 - (
F *
F.transpose()).trace() * FinvT / (3. * J23));
58 dw +=
kappa * (J - 1) * J * FinvT;
62 r_dw(0, 0) = dw(0, 0);
63 r_dw(0, 1) = dw(0, 1);
64 r_dw(1, 0) = dw(1, 0);
65 r_dw(1, 1) = dw(1, 1);
67 #elif AMREX_SPACEDIM==3
79 #elif AMREX_SPACEDIM==3
87 for (
int i = 0; i < 3; i++)
88 for (
int j = 0; j < 3; j++)
89 for (
int k = 0; k < 3; k++)
90 for (
int l = 0; l < 3; l++)
92 ddw(i, j, k, l) = 0.0;
96 if (i == k && j == l) t1 += 1.0;
97 t1 -= (2. / 3.) *
F(i, j) * FinvT(k, l);
98 t1 -= (2. / 3.) * FinvT(i, j) *
F(k, l);
99 t1 += (2. / 9.) * (
F *
F.transpose()).trace() * FinvT(i, j) * FinvT(k, l);
100 t1 += (1. / 3.) * (
F *
F.transpose()).trace() * FinvT(i, l) * FinvT(k, j);
102 t2 += (2. * J - 1.) * FinvT(i, j) * FinvT(k, l);
103 t2 += (1. - J) * FinvT(i, l) * FinvT(k, j);
105 ddw(i, j, k, l) = (
mu / J23) * t1 +
kappa * J * t2;
107 #if AMREX_SPACEDIM==2
109 for (
int i = 0; i < 2; i++)
110 for (
int j = 0; j < 2; j++)
111 for (
int k = 0; k < 2; k++)
112 for (
int l = 0; l < 2; l++)
113 r_ddw(i, j, k, l) = ddw(i, j, k, l);
115 #elif AMREX_SPACEDIM==3
119 virtual void Print(std::ostream& out)
const override
121 out <<
"mu = " <<
mu <<
" kappa = " <<
kappa;
158 value.
kappa = lame + (2.0 * value.
mu) / 3.0;
164 value.
kappa = E / (3.0 - 6.0 * nu);
165 value.
mu = E / (2.0 + 2.0 * nu);
169 #define OP_CLASS NeoHookean
170 #define OP_VARS X(kappa) X(mu)