MOOSE Newsletter (September 2019)

SQA Documentation

Completing documentation for NQA-1 has been a primary focus over the past month, if you are interested in seeing the results of this labor please visit MOOSE Software Quality.

MeshGenerators and MeshModifiers

The MeshModifiers have been officially deprecated. All of the existing MeshModifiers have equivalent MeshGenerators that can be used to achieve the same behavior. Many applications are using modifiers so this is a big impact. Everyone should be moving to the generator system in the next month or two so that we can remove the old system. There will be additional enhancements that enable better restart capabilities before the old MeshModifiers system is removed.

New Mesh Syntax

We have streamlined the syntax for MeshGenerators. Rather than having separate top level blocks for MeshModifiers, we are moving the generators to subblocks under the [Mesh] block. This makes sense logically because you might use several generators to build up a mesh so there's little need for a separate [Mesh] block. As a convenience you don't need to explicitly set the MeshGeneratorMesh type when using the new syntax. If you have any generators at all, the mesh type is assumed to be the MeshGeneratorMesh (e.g. the final mesh resulting from processing all of the generators).

Here's an example of how to use the new syntax to build up a mesh:

    type = FileMeshGenerator
    file = twoblocks.e

    type = SideSetsAroundSubdomainGenerator
    input = file_reader # Establishes the dependency on the reader
    block = 'left'
    new_boundary = 'hull_1'

    type = SideSetsAroundSubdomainGenerator
    input = block_1 # dependency on the first sideset creator
    block = 'right'
    new_boundary = 'hull_2'

Optionally Skip Parallel Exception Check

Exception checking in MOOSE is a clean way to abort solves that run into physical or numerical issues in the middle of a linear or nonlinear evaluation. However, checking exceptions in parallel at scale can be expensive in terms of communication since each exception check involves a global reduction. A new input file option Executioner/skip_exception_check=false was added to allow users to toggle exception checking on/off for when they are confident that their simulation will not produce exceptions. Turning off the exception check will boost the speed of larger simulations with the trade-off that any thrown exceptions may cause your simulation to abort without any usable error, or in some cases, may even cause your program to hang. If your simulation does not complete when using this option, make sure you rerun it with this option disabled before seeking support from anyone. Note: When using this option, you will see a message in your startup log indicating that exception checking is not being performed.

SLEPc support

SLEPc is supported and installed by default through PETSc. If you have a recent version of the MOOSE redistributable package or you are using the PETSc submodule you should have SLEPc support. The PETSc submodule and PETSc manual installation instructions have been updated to honor this change. libMesh attempts to pick up SLEPc from PETSC_DIR. SLEPC_DIR is not mandatory any more in order to use SLEPc. Most of these changes are transparent to end users.

Jacobian Contribution on Element Face

The compute thread of Jacobian blocks is a critical capability for physics-based preconditioner and RattleSnake AMG update. The face contributions for DG kernels were ignored before, and resulted in a wrong calculation when using DG kernels together with AMG update. A new routine is added to support Jacobian calculations on element faces in ComputeJacobianBlocksThread for DG kernels.

New Non-AD Vector-Compatible Time Kernels

Hand-coded Jacobians are sometimes still needed when formulating vector-compatible time kernels. Thus, VectorTimeKernel and VectorTimeDerivative are now available as alternatives to ADVectorTimeKernel and ADVectorTimeDerivative. New methods - coupledVectorDotDu and coupledVectorDotDotDu - have also been added to allow for coupled Jacobian entries in objects with coupled time derivatives. Example usage of coupledVectorDotDu can be found in the new CoupledVectorTimeDerivative kernel.