Bounds System
The Bounds system is designed to bound the value of a nonlinear variable. Whether the bound is an upper or lower bound depends on the parameters passed to the Bounds object. The bound may be spatially and time-dependent, and even depend on other simulation quantities, as implemented in the particular Bounds object used.
The auxiliary variable that serves as the variable parameter of a Bounds object is not actually used or even set in the computation. However, its type is used to decide if the Bounds loop will be 'nodal' (loop on all nodes) or 'elemental' (loop on quadrature points in elements). Its block restriction is used to define where the bounds is applied. It may be re-used for multiple bounds objects.
Only nodal and constant elemental variables are supported at this time.
The Bounds system supports both finite element and finite volume variables. Only elemental bounds should be used for finite volume variables.
Note that in order for Bounds to have an effect, the user has to specify the PETSc options -snes_type vinewtonssls or -snes_type vinewtonrsls. A warning will be generated if neither option is specified. The PETSc manual pages for the vinewtonssls algorithm can be found here while the manual page for vinewtonrsls can be found here.
Example syntax
In the following example, a lower and an upper bound are applied to two variables u and v using the same auxiliary variable bounds_dummy and four Bounds objects.
[Variables]
[u]
order = FIRST
family = LAGRANGE
[]
[v]
order = FIRST
family = LAGRANGE
[]
[]
[AuxVariables]
[bounds_dummy]
order = FIRST
family = LAGRANGE
[]
[]
[Bounds]
[u_upper_bound]
type = ConstantBounds
variable = bounds_dummy
bounded_variable = u
bound_type = upper
bound_value = 1
[]
[u_lower_bound]
type = ConstantBounds
variable = bounds_dummy
bounded_variable = u
bound_type = lower
bound_value = 0
[]
[v_upper_bound]
type = ConstantBounds
variable = bounds_dummy
bounded_variable = v
bound_type = upper
bound_value = 3
[]
[v_lower_bound]
type = ConstantBounds
variable = bounds_dummy
bounded_variable = v
bound_type = lower
bound_value = -1
[]
[]
(test/tests/bounds/constant_bounds.i)Available Objects
- Moose App
- ConstantBoundsProvides constant bound of a variable for the PETSc's variational inequalities solver
- ConstantBoundsAuxProvides constant bound of a variable for the PETSc's variational inequalities solver
- VariableOldValueBoundsUses the old variable values as the bounds for the new solve.
- VariableOldValueBoundsAuxUses the old variable values as the bounds for the new solve.
Available Actions
- Moose App
- AddBoundsVectorsActionAction to add vectors to nonlinear system when using the Bounds syntax.
- AddBoundActionAdd a Kernel object to the simulation.