- displacementsThe displacement variables
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacement variables
- scalar_out_of_plane_strainScalar variable for the out-of-plane strain (in y direction for 1D Axisymmetric or in z direction for 2D Cartesian problems)
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:Scalar variable for the out-of-plane strain (in y direction for 1D Axisymmetric or in z direction for 2D Cartesian problems)
GeneralizedPlaneStrainAction
Set up the GeneralizedPlaneStrain environment
Description
This action simplifies the input syntax for creating a generalized plane strain model. It creates the objects associated with the scalar out-of-plane strain variable and the out-of-plane equilibrium equation. Use "use_automatic_differentiation" to select the AD construction path.
Constructed Objects
In legacy mode, the action creates the same UserObject, ScalarKernel, and off-diagonal Kernel objects used by existing generalized plane strain inputs.
Table 1: Legacy objects created by GeneralizedPlaneStrainAction
| Object | Purpose |
|---|---|
| Generalized Plane Strain Off Diagonal | Couples the in-plane displacement variables and the scalar out-of-plane strain variable in the off-diagonal Jacobian. |
| Generalized Plane Strain Scalar Kernel | Assembles the scalar out-of-plane equilibrium residual. |
| Generalized Plane Strain User Object | Computes the residual and diagonal Jacobian data used by the scalar kernel. |
In AD mode, the action creates exactly one ADGeneralizedPlaneStrain object. The legacy UserObject, ScalarKernel, and off-diagonal Kernel objects are not created because ADKernelScalarBase assembles the scalar residual and its couplings through automatic differentiation. When "use_displaced_mesh" is true, the AD kernel uses displaced-mesh quadrature weights for that scalar assembly.
Table 2: AD objects created by GeneralizedPlaneStrainAction
| Object | Purpose |
|---|---|
| ADGeneralizedPlaneStrain | Assembles the scalar out-of-plane equilibrium residual and AD couplings. |
The action also creates the scalar out-of-plane strain variable when it is missing. The automatically created scalar variable is a FIRST order nonlinear scalar variable in nonlinear system nl0. If the named scalar variable already exists in nl0, the action reuses it. A field variable or a scalar variable in a different nonlinear system with the same name is rejected.
Out-of-Plane Pressure
The residual assembled for the scalar out-of-plane strain is where is the out-of-plane pressure. Positive pressure is applied toward the body. The pressure may be supplied with "out_of_plane_pressure_function" or with "out_of_plane_pressure_material". In AD mode, the pressure material is read as a regular Real material property, so it does not add derivatives to the scalar equation.
Generalized Plane Strain and Reference Residual
Generalized plane strain problems may use ReferenceResidualProblem. In this case, a reference scalar variable is needed to correspond with the scalar strain variable.
[Problem<<<{"href": "../../syntax/Problem/index.html"}>>>]
type = ReferenceResidualProblem
extra_tag_vectors = 'ref'
reference_vector = 'ref'
[](modules/combined/test/tests/generalized_plane_strain_tm_contact/out_of_plane_pressure.i)The reference scalar variable is set using the AuxScalarKernel Generalized Plane Strain Reference Residual using the Generalized Plane Strain UserObject.
[AuxScalarKernels<<<{"href": "../../syntax/AuxScalarKernels/index.html"}>>>]
[./gps_ref_res]
type = GeneralizedPlaneStrainReferenceResidual<<<{"description": "Generalized Plane Strain Reference Residual Scalar Kernel", "href": "../auxkernels/GeneralizedPlaneStrainReferenceResidual.html"}>>>
variable<<<{"description": "The name of the variable that this kernel operates on"}>>> = saved_zz
generalized_plane_strain<<<{"description": "The name of the GeneralizedPlaneStrainUserObject"}>>> = gps_GeneralizedPlaneStrainUserObject
[../]
[](modules/combined/test/tests/generalized_plane_strain_tm_contact/out_of_plane_pressure.i)Example Input Syntax
The following test-spec block shows a modern QuasiStatic generalized plane strain input run in AD mode.
[generalized_plane_strain_small_ad]
type = 'Exodiff'
input = 'generalized_plane_strain_small.i'
exodiff = 'generalized_plane_strain_small_out.e'
custom_cmp = 'generalized.exodiff'
prereq = generalized_plane_strain_small
cli_args = 'Physics/SolidMechanics/QuasiStatic/all/use_automatic_differentiation=true '
'Postprocessors/react_z/type=ADMaterialTensorIntegral '
'Materials/elastic_tensor/type=ADComputeIsotropicElasticityTensor '
'Materials/thermal_strain/type=ADComputeThermalExpansionEigenstrain '
'Materials/stress/type=ADComputeLinearElasticStress'
requirement = 'The system shall support an automatic-differentiation generalized plane strain mechanics solution'
design = 'ADComputePlaneSmallStrain.md'
[]
(modules/solid_mechanics/test/tests/generalized_plane_strain/tests)The following input shows a standalone [Physics/SolidMechanics/GeneralizedPlaneStrain] action block. The action creates the missing scalar out-of-plane strain variable in AD mode.
[Physics<<<{"href": "../../syntax/Physics/index.html"}>>>]
[SolidMechanics<<<{"href": "../../syntax/Physics/SolidMechanics/index.html"}>>>]
[GeneralizedPlaneStrain<<<{"href": "../../syntax/Physics/SolidMechanics/GeneralizedPlaneStrain/index.html"}>>>]
[gps]
use_automatic_differentiation<<<{"description": "Use automatic differentiation to assemble the generalized plane strain equation and its coupling terms"}>>> = true
use_displaced_mesh<<<{"description": "Whether to use displaced mesh"}>>> = true
displacements<<<{"description": "The displacement variables"}>>> = 'disp_x disp_y'
scalar_out_of_plane_strain<<<{"description": "Scalar variable for the out-of-plane strain (in y direction for 1D Axisymmetric or in z direction for 2D Cartesian problems)"}>>> = scalar_strain_zz
out_of_plane_pressure_function<<<{"description": "Function used to prescribe pressure (applied toward the body) in the out-of-plane direction (y for 1D Axisymmetric or z for 2D Cartesian problems)"}>>> = traction_function
pressure_factor<<<{"description": "Scale factor applied to prescribed out-of-plane pressure (both material and function)"}>>> = 1e5
[]
[]
[]
[](modules/solid_mechanics/test/tests/generalized_plane_strain/generalized_plane_strain_auto_scalar.i)Input Parameters
- absolute_value_vector_tagsThe tag names for extra vectors that the absolute value of the residual should be accumulated into
C++ Type:std::vector<TagName>
Controllable:No
Description:The tag names for extra vectors that the absolute value of the residual should be accumulated into
- active__all__ If specified only the blocks named will be visited and made active
Default:__all__
C++ Type:std::vector<std::string>
Controllable:No
Description:If specified only the blocks named will be visited and made active
- base_nameMaterial property base name
C++ Type:std::string
Controllable:No
Description:Material property base name
- blockThe list of ids of the blocks (subdomain) that the GeneralizedPlaneStrain kernels will be applied to
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of ids of the blocks (subdomain) that the GeneralizedPlaneStrain kernels will be applied to
- extra_vector_tagsThe tag names for extra vectors that residual data should be saved into
C++ Type:std::vector<TagName>
Controllable:No
Description:The tag names for extra vectors that residual data should be saved into
- inactiveIf specified blocks matching these identifiers will be skipped.
C++ Type:std::vector<std::string>
Controllable:No
Description:If specified blocks matching these identifiers will be skipped.
- out_of_plane_directionzThe direction of the out-of-plane strain.
Default:z
C++ Type:MooseEnum
Controllable:No
Description:The direction of the out-of-plane strain.
- out_of_plane_pressure_functionFunction used to prescribe pressure (applied toward the body) in the out-of-plane direction (y for 1D Axisymmetric or z for 2D Cartesian problems)
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:Function used to prescribe pressure (applied toward the body) in the out-of-plane direction (y for 1D Axisymmetric or z for 2D Cartesian problems)
- out_of_plane_pressure_material0Material used to prescribe pressure (applied toward the body) in the out-of-plane direction
Default:0
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Material used to prescribe pressure (applied toward the body) in the out-of-plane direction
- pressure_factorScale factor applied to prescribed out-of-plane pressure (both material and function)
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Scale factor applied to prescribed out-of-plane pressure (both material and function)
- temperatureThe temperature variable
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The temperature variable
- use_automatic_differentiationFalseUse automatic differentiation to assemble the generalized plane strain equation and its coupling terms
Default:False
C++ Type:bool
Controllable:No
Description:Use automatic differentiation to assemble the generalized plane strain equation and its coupling terms
- use_displaced_meshFalseWhether to use displaced mesh
Default:False
C++ Type:bool
Controllable:No
Description:Whether to use displaced mesh
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.