mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-09 12:42:19 +00:00
Improving test coverage: test_lagrange.jl
This commit is contained in:
+55
-18
@@ -3,6 +3,7 @@
|
||||
|
||||
using JuliaFEM
|
||||
using JuliaFEM.Testing
|
||||
using JuliaFEM: description
|
||||
|
||||
ALL_ELEMENTS = [
|
||||
Seg2, Seg3,
|
||||
@@ -13,9 +14,21 @@ ALL_ELEMENTS = [
|
||||
Hex8, Hex20, Hex27
|
||||
]
|
||||
|
||||
ALL_ELEMENTS_NODES = [
|
||||
[1,2], [1,2,3],
|
||||
[1,2,3], [1,2,3,4,5,6], [1,2,3,4,5,6,7],
|
||||
[1,2,3,4], [1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8,9],
|
||||
[1,2,3,4], [1,2,3,4,5,6,7,8,9,10],
|
||||
[1,2,3,4,5,6],
|
||||
[1,2,3,4,5,6,7,8],
|
||||
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,17,18,19,20],
|
||||
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,17,18,19,20,
|
||||
21,22,23,24,25,26,27]
|
||||
]
|
||||
|
||||
@testset "Evaluating basis" begin
|
||||
for T in ALL_ELEMENTS
|
||||
el = Element(T)
|
||||
for (T, nod) in zip(ALL_ELEMENTS,ALL_ELEMENTS_NODES)
|
||||
el = Element(T,nod)
|
||||
nnodes = length(el)
|
||||
for (i, X) in enumerate(get_reference_coordinates(T))
|
||||
Ni = vec(el(X))
|
||||
@@ -26,9 +39,9 @@ ALL_ELEMENTS = [
|
||||
end
|
||||
end
|
||||
|
||||
function get_volume{T<:AbstractElement}(::Type{T})
|
||||
function get_volume{T<:AbstractElement}(::Type{T},nodes)
|
||||
X = get_reference_coordinates(T)
|
||||
element = Element(T)
|
||||
element = Element(T,nodes)
|
||||
update!(element, "geometry", X)
|
||||
V = 0.0
|
||||
for ip in get_integration_points(element)
|
||||
@@ -37,20 +50,44 @@ function get_volume{T<:AbstractElement}(::Type{T})
|
||||
return V
|
||||
end
|
||||
|
||||
RESULTS = [2.0, 2.0, 0.5, 0.5, 0.5, 2.0^2, 2.0^2,
|
||||
2.0^2, 1/6, 1/6, 1.0, 2.0^3, 2.0^3, 2.0^3,]
|
||||
|
||||
@testset "Calculate reference element length/area/volume" begin
|
||||
@test isapprox(get_volume(Seg2), 2.0)
|
||||
@test isapprox(get_volume(Seg3), 2.0)
|
||||
@test isapprox(get_volume(Tri3), 0.5)
|
||||
@test isapprox(get_volume(Tri6), 0.5)
|
||||
@test isapprox(get_volume(Tri7), 0.5)
|
||||
@test isapprox(get_volume(Quad4), 2.0^2)
|
||||
@test isapprox(get_volume(Quad8), 2.0^2)
|
||||
@test isapprox(get_volume(Quad9), 2.0^2)
|
||||
@test isapprox(get_volume(Tet4), 1/6)
|
||||
@test isapprox(get_volume(Tet10), 1/6)
|
||||
@test isapprox(get_volume(Wedge6), 1.0)
|
||||
@test isapprox(get_volume(Hex8), 2.0^3)
|
||||
@test isapprox(get_volume(Hex20), 2.0^3)
|
||||
@test isapprox(get_volume(Hex27), 2.0^3)
|
||||
for (T, nod, res) in zip(ALL_ELEMENTS,ALL_ELEMENTS_NODES,
|
||||
RESULTS)
|
||||
@test isapprox(get_volume(T,nod), res)
|
||||
end
|
||||
end
|
||||
|
||||
SIZES = [(1,2), (1,3), (2,3), (2,6), (2,7), (2,4),
|
||||
(2,8), (2,9), (3,4), (3,10), (3,6)]
|
||||
|
||||
@testset "element size" begin
|
||||
for (T, nod, res) in zip(ALL_ELEMENTS,ALL_ELEMENTS_NODES, SIZES)
|
||||
@test size(Element(T,nod)) == res
|
||||
end
|
||||
end
|
||||
|
||||
@testset "element length" begin
|
||||
for i in 1:length(ALL_ELEMENTS)
|
||||
typ = ALL_ELEMENTS[i]
|
||||
vec = ALL_ELEMENTS_NODES[i]
|
||||
el = Element(typ,vec)
|
||||
@test length(el) == length(vec)
|
||||
end
|
||||
end
|
||||
|
||||
DESC = ["2 node segment", "3 node segment", "3 node triangle",
|
||||
"6 node triangle", "7 node triangle", "4 node quadrangle",
|
||||
"8 node Serendip quadrangle", "9 node quadrangle",
|
||||
"4 node tetrahedral element", "10 node tetrahedral element",
|
||||
"6 node prismatic element (wedge)",
|
||||
"8 node hexahedral element", "20 node hexahedral element",
|
||||
"27 node hexahedral element"]
|
||||
|
||||
@testset "element description" begin
|
||||
for (T, res) in zip(ALL_ELEMENTS, DESC)
|
||||
@test description(Type(T)) == res
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user