Skip to content

Commit 9ed433e

Browse files
authored
Optimize simplexify of simplicial mesh (#1003)
* Optimize simplexify of simplicial mesh * Replace Tuple by ntuple * More adjustments
1 parent 790f8fa commit 9ed433e

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/discretization.jl

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -215,38 +215,42 @@ simplexify(poly::Polyhedron) = discretize(poly, ManualDiscretization())
215215
simplexify(multi::Multi) = mapreduce(simplexify, merge, parent(multi))
216216

217217
function simplexify(mesh::Mesh)
218+
# retrieve vertices and topology
218219
points = vertices(mesh)
219-
elems = elements(mesh)
220220
topo = topology(mesh)
221-
connec = elements(topo)
221+
222+
# check if there is something to do
223+
all(issimplex, elements(topo)) && return mesh
222224

223225
# initialize vector of global indices
224226
ginds = Vector{Int}[]
225227

226228
# simplexify each element and append global indices
227-
for (e, c) in zip(elems, connec)
228-
# simplexify single element
229-
mesh′ = simplexify(e)
230-
topo′ = topology(mesh′)
231-
connec′ = elements(topo′)
229+
for connec in elements(topo)
230+
# materialize element and indices
231+
elem = materialize(connec, points)
232+
inds = indices(connec)
232233

233-
# global indices
234-
inds = indices(c)
234+
# simplexify element
235+
mesh′ = simplexify(elem)
236+
topo′ = topology(mesh′)
237+
connecs′ = elements(topo′)
235238

236239
# convert from local to global indices
237-
einds = [[inds[i] for i in indices(c′)] for c′ in connec′]
240+
einds = [[inds[i] for i in indices(c′)] for c′ in connecs′]
238241

239242
# save global indices
240243
append!(ginds, einds)
241244
end
242245

243246
# simplex type for parametric dimension
244247
PL = paramdim(mesh) == 2 ? Triangle : Tetrahedron
248+
NV = nvertices(PL)
245249

246250
# new connectivities
247-
newconnec = connect.(Tuple.(ginds), PL)
251+
newconnecs = [connect(ntuple(i -> inds[i], NV), PL) for inds in ginds]
248252

249-
SimpleMesh(points, newconnec)
253+
SimpleMesh(points, newconnecs)
250254
end
251255

252256
# ----------------

0 commit comments

Comments
 (0)