MOOSE Newsletter (August 2022)

MOOSE Improvements

HIT format and parser performance improvements

The parsing performance of the HIT (hierarchical input text) file parser - the component that parses MOOSE input files and test spec files - has been substantially improved. The parsing time now scales linearly with the input file length, where it previously had a square dependence. This was mostly noticeable in extremely long input files (e.g. files generated by scripts). As an additional feature the parser now tracks the column position of each parsed token.

The hit format functionality was improved to better handle the formatting of long and multi line strings. Multiline string can occur in input files when data and parameter entries need to be represented in a particular way - for example, as data tables for PiecewiseLinear functions. hit format handled such strings poorly and disrupted careful manual formatting into columns, reducing the input file readability. To alleviate this, two major changes were made:

  1. Single quoted strings '...' will stay completely untouched by hit format. This is useful to preserve long strings, such as PETSc options in the Executioner block, which come as parameter pairs that are often manually formatted to have corresponding key value pairs aligned to the same column positions.

  2. Double quoted "..." strings will get formatted in the following two ways: - Single line strings get reflowed according to a set maximum line length (useful for long text in test spec requirements) - Multiline strings will only be re-indented through inserting or removing spaces on the lines following the first line, to match any changes in indentation of the first line.

These changes to hit format are already incorporated in the Moose Language Support VSCode Extension.

Solid properties module added

The Solid Properties module was added to MOOSE, which provides various properties for different solid materials. These properties are implemented in user objects that can then be called wherever needed, such as residual objects or materials. The ThermalSolidProperties hierarchy of user objects defines density, specific heat capacity, and thermal conductivity as functions of temperature alone, and then the corresponding material ThermalSolidPropertiesMaterial provides material properties for each of these quantities.

libMesh-level Changes

2022.08.05 Update

  • Support reading/writing extra node integers and extra element integers in XDR and XDA files.

  • Support inverted 1D element orientations when reconstructing mesh neighbors.

  • --deny_re command line option for unit test driver, to allow more options for running subsets of the full unit test suite.

  • Eigen upgrade to 3.4.0; now via a git submodule to make future upgrades easier and more efficient.

  • More internal use of smart pointers for memory management and exception safety.

  • MetaPhysicL update to 1.4.0, fixing an intermittent bug in the test suite

  • TIMPI update to 1.8.5, giving better compiler error messages for certain user errors, more parallel unit testing, and warning fixes for new compilers.

  • Additional features for Poly2TriTriangulator, including triangulation of id-defined subsets of outer boundaries, and verification of boundary non-intersection.

  • New TriangulatorInterface::Hole::contains() API

  • Improved DistributedMesh cached object count tracking when deleting objects.

  • BoundaryInfo::renumber_id(), now supporting automatic handling of id-to-name maps.

  • SIDE_HIERARCHIC finite-element space support for TET14 geometric elements.

  • New MeshBase::reinit_ghosting_functors() API

  • reconnect_nodes() API typedef, to enable forward compatibility with future data structure changes.

  • Memory leak fix in fparser

  • Fixes for Poly2TriTriangulator use with DistributedMesh, and for many corner cases

  • Fix TET10 numbering with TetgenIO

2022.08.23 Update

  • More test coverage in examples

  • Comment clarifications

  • Build system, version control improvements

  • Support in MeshTools::build_square for quad shell elements

  • Minor bug fixes

  • Much more generic index_range() support