Set up the GeneralizedPlaneStrain environment
Description
This action sets up a generalized plane strain model. A detailed description of generalized plane strain model can be found in the formulation page.
warningwarning:For 2D and 1D Simulations
GeneralizedPlaneStrain only works for 1D axisymmetric or 2D generalized plane strain cases. For 1D axisymmetric and 2D generalized plane strain cases in the x-y plane the number of displacement variables must be one or two displacements, respectively.
For 2D generalized plane strain cases in the x-z or y-z planes the number of displacement variables must be three.
Constructed MooseObjects
The GeneralizedPlaneStrain
Action is used to construct the kernels, user objects, and scalar out-of-plane variables in a consistent manner as required for a generalized plane strain simulation.
Table 1: Correspondence Among Action Functionality and MooseObjects for the GeneralizedPlaneStrain
Action
Functionality | Replaced Classes | Associated Parameters |
---|---|---|
Scalar out-of-plan strain coupling with in-plane field variables | Generalized Plane Strain Off-diagonal Kernel | scalar_out_of_plane_strain : a list of the scalar variables for the out-of-plane strain direction |
| | displacements : a string of the displacement field (in-plane) variables | |
| | temperature : a string of the temperature field variable | |
Out-of-plane scalar variable equilibrium condition | Generalized Plane Strain ScalarKernel | scalar_out_of_plane_strain : a list of the scalar variables for the out-of-plane strain direction |
| | out_of_plane_direction : the out-of-plane direction for the scalar out-of-plane strain | |
Residual and diagonal Jacobian calculation for scalar out-of-plane strain variables | Generalized Plane Strain UserObject | scalar_out_of_plane_strain : a list of the scalar variables for the out-of-plane strain direction |
Example Input Syntax
Subblocks
The subblocks of the GeneralizedPlaneStrain action are what triggers MOOSE objects to be built. If a generalized plane strain model is applied for the whole simulation domain, a single subblock should be used
[./GeneralizedPlaneStrain] [./gps] use_displaced_mesh = true displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz out_of_plane_pressure_function = traction_function pressure_factor = 1e5 [../][../]
(modules/solid_mechanics/test/tests/generalized_plane_strain/out_of_plane_pressure.i)if different mesh subdomain has different generalized plane strain model, multiple subblocks with subdomain restrictions can be used.
[./GeneralizedPlaneStrain] [./gps1] use_displaced_mesh = true displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz1 block = '1' [../] [./gps2] use_displaced_mesh = true displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz2 block = '2' [../][../]
(modules/solid_mechanics/test/tests/generalized_plane_strain/generalized_plane_strain_squares.i)An example of using generalized plane strain action through the Solid Mechanics quasi-static physics block with a different out_of_plane_direction
than the default of is given by:
[./generalized_plane_strain] block = 1 strain = SMALL scalar_out_of_plane_strain = scalar_strain_yy out_of_plane_direction = y planar_formulation = GENERALIZED_PLANE_STRAIN eigenstrain_names = 'eigenstrain' generate_output = 'stress_xx stress_xz stress_yy stress_zz strain_xx strain_xz strain_yy strain_zz'[../]
(modules/solid_mechanics/test/tests/2D_different_planes/gps_xz.i)Parameters supplied at the [Physics/SolidMechanics/GeneralizedPlaneStrain]
level act as defaults for the QuasiStatic Physics subblocks.
Input Parameters
displacementsThe displacement variables
C++ Type:std::vector<VariableName>
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
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)
Required 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
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.
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
Options:x, y, z
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
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
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
Controllable:No
Description:Scale factor applied to prescribed out-of-plane pressure (both material and function)
temperatureThe temperature variable
C++ Type:std::vector<VariableName>
Controllable:No
Description:The temperature variable
use_displaced_meshFalseWhether to use displaced mesh
Default:False
C++ Type:bool
Controllable:No
Description:Whether to use displaced mesh
Optional Parameters
Associated Actions
Available Actions
- Solid Mechanics App
- GeneralizedPlaneStrainActionSet up the GeneralizedPlaneStrain environment
(modules/solid_mechanics/test/tests/generalized_plane_strain/out_of_plane_pressure.i)
# Tests for application of out-of-plane pressure in generalized plane strain.[Mesh] [./square] type = GeneratedMeshGenerator dim = 2 nx = 2 ny = 2 [../] displacements = 'disp_x disp_y'[][Variables] [./disp_x] [../] [./disp_y] [../] [./scalar_strain_zz] order = FIRST family = SCALAR [../][][AuxVariables] [./saved_x] order = FIRST family = LAGRANGE [../] [./saved_y] order = FIRST family = LAGRANGE [../] [./stress_xx] order = CONSTANT family = MONOMIAL [../] [./stress_xy] order = CONSTANT family = MONOMIAL [../] [./stress_yy] order = CONSTANT family = MONOMIAL [../] [./stress_zz] order = CONSTANT family = MONOMIAL [../] [./strain_xx] order = CONSTANT family = MONOMIAL [../] [./strain_xy] order = CONSTANT family = MONOMIAL [../] [./strain_yy] order = CONSTANT family = MONOMIAL [../] [./strain_zz] order = CONSTANT family = MONOMIAL [../][][Postprocessors] [./react_z] type = MaterialTensorIntegral rank_two_tensor = stress index_i = 2 index_j = 2 [../][][Physics] [SolidMechanics] [./GeneralizedPlaneStrain] [./gps] use_displaced_mesh = true displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz out_of_plane_pressure_function = traction_function pressure_factor = 1e5 [../] [../] [../][][Kernels] [SolidMechanics] use_displaced_mesh = false displacements = 'disp_x disp_y' save_in = 'saved_x saved_y' [../][][AuxKernels] [./stress_xx] type = RankTwoAux rank_two_tensor = stress variable = stress_xx index_i = 0 index_j = 0 [../] [./stress_xy] type = RankTwoAux rank_two_tensor = stress variable = stress_xy index_i = 0 index_j = 1 [../] [./stress_yy] type = RankTwoAux rank_two_tensor = stress variable = stress_yy index_i = 1 index_j = 1 [../] [./stress_zz] type = RankTwoAux rank_two_tensor = stress variable = stress_zz index_i = 2 index_j = 2 [../] [./strain_xx] type = RankTwoAux rank_two_tensor = total_strain variable = strain_xx index_i = 0 index_j = 0 [../] [./strain_xy] type = RankTwoAux rank_two_tensor = total_strain variable = strain_xy index_i = 0 index_j = 1 [../] [./strain_yy] type = RankTwoAux rank_two_tensor = total_strain variable = strain_yy index_i = 1 index_j = 1 [../] [./strain_zz] type = RankTwoAux rank_two_tensor = total_strain variable = strain_zz index_i = 2 index_j = 2 [../][][Functions] [./traction_function] type = PiecewiseLinear x = '0 2' y = '0 1' [../][][BCs] [./leftx] type = DirichletBC boundary = 3 variable = disp_x value = 0.0 [../] [./bottomy] type = DirichletBC boundary = 0 variable = disp_y value = 0.0 [../][][Materials] [./elastic_tensor] type = ComputeIsotropicElasticityTensor poissons_ratio = 0.3 youngs_modulus = 1e6 [../] [./strain] type = ComputePlaneSmallStrain displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz [../] [./stress] type = ComputeLinearElasticStress [../] # This material is not used for anything in the base verison of this test, # but is used in a variant of the test with cli_args [./traction_material] type = GenericFunctionMaterial prop_names = traction_material prop_values = traction_function [../][][Executioner] type = Transient solve_type = PJFNK line_search = none# controls for linear iterations l_max_its = 100 l_tol = 1e-4# controls for nonlinear iterations nl_max_its = 15 nl_rel_tol = 1e-14 nl_abs_tol = 1e-11# time control start_time = 0.0 dt = 1.0 dtmin = 1.0 end_time = 2.0 num_steps = 5000[][Outputs] exodus = true[]
(modules/solid_mechanics/test/tests/generalized_plane_strain/generalized_plane_strain_squares.i)
[Mesh] file = 2squares.e displacements = 'disp_x disp_y'[][Variables] [./disp_x] [../] [./disp_y] [../] [./scalar_strain_zz1] order = FIRST family = SCALAR [../] [./scalar_strain_zz2] order = FIRST family = SCALAR [../][][AuxVariables] [./temp] order = FIRST family = LAGRANGE [../] [./saved_x] order = FIRST family = LAGRANGE [../] [./saved_y] order = FIRST family = LAGRANGE [../] [./stress_xx] order = CONSTANT family = MONOMIAL [../] [./stress_xy] order = CONSTANT family = MONOMIAL [../] [./stress_yy] order = CONSTANT family = MONOMIAL [../] [./stress_zz] order = CONSTANT family = MONOMIAL [../] [./strain_xx] order = CONSTANT family = MONOMIAL [../] [./strain_xy] order = CONSTANT family = MONOMIAL [../] [./strain_yy] order = CONSTANT family = MONOMIAL [../] [./aux_strain_zz] order = CONSTANT family = MONOMIAL [../][][Postprocessors] [./react_z1] type = MaterialTensorIntegral rank_two_tensor = stress index_i = 2 index_j = 2 block = 1 [../] [./react_z2] type = MaterialTensorIntegral rank_two_tensor = stress index_i = 2 index_j = 2 block = 2 [../][][Physics] [SolidMechanics] [./GeneralizedPlaneStrain] [./gps1] use_displaced_mesh = true displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz1 block = '1' [../] [./gps2] use_displaced_mesh = true displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz2 block = '2' [../] [../] [../][][Kernels] [SolidMechanics] use_displaced_mesh = false displacements = 'disp_x disp_y' temperature = temp save_in = 'saved_x saved_y' block = '1 2' [../][][AuxKernels] [./tempfuncaux] type = FunctionAux variable = temp function = tempfunc use_displaced_mesh = false [../] [./stress_xx] type = RankTwoAux rank_two_tensor = stress variable = stress_xx index_i = 0 index_j = 0 [../] [./stress_xy] type = RankTwoAux rank_two_tensor = stress variable = stress_xy index_i = 0 index_j = 1 [../] [./stress_yy] type = RankTwoAux rank_two_tensor = stress variable = stress_yy index_i = 1 index_j = 1 [../] [./stress_zz] type = RankTwoAux rank_two_tensor = stress variable = stress_zz index_i = 2 index_j = 2 [../] [./strain_xx] type = RankTwoAux rank_two_tensor = total_strain variable = strain_xx index_i = 0 index_j = 0 [../] [./strain_xy] type = RankTwoAux rank_two_tensor = total_strain variable = strain_xy index_i = 0 index_j = 1 [../] [./strain_yy] type = RankTwoAux rank_two_tensor = total_strain variable = strain_yy index_i = 1 index_j = 1 [../] [./aux_strain_zz] type = RankTwoAux rank_two_tensor = total_strain variable = aux_strain_zz index_i = 2 index_j = 2 [../][][Functions] [./tempfunc] type = ParsedFunction expression = '(1-x)*t' [../][][BCs] [./bottom1x] type = DirichletBC boundary = 1 variable = disp_x value = 0.0 [../] [./bottom1y] type = DirichletBC boundary = 1 variable = disp_y value = 0.0 [../] [./bottom2x] type = DirichletBC boundary = 2 variable = disp_x value = 0.0 [../] [./bottom2y] type = DirichletBC boundary = 2 variable = disp_y value = 0.0 [../][][Materials] [./elastic_tensor] type = ComputeIsotropicElasticityTensor poissons_ratio = 0.3 youngs_modulus = 1e6 block = '1 2' [../] [./strain1] type = ComputePlaneSmallStrain displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz1 block = 1 eigenstrain_names = eigenstrain [../] [./strain2] type = ComputePlaneSmallStrain displacements = 'disp_x disp_y' scalar_out_of_plane_strain = scalar_strain_zz2 block = 2 eigenstrain_names = eigenstrain [../] [./thermal_strain] type = ComputeThermalExpansionEigenstrain temperature = temp thermal_expansion_coeff = 0.02 stress_free_temperature = 0.5 block = '1 2' eigenstrain_name = eigenstrain [../] [./stress] type = ComputeLinearElasticStress block = '1 2' [../][][Executioner] type = Transient solve_type = PJFNK line_search = none# controls for linear iterations l_max_its = 100 l_tol = 1e-10# controls for nonlinear iterations nl_max_its = 15 nl_rel_tol = 1e-12 nl_abs_tol = 1e-10# time control start_time = 0.0 dt = 1.0 dtmin = 1.0 end_time = 2.0 num_steps = 5000[][Outputs] exodus = true[]
(modules/solid_mechanics/test/tests/2D_different_planes/gps_xz.i)
[GlobalParams] displacements = 'disp_x disp_y disp_z'[][Mesh] file = square_xz_plane.e[][Variables] [./disp_x] [../] [./disp_z] [../] [./scalar_strain_yy] order = FIRST family = SCALAR [../][][AuxVariables] [./temp] [../] [./disp_y] [../][][Physics/SolidMechanics/QuasiStatic] [./generalized_plane_strain] block = 1 strain = SMALL scalar_out_of_plane_strain = scalar_strain_yy out_of_plane_direction = y planar_formulation = GENERALIZED_PLANE_STRAIN eigenstrain_names = 'eigenstrain' generate_output = 'stress_xx stress_xz stress_yy stress_zz strain_xx strain_xz strain_yy strain_zz' [../][][AuxKernels] [./tempfuncaux] type = FunctionAux variable = temp function = tempfunc [../][][Functions] [./tempfunc] type = ParsedFunction expression = '(1-x)*t' [../][][BCs] [./bottomx] type = DirichletBC boundary = 3 variable = disp_x value = 0.0 [../] [./bottomy] type = DirichletBC boundary = 3 variable = disp_z value = 0.0 [../][][Materials] [./elastic_stress] type = ComputeLinearElasticStress block = 1 [../] [./thermal_strain] type = ComputeThermalExpansionEigenstrain temperature = temp thermal_expansion_coeff = 0.02 stress_free_temperature = 0.5 eigenstrain_name = eigenstrain [../] [./elasticity_tensor] type = ComputeIsotropicElasticityTensor block = 1 poissons_ratio = 0.3 youngs_modulus = 1e6 [../][][Postprocessors] [./react_y] type = MaterialTensorIntegral use_displaced_mesh = false rank_two_tensor = stress index_i = 1 index_j = 1 [../][][Executioner] type = Transient solve_type = PJFNK line_search = none# controls for linear iterations l_max_its = 100 l_tol = 1e-10# controls for nonlinear iterations nl_max_its = 10 nl_rel_tol = 1e-12# time control start_time = 0.0 dt = 1.0 dtmin = 1.0 end_time = 2.0[][Outputs] file_base = gps_xz_small_out exodus = true[]