#
Common command line options for mesh manipulation executables

All of the GRUMMP mesh generation, improvement, and coarsening executables share a number of command-line options in common.

- [-i `basefilename`] This argument is mandatory and specifies the stem of the mesh file name; both relative and absolute path names are acceptable. Extensions will be added to this stem as appropriate for mesh input and output, quality file output (`.qual`), and message output (`.msg`). For example, the message output file will be `basefilename.msg`. Because `basefilename` is used in its entirety, all output files will be in the same directory as the input file.
  For `tri` and `tetra`, the default input file extension is `.bdry`; these files specify the boundary of the domain to be meshed in terms of its underlying geometry. See Sections 3.1 and 3.3 for information on the format of these files.
  The output file format and extensions for all the GRUMMP meshing executables are user-definable. In particular, it is possible to write node locations in one file and connectivity in another, or any other combination of dividing information between files. This capability allows the programs to exchange data with any other preprocessor or analysis software that uses ASCII files for mesh data. A full description of how to use this feature of GRUMMP can be found in Section 3.2.
  The mesh modification executables (`meshopt[23]d` and `coarsen[23]d`) append `.out` to the output file names they would otherwise use to prevent possible file name collisions with input files.
  In addition to writing output in a wide range of file formats, `meshopt2d` and `coarsen2d` can read any file format that they can write.2.1
- [-A `arg`] If the argument is non-zero, use Jonathan Shewchuk's adaptive geometric predicates to evaluate orientation and in-ball primitives. These predicates are carefully designed to be extremely efficient, so there is not a large performance penalty for using them. On the other hand, my experience is that there is little benefit in terms of robustness to using these predicates. There may, however, be cases where this helps, so feel free to try this option in difficult cases. Default: 0.
- [-b`arg`] If the argument is non-zero, the boundary of the mesh is treated as precious: no points are inserted on the boundary, boundary points are not moved by smoothing, and local reconnection in three dimensions does not change boundary connectivity. Notwithstanding, `tetra` will insert points on the boundary if necessary to create a constrained tetrahedralization. Use of this argument is not recommended, because it can severely degrade mesh quality! Default: boundary is changeable.
- [-q `arg`] Specify a cell quality measure to be evaluated; the quality data is binned for use in producing histograms; the maximum and minimum quality measures are also retained for each evaluation. Five quality measures are supported in two dimensions, and ten in three dimensions. Note that this option affects output only: no effort is made to optimize using the selected measure.
  For each measure, the accompanying table shows the minimum and maximum attainable values, along with the number of bins and range which those bins cover; the latter is more than the attainable range for angle measures. Default: 2 (all angles [dihedrals in 3D]).

  Maximum/minimum/all angles
    in the cell (both solid and dihedral angles are available in three dimensions).
  Marcum's sliver measure [3D].
    This measure takes the ratio of tetrahedron volume to the cube of the mean edge length, with normalization so that an equilateral tetrahedron has quality 1. The measure is designed to have low values for slivers, tetrahedra which have both very large and very small dihedral angles.
  Marcum's skewness measure. [3D]
    This measure takes the ratio of volume to the cube of the circumradius of a tetrahedron; again, normalization makes quality equal to 1 for an equilateral tetrahedron. This measure is designed to detect skewed tetrahedra. For more information on these last two quality measures, see [4].
  Aspect ratio I,
    the ratio of inscribed circle (sphere) radius to circumcircle (sphere) radius, with a constant multiplier included so that an equilateral cell has quality 1. A degenerate cell has quality 0 according to this measure.
  Aspect ratio II,
    the ratio of area of the triangle (volume of tetrahedron) to perimeter squared (surface area to the ). Again a constant multiplier is used so that an equilateral cell has quality 1 and a degenerate cell has quality 0.
  Shortest edge to circumradius,
    the ratio of the shortest edge length to the circumradius of the cell. This is the quality measure that Jonathan Shewchuk's scheme guarantees to produce excellent values for, and is used during 3D insertion. A shortcoming of this measure is that 3D slivers, which are bad cells, can have high values of short-edge to circumradius ratio. This measure is normalized so that a perfect cell has quality of 1 and most degenerate cells have quality 0.

Measure | `arg` | Min value | Max value | Bins | Min bin | Max bin Max angle (2D)

- [-g G] Change the rate at which cell size can change as you move across the mesh. Length scale in the mesh can change by no more than as you move a distance . Accordingly, larger values of lead to mesh that are more uniform. Default: 1.
- [-r R] Resolve geometric features with about cells. Increasing therefore increases both resolution and mesh size. This option replaces the old -s option.
- [-l filename] (That's the letter ell, not the number 1.) This option can be used to specify length scale for mesh refinement: that is, adaptive refinement (`meshopt2d/3d`). Specifically, each line in the file should contain a vertex index and a length scale for that vertex; some or all vertices can have length scale specified, in any order. This length scale is assigned to the given vertex, and mesh grading updates the length scale for nearby vertices.