www.mooseframework.org
Public Member Functions | Protected Attributes | List of all members
GeneralizedPlaneStrainActionPD Class Reference

Action class to setup peridynamic generalized plane strain models. More...

#include <GeneralizedPlaneStrainActionPD.h>

Inheritance diagram for GeneralizedPlaneStrainActionPD:
[legend]

Public Member Functions

 GeneralizedPlaneStrainActionPD (const InputParameters &params)
 
virtual void act () override
 

Protected Attributes

const MooseEnum _formulation
 Option to choose which peridynamic model to use for generalized plane strain formulation: ordinary state based or non-ordinary state based. More...
 
VariableName _scalar_out_of_plane_strain
 Scalar variable for out-of-plane strain variable. More...
 
std::vector< VariableName > _displacements
 Displacement variables. More...
 
const unsigned int _ndisp
 

Detailed Description

Action class to setup peridynamic generalized plane strain models.

Definition at line 23 of file GeneralizedPlaneStrainActionPD.h.

Constructor & Destructor Documentation

◆ GeneralizedPlaneStrainActionPD()

GeneralizedPlaneStrainActionPD::GeneralizedPlaneStrainActionPD ( const InputParameters &  params)

Definition at line 61 of file GeneralizedPlaneStrainActionPD.C.

62  : Action(params),
63  _displacements(getParam<std::vector<VariableName>>("displacements")),
64  _ndisp(_displacements.size()),
65  _formulation(getParam<MooseEnum>("formulation")),
66  _scalar_out_of_plane_strain(getParam<VariableName>("scalar_out_of_plane_strain"))
67 {
68  // Generalized plane strain only applies to two dimensional modeling and simulation
69  if (_ndisp != 2)
70  mooseError("GeneralizedPlaneStrainPD only works for two dimensional case!");
71 
72  // Consistency check
73  if (_formulation == "NONORDINARY_STATE" && isParamValid("out_of_plane_stress_variable"))
74  mooseWarning("Variable out_of_plane_stress_variable will not be used in NONORDINARY_STATE "
75  "formulation option!");
76  if (_formulation == "ORDINARY_STATE" && !isParamValid("out_of_plane_stress_variable"))
77  mooseError("Variable out_of_plane_stress_variable must be provided for ORDINARY_STATE "
78  "formulation option!");
79 }

Member Function Documentation

◆ act()

void GeneralizedPlaneStrainActionPD::act ( )
overridevirtual

Definition at line 82 of file GeneralizedPlaneStrainActionPD.C.

83 {
84  if (_current_task == "add_kernel")
85  {
86  std::string k_type;
87  if (_formulation == "ORDINARY_STATE")
88  k_type = "GeneralizedPlaneStrainOffDiagOSPD"; // Based on ordinary state-based model
89  else if (_formulation == "NONORDINARY_STATE")
90  k_type = "GeneralizedPlaneStrainOffDiagNOSPD"; // Based on bond-associated non-ordinary
91  // state-based model
92  else
93  paramError(
94  "formulation",
95  "Unsupported peridynamic formulation. Choose from: ORDINARY_STATE or NONORDINARY_STATE");
96 
97  InputParameters params = _factory.getValidParams(k_type);
98 
99  params.applyParameters(parameters(),
100  {"displacements", "temperature", "scalar_out_of_plane_strain"});
101 
102  params.set<std::vector<VariableName>>("displacements") = _displacements;
103  params.set<std::vector<VariableName>>("scalar_out_of_plane_strain") = {
105 
106  // Coupling between scalar out-of-plane strain and in-plane displacements
107  for (unsigned int i = 0; i < _ndisp; ++i)
108  {
109  std::string k_name = name() + "_GeneralizedPlaneStrainPDOffDiag_disp_" + Moose::stringify(i);
110  params.set<NonlinearVariableName>("variable") = _displacements[i];
111 
112  _problem->addKernel(k_type, k_name, params);
113  }
114 
115  // Coupling between scalar out-of-plane strain and temperature (only when temperature is a
116  // nonlinear variable)
117  if (isParamValid("temperature"))
118  {
119  VariableName temp = getParam<VariableName>("temperature");
120  if (_problem->getNonlinearSystemBase().hasVariable(temp))
121  {
122  params.set<std::vector<VariableName>>("temperature") = {temp};
123 
124  std::string k_name = name() + "_GeneralizedPlaneStrainPDOffDiag_temp";
125  params.set<NonlinearVariableName>("variable") = temp;
126 
127  if (_formulation == "NONORDINARY_STATE")
128  params.set<std::vector<MaterialPropertyName>>("eigenstrain_names") =
129  getParam<std::vector<MaterialPropertyName>>("eigenstrain_names");
130 
131  _problem->addKernel(k_type, k_name, params);
132  }
133  }
134  }
135  else if (_current_task == "add_user_object")
136  {
137  std::string uo_type;
138  if (_formulation == "ORDINARY_STATE")
139  uo_type = "GeneralizedPlaneStrainUserObjectOSPD";
140  else if (_formulation == "NONORDINARY_STATE")
141  uo_type = "GeneralizedPlaneStrainUserObjectNOSPD";
142  else
143  paramError(
144  "formulation",
145  "Unsupported peridynamic formulation. Choose from: ORDINARY_STATE or NONORDINARY_STATE");
146 
147  InputParameters params = _factory.getValidParams(uo_type);
148 
149  std::string uo_name = name() + "_GeneralizedPlaneStrainPDUserObject";
150 
151  params.applyParameters(parameters(), {"out_of_plane_stress_variable"});
152 
153  if (_formulation == "ORDINARY_STATE")
154  params.set<std::vector<VariableName>>("out_of_plane_stress_variable") = {
155  getParam<VariableName>("out_of_plane_stress_variable")};
156 
157  _problem->addUserObject(uo_type, uo_name, params);
158  }
159  else if (_current_task == "add_scalar_kernel")
160  {
161  std::string sk_type("GeneralizedPlaneStrainPD");
162  InputParameters params = _factory.getValidParams(sk_type);
163 
164  std::string sk_name = name() + "_GeneralizedPlaneStrainPD";
165 
166  params.set<NonlinearVariableName>("variable") = _scalar_out_of_plane_strain;
167 
168  // set the UserObjectName using added UserObject
169  params.set<UserObjectName>("generalized_plane_strain_uo") =
170  name() + "_GeneralizedPlaneStrainPDUserObject";
171 
172  _problem->addScalarKernel(sk_type, sk_name, params);
173  }
174  else
175  mooseError("Task error in GeneralizedPlaneStrainActionPD");
176 }

Member Data Documentation

◆ _displacements

std::vector<VariableName> GeneralizedPlaneStrainActionPD::_displacements
protected

Displacement variables.

Definition at line 32 of file GeneralizedPlaneStrainActionPD.h.

Referenced by act().

◆ _formulation

const MooseEnum GeneralizedPlaneStrainActionPD::_formulation
protected

Option to choose which peridynamic model to use for generalized plane strain formulation: ordinary state based or non-ordinary state based.

Definition at line 37 of file GeneralizedPlaneStrainActionPD.h.

Referenced by act(), and GeneralizedPlaneStrainActionPD().

◆ _ndisp

const unsigned int GeneralizedPlaneStrainActionPD::_ndisp
protected

Definition at line 33 of file GeneralizedPlaneStrainActionPD.h.

Referenced by act(), and GeneralizedPlaneStrainActionPD().

◆ _scalar_out_of_plane_strain

VariableName GeneralizedPlaneStrainActionPD::_scalar_out_of_plane_strain
protected

Scalar variable for out-of-plane strain variable.

Definition at line 40 of file GeneralizedPlaneStrainActionPD.h.

Referenced by act().


The documentation for this class was generated from the following files:
GeneralizedPlaneStrainActionPD::_scalar_out_of_plane_strain
VariableName _scalar_out_of_plane_strain
Scalar variable for out-of-plane strain variable.
Definition: GeneralizedPlaneStrainActionPD.h:40
GeneralizedPlaneStrainActionPD::_displacements
std::vector< VariableName > _displacements
Displacement variables.
Definition: GeneralizedPlaneStrainActionPD.h:32
name
const std::string name
Definition: Setup.h:21
GeneralizedPlaneStrainActionPD::_ndisp
const unsigned int _ndisp
Definition: GeneralizedPlaneStrainActionPD.h:33
GeneralizedPlaneStrainActionPD::_formulation
const MooseEnum _formulation
Option to choose which peridynamic model to use for generalized plane strain formulation: ordinary st...
Definition: GeneralizedPlaneStrainActionPD.h:37