Improving test coverage: test_lagrange.jl

This commit is contained in:
Frondelius
2017-01-03 22:11:27 +02:00
parent 6a0a7f76ff
commit a8005ce78d
+55 -18
View File
@@ -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