@@ -4,6 +4,7 @@ using JSON
44using StaticArrays
55using Test
66using HyperFEM. PhysicalModels
7+ using HyperFEM. TensorAlgebra
78
89
910
@@ -40,6 +41,16 @@ function test_derivatives_3D_(model::PhysicalModel, K::KinematicModel; rtol=1e-1
4041 test_derivatives__ (model, K, ∇u3, rtol= rtol, kwargs... )
4142end
4243
44+ function test_equilibrium_at_rest_2D (obj:: Mechano ; atol= 1e-10 )
45+ Ψ, _... = obj ()
46+ @test isapprox (Ψ (I2), 0.0 , atol= atol)
47+ end
48+
49+ function test_equilibrium_at_rest_3D (obj:: Mechano , atol= 1e-10 )
50+ Ψ, _... = obj ()
51+ @test isapprox (Ψ (I3), 0.0 , atol= atol)
52+ end
53+
4354
4455
4556
@@ -178,12 +189,14 @@ end
178189@testset " NonlinearMooneyRivlin_CV" begin
179190 model = NonlinearMooneyRivlin_CV (λ= 3.0 , μ1= 1.0 , μ2= 1.0 , α1= 2.0 , α2= 1.0 , γ= 6.0 )
180191 test_derivatives_3D_ (model, Kinematics (Mechano,Solid),rtol= 1e-13 )
192+ test_equilibrium_at_rest_3D (model)
181193end
182194
183195
184196@testset " NonlinearNeoHookean_CV" begin
185197 model = NonlinearNeoHookean_CV (λ= 3.0 , μ= 1.0 , α= 2.0 , γ= 6.0 )
186198 test_derivatives_3D_ (model, Kinematics (Mechano,Solid),rtol= 1e-13 )
199+ test_equilibrium_at_rest_3D (model)
187200end
188201
189202
@@ -208,76 +221,89 @@ end
208221@testset " LinearElasticity2D" begin
209222 model = LinearElasticity2D (λ= 3.0 , μ= 1.0 )
210223 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
224+ test_equilibrium_at_rest_2D (model)
211225end
212226
213227
214228@testset " LinearElasticity3D" begin
215229 model = LinearElasticity3D (λ= 3.0 , μ= 1.0 )
216230 test_derivatives_3D_ (model, Kinematics (Mechano,Solid))
231+ test_equilibrium_at_rest_3D (model)
217232end
218233
219234
220235@testset " NeoHookean3D" begin
221236 model = NeoHookean3D (λ= 3.0 , μ= 1.0 )
222237 test_derivatives_3D_ (model, Kinematics (Mechano,Solid), rtol= 1e-13 )
238+ test_equilibrium_at_rest_3D (model)
223239end
224240
225241
226242@testset " MooneyRivlin2D" begin
227243 model = MooneyRivlin2D (λ= 3.0 , μ1= 1.0 , μ2= 2.0 )
228244 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
245+ test_equilibrium_at_rest_2D (model)
229246end
230247
231248@testset " MooneyRivlin3D" begin
232249 model = MooneyRivlin3D (λ= 3.0 , μ1= 1.0 , μ2= 2.0 )
233250 test_derivatives_3D_ (model,Kinematics (Mechano,Solid), rtol= 1e-13 )
251+ test_equilibrium_at_rest_3D (model)
234252end
235253
236254
237255@testset " NonlinearMooneyRivlin2D" begin
238256 model = NonlinearMooneyRivlin2D (λ= (μParams[1 ] + μParams[2 ]) * 1e2 , μ1= μParams[1 ], μ2= μParams[2 ], α1= μParams[3 ], α2= μParams[4 ])
239257 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
258+ test_equilibrium_at_rest_2D (model)
240259end
241260
242261
243262@testset " Yeoh3D" begin
244263 model = Yeoh3D (λ= 3.0 , C10= 1.0 , C20= 1.0 , C30= 1.0 )
245264 test_derivatives_3D_ (model, Kinematics (Mechano,Solid))
265+ test_equilibrium_at_rest_3D (model)
246266end
247267
248268
249269@testset " NonlinearMooneyRivlin2D_CV" begin
250270 model = NonlinearMooneyRivlin2D_CV (λ= (μParams[1 ] + μParams[2 ]) * 1e2 , μ1= μParams[1 ], μ2= μParams[2 ], α1= μParams[3 ], α2= μParams[4 ], γ= μParams[4 ])
251271 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
272+ test_equilibrium_at_rest_2D (model, atol= 1e-9 )
252273end
253274
254275
255276@testset " NonlinearMooneyRivlin3D" begin
256277 model = NonlinearMooneyRivlin3D (λ= (μParams[1 ] + μParams[2 ]) * 1e2 , μ1= μParams[1 ], μ2= μParams[2 ], α1= μParams[3 ], α2= μParams[4 ])
257278 test_derivatives_3D_ (model,Kinematics (Mechano,Solid), rtol= 1e-13 )
279+ test_equilibrium_at_rest_3D (model)
258280end
259281
260282
261283@testset " IncompressibleNeoHookean2D" begin
262284 model = IncompressibleNeoHookean2D (λ= (μParams[1 ] + μParams[2 ]) * 1e2 , μ= μParams[1 ])
263285 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
286+ test_equilibrium_at_rest_2D (model)
264287end
265288
266289@testset " IncompressibleNeoHookean2D_CV" begin
267290 model = IncompressibleNeoHookean2D_CV (λ= (μParams[1 ] + μParams[2 ]) * 1e2 , μ= μParams[1 ], γ= 3.0 )
268291 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
292+ test_equilibrium_at_rest_2D (model)
269293end
270294
271295
272296@testset " NonlinearIncompressibleMooneyRivlin2D_CV" begin
273297 model = NonlinearIncompressibleMooneyRivlin2D_CV (λ= (μParams[1 ] + μParams[2 ]) * 1e2 , μ= μParams[1 ], α= μParams[3 ], γ= 3.0 )
274298 test_derivatives_2D_ (model, Kinematics (Mechano,Solid))
299+ test_equilibrium_at_rest_2D (model)
275300end
276301
277302
278303@testset " EightChain" begin
279304 model = EightChain (μ= μParams[1 ], N= μParams[2 ])
280305 test_derivatives_3D_ (model, Kinematics (Mechano,Solid),rtol= 1e-13 )
306+ test_equilibrium_at_rest_3D (model)
281307end
282308
283309
302328 @test Ψ (F (∇u), N) == 0.27292220826242186
303329 @test norm (∂Ψu (F (∇u), N)) == 100.64088114687468
304330 @test norm (∂Ψuu (F (∇u), N)) == 46792.35008576098
331+ @test isapprox (Ψ (I2, N), 0.0 , atol= 1e-10 )
305332end
306333
307334
@@ -311,14 +338,16 @@ end
311338@testset " TransverseIsotropy3D" begin
312339 ∇u = TensorValue (1.0 , 2.0 , 3.0 , 4.0 , 5.0 , 6.0 , 7.0 , 8.0 , 9.0 ) * 1e-3
313340 N = VectorValue (1.0 , 2.0 , 3.0 )
341+ N /= norm (N)
314342 model = TransverseIsotropy3D (μ= μParams[5 ], α1= μParams[6 ], α2= μParams[7 ])
315343
316344 Ψ, ∂Ψu, ∂Ψuu = model ()
317345 K= Kinematics (Mechano,Solid)
318346 F, _, _ = get_Kinematics (K)
319- @test Ψ (F (∇u), N) == 269927.3350807581
320- @test norm (∂Ψu (F (∇u), N)) == 947447.8711645481
321- @test norm (∂Ψuu (F (∇u), N)) == 3.8258646319087776e6
347+ @test Ψ (F (∇u), N) == 2.5259068330070704
348+ @test norm (∂Ψu (F (∇u), N)) == 309.14297430663385
349+ @test norm (∂Ψuu (F (∇u), N)) == 81316.15339475962
350+ @test isapprox (Ψ (I3, N), 0.0 , atol= 1e-10 )
322351end
323352
324353
450479@testset " VolumetricEnergy" begin
451480 ∇u = TensorValue (1.0 , 2.0 , 3.0 , 4.0 , 5.0 , 6.0 , 7.0 , 8.0 , 9.0 ) * 1e-3
452481 model = VolumetricEnergy (λ= 0.0 )
453-
454- Ψ, ∂Ψu, ∂Ψuu= model ()
455- K= Kinematics (Mechano,Solid)
456- F, _, _ = get_Kinematics (K)
457-
458- ∂Ψu_ (F) = TensorValue (ForwardDiff. gradient (x -> Ψ (x), get_array (F)))
459- ∂Ψuu_ (F) = TensorValue (ForwardDiff. hessian (x -> Ψ (x), get_array (F)))
460-
461- @test isapprox (∂Ψu (F (∇u)), ∂Ψu_ (F (∇u)); rtol= 1e-14 )
462- @test isapprox (∂Ψuu (F (∇u)), ∂Ψuu_ (F (∇u)); rtol= 1e-14 )
463-
482+ test_derivatives_3D_ (model, Kinematics (Mechano,Solid))
483+ test_equilibrium_at_rest_3D (model)
464484end
465485
466486
741761
742762
743763
744- @test Ψ (F (∇u), H0 (∇φ), N) == 4.000172569336671
764+ @test Ψ (F (∇u), H0 (∇φ), N) == 0.0001725693366710852
745765 @test norm (∂Ψu (F (∇u), H0 (∇φ), N)) == 0.07482084634773895
746766 @test norm (∂Ψφ (F (∇u), H0 (∇φ), N)) == 2.793633631007779e-6
747767 @test norm (∂Ψuu (F (∇u), H0 (∇φ), N)) == 21.74472389462642
782802 # norm(∂Ψφφ_(H0(∇φ))) -norm(∂Ψφφ(F(∇u), H0(∇φ), N))
783803
784804
785- @test Ψ (F (∇u), H0 (∇φ), N) == 4.000172469501178
805+ @test Ψ (F (∇u), H0 (∇φ), N) == 0.0001724695011788059
786806 @test norm (∂Ψu (F (∇u), H0 (∇φ), N)) == 0.07482089298212842
787807 @test norm (∂Ψφ (F (∇u), H0 (∇φ), N)) == 2.8384487487963508e-6
788808 @test norm (∂Ψuu (F (∇u), H0 (∇φ), N)) == 21.744723980670503
801821@testset " ARAP2D" begin
802822 model = ARAP2D (μ= μParams[1 ])
803823 test_derivatives_2D_ (model, Kinematics (Mechano,Solid), rtol= 1e-13 )
824+ test_equilibrium_at_rest_2D (model)
804825end
805826
806827
809830@testset " ARAP2D_regularized" begin
810831 model = ARAP2D_regularized (μ= μParams[1 ])
811832 test_derivatives_2D_ (model, Kinematics (Mechano,Solid),rtol= 1e-13 )
833+ test_equilibrium_at_rest_2D (model)
812834end
813835
814836
830852 # norm(∂Ψuu_(F(∇u))) - norm(∂Ψuu(F(∇u)))
831853 # norm(∂Ψu(F(∇u0)))
832854
833- @test Ψ (F (∇u)) == 6440.959849358168
855+ @test Ψ (F (∇u)) == 0.10816855558641691
834856 @test norm (∂Ψu (F (∇u))) == 52.8548808805944
835857 @test isapprox (norm (∂Ψuu (F (∇u))), 18128.524371074407 , rtol= 1e-14 )
858+ test_equilibrium_at_rest_2D (model)
836859end
837860
838861
857880 # norm(∂Ψu(F(∇u0)))
858881
859882
860- @test Ψ (F (∇u), J_ (F (∇u))) == 6457.022976353012
883+ @test Ψ (F (∇u), J_ (F (∇u))) == 0.10922164405292278
861884 @test norm (∂Ψu (F (∇u), J_ (F (∇u)))) == 52.980951554554586
862885 @test norm (∂Ψuu (F (∇u), J_ (F (∇u)))) == 18172.854611409108
886+ test_equilibrium_at_rest_2D (model)
863887end
864888
865889
0 commit comments