1111
1212@pytest .mark .parametrize ("isotropy" , (pulse .active_stress .ActiveStressModels .transversely ,))
1313@pytest .mark .parametrize (
14- "comp_model " ,
15- (pulse .compressibility .Incompressible () , pulse .compressibility .Compressible () ),
14+ "comp_model_cls " ,
15+ (pulse .compressibility .Incompressible , pulse .compressibility .Compressible ),
1616)
17- def test_CardiacModel_HolzapfelOgden (comp_model , isotropy , mesh , u ):
18- material_params = pulse .HolzapfelOgden .transversely_isotropic_parameters ()
17+ def test_CardiacModel_HolzapfelOgden (comp_model_cls , isotropy , mesh , u ):
18+ # material_params = pulse.HolzapfelOgden.transversely_isotropic_parameters()
1919 f0 = dolfinx .fem .Constant (mesh , (1.0 , 0.0 , 0.0 ))
2020 s0 = dolfinx .fem .Constant (mesh , (0.0 , 1.0 , 0.0 ))
21- material = pulse .HolzapfelOgden (f0 = f0 , s0 = s0 , ** material_params )
22-
21+ material = pulse .HolzapfelOgden (
22+ f0 = f0 ,
23+ s0 = s0 ,
24+ a = 1.0 ,
25+ b = 0.0 ,
26+ a_f = 1.0 ,
27+ b_f = 0.0 ,
28+ a_fs = 0.0 ,
29+ b_fs = 0.0 ,
30+ deviatoric = False ,
31+ )
32+ comp_model = comp_model_cls ()
2333 active_model = pulse .ActiveStress (f0 , isotropy = isotropy )
2434 model = pulse .CardiacModel (
2535 material = material ,
2636 active = active_model ,
2737 compressibility = comp_model ,
2838 )
39+ comp_model .register (p = 1000.0 )
2940 u .interpolate (lambda x : x / 10.0 )
3041 F = pulse .kinematics .DeformationGradient (u )
31- psi = model .strain_energy (F , p = 1.0 )
42+ C = F .T * F
43+ psi = model .strain_energy (C )
3244 value = dolfinx .fem .assemble_scalar (dolfinx .fem .form (psi * ufl .dx ))
3345
46+ # value_mat = dolfinx.fem.assemble_scalar(dolfinx.fem.form(material.strain_energy(C) * ufl.dx))
47+ # value_comp = dolfinx.fem.assemble_scalar(
48+ # dolfinx.fem.form(comp_model.strain_energy(C) * ufl.dx),
49+ # )
50+ # value_active = dolfinx.fem.assemble_scalar(
51+ # dolfinx.fem.form(active_model.strain_energy(C) * ufl.dx)
52+ # )
53+
54+ # F = I + 0.1 I, C = 1.21 I, I4f = 1.21
55+ # J = det(F) = 1.1 ** 3
56+
3457 if isinstance (comp_model , pulse .compressibility .Incompressible ):
35- assert math .isclose (value , 53647.14346074856 )
58+ # psi = 0.5 * a * (I1 - 3) + 0.5 * a_f * (I4f - 1)**2 + p (J - 1)
59+ # psi = 0.5 * 1000*1 * (3 * 1.21 - 3) + 0.5 * 1000.0 * 1.0 * (1.21 - 1)**2 +
60+ # 1000.0 * (1.1 ** 3 - 1) = 668.05
61+ assert math .isclose (value , 668.05 )
3662 else :
37- assert math .isclose (value , 103220.36041941364 )
63+ # psi = 0.5 * a * (I1 - 3) + 0.5 * a_f * (I4f - 1)**2 + kappa * (J * ln(J) - J + 1)
64+ # psi = 0.5 * 1000*1 * (3 * 1.21 - 3) + 0.5 * 1000.0 * 1.0 * (1.21 - 1)**2 +
65+ # 1e6 * (1.1 ** 3 * math.log(1.1 ** 3) - 1.1 ** 3 + 1) = 49910.5979586692
66+ assert math .isclose (value , 49910.5979586692 )
3867
3968
4069@pytest .mark .parametrize ("isotropy" , (pulse .active_stress .ActiveStressModels .transversely ,))
4170@pytest .mark .parametrize (
42- "comp_model " ,
43- (pulse .compressibility .Incompressible () , pulse .compressibility .Compressible () ),
71+ "comp_model_cls " ,
72+ (pulse .compressibility .Incompressible , pulse .compressibility .Compressible ),
4473)
45- def test_CardiacModel_NeoHookean (comp_model , isotropy , mesh , u ):
74+ def test_CardiacModel_NeoHookean (comp_model_cls , isotropy , mesh , u ):
4675 material = pulse .NeoHookean (
4776 mu = dolfinx .fem .Constant (mesh , dolfinx .default_scalar_type (15.0 )),
4877 )
4978 f0 = dolfinx .fem .Constant (mesh , (1.0 , 0.0 , 0.0 ))
79+ comp_model = comp_model_cls ()
5080 active_model = pulse .ActiveStress (f0 , isotropy = isotropy )
5181 model = pulse .CardiacModel (
5282 material = material ,
5383 active = active_model ,
5484 compressibility = comp_model ,
5585 )
86+ comp_model .register (p = dolfinx .fem .Constant (mesh , 1.0 ))
5687 u .interpolate (lambda x : x / 10.0 )
5788 F = pulse .kinematics .DeformationGradient (u )
58- psi = model .strain_energy (F , p = 1.0 )
89+ C = F .T * F
90+ psi = model .strain_energy (C )
91+
5992 value = dolfinx .fem .assemble_scalar (dolfinx .fem .form (psi * ufl .dx ))
6093
6194 if isinstance (comp_model , pulse .compressibility .Incompressible ):
@@ -66,24 +99,27 @@ def test_CardiacModel_NeoHookean(comp_model, isotropy, mesh, u):
6699
67100@pytest .mark .parametrize ("isotropy" , (pulse .active_stress .ActiveStressModels .transversely ,))
68101@pytest .mark .parametrize (
69- "comp_model " ,
70- (pulse .compressibility .Incompressible () , pulse .compressibility .Compressible () ),
102+ "comp_model_cls " ,
103+ (pulse .compressibility .Incompressible , pulse .compressibility .Compressible ),
71104)
72- def test_CardiacModel_Guccione (comp_model , isotropy , mesh , u ):
105+ def test_CardiacModel_Guccione (comp_model_cls , isotropy , mesh , u ):
73106 f0 = dolfinx .fem .Constant (mesh , (1.0 , 0.0 , 0.0 ))
74107 s0 = dolfinx .fem .Constant (mesh , (0.0 , 1.0 , 0.0 ))
75108 n0 = dolfinx .fem .Constant (mesh , (0.0 , 0.0 , 1.0 ))
76109 material_params = pulse .Guccione .default_parameters ()
77- material = pulse .Guccione (f0 = f0 , s0 = s0 , n0 = n0 , ** material_params )
110+ material = pulse .Guccione (f0 = f0 , s0 = s0 , n0 = n0 , ** material_params , deviatoric = False )
78111 active_model = pulse .ActiveStress (f0 , isotropy = isotropy )
112+ comp_model = comp_model_cls ()
79113 model = pulse .CardiacModel (
80114 material = material ,
81115 active = active_model ,
82116 compressibility = comp_model ,
83117 )
118+ comp_model .register (p = dolfinx .fem .Constant (mesh , 1.0 ))
84119 u .interpolate (lambda x : x / 10.0 )
85120 F = pulse .kinematics .DeformationGradient (u )
86- psi = model .strain_energy (F , p = 1.0 )
121+ C = F .T * F
122+ psi = model .strain_energy (C )
87123 value = dolfinx .fem .assemble_scalar (dolfinx .fem .form (psi * ufl .dx ))
88124
89125 if isinstance (comp_model , pulse .compressibility .Incompressible ):
0 commit comments