Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
NodalDensity.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "NodalDensity.h"
11 
12 // MOOSE includes
13 #include "MooseVariable.h"
14 #include "SystemBase.h"
15 
16 #include "libmesh/numeric_vector.h"
17 #include "libmesh/quadrature.h"
18 
19 registerMooseObject("ContactApp", NodalDensity);
20 
23 {
25  params.set<ExecFlagEnum>("execute_on") = EXEC_LINEAR;
26  params.addClassDescription("Compute the tributary densities for nodes on a surface");
27  return params;
28 }
29 
31  : SideIntegralVariableUserObject(parameters),
32  _phi(_variable->phiFace()),
33  _system(_variable->sys()),
34  _aux_solution(_system.solution()),
35  _density(getMaterialProperty<Real>("density"))
36 {
37 }
38 
40 
41 void
43 {
44  const NodalDensity & na = dynamic_cast<const NodalDensity &>(fred);
45 
46  std::map<const Node *, Real>::const_iterator it = na._node_densities.begin();
47  const std::map<const Node *, Real>::const_iterator it_end = na._node_densities.end();
48  for (; it != it_end; ++it)
49  {
50  _node_densities[it->first] += it->second;
51  }
52 }
53 
54 void
56 {
57  _node_densities.clear();
58 }
59 
60 void
62 {
63  std::vector<Real> node_densities(_phi.size());
64  for (unsigned qp(0); qp < _qrule->n_points(); ++qp)
65  for (unsigned j(0); j < _phi.size(); ++j)
66  node_densities[j] += (_phi[j][qp] * _density[qp]);
67 
68  for (unsigned j(0); j < _phi.size(); ++j)
69  {
70  const Real density = node_densities[j];
71  if (density != 0)
72  _node_densities[_current_elem->node_ptr(j)] = density;
73  }
74 }
75 
76 void
78 {
79 
80  const std::map<const Node *, Real>::iterator it_end = _node_densities.end();
81  for (std::map<const Node *, Real>::iterator it = _node_densities.begin(); it != it_end; ++it)
82  {
83  const Node * const node = it->first;
84  dof_id_type dof = node->dof_number(_system.number(), _variable->number(), 0);
85  _aux_solution.set(dof, it->second);
86  }
88 }
const VariablePhiValue & _phi
Definition: NodalDensity.h:34
unsigned int number() const
virtual void initialize()
Definition: NodalDensity.C:55
const MaterialProperty< Real > & _density
Definition: NodalDensity.h:39
T & set(const std::string &name, bool quiet_mode=false)
static const std::string density
Definition: NS.h:33
virtual void threadJoin(const UserObject &uo)
Definition: NodalDensity.C:42
static InputParameters validParams()
unsigned int number() const
MooseVariableFE< Real > * _variable
SystemBase & _system
Definition: NodalDensity.h:36
const ExecFlagType EXEC_LINEAR
virtual void close()=0
registerMooseObject("ContactApp", NodalDensity)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
NumericVector< Number > & _aux_solution
Definition: NodalDensity.h:37
virtual ~NodalDensity()
Definition: NodalDensity.C:39
NodalDensity(const InputParameters &parameters)
Definition: NodalDensity.C:30
const QBase *const & _qrule
virtual void execute()
Definition: NodalDensity.C:61
void addClassDescription(const std::string &doc_string)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
virtual void set(const numeric_index_type i, const Number value)=0
const Elem *const & _current_elem
std::map< const Node *, Real > _node_densities
Definition: NodalDensity.h:29
uint8_t dof_id_type
virtual void finalize()
Definition: NodalDensity.C:77
static InputParameters validParams()
Definition: NodalDensity.C:22