diff --git a/test/domains/continuum/test_material_element_lab.jl b/test/domains/continuum/test_material_element_lab.jl new file mode 100644 index 0000000..4d714a1 --- /dev/null +++ b/test/domains/continuum/test_material_element_lab.jl @@ -0,0 +1,42 @@ +# SPDX-FileCopyrightText: 2015-2026 Jukka Aho +# SPDX-License-Identifier: MIT + +using Test +using LinearAlgebra +using JuliaFEM + +@testset "Material element lab (symmetric uniaxial Hex8 coupon)" begin + L = 1.0 + mesh = material_lab_single_hex8_brick(; L = L) + @test nelements(mesh) == 1 + + S = @DOFSet{u::DOF{Displacement{3}, Vertex}} + elements, handler = create_elements!(mesh, Element{Hex8, Lagrange{1}, S}) + + δx = 1.0e-4 + E = 210e9 + ν = 0.3 + u = material_lab_linear_elastic_uniaxial_solve(mesh, handler, elements, E, ν, δx) + + @test all(isfinite, u) + for nid in get_nodes_in_set(mesh, :xmax) + ud = get_node_dofs(handler, Int(nid)) + @test u[ud[1]] ≈ δx rtol = 1e-8 atol = 1e-12 + end + for nid in get_nodes_in_set(mesh, :xmin) + ud = get_node_dofs(handler, Int(nid)) + @test abs(u[ud[1]]) < 1e-12 + end + for nid in get_nodes_in_set(mesh, :ymin) + ud = get_node_dofs(handler, Int(nid)) + @test abs(u[ud[2]]) < 1e-12 + end + for nid in get_nodes_in_set(mesh, :zmin) + ud = get_node_dofs(handler, Int(nid)) + @test abs(u[ud[3]]) < 1e-12 + end + + bc = hex8_symmetric_uniaxial_eliminated_dirichlet(mesh, handler, δx) + @test bc isa EliminatedDirichlet + @test length(bc.fixed_dofs) == length(bc.values) +end