MeshDivisions

The MeshDivisions system is designed to be able to subdivide the mesh arbitrarily. It associates a contiguously numbered single-indexing to regions of the mesh. It can match many of the pre-existing ways of sub-dividing the mesh:

Some new simple ways to subdivide the mesh:

Divisions can be combined through nesting, using a NestedDivision. The onus lies on the user to have the nesting make sense.

commentnote

An alternative option to distribute a division object would be to use a Positions object within the definition of the object, for example the center of a CylindricalGridDivision. This has not been implemented yet. Please reach out to a MOOSE developer if this is of interest.

Indexing the entire mesh or not

Each MeshDivision object can keep track of whether the entire mesh is indexed by the MeshDivision. This can be expensive to check at any point, because the mesh could deform or because the bins of the MeshDivision for the divisions change. Each MeshDivision object should either perform a rigorous check before considering that the entire mesh is indexed, or make a conservative assumption that the entire mesh is not indexed in the division.

Postprocessing with MeshDivisions

For now, the mesh divisions can only be output using a MeshDivisionAux. We are planning to be able to compute averages, integrals, and various reductions on mesh divisions, please stay tuned.

Transferring with MeshDivisions

This feature is a work in progress.

commentnote

Please let us know on GitHub Discussions how you are using the MeshDivisions system so we can include your techniques on this page!

Multi-dimensional indexing

This feature is not implemented. We always boil down nested binning (in X, Y and Z for example) down to a single division index. If you cannot do so for your problem, we could consider introducing multi-dimensional indexes. Please get in touch with a MOOSE developer to discuss this.