# Contact Module

The interaction of moving bodies is a common occurrence in our world, and therefore modeling such problems is essential to accurately represent the mechanical behavior of the physic world. However, finite element methods do not have an inherent means of modeling contact. Therefore, specific contact algorithms are required. These algorithms enforce constraints between surfaces in the mesh, to prevent penetration and develop contact forces. The MOOSE contact module provides the necessary tools for modeling mechanical contact.

## Theory

Mechanical contact between fuel pellets and the inside surface of the cladding is based on three requirements.

That is, the penetration distance (typically referred to as the gap in the contact literature) of one of the body into another must not be positive; the contact force opposing penetration must be positive in the normal direction; and either the penetration distance or the contact force must be zero at all times.

In the MOOSE Contact Module, these contact constraints are enforced through the use of node/face constraints. Specifically, the nodes of the fuel pellets are prevented from penetrating cladding faces. This is accomplished in a manner similar to that detailed by Heinstein and Laursen. First, a geometric search determines which master nodes have penetrated slave faces. For those nodes, the internal force computed by the divergence of stress is moved to the appropriate slave face at the point of contact. Those forces are distributed to slave nodes by employing the finite element shape functions. Additionally, the master nodes are constrained to remain on the pellet faces, preventing penetration. The module currently supports frictionless and tied contact. Friction is an important capability, and preliminary support for frictional contact is available.

Finite element contact is notoriously difficult to make efficient and robust in three dimensions. That being the case, effort is underway to improve contact algorithm.

## Procedure for using mechanical contact

In the contact module there are currently two sytems to choose from mechanical contact : Dirac and Constraint. Constraint based contact is recommended for two-dimensional problems and Dirac for three-dimensional problems. Constraint contact is more robust but due to the patch size requirement specified in the `Mesh`

block, Constraint contact uses too much memory on 3D problems. Depending upon the contact formalism chosen, the solver options to be used change. The details of the solver parameters recommended for Dirac and Constraint contact formalisms are provided below.

The contact block in the MOOSE input file looks like this :

```
[Contact]
[./contact]
disp_x = <variable>
disp_y = <variable>
disp_z = <variable>
formulation = <string> (DEFAULT)
friction_coefficient = <real> (0)
master = <string>
model = <string> (frictionless)
normal_smoothing_distance = <real>
normal_smoothing_method = <string> (edge_based)
order = <string> (FIRST)
penalty = <real> (1e8)
normalize_penalty = <bool> (false)
slave = <string>
system = <string> (Dirac)
tangential_tolerance = <real>
tension_release = <real> (0)
[../]
[]
```

The parameters descriptions are :

`disp_x`

(**Required**) Variable name for displacement variable in x direction. Tipically`disp_x`

.`disp_y`

Variable name for displacement variable in y direction. Typically`disp_y`

.`disp_z`

Variable name for displacement variable in z direction. Typically`disp_z`

`formulation`

Select either`DEFAULT`

,`KINEMATIC`

, or`PENALTY`

.`DEFAULT`

is`KINEMATIC`

.`friction_coefficient`

The friction coefficient.`master`

(**Required**) The boundary ID for the master surface.`model`

Select either`frictionless`

,`glued`

, or`coulomb`

.`normal_smoothing_distance`

Distance from face edge in parametric coordinates over which to smooth the contact normal. is a reasonable value.`normal_smoothing_method`

Select either`edge_based`

or`nodal_normal_based`

. If`nodal_normal_based`

, must also have a`NodalNormals`

block.`order`

The order of the variable. Typical values are`FIRST`

and`SECOND`

.`penalty`

The penalty stiffness value to be used in the constraint.`normalize_penalty`

Whether to normalize the penalty stiffness by the nodal area of the slave node.`slave`

(**Required**) The boundary ID for the slave surface.`system`

The system to use for constraint enforcement. Options are Dirac`DiracKernel`

or`Constraint`

. The default is`Dirac`

.`tangential_tolerance`

Tangential distance to extend edges of contact surfaces.`tension_release`

Tension release threshold. A node will not be released if its tensile load is below this value. If negative, no tension release will occur.

It is good practice to make the surface with the coarser mesh to be the master surface.

The robustness and accuracy of the mechanical contact algorithm is strongly dependent on the penalty parameter. If the parameter is too small, inaccurate solutions are more likely. If the parameter is too large, the solver may struggle.

The `DEFAULT`

option uses an enforcement algorithmn that moves th internal forces at a slave node to th master face. The distance between the slave node and the master face is penalized, The `PENALTY`

algorithm is the traditional penalty enforcement technique.

## Petsc options for contact

The recommended PETSc options for use with Constraint based contact are shown below :

```
[Executioner]
...
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap
-ksp_gmres_restart'
petsc_options_value = 'asm lu 20 101'
...
[../]
```

The recommended PETSc options for use with Dirac based contact are given below:

```
[Executioner]
...
petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type
-pc_hypre_boomeramg_max_iter'
petsc_options_value = '201 hypre boomeramg 4'
...
[../]
```

## Objects, Actions, and Syntax

## AuxKernels

- Moose App
- AddKernelAction
- BoundsAux
- ConstantAuxCreates a constant field in the domain.
- DebugResidualAux
- DiffusionFluxAuxCompute components of flux vector for diffusion problems .
- ElementH1ErrorFunctionAuxComputes the H1 or W^{1,p} error between an exact function and a coupled variable.
- ElementL2ErrorFunctionAuxA class for computing the element-wise L^2 (Euclidean) error between a function and a coupled variable.
- ElementLengthAuxCompute the element size using Elem::hmin() or Elem::hmax() from libMesh.
- ElementLpNormAuxCompute an elemental field variable (single value per element) equal to the Lp-norm of a coupled Variable.
- ElementQualityAuxGenerates a field containing the quality metric for each element. Useful for visualizing mesh quality.
- FunctionAuxAuxiliary Kernel that creates and updates a field variable by sampling a function through space and time.
- GapValueAux
- JouleHeatingHeatGeneratedAuxCompute heat generated from Joule heating .
- LineSegmentLevelSetAuxAuxiliary Kernel that calcuates level set value using line segments' description.
- MaterialRankFourTensorAuxAccess a component of a RankFourTensor for automatic material property output
- MaterialRankTwoTensorAuxAccess a component of a RankTwoTensor for automatic material property output
- MaterialRealAuxOutputs element volume-averaged material properties
- MaterialRealDenseMatrixAux
- MaterialRealTensorValueAux
- MaterialRealVectorValueAux
- MaterialStdVectorAuxExtracts a component of a material type std::vector<Real> to an aux variable. If the std::vector is not of sufficient size then zero is returned
- MaterialStdVectorRealGradientAuxExtracts a component of a material's std::vector<RealGradient> to an aux variable. If the std::vector is not of sufficient size then zero is returned
- NearestNodeDistanceAuxStores the distance between a block and boundary or between two boundaries.
- NearestNodeValueAuxRetrieves a field value from the closest node on the paired boundary and stores it on this boundary or block.
- NormalizationAux
- ParsedAuxParsed function AuxKernel.
- PenetrationAuxAuxiliary Kernel for computing several geometry related quantities between two contacting bodies.
- ProcessorIDAuxCreates a field showing the processors and partitioning.
- QuotientAuxDivides two coupled variables.
- SelfAux
- SolutionAuxCreates fields by using information from a SolutionUserObject.
- SpatialUserObjectAux
- TagMatrixAuxCouple the diag of a tag matrix, and return its nodal value
- TagVectorAuxCouple a tag vector, and return its nodal value
- VariableGradientComponentCreates a field with consisting of one component of a coupled variable.
- VariableTimeIntegrationAux
- VectorMagnitudeAuxCreates a field representing the magnitude of three coupled variables using an Euclidean norm.
- VectorPostprocessorVisualizationAuxRead values from a VectorPostprocessor that is producing vectors that are 'number of processors' * in length. Puts the value for each processor into an elemental auxiliary field.
- Phase Field Test App
- VoronoiICAux
- Phase Field App
- BndsCalcAuxCalculate location of grain boundaries in a polycrystalline sample
- CrossTermGradientFreeEnergyFree energy contribution from the cross terms in ACMultiInetrface
- DiscreteNucleationAuxProject the DiscreteNucleationMap state onto an AuxVariable
- EBSDReaderAvgDataAux
- EBSDReaderPointDataAux
- EulerAngleProvider2RGBAuxOutput RGB representation of crystal orientation from user object to an AuxVariable. The entire domain must have the same crystal structure.
- EulerAngleVariables2RGBAux
- FeatureFloodCountAuxFeature detection by connectivity analysis
- GrainAdvectionAuxCalculates the advection velocity of grain due to rigid body translation and rotation
- KKSGlobalFreeEnergyTotal free energy in KKS system, including chemical, barrier and gradient terms
- KKSMultiFreeEnergyTotal free energy in multi-phase KKS system, including chemical, barrier and gradient terms
- OutputEulerAnglesOutput euler angles from user object to an AuxVariable.
- PFCEnergyDensity
- PFCRFFEnergyDensity
- TotalFreeEnergyTotal free energy (both the bulk and gradient parts), where the bulk free energy has been defined in a material
- MatVecRealGradAuxKernel
- MaterialVectorAuxKernel
- MaterialVectorGradAuxKernel
- Misc App
- CoupledDirectionalMeshHeightInterpolation
- Functional Expansion Tools App
- FunctionSeriesToAuxAuxKernel to convert a functional expansion (Functions object, type = FunctionSeries) to an AuxVariable
- Solid Mechanics App
- MaterialSymmElasticityTensorAux
- MaterialTensorAuxOutputs quantities related to second-order tensors used as material properties
- Fluid Properties App
- SaturationTemperatureAuxComputes saturation temperature from pressure and 2-phase fluid properties object
- SpecificEnthalpyAuxComputes specific enthalpy from pressure and temperature
- StagnationPressureAuxComputes stagnation pressure from specific volume, specific internal energy, and velocity
- StagnationTemperatureAuxComputes stagnation temperature from specific volume, specific internal energy, and velocity
- Contact App
- ContactPressureAux
- Richards App
- DarcyFluxComponentDarcy flux (in m
^{3.s}-1.m^{-2, or m.s}-1) -(k_ij/mu (nabla_j P - w_j)), where k_ij is the permeability tensor, mu is the fluid viscosity, P is the fluid pressure, and w_j is the fluid weight. If velocity_scaling is used then -(k_ij/mu (nabla_j P - w_j))/velocity_scaling is returned - RichardsDensityAuxauxillary variable which is fluid density
- RichardsDensityPrimeAuxauxillary variable which is d(density)/dp
- RichardsDensityPrimePrimeAuxauxillary variable which is d
^{2(density)/dp}2 - RichardsRelPermAuxauxillary variable which is the relative permeability
- RichardsRelPermPrimeAuxauxillary variable which is d(relative permeability)/dSeff
- RichardsRelPermPrimePrimeAuxauxillary variable which is d
^{2(relative permeability)/dSeff}2 - RichardsSatAuxauxillary variable which is saturation
- RichardsSatPrimeAuxauxillary variable which is saturation
- RichardsSeffAuxauxillary variable which is effective saturation
- RichardsSeffPrimeAuxauxillary variable which is effective saturation
- RichardsSeffPrimePrimeAuxauxillary variable which is 2nd derivative of effective saturation
- Tensor Mechanics App
- AccumulateAux
- CylindricalRankTwoAuxTakes RankTwoTensor material and outputs component in cylindrical coordinates
- DomainIntegralQFunction
- DomainIntegralTopologicalQFunction
- ElasticEnergyAuxCompute the local elastic energy
- GlobalDisplacementAuxAuxKernel to visualize the displacements generated by the global strain tensor
- NewmarkAccelAuxComputes the current acceleration using the Newmark method.
- NewmarkVelAuxCalculates the current velocity using Newmark method.
- RadialDisplacementCylinderAuxCompute the radial component of the displacement vector for cylindrical models.
- RadialDisplacementSphereAuxCompute the radial component of the displacement vector for spherical models.
- RankFourAuxAccess a component of a RankFourTensor
- RankTwoAuxAccess a component of a RankTwoTensor
- RankTwoScalarAuxCompute a scalar property of a RankTwoTensor
- TestNewmarkTIAssigns the velocity/acceleration calculated by time integrator to the velocity/acceleration auxvariable.
- XFEMApp
- XFEMCutPlaneAux
- XFEMMarkerAux
- XFEMVolFracAux
- Navier Stokes App
- EnthalpyAux
- INSCourantComputes h_min / |u|.
- INSDivergenceAuxComputes h_min / |u|.
- InternalEnergyAux
- NSEnthalpyAuxNodal auxiliary variable, for computing enthalpy at the nodes.
- NSInternalEnergyAuxAuxiliary kernel for computing the internal energy of the fluid.
- NSMachAuxAuxiliary kernel for computing the Mach number assuming an ideal gas.
- NSPressureAuxNodal auxiliary variable, for computing pressure at the nodes.
- NSSpecificVolumeAuxAuxiliary kernel for computing the specific volume (1/rho) of the fluid.
- NSTemperatureAuxTemperature is an auxiliary value computed from the total energy based on the FluidProperties.
- NSVelocityAuxVelocity auxiliary value.
- PressureAux
- SpecificInternalEnergyAux
- SpecificVolumeAux
- TemperatureAux
- Fluid Properties Test App
- TwoPhaseAverageDensityAuxComputes the average of the densities of the phases corresponding to a 2-phase fluid properties object.
- Chemical Reactions App
- AqueousEquilibriumRxnAuxConcentration of secondary equilibrium species
- EquilibriumConstantAuxEquilibrium constant for a given equilibrium species (in form log10(Keq))
- KineticDisPreConcAuxConcentration of secondary kinetic species
- KineticDisPreRateAuxKinetic rate of secondary kinetic species
- PHAuxpH of solution
- TotalConcentrationAuxTotal concentration of primary species (including stoichiometric contribution to secondary equilibrium species)
- Porous Flow App
- PorousFlowDarcyVelocityComponentDarcy velocity (in m
^{3.s}-1.m^{-2, or m.s}-1) -(k_ij * krel /mu (nabla_j P - w_j)), where k_ij is the permeability tensor, krel is the relative permeability, mu is the fluid viscosity, P is the fluid pressure, and w_j is the fluid weight. - PorousFlowDarcyVelocityComponentLowerDimensionalDarcy velocity on a lower-dimensional element embedded in a higher-dimensional mesh. Units m
^{3.s}-1.m^{-2, or m.s}-1. Darcy velocity = -(k_ij * krel /(mu * a) (nabla_j P - w_j)), where k_ij is the permeability tensor, krel is the relative permeability, mu is the fluid viscosity, P is the fluid pressure, a is the fracture aperture and w_j is the fluid weight. The difference between this AuxKernel and PorousFlowDarcyVelocity is that this one projects gravity along the element's tangent direction. NOTE! For a meaningful answer, your permeability tensor must NOT contain terms that rotate tangential vectors to non-tangential vectors. - PorousFlowPropertyAuxAuxKernel to provide access to properties evaluated at quadpoints. Note that elemental AuxVariables must be used, so that these properties are integrated over each element.

## Constraints

- Moose App
- AddConstraintAction
- CoupledTiedValueConstraint
- EqualGradientConstraint
- EqualValueBoundaryConstraint
- EqualValueConstraint
- EqualValueEmbeddedConstraintThis is a constraint enforcing overlapping portions of two blocks to have the same variable value
- LinearNodalConstraintConstrains slave node to move as a linear combination of master nodes.
- TiedValueConstraint
- Heat Conduction App
- GapConductanceConstraintComputes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9
- XFEMApp
- XFEMEqualValueAtInterfaceenforce a same value on both sides of the interface.
- XFEMSingleVariableConstraint
- Contact App
- GluedContactConstraint
- MechanicalContactConstraint
- MultiDContactConstraint
- OneDContactConstraint
- SparsityBasedContactConstraint

## Contact

## Dampers

- Moose App
- AddDamperAction
- BoundingValueElementDamper
- BoundingValueNodalDamper
- ConstantDamper
- MaxIncrement
- Tensor Mechanics App
- ElementJacobianDamperDamper that limits the change in element Jacobians
- Contact App
- ContactSlipDamper

## DiracKernels

- Moose App
- AddDiracKernelAction
- ConstantPointSource
- FunctionDiracSource
- Heat Conduction App
- GapHeatPointSourceMaster
- Richards App
- Q2PBoreholeApproximates a borehole in the mesh with given bottomhole pressure, and radii using a number of point sinks whose positions are read from a file. This DiracKernel is for use by Q2P models
- RichardsBoreholeApproximates a borehole in the mesh with given bottomhole pressure, and radii using a number of point sinks whose positions are read from a file
- RichardsPolyLineSinkApproximates a polyline sink in the mesh by using a number of point sinks whose positions are read from a file
- XFEMApp
- XFEMPressure
- Porous Flow App
- PorousFlowPeacemanBoreholeApproximates a borehole in the mesh using the Peaceman approach, ie using a number of point sinks with given radii whose positions are read from a file
- PorousFlowPolyLineSinkApproximates a polyline sink by using a number of point sinks with given weighting whose positions are read from a file
- PorousFlowSquarePulsePointSourcePoint source (or sink) that adds (removes) fluid at a constant mass flux rate for times between the specified start and end times.
- Contact App
- ContactMaster
- SlaveConstraint

## Preconditioning

- Moose App
- SetupPreconditionerAction
- AddFieldSplitAction
- Split
- FDP
- FSP
- PBP
- SMP
- Contact App
- ContactSplit

## Problem

- Moose App
- CreateProblemAction
- DynamicObjectRegistrationAction
- DisplacedProblem
- DumpObjectsProblemSingle purpose problem object that does not run the given input but allows deconstructing actions into their series of underlying Moose objects and variables.
- EigenProblem
- FEProblem
- Level Set App
- LevelSetProblemA specilized problem class that adds a custom call to MultiAppTransfer execution to transfer adaptivity for the level set reinitialization.
- LevelSetReinitializationProblemA specialied problem that has a method for resetting time for level set reinitialization execution.
- External Petsc Solver App
- ExternalPETScProblemProblem extension point for wrapping external applications
- Richards App
- RichardsMultiphaseProblem
- Contact App
- AugmentedLagrangianContactProblemProblem that checks for convergence relative to a user-supplied reference quantity rather than the initial residual
- ReferenceResidualProblemProblem that checks for convergence relative to a user-supplied reference quantity rather than the initial residual

## UserObjects

- Moose App
- AddUserObjectAction
- 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.
- PerformanceDataProvides programmatic access to Performance Log Data
- PointValue
- PostprocessorComparisonCompares two post-processors and produces a boolean value
- Receiver
- 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)s
^{n + 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)s
^{n - 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 = 2
*viscosityWater. seff_water = 1/Sqrt(1 + Exp((Pc - shift)/scale)), where scale = 0.25*scale_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 = 2
*viscosityWater. seff_gas = 1 - 1/Sqrt(1 + Exp((Pc - shift)/scale)), where scale = 0.25*scale_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 = 2
*viscosityWater. seff_water = 1/Sqrt(1 + Exp(Pc - shift)/scale)), where scale = 0.25*scale_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