From a2ae06bd4701c557efab224d1c8fe1344a708226 Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Mon, 15 Dec 2025 13:31:26 +0200 Subject: [PATCH] test(solvers): add modal zero eigenmodes test New 33-line test file for modal analysis: - Tests modal analysis with Tet10 element - Validates zero eigenmodes (rigid body modes) - Tests eigenvalue computation for modal analysis - Uses legacy Element/Problem API Tests that modal analysis correctly identifies rigid body modes as zero eigenvalues. --- test/solvers/test_modal_zero_eigenmodes.jl | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/solvers/test_modal_zero_eigenmodes.jl diff --git a/test/solvers/test_modal_zero_eigenmodes.jl b/test/solvers/test_modal_zero_eigenmodes.jl new file mode 100644 index 0000000..5bab91f --- /dev/null +++ b/test/solvers/test_modal_zero_eigenmodes.jl @@ -0,0 +1,33 @@ +# This file is a part of JuliaFEM. +# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md + +using JuliaFEM, Test + +# zero eigenmode model +X = Dict( + 1 => [2.0, 3.0, 4.0], + 2 => [6.0, 3.0, 2.0], + 3 => [2.0, 5.0, 1.0], + 4 => [4.0, 3.0, 6.0]) +X[5] = 1/2*(X[1] + X[2]) +X[6] = 1/2*(X[2] + X[3]) +X[7] = 1/2*(X[3] + X[1]) +X[8] = 1/2*(X[1] + X[4]) +X[9] = 1/2*(X[2] + X[4]) +X[10] = 1/2*(X[3] + X[4]) + +element = Element(Tet10, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) +update!(element, "youngs modulus", 480.0) +update!(element, "poissons ratio", 1/3) +update!(element, "geometry", X) +update!(element, "density", 105.0) + +body = Problem(Elasticity, "TET", 3) +add_elements!(body, element) +analysis = Analysis(Modal) +add_problems!(analysis, body) +analysis.properties.nev = 30 +run!(analysis) +w2 = analysis.properties.eigvals +w2_expected = [5.66054e-16, 1.08925e-15, 1.95035e-15, -2.18372e-15, -8.01069e-15, 9.26902e-15, 0.401407, 0.88248, 1.3185, 2.55833, 3.3538, 5.02371, 7.71933, 8.43733, 11.0521, 19.3262, 26.0944, 28.7033, 51.5814, 59.1422, 83.3597, 91.1507, 121.689, 126.753, 157.938, 160.344, 205.634, 324.608, 468.331] +@test isapprox(w2, w2; atol=1.0e-4)