- Improved mesh coarsening. This is by far the biggest change
between versions. Both 2D and 3D coarsening are affected. Coarse mesh
quality for isotropic meshes has improved significantly, as a result
of changing the way coarse mesh vertices are selected. Vertex removal
efficiency is now better in 3D, with typically fewer than one vertex
in a thousand not removed as requested. Anisotropic coarsening
in 2D working very well; in 3D, anisotropic coarsening is miserably
poor because of challenges with mesh connectivity.
- Corrected a series of small errors in mesh quality assessment.
Minimum solid angle and the aspect ratio measures now work in 3D.
Also, ratio of incircle to circumcircle radius is now normalized properly
in 2D.
- Internal changes in how smoothing is handled. These changes
were made to allow solvers to call GRUMMP meshing routines, including
smoothing, without needing to know how GRUMMP handles things internally.
- Re-introduced the “precious boundary” flag. By popular
demand, the flag that tells tetra not to modify the mesh
boundary has been added back to the code. Use this flag only in duress,
because:
- Initial tetrahedralization still adds points to the boundary when
it needs to.
- There are no mesh quality guarantees, or even practical expectations,
unless points can be inserted on the boundary. Things may work out
for you, and they may not.
- Slightly improved diagnostics and on-the-fly repair for bad
input files. Some 3D input files with mis-oriented triangles can
now be fixed. Others are identified as bad input files. Unfortunately,
some can still escape detection and cause code crashes after surface
recovery.
- Documentation now includes overview of algorithms used in GRUMMP.
- Fixed a couple of egregious bugs in the rarely-exercised code for
reading 3D meshes in cell-vertex (FEM) data structure.
- Fixed a small but annoying bug that made new gcc versions
fail to compile.