@@ -42,6 +42,11 @@ def S(self, C: ufl.core.expr.Expr) -> ufl.core.expr.Expr:
4242 """Cauchy stress tensor for the compressibility model."""
4343 return 2.0 * ufl .diff (self .strain_energy (C ), C )
4444
45+ def P (self , F : ufl .core .expr .Expr ) -> ufl .core .expr .Expr :
46+ """First Piola-Kirchhoff stress tensor for the compressibility model."""
47+ C = F .T * F
48+ return ufl .diff (self .strain_energy (C ), F )
49+
4550 @abc .abstractmethod
4651 def is_compressible (self ) -> bool :
4752 """Returns True if the material model is compressible."""
@@ -126,16 +131,38 @@ class Compressible2(Compressible):
126131 Strain energy density function is given by
127132
128133 .. math::
129- \Psi = \kappa (J^2 - 1 - 2 \ln(J))
134+ \Psi = \kappa / 4 (J^2 - 1 - 2 \ln(J))
130135
131136 """
132137
133138 kappa : Variable = field (default_factory = lambda : Variable (1e6 , "Pa" ))
134139
135140 def __str__ (self ) -> str :
136- return "\u03ba (J ** 2 - 1 - 2 ln(J))"
141+ return "\u03ba / 4 (J ** 2 - 1 - 2 ln(J))"
137142
138143 def strain_energy (self , C : ufl .core .expr .Expr ) -> ufl .core .expr .Expr :
139144 J = ufl .sqrt (ufl .det (C ))
140145 kappa = self .kappa .to_base_units ()
141146 return 0.25 * kappa * (J ** 2 - 1 - 2 * ufl .ln (J ))
147+
148+
149+ @dataclass (slots = True )
150+ class Compressible3 (Compressible ):
151+ r"""Compressible material model used in Usyk et al. 2002
152+
153+ Strain energy density function is given by
154+
155+ .. math::
156+ \Psi = \kappa / 2 (J - 1) * \ln(J)
157+
158+ """
159+
160+ kappa : Variable = field (default_factory = lambda : Variable (5e4 , "Pa" ))
161+
162+ def __str__ (self ) -> str :
163+ return "\u03ba / 2 * (J - 1) * ln(J)"
164+
165+ def strain_energy (self , C : ufl .core .expr .Expr ) -> ufl .core .expr .Expr :
166+ J = ufl .sqrt (ufl .det (C ))
167+ kappa = self .kappa .to_base_units ()
168+ return 0.5 * kappa * (J - 1 ) * ufl .ln (J )
0 commit comments