MOOSE Newsletter (November 2020)

Application Development Tutorial

The new tutorial has arrived! And with it comes a restructured Getting Started section of our website and a consolidated Examples and Tutorials page that serves as a one-stop shop for all of our available learning content. The Application Development Tutorial is based on our classic "Coupled Darcy Pressure and Thermomechanics Tutorial," used for demonstrations in the Live Workshop. All of this is intended to serve as a comprehensive introduction to the MOOSE Framework.

We have released this new content only partially finished, but we hope to complete it in the coming months. We are continuing to work hard to improve the experience of new users, and veteran ones, by ensuring that they have easy access to the resources they need to solve their multiphysics problems with MOOSE.

Reporter System

A generalization of the Postprocessor and VectorPostprocessor system was created. This new Reporter system allows for arbitrary types to be computed and output (via JSON). For more information please review see the Reporter System.

Unit Conversion in Input Files

A physical units parsing and conversion helper system was added to MOOSE. A unit object can be constructed form a string (e.g. N*m, eV/at, kg*(m/s)^2, 1/s, m^-3). The unit parser supports the *,/, and ^ operators as well as parenthesis (, ) to formulate composite units. Metric prefixes are supported (e.g. MPa, kg, mm).

In input files, values can be converted inline using the brace expansion syntax ${units value in_unit -> out_unit}, for example

  • ${units 1.5 bar -> N/m^2} (pressure conversion)

  • ${units 600 degC -> K} (temperature conversion from Celsius to Kelvin)

  • ${units 1.3 J/m^2 -> eV/nm^2} (interfacial energy conversion)

Global AD Indexing

There is a new configuration option in MOOSE: --with-ad-indexing-type. The allowed options are global and local. The default value is local, but MOOSE may soon transition to be global by default. If a user requests global indexing, they will be using a sparse derivative container which has an additional data member for storing indices. With global indexing, these indices correspond to global dof indices. Global indexing allows for very simple code implementation and it also makes it easy to compose AD quantities with non-local information. For example using global AD indexing it would be straightforward to build an aggregate/post-processor type quantity, use it in an ADKernel, and collect the aggregate derivative information. Such a use could potentially generate a dense system matrix, consuming significant memory and also computational resources building the sparsity pattern, but having that flexibility is valuable. Perhaps a better example would be building physics that incorporates both higher-dimensional and lower-dimensional variables; global indexing would make developing these physics and associated "kernels" much simpler.

Expanded finite volume framework support

MOOSE has expanded its finite volume support significantly. Users can now block restrict finite volume variables and use finite volume variables as auxiliary variables in auxiliary kernel computation. Additionally if MOOSE is configured with Global AD Indexing, MOOSE now supports gradient reconstruction as well as cross-diffusion corrections for non-orthogonal meshes.

MeshGenerators and RelationshipManagers

RelationshipManagers are now added to MeshGenerators before the latter are executed. This ensures that when running with a distributed mesh, remote elements that are required later in the simulation are not deleted when the mesh generator is executed.

MeshModifiers Removed

The MeshModifier objects were finally removed after over a year of being deprecated. The [MeshGenerators] input block was also removed. All generator objects should be placed in the [Mesh] block.

commentnote:MooseMesh based object should not be developed

In the future the MooseMesh based objects will also be removed, but we do not have a time frame for that at the moment. If you need to perform custom mesh operations, please create a MeshGenerator object.

SQA Status Reports

We improved our ability to monitor documentation shortcomings for our software quality program by creating a status report tool. This will aid the continuous improvement of the documentation for MOOSE and MOOSE-based applications. The status reports for MOOSE are provided on MOOSE Software Quality.

Updated Testing Machines

We are in the process of updating our testing hardware. In the coming months expect to see increased speed from our automated testing.

Mesh Adaptivity Enhancement

Mesh adaptivity was not done correctly when both displaced distributed mesh and exodus output were used because the displaced and undisplaced meshes were out of sync. While users are encouraged to use nemesis output for distributed meshes, the exodus output is useful for setting up regression tests. The issue was fixed by gathering both meshes to the zeroth MPI rank (when using exodus) and adding the same relationship managers for both meshes.

!