https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
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
32 _phi(_variable->phiFace()),
33 _system(_variable->sys()),
34 _aux_solution(_system.solution()),
35 _density(getMaterialProperty<Real>("density"))
36{
37}
38
40
41void
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
54void
59
60void
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
76void
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 ExecFlagType EXEC_LINEAR
registerMooseObject("ContactApp", NodalDensity)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
unsigned int number() const
MooseVariableFE< Real > * _variable
const MaterialProperty< Real > & _density
virtual void finalize()
static InputParameters validParams()
const VariablePhiValue & _phi
NumericVector< Number > & _aux_solution
virtual void initialize()
virtual void execute()
NodalDensity(const InputParameters &parameters)
SystemBase & _system
virtual void threadJoin(const UserObject &uo)
std::map< const Node *, Real > _node_densities
virtual ~NodalDensity()
static InputParameters validParams()
const QBase *const & _qrule
const Elem *const & _current_elem
unsigned int number() const
virtual void set(const numeric_index_type i, const T value)=0
virtual void close()=0