Skip to content

Commit 3375a45

Browse files
authored
Fix quadratic meshing (#108)
* better error handling * fix memory handling of high ordertable * fix quadratic ordering * clean up comments and stdout * add missing header
1 parent 30c4639 commit 3375a45

6 files changed

Lines changed: 298 additions & 262 deletions

File tree

src/_tetgen.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct PyTetgen {
4242
return points_arr;
4343
}
4444

45-
NDArray<int, 2> return_tets() {
45+
NDArray<int, 2> return_tets(bool vtk_indexing = false) {
4646
int n_nodes = io_out.numberofcorners;
4747
int n_cells = io_out.numberoftetrahedra;
4848
auto arr = MakeNDArray<int, 2>({n_cells, n_nodes});
@@ -57,6 +57,26 @@ struct PyTetgen {
5757
}
5858
}
5959

60+
// Convert to VTK style indexing when requested
61+
if (n_nodes == 10 && vtk_indexing) {
62+
for (int i = 0; i < n_cells; ++i) {
63+
int *r = &arr(i, 0);
64+
65+
int t4 = r[4];
66+
int t5 = r[5];
67+
int t6 = r[6];
68+
int t7 = r[7];
69+
int t9 = r[9];
70+
71+
r[4] = t6;
72+
r[5] = t7;
73+
r[6] = t9;
74+
r[7] = t5;
75+
// r[8] unchanged
76+
r[9] = t4;
77+
}
78+
}
79+
6080
return arr;
6181
}
6282

@@ -521,7 +541,7 @@ NB_MODULE(_tetgen, m) { // "_tetgen" must match library name from CMakeLists.txt
521541
.def("return_input_points", &PyTetgen::return_input_points)
522542
.def("return_nodes", &PyTetgen::return_nodes)
523543
.def("return_tetrahedron_attributes", &PyTetgen::return_tetrahedron_attributes)
524-
.def("return_tets", &PyTetgen::return_tets)
544+
.def("return_tets", &PyTetgen::return_tets, nb::arg("vtk_indexing") = false)
525545
.def("return_triface_markers", &PyTetgen::return_triface_markers)
526546
.def("return_trifaces", &PyTetgen::return_trifaces)
527547
.def_prop_ro("n_bg_nodes", &PyTetgen::n_bg_nodes)

0 commit comments

Comments
 (0)