MOOSE Newsletter (March 2021)

MooseDocs and CIVET Paper Published

We published a paper regarding SQA practices and the associated use of MooseDocs and CIVET. If you are using CIVET for testing and/or MooseDocs for documentation, please reference the paper listed here: Testing and Documentation.

Automatic Differentiation Paper Published

We published a paper about the automatic differentiation system used in MOOSE. If you use automatic differentiation in your application, please reference the paper listed here: Automatic Differentiation.

Early Construction of Subapps of MultiApps

A design change on MultiApp has been made recently. With this change, MOOSE constructs the sub-applications (subapps) of MultiApps by default right after when MOOSE adds the MultiApps to the main application. Previously, the construction of subapps happens within the initial setup of the main application after the execution of all Actions. Derived MultiApps can set the private parameter "use_positions" of MultiApp to false to override this behavior and delay the construction as before, which is a feature required by the sampler MultiApps in the MOOSE stochastic module. This change should not affect the calculations with MultiApps but allows the main application to inquiry the subapps for setting up its objects such as kernels, boundary conditions, etc. accordingly. The design is documented in MultiApps along with some other document updates related with MultiApp.

Bug Fixes and Minor Changes

  • Fix Stochastic Tools to provide a correct Latin Hypercube sampler, this also included the addition of improved utilities for shuffling, resampling, and swapping (see shuffle.h).

  • MooseDocs now includes the ability to mark content as "external", thus it is possible to include syntax pages from another project without having the syntax registered. The page will simply state that the object is not available. This negates the need to exclude specific files from the content, which was prone to errors and maintenance problems.

  • Eigenvalue executioner did not work when no power iterations were used since the SLEPc EPS solver was not parsed correctly from the MOOSE side. Only one outer iteration is allowed in EPS when Newton/PJFNK/JFNK is chosen. We updated the eigenvalue executioner to set the maximum iteration of EPS to one when one of the Newton-based eigensolvers is selected. Now, the eigenvalue executioner works appropriately when no power iterations are involved.

  • MOOSE now has some limited support for map parameters in input files. The currently supported map types are string to Real, and string to string.

Conservative Transfer Enhancement

The conservative transfer can conserve a physics field by adjusting the transferred solution with a user-specified postprocessor. An execute-on option (execute_on=transfer) for the postprocessor is required to transfer the solution correctly. But, it might not be uncommon that users forget to specify such an input parameter. Besides, a moose-based application might hardcode the execute-on options so that users can not set the transfer option. The code will check if users have a correct execute-on option in the input file to fix these issues. If users do not have the correct execute_on option when using a conservative transfer, the code will error out.

Use Parallel Push/Pull in MultiAppTransfer

In a multiapp field transfer such as a nearest-node transfer or a projection transfer, parallel communication is needed to obtain interpolation values. The parallel communication algorithm often impacts the transfer time and scalability. Previously, an O(n) communication algorithm was employed, and it was not scalable. We replaced the old communication algorithm with a more scalable and efficient parallel algorithm, parallel push/pull. For some applications, we have shown that the transfer time was reduced by a factor of four when using the new communication algorithm.

libMesh level changes

  • The TIMPI library code now includes StandardType and Packing specializations for a wider variety of standard containers, including tuple and array with both fixed and variable-size contents, and including list, set, map, and unordered sets and maps with variable-sized contents.

  • Fixes for calculations on IsoGeometricAnalysis meshes using rational Bezier mappings.

  • Configure-time detection (and default use of) C++17 and C++14 flags from compilers which support them.

  • DenseVector and DenseMatrix construction from std::initializer\_list

  • Efficiency improvements for JFNK solves