test(fields): add LocalField structure test

Test file included in main test/runtests.jl
Tests LocalField{T,G,R,GR} structure for material evaluation
This commit is contained in:
Jukka Aho
2025-12-15 06:32:57 +02:00
parent b0897a40e3
commit 6514c025d0
+69
View File
@@ -0,0 +1,69 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
using Test
using JuliaFEM
using Tensors
@testset "LocalField" begin
@testset "Scalar field (Temperature)" begin
# Create temperature field at a point
T = 300.0
∇T = Vec{3}((1.0, 2.0, 3.0))
= 0.5
∇Ṫ = Vec{3}((0.1, 0.2, 0.3))
T_local = LocalField(T, ∇T, , ∇Ṫ)
@test T_local.value == 300.0
@test T_local.gradient == Vec{3}((1.0, 2.0, 3.0))
@test T_local.rate == 0.5
@test T_local.gradient_rate == Vec{3}((0.1, 0.2, 0.3))
# Type stability
@test typeof(T_local) == LocalField{Float64, Vec{3,Float64}, Float64, Vec{3,Float64}}
end
@testset "Vector field (Displacement)" begin
# Create displacement field at a point
u = Vec{3}((0.1, 0.2, 0.3))
∇u = Tensor{2,3}((1.0, 0.1, 0.0,
0.1, 1.0, 0.0,
0.0, 0.0, 1.0))
= Vec{3}((0.01, 0.02, 0.03))
∇u̇ = Tensor{2,3}((0.001, 0.0, 0.0,
0.0, 0.001, 0.0,
0.0, 0.0, 0.001))
u_local = LocalField(u, ∇u, , ∇u̇)
@test u_local.value == u
@test u_local.gradient == ∇u
@test u_local.rate ==
@test u_local.gradient_rate == ∇u̇
# Type stability
@test typeof(u_local) == LocalField{Vec{3,Float64}, Tensor{2,3,Float64,9}, Vec{3,Float64}, Tensor{2,3,Float64,9}}
end
@testset "Quasi-static case (rate = 0)" begin
# Quasi-static: rate = 0, but gradient_rate is computed from increments
u = Vec{3}((0.1, 0.2, 0.3))
∇u = Tensor{2,3}((1.01, 0.0, 0.0,
0.0, 1.02, 0.0,
0.0, 0.0, 1.03))
= zero(Vec{3}) # No velocity in quasi-static
∇u̇ = Tensor{2,3}((0.01, 0.0, 0.0,
0.0, 0.02, 0.0,
0.0, 0.0, 0.03)) # Still computed from increment!
u_local = LocalField(u, ∇u, , ∇u̇)
@test u_local.value == u
@test u_local.rate == zero(Vec{3})
@test u_local.gradient_rate zero(Tensor{2,3}) # Gradient rate is NOT zero!
end
# NOTE: create_local_field_namedtuple() was removed - use interpolate_local_fields() instead
# See test/elements/test_interpolate_local_fields.jl for the real implementation tests
end