Skip to content

Commit 943c953

Browse files
committed
add comprehensive tests for connectivity construction
1 parent c18617b commit 943c953

2 files changed

Lines changed: 241 additions & 0 deletions

File tree

-24.9 KB
Binary file not shown.

test/test_connectivity.py

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
import pytest
2+
from pathlib import Path
3+
import uxarray as ux
4+
import numpy as np
5+
6+
from uxarray.constants import INT_DTYPE
7+
from uxarray.constants import INT_FILL_VALUE as fv
8+
9+
10+
# ─── Fixtures ─────────────────────────────────────────────────────────────────────────────────────────────────────────
11+
12+
13+
@pytest.fixture()
14+
def uxgrid():
15+
grid_path = (
16+
Path(__file__).parent / "meshfiles" / "ugrid" / "quad-hexagon" / "grid.nc"
17+
)
18+
return ux.open_grid(grid_path)
19+
20+
21+
# ─── Node Connectivity ────────────────────────────────────────────────────────────────────────────────────────────────
22+
23+
def test_node_edge_connectivity(uxgrid):
24+
node_edges = uxgrid.node_edge_connectivity.values
25+
26+
expected_node_edges = np.array(
27+
[
28+
[0, 1, 2],
29+
[0, 3, 4],
30+
[3, 5, fv],
31+
[5, 6, fv],
32+
[6, 7, 8],
33+
[1, 7, 9],
34+
[10, 11, fv],
35+
[10, 12, fv],
36+
[13, 14, fv],
37+
[13, 15, fv],
38+
[16, 17, fv],
39+
[16, 18, fv],
40+
[2, 11, 14],
41+
[4, 15, fv],
42+
[8, 18, fv],
43+
[9, 12, 17],
44+
],
45+
dtype=INT_DTYPE,
46+
)
47+
48+
# Expected connectivity variables
49+
assert "face_node_connectivity" in uxgrid.connectivity
50+
assert "edge_node_connectivity" in uxgrid.connectivity
51+
# node_edge_connectivity is derived from edge_node_connectivity
52+
assert "node_edge_connectivity" in uxgrid.connectivity
53+
54+
np.testing.assert_array_equal(node_edges, expected_node_edges)
55+
56+
57+
def test_node_face_connectivity(uxgrid):
58+
node_faces = uxgrid.node_face_connectivity.values
59+
60+
expected_node_faces = np.array(
61+
[
62+
[0, 1, 2],
63+
[0, 2, fv],
64+
[0, fv, fv],
65+
[0, fv, fv],
66+
[0, 3, fv],
67+
[0, 1, 3],
68+
[1, fv, fv],
69+
[1, fv, fv],
70+
[2, fv, fv],
71+
[2, fv, fv],
72+
[3, fv, fv],
73+
[3, fv, fv],
74+
[1, 2, fv],
75+
[2, fv, fv],
76+
[3, fv, fv],
77+
[1, 3, fv],
78+
],
79+
dtype=INT_DTYPE,
80+
)
81+
82+
# Expected connectivity variables
83+
assert "face_node_connectivity" in uxgrid.connectivity
84+
# node_edge_connectivity is derived from face_node_connectivity
85+
assert "node_face_connectivity" in uxgrid.connectivity
86+
87+
np.testing.assert_array_equal(node_faces, expected_node_faces)
88+
89+
90+
def test_node_node_connectivity(uxgrid):
91+
with pytest.raises(NotImplementedError):
92+
node_nodes = uxgrid.node_node_connectivity.values
93+
94+
95+
# ─── Edge Connectivity ────────────────────────────────────────────────────────────────────────────────────────────────
96+
97+
98+
def test_edge_node_connectivity(uxgrid):
99+
edge_nodes = uxgrid.edge_node_connectivity.values
100+
101+
expected_edge_nodes = np.array(
102+
[
103+
[0, 1],
104+
[0, 5],
105+
[0, 12],
106+
[1, 2],
107+
[1, 13],
108+
[2, 3],
109+
[3, 4],
110+
[4, 5],
111+
[4, 14],
112+
[5, 15],
113+
[6, 7],
114+
[6, 12],
115+
[7, 15],
116+
[8, 9],
117+
[8, 12],
118+
[9, 13],
119+
[10, 11],
120+
[10, 15],
121+
[11, 14],
122+
],
123+
dtype=INT_DTYPE,
124+
)
125+
# Expected connectivity variables
126+
# edge_node_connectivity is derived from face_node_connectivity
127+
assert "face_node_connectivity" in uxgrid.connectivity
128+
assert "edge_node_connectivity" in uxgrid.connectivity
129+
130+
np.testing.assert_array_equal(expected_edge_nodes, edge_nodes)
131+
132+
133+
def test_edge_edge_connectivity(uxgrid):
134+
with pytest.raises(NotImplementedError):
135+
edge_edges = uxgrid.edge_edge_connectivity.values
136+
137+
138+
def test_edge_face_connectivity(uxgrid):
139+
edge_faces = uxgrid.edge_face_connectivity.values
140+
141+
expected_edge_faces = np.array(
142+
[
143+
[0, 2],
144+
[0, 1],
145+
[1, 2],
146+
[0, fv],
147+
[2, fv],
148+
[0, fv],
149+
[0, fv],
150+
[0, 3],
151+
[3, fv],
152+
[1, 3],
153+
[1, fv],
154+
[1, fv],
155+
[1, fv],
156+
[2, fv],
157+
[2, fv],
158+
[2, fv],
159+
[3, fv],
160+
[3, fv],
161+
[3, fv],
162+
],
163+
dtype=INT_DTYPE,
164+
)
165+
166+
# Expected connectivity variables
167+
assert "face_node_connectivity" in uxgrid.connectivity
168+
assert "edge_node_connectivity" in uxgrid.connectivity
169+
assert "edge_face_connectivity" in uxgrid.connectivity
170+
# face_edge_connectivity is derived from edge_face_connectivity
171+
assert "face_edge_connectivity" in uxgrid.connectivity
172+
173+
print(uxgrid.connectivity)
174+
175+
np.testing.assert_array_equal(expected_edge_faces, edge_faces)
176+
177+
178+
# ─── Face Connectivity ────────────────────────────────────────────────────────────────────────────────────────────────
179+
def test_face_node_connectivity(uxgrid):
180+
expected_face_nodes = np.array(
181+
[
182+
[0, 1, 2, 3, 4, 5],
183+
[15, 7, 6, 12, 0, 5],
184+
[0, 12, 8, 9, 13, 1],
185+
[4, 14, 11, 10, 15, 5],
186+
],
187+
dtype=INT_DTYPE,
188+
)
189+
190+
face_nodes = uxgrid.face_node_connectivity.values
191+
192+
# Expected connectivity variables (no additional ones should be constructed)
193+
assert "face_node_connectivity" in uxgrid.connectivity
194+
assert len(uxgrid.connectivity) == 1
195+
196+
np.testing.assert_array_equal(expected_face_nodes, face_nodes)
197+
198+
199+
def test_face_edge_connectivity(uxgrid):
200+
expected_face_edges = np.array(
201+
[
202+
[0, 3, 5, 6, 7, 1],
203+
[12, 10, 11, 2, 1, 9],
204+
[2, 14, 13, 15, 4, 0],
205+
[8, 18, 16, 17, 9, 7],
206+
],
207+
dtype=INT_DTYPE,
208+
)
209+
210+
face_edges = uxgrid.face_edge_connectivity.values
211+
212+
# Expected connectivity variables after construction
213+
assert "face_node_connectivity" in uxgrid.connectivity
214+
assert "face_edge_connectivity" in uxgrid.connectivity
215+
assert "edge_node_connectivity" in uxgrid.connectivity
216+
217+
np.testing.assert_array_equal(face_edges, expected_face_edges)
218+
219+
220+
def test_face_face_connectivity(uxgrid):
221+
face_faces = uxgrid.face_face_connectivity.values
222+
223+
# TODO: The size here should be condensed to a max of 4
224+
expected_face_faces = np.array(
225+
[
226+
[2, 1, 3, fv, fv, fv],
227+
[0, 2, 3, fv, fv, fv],
228+
[0, 1, fv, fv, fv, fv],
229+
[0, 1, fv, fv, fv, fv],
230+
],
231+
dtype=INT_DTYPE,
232+
)
233+
234+
# Expected connectivity variables after construction
235+
assert "face_node_connectivity" in uxgrid.connectivity
236+
assert "edge_node_connectivity" in uxgrid.connectivity
237+
assert "edge_face_connectivity" in uxgrid.connectivity
238+
assert "face_edge_connectivity" in uxgrid.connectivity
239+
assert "face_face_connectivity" in uxgrid.connectivity
240+
241+
np.testing.assert_array_equal(face_faces, expected_face_faces)

0 commit comments

Comments
 (0)