# MOOSE News (June 2019)

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 ## CombinerGenerator 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. ## FancyExtruder 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. ## PlaneDeletionGenerator 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. modules.mk). 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)/modules.mk