Skip to content

Commit

Permalink
Added testing for vertex2simplexdata
Browse files Browse the repository at this point in the history
  • Loading branch information
Kevin-Mattheus-Moerman committed Mar 26, 2024
1 parent d3175f2 commit 2a91646
Showing 1 changed file with 95 additions and 1 deletion.
96 changes: 95 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Test, FileIO, Comodo, Comodo.GeometryBasics
using Test, FileIO, Comodo, Comodo.GeometryBasics, Statistics

# ConnectivitySet

Expand Down Expand Up @@ -1299,6 +1299,7 @@ end
@testset "simplex2vertexdata" verbose = true begin
eps_level = 0.001

# Single face/element
F1 = [[1,2,3,4,5,6]]
V1 = [GeometryBasics.Point3(rand(3)) for _=1:length(F1[1])]

Expand Down Expand Up @@ -1405,6 +1406,99 @@ end

end


@testset "vertex2simplexdata" verbose = true begin
eps_level = 0.001

# Single face/element
F1 = [[1,2,3,4,5,6]]
V1 = [GeometryBasics.Point3(rand(3)) for _=1:length(F1[1])]

# A quad mesh featuring a variation in terms of face areas and vertex connectivity
Mq = cube(1.0)
Fq = faces(Mq)
Vq = coordinates(Mq)
Fq,Vq = subquad(Fq,Vq,1; method=:Catmull_Clark)

# A triangle mesh featuring a variation in terms of face areas and vertex connectivity
Mt = tetrahedron(1.0)
Ft = faces(Mt)
Vt = coordinates(Mt)
Ft,Vt = subtri(Ft,Vt,1; method=:Loop)

# A hexahedral mesh
Eh,Vh,_,_,_ = hexbox([1.0,1.0,1.0],[2,2,2])

@testset "Vector Float64 data" begin
# Single element
DV = collect(Float64,1:length(V1)) # Vertex data (here node number)
DF = vertex2simplexdata(F1,DV)
@test isapprox(DF,[mean(DV)], atol=eps_level)

# Quads
DV = collect(Float64,1:length(Vq)) # Vertex data (here node number)
DF = vertex2simplexdata(Fq,DV)
@test isapprox(DF,[12.75, 11.5, 14.25, 16.0, 13.25, 12.75, 12.75, 12.75, 14.25, 13.75, 12.25, 12.75, 14.25, 14.75, 14.25, 13.75, 14.5, 15.0, 16.25, 15.75, 16.0, 15.5, 16.25, 16.75], atol=eps_level)

# Triangles
DV = collect(Float64,1:length(Vt)) # Vertex data (here node number)
DF = vertex2simplexdata(Ft,DV)
@test isapprox(DF,[8.0, 6.333333333333333, 7.333333333333333, 8.333333333333334, 5.333333333333333, 6.0, 5.666666666666667, 6.333333333333333, 5.333333333333333, 4.333333333333333, 6.333333333333333, 6.333333333333333, 7.333333333333333, 4.666666666666667, 5.666666666666667, 6.666666666666667], atol=eps_level)

# Hexahedral elements
DV = collect(Float64,1:length(Vh)) # Vertex data (here node number)
DF = vertex2simplexdata(Eh,DV)
@test isapprox(DF,[7.5, 8.5, 10.5, 11.5, 16.5, 17.5, 19.5, 20.5], atol=eps_level)
end

@testset "Vector of Vector Float64 data" begin

# Single element
DV = [i*[1.0,2.0,π] for i eachindex(V1)] # Vector data for each vertex
DF = vertex2simplexdata(F1,DV)
@test isapprox(DF,[mean(DV)], atol=eps_level)

# Quads
DV = [i.*[1.0,2.0,π] for i eachindex(Vq)] # Vector data for each vertex
DF = vertex2simplexdata(Fq,DV)
@test isapprox(DF,[[12.75, 25.5, 40.05530633326987], [11.5, 23.0, 36.12831551628262], [14.25, 28.5, 44.76769531365455], [16.0, 32.0, 50.26548245743669], [13.25, 26.5, 41.62610266006476], [12.75, 25.5, 40.05530633326986], [12.75, 25.5, 40.055306333269854], [12.75, 25.5, 40.05530633326986], [14.25, 28.5, 44.76769531365455], [13.75, 27.5, 43.19689898685965], [12.25, 24.5, 38.48451000647496], [12.75, 25.5, 40.05530633326986], [14.25, 28.5, 44.767695313654556], [14.75, 29.5, 46.33849164044945], [14.25, 28.5, 44.767695313654556], [13.75, 27.5, 43.19689898685965], [14.5, 29.0, 45.553093477052], [15.0, 30.0, 47.1238898038469], [16.25, 32.5, 51.050880620834135], [15.75, 31.5, 49.48008429403924], [16.0, 32.0, 50.26548245743669], [15.5, 31.0, 48.69468613064179], [16.25, 32.5, 51.05088062083414], [16.75, 33.5, 52.62167694762904]], atol=eps_level)

# Triangles
DV = [i.*[1.0,2.0,π] for i eachindex(Vt)] # Vector data for each vertex
DF = vertex2simplexdata(Ft,DV)
@test isapprox(DF,[[8.0, 16.0, 25.132741228718345], [6.333333333333333, 12.666666666666666, 19.896753472735355], [7.333333333333333, 14.666666666666666, 23.03834612632515], [8.333333333333334, 16.666666666666668, 26.179938779914945], [5.333333333333333, 10.666666666666666, 16.755160819145562], [6.0, 12.0, 18.84955592153876], [5.666666666666667, 11.333333333333334, 17.802358370342162], [6.333333333333333, 12.666666666666666, 19.896753472735355], [5.333333333333333, 10.666666666666666, 16.755160819145562], [4.333333333333333, 8.666666666666666, 13.613568165555769], [6.333333333333333, 12.666666666666666, 19.896753472735355], [6.333333333333333, 12.666666666666666, 19.896753472735355], [7.333333333333333, 14.666666666666666, 23.03834612632515], [4.666666666666667, 9.333333333333334, 14.66076571675237], [5.666666666666667, 11.333333333333334, 17.80235837034216], [6.666666666666667, 13.333333333333334, 20.943951023931955]], atol=eps_level)

# Hexahedral elements
DV = [i.*[1.0,2.0,π] for i eachindex(Vh)] # Vector data for each face
DF = vertex2simplexdata(Ft,DV)
@test isapprox(DF,[[8.0, 16.0, 25.132741228718345], [6.333333333333333, 12.666666666666666, 19.896753472735355], [7.333333333333333, 14.666666666666666, 23.03834612632515], [8.333333333333334, 16.666666666666668, 26.179938779914945], [5.333333333333333, 10.666666666666666, 16.755160819145562], [6.0, 12.0, 18.84955592153876], [5.666666666666667, 11.333333333333334, 17.802358370342162], [6.333333333333333, 12.666666666666666, 19.896753472735355], [5.333333333333333, 10.666666666666666, 16.755160819145562], [4.333333333333333, 8.666666666666666, 13.613568165555769], [6.333333333333333, 12.666666666666666, 19.896753472735355], [6.333333333333333, 12.666666666666666, 19.896753472735355], [7.333333333333333, 14.666666666666666, 23.03834612632515], [4.666666666666667, 9.333333333333334, 14.66076571675237], [5.666666666666667, 11.333333333333334, 17.80235837034216], [6.666666666666667, 13.333333333333334, 20.943951023931955]], atol=eps_level)
end

@testset "Vector of Matrix Float64 data" begin

# Single element
DV = [i*[1.0 2.0 3.0; 4.0 5.0 6.0] for i eachindex(V1)] # Matrix data for each vertex
DF = vertex2simplexdata(F1,DV)
@test isapprox(DF,[mean(DV)], atol=eps_level)

# Quads
DV = [i.*[1.0 2.0 3.0; 4.0 5.0 6.0] for i eachindex(Vq)] # Matrix data for each vertex
DF = vertex2simplexdata(Fq,DV)
@test isapprox(DF,[[12.75 25.5 38.25; 51.0 63.75 76.5], [11.5 23.0 34.5; 46.0 57.5 69.0], [14.25 28.5 42.75; 57.0 71.25 85.5], [16.0 32.0 48.0; 64.0 80.0 96.0], [13.25 26.5 39.75; 53.0 66.25 79.5], [12.75 25.5 38.25; 51.0 63.75 76.5], [12.75 25.5 38.25; 51.0 63.75 76.5], [12.75 25.5 38.25; 51.0 63.75 76.5], [14.25 28.5 42.75; 57.0 71.25 85.5], [13.75 27.5 41.25; 55.0 68.75 82.5], [12.25 24.5 36.75; 49.0 61.25 73.5], [12.75 25.5 38.25; 51.0 63.75 76.5], [14.25 28.5 42.75; 57.0 71.25 85.5], [14.75 29.5 44.25; 59.0 73.75 88.5], [14.25 28.5 42.75; 57.0 71.25 85.5], [13.75 27.5 41.25; 55.0 68.75 82.5], [14.5 29.0 43.5; 58.0 72.5 87.0], [15.0 30.0 45.0; 60.0 75.0 90.0], [16.25 32.5 48.75; 65.0 81.25 97.5], [15.75 31.5 47.25; 63.0 78.75 94.5], [16.0 32.0 48.0; 64.0 80.0 96.0], [15.5 31.0 46.5; 62.0 77.5 93.0], [16.25 32.5 48.75; 65.0 81.25 97.5], [16.75 33.5 50.25; 67.0 83.75 100.5]], atol=eps_level)

# Triangles
DV = [i.*[1.0 2.0 3.0; 4.0 5.0 6.0] for i eachindex(Vt)] # Matrix data for each vertex
DF = vertex2simplexdata(Ft,DV)
@test isapprox(DF,[[8.0 16.0 24.0; 32.0 40.0 48.0], [6.333333333333333 12.666666666666666 19.0; 25.333333333333332 31.666666666666668 38.0], [7.333333333333333 14.666666666666666 22.0; 29.333333333333332 36.666666666666664 44.0], [8.333333333333334 16.666666666666668 25.0; 33.333333333333336 41.666666666666664 50.0], [5.333333333333333 10.666666666666666 16.0; 21.333333333333332 26.666666666666668 32.0], [6.0 12.0 18.0; 24.0 30.0 36.0], [5.666666666666667 11.333333333333334 17.0; 22.666666666666668 28.333333333333332 34.0], [6.333333333333333 12.666666666666666 19.0; 25.333333333333332 31.666666666666668 38.0], [5.333333333333333 10.666666666666666 16.0; 21.333333333333332 26.666666666666668 32.0], [4.333333333333333 8.666666666666666 13.0; 17.333333333333332 21.666666666666668 26.0], [6.333333333333333 12.666666666666666 19.0; 25.333333333333332 31.666666666666668 38.0], [6.333333333333333 12.666666666666666 19.0; 25.333333333333332 31.666666666666668 38.0], [7.333333333333333 14.666666666666666 22.0; 29.333333333333332 36.666666666666664 44.0], [4.666666666666667 9.333333333333334 14.0; 18.666666666666668 23.333333333333332 28.0], [5.666666666666667 11.333333333333334 17.0; 22.666666666666668 28.333333333333332 34.0], [6.666666666666667 13.333333333333334 20.0; 26.666666666666668 33.333333333333336 40.0]], atol=eps_level)

# Hexahedral elements
DV = [i.*[1.0 2.0 3.0; 4.0 5.0 6.0] for i eachindex(Vh)] # Matrix data for each face
DF = vertex2simplexdata(Eh,DV)
@test isapprox(DF,[[7.5 15.0 22.5; 30.0 37.5 45.0], [8.5 17.0 25.5; 34.0 42.5 51.0], [10.5 21.0 31.5; 42.0 52.5 63.0], [11.5 23.0 34.5; 46.0 57.5 69.0], [16.5 33.0 49.5; 66.0 82.5 99.0], [17.5 35.0 52.5; 70.0 87.5 105.0], [19.5 39.0 58.5; 78.0 97.5 117.0], [20.5 41.0 61.5; 82.0 102.5 123.0]], atol=eps_level)
end
end


@testset "simplexcenter" begin
eps_level = 0.001
F, V = geosphere(2, 1.0)
Expand Down

0 comments on commit 2a91646

Please sign in to comment.