26 "Applies a distributed load (specified in units of force per area) on the shell plane in a "
27 "given direction (e.g. self_weight, wind load) or normal to the shell plan (e.g. pressure "
30 "The string of displacements suitable for the problem statement");
32 "project_load_to_normal",
false,
"Whether to apply the distributed load normal to the shell");
35 "The function that describes the distributed load specified in units of force per area ");
42 _ndisp(this->coupledComponents(
"displacements")),
44 _function(&this->getFunction(
"function")),
45 _project_load_to_normal(parameters.isParamSetByUser(
"project_load_to_normal")
46 ? this->template getParam<bool>(
"project_load_to_normal")
51 mooseError(
"ADDistributedLoadShell: parameter 'displacements' needs to have exactly three "
54 for (
unsigned int i = 0; i < _ndisp; ++i)
56 _disp_var.push_back(this->coupled(
"displacements", i));
57 if (_var.number() == _disp_var[i])
63 mooseError(
"Problem with displacements in " + _name);
70 for (
unsigned int i = 0; i < 4; ++i)
71 _nodes[i] = _current_elem->node_ptr(i);
73 _v1 = (*_nodes[1] - *_nodes[0]);
74 _v2 = (*_nodes[2] - *_nodes[0]);
76 _normal = _v1.cross(_v2);
77 _normal /= _normal.norm();
79 if (_project_load_to_normal)
80 return computeFactor() * (_normal(_component) * _test[_i][_qp]);
82 return computeFactor() * (_test[_i][_qp]);
89 return _function->value(_t, _q_point[_qp]);
void mooseError(Args &&... args)
Moose::GenericType< Real, is_ad > GenericReal
ADDistributedLoadShell applies a distributed load on the shell element in a given direction defined b...
static InputParameters validParams()
virtual GenericReal< is_ad > computeQpResidual() override
ADDistributedLoadShellTempl(const InputParameters ¶meters)
GenericReal< is_ad > computeFactor() const
static InputParameters validParams()
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
const unsigned int invalid_uint
registerMooseObject("SolidMechanicsApp", ADDistributedLoadShell)