Skip to content

Commit d74b70a

Browse files
committed
Implement MshConnectivity for Tri6d2 & Quad9d2, move tests, use insta
1 parent cae78f3 commit d74b70a

16 files changed

+9738
-56
lines changed

assets/meshes/square_quad4_4.msh

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
$MeshFormat
2+
4.1 0 8
3+
$EndMeshFormat
4+
$Entities
5+
4 4 1 0
6+
1 0 0 0 0
7+
2 0.5 0 0 0
8+
3 0.5 0.5 0 0
9+
4 0 0.5 0 0
10+
1 -9.999999997511999e-08 -1e-07 -1e-07 0.5000000999999999 1e-07 1e-07 0 2 1 -2
11+
2 0.4999999 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 2 -3
12+
3 -9.999999997511999e-08 0.4999999 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 3 -4
13+
4 -1e-07 -9.999999997511999e-08 -1e-07 1e-07 0.5000000999999999 1e-07 0 2 4 -1
14+
1 -9.999999997511999e-08 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 4 1 2 3 4
15+
$EndEntities
16+
$Nodes
17+
9 9 1 9
18+
0 1 0 1
19+
1
20+
0 0 0
21+
0 2 0 1
22+
2
23+
0.5 0 0
24+
0 3 0 1
25+
3
26+
0.5 0.5 0
27+
0 4 0 1
28+
4
29+
0 0.5 0
30+
1 1 0 1
31+
5
32+
0.25 0 0
33+
1 2 0 1
34+
6
35+
0.5 0.25 0
36+
1 3 0 1
37+
7
38+
0.25 0.5 0
39+
1 4 0 1
40+
8
41+
0 0.25 0
42+
2 1 0 1
43+
9
44+
0.25 0.25 0
45+
$EndNodes
46+
$Elements
47+
9 16 1 16
48+
0 1 15 1
49+
1 1
50+
0 2 15 1
51+
2 2
52+
0 3 15 1
53+
3 3
54+
0 4 15 1
55+
4 4
56+
1 1 1 2
57+
5 1 5
58+
6 5 2
59+
1 2 1 2
60+
7 2 6
61+
8 6 3
62+
1 3 1 2
63+
9 3 7
64+
10 7 4
65+
1 4 1 2
66+
11 4 8
67+
12 8 1
68+
2 1 3 4
69+
13 1 5 9 8
70+
14 5 2 6 9
71+
15 9 6 3 7
72+
16 8 9 7 4
73+
$EndElements

assets/meshes/square_quad9_4.msh

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
$MeshFormat
2+
4.1 0 8
3+
$EndMeshFormat
4+
$Entities
5+
4 4 1 0
6+
1 0 0 0 0
7+
2 0.5 0 0 0
8+
3 0.5 0.5 0 0
9+
4 0 0.5 0 0
10+
1 -9.999999997511999e-08 -1e-07 -1e-07 0.5000000999999999 1e-07 1e-07 0 2 1 -2
11+
2 0.4999999 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 2 -3
12+
3 -9.999999997511999e-08 0.4999999 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 3 -4
13+
4 -1e-07 -9.999999997511999e-08 -1e-07 1e-07 0.5000000999999999 1e-07 0 2 4 -1
14+
1 -9.999999997511999e-08 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 4 1 2 3 4
15+
$EndEntities
16+
$Nodes
17+
9 25 1 25
18+
0 1 0 1
19+
1
20+
0 0 0
21+
0 2 0 1
22+
2
23+
0.5 0 0
24+
0 3 0 1
25+
3
26+
0.5 0.5 0
27+
0 4 0 1
28+
4
29+
0 0.5 0
30+
1 1 0 3
31+
5
32+
6
33+
7
34+
0.25 0 0
35+
0.125 0 0
36+
0.375 0 0
37+
1 2 0 3
38+
8
39+
9
40+
10
41+
0.5 0.25 0
42+
0.5 0.125 0
43+
0.5 0.375 0
44+
1 3 0 3
45+
11
46+
12
47+
13
48+
0.25 0.5 0
49+
0.375 0.5 0
50+
0.125 0.5 0
51+
1 4 0 3
52+
14
53+
15
54+
16
55+
0 0.25 0
56+
0 0.375 0
57+
0 0.125 0
58+
2 1 0 9
59+
17
60+
18
61+
19
62+
20
63+
21
64+
22
65+
23
66+
24
67+
25
68+
0.25 0.25 0
69+
0.25 0.125 0
70+
0.125 0.25 0
71+
0.125 0.125 0
72+
0.375 0.25 0
73+
0.375 0.125 0
74+
0.25 0.375 0
75+
0.375 0.375 0
76+
0.125 0.375 0
77+
$EndNodes
78+
$Elements
79+
9 16 1 16
80+
0 1 15 1
81+
1 1
82+
0 2 15 1
83+
2 2
84+
0 3 15 1
85+
3 3
86+
0 4 15 1
87+
4 4
88+
1 1 8 2
89+
5 1 5 6
90+
6 5 2 7
91+
1 2 8 2
92+
7 2 8 9
93+
8 8 3 10
94+
1 3 8 2
95+
9 3 11 12
96+
10 11 4 13
97+
1 4 8 2
98+
11 4 14 15
99+
12 14 1 16
100+
2 1 10 4
101+
13 1 5 17 14 6 18 19 16 20
102+
14 5 2 8 17 7 9 21 18 22
103+
15 17 8 3 11 21 10 12 23 24
104+
16 14 17 11 4 19 23 13 15 25
105+
$EndElements

assets/meshes/square_tri3_4.msh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
$MeshFormat
2+
4.1 0 8
3+
$EndMeshFormat
4+
$Entities
5+
4 4 1 0
6+
1 0 0 0 0
7+
2 0.5 0 0 0
8+
3 0.5 0.5 0 0
9+
4 0 0.5 0 0
10+
1 -9.999999997511999e-08 -1e-07 -1e-07 0.5000000999999999 1e-07 1e-07 0 2 1 -2
11+
2 0.4999999 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 2 -3
12+
3 -9.999999997511999e-08 0.4999999 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 3 -4
13+
4 -1e-07 -9.999999997511999e-08 -1e-07 1e-07 0.5000000999999999 1e-07 0 2 4 -1
14+
1 -9.999999997511999e-08 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 4 1 2 3 4
15+
$EndEntities
16+
$Nodes
17+
9 5 1 5
18+
0 1 0 1
19+
1
20+
0 0 0
21+
0 2 0 1
22+
2
23+
0.5 0 0
24+
0 3 0 1
25+
3
26+
0.5 0.5 0
27+
0 4 0 1
28+
4
29+
0 0.5 0
30+
1 1 0 0
31+
1 2 0 0
32+
1 3 0 0
33+
1 4 0 0
34+
2 1 0 1
35+
5
36+
0.25 0.25 0
37+
$EndNodes
38+
$Elements
39+
9 12 1 12
40+
0 1 15 1
41+
1 1
42+
0 2 15 1
43+
2 2
44+
0 3 15 1
45+
3 3
46+
0 4 15 1
47+
4 4
48+
1 1 1 1
49+
5 1 2
50+
1 2 1 1
51+
6 2 3
52+
1 3 1 1
53+
7 3 4
54+
1 4 1 1
55+
8 4 1
56+
2 1 2 4
57+
9 2 5 1
58+
10 1 5 4
59+
11 3 5 2
60+
12 4 5 3
61+
$EndElements

assets/meshes/square_tri6_4.msh

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
$MeshFormat
2+
4.1 0 8
3+
$EndMeshFormat
4+
$Entities
5+
4 4 1 0
6+
1 0 0 0 0
7+
2 0.5 0 0 0
8+
3 0.5 0.5 0 0
9+
4 0 0.5 0 0
10+
1 -9.999999997511999e-08 -1e-07 -1e-07 0.5000000999999999 1e-07 1e-07 0 2 1 -2
11+
2 0.4999999 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 2 -3
12+
3 -9.999999997511999e-08 0.4999999 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 2 3 -4
13+
4 -1e-07 -9.999999997511999e-08 -1e-07 1e-07 0.5000000999999999 1e-07 0 2 4 -1
14+
1 -9.999999997511999e-08 -9.999999997511999e-08 -1e-07 0.5000000999999999 0.5000000999999999 1e-07 0 4 1 2 3 4
15+
$EndEntities
16+
$Nodes
17+
9 13 1 13
18+
0 1 0 1
19+
1
20+
0 0 0
21+
0 2 0 1
22+
2
23+
0.5 0 0
24+
0 3 0 1
25+
3
26+
0.5 0.5 0
27+
0 4 0 1
28+
4
29+
0 0.5 0
30+
1 1 0 1
31+
5
32+
0.25 0 0
33+
1 2 0 1
34+
6
35+
0.5 0.25 0
36+
1 3 0 1
37+
7
38+
0.25 0.5 0
39+
1 4 0 1
40+
8
41+
0 0.25 0
42+
2 1 0 5
43+
9
44+
10
45+
11
46+
12
47+
13
48+
0.25 0.25 0
49+
0.375 0.125 0
50+
0.125 0.125 0
51+
0.125 0.375 0
52+
0.375 0.375 0
53+
$EndNodes
54+
$Elements
55+
9 12 1 12
56+
0 1 15 1
57+
1 1
58+
0 2 15 1
59+
2 2
60+
0 3 15 1
61+
3 3
62+
0 4 15 1
63+
4 4
64+
1 1 8 1
65+
5 1 2 5
66+
1 2 8 1
67+
6 2 3 6
68+
1 3 8 1
69+
7 3 4 7
70+
1 4 8 1
71+
8 4 1 8
72+
2 1 9 4
73+
9 2 9 1 10 11 5
74+
10 1 9 4 11 12 8
75+
11 3 9 2 13 10 6
76+
12 4 9 3 12 13 7
77+
$EndElements

src/io/msh.rs

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use crate::connectivity::{Quad4d2Connectivity, Tet4Connectivity, Tri3d2Connectivity, Tri3d3Connectivity};
1+
use crate::connectivity::{
2+
Quad4d2Connectivity, Quad9d2Connectivity, Tet4Connectivity, Tri3d2Connectivity, Tri3d3Connectivity,
3+
Tri6d2Connectivity,
4+
};
25
use crate::mesh::Mesh;
36
use eyre::{eyre, Context};
47
use nalgebra::allocator::Allocator;
@@ -249,62 +252,9 @@ macro_rules! impl_msh_connectivity {
249252

250253
impl_msh_connectivity!(Tri3d2Connectivity, Tri3, num_nodes = 3);
251254
impl_msh_connectivity!(Tri3d3Connectivity, Tri3, num_nodes = 3);
255+
impl_msh_connectivity!(Tri6d2Connectivity, Tri6, num_nodes = 6);
252256
impl_msh_connectivity!(Quad4d2Connectivity, Qua4, num_nodes = 4);
257+
impl_msh_connectivity!(Quad9d2Connectivity, Qua9, num_nodes = 9);
253258
// Quad4d3Connectivity does not implement ElementConnectivity
254259
//impl_msh_connectivity!(Quad4d3Connectivity, Qua4, num_nodes = 4);
255260
impl_msh_connectivity!(Tet4Connectivity, Tet4, num_nodes = 4);
256-
257-
#[cfg(test)]
258-
mod msh_tests {
259-
use crate::connectivity::{Quad4d2Connectivity, Tet4Connectivity, Tri3d2Connectivity, Tri3d3Connectivity};
260-
use crate::io::msh::load_msh_from_file;
261-
use nalgebra::{U2, U3};
262-
263-
#[test]
264-
fn load_msh_sphere_tet4() -> eyre::Result<()> {
265-
let mesh = load_msh_from_file::<f64, U3, Tet4Connectivity, _>("assets/meshes/sphere_tet4_593.msh")?;
266-
267-
assert_eq!(mesh.vertices().len(), 183);
268-
assert_eq!(mesh.connectivity().len(), 593);
269-
Ok(())
270-
}
271-
272-
#[test]
273-
fn load_msh_rect_tri3d2() -> eyre::Result<()> {
274-
let mesh = load_msh_from_file::<f64, U2, Tri3d2Connectivity, _>("assets/meshes/rectangle_tri3_110.msh")?;
275-
276-
assert_eq!(mesh.vertices().len(), 70);
277-
assert_eq!(mesh.connectivity().len(), 110);
278-
Ok(())
279-
}
280-
281-
#[test]
282-
fn load_msh_rect_tri3d3() -> eyre::Result<()> {
283-
// Loading a 2D triangle mesh to a 3D triangle mesh should work
284-
let mesh = load_msh_from_file::<f64, U3, Tri3d3Connectivity, _>("assets/meshes/rectangle_tri3_110.msh")?;
285-
286-
assert_eq!(mesh.vertices().len(), 70);
287-
assert_eq!(mesh.connectivity().len(), 110);
288-
Ok(())
289-
}
290-
291-
#[test]
292-
fn load_msh_square_quad4d2() -> eyre::Result<()> {
293-
let mesh = load_msh_from_file::<f64, U2, Quad4d2Connectivity, _>("assets/meshes/square_quad4_79.msh")?;
294-
295-
assert_eq!(mesh.vertices().len(), 96);
296-
assert_eq!(mesh.connectivity().len(), 79);
297-
Ok(())
298-
}
299-
300-
/*
301-
#[test]
302-
fn load_msh_square_quad4d3() -> eyre::Result<()> {
303-
let mesh = load_msh_from_file::<f64, U3, Quad4d3Connectivity, _>("assets/meshes/square_quad4_79.msh")?;
304-
305-
assert_eq!(mesh.vertices().len(), 96);
306-
assert_eq!(mesh.connectivity().len(), 79);
307-
Ok(())
308-
}
309-
*/
310-
}

tests/unit_tests/io.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
mod msh;

0 commit comments

Comments
 (0)