@@ -215,38 +215,42 @@ simplexify(poly::Polyhedron) = discretize(poly, ManualDiscretization())
215215simplexify (multi:: Multi ) = mapreduce (simplexify, merge, parent (multi))
216216
217217function 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 )
250254end
251255
252256# ----------------
0 commit comments