GRUMMP  Generation and Refinement of Unstructured, MixedElement
Meshes
in Parallel
Goals of the GRUMMP Project
The goal of the GRUMMP project is to develop automatic mesh generation
software for unstructured meshes with mixed element types. The software
should produce highquality meshes that meet userdefined mesh density
requirements, using elements appropriate for the geometry and physics
of
a particular problem.
Automatic mesh generation for complex two and three dimensional
domains
is a topic of intensive research. It is imperative that automatic mesh
generation tools be capable of generating quality finite element and
finite
volume meshes. There must be a balance between resolution of the
boundary
and surface features and complexity of the problem. In addition, for
problems
with isotropic physics, element aspect ratio must be small to minimize
linear system condition number and interpolation error. On the other
hand,
problems with anisotropic physics (for example, a shear layer in
viscous
fluid flow) require highly anisotropic elements for efficient solution.
A further level of complication is that for some physical problems and
applications, quadrilateral (2D) or hexahedral (3D) elements are
preferred,
even though filling space with high quality elements is easier using
triangular
(2D) or tetrahedral (3D) elements.
A generalpurpose automatic mesh generator should address all of
these
issues without excessive user intervention. We envision a system in
which
common types of physical problems have predefined mesh sizing and
element
aspect ratio functions, allowing easy generation of meshes for these
applications
areas. For flexibility and generality, the user will also be able to
prescribe
these functions (for totally different applications) or modify the
predefined
behaviors (to provide a quality mesh in the wake of an airplane wing,
for
example).
GRUMMP addresses these issues by implementing mesh manipulation
primitives
to generate or modify existing meshes so that criteria for element size
and quality are met. In addition, automatic computation of local length
scale is performed to provide a default in cases where solutionbased
adaptive
length scales are not available.
Current Status of GRUMMP
The current release of GRUMMP is version 0.7.0. This version consists
of
ten executable programs. More information is available in the online
user manual about general command
line options, command line options specific to 2D or 3D meshing, and input
and output file formats.

tri generates twodimensional triangular isotropic
unstructured
meshes. The input can include not only straight line segments, but also
circles, circular arcs, Bezier curves, and interpolated splines.
Internal
boundaries are also allowed, supporting simultaneous meshing of
multiple
subdomains. Provided that no small angles exist in the input, the
output
mesh is guaranteed to have wellshaped triangles (theory: angles >
about
26 degrees; practice: > about 30 degrees). Also, the output mesh is
of
optimal size.

meshopt2d improves existing twodimensional triangular
isotropic
unstructured meshes, providing the same quality guarantees as
tri
while preserving the length scale of the input mesh.

coarsen2d produces a triangular isotropic unstructured
mesh with
approximately twice the local length scale of the input mesh. Also, coarsen2d
does a credible job of coarsening meshes with anisotropic,
quasistructured
fragments embedded in them; both isotropic and anisotropic coarsening
of
anisotropic mesh fragments is possible.

surfins2d inserts a given curve into an existing triangular unstructured
mesh, leaving the mesh untouched far from the curve and preserving mesh
quality throughout the domain. There is also support for
offsetting a surface to produce thin layers between multiple added surfaces.

tetra generates threedimensional tetrahedral isotropic
unstructured
meshes. The input must be a polyhedral surface, including possible
internal
boundaries. Provided that no small angles exist in the input, the
output
mesh is guaranteed to have no tetrahedra with circumradius more than
sqrt(2)
times the length of the shortest edge. In practice, with
postprocessing,
the worst dihedral angle in the mesh is often in the range of
1520°.
Again, the output mesh is of optimal size.

meshopt3d improves existing threedimensional tetrahedral
isotropic
unstructured meshes by smoothing and swapping. While there are no
guarantees
on output mesh quality, meshopt3d typically improves meshes
significantly.

coarsen3d produces a tetrahedral isotropic unstructured
mesh with
approximately twice the local length scale of the input mesh.
Coarsening
of anisotropic unstructured meshes does not currently work well.


surfins3d inserts a given triangulated surface into an existing tetrahedral unstructured
mesh. The surface is splined and resampled to a length scale
appropriate for the background mesh or the curvature of the surface,
whichever is smaller; this reduces or eliminates artifacts from the
original surface. Just as in 2D, the mesh is untouched far from the
surface and mesh quality is preserved throughout the domain. There
is also preliminary support for
offsetting a surface to produce thin layers between multiple added surfaces.
scat2d performs linear interpolation of twodimensional
scattered
data.

scat3d performs linear interpolation of threedimensional
scattered
data.
GRUMMP Links

GRUMMP is available via anonymous ftp as ftp://tetra.mech.ubc.ca/pub/GRUMMP/GRUMMP.tar.gz.
This is a symbolic link to the most recent version (currently 0.7.0).
GRUMMP
is available free for noncommercial use. See the online version of the
license agreement for details.

A guide to installing GRUMMP is found here.

The complete User Guide is available in
HTML,
PDF, or
gzipped PostScript formats.
 The biggest change for 0.7.0 is the addition of support for
inserting curves and surfaces into existing meshes. For a complete
list of changes in this version, see
Changes.
 Take a look at our todo
list to see what's on tap for the future.

A list of known bugs is also online.

Algorithms used in GRUMMP.

Publications related to
GRUMMP.
User Services
Bug Reporting
Report bugs to cfog@mech.ubc.ca.
Always include the command line used and the error message that was
given.
If at all possible, include the input file (gzipped and uuencoded, for
large files) as well to be sure that I can reproduce the problem.