Interval Matching

Each meshing scheme in CUBIT imposes constraints on the intervals assigned to the curves bounding the surface or volume. For example, map meshing a surface requires that intervals on opposite sides are equal. Meshing any surface with quadrilaterals, regardless of scheme, requires an even number of intervals on its boundary. For connected surfaces and assemblies, these interval constraints must be resolved globally to ensure that each surface and volume will be meshable with the assigned scheme. Beyond satisfying these constraints, the number of intervals (mesh size) should be what the user wants, or as close to it as possible. The global solution technique implemented in CUBIT is referred to as "interval matching."

Interval matching is automatically performed by the mesh command before generating elements. Invoking interval matching manually is useful if the user wishes to mesh only some entities but wants to ensure it will be possible to mesh all entities later: e.g. match intervals on all the volumes, but just mesh surface 3 for now. Interval matching can also be called to check whether the assigned schemes, corners, edge types, and intervals are compatible.

The command syntax for manually matching intervals is the following:

Match Intervals {Surface|Volume|Body|Group} <range>

Here the entity list can be any mixed collection of groups, bodies, volumes, surfaces and curves.


If the quality of the interval solution is poor, try changing the interval count on individual entities, or, e.g., changing some schemes from map to pave to provide more freedom, and rerunning interval matching.

There may be no interval solution. To improve the chances of finding a solution, at least as a test, try setting intervals to soft firmness. Even with soft intervals, a solution might not exist if the mapping corners or sweep directions do not line up right.

If there is no solution, the following command may help in determining the cause (this is not yet supported by IIA in Cubit 15.6):

Match Intervals {Surface|Volume|Body|Group} <range> [Seed Curve <range>]
[Assign Groups [Only|Infeasible]] [Map|Pave]

Specifying Assign Groups will create groups that contain independent subproblems of the global problem. Specifying Assign Groups Only will group independent subproblems, but the algorithm will not attempt to solve these subproblems. Assign Groups Infeasible will put each independent subproblem with no solution into specially named groups. Often poor corner choices and surface meshing schemes will be illuminated this way. If Map or Pave is specified, then only subproblems involving mapping or paving constraints will be considered. If a Seed Curve is specified, then only those subproblems containing that curve will be considered.

Interval Solver Version

For consistent results running old journal files, the user may want to use the old solver.

set interval version {<cubit version number>|default}

list interval version

Setting version >= 15.6 uses IIA (2020 solver) and enables small-loop bounds. Using a prior version uses BBIA (1997 solver). Both solvers solve the problem
min f(x,g)
s.t. Ax=b
x in [lo,hi]
A, x, b integer
but the objective f is slightly different so the solution may be different. General problems of this form are known to be difficult because the solution must be integer valued, and neither solver is guaranteed to find the global minimum. Here x are the intervals and internal variables; b are the bounds on those variables; A and b are the constraints, including hardsets; g are the goals, the user-desired number of intervals for each curve. The objective f models the desire to minimize the maximum relative change in mesh size. In mathematical language, for the new IIA solver f is the maximum lexicographic vector of the ratio achieved:goal if achieved>goal, else goal:achieved. The older solver uses an approximation to IIA's f.

IIA Solver >= Cubit 15.6

Cubit 15.6 in 2020 introduced "Incremental Interval Assignment (IIA)" based on integer linear algebra. It robustly and quickly finds an integer solutions to Ax=b, and tries to improve it by adding integer vectors from A's nullspace to satisfy the bounds and come close to the goals.

IIA solutions tend to be slightly coarser than BBIA, often one interval less, and closer to the user goals and the global optimum. IIA is faster than BBIA, dramatically faster (6000x) in some cases involving submapping and hard-sets. Please send the Cubit team any example which takes longer than 1 second.

BBIA Solver < Cubit 15.6

The solution method that Cubit introduced in 1996 was to use linear programming to find a floating point solution to Ax=b, then use branch-and-bound rounding to try to find a nearby integer solution. The first part is fast and robust, the second part slow and error prone. Linear programming is limited to linear objective functions, so the goal:achieved ratio is only approximated and extreme size differences can give unexpected compromises.

For BBIA, advanced users may wish to experiment with the following:

Set Match Intervals Rounding {on|off}

Set Match Intervals Fast {on|off}

Set Match Intervals Delta <interval_difference = 0.>

If set match intervals rounding is set to on, the intervals will be rounded to the nearest integer. If the setting is off, the intervals will be rounded toward the user specified intervals.

If set match intervals fast is set to off a single curve will be fixed per branch and bound iteration. Note in rare cases this may produce better meshes, but will generally be slower. If set on, multiple curves will be fixed per iteration.

Set match intervals delta affects the convergence tolerance for the optimization. Here delta means the difference between a curve's goal and assigned intervals. A larger value makes matching intervals faster, but the quality of the solution may be worse. The default is 0.0. Hint: try 1.0.