-
Notifications
You must be signed in to change notification settings - Fork 55
/
test_mesh.py
143 lines (88 loc) · 3.22 KB
/
test_mesh.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import os
import numpy as np
import pytest
from mikeio import Mesh
@pytest.fixture
def tri_mesh():
filename = os.path.join("tests", "testdata", "odense_rough.mesh")
return Mesh(filename)
@pytest.fixture
def mixed_mesh():
filename = os.path.join("tests", "testdata", "quad_tri.mesh")
return Mesh(filename)
def test_get_number_of_elements(tri_mesh):
msh = tri_mesh
assert msh.n_elements == 654
def test_element_coordinates(tri_mesh):
msh = tri_mesh
ec = msh.element_coordinates
assert ec.shape == (654, 3)
assert ec[0, 0] > 212000.0
assert ec[0, 1] > 6153000.0
def test_read_mixed_mesh(mixed_mesh):
msh = mixed_mesh
assert msh.n_nodes == 798
el_tbl_vec = np.hstack(msh.element_table)
assert len(el_tbl_vec) > 3 * msh.n_elements
assert len(el_tbl_vec) < 4 * msh.n_elements
assert np.all(el_tbl_vec >= 0)
assert np.all(el_tbl_vec < msh.n_nodes)
def test_read_write_mixed_mesh(mixed_mesh, tmpdir):
msh = mixed_mesh
outfilename = os.path.join(tmpdir.dirname, "quad_tri_v2.mesh")
msh.write(outfilename)
msh2 = Mesh(outfilename)
assert os.path.exists(outfilename)
assert np.all(np.hstack(msh2.element_table) == np.hstack(msh.element_table))
assert np.all(msh2.element_coordinates == msh.element_coordinates)
def test_node_coordinates(tri_mesh):
msh = tri_mesh
nc = msh.node_coordinates
assert nc.shape == (399, 3)
def test_get_land_node_coordinates(tri_mesh):
msh = tri_mesh
nc = msh.node_coordinates[msh.geometry.codes == 1]
assert nc.shape == (134, 3)
def test_get_bad_node_coordinates(tri_mesh):
msh = tri_mesh
with pytest.raises(Exception):
nc = msh.get_node_coords(code="foo")
def test_set_z(tri_mesh):
filename = os.path.join("tests", "testdata", "odense_rough.mesh")
msh = tri_mesh
zn = msh.node_coordinates[:, 2]
zn[zn < -3] = -3
msh.node_coordinates[:, 2] = zn
zn = msh.node_coordinates[:, 2]
assert zn.min() == -3
def test_set_codes(tri_mesh):
msh = tri_mesh
codes = msh.geometry.codes
assert msh.geometry.codes[2] == 2
codes[codes == 2] = 7 # work directly on reference
assert msh.geometry.codes[2] == 7
new_codes = msh.geometry.codes.copy()
new_codes[new_codes == 7] = 9
msh.geometry.codes = new_codes # assign from copy
assert msh.geometry.codes[2] == 9
with pytest.raises(ValueError):
# not same length
msh.geometry.codes = codes[0:4]
def test_write(tri_mesh, tmpdir):
outfilename = os.path.join(tmpdir.dirname, "simple.mesh")
msh = tri_mesh
msh.write(outfilename)
assert os.path.exists(outfilename)
def test_write_part(tri_mesh, tmpdir):
outfilename = os.path.join(tmpdir.dirname, "simple_sub.mesh")
msh = tri_mesh
msh.write(outfilename, elements=list(range(0, 100)))
assert os.path.exists(outfilename)
def test_write_mesh_from_dfsu(tmpdir):
outfilename = os.path.join(tmpdir.dirname, "quad_tri.mesh")
dfsufilename = os.path.join("tests", "testdata", "FakeLake.dfsu")
msh = Mesh(dfsufilename)
msh.write(outfilename)
msh2 = Mesh(outfilename)
assert os.path.exists(outfilename)
assert np.all(np.hstack(msh2.element_table) == np.hstack(msh.element_table))