# Functional Expansion Tools

A MOOSE module for continuous, mesh-agnostic, high-fidelity, reduced-data MultiApp coupling

## Description

Functional expansions (FXs) are a methodology that represent information as moments of a functional series (Flusser et al., 2016). This is is related to a Fourier series representation of cyclic data. Moments are generated via numerical integration for each term in the functional series to represent the field of interest. These moments can then be used to reconstruct the field in a separate app (Wendt et al., 2018; Wendt and Kerby, 2017; Kerby et al., 2017).

Currently there are two main flavors of FX coupling available: interface and volumetric.

note:Nomenclature

In other contexts FXs have been identified using the initialism 'FE'. However, since MOOSE is a finite-element (FE) code, the initialism 'FX' is used throughout this module to prevent confusion.

warning:Displaced meshes

This module should only be used with non-displaced meshes.

### Interface Coupling

Interface-based coupling provides for the coupling between physically distinct solutions that share a common interface. FXs can be used to extract value and/or flux conditions at a boundary in one app, then be transferred as boundary conditions to the coupled app. These coupled boundaries represent the common interface between the two solutions.

### Volumetric Coupling

Volumetric-based coupling provides for coupling between solutions that share the same space with coupled yet separate physics. The field in one app can be collapsed into an FX, then the moment values are transferred to the other app to be used in its solution.

## Using this module

Set either FUNCTIONAL_EXPANSION_TOOLS := yes (or ALL_MODULES := yes) in the application makefile. The following objects will then be available for use:

### AuxKernels

NameDescription
FunctionSeriesToAuxExpands an FX into the named AuxVariable before the initial nonlinear solve.

### BCs

NameDescription
FXFluxBCProvides a strongly encouraged FX-based Neumann boundary condition.
FXValueBCProvides a fixed FX-based Dirichlet boundary condition.
FXValuePenaltyBCProvides a strongly encouraged FX-based Dirichlet boundary condition.

### Functions

NameDescription
FunctionSeriesThe workhorse of the FX tools module. This evaluates the terms of a function series, used both for capturing moments and expanding an FX. All other FX-based objects will depend on a FunctionSeries instance.

### Kernels

Although there are no kernels directly provided by this module (yet), these three from the framework itself have varying degrees of usefulness:

NameDescription
BodyForceMay be used to couple a FunctionSeries object directly to a solution, instead of using FunctionSeriesToAux and CoupledForce. If the BodyForce approach is used it is highly recommended to set enable_cache = true for the associated FunctionSeries object.
CoupledForceCouples an AuxVariable or Variable to the solution of another Variable. Useful in conjunction with FunctionSeriesToAux.
NullKernelMay be required for use in situation where no Variables or Kernels are needed. This may occur, for example, in an app that uses only the recommended FunctionSeriesToAux+CoupledForce approach.

### Transfers

NameDescription
MultiAppFXTransferThis transfers the FX coefficients, or moments, between named FX objects in the multi and sub apps. Supported objects that contain coefficients for transferring are instances of FunctionSeries and any FX...UserObject.

### UserObjects

NameDescription
FXBoundaryFluxUserObjectCaptures the moments of an FX representing the flux at a boundary.
FXBoundaryValueUserObjectCaptures the moments of an FX representing the value at a boundary.
FXVolumeUserObjectCaptures the moments of an FX representing the field value over a volume.

## Examples

Please refer to the examples included with the module for how these objects can be used.

## Supported Functional Series

This module currently supports FXs based on the 1D Legendre and 2D Zernike polynomial series. From these can be constructed 1D, 2D, or 3D Cartesian basis sets (Legendre only), or 3D cylindrical (Legendre + Zernike) basis sets. Nonseparable series, i.e. with fully-convolved cross terms, are used in this implementation. Examples for selecting FXs are shown in FunctionSeries.

Additional functional series, polynomial or otherwise, can be added by inheriting from the SingleSeriesBasisInterface class (found in the utils/ folder). The composite series (currently the Cartesian and CylindricalDuo classes) will then need updated to support the newly-available series.

Additional composite series, such as may be suitable for spherical or shell data, can be implemented by inheriting from the CompositeSeriesBasisInterface. The FunctionSeries class will need updated to support the newly-available series.

## Caveats

1. FXs are not recommended for spanning spaces with discontinuities (Ellis, 2017). - One example would be a space containing two distinct materials with significantly different properties - Instead, using multiple FXs, each over its own region of continuity, is the recommended approach

2. Increasing the order of an FX does not always result in an improved representation. Numerical integration of the FX moment can yield large errors if not enough quadrature points are included (Griesheimer, 2005).

## References

1. Matthew Shawn Ellis. Methods for Including Multiphysics Feedback in Monte Carlo Reactor Physics Calculations. PhD thesis, Massachusetts Institute of Technology, 2017.[BibTeX]
2. Jan Flusser, Tomáš Suk, and Barbara Zitová. 2D & 3D image analysis by moments. John Wiley & Sons, Inc., 2016. ISBN 1119039355.[BibTeX]
3. David Patrick Griesheimer. Functional Expansion Tallies for Monte Carlo Simulations. PhD thesis, University of Michigan, 2005.[BibTeX]
4. Leslie Kerby, Aaron G Tumulak, Jaakko Leppänen, and Ville Valtavirta. Preliminary Serpent—MOOSE Coupling and Implementation of Functional Expansion Tallies in Serpent. In International Conference on Mathematics & Computational Methods Applied to Nuclear Science and Engineering (M&C 2017). 2017.[BibTeX]
5. Brycen Wendt and Leslie Kerby. Multiapp transfers in the moose framework based on functional expansions. Transactions of the American Nuclear Society, 117(1):735–738, October 2017.[BibTeX]
6. Brycen Wendt, April Novak, Leslie Kerby, and Paul Romano. Integration of functional expansion methodologies as a moose module. In PHYSOR 2018: Reactor Physics paving the way towards more efficient systems. April 2018.[BibTeX]

## TODO

• Investigate the implementation of using NearestPointBase approach to easily equip multiple FXs

• Implement a Materials-derived FX-based class that can provide continuous material properties

• Implement a Kernel-derived class, a la BodyForce, that automatically sets enable_cache = true for the associated FunctionSeries object

• Add an error check in MultiAppFXTransfer for multiple objects of the same name but different type, i.e. if there are both a Function and UserObject with the same name (or other object types as they are added)

• Implement support in MutableCoefficientsInterface for multiple sets of FX coefficients

• Implement support for various types of FX derivations - Separable series - Various orthonormalizations

• Add more functional series - Fourier - Annular Zernike (0 < r <= 1) - Shell (r = 1) for 3D cylindrical boundary conditions (Zernike-based?) - Spherical harmonics + spherical composite series

• Add check to ensure we are working in an undisplaced mesh context

## BCs

• Moose App
• ConvectiveFluxBCDetermines boundary values via the initial and final values, flux, and exposure duration
• DGFunctionDiffusionDirichletBC
• DiffusionFluxBCComputes a boundary residual contribution consistent with the Diffusion Kernel. Does not impose a boundary condition; instead computes the boundary contribution corresponding to the current value of grad(u) and accumulates it in the residual vector.
• DirichletBCImposes the essential boundary condition , where is a constant, controllable value.
• EigenDirichletBCDirichlet BC for eigenvalue solvers
• FunctionDirichletBCImposes the essential boundary condition , where is a (possibly) time and space-dependent MOOSE Function.
• FunctionNeumannBCImposes the integrated boundary condition , where is a (possibly) time and space-dependent MOOSE Function.
• FunctionPenaltyDirichletBC
• FunctionPresetBCThe same as FunctionDirichletBC except the value is applied before the solve begins
• LagrangeVecDirichletBCImposes the essential boundary condition , where are constant, controllable values.
• LagrangeVecFunctionDirichletBCImposes the essential boundary condition , where components are calculated with functions.
• MatchedValueBCImplements a NodalBC which equates two different Variables' values on a specified boundary.
• NeumannBCImposes the integrated boundary condition , where is a constant, controllable value.
• OneDEqualValueConstraintBC
• PenaltyDirichletBCEnforces a Dirichlet boundary condition in a weak sense by penalizing differences between the current solution and the Dirichlet data.
• PostprocessorDirichletBC
• PostprocessorNeumannBC
• PresetBCSimilar to DirichletBC except the value is applied before the solve begins
• SinDirichletBCImposes a time-varying essential boundary condition , where varies from an given initial value at time to a given final value over a specified duration.
• SinNeumannBCImposes a time-varying flux boundary condition , where varies from an given initial value at time to a given final value over a specified duration.
• VacuumBC
• VectorNeumannBCImposes the integrated boundary condition , where is a user-defined, constant vector.
• WeakGradientBCComputes a boundary residual contribution consistent with the Diffusion Kernel. Does not impose a boundary condition; instead computes the boundary contribution corresponding to the current value of grad(u) and accumulates it in the residual vector.
• Periodic
• Rdg App
• AEFVBCA boundary condition kernel for the advection equation using a cell-centered finite volume method.
• Functional Expansion Tools App
• FXFluxBCSets a flux boundary condition, evaluated using a FunctionSeries instance. This does not fix the flux, but rather 'strongly encourages' flux agreement by penalizing the differences through contributions to the residual.
• FXValueBCImposes a fixed value boundary condition, evaluated using a FunctionSeries instance.
• FXValuePenaltyBCSets a value boundary condition, evaluated using a FunctionSeries instance. This does not fix the value, but rather 'strongly encourages' value agreement by penalizing the differences through contributions to the residual.
• XFEMApp
• CrackTipEnrichmentCutOffBCSimilar to DirichletBC except the value is applied before the solve begins
• Heat Conduction App
• ConvectiveFluxFunctionDetermines boundary value by fluid heat transfer coefficient and far-field temperature
• CoupledConvectiveFlux
• CoupledConvectiveHeatFluxBCConvective heat transfer boundary condition with temperature and heat transfer coefficent given by auxiliary variables.
• GapHeatTransferTransfers heat across a gap between two surfaces dependant on the gap geometry specified.
• HeatConductionBC
• Richards App
• Q2PPiecewiseLinearSinkSink of fluid, controlled by (pressure, bare_fluxes) interpolation. This is for use in Q2P models
• RichardsExcavAllows the user to set variable values at the face of an excavation. You must have defined the excavation start time, start position, etc, through the excav_geom_function
• RichardsHalfGaussianSink
• RichardsPiecewiseLinearSink
• Tensor Mechanics App
• CoupledPressureBCApplies a pressure from a variable on a given boundary in a given direction
• DashpotBC
• DisplacementAboutAxisImplements a boundary condition that enforces rotationaldisplacement around an axis on a boundary
• InteractionIntegralBenchmarkBC
• PresetAccelerationPrescribe acceleration on a given boundary in a given direction
• PresetDisplacementPrescribe the displacement on a given boundary in a given direction.
• PresetVelocity
• PressureApplies a pressure on a given boundary in a given direction
• StickyBCImposes the boundary condition if exceeds the bounds provided
• CavityPressure
• CoupledPressure
• Pressure
• Navier Stokes App
• EnergyFreeBC
• INSMomentumNoBCBCLaplaceFormThis class implements the 'No BC' boundary condition based on the 'Laplace' form of the viscous stress tensor.
• INSMomentumNoBCBCTractionFormThis class implements the 'No BC' boundary condition based on the 'traction' form of the viscous stress tensor.
• INSTemperatureNoBCBCThis class implements the 'No BC' boundary condition discussed by Griffiths, Papanastiou, and others.
• ImplicitNeumannBCThis class implements a form of the Neumann boundary condition in which the boundary term is treated 'implicitly'.
• MassFreeBC
• MomentumFreeBC
• MomentumFreeSlipBC
• NSEnergyInviscidSpecifiedBCThis class corresponds to the inviscid part of the 'natural' boundary condition for the energy equation.
• NSEnergyInviscidSpecifiedDensityAndVelocityBCThis class corresponds to the inviscid part of the 'natural' boundary condition for the energy equation.
• NSEnergyInviscidSpecifiedNormalFlowBCThis class corresponds to the inviscid part of the 'natural' boundary condition for the energy equation.
• NSEnergyInviscidSpecifiedPressureBCThis class corresponds to the inviscid part of the 'natural' boundary condition for the energy equation.
• NSEnergyInviscidUnspecifiedBCThis class corresponds to the inviscid part of the 'natural' boundary condition for the energy equation.
• NSEnergyViscousBCThis class couples together all the variables for the compressible Navier-Stokes equations to allow them to be used in derived IntegratedBC classes.
• NSEnergyWeakStagnationBCThe inviscid energy BC term with specified normal flow.
• NSImposedVelocityBCImpose Velocity BC.
• NSImposedVelocityDirectionBCThis class imposes a velocity direction component as a Dirichlet condition on the appropriate momentum equation.
• NSInflowThermalBCThis class is used on a boundary where the incoming flow values (rho, u, v, T) are all completely specified.
• NSMassSpecifiedNormalFlowBCThis class implements the mass equation boundary term with a specified value of rho*(u.n) imposed weakly.
• NSMassUnspecifiedNormalFlowBCThis class implements the mass equation boundary term with the rho*(u.n) boundary integral computed implicitly.
• NSMassWeakStagnationBCThe inviscid energy BC term with specified normal flow.
• NSMomentumConvectiveWeakStagnationBCThe convective part (sans pressure term) of the momentum equation boundary integral evaluated at specified stagnation temperature, stagnation pressure, and flow direction values.
• NSMomentumInviscidNoPressureImplicitFlowBCMomentum equation boundary condition used when pressure is not integrated by parts.
• NSMomentumInviscidSpecifiedNormalFlowBCMomentum equation boundary condition in which pressure is specified (given) and the value of the convective part is allowed to vary (is computed implicitly).
• NSMomentumInviscidSpecifiedPressureBCMomentum equation boundary condition in which pressure is specified (given) and the value of the convective part is allowed to vary (is computed implicitly).
• NSMomentumPressureWeakStagnationBCThis class implements the pressure term of the momentum equation boundary integral for use in weak stagnation boundary conditions.
• NSMomentumViscousBCThis class corresponds to the viscous part of the 'natural' boundary condition for the momentum equations.
• NSPenalizedNormalFlowBCThis class penalizes the the value of u.n on the boundary so that it matches some desired value.
• NSPressureNeumannBCThis kernel is appropriate for use with a 'zero normal flow' boundary condition in the context of the Euler equations.
• NSStagnationPressureBCThis Dirichlet condition imposes the condition p_0 = p_0_desired.
• NSStagnationTemperatureBCThis Dirichlet condition imposes the condition T_0 = T_0_desired.
• NSThermalBCNS thermal BC.
• Chemical Reactions App
• ChemicalOutFlowBCChemical flux boundary condition
• Porous Flow App
• PorousFlowHalfCubicSinkApplies a flux sink to a boundary. The base flux defined by PorousFlowSink is multiplied by a cubic.
• PorousFlowHalfGaussianSinkApplies a flux sink to a boundary. The base flux defined by PorousFlowSink is multiplied by a Gaussian.
• PorousFlowPiecewiseLinearSinkApplies a flux sink to a boundary. The base flux defined by PorousFlowSink is multiplied by a piecewise linear function.
• PorousFlowSinkApplies a flux sink to a boundary.

## Functions

• Moose App
• Axisymmetric2D3DSolutionFunctionFunction for reading a 2D axisymmetric solution from file and mapping it to a 3D Cartesian model
• BicubicSplineFunction
• CompositeFunctionMultiplies an arbitrary set of functions together
• ConstantFunction
• ImageFunctionFunction with values sampled from a given image stack
• LinearCombinationFunctionReturns the linear combination of the functions
• ParsedFunction
• ParsedVectorFunction
• PiecewiseBilinearInterpolates values from a csv file
• PiecewiseConstantDefines data using a set of x-y data pairs
• PiecewiseLinearLinearly interpolates between pairs of x-y data
• PiecewiseMulticonstantPiecewiseMulticonstant performs constant interpolation on 1D, 2D, 3D or 4D data. The data_file specifies the axes directions and the function values. If a point lies outside the data range, the appropriate end value is used.
• PiecewiseMultilinearPiecewiseMultilinear performs linear interpolation on 1D, 2D, 3D or 4D data. The data_file specifies the axes directions and the function values. If a point lies outside the data range, the appropriate end value is used.
• SolutionFunction
• SplineFunction
• TestSetupPostprocessorDataActionFunction
• VectorPostprocessorFunction
• Richards App
• RichardsExcavGeomThis function defines excavation geometry. It can be used to enforce pressures at the boundary of excavations, and to record fluid fluxes into excavations.
• Functional Expansion Tools App
• FunctionSeriesThis function uses a convolution of functional series (functional expansion or FX) to create a 1D, 2D, or 3D function
• Navier Stokes App
• WedgeFunctionFunction which computes the exact solution for Jeffery-Hamel flow in a wedge.
• Level Set App
• LevelSetOlssonBubbleImplementation of 'bubble' ranging from 0 to 1.
• LevelSetOlssonVortexA function for creating vortex velocity fields for level set equation benchmark problems.
• Porous Flow App
• MovingPlanarFrontThis function defines the position of a moving front. The front is an infinite plane with normal pointing from start_posn to end_posn. The front's distance from start_posn is defined by 'distance', so if the 'distance' function is time dependent, the front's position will change with time. Roughly speaking, the function returns true_value for points lying in between start_posn and start_posn + distance. Precisely speaking, two planes are constructed, both with normal pointing from start_posn to end_posn. The first plane passes through start_posn; the second plane passes through end_posn. Given a point p and time t, this function returns false_value if ANY of the following are true: (a) t<activation_time; (b) t>=deactivation_time; (c) p is 'behind' start_posn (ie, p lies on one side of the start_posn plane and end_posn lies on the other side); (d) p is 'ahead' of the front (ie, p lies one one side of the front and start_posn lies on the other side); (e) the distance between p and the front is greater than active_length. Otherwise, the point is 'in the active zone' and the function returns true_value.

## UserObjects

• Moose App
• AreaPostprocessorComputes the "area" or dimension - 1 "volume" of a given boundary or boundaries in your mesh.
• AverageElementSize
• AverageNodalVariableValue
• AxisymmetricCenterlineAverageValueComputes the average value of a variable on a sideset located along the centerline of an axisymmetric model.
• ChangeOverTimePostprocessorComputes the change or relative change in a post-processor value over a timestep or the entire transient
• ChangeOverTimestepPostprocessorComputes the change or relative change in a post-processor value over a timestep or the entire transient
• CumulativeValuePostprocessor
• DifferencePostprocessor
• ElementAverageSecondTimeDerivativeComputes the element averaged second derivative of variable
• ElementAverageTimeDerivative
• ElementAverageValue
• ElementExtremeValue
• ElementH1Error
• ElementH1SemiError
• ElementIntegralMaterialProperty
• ElementIntegralVariablePostprocessor
• ElementIntegralVariableUserObject
• ElementL2Difference
• ElementL2Error
• ElementL2Norm
• ElementQualityCheckerClass to check the quality of each element using different metrics from libmesh.
• ElementVectorL2Error
• ElementW1pError
• ElementalVariableValueOutputs an elemental variable value at a particular location
• EmptyPostprocessor
• ExecutionerAttributeReporter
• FindValueOnLineFind a specific target value along a sampling line. The variable values along the line should change monotonically. The target value is searched using a bisection algorithm.
• FunctionSideIntegral
• FunctionValuePostprocessor
• GeometrySphereSnap nodes to the surface of a sphere on adaptivity
• LayeredAverage
• LayeredIntegral
• LayeredSideAverage
• LayeredSideFluxAverage
• LayeredSideIntegral
• LinearCombinationPostprocessor
• MemoryUsageMemory usage statistics for the running simulation.
• NearestPointLayeredAverage
• NodalExtremeValue
• NodalL2Error
• NodalL2Norm
• NodalMaxValue
• NodalNormalsCorner
• NodalNormalsEvaluator
• NodalNormalsPreprocessor
• NodalProxyMaxValue
• NodalSum
• NodalVariableValueOutputs values of a nodal variable at a particular location
• NumDOFsReturn the number of Degrees of freedom from either the NL, Aux or both systems.
• NumElemsReturn the number of active or total elements in the simulation.
• NumLinearIterations
• NumNodesReturns the total number of nodes in a simulation (works with DistributedMesh)
• NumNonlinearIterationsOutputs the number of nonlinear iterations
• NumPicardIterations
• NumResidualEvaluations
• NumVarsReturn the number of variables from either the NL, Aux, or both systems.
• PercentChangePostprocessor
• PerfGraphDataRetrieves timing information from the PerfGraph.
• PointValue
• PostprocessorComparisonCompares two post-processors and produces a boolean value
• RelativeDifferencePostprocessorComputes the absolute value of the relative difference between 2 post-processor values.
• RelativeSolutionDifferenceNorm
• Residual
• ScalarL2Error
• ScalarVariable
• ScalePostprocessor
• SideAverageValueComputes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.
• SideFluxAverageComputes the integral of the flux over the specified boundary
• SideFluxIntegralComputes the integral of the flux over the specified boundary
• SideIntegralVariablePostprocessor
• SolutionUserObjectReads a variable from a mesh in one simulation to another
• Terminator
• TimeExtremeValueA postprocessor for reporting the extreme value of another postprocessor over time.
• TimestepSizeReports the timestep size
• TotalVariableValue
• VariableInnerProduct
• VariableResidual
• VectorPostprocessorComparisonCompares two vector post-processors of equal size and produces a boolean value
• VerifyElementUniqueID
• VerifyNodalUniqueID
• VolumePostprocessor
• Stochastic Tools Test App
• TestDistributionDirectPostprocessor
• TestDistributionPostprocessor
• TestSampler
• Rdg App
• AEFVFreeOutflowBoundaryFluxFree outflow BC based boundary flux user object for the advection equation using a cell-centered finite volume method.
• AEFVSlopeLimitingOneDOne-dimensional slope limiting to get the limited slope of cell average variable for the advection equation using a cell-centered finite volume method.
• AEFVUpwindInternalSideFluxUpwind numerical flux scheme for the advection equation using a cell-centered finite volume method.
• Phase Field App
• AverageGrainVolumeCalculate average grain area in a polycrystal
• ComputeExternalGrainForceAndTorqueUserobject for calculating force and torque acting on a grain
• ComputeGrainForceAndTorqueUserobject for calculating force and torque acting on a grain
• ConservedMaskedNormalNoiseGaussian normal distributed random number noise provider with an applied spatially dependent material property mask for the ConservedLangevinNoise kernel.
• ConservedMaskedUniformNoiseUniformly distributed random number noise provider with an applied spatially dependent material property mask for the ConservedLangevinNoise kernel.
• ConservedNormalNoiseGaussian normal distributed random number noise provider for the ConservedLangevinNoise kernel.
• ConservedUniformNoiseUniformly distributed random number noise provider for the ConservedLangevinNoise kernel.
• ConstantGrainForceAndTorqueUserobject for calculating force and torque acting on a grain
• DiscreteNucleationDataOutput diagnostic data on a DiscreteNucleationInserter
• DiscreteNucleationFromFileManages the list of currently active nucleation sites and adds new sites according to a predetermined list from a CSV file (use this with sync_times).
• DiscreteNucleationInserterManages the list of currently active nucleation sites and adds new sites according to a given probability function.
• DiscreteNucleationMapGenerates a spatial smoothed map of all nucleation sites with the data of the DiscreteNucleationInserter for use by the DiscreteNucleation material.
• DiscreteNucleationTimeStepReturn a time step limit for nucleation event to be used by IterationAdaptiveDT
• EBSDReaderLoad and manage DREAM.3D EBSD data files for running simulations on reconstructed microstructures.
• EulerAngleUpdaterProvide updated euler angles after rigid body rotation of the grains.
• FauxGrainTrackerFake grain tracker object for cases where the number of grains is equal to the number of order parameters.
• FeatureFloodCountThe object is able to find and count "connected components" in any solution field or number of solution fields. A primary example would be to count "bubbles".
• FeatureVolumeFraction
• GrainBoundaryAreaCalculate total grain boundary length in 2D and area in 3D
• GrainForceAndTorqueSumUserobject for summing forces and torques acting on a grain
• GrainTrackerGrain Tracker object for running reduced order parameter simulations without grain coalescence.
• GrainTrackerElasticityGrain Tracker object for running reduced order parameter simulations without grain coalescence.
• MaskedGrainForceAndTorqueUserobject for masking/pinning grains and making forces and torques acting on that grain zero
• PFCElementEnergyIntegral
• PolycrystalCirclesPolycrystal circles generated from a vector input or read from a file
• PolycrystalEBSDObject for setting up a polycrystal structure from an EBSD Datafile
• PolycrystalHexPerturbed hexagonal polycrystal
• PolycrystalVoronoiRandom Voronoi tesselation polycrystal (used by PolycrystalVoronoiAction)
• RandomEulerAngleProviderAssign random euler angles for each grain.
• SolutionRasterizerProcess an XYZ file of atomic coordinates and filter atoms via threshold or map variable values.
• Misc App
• InternalVolumeComputes the volume of an enclosed area by performing an integral over a user-supplied boundary.
• RigidBodyModes3D
• Functional Expansion Tools App
• FXBoundaryFluxUserObjectGenerates an Functional Expansion representation for a boundary flux condition using a 'FunctionSeries'-type Function
• FXBoundaryValueUserObjectGenerates an Functional Expansion representation for a boundary value condition using a 'FunctionSeries'-type Function
• FXVolumeUserObjectGenerates an Functional Expansion representation of a variable value over a volume using a 'FunctionSeries'-type Function
• Level Set App
• LevelSetCFLConditionCompute the minimum timestep from the Courant-Friedrichs-Lewy (CFL) condition for the level-set equation.
• LevelSetOlssonTerminatorTool for terminating the reinitialization of the level set equation based on the criteria defined by Olsson et. al. (2007).
• LevelSetVolumeCompute the area or volume of the region inside or outside of a level set contour.
• Richards App
• Q2PPiecewiseLinearSinkFluxRecords the fluid flow into a sink (positive values indicate fluid is flowing from porespace into the sink).
• Q2PRelPermPowerGasPower form of relative permeability that might be useful for gases as a function of water saturation in Q2P models. Define s = seff/(1 - simm). Then relperm = 1 - (n+1)sn + ns(n+1) if seff<1-simm, otherwise relperm=1. Here seff is the water saturation
• RichardsDensityConstBulkFluid density assuming constant bulk modulus. dens0 * Exp(pressure/bulk)
• RichardsDensityConstBulkCutFluid density assuming constant bulk modulus. dens0 * Exp(pressure/bulk)
• RichardsDensityIdealFluid density of ideal gas. Density = slope*(p - p0)
• RichardsDensityMethane20degCMethane density (kg/m^3) at 20degC. Pressure is assumed to be measured in Pascals. NOTE: this expression is only valid to about P=20MPa. Use van der Waals (RichardsDensityVDW) for higher pressures.
• RichardsDensityVDWDensity of van der Waals gas.
• RichardsExcavFlowRecords total flow INTO an excavation (if quantity is positive then flow has occured from rock into excavation void)
• RichardsHalfGaussianSinkFlux
• RichardsMassReturns the mass in a region.
• RichardsPiecewiseLinearSinkFluxRecords the fluid flow into a sink (positive values indicate fluid is flowing from porespace into the sink).
• RichardsPlotQuantity
• RichardsRelPermBWBroadbridge-White form of relative permeability. Define s = (seff - Sn)/(Ss - Sn). Then relperm = Kn + s^2(c-1)(Kn-Ks)/(c-s) if 0<s<1, otherwise relperm = Kn if s<0, otherwise relperm = Ks if s>1.
• RichardsRelPermMonomialMonomial form of relative permeability. Define s = (seff - simm)/(1 - simm). Then relperm = s^n if s<simm, otherwise relperm=1
• RichardsRelPermPowerPower form of relative permeability. Define s = (seff - simm)/(1 - simm). Then relperm = (n+1)sn - ns(n+1) if s<simm, otherwise relperm=1
• RichardsRelPermPowerGasPower form of relative permeability that might be useful for gases. Define s = (seff - simm)/(1 - simm). Then relperm = 1 - (n+1)(1-s)^n + n(1-s)^(n+1) if s<simm, otherwise relperm=1
• RichardsRelPermVGVG form of relative permeability. Define s = (seff - simm)/(1 - simm). Then relperm = s(1/2) * (1 - (1 - s(1/m))^m)^2, if s>0, and relperm=0 otherwise
• RichardsRelPermVG1VG1 form of relative permeability. Define s = (seff - simm)/(1 - simm). Then relperm = s(1/2) * (1 - (1 - s(1/m))^m)^2, if s>0, and relperm=0 otherwise
• RichardsSUPGnoneUser object for no SUPG
• RichardsSUPGstandardStandard SUPG relationships for Richards flow based on Appendix A of TJR Hughes, M Mallet and A Mizukami A new finite element formulation for computational fluid dynamics:: II. Behond SUPG'' Computer Methods in Applied Mechanics and Engineering 54 (1986) 341–355
• RichardsSatUser object yielding saturation for a phase as a function of effective saturation of that phase
• RichardsSeff1BWsmallBroadbridge-white form of effective saturation for negligable Kn. Then porepressure = -las*( (1-th)/th - (1/c)Ln((C-th)/((C-1)th))), for th = (Seff - Sn)/(Ss - Sn). A Lambert-W function must be evaluated to express Seff in terms of porepressure, which can be expensive
• RichardsSeff1RSCRogers-Stallybrass-Clements version of effective saturation for the water phase, valid for residual saturations = 0, and viscosityOil = 2viscosityWater. seff_water = 1/Sqrt(1 + Exp((Pc - shift)/scale)), where scale = 0.25scale_ratio*oil_viscosity. Note that this effective saturation is mostly useful for 2-phase, not single-phase.
• RichardsSeff1VGvan-Genuchten effective saturation as a function of pressure suitable for use in single-phase simulations.. seff = (1 + (-al*p)^(1/(1-m)))^(-m)
• RichardsSeff1VGcutcut van-Genuchten effective saturation as a function of capillary pressure. Single-phase seff = (1 + (-al*p)^(1/(1-m)))^(-m) for p>p_cut, otherwise user a a linear relationship that is chosen so the value and derivative match van-Genuchten at p=p_cut.
• RichardsSeff2gasRSCRogers-Stallybrass-Clements version of effective saturation for the oil (gas) phase, valid for residual saturations = 0, and viscosityOil = 2viscosityWater. seff_gas = 1 - 1/Sqrt(1 + Exp((Pc - shift)/scale)), where scale = 0.25scale_ratio*oil_viscosity
• RichardsSeff2gasVGvan-Genuchten effective saturation as a function of (Pwater, Pgas) suitable for use for the gas phase in two-phase simulations. With Pc=Pgas-Pwater, seff = 1 - (1 + (al*pc)^(1/(1-m)))^(-m)
• RichardsSeff2gasVGshiftedShifted van-Genuchten effective saturation as a function of (Pwater, Pgas) suitable for use for the gas phase in two-phase simulations. seff = (1 + (-al*(P0-p1-shift))^(1/(1-m)))^(-m), then scaled so it runs between 0 and 1.
• RichardsSeff2waterRSCRogers-Stallybrass-Clements version of effective saturation for the water phase, valid for residual saturations = 0, and viscosityOil = 2viscosityWater. seff_water = 1/Sqrt(1 + Exp(Pc - shift)/scale)), where scale = 0.25scale_ratio*oil_viscosity
• RichardsSeff2waterVGvan-Genuchten effective saturation as a function of (Pwater, Pgas) suitable for use for the water phase in two-phase simulations. With Pc=Pgas-Pwater, seff = (1 + (al*pc)^(1/(1-m)))^(-m)
• RichardsSeff2waterVGshiftedShifted van-Genuchten effective saturation as a function of (Pwater, Pgas) suitable for use for the water phase in two-phase simulations. seff = (1 + (-al*(P0-p1-shift))^(1/(1-m)))^(-m), then scaled so it runs between 0 and 1.
• RichardsSumQuantity
• RichardsVarNamesHolds information on the porepressure variable names
• XFEMApp
• CircleCutUserObjectCreates a UserObject for circular cuts on 3D meshes for XFEM
• EllipseCutUserObjectCreates a UserObject for elliptical cuts on 3D meshes for XFEM
• LevelSetCutUserObjectXFEM mesh cut by level set function
• LineSegmentCutSetUserObjectCreates a UserObject for a line segment cut on 2D meshes for XFEM
• LineSegmentCutUserObjectCreates a UserObject for a line segment cut on 2D meshes for XFEM
• MeshCut3DUserObjectCreates a UserObject for a mesh cutter in 3D problems
• MovingLineSegmentCutSetUserObjectCreates a UserObject for a moving line segment cut on 2D meshes for XFEM
• PointValueAtXFEMInterfaceObtain field values and gradients on the interface.
• RectangleCutUserObjectCreates a UserObject for planar cuts on 3D meshes for XFEM
• XFEMMaterialTensorMarkerUserObject
• XFEMPhaseTransitionMovingInterfaceVelocitycalculate the interface velocity for a simple phase transition problem.
• XFEMRankTwoTensorMarkerUserObjectMark elements to be cut by XFEM based on a scalar extracted from a RankTwoTensor
• Contact App
• NodalArea
• Heat Conduction App
• HomogenizedThermalConductivity
• ThermalConductivityComputes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.
• Solid Mechanics App
• HomogenizedElasticConstants
• InteractionIntegralSM
• MaterialTensorIntegralSM
• Tensor Mechanics App
• CavityPressurePostprocessorInterfaces with the CavityPressureUserObject to store the initial number of moles of a gas contained within an internal volume.
• CavityPressureUserObjectUses the ideal gas law to compute internal pressure and an initial moles of gas quantity.
• CrackFrontData
• CrackFrontDefinition
• CrystalPlasticitySlipRateGSSPhenomenological constitutive model slip rate class. Override the virtual functions in your class
• CrystalPlasticitySlipResistanceGSSPhenomenological constitutive models' slip resistance base class. Override the virtual functions in your class
• CrystalPlasticityStateVarRateComponentGSSPhenomenological constitutive model state variable evolution rate component base class. Override the virtual functions in your class
• CrystalPlasticityStateVarRateComponentVocePhenomenological Voce constitutive model state variable evolution rate component base class.
• CrystalPlasticityStateVariableCrystal plasticity state variable class. Override the virtual functions in your class
• ElementPropertyReadFileUser Object to read property data from an external file and assign to elements: Works only for Rectangular geometry (2D-3D)
• EulerAngleFileReaderRead Euler angle data from a file and provide it to other objects.
• GeneralizedPlaneStrainUserObjectGeneralized plane strain UserObject to provide residual and diagonal jacobian entries.
• GlobalStrainUserObjectGlobal Strain UserObject to provide Residual and diagonal Jacobian entry
• HEVPEqvPlasticStrainUser Object to integrate equivalent plastic strain
• HEVPEqvPlasticStrainRateUser Object computing equivalent plastic strain rate
• HEVPFlowRatePowerLawJ2User object to evaluate power law flow rate and flow direction based on J2
• HEVPLinearHardeningUser Object for linear hardening
• HEVPRambergOsgoodHardeningUser object for Ramberg-Osgood hardening power law hardening
• InteractionIntegralComputes the interaction integral for fracture
• JIntegralCalculates the J-integral at a specified point along the crack front
• LinearViscoelasticityManagerManages the updating of the semi-implicit single-step first-order finite difference time-stepping scheme
• Mass
• MaterialTensorIntegralThis postprocessor computes an element integral of a component of a material tensor as specified by the user-supplied indices
• MaterialTimeStepPostprocessorThis postprocessor estimates a timestep that reduces the increment change in a material property below a given threshold.
• MixedModeEquivalentKComputes the mixed-mode stress intensity factor given the , , and stress intensity factors
• TensorMechanicsHardeningConstantNo hardening - the parameter is independent of the internal parameter(s)
• TensorMechanicsHardeningCubicHardening is Cubic
• TensorMechanicsHardeningCutExponentialHardening is Cut-exponential
• TensorMechanicsHardeningExponentialHardening is Exponential
• TensorMechanicsHardeningGaussianHardening is Gaussian
• TensorMechanicsHardeningPowerRuleHardening defined by power rule
• TensorMechanicsPlasticDruckerPragerNon-associative Drucker Prager plasticity with no smoothing of the cone tip.
• TensorMechanicsPlasticDruckerPragerHyperbolicNon-associative Drucker Prager plasticity with hyperbolic smoothing of the cone tip.
• TensorMechanicsPlasticIsotropicSDIsotropicSD plasticity for pressure sensitive materials and also models the strength differential effect
• TensorMechanicsPlasticJ2J2 plasticity, associative, with hardening
• TensorMechanicsPlasticMeanCapClass that limits the mean stress. Yield function = a*mean_stress - strength. mean_stress = (stress_xx + stress_yy + stress_zz)/3
• TensorMechanicsPlasticMeanCapTCAssociative mean-cap tensile and compressive plasticity with hardening/softening
• TensorMechanicsPlasticMohrCoulombNon-associative Mohr-Coulomb plasticity with hardening/softening
• TensorMechanicsPlasticMohrCoulombMultiNon-associative Mohr-Coulomb plasticity with hardening/softening
• TensorMechanicsPlasticOrthotropicOrthotropic plasticity for pressure sensitive materials and also models the strength differential effect
• TensorMechanicsPlasticSimpleTesterClass that can be used for testing multi-surface plasticity models. Yield function = a*stress_yy + b*stress_zz + c*stress_xx + d*(stress_xy + stress_yx)/2 + e*(stress_xz + stress_zx)/2 + f*(stress_yz + stress_zy)/2 - strength
• TensorMechanicsPlasticTensileAssociative tensile plasticity with hardening/softening, and tensile_strength = 1
• TensorMechanicsPlasticTensileMultiAssociative tensile plasticity with hardening/softening
• TensorMechanicsPlasticWeakPlaneShearNon-associative finite-strain weak-plane shear perfect plasticity. Here cohesion = 1, tan(phi) = 1 = tan(psi)
• TensorMechanicsPlasticWeakPlaneTensileAssociative weak-plane tensile plasticity with hardening/softening
• TensorMechanicsPlasticWeakPlaneTensileNAssociative weak-plane tensile plasticity with hardening/softening, with specified, fixed normal vector. (WeakPlaneTensile combined with specifying N in the Material might be preferable to you.)
• TorqueReactionTorqueReaction calculates the torque in 2D and 3Dabout a user-specified axis of rotation centeredat a user-specied origin.
• XFEMTest App
• TestCrackCounterTest postprocessor for extracting the crack_tip_origin_direction_map from XFEM.
• Navier Stokes App
• INSExplicitTimestepSelectorPostprocessor that computes the minimum value of h_min/|u|, where |u| is coupled in as an aux variable.
• NSEntropyErrorComputes entropy error.
• VolumetricFlowRateComputes the volumetric flow rate through a boundary.
• Tensor Mechanics Test App
• TestSubblockIndexProvider
• Chemical Reactions App
• TotalMineralVolumeFractionTotal volume fraction of coupled mineral species
• Porous Flow App
• AdvectiveFluxCalculatorConstantVelocityCompute K_ij (a measure of advective flux from node i to node j) and R+ and R- (which quantify amount of antidiffusion to add) in the Kuzmin-Turek FEM-TVD multidimensional scheme. Constant advective velocity is assumed
• PorousFlowAdvectiveFluxCalculatorSaturatedComputes the advective flux of fluid of given phase, assuming fully-saturated conditions. Hence this UserObject is only relevant to single-phase situations. Explicitly, the UserObject computes (density / viscosity) * (- permeability * (grad(P) - density * gravity)), using the Kuzmin-Turek FEM-TVD multidimensional stabilization scheme
• PorousFlowAdvectiveFluxCalculatorSaturatedHeatComputes the advective flux of heat energy in the given phase, assuming fully-saturated conditions. Hence this UserObject is only relevant to single-phase situations. Explicitly, the UserObject computes (density * enthalpy / viscosity) * (- permeability * (grad(P) - density * gravity)), using the Kuzmin-Turek FEM-TVD multidimensional stabilization scheme
• PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponentComputes the advective flux of fluid of given phase and fluid component. Explicitly, the UserObject computes (mass_fraction * density / viscosity) * (- permeability * (grad(P) - density * gravity)), using the Kuzmin-Turek FEM-TVD multidimensional stabilization scheme
• PorousFlowAdvectiveFluxCalculatorUnsaturatedComputes the advective flux of fluid of given phase, assuming unsaturated conditions. Hence this UserObject is only relevant to single-phase situations, or multi-phase situations where each fluid component appears in one phase only. Explicitly, the UserObject computes (density * relative_permeability / viscosity) * (- permeability * (grad(P) - density * gravity)), using the Kuzmin-Turek FEM-TVD multidimensional stabilization scheme
• PorousFlowAdvectiveFluxCalculatorUnsaturatedHeatComputes the advective flux of heat energy in a given phase, assuming unsaturated conditions. Hence this UserObject is only relevant to single-phase situations, or multi-phase situations where each fluid component appears in one phase only. Explicitly, the UserObject computes (density * enthalpy * relative_permeability / viscosity) * (- permeability * (grad(P) - density * gravity)), using the Kuzmin-Turek FEM-TVD multidimensional stabilization scheme
• PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponentComputes the advective flux of fluid of given phase and component. Hence this UserObject is relevant to multi-phase, multi-component situations. Explicitly, the UserObject computes (mass_fraction * density * relative_permeability / viscosity) * (- permeability * (grad(P) - density * gravity)), using the Kuzmin-Turek FEM-TVD multidimensional stabilization scheme
• PorousFlowBrineCO2Fluid state class for brine and CO2
• PorousFlowCapillaryPressureBCBrooks-Corey capillary pressure
• PorousFlowCapillaryPressureBWBroadbridge and White capillary pressure for negligable Kn
• PorousFlowCapillaryPressureConstConstant capillary pressure
• PorousFlowCapillaryPressureRSCRogers-Stallybrass-Clements version of effective saturation for the water phase, valid for residual saturations = 0, and viscosityOil = 2 * viscosityWater. seff_water = 1 / sqrt(1 + exp((Pc - shift) / scale)), where scale = 0.25 * scale_ratio * oil_viscosity.
• PorousFlowCapillaryPressureVGvan Genuchten capillary pressure
• PorousFlowDictatorHolds information on the PorousFlow variable names
• PorousFlowFluidMassCalculates the mass of a fluid component in a region
• PorousFlowFluidStateFlashCompositional flash calculations for use in fluid state classes
• PorousFlowHeatEnergyCalculates the sum of heat energy of fluid phase(s) and/or the porous skeleton in a region
• PorousFlowPlotQuantityExtracts the value from the PorousFlowSumQuantity UserObject
• PorousFlowSumQuantityRecords total mass flowing into a borehole
• PorousFlowWaterNCGFluid state class for water and non-condensable gas