MOOSE News (June 2019)

Revamped Mortar FEM

MortarConstraint has been revamped. Mortar now relies on an AutomaticMortarGeneration object that, as its name suggests, automatically generates a mortar segment mesh for performing integrations. For static mesh problems the mortar segment mesh generation is done once upon initial setup. For dynamic problems with a displaced mesh, mortar mesh generation is done every residual evaluation. We have verified that the new mortar system satisfies a prior error estimates, e.g. in the L2 norm we observe order 3 and order 2.5 convergence for the primal and lagrange multiplier variables respectively for a P2P1 discretization, as well as 2 and 1.5 for P1P1 and P1P0. Plots of these results as well as some technical discussion can be found on the mortar github issue. Additionally, an excellent overview of the mortar implementation is given in this technical report. Examples of using the new mortar constraint can be found in the $MOOSE_DIR/test/tests/mortar directory. These examples demonstrate use of mortar with conforming and non-conforming meshes, as well as for periodic boundary conditions. Physics examples include solution continuity, thermal, and mechanical contact. In the latter case a finite difference Jacobian is used; however, a follow-on PR will demonstrate use of automatic differentiation and PJFNK for solving frictionless and frictional contact with the new mortar constraint system.

PorousFlow: Reduction of Numerical Diffusion

A new type of numerical stabilization has been added to PorousFlow to complement the existing "full upwind" and "no stabilization" choices. The aim is to reduce numerical diffusion. The code is based on the theoretical work of Kuzmin and Turek. Users are strongly encouraged to experiment with this new feature so we can collectively learn the strengths and weaknesses in real simulations. Only minor changes to input files are needed to activate the new stabilization. The numerical stabilization lead page lists pros and cons of various stabilization schemes and provides links to pages that explain and quantify numerical diffusion.

Stochastic Tools "Batch" Mode

The Stochastic Tools module now includes the ability to run full and transient solves using "batch" mode, which is useful when a MultiApp contains a large number of sub-applications. In batch mode the MultiApp creates a single sub-application and re-uses it to perform the multiple simulations, allowing for reduced memory usage when compared to the default behavior. For more information please refer to Stochastic Tools Batch Mode.

RankMap and HardwareIDAux

A new capability has been added to MOOSE that enables the ability to query information about the physical node each MPI process is running on. In particular, it allows the user to find which MPI processes are located on the same physical node in the cluster. This can be useful for partitioning and advanced transfer capabilities.

In addition, a new AuxKernel has been added: HardwareIDAux. This AuxKernel allows you to visualize the placement of the MPI processes on the physical nodes in the cluster. This is extremely useful for understanding the outcome of advanced mesh partitioners such as the PetscExternalPartitioner. For more information see the HardwareIDAux documentation


A new MeshGenerator called the CombinerGenerator which allows the output of multiple MeshGenerators to be combined into a single mesh. This is somewhat similar to StitchedMeshGenerator except that it makes no attempt at all to actually stitch the meshes together. Instead, it merely copies one mesh into another.


Another new MeshGenerator is the FancyExtruderGenerator. This new MeshGenerator is similar to the MeshExtruderGenerator, in that it extrudes a 2D mesh into a 3D mesh, except it provides many more options. In particular, the height of multiple elevations can be specified and subdomain IDs within each elevation can be swapped. This object has been optimized to handle extremely large meshes.


Yet another new MeshGenerator is the PlaneDeletionGenerator. This MeshGenerator takes a plane as input and will delete all of the elements on one side of the plane from your mesh. This is extremely handy for taking a geometry and slicing it down into a region of interest or a region which represents a symmetric portion of the whole.

PETSc Upgrade

PETSc was upgraded to 3.10.5; the new version provides better performance. We encourage MOOSE users to use this new version. To use this version of PETSc, follow instructions on moose website to update the environment package.

Conservative Transfer

Conservative transfers have been added to MOOSE to support transfer of a physics quantity in a conservative way. Conservative transfers currently work with MultiAppMeshFunctionTransfer, MultiAppInterpolationTransfer, MultiAppNearestNodeTransfer and MultiAppUserObjectTransfer.

Vector Support in InterfaceKernel

The InterfaceKernel system has been updated to add compatibility with vector finite elements. Usage of InterfaceKernel for standard finite element variables remains the same as before, but VectorInterfaceKernel is now available for vector finite element variables. Examples of usage for VectorInterfaceKernel with NEDELEC_ONE variables in 2D and 3D can be found in the following two input files:

Simplified Module Makefile

MOOSE now contains 18 physics modules, several of which depend on each other. The "make" system has been simplified at the module level so dependencies no longer need to appear in the Makefile. Dependencies are listed in a single place (e.g.

The relevant section for every module has been abbreviated. Here is the relevant section for the phase_field Makefile:

# Module
MODULE_NAME := phase_field
include $(MODULE_DIR)/

Improved Dynamic Loading Error Messages

MOOSE has long had the capability to load objects from dynamic libraries. The problem is that when a failure occurs the error message states that the file cannot be opened. This is rarely the case, so the error is misleading. An improved error message now differentiates between a missing or unreadable file and one that exists but fails to load for other reasons (such as missing expected functions or lack of dynamic loading support).

Parallel Testing in the Physics Modules

Parallel testing has been turned on by default for most of the physics modules. If you are building tests for the physics modules, make sure that your tests produce the same result when running serially or in parallel.

Improved Simulation Information Output (Console)

MOOSE has been displaying information about your simulation's active "RelationshipManagers" on the console for a few months now. This information has recently been augmented to display when pure libMesh "GhostingFunctors" (not wrapped by a MOOSE RelationshipManager) are active.