MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / subdivide_hex

Function subdivide_hex

python/pymesh/meshutils/generate_box_mesh.py:226–283  ·  view source on GitHub ↗

Subdivide hex into 8**order sub-cells. Corner ordering: Edge orders: 7 _______ 6 ___2___ /: /| 7/: 6/| z 4 /______/ | /___1__/ | | | : 5| | | 11 | |10 | y | :... |.| 8

(corners, order)

Source from the content-addressed store, hash-verified

224 return mesh, hex_indices
225
226def subdivide_hex(corners, order):
227 """ Subdivide hex into 8**order sub-cells.
228 Corner ordering: Edge orders:
229 7 _______ 6 ___2___
230 /: /| 7/: 6/| z
231 4 /______/ | /___1__/ | |
232 | : 5| | | 11 | |10 | y
233 | :... |.| 8| :.3. |.| | /
234 | . 3 | /2 | 4 9| / |/
235 |_______|/ |_______|/5 /-------x
236 0 1 0
237 """
238 if order == 0:
239 return [corners]
240 else:
241 corners = np.array(corners)
242 centroid = np.mean(corners, axis=0)
243
244 faces = np.array([
245 [0, 3, 2, 1], # bottom
246 [4, 5, 6, 7], # top
247 [1, 2, 6, 5], # right
248 [0, 4, 7, 3], # left
249 [0, 1, 5, 4], # front
250 [7, 6, 2, 3], # back
251 ])
252 face_centers = np.array([np.mean(corners[face], axis=0)
253 for face in faces])
254
255 edge = np.array([
256 [0, 1], [4, 5], [7, 6], [3, 2], # along X
257 [0, 3], [1, 2], [5, 6], [4, 7], # along Y
258 [0, 4], [1, 5], [2, 6], [3, 7], # along Z
259 ])
260 edge_centers = np.mean(corners[edge], axis=1)
261
262 subcells = [
263 [corners[0], edge_centers[0], face_centers[0], edge_centers[4],
264 edge_centers[8], face_centers[4], centroid, face_centers[3] ],
265 [edge_centers[0], corners[1], edge_centers[5], face_centers[0],
266 face_centers[4], edge_centers[9], face_centers[2], centroid],
267 [edge_centers[4], face_centers[0], edge_centers[3], corners[3],
268 face_centers[3], centroid, face_centers[5], edge_centers[11]],
269 [face_centers[0], edge_centers[5], corners[2], edge_centers[3],
270 centroid, face_centers[2], edge_centers[10], face_centers[5]],
271
272 [edge_centers[8], face_centers[4], centroid, face_centers[3],
273 corners[4], edge_centers[1], face_centers[1], edge_centers[7]],
274 [face_centers[4], edge_centers[9], face_centers[2], centroid,
275 edge_centers[1], corners[5], edge_centers[6], face_centers[1]],
276 [face_centers[3], centroid, face_centers[5], edge_centers[11],
277 edge_centers[7], face_centers[1], edge_centers[2], corners[7]],
278 [centroid, face_centers[2], edge_centers[10], face_centers[5],
279 face_centers[1], edge_centers[6], corners[6], edge_centers[2]] ]
280 subcell_corners = []
281 for cell in subcells:
282 subcell_corners += subdivide_hex(cell, order-1)
283 return subcell_corners

Callers 2

hex_to_tetFunction · 0.85
generate_3D_box_meshFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected