MOOSE Newsletter (August 2026)

MOOSE Improvements

Testing with -march

The Apptainer environments used for testing have been updated in idaholab/moose#33466 to build with -march=x86-64-v3. Previously, these environments did not explicitly specify -march, effectively targeting the baseline x86-64 architecture.

Because the updated compiler flags can produce numerical differences, gold files and test tolerances have been updated as needed to ensure that the MOOSE framework and module test suites continue to pass under the newer architecture target.

As a result, dependent applications that test using these containerized environments may also require regolding, refactoring, or adjustments to test tolerances.

New input brace expressions

  • ${enumerate <prefix> <first_index> <last_index>}: expands to the whitespace separated list appending each integer in the range to the prefix, e.g. ${enumerate foo 0 2} evaluates to foo0 foo1 foo2. Added in idaholab/moose#33511

  • ${repeat <name> <count>}: expands to the name repeated count times, separated by whitespace, e.g. ${repeat foo 3} evaluates to foo foo foo. Added in idaholab/moose#33536

Finite Volume gradient method system

A new, encapsulated system for computing finite volume (FV) gradients was introduced for linear FV. Gradient computation now lives in dedicated FVGradientMethod objects registered per variable through a new [FVGradientMethods] block and AddFVGradientMethodAction, with FVGreenGaussGradient as the default. This lets different variables or systems use different (optionally limited) gradient schemes within a single input; the legacy interface is retained temporarily during the transition. As part of this work, the FVAdvectedVenkatakrishnanDeferredCorrection interpolation method was renamed to FVAdvectedMUSCLDeferredCorrection. (idaholab/moose#33381)

Constructive Solid Geometry engineering units

The constructive solid geometry (CSG) system gained reusable "engineering units": plug-and-play components that behave like surfaces/regions, cells, or universes and expand into primitive CSG components, including under geometric transformations, along with a regular N-sided polygon unit. See Engineering Units and N-Sided Regular Polygon Unit. (idaholab/moose#33105)

Point containment classification

The point-in-polyhedron (inside/outside/on-surface) capability that previously lived in the shifted boundary method module was generalized and moved into the framework behind a PointContainmentClassifier facade, with composable containment user objects for mesh surfaces, signed functions, and unions of these. Numerous edge cases were hardened, including ambiguous ray orientation, degenerate geometry, empty boundary sets, and KD-tree search-radius underestimation. This work also enabled new signed-distance and element-reclassification features in the shifted boundary method module. (idaholab/moose#33398)

MFEM backend improvements

Mixed sesquilinear forms

The MFEM complex equation system now supports mixed (off-diagonal, cross-variable) sesquilinear forms, enabling coupled complex-valued and frequency-domain problems. New objects include MFEMMixedSesquilinearFormKernel, MFEMMixedScalarWeakCurlKernel, and MFEMMixedVectorWeakDivergenceKernel, along with complex initial conditions such as MFEMComplexScalarIC and complex L2-error postprocessors such as MFEMComplexL2Error. (idaholab/moose#32020)

Discontinuous Galerkin

Discontinuous Galerkin support was added to the MFEM backend via the ability to add both interior and boundary face integrators to the equation system, enabling new interior-penalty MFEMDGDiffusionKernel and MFEMDGDiffusionBC. (idaholab/moose#32267)

Coordinate-system coefficients

Built-in coordinate transformations, such as cylindrical coefficients, can now be constructed in the [Functions] block through MFEMCoordinateTransformations. (idaholab/moose#32378)

In addition, the ordering of MFEM adaptive-mesh-refinement marker setup was fixed (idaholab/moose#33573), the MFEM recover capability was repaired and tested (idaholab/moose#33479), and the MFEM documentation was refreshed (idaholab/moose#33465).

Multi-system fixed point iterations

Multi-system fixed point iterations are now distinguished from MultiApp fixed point iterations. The MULTISYSTEM_FIXED_POINT_CONVERGENCE execute flag introduced last month has been replaced by MULTISYSTEM_FIXED_POINT_ITERATION_END, and (AD)FunctorChangeFunctorMaterial gained a multisystem_fixed_point option so it can act on these iterations. (idaholab/moose#33328)

Mesh generation and diagnostics

  • MeshDiagnosticsGenerator gained an examine_nonconforming_faces check that detects faces bordering another element but matching no neighbor face (for example, a HEX8 quad face abutting two TET4 faces), a case the existing hanging-node check does not catch. This face check runs by default alongside the conformality check. (idaholab/moose#33612)

  • XYZDelaunayGenerator can now generate quadratic tetrahedra through a new tet_element_type parameter (TET4, TET10, TET14), and a related segmentation fault was fixed. (idaholab/moose#33592)

  • SideSetsFromBoundingBoxGenerator now works on distributed meshes, and its deprecated parameters were removed. (idaholab/moose#33191)

  • Several mesh generators now release their input meshes once generate() completes, reducing peak memory during mesh generation. (idaholab/moose#33311)

  • The MeshInfo reporter can now emit richer diagnostics, including per-element information, element-quality metrics, and processor ids for sidesets and elements. (idaholab/moose#33437)

Functor tools

A new FunctorNodalCorrector overrides nodal variable values from a functor (optionally restricted to a boundary or nodeset), and FunctorSmoother gained a NODE_AVERAGE smoothing option. (idaholab/moose#33157)

Materials can write to coupled variables

Coupleable::writableVariable() may now be called from Material objects, in addition to the object types that already supported it, so a material can write directly to a coupled (for example, finite volume) variable. (idaholab/moose#33483)

Restart robustness

The catch-all default dataStore/dataLoad templates, which could serialize padded bytes and corrupt restart data, were removed in favor of explicit specializations across the framework and modules (idaholab/moose#32985). To make writing those specializations easier, dataStoreEnum and dataLoadEnum helper macros were added for enum types (idaholab/moose#33496).

Usability and tooling

  • A --show-actions command-line flag was added to print an application's actions. (idaholab/moose#33567)

  • The syntax dump (--dump) now lists the allowed options for MooseEnum and ExecFlagEnum parameters, including each option's documentation when available. (idaholab/moose#33231)

  • The MOOSE language server now reports HIT syntax errors originating from included files and makes the block name the first autocomplete tab stop. (idaholab/moose#33162)

  • The FileOutput base class gained an append_object_name parameter (default true) so outputs added with full syntax can omit the object name from the default output file base. (idaholab/moose#33379)

  • A new setup-time diagnostic errors when a SideUserObject (such as SideIntegralMaterialProperty) depends on a material property supplied by an InterfaceMaterial on the same boundary, since side user objects do not execute in an interface-material context and would otherwise consume invalid values. (idaholab/moose#33168)

  • GoogleTest unit tests are now checked for software-quality metadata as part of moosedocs.py check, extending SQA coverage to unit tests (with per-module grandfathering of existing tests). (idaholab/moose#33464)

  • MooseDocs no longer implicitly converts [path] or [text](path) into source-file modal links; such links must now use the explicit [!file](...) command, which gained a text setting. Documentation pages were migrated accordingly. (idaholab/moose#33383)

  • Building on the GPU acceleration work, the Kokkos backend gained SYCL build support. (idaholab/moose#33555)

  • The source tree was clang-formatted, and unnecessary empty declarations were removed. (idaholab/moose#33546, idaholab/moose#33550)

MOOSE Bug Fixes

DiracKernels in combined residual and Jacobian evaluations

DiracKernel point-source contributions were silently dropped when the residual and Jacobian were computed together. They are now included, including in the automatic differentiation path, and the object types that remain unsupported in this mode (ScalarKernel, NodalKernel, and nodal constraints) now raise a clear error instead of being silently skipped. (idaholab/moose#33289)

Multi-system nonlinear convergence

DefaultNonlinearConvergence now sets and honors the nonlinear solve parameters (maximum iterations, absolute and relative tolerances) per nonlinear system, fixing convergence checks for applications with multiple nonlinear systems. (idaholab/moose#33293)

Finite volume flux boundary conditions and interface kernel domain of definition checks

Finite volume interface kernels and flux boundary conditions were hardened: interface side semantics were made more intuitive, ambiguous FV interface orientation is now rejected, and face ownership for FVFluxBC and interface kernels is validated at setup and run time, making results independent of subdomain and variable ordering. (idaholab/moose#33506)

Miscellaneous

  • Restart of the infinite-element map type is now supported through explicit dataStore/dataLoad specializations. (idaholab/moose#33615)

  • Compatibility with older VTK versions was restored, fixing a regression introduced by the -march packaging update. (idaholab/moose#33610)

  • The interior (center) node of quadratic TRI7 triangles is now placed and repaired correctly during triangulation, fixing quadratic Delaunay and polygon meshes. (idaholab/moose#33593)

  • A premature geometric-search map build that ran before remote element deletion was removed. (idaholab/moose#33570)

  • The displaced mortar segment mesh is no longer rebuilt during ordinary Newton Jacobian assembly; the rebuild is now restricted to the standalone automatic-scaling Jacobian, eliminating redundant work while keeping the scaling path correct. (idaholab/moose#33505)

  • Solution-state access in SystemBase was hardened with size and range checks and clearer error messages. (idaholab/moose#33554)

  • A long-standing race in the TestHarness signal-handler test was fixed by not signaling the MOOSE process until it is ready. (idaholab/moose#33475)

  • The SQA reporting utilities now warn and skip missing optional directories (for example, an un-checked-out optional submodule) instead of aborting the documentation build. (idaholab/moose#33549)

  • Verbose timestep diagnostics are now flushed to the console immediately. (idaholab/moose#33620)

MOOSE Modules Changes

Segregated (SIMPLE-type) and linear FV solves received several performance and capability improvements:

  • The linear SIMPLE solver gained a pressure_pc_recompute_frequency parameter that rebuilds the pressure preconditioner only once every N pressure-corrector solves and reuses it in between, skipping most of the expensive algebraic multigrid setup; DOF-index and dof-value retrieval for linear FV variables in steady solves were also optimized. The lid-driven cavity example runs about 28% faster with an unchanged solution. (idaholab/moose#32746)

  • Preconditioner reuse was extended to the momentum, energy, solid energy, turbulence, and scalar equations of the linear FV segregated solve. (idaholab/moose#33575)

  • The momentum absolute convergence tolerance can now be set per component: the momentum_absolute_tolerance parameter of the segregated solvers accepts a vector, while a single value still applies to all components. See SIMPLE. (idaholab/moose#33628)

  • A new anisotropic-diffusion Neumann boundary condition, LinearFVAnisotropicDiffusionFunctorNeumannBC, respects boundary orientation on rotated meshes, and LinearFVPressureFluxBC and LinearFVAnisotropicDiffusion were reworked with more explicit flux-contribution flags and a one-term-expansion option; a bug in anisotropic diffusion was fixed. (idaholab/moose#32727)

  • Field-split preconditioner configuration is now applied through a PETSc PC post-setup hook instead of a KSP pre-solve hook, fixing preconditioner setup timing for field-split solves. (idaholab/moose#33495)

  • PETSc options are now correctly scoped for segregated solves running as sub-applications within eigenvalue problems, via a new framework PetscOptionsScope helper. (idaholab/moose#33477)

Solid Mechanics

Contact

Heat Transfer

A new FVSideSetHeatTransferKernel models a heat flux across an internal sideset through an interface, gap, or contact conductance. (idaholab/moose#33506)

Porous Flow

Subchannel

The subchannel (SCM) solver received an overhaul of its time derivatives, solver ordering, and convergence handling (including mass-diagonal handling in PBSodiumFluidProperties), with improved solver and parameter error reporting, new convergence tolerance parameters (P_tol, T_tol), and substantially expanded theory documentation including a solver flowchart. Many validation gold files were updated to reflect the new convergence metrics. (idaholab/moose#33441)

Fluid Properties

Optional fluid-properties sub-applications (air, carbon dioxide, helium, nitrogen, potassium, sodium) now register a false capability when compiled out, so TestHarness capability checks resolve cleanly rather than erroring. (idaholab/moose#33527)

libMesh-level Changes

2026.08.18_0772c3d_0 Update

  • Added MeshTools::Modification::interpolate_surface() method, to reinterpolate nodes using a Surface specification

  • MeshModification operations (rotate(), translate(), redistribute(), scale()) now mark potentially-invalidated element data caches as unprepared

  • Fixed find_interior_parents() calculation on meshes with unprepared element-dimension caches

  • Fixed nodal output for SIDE_HIERARCHIC elements

  • Fixed edge adjacency calculations on C0Polyhedron elements

  • Fix for outdated global_boundary_ids cache when renumbering boundary ids

  • Fix and performance improvements for Adaptive Mesh Refinement/Coarsening projections including SCALAR variables

  • Fix for broadcast() in cases where a ReplicatedMesh has had elements deleted in a non-replicated way, via an improvement to ReplicatedMesh::update_parallel_id_counts() for this case

  • Added support to all_tri() for tetrahedralization of Pyramid5 and Pyramid14 elements

  • Enabled quadratic tetrahedralization of domains defined by curved Tri6/Tri7 boundary elements.

  • Improved element quality when using Tri7 elements to triangulate curved boundaries

  • Added parallel communication support for C0Polygon and C0Polyhedron elements

  • Added ExodusII and CheckpointIO support for C0Polygon and C0Polyhedron elements

  • Added element quality metrics for C0Polygon and C0Polyhedron elements

  • Added a subdomain name setter with option for marking synchronization as maintained and avoiding unnecessary mesh re-preparation, along with a facility for marking preparation status of subdomain name maps in parallel. The old subdomain_name() setter that returned a writable reference is now deprecated.

  • Added isfinite(), isinf(), and isnan() support for std::complex and for our vector and tensor types to libMesh::

  • Autodetection of compiler options to request IEEE754-precise calculations (e.g. eschewing Fused-Multiply-Add rounding); we now use these options for triangulation calculations for better reproducibility between differing architectures.

  • Treat XYZ element type as elemental in ExodusII and Nemesis output

  • Refactoring of constant-monomial ("elemental") data in output

  • Printing of failed assertion expressions in general assertion failure cases

  • PerfLog logging of MeshModification::all_* methods

  • Additional all_rbb() unit test coverage, using quadratic Rational-Bernstein-Bezier sphere approximations

  • Fix for installed-example $CXXFLAGS handling with pkgconfig

PETSc-level Changes

The PETSc submodule was updated from 3.25.2 to 3.25.4.

Conda Package Updates

moose-tools 2026.08.19

  • Trigger rebuild; no package changes

moose-build 2026.08.19

  • Trigger rebuild; no package changes

moose-mpi 2026.08.19 [mpich,openmpi]

  • Trigger rebuild; no package changes

moose-libmesh-vtk 9.7.0_0 [mpich,openmpi]

  • Updated VTK from 9.6.2 to 9.7.0

moose-petsc 3.25.4_0 [mpich,openmpi]

moose-libmesh 2026.08.18_0772c3d_0 [mpich,openmpi]

moose-wasp 2026.08.13_ce25dcd_0

moose-pyhit 2026.08.19

  • Rebuild due to updated Conda package moose-wasp 2026.08.13_ce25dcd

moose-dev 2026.08.19 [mpich,openmpi]

  • Rebuild due to updated dependencies

moose-pprof 2026.07.09_b9395ee_0

moose-seacas 2025.10.14_5

  • Trigger rebuild; no package changes

moose-tools 2026.08.23

  • Trigger rebuild; no package changes

moose-build 2026.08.23

  • Trigger rebuild; no package changes

moose-mpi 2026.08.23 [mpich,openmpi]

  • Trigger rebuild; no package changes

moose-libmesh-vtk 9.7.0_1 [mpich,openmpi]

  • Trigger rebuild; no package changes

moose-petsc 3.25.4_1 [mpich,openmpi]

  • Trigger rebuild; no package changes

moose-libmesh 2026.08.18_0772c3d_1 [mpich,openmpi]

  • Trigger rebuild; no package changes

moose-wasp 2026.08.13_ce25dcd_1

  • Trigger rebuild; no package changes

moose-pyhit 2026.08.23

  • Trigger rebuild; no package changes

moose-dev 2026.08.23 [mpich,openmpi]

  • Trigger rebuild; no package changes

Apptainer Package Updates

moose-mpi:2026.08.19

  • Added support for building from Ubuntu-based images

  • Updated all base packages

  • Updated variants: - rocky8_gcc: Rocky 8 base with GCC 13.1.1, MPICH 5.0.1, OpenMPI 5.0.10 - rocky8_oneapi: Rocky 8 base with GCC 13.3.1, Intel OneAPI 2026.1.1, MPICH 4.3.2 - rocky9_gcc: Rocky 9 base with GCC 13.1.1, MPICH 4.3.2, OpenMPI 5.0.10 - ubuntu24_clang: Ubuntu 24.04 base with Clang 22.1.8, GCC 14.2.0, MPICH 5.0.1, OpenMPI 5.0.10 - ubuntu24_cuda_gcc: Ubuntu 24.04 base with Cuda 13.3.0, GCC 14.2.0, MPICH 5.0.1, OpenMPI 5.0.10 - ubuntu24_gcc (default): Ubuntu 24.04 base with GCC 14.2.0, MPICH 5.0.1, OpenMPI 5.0.10 - ubuntu24_gccmin: Ubuntu 24.04 base with GCC 9.5.0, MPICH 5.0.1

moose-petsc:3.25.4_0

  • Updated petsc from 3.25.2 to 3.25.4

  • Added MARCH and MTUNE definition template options for building with -march and -mtune - -march is set to x86-64-v3 by default for all PETSc builds

moose-libmesh:2026.08.18_0772c3d_0

  • Updated VTK from 9.6.2 to 9.7.0

  • Updated VTK configure to be more consistent with the configure in Conda moose-libmesh-vtk

  • Updated libmesh from ab36c00 to 0772c3d

  • Added MARCH and MTUNE definition template options for building with -march and -mtune - -march is set to x86-64-v3 by default for all VTK and libMesh builds - As MOOSE inherits its build flags from libMesh, this implies the same default for all MOOSE application builds

moose-dev 2026.08.19

  • Updated wasp from d8777a8 to ce25dcd

  • Updated pytorch from 2.12.0 to 2.13.0

  • Updated python from 3.14.6 to 3.14.7

  • Updated code-server from 4.123.0 to 4.132.0

  • Updated mfem from b7ac196 to a7dbea1

  • Install python package nvidia-ml-py

  • Added MARCH and MTUNE definition template options for building with -march and -mtune - -march is set to x86-64-v3 by default for building WASP, libtorch, NEML2, conduit, and MFEM - As MOOSE inherits its build flags from libMesh, this implies the same default for all MOOSE application builds

moose-mpi:2026.08.23

  • Update all base containers

  • Build valgrind with --enable-lto=yes

moose-petsc:3.25.4_1

  • Add OPTFLAGS generator variable to override OPTFLAGS

  • Build ubuntu24-gcc-mpich-valgrind-x86_64 variant for valgrind with OPTFLAGS="-O1 -g -march=x86-64"

moose-libmesh:2026.08.18_0772c3d_0

  • Add OPTFLAGS generator variable to override OPTFLAGS

  • Build ubuntu24-gcc-mpich-valgrind-x86_64 variant for valgrind with OPTFLAGS="-O1 -g -march=x86-64"

moose-dev 2026.08.23

  • Add OPTFLAGS generator variable to override OPTFLAGS

  • Build ubuntu24-gcc-mpich-valgrind-x86_64 variant for valgrind with OPTFLAGS="-O1 -g -march=x86-64"