MOOSE News (March 2019)

MOOSEDocs LaTeX Support

Support for PDF output (via pdflatex) was added to MOOSEDocs, this capability includes support for latex output to all MOOSEDocs extensions. This capability is still in the early stages of development, but if you are ambitious and would like to test out the capability the following will demonstrate the tool.

cd ~/projects/moose/test
make -j12
cd ~/projects/moose/python/MooseDocs/test
./ build --config latex.yml
open output/latex/main.pdf # MacOS only

AD Vector Variable Coupling

Support was added to the automatic differentiation system in support of coupling to vector variables via the adCoupledVectorValue and adCoupledVectorGradient functions within the ADKernel objects.

AD Fluid Properties

Support was added to the fluid properties system for automatic differentiation - currently SinglePhaseFluidProperties only. To use it, call the appropriate functions while passing in ADReal values - e.g.:

// assume rho is an AD nonlinear variable:
ADReal specific_vol = 1 / rho;

// assume rhoE, and rhou are AD nonlinear variables:
ADReal u = rhou/rho;
ADReal specific_internal_energy = rhoE / rho - u*u/2;
ADReal pressure = _fluid_prop_object.p_from_v_e(specific_vol, specific_internal_energy);

AD Tensor Mechanics

Tensor mechanics stress divergence kernels for all coordinate systems were converted over to the automatic differentiation system. In addition, AD versions for strain calculators for all coordinate systems and all supported strain types (small, incremental small, and finite) were added (new object name prefixed with AD). Initial AD support for inelastic models has been added, such as power law creep. Creep and plasticity models with internal newton solves have particularly difficult to implement Jacobians (which are currently often approximated by the elastic stiffness). AD improves these models considerably by providing perfect Jacobians. In support of the AD Tensor Mechanics additions, framework level calculation of the dependence of quadrature point locations on mesh displacements was added. This is particularly important for calculations in non-Cartesian geometries.

Fluid Properties Interrogator

Users of the fluid_properties module now have a utility for sampling thermodynamic properties at a specified state. This utility is valid for all fluid properties classes that derive from SinglePhaseFluidProperties and TwoPhaseFluidProperties. A syntax is provided for specifying the thermodynamic state at which to sample, and a number of properties are printed to the console at this state. See the documentation of FluidPropertiesInterrogator for details.

Mesh-Only and "Outputs" Dimension Improvements

Several enhancements have been made to mesh dimension capability so that the correct dimension is detected for several possible edge cases (such has a 2D mesh sitting in the xz-plane). Additionally, the –mesh-only command will also properly and consistently check and write out the proper mesh dimension for your simulation regardless of how your mesh is created/generated.

PointSamplerBase Class Enhancements

MOOSE contains a very useful PointSampler utility that can be used to output the solution based on several points. This capability is wrapped up in several useful classes in MOOSE such as the LineValueSampler, SideValueSampler, and PointValueSampler. Each of these classes request sampling of a set of useful points in some area of the domain (such as along a sideset or through the middle of the simulation). A recent addition to this class is the ability to change the set of sampled points at each invocation of the object. This allows the user to do several things such as follow a piece of physics or possibly capture high resolution solution information as the simulation evolves.

MooseArray no longer leaks!

OK - so this is more of an internal API, but anybody who has touched a MooseArray knows how easy it can be to forgot to clean up memory allocations. We have finally fixed this after a decade of MOOSE without performance impacts.

AD for DGKernels

The AD capability is added to DGKernels now. DG users do not have to compute Jacobian derivatives any more.

Parallel PETSc external Partitioner

Before a mesh presplitting starts, the mesh is reset as a single partition that stops us from using the parallel PETSc partitioning capability. We added a fix for this by doing a linear partitioner before we call the PETSc partitioner so that a distributed graph is constructed and the partitioning process runs in parallel.