| ca04dac2 | 24-Aug-2015 |
Toby Isaac <tisaac@ices.utexas.edu> |
Plex: shift tree in DMPlexCreateGhosts()
- Ancestor faces don't create ghosts: only leaves are used for flux calculations - Shift the indices in the tree. *NOTE* This should not work yet. I hav
Plex: shift tree in DMPlexCreateGhosts()
- Ancestor faces don't create ghosts: only leaves are used for flux calculations - Shift the indices in the tree. *NOTE* This should not work yet. I haven't been conforming to Matt's (cells, vertices, edges, faces) ordering of strata, I've been doing (cells, edges, faces, vertices). DMPlexShiftPoint_Internal() assumes Matt's ordering, I'd like to make it agnostic.
show more ...
|
| 3fe31fa2 | 07-Aug-2015 |
Toby Isaac <tisaac@ices.utexas.edu> |
plex: fix tet refinement for stable element shape
Each refined tetrahedron defines a change of bases that maps the corners of the parent to the corners of the child. If we rescale this transform so
plex: fix tet refinement for stable element shape
Each refined tetrahedron defines a change of bases that maps the corners of the parent to the corners of the child. If we rescale this transform so that the determinant is 1, we get a volume preserving distortion of the parent tetrahedron.
One sufficient condition for stable tetrahedral refinement is for all of these transforms to form a finite group: then each of the recursively refined tets will fall into one of a fixed set of congruency classes.
A classic stable refinement pattern from Freudenthal [1] and Bey [2] is used by HHG grids [3], which is good for producing refinement patterns that match regular grids and only a few congruency classes. This method, however, inverts the signed volume of some refined tetrahedra, which we don't want in DMPlex. Sign reversal could be avoid, but we would have to tag two different types of tetrahedra, which we also don't want in DMPlex.
I did a brute force search for a transformation. Starting with the old, unstable refinement pattern, I wrote a script that rotated the four interior tetrahedra independently, reporting all the combinations that formed a finite group. There turned out to be a few, so I selected the one with the smallest group size (12, which is twice the size of the group using Freudenthal-Bey refinement). I then somehow figured out how to apply these rotations in the CellRefiner code.
As a result, testing shape regularity with plex ex1 now yields:
$ ./ex1 -dim 3 -interpolate -dm_refine_hierarchy 5 -test_shape Mesh with 196608 cells, shape condition numbers: min = 3, max = 8.77496, mean = 5.27739, stddev = 1.26754 Mesh with 24576 cells, shape condition numbers: min = 3, max = 8.77496, mean = 5.28768, stddev = 1.2648 Mesh with 3072 cells, shape condition numbers: min = 3, max = 8.77496, mean = 5.28715, stddev = 1.26312 Mesh with 384 cells, shape condition numbers: min = 3, max = 8.77496, mean = 5.23795, stddev = 1.263 Mesh with 48 cells, shape condition numbers: min = 4, max = 8.77496, mean = 5.01933, stddev = 1.2307 Mesh with 6 cells, shape condition numbers: min = 4, max = 5.47723, mean = 4.2462, stddev = 0.550529
I am now a tetrahedron. Like the old Shaker hymn says, "'Tis a gift to be simplicial."
[1] Freudenthal, H.: Simplizialzerlegungen von beschraenkter Flachheit. Ann. Math. 43, 580-582 (1992).
[2] Bey, J.: Tetrahedral Grid Refinement. Computing 55, 355-378 (1995).
[3] Bergen, B., Gradl, T., Ruede, U., Huelsemann, F.: A massively parallel multigrid method for finite elements
show more ...
|