- componentWhich direction this kernel acts in
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Which direction this kernel acts in
- displacementsThe displacement components
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacement components
- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this residual object operates on
UpdatedLagrangianStressDivergence
Enforce equilibrium with an updated Lagrangian formulation in Cartesian coordinates.
Description
The UpdatedLagrangianStressDivergence
kernel calculates the stress equilibrium residual in the current configuration using the cauchy_stress
(the Cauchy stress). This kernel provides the residual for Cartesian coordinates and the user needs to add one kernel for each dimension of the problem. Alternatively, the SolidMechanics/QuasiStatic simplifies the process of adding the required kernels and setting up the input parameters.
Residual, Jacobian, and stabilization
For large deformation kinematics the kernel applies the residual with the corresponding Jacobian where is the Cauchy stress, with the incremental spatial velocity gradient, are the test function gradients (with respect to the current coordinates) and with the discrete (nodal) displacements. For the unstabilized case with the trial function gradients with respect to the current coordinates.
The residual and Jacobian degenerate to and for the small deformation case, with the small stress, with the small strain and for the unstabilized case. The large_kinematics
flag controls the kinematic theory. For this kernel use_displaced_mesh
must be set to true
if large_kinematics
is true
so that the volume integrals and gradients are with respect to the current coordinates.
For the Jacobian the small deformation term and the large deformation term are identical (assuming the incremental deformation gradient is the identity and the deformation gradient degenerates to the small strain for the small deformation case) and involve the constitutive model. These are then called the "material" part of the Jacobian. The remaining large deformation term involves the current stress and the updated geometry and so it is called the "geometric" part of the Jacobian.
The constitutive model needs to provide the Cauchy stress and the derivative of that stress with respect to the increment in the spatial velocity gradient. However, the material system provides a common interface to define the constitutive model with any stress and strain measures that are convenient, translating the user-defined stress and Jacobian to the correct form automatically. Note that if the model is rotationally invariant then where is the increment in the material deformation rate, equal to the increment in the logarithmic strain Freed (2014).
The kernel is compatible with the modification of the strains to stabilize the problem for incompressible or nearly incompressible deformation. This form of stabilization does not modify the residual equation, though the modified strain does change the constitutive model stress update. The strain modification does affect the Jacobian by altering the definition of the gradient tensors. With the modified strains applied these become for small deformations with and for large deformations with and the average deformation gradient, defined in the stabilization system documentation. Note this is a somewhat unusual integral for an updated Lagrangian model, but it follows to keep the derivative term consistent with the modification to the strains. The stabilize_strain
flag controls if the kernel modifies the Jacobian to account for the stabilized strains.
use_displaced_mesh
The UpdatedLagrangianStressDivergence
kernel is the only object in the new, Lagrangian Solid Mechanics system that requires use_displaced_mesh
to be set. The use_displaced_mesh
flag should be set to true
if and only if large_kinematics
is also true
. The kernel enforces this condition with an error.
Example Input File Syntax
The following illustrates manually including 3D stress equilibrium with the total Lagrangian formulation, using large deformation kinematics.
[Kernels]
[sdx]
type = UpdatedLagrangianStressDivergence
variable = disp_x
displacements = 'disp_x disp_y disp_z'
component = 0
use_displaced_mesh = true
large_kinematics = true
[]
[sdy]
type = UpdatedLagrangianStressDivergence
variable = disp_y
displacements = 'disp_x disp_y disp_z'
component = 1
use_displaced_mesh = true
large_kinematics = true
[]
[sdz]
type = UpdatedLagrangianStressDivergence
variable = disp_z
displacements = 'disp_x disp_y disp_z'
component = 2
use_displaced_mesh = true
large_kinematics = true
[]
[]
(moose/modules/solid_mechanics/test/tests/lagrangian/cartesian/updated/patch/large_patch.i)Input Parameters
- base_nameMaterial property base name
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Material property base name
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- eigenstrain_namesList of eigenstrains used in the strain calculation. Used for computing their derivatives for off-diagonal Jacobian terms.
C++ Type:std::vector<MaterialPropertyName>
Unit:(no unit assumed)
Controllable:No
Description:List of eigenstrains used in the strain calculation. Used for computing their derivatives for off-diagonal Jacobian terms.
- large_kinematicsFalseUse large displacement kinematics
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Use large displacement kinematics
- out_of_plane_strainThe out-of-plane strain variable for weak plane stress formulation.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The out-of-plane strain variable for weak plane stress formulation.
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- stabilize_strainFalseAverage the volumetric strains
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Average the volumetric strains
- temperatureThe name of the temperature variable used in the ComputeThermalExpansionEigenstrain. (Not required for simulations without temperature coupling.)
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of the temperature variable used in the ComputeThermalExpansionEigenstrain. (Not required for simulations without temperature coupling.)
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Unit:(no unit assumed)
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Unit:(no unit assumed)
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Unit:(no unit assumed)
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Unit:(no unit assumed)
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Unit:(no unit assumed)
Controllable:No
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- diag_save_inThe name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- save_inThe name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
References
- AD Freed.
Hencky strain and logarithmic rates in lagrangian analysis.
International Journal of Engineering Science, 81:135–145, 2014.[BibTeX]