Skip to content

Commit f09fdd4

Browse files
MTCaminducer
authored andcommitted
Reorder box generator facial/boundary adjacency loops
1 parent af68e2d commit f09fdd4

File tree

1 file changed

+46
-42
lines changed

1 file changed

+46
-42
lines changed

meshmode/mesh/generation.py

Lines changed: 46 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,53 +1214,57 @@ def generate_box_mesh(axis_coords, order=1, *, coord_dtype=np.float64,
12141214
facial_adjacency_groups = None
12151215
face_vertex_indices_to_tags = {}
12161216
boundary_tags = list(boundary_tag_to_face.keys())
1217+
nbnd_tags = len(boundary_tags)
12171218

1218-
if boundary_tags:
1219+
if nbnd_tags > 0:
12191220
vert_index_to_tuple = {
12201221
vertex_indices[itup]: itup
12211222
for itup in np.ndindex(shape)}
12221223

1223-
for tag in boundary_tags:
1224-
# Need to map the correct face vertices to the boundary tags
1225-
for face in boundary_tag_to_face[tag]:
1226-
if len(face) != 2:
1227-
raise ValueError("face identifier '%s' does not "
1228-
"consist of exactly two characters" % face)
1229-
1230-
side, axis = face
1231-
try:
1232-
axis = axes.index(axis)
1233-
except ValueError as exc:
1234-
raise ValueError(
1235-
f"unrecognized axis in face identifier '{face}'") from exc
1236-
if axis >= dim:
1237-
raise ValueError("axis in face identifier '%s' does not exist in %dD"
1238-
% (face, dim))
1239-
1240-
if side == "-":
1241-
vert_crit = 0
1242-
elif side == "+":
1243-
vert_crit = shape[axis] - 1
1244-
else:
1245-
raise ValueError("first character of face identifier '%s' is not"
1246-
"'+' or '-'" % face)
1247-
1248-
for ielem in range(0, grp.nelements):
1249-
for ref_fvi in grp.face_vertex_indices():
1250-
fvi = grp.vertex_indices[ielem, ref_fvi]
1251-
try:
1252-
fvi_tuples = [vert_index_to_tuple[i] for i in fvi]
1253-
except KeyError:
1254-
# Happens for interior faces of "X" meshes because
1255-
# midpoints aren't in vert_index_to_tuple. We don't
1256-
# care about them.
1257-
continue
1258-
1259-
if all(fvi_tuple[axis] == vert_crit for fvi_tuple in fvi_tuples):
1260-
key = frozenset(fvi)
1261-
face_vertex_indices_to_tags.setdefault(key, []).append(tag)
1262-
1263-
if boundary_tags:
1224+
for ielem in range(0, grp.nelements):
1225+
for ref_fvi in grp.face_vertex_indices():
1226+
fvi = grp.vertex_indices[ielem, ref_fvi]
1227+
try:
1228+
fvi_tuples = [vert_index_to_tuple[i] for i in fvi]
1229+
except KeyError:
1230+
# Happens for interior faces of "X" meshes because
1231+
# midpoints aren't in vert_index_to_tuple. We don't
1232+
# care about them.
1233+
continue
1234+
1235+
for tag in boundary_tags:
1236+
# Need to map the correct face vertices to the boundary tags
1237+
for face in boundary_tag_to_face[tag]:
1238+
if len(face) != 2:
1239+
raise ValueError(
1240+
"face identifier '%s' does not "
1241+
"consist of exactly two characters" % face)
1242+
1243+
side, axis = face
1244+
try:
1245+
axis = axes.index(axis)
1246+
except ValueError as exc:
1247+
raise ValueError(
1248+
"unrecognized axis in face identifier "
1249+
f"'{face}'") from exc
1250+
if axis >= dim:
1251+
raise ValueError("axis in face identifier '%s' "
1252+
"does not exist in %dD" % (face, dim))
1253+
1254+
if side == "-":
1255+
vert_crit = 0
1256+
elif side == "+":
1257+
vert_crit = shape[axis] - 1
1258+
else:
1259+
raise ValueError("first character of face identifier"
1260+
" '%s' is not '+' or '-'" % face)
1261+
1262+
if all(fvi_tuple[axis] == vert_crit
1263+
for fvi_tuple in fvi_tuples):
1264+
key = frozenset(fvi)
1265+
face_vertex_indices_to_tags.setdefault(key,
1266+
[]).append(tag)
1267+
12641268
from meshmode.mesh import _compute_facial_adjacency_from_vertices
12651269
facial_adjacency_groups = _compute_facial_adjacency_from_vertices(
12661270
[grp], np.int32, np.int8, face_vertex_indices_to_tags)

0 commit comments

Comments
 (0)