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

Calculates the gravitational force proportional to nodal mass. More...

#include <NodalGravity.h>

Inheritance diagram for NodalGravity:
[legend]

Public Member Functions

 NodalGravity (const InputParameters &parameters)
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual Real computeQpResidual () override
 

Protected Attributes

const bool _has_mass
 Booleans for validity of params. More...
 
const bool _has_nodal_mass_file
 
const Real _mass
 Mass associated with the node. More...
 
const Real _alpha
 HHT time integration parameter. More...
 
const Real _gravity_value
 Acceleration due to gravity. More...
 
const Function & _function
 Time and space dependent factor multiplying acceleration due to gravity. More...
 
std::map< dof_id_type, Real > _node_id_to_mass
 Map between boundary nodes and nodal mass. More...
 

Detailed Description

Calculates the gravitational force proportional to nodal mass.

Definition at line 23 of file NodalGravity.h.

Constructor & Destructor Documentation

◆ NodalGravity()

NodalGravity::NodalGravity ( const InputParameters &  parameters)

Definition at line 40 of file NodalGravity.C.

41  : NodalKernel(parameters),
42  _has_mass(isParamValid("mass")),
43  _has_nodal_mass_file(isParamValid("nodal_mass_file")),
44  _mass(_has_mass ? getParam<Real>("mass") : 0.0),
45  _alpha(getParam<Real>("alpha")),
46  _gravity_value(getParam<Real>("gravity_value")),
47  _function(getFunction("function"))
48 {
50  mooseError("NodalGravity: Please provide either mass or nodal_mass_file as input.");
51  else if (_has_nodal_mass_file && _has_mass)
52  mooseError("NodalGravity: Please provide either mass or nodal_mass_file as input, not both.");
53 
55  {
56  MooseUtils::DelimitedFileReader nodal_mass_file(getParam<FileName>("nodal_mass_file"));
57  nodal_mass_file.setHeaderFlag(MooseUtils::DelimitedFileReader::HeaderFlag::OFF);
58  nodal_mass_file.read();
59  std::vector<std::vector<Real>> data = nodal_mass_file.getData();
60  if (data.size() != 4)
61  mooseError("NodalGravity: The number of columns in ",
62  getParam<FileName>("nodal_mass_file"),
63  " should be 4.");
64 
65  unsigned int node_found = 0;
66  const std::set<BoundaryID> bnd_ids = BoundaryRestrictable::boundaryIDs();
67  for (auto & bnd_id : bnd_ids)
68  {
69  const std::vector<dof_id_type> & bnd_node_set = _mesh.getNodeList(bnd_id);
70  for (auto & bnd_node : bnd_node_set)
71  {
72  const Node & node = _mesh.nodeRef(bnd_node);
73  _node_id_to_mass[bnd_node] = 0.0;
74 
75  for (unsigned int i = 0; i < data[0].size(); ++i)
76  {
77  if (MooseUtils::absoluteFuzzyEqual(data[0][i], node(0), 1e-6) &&
78  MooseUtils::absoluteFuzzyEqual(data[1][i], node(1), 1e-6) &&
79  MooseUtils::absoluteFuzzyEqual(data[2][i], node(2), 1e-6))
80  {
81  _node_id_to_mass[bnd_node] = data[3][i];
82  node_found += 1;
83  break;
84  }
85  }
86  }
87  }
88  if (node_found != data[0].size())
89  mooseError("NodalGravity: Out of ",
90  data[0].size(),
91  " nodal positions in ",
92  getParam<FileName>("nodal_mass_file"),
93  " only ",
94  node_found,
95  " nodes were found in the boundary.");
96  }
97 }

Member Function Documentation

◆ computeQpResidual()

Real NodalGravity::computeQpResidual ( )
overrideprotectedvirtual

Definition at line 100 of file NodalGravity.C.

101 {
102  Real mass = 0.0;
103  if (_has_mass)
104  mass = _mass;
105  else
106  {
107  if (_node_id_to_mass.find(_current_node->id()) != _node_id_to_mass.end())
108  mass = _node_id_to_mass[_current_node->id()];
109  else
110  mooseError("NodalGravity: Unable to find an entry for the current node in the "
111  "_node_id_to_mass map.");
112  }
113  Real factor = _gravity_value * _function.value(_t + _alpha * _dt, (*_current_node));
114  return mass * -factor;
115 }

◆ validParams()

InputParameters NodalGravity::validParams ( )
static

Definition at line 20 of file NodalGravity.C.

21 {
22  InputParameters params = NodalKernel::validParams();
23  params.addClassDescription("Computes the gravitational force for a given nodal mass.");
24  params.addRangeCheckedParam<Real>("alpha",
25  0.0,
26  "alpha >= -0.3333 & alpha <= 0.0",
27  "Alpha parameter for mass dependent numerical damping induced "
28  "by HHT time integration scheme");
29  params.addParam<Real>("mass", "Mass associated with the node");
30  params.addParam<FileName>(
31  "nodal_mass_file",
32  "The file containing the nodal positions and the corresponding nodal masses.");
33  params.addParam<Real>("gravity_value", 0.0, "Acceleration due to gravity.");
34  // A ConstantFunction of "1" is supplied as the default
35  params.addParam<FunctionName>(
36  "function", "1", "A function that describes the gravitational force");
37  return params;
38 }

Member Data Documentation

◆ _alpha

const Real NodalGravity::_alpha
protected

HHT time integration parameter.

Definition at line 41 of file NodalGravity.h.

Referenced by computeQpResidual().

◆ _function

const Function& NodalGravity::_function
protected

Time and space dependent factor multiplying acceleration due to gravity.

Definition at line 47 of file NodalGravity.h.

Referenced by computeQpResidual().

◆ _gravity_value

const Real NodalGravity::_gravity_value
protected

Acceleration due to gravity.

Definition at line 44 of file NodalGravity.h.

Referenced by computeQpResidual().

◆ _has_mass

const bool NodalGravity::_has_mass
protected

Booleans for validity of params.

Definition at line 34 of file NodalGravity.h.

Referenced by computeQpResidual(), and NodalGravity().

◆ _has_nodal_mass_file

const bool NodalGravity::_has_nodal_mass_file
protected

Definition at line 35 of file NodalGravity.h.

Referenced by NodalGravity().

◆ _mass

const Real NodalGravity::_mass
protected

Mass associated with the node.

Definition at line 38 of file NodalGravity.h.

Referenced by computeQpResidual().

◆ _node_id_to_mass

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

Map between boundary nodes and nodal mass.

Definition at line 50 of file NodalGravity.h.

Referenced by computeQpResidual(), and NodalGravity().


The documentation for this class was generated from the following files:
NodalGravity::_has_nodal_mass_file
const bool _has_nodal_mass_file
Definition: NodalGravity.h:35
NodalGravity::_has_mass
const bool _has_mass
Booleans for validity of params.
Definition: NodalGravity.h:34
NodalGravity::_function
const Function & _function
Time and space dependent factor multiplying acceleration due to gravity.
Definition: NodalGravity.h:47
validParams
InputParameters validParams()
NodalGravity::_mass
const Real _mass
Mass associated with the node.
Definition: NodalGravity.h:38
NodalGravity::_node_id_to_mass
std::map< dof_id_type, Real > _node_id_to_mass
Map between boundary nodes and nodal mass.
Definition: NodalGravity.h:50
NodalGravity::_gravity_value
const Real _gravity_value
Acceleration due to gravity.
Definition: NodalGravity.h:44
NodalGravity::_alpha
const Real _alpha
HHT time integration parameter.
Definition: NodalGravity.h:41