# GRUMMP

The goal of the GRUMMP project is to develop automatic mesh generation software for unstructured meshes with mixed element types. The software should produce high-quality meshes that meet user-defined 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 general-purpose 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 solution-based adaptive length scales are not available.

## Current Status of GRUMMP

The current release of GRUMMP is version 0.7.0. This version consists of eight executable programs and the libraries that support them. 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 two-dimensional 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 well-shaped triangles (theory: angles > about 26 degrees; practice: > about 30 degrees). Also, the output mesh is of optimal size.

**meshopt2d**improves existing two-dimensional 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, quasi-structured fragments embedded in them; both isotropic and anisotropic coarsening of anisotropic mesh fragments is possible.

**tetra**generates three-dimensional 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 post-processing, the worst dihedral angle in the mesh is often in the range of 15-20°. Again, the output mesh is of optimal size.

**meshopt3d**improves existing three-dimensional 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.

**scat2d**performs linear interpolation of two-dimensional scattered data.**scat3d**performs linear interpolation of three-dimensional scattered data.

## GRUMMP Links

- GRUMMP is available via anonymous ftp. This is a symbolic link to the most recent version (currently 0.7.0). GRUMMP is available free for non-commercial use. See the online version of the license agreement for details.

- 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 (2D) and surfaces (3D) into existing unstructured meshes; see the documentation for more details. For a complete list of changes in this version, see Changes.

## Bug Reporting

To report a bug, use the New Ticket link above, which is publicly accessible. Always include the command line used and the error message that was given. If at all possible, include the input file(s) as well to be sure that we can reproduce the problem.

For a complete list of local wiki pages, see TitleIndex.