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

Calculates the inertial force and mass proportional damping for a nodal mass. More...

#include <NodalTranslationalInertia.h>

Inheritance diagram for NodalTranslationalInertia:
[legend]

Public Member Functions

 NodalTranslationalInertia (const InputParameters &parameters)
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual Real computeQpResidual () override
 
virtual Real computeQpJacobian () override
 

Protected Attributes

const bool _has_mass
 Booleans for validity of params. More...
 
const bool _has_beta
 
const bool _has_gamma
 
const bool _has_velocity
 
const bool _has_acceleration
 
const bool _has_nodal_mass_file
 
const Real _mass
 Mass associated with the node. More...
 
const VariableValue * _u_old
 Old value of displacement. More...
 
const Real _beta
 Newmark time integration parameter. More...
 
const Real _gamma
 Newmark time integration parameter. More...
 
const Real & _eta
 Mass proportional Rayliegh damping. More...
 
const Real & _alpha
 HHT time integration parameter. More...
 
AuxiliarySystem * _aux_sys
 Auxiliary system object. More...
 
unsigned int _vel_num
 Variable number corresponding to the velocity aux variable. More...
 
unsigned int _accel_num
 Variable number corresponding to the acceleration aux variable. More...
 
std::map< dof_id_type, Real > _node_id_to_mass
 Map between boundary nodes and nodal mass. More...
 
const MooseArray< Number > * _vel
 Velocity variable value. More...
 
const MooseArray< Number > * _vel_old
 Old velocity variable value. More...
 
const MooseArray< Number > * _accel
 Acceleration variable value. More...
 
const MooseArray< Number > * _du_dot_du
 du_dot_du variable value More...
 
const MooseArray< Number > * _du_dotdot_du
 du_dotdot_du variable value More...
 

Detailed Description

Calculates the inertial force and mass proportional damping for a nodal mass.

Definition at line 23 of file NodalTranslationalInertia.h.

Constructor & Destructor Documentation

◆ NodalTranslationalInertia()

NodalTranslationalInertia::NodalTranslationalInertia ( const InputParameters &  parameters)

Definition at line 49 of file NodalTranslationalInertia.C.

50  : TimeNodalKernel(parameters),
51  _has_mass(isParamValid("mass")),
52  _has_beta(isParamValid("beta")),
53  _has_gamma(isParamValid("gamma")),
54  _has_velocity(isParamValid("velocity")),
55  _has_acceleration(isParamValid("acceleration")),
56  _has_nodal_mass_file(isParamValid("nodal_mass_file")),
57  _mass(_has_mass ? getParam<Real>("mass") : 0.0),
58  _beta(_has_beta ? getParam<Real>("beta") : 0.1),
59  _gamma(_has_gamma ? getParam<Real>("gamma") : 0.1),
60  _eta(getParam<Real>("eta")),
61  _alpha(getParam<Real>("alpha"))
62 {
64  {
65  _u_old = &(_var.dofValuesOld());
66  _aux_sys = &(_fe_problem.getAuxiliarySystem());
67 
68  MooseVariable * vel_variable = getVar("velocity", 0);
69  _vel_num = vel_variable->number();
70  MooseVariable * accel_variable = getVar("acceleration", 0);
71  _accel_num = accel_variable->number();
72  }
74  {
75  _vel = &(_var.dofValuesDot());
76  _vel_old = &(_var.dofValuesDotOld());
77  _accel = &(_var.dofValuesDotDot());
78  _du_dot_du = &(_var.duDotDu());
79  _du_dotdot_du = &(_var.duDotDotDu());
80  }
81  else
82  mooseError("NodalTranslationalInertia: Either all or none of `beta`, `gamma`, `velocity` and "
83  "`acceleration` should be provided as input.");
84 
86  mooseError(
87  "NodalTranslationalInertia: Please provide either mass or nodal_mass_file as input.");
88  else if (_has_nodal_mass_file && _has_mass)
89  mooseError("NodalTranslationalInertia: Please provide either mass or nodal_mass_file as input, "
90  "not both.");
91 
93  {
94  MooseUtils::DelimitedFileReader nodal_mass_file(getParam<FileName>("nodal_mass_file"));
95  nodal_mass_file.setHeaderFlag(MooseUtils::DelimitedFileReader::HeaderFlag::OFF);
96  nodal_mass_file.read();
97  std::vector<std::vector<Real>> data = nodal_mass_file.getData();
98  if (data.size() != 4)
99  mooseError("NodalTranslationalInertia: The number of columns in ",
100  getParam<FileName>("nodal_mass_file"),
101  " should be 4.");
102 
103  unsigned int node_found = 0;
104  const std::set<BoundaryID> bnd_ids = BoundaryRestrictable::boundaryIDs();
105  for (auto & bnd_id : bnd_ids)
106  {
107  const std::vector<dof_id_type> & bnd_node_set = _mesh.getNodeList(bnd_id);
108  for (auto & bnd_node : bnd_node_set)
109  {
110  const Node & node = _mesh.nodeRef(bnd_node);
111  _node_id_to_mass[bnd_node] = 0.0;
112 
113  for (unsigned int i = 0; i < data[0].size(); ++i)
114  {
115  if (MooseUtils::absoluteFuzzyEqual(data[0][i], node(0), 1e-6) &&
116  MooseUtils::absoluteFuzzyEqual(data[1][i], node(1), 1e-6) &&
117  MooseUtils::absoluteFuzzyEqual(data[2][i], node(2), 1e-6))
118  {
119  _node_id_to_mass[bnd_node] = data[3][i];
120  node_found += 1;
121  break;
122  }
123  }
124  }
125  }
126  if (node_found != data[0].size())
127  mooseError("NodalTranslationalInertia: Out of ",
128  data[0].size(),
129  " nodal positions in ",
130  getParam<FileName>("nodal_mass_file"),
131  " only ",
132  node_found,
133  " nodes were found in the boundary.");
134  }
135 }

Member Function Documentation

◆ computeQpJacobian()

Real NodalTranslationalInertia::computeQpJacobian ( )
overrideprotectedvirtual

Definition at line 178 of file NodalTranslationalInertia.C.

179 {
180  mooseAssert(_beta > 0.0, "NodalTranslationalInertia: Beta parameter should be positive.");
181 
182  if (_dt == 0)
183  return 0;
184  else
185  {
186  Real mass = 0.0;
187  if (_has_mass)
188  mass = _mass;
189  else
190  {
191  if (_node_id_to_mass.find(_current_node->id()) != _node_id_to_mass.end())
192  mass = _node_id_to_mass[_current_node->id()];
193  else
194  mooseError("NodalTranslationalInertia: Unable to find an entry for the current node in the "
195  "_node_id_to_mass map.");
196  }
197 
198  if (_has_beta)
199  return mass / (_beta * _dt * _dt) + _eta * (1 + _alpha) * mass * _gamma / _beta / _dt;
200  else
201  return mass * (*_du_dotdot_du)[_qp] + _eta * (1.0 + _alpha) * mass * (*_du_dot_du)[_qp];
202  }
203 }

◆ computeQpResidual()

Real NodalTranslationalInertia::computeQpResidual ( )
overrideprotectedvirtual

Definition at line 138 of file NodalTranslationalInertia.C.

139 {
140  if (_dt == 0)
141  return 0;
142  else
143  {
144  Real mass = 0.0;
145  if (_has_mass)
146  mass = _mass;
147  else
148  {
149  if (_node_id_to_mass.find(_current_node->id()) != _node_id_to_mass.end())
150  mass = _node_id_to_mass[_current_node->id()];
151  else
152  mooseError("NodalTranslationalInertia: Unable to find an entry for the current node in the "
153  "_node_id_to_mass map.");
154  }
155 
156  if (_has_beta)
157  {
158  mooseAssert(_beta > 0.0, "NodalTranslationalInertia: Beta parameter should be positive.");
159  const NumericVector<Number> & aux_sol_old = _aux_sys->solutionOld();
160 
161  const Real vel_old = aux_sol_old(_current_node->dof_number(_aux_sys->number(), _vel_num, 0));
162  const Real accel_old =
163  aux_sol_old(_current_node->dof_number(_aux_sys->number(), _accel_num, 0));
164 
165  const Real accel =
166  1. / _beta *
167  (((_u[_qp] - (*_u_old)[_qp]) / (_dt * _dt)) - vel_old / _dt - accel_old * (0.5 - _beta));
168  const Real vel = vel_old + (_dt * (1 - _gamma)) * accel_old + _gamma * _dt * accel;
169  return mass * (accel + vel * _eta * (1 + _alpha) - _alpha * _eta * vel_old);
170  }
171  else
172  return mass * ((*_accel)[_qp] + (*_vel)[_qp] * _eta * (1.0 + _alpha) -
173  _alpha * _eta * (*_vel_old)[_qp]);
174  }
175 }

◆ validParams()

InputParameters NodalTranslationalInertia::validParams ( )
static

Definition at line 21 of file NodalTranslationalInertia.C.

22 {
23  InputParameters params = TimeNodalKernel::validParams();
24  params.addClassDescription("Computes the inertial forces and mass proportional damping terms "
25  "corresponding to nodal mass.");
26  params.addCoupledVar("velocity", "velocity variable");
27  params.addCoupledVar("acceleration", "acceleration variable");
28  params.addRangeCheckedParam<Real>(
29  "beta", "beta>0.0", "beta parameter for Newmark Time integration");
30  params.addRangeCheckedParam<Real>(
31  "gamma", "gamma>0.0", "gamma parameter for Newmark Time integration");
32  params.addRangeCheckedParam<Real>("eta",
33  0.0,
34  "eta>=0.0",
35  "Constant real number defining the eta parameter for "
36  "Rayleigh damping.");
37  params.addRangeCheckedParam<Real>("alpha",
38  0.0,
39  "alpha >= -0.3333 & alpha <= 0.0",
40  "Alpha parameter for mass dependent numerical damping induced "
41  "by HHT time integration scheme");
42  params.addParam<Real>("mass", "Mass associated with the node");
43  params.addParam<FileName>(
44  "nodal_mass_file",
45  "The file containing the nodal positions and the corresponding nodal masses.");
46  return params;
47 }

Member Data Documentation

◆ _accel

const MooseArray<Number>* NodalTranslationalInertia::_accel
protected

Acceleration variable value.

Definition at line 80 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _accel_num

unsigned int NodalTranslationalInertia::_accel_num
protected

Variable number corresponding to the acceleration aux variable.

Definition at line 68 of file NodalTranslationalInertia.h.

Referenced by computeQpResidual(), and NodalTranslationalInertia().

◆ _alpha

const Real& NodalTranslationalInertia::_alpha
protected

HHT time integration parameter.

Definition at line 59 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _aux_sys

AuxiliarySystem* NodalTranslationalInertia::_aux_sys
protected

Auxiliary system object.

Definition at line 62 of file NodalTranslationalInertia.h.

Referenced by computeQpResidual(), and NodalTranslationalInertia().

◆ _beta

const Real NodalTranslationalInertia::_beta
protected

Newmark time integration parameter.

Definition at line 50 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _du_dot_du

const MooseArray<Number>* NodalTranslationalInertia::_du_dot_du
protected

du_dot_du variable value

Definition at line 83 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), and NodalTranslationalInertia().

◆ _du_dotdot_du

const MooseArray<Number>* NodalTranslationalInertia::_du_dotdot_du
protected

du_dotdot_du variable value

Definition at line 86 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _eta

const Real& NodalTranslationalInertia::_eta
protected

Mass proportional Rayliegh damping.

Definition at line 56 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _gamma

const Real NodalTranslationalInertia::_gamma
protected

Newmark time integration parameter.

Definition at line 53 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _has_acceleration

const bool NodalTranslationalInertia::_has_acceleration
protected

Definition at line 40 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _has_beta

const bool NodalTranslationalInertia::_has_beta
protected

◆ _has_gamma

const bool NodalTranslationalInertia::_has_gamma
protected

Definition at line 38 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _has_mass

const bool NodalTranslationalInertia::_has_mass
protected

Booleans for validity of params.

Definition at line 36 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), computeQpResidual(), and NodalTranslationalInertia().

◆ _has_nodal_mass_file

const bool NodalTranslationalInertia::_has_nodal_mass_file
protected

Definition at line 41 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _has_velocity

const bool NodalTranslationalInertia::_has_velocity
protected

Definition at line 39 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _mass

const Real NodalTranslationalInertia::_mass
protected

Mass associated with the node.

Definition at line 44 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _node_id_to_mass

std::map<dof_id_type, Real> NodalTranslationalInertia::_node_id_to_mass
protected

Map between boundary nodes and nodal mass.

Definition at line 71 of file NodalTranslationalInertia.h.

Referenced by computeQpJacobian(), computeQpResidual(), and NodalTranslationalInertia().

◆ _u_old

const VariableValue* NodalTranslationalInertia::_u_old
protected

Old value of displacement.

Definition at line 47 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _vel

const MooseArray<Number>* NodalTranslationalInertia::_vel
protected

Velocity variable value.

Definition at line 74 of file NodalTranslationalInertia.h.

Referenced by NodalTranslationalInertia().

◆ _vel_num

unsigned int NodalTranslationalInertia::_vel_num
protected

Variable number corresponding to the velocity aux variable.

Definition at line 65 of file NodalTranslationalInertia.h.

Referenced by computeQpResidual(), and NodalTranslationalInertia().

◆ _vel_old

const MooseArray<Number>* NodalTranslationalInertia::_vel_old
protected

Old velocity variable value.

Definition at line 77 of file NodalTranslationalInertia.h.

Referenced by computeQpResidual(), and NodalTranslationalInertia().


The documentation for this class was generated from the following files:
NodalTranslationalInertia::_mass
const Real _mass
Mass associated with the node.
Definition: NodalTranslationalInertia.h:44
NodalTranslationalInertia::_has_gamma
const bool _has_gamma
Definition: NodalTranslationalInertia.h:38
NodalTranslationalInertia::_u_old
const VariableValue * _u_old
Old value of displacement.
Definition: NodalTranslationalInertia.h:47
NodalTranslationalInertia::_has_nodal_mass_file
const bool _has_nodal_mass_file
Definition: NodalTranslationalInertia.h:41
NodalTranslationalInertia::_alpha
const Real & _alpha
HHT time integration parameter.
Definition: NodalTranslationalInertia.h:59
NodalTranslationalInertia::_has_velocity
const bool _has_velocity
Definition: NodalTranslationalInertia.h:39
NodalTranslationalInertia::_accel
const MooseArray< Number > * _accel
Acceleration variable value.
Definition: NodalTranslationalInertia.h:80
NodalTranslationalInertia::_du_dot_du
const MooseArray< Number > * _du_dot_du
du_dot_du variable value
Definition: NodalTranslationalInertia.h:83
NodalTranslationalInertia::_vel
const MooseArray< Number > * _vel
Velocity variable value.
Definition: NodalTranslationalInertia.h:74
NodalTranslationalInertia::_eta
const Real & _eta
Mass proportional Rayliegh damping.
Definition: NodalTranslationalInertia.h:56
validParams
InputParameters validParams()
NodalTranslationalInertia::_du_dotdot_du
const MooseArray< Number > * _du_dotdot_du
du_dotdot_du variable value
Definition: NodalTranslationalInertia.h:86
NodalTranslationalInertia::_has_beta
const bool _has_beta
Definition: NodalTranslationalInertia.h:37
NodalTranslationalInertia::_gamma
const Real _gamma
Newmark time integration parameter.
Definition: NodalTranslationalInertia.h:53
NodalTranslationalInertia::_beta
const Real _beta
Newmark time integration parameter.
Definition: NodalTranslationalInertia.h:50
NodalTranslationalInertia::_node_id_to_mass
std::map< dof_id_type, Real > _node_id_to_mass
Map between boundary nodes and nodal mass.
Definition: NodalTranslationalInertia.h:71
NodalTranslationalInertia::_aux_sys
AuxiliarySystem * _aux_sys
Auxiliary system object.
Definition: NodalTranslationalInertia.h:62
NodalTranslationalInertia::_vel_old
const MooseArray< Number > * _vel_old
Old velocity variable value.
Definition: NodalTranslationalInertia.h:77
NodalTranslationalInertia::_has_acceleration
const bool _has_acceleration
Definition: NodalTranslationalInertia.h:40
NodalTranslationalInertia::_accel_num
unsigned int _accel_num
Variable number corresponding to the acceleration aux variable.
Definition: NodalTranslationalInertia.h:68
NodalTranslationalInertia::_has_mass
const bool _has_mass
Booleans for validity of params.
Definition: NodalTranslationalInertia.h:36
NodalTranslationalInertia::_vel_num
unsigned int _vel_num
Variable number corresponding to the velocity aux variable.
Definition: NodalTranslationalInertia.h:65