TotalLagrangianStressDivergence

Enforce equilibrium with a total Lagrangian formulation in Cartesian coordinates.

Description

The TotalLagrangianStressDivergence kernel calculates the stress equilibrium residual in the reference configuration using the pk1_stress (the 1st Piola-Kirchhoff 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 giving the weak form of the divergence of the 1st Piola Kirchhoff stress with respect to the reference coordinates with the corresponding Jacobian where is the first Piola-Kirchhoff stress, are the test function gradients (with respect to the reference coordinates) and with the discrete (nodal) displacements. For the unstabilized case with the trial function gradients with respect to the reference 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.

The constitutive model needs to provide the first Piola-Kirchhoff stress and the derivative of that stress with respect to the deformation 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.

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.

Example Input File Syntax

The following illustrates manually including 3D stress equilibrium with the total Lagrangian formulation, using large deformation kinematics.

[Kernels]
  [sdx]
    type = TotalLagrangianStressDivergence
    variable = disp_x
    component = 0
    large_kinematics = true
  []
  [sdy]
    type = TotalLagrangianStressDivergence
    variable = disp_y
    component = 1
    large_kinematics = true
  []
  [sdz]
    type = TotalLagrangianStressDivergence
    variable = disp_z
    component = 2
    large_kinematics = true
  []
[]
(moose/modules/solid_mechanics/test/tests/lagrangian/cartesian/total/patch/large_patch.i)

Input Parameters

  • 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

Required 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)

    Options:nontime, system

    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)

    Options:nontime, time

    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

Advanced Parameters