www.mooseframework.org
Public Member Functions | Private Attributes | List of all members
SolidMechanicsAction Class Reference

#include <SolidMechanicsAction.h>

Inheritance diagram for SolidMechanicsAction:
[legend]

Public Member Functions

 SolidMechanicsAction (const InputParameters &params)
 
virtual void act ()
 

Private Attributes

const VariableName _disp_x
 
const VariableName _disp_y
 
const VariableName _disp_z
 
const VariableName _disp_r
 
const VariableName _temp
 
const Real _zeta
 
const Real _alpha
 

Detailed Description

Definition at line 20 of file SolidMechanicsAction.h.

Constructor & Destructor Documentation

◆ SolidMechanicsAction()

SolidMechanicsAction::SolidMechanicsAction ( const InputParameters &  params)

Definition at line 67 of file SolidMechanicsAction.C.

68  : Action(params),
69  _disp_x(getParam<VariableName>("disp_x")),
70  _disp_y(getParam<VariableName>("disp_y")),
71  _disp_z(getParam<VariableName>("disp_z")),
72  _disp_r(getParam<VariableName>("disp_r")),
73  _temp(getParam<VariableName>("temp")),
74  _zeta(getParam<Real>("zeta")),
75  _alpha(getParam<Real>("alpha"))
76 {
77 }

Member Function Documentation

◆ act()

void SolidMechanicsAction::act ( )
virtual

Definition at line 80 of file SolidMechanicsAction.C.

81 {
82  // list of subdomains IDs per coordinate system
83  std::map<Moose::CoordinateSystemType, std::vector<SubdomainName>> coord_map;
84  std::set<SubdomainID> subdomains;
85 
86  if (isParamValid("block")) // Should it be restricted to certain blocks?
87  {
88  Moose::out << "Restricting to blocks!" << std::endl;
89  std::vector<SubdomainName> block = getParam<std::vector<SubdomainName>>("block");
90  for (unsigned int i = 0; i < block.size(); i++)
91  subdomains.insert(_problem->mesh().getSubdomainID(block[i]));
92  }
93  else // Put it everywhere
94  subdomains = _problem->mesh().meshSubdomains();
95 
96  for (std::set<SubdomainID>::const_iterator it = subdomains.begin(); it != subdomains.end(); ++it)
97  {
98  SubdomainID sid = *it;
99  Moose::CoordinateSystemType coord_type = _problem->getCoordSystem(sid);
100 
101  // Convert the SubdomainID into SubdomainName since kernel params take SubdomainNames (this is
102  // retarded...)
103  std::stringstream ss;
104  ss << sid;
105  SubdomainName sname = ss.str();
106 
107  coord_map[coord_type].push_back(sname);
108  }
109 
110  for (std::map<Moose::CoordinateSystemType, std::vector<SubdomainName>>::iterator it =
111  coord_map.begin();
112  it != coord_map.end();
113  ++it)
114  {
115  Moose::CoordinateSystemType coord_type = (*it).first;
116  std::vector<SubdomainName> & blocks = (*it).second;
117 
118  // Determine whether RZ or RSPHERICAL
119  bool rz(false);
120  bool rspherical(false);
121  unsigned int dim(1);
122  std::vector<std::string> keys;
123  std::vector<VariableName> vars;
124  std::vector<std::vector<AuxVariableName>> save_in;
125  std::vector<std::vector<AuxVariableName>> diag_save_in;
126  std::string type("StressDivergence");
127  if (getParam<MooseEnum>("type") == 0) // truss
128  {
129  type = "StressDivergenceTruss";
130  }
131  else if (coord_type == Moose::COORD_RZ)
132  {
133  rz = true;
134  type = "StressDivergenceRZ";
135  dim = 2;
136  keys.push_back("disp_r");
137  keys.push_back("disp_z");
138  vars.push_back(_disp_r);
139  vars.push_back(_disp_z);
140  save_in.resize(dim);
141  if (isParamValid("save_in_disp_r"))
142  save_in[0] = getParam<std::vector<AuxVariableName>>("save_in_disp_r");
143 
144  if (isParamValid("save_in_disp_z"))
145  save_in[1] = getParam<std::vector<AuxVariableName>>("save_in_disp_z");
146 
147  diag_save_in.resize(dim);
148  if (isParamValid("diag_save_in_disp_r"))
149  diag_save_in[0] = getParam<std::vector<AuxVariableName>>("diag_save_in_disp_r");
150 
151  if (isParamValid("diag_save_in_disp_z"))
152  diag_save_in[1] = getParam<std::vector<AuxVariableName>>("diag_save_in_disp_z");
153  }
154  else if (coord_type == Moose::COORD_RSPHERICAL)
155  {
156  rspherical = true;
157  type = "StressDivergenceRSpherical";
158  dim = 1;
159  keys.push_back("disp_r");
160  vars.push_back(_disp_r);
161  save_in.resize(dim);
162  if (isParamValid("save_in_disp_r"))
163  save_in[0] = getParam<std::vector<AuxVariableName>>("save_in_disp_r");
164 
165  diag_save_in.resize(dim);
166  if (isParamValid("diag_save_in_disp_r"))
167  diag_save_in[0] = getParam<std::vector<AuxVariableName>>("diag_save_in_disp_r");
168  }
169 
170  if (!rz && !rspherical && _disp_x == "")
171  {
172  mooseError("disp_x must be specified");
173  }
174 
175  if (!rz && !rspherical)
176  {
177  keys.push_back("disp_x");
178  vars.push_back(_disp_x);
179  if (_disp_y != "")
180  {
181  ++dim;
182  keys.push_back("disp_y");
183  vars.push_back(_disp_y);
184  if (_disp_z != "")
185  {
186  ++dim;
187  keys.push_back("disp_z");
188  vars.push_back(_disp_z);
189  }
190  }
191 
192  save_in.resize(dim);
193  if (isParamValid("save_in_disp_x"))
194  save_in[0] = getParam<std::vector<AuxVariableName>>("save_in_disp_x");
195 
196  if (isParamValid("save_in_disp_y"))
197  save_in[1] = getParam<std::vector<AuxVariableName>>("save_in_disp_y");
198 
199  if (isParamValid("save_in_disp_z"))
200  save_in[2] = getParam<std::vector<AuxVariableName>>("save_in_disp_z");
201 
202  diag_save_in.resize(dim);
203  if (isParamValid("diag_save_in_disp_x"))
204  diag_save_in[0] = getParam<std::vector<AuxVariableName>>("diag_save_in_disp_x");
205 
206  if (isParamValid("diag_save_in_disp_y"))
207  diag_save_in[1] = getParam<std::vector<AuxVariableName>>("diag_save_in_disp_y");
208 
209  if (isParamValid("diag_save_in_disp_z"))
210  diag_save_in[2] = getParam<std::vector<AuxVariableName>>("diag_save_in_disp_z");
211  }
212 
213  unsigned int num_coupled(dim);
214  if (_temp != "")
215  {
216  ++num_coupled;
217  keys.push_back("temp");
218  vars.push_back(_temp);
219  }
220 
221  InputParameters params = _factory.getValidParams(type);
222  for (unsigned j(0); j < num_coupled; ++j)
223  {
224  params.addCoupledVar(keys[j], "");
225  params.set<std::vector<VariableName>>(keys[j]) = {vars[j]};
226  }
227 
228  params.set<bool>("use_displaced_mesh") = getParam<bool>("use_displaced_mesh");
229  params.set<std::string>("appended_property_name") =
230  getParam<std::string>("appended_property_name");
231 
232  for (unsigned int i(0); i < dim; ++i)
233  {
234  std::stringstream name;
235  name << _name;
236  name << i;
237 
238  params.set<unsigned int>("component") = i;
239 
240  params.set<NonlinearVariableName>("variable") = vars[i];
241  params.set<std::vector<SubdomainName>>("block") = blocks;
242  params.set<std::vector<AuxVariableName>>("save_in") = save_in[i];
243  params.set<std::vector<AuxVariableName>>("diag_save_in") = diag_save_in[i];
244  params.set<Real>("zeta") = _zeta;
245  params.set<Real>("alpha") = _alpha;
246  params.set<bool>("volumetric_locking_correction") =
247  getParam<bool>("volumetric_locking_correction");
248  if (isParamValid("extra_vector_tags"))
249  params.set<std::vector<TagName>>("extra_vector_tags") =
250  getParam<std::vector<TagName>>("extra_vector_tags");
251  _problem->addKernel(type, name.str(), params);
252  }
253  }
254 }

Member Data Documentation

◆ _alpha

const Real SolidMechanicsAction::_alpha
private

Definition at line 34 of file SolidMechanicsAction.h.

Referenced by act().

◆ _disp_r

const VariableName SolidMechanicsAction::_disp_r
private

Definition at line 31 of file SolidMechanicsAction.h.

Referenced by act().

◆ _disp_x

const VariableName SolidMechanicsAction::_disp_x
private

Definition at line 28 of file SolidMechanicsAction.h.

Referenced by act().

◆ _disp_y

const VariableName SolidMechanicsAction::_disp_y
private

Definition at line 29 of file SolidMechanicsAction.h.

Referenced by act().

◆ _disp_z

const VariableName SolidMechanicsAction::_disp_z
private

Definition at line 30 of file SolidMechanicsAction.h.

Referenced by act().

◆ _temp

const VariableName SolidMechanicsAction::_temp
private

Definition at line 32 of file SolidMechanicsAction.h.

Referenced by act().

◆ _zeta

const Real SolidMechanicsAction::_zeta
private

Definition at line 33 of file SolidMechanicsAction.h.

Referenced by act().


The documentation for this class was generated from the following files:
SolidMechanicsAction::_disp_r
const VariableName _disp_r
Definition: SolidMechanicsAction.h:31
name
const std::string name
Definition: Setup.h:21
SolidMechanicsAction::_alpha
const Real _alpha
Definition: SolidMechanicsAction.h:34
SolidMechanicsAction::_zeta
const Real _zeta
Definition: SolidMechanicsAction.h:33
SolidMechanicsAction::_disp_x
const VariableName _disp_x
Definition: SolidMechanicsAction.h:28
SolidMechanicsAction::_temp
const VariableName _temp
Definition: SolidMechanicsAction.h:32
SolidMechanicsAction::_disp_y
const VariableName _disp_y
Definition: SolidMechanicsAction.h:29
SolidMechanicsAction::_disp_z
const VariableName _disp_z
Definition: SolidMechanicsAction.h:30