www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | Static Private Attributes | List of all members
SlopeReconstructionBase Class Referenceabstract

Base class for piecewise linear slope reconstruction to get the slopes of element average variables. More...

#include <SlopeReconstructionBase.h>

Inheritance diagram for SlopeReconstructionBase:
[legend]

Public Member Functions

 SlopeReconstructionBase (const InputParameters &parameters)
 
virtual void initialize ()
 
virtual void finalize ()
 
virtual void computeElement ()
 
virtual const std::vector< RealGradient > & getElementSlope (dof_id_type elementid) const
 accessor function call to get element slope values More...
 
virtual const std::vector< Real > & getElementAverageValue (dof_id_type elementid) const
 accessor function call to get element average variable values More...
 
virtual const std::vector< Real > & getBoundaryAverageValue (dof_id_type elementid, unsigned int side) const
 accessor function call to get boundary average variable values More...
 
virtual const Point & getSideCentroid (dof_id_type elementid, dof_id_type neighborid) const
 accessor function call to get cached internal side centroid More...
 
virtual const Point & getBoundarySideCentroid (dof_id_type elementid, unsigned int side) const
 accessor function call to get cached boundary side centroid More...
 
virtual const Point & getSideNormal (dof_id_type elementid, dof_id_type neighborid) const
 accessor function call to get cached internal side normal More...
 
virtual const Point & getBoundarySideNormal (dof_id_type elementid, unsigned int side) const
 accessor function call to get cached boundary side centroid More...
 
virtual const Real & getSideArea (dof_id_type elementid, dof_id_type neighborid) const
 accessor function call to get cached internal side area More...
 
virtual const Real & getBoundarySideArea (dof_id_type elementid, unsigned int side) const
 accessor function call to get cached boundary side area More...
 
virtual void reconstructElementSlope ()=0
 compute the slope of the cell More...
 
virtual void meshChanged ()
 
virtual void execute ()
 
virtual void pre ()
 
virtual void onElement (const Elem *elem)
 
virtual void onBoundary (const Elem *elem, unsigned int side, BoundaryID bnd_id)
 
virtual void onInternalSide (const Elem *elem, unsigned int side)
 
virtual void onInterface (const Elem *elem, unsigned int side, BoundaryID bnd_id)
 
virtual void post ()
 
virtual void subdomainChanged ()
 
virtual bool keepGoing ()
 
void join (const ElementLoopUserObject &)
 

Protected Member Functions

virtual void serialize (std::string &serialized_buffer)
 
virtual void deserialize (std::vector< std::string > &serialized_buffers)
 
virtual void caughtMooseException (MooseException &e)
 
virtual void computeBoundary ()
 
virtual void computeInternalSide ()
 
virtual void computeInterface ()
 

Protected Attributes

std::map< dof_id_type, std::vector< RealGradient > > & _rslope
 store the reconstructed slopes into this map indexed by element ID More...
 
std::map< dof_id_type, std::vector< Real > > & _avars
 store the average variable values into this map indexed by element ID More...
 
std::map< std::pair< dof_id_type, unsigned int >, std::vector< Real > > & _bnd_avars
 store the boundary average variable values into this map indexed by pair of element ID and local side ID More...
 
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_centroid
 store the side centroid into this map indexed by pair of element ID and neighbor ID More...
 
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_centroid
 store the boundary side centroid into this map indexed by pair of element ID and local side ID More...
 
std::map< std::pair< dof_id_type, dof_id_type >, Real > & _side_area
 store the side area into this map indexed by pair of element ID and neighbor ID More...
 
std::map< std::pair< dof_id_type, unsigned int >, Real > & _bnd_side_area
 store the boundary side area into this map indexed by pair of element ID and local side ID More...
 
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_normal
 store the side normal into this map indexed by pair of element ID and neighbor ID More...
 
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_normal
 store the boundary side normal into this map indexed by pair of element ID and local side ID More...
 
const MooseArray< Point > & _q_point_face
 required data for face assembly More...
 
QBase *& _qrule_face
 
const MooseArray< Real > & _JxW_face
 
const MooseArray< Point > & _normals_face
 
unsigned int & _side
 current side of the current element More...
 
const Elem *& _side_elem
 
const Real & _side_volume
 
const Elem *& _neighbor_elem
 the neighboring element More...
 
bool _side_geoinfo_cached
 flag to indicated if side geometry info is cached More...
 
MooseMesh & _mesh
 
const Elem * _current_elem
 
const Real & _current_elem_volume
 
unsigned int _current_side
 
const Elem * _current_neighbor
 
const MooseArray< Point > & _q_point
 
QBase *& _qrule
 
const MooseArray< Real > & _JxW
 
const MooseArray< Real > & _coord
 
bool _have_interface_elems
 true if we have cached interface elements, false if they need to be cached. We want to (re)cache only when mesh changed More...
 
std::set< dof_id_type > _interface_elem_ids
 List of element IDs that are on the processor boundary and need to be send to other processors. More...
 
SubdomainID _subdomain
 The subdomain for the current element. More...
 
SubdomainID _old_subdomain
 The subdomain for the last element. More...
 

Static Private Attributes

static Threads::spin_mutex _mutex
 

Detailed Description

Base class for piecewise linear slope reconstruction to get the slopes of element average variables.

Definition at line 26 of file SlopeReconstructionBase.h.

Constructor & Destructor Documentation

◆ SlopeReconstructionBase()

SlopeReconstructionBase::SlopeReconstructionBase ( const InputParameters &  parameters)

Definition at line 25 of file SlopeReconstructionBase.C.

26  : ElementLoopUserObject(parameters),
27  _rslope(declareRestartableData<std::map<dof_id_type, std::vector<RealGradient>>>(
28  "reconstructed_slopes")),
29  _avars(declareRestartableData<std::map<dof_id_type, std::vector<Real>>>("avg_var_values")),
30  _bnd_avars(
31  declareRestartableData<std::map<std::pair<dof_id_type, unsigned int>, std::vector<Real>>>(
32  "avg_bnd_var_values")),
33  _side_centroid(declareRestartableData<std::map<std::pair<dof_id_type, dof_id_type>, Point>>(
34  "side_centroid")),
36  declareRestartableData<std::map<std::pair<dof_id_type, unsigned int>, Point>>(
37  "bnd_side_centroid")),
38  _side_area(
39  declareRestartableData<std::map<std::pair<dof_id_type, dof_id_type>, Real>>("side_area")),
40  _bnd_side_area(declareRestartableData<std::map<std::pair<dof_id_type, unsigned int>, Real>>(
41  "bnd_side_area")),
42  _side_normal(declareRestartableData<std::map<std::pair<dof_id_type, dof_id_type>, Point>>(
43  "side_normal")),
44  _bnd_side_normal(declareRestartableData<std::map<std::pair<dof_id_type, unsigned int>, Point>>(
45  "bnd_side_normal")),
46  _q_point_face(_assembly.qPointsFace()),
47  _qrule_face(_assembly.qRuleFace()),
48  _JxW_face(_assembly.JxWFace()),
49  _normals_face(_assembly.normals()),
50  _side(_assembly.side()),
51  _side_elem(_assembly.sideElem()),
52  _side_volume(_assembly.sideElemVolume()),
53  _neighbor_elem(_assembly.neighbor()),
55 {
56 }
unsigned int & _side
current side of the current element
std::map< dof_id_type, std::vector< Real > > & _avars
store the average variable values into this map indexed by element ID
std::map< std::pair< dof_id_type, unsigned int >, std::vector< Real > > & _bnd_avars
store the boundary average variable values into this map indexed by pair of element ID and local side...
ElementLoopUserObject(const InputParameters &parameters)
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_normal
store the boundary side normal into this map indexed by pair of element ID and local side ID ...
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_centroid
store the side centroid into this map indexed by pair of element ID and neighbor ID ...
const MooseArray< Point > & _q_point_face
required data for face assembly
const Elem *& _neighbor_elem
the neighboring element
const MooseArray< Real > & _JxW_face
std::map< std::pair< dof_id_type, dof_id_type >, Real > & _side_area
store the side area into this map indexed by pair of element ID and neighbor ID
const MooseArray< Point > & _normals_face
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_centroid
store the boundary side centroid into this map indexed by pair of element ID and local side ID ...
bool _side_geoinfo_cached
flag to indicated if side geometry info is cached
std::map< std::pair< dof_id_type, unsigned int >, Real > & _bnd_side_area
store the boundary side area into this map indexed by pair of element ID and local side ID ...
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_normal
store the side normal into this map indexed by pair of element ID and neighbor ID ...
std::map< dof_id_type, std::vector< RealGradient > > & _rslope
store the reconstructed slopes into this map indexed by element ID

Member Function Documentation

◆ caughtMooseException()

void ElementLoopUserObject::caughtMooseException ( MooseException &  e)
protectedvirtualinherited

Definition at line 253 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

254 {
255  std::string what(e.what());
256  _fe_problem.setException(what);
257 }

◆ computeBoundary()

void ElementLoopUserObject::computeBoundary ( )
protectedvirtualinherited

Definition at line 231 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::onBoundary().

232 {
233 }

◆ computeElement()

void SlopeReconstructionBase::computeElement ( )
virtual

Reimplemented from ElementLoopUserObject.

Definition at line 258 of file SlopeReconstructionBase.C.

259 {
261 }
virtual void reconstructElementSlope()=0
compute the slope of the cell

◆ computeInterface()

void ElementLoopUserObject::computeInterface ( )
protectedvirtualinherited

Definition at line 241 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::onInterface().

242 {
243 }

◆ computeInternalSide()

void ElementLoopUserObject::computeInternalSide ( )
protectedvirtualinherited

Definition at line 236 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::onInternalSide().

237 {
238 }

◆ deserialize()

void SlopeReconstructionBase::deserialize ( std::vector< std::string > &  serialized_buffers)
protectedvirtual

Definition at line 283 of file SlopeReconstructionBase.C.

Referenced by finalize().

284 {
285  // The input string stream used for deserialization
286  std::istringstream iss;
287 
288  mooseAssert(serialized_buffers.size() == _app.n_processors(),
289  "Unexpected size of serialized_buffers: " << serialized_buffers.size());
290 
291  for (auto rank = decltype(_app.n_processors())(0); rank < serialized_buffers.size(); ++rank)
292  {
293  if (rank == processor_id())
294  continue;
295 
296  iss.str(serialized_buffers[rank]); // populate the stream with a new buffer
297  iss.clear(); // reset the string stream state
298 
299  // Load the communicated data into all of the other processors' slots
300 
301  unsigned int size = 0;
302  iss.read((char *)&size, sizeof(size));
303 
304  for (unsigned int i = 0; i < size; i++)
305  {
306  dof_id_type key;
307  loadHelper(iss, key, this);
308 
309  std::vector<RealGradient> value;
310  loadHelper(iss, value, this);
311 
312  // merge the data we received from other procs
313  _rslope.insert(std::pair<dof_id_type, std::vector<RealGradient>>(key, value));
314  }
315  }
316 }
std::map< dof_id_type, std::vector< RealGradient > > & _rslope
store the reconstructed slopes into this map indexed by element ID

◆ execute()

void ElementLoopUserObject::execute ( )
virtualinherited

Definition at line 69 of file ElementLoopUserObject.C.

70 {
71  ConstElemRange & elem_range = *_mesh.getActiveLocalElementRange();
72 
73  try
74  {
75  pre();
76 
77  _subdomain = std::numeric_limits<SubdomainID>::max();
78  ConstElemRange::const_iterator el = elem_range.begin();
79  for (el = elem_range.begin(); el != elem_range.end(); ++el)
80  {
81  if (!keepGoing())
82  break;
83 
84  const Elem * elem = *el;
85  unsigned int cur_subdomain = elem->subdomain_id();
86 
88  _subdomain = cur_subdomain;
89 
90  if (this->hasBlocks(_subdomain))
91  {
94 
95  onElement(elem);
96 
97  for (unsigned int side = 0; side < elem->n_sides(); side++)
98  {
99  std::vector<BoundaryID> boundary_ids = _mesh.getBoundaryIDs(elem, side);
100 
101  if (boundary_ids.size() > 0)
102  for (std::vector<BoundaryID>::iterator it = boundary_ids.begin();
103  it != boundary_ids.end();
104  ++it)
105  onBoundary(elem, side, *it);
106 
107  if (elem->neighbor(side) != NULL)
108  {
109  if (this->hasBlocks(elem->neighbor(side)->subdomain_id()))
110  onInternalSide(elem, side);
111  if (boundary_ids.size() > 0)
112  for (std::vector<BoundaryID>::iterator it = boundary_ids.begin();
113  it != boundary_ids.end();
114  ++it)
115  onInterface(elem, side, *it);
116  }
117  } // sides
118  }
119  } // range
120 
121  post();
122  }
123  catch (MooseException & e)
124  {
126  }
127 }
virtual void onInterface(const Elem *elem, unsigned int side, BoundaryID bnd_id)
virtual void onInternalSide(const Elem *elem, unsigned int side)
virtual void caughtMooseException(MooseException &e)
virtual void onBoundary(const Elem *elem, unsigned int side, BoundaryID bnd_id)
SubdomainID _subdomain
The subdomain for the current element.
virtual void onElement(const Elem *elem)
SubdomainID _old_subdomain
The subdomain for the last element.

◆ finalize()

void SlopeReconstructionBase::finalize ( )
virtual

Reimplemented from ElementLoopUserObject.

Definition at line 68 of file SlopeReconstructionBase.C.

69 {
71 
72  if (_app.n_processors() > 1)
73  {
74  _side_geoinfo_cached = true;
75 
76  std::vector<std::string> send_buffers(1);
77  std::vector<std::string> recv_buffers;
78 
79  recv_buffers.reserve(_app.n_processors());
80  serialize(send_buffers[0]);
81  comm().allgather_packed_range((void *)(nullptr),
82  send_buffers.begin(),
83  send_buffers.end(),
84  std::back_inserter(recv_buffers));
85  deserialize(recv_buffers);
86  }
87 }
virtual void serialize(std::string &serialized_buffer)
virtual void deserialize(std::vector< std::string > &serialized_buffers)
bool _side_geoinfo_cached
flag to indicated if side geometry info is cached

◆ getBoundaryAverageValue()

const std::vector< Real > & SlopeReconstructionBase::getBoundaryAverageValue ( dof_id_type  elementid,
unsigned int  side 
) const
virtual

accessor function call to get boundary average variable values

Definition at line 132 of file SlopeReconstructionBase.C.

133 {
134  Threads::spin_mutex::scoped_lock lock(_mutex);
135  std::map<std::pair<dof_id_type, unsigned int>, std::vector<Real>>::const_iterator pos =
136  _bnd_avars.find(std::pair<dof_id_type, unsigned int>(elementid, side));
137 
138  if (pos == _bnd_avars.end())
139  mooseError("Average variable values are not cached for element id '",
140  elementid,
141  "' and side '",
142  side,
143  "' in ",
144  __FUNCTION__);
145 
146  return pos->second;
147 }
std::map< std::pair< dof_id_type, unsigned int >, std::vector< Real > > & _bnd_avars
store the boundary average variable values into this map indexed by pair of element ID and local side...
static Threads::spin_mutex _mutex

◆ getBoundarySideArea()

const Real & SlopeReconstructionBase::getBoundarySideArea ( dof_id_type  elementid,
unsigned int  side 
) const
virtual

accessor function call to get cached boundary side area

Definition at line 240 of file SlopeReconstructionBase.C.

241 {
242  Threads::spin_mutex::scoped_lock lock(_mutex);
243  std::map<std::pair<dof_id_type, unsigned int>, Real>::const_iterator pos =
244  _bnd_side_area.find(std::pair<dof_id_type, unsigned int>(elementid, side));
245 
246  if (pos == _bnd_side_area.end())
247  mooseError("Boundary side area values are not cached for element id '",
248  elementid,
249  "' and side '",
250  side,
251  "' in ",
252  __FUNCTION__);
253 
254  return pos->second;
255 }
static Threads::spin_mutex _mutex
std::map< std::pair< dof_id_type, unsigned int >, Real > & _bnd_side_area
store the boundary side area into this map indexed by pair of element ID and local side ID ...

◆ getBoundarySideCentroid()

const Point & SlopeReconstructionBase::getBoundarySideCentroid ( dof_id_type  elementid,
unsigned int  side 
) const
virtual

accessor function call to get cached boundary side centroid

Definition at line 168 of file SlopeReconstructionBase.C.

169 {
170  Threads::spin_mutex::scoped_lock lock(_mutex);
171  std::map<std::pair<dof_id_type, unsigned int>, Point>::const_iterator pos =
172  _bnd_side_centroid.find(std::pair<dof_id_type, unsigned int>(elementid, side));
173 
174  if (pos == _bnd_side_centroid.end())
175  mooseError("Boundary side centroid values are not cached for element id '",
176  elementid,
177  "' and side '",
178  side,
179  "' in ",
180  __FUNCTION__);
181 
182  return pos->second;
183 }
static Threads::spin_mutex _mutex
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_centroid
store the boundary side centroid into this map indexed by pair of element ID and local side ID ...

◆ getBoundarySideNormal()

const Point & SlopeReconstructionBase::getBoundarySideNormal ( dof_id_type  elementid,
unsigned int  side 
) const
virtual

accessor function call to get cached boundary side centroid

Definition at line 204 of file SlopeReconstructionBase.C.

205 {
206  Threads::spin_mutex::scoped_lock lock(_mutex);
207  std::map<std::pair<dof_id_type, unsigned int>, Point>::const_iterator pos =
208  _bnd_side_normal.find(std::pair<dof_id_type, unsigned int>(elementid, side));
209 
210  if (pos == _bnd_side_normal.end())
211  mooseError("Boundary side normal values are not cached for element id '",
212  elementid,
213  "' and side '",
214  side,
215  "' in ",
216  __FUNCTION__);
217 
218  return pos->second;
219 }
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_normal
store the boundary side normal into this map indexed by pair of element ID and local side ID ...
static Threads::spin_mutex _mutex

◆ getElementAverageValue()

const std::vector< Real > & SlopeReconstructionBase::getElementAverageValue ( dof_id_type  elementid) const
virtual

accessor function call to get element average variable values

Definition at line 117 of file SlopeReconstructionBase.C.

118 {
119  Threads::spin_mutex::scoped_lock lock(_mutex);
120  std::map<dof_id_type, std::vector<Real>>::const_iterator pos = _avars.find(elementid);
121 
122  if (pos == _avars.end())
123  mooseError("Average variable values are not cached for element id '",
124  elementid,
125  "' in ",
126  __FUNCTION__);
127 
128  return pos->second;
129 }
std::map< dof_id_type, std::vector< Real > > & _avars
store the average variable values into this map indexed by element ID
static Threads::spin_mutex _mutex

◆ getElementSlope()

const std::vector< RealGradient > & SlopeReconstructionBase::getElementSlope ( dof_id_type  elementid) const
virtual

accessor function call to get element slope values

Definition at line 104 of file SlopeReconstructionBase.C.

105 {
106  Threads::spin_mutex::scoped_lock lock(_mutex);
107  std::map<dof_id_type, std::vector<RealGradient>>::const_iterator pos = _rslope.find(elementid);
108 
109  if (pos == _rslope.end())
110  mooseError(
111  "Reconstructed slope is not cached for element id '", elementid, "' in ", __FUNCTION__);
112 
113  return pos->second;
114 }
static Threads::spin_mutex _mutex
std::map< dof_id_type, std::vector< RealGradient > > & _rslope
store the reconstructed slopes into this map indexed by element ID

◆ getSideArea()

const Real & SlopeReconstructionBase::getSideArea ( dof_id_type  elementid,
dof_id_type  neighborid 
) const
virtual

accessor function call to get cached internal side area

Definition at line 222 of file SlopeReconstructionBase.C.

223 {
224  Threads::spin_mutex::scoped_lock lock(_mutex);
225  std::map<std::pair<dof_id_type, dof_id_type>, Real>::const_iterator pos =
226  _side_area.find(std::pair<dof_id_type, dof_id_type>(elementid, neighborid));
227 
228  if (pos == _side_area.end())
229  mooseError("Side area values are not cached for element id '",
230  elementid,
231  "' and neighbor id '",
232  neighborid,
233  "' in ",
234  __FUNCTION__);
235 
236  return pos->second;
237 }
static Threads::spin_mutex _mutex
std::map< std::pair< dof_id_type, dof_id_type >, Real > & _side_area
store the side area into this map indexed by pair of element ID and neighbor ID

◆ getSideCentroid()

const Point & SlopeReconstructionBase::getSideCentroid ( dof_id_type  elementid,
dof_id_type  neighborid 
) const
virtual

accessor function call to get cached internal side centroid

Definition at line 150 of file SlopeReconstructionBase.C.

151 {
152  Threads::spin_mutex::scoped_lock lock(_mutex);
153  std::map<std::pair<dof_id_type, dof_id_type>, Point>::const_iterator pos =
154  _side_centroid.find(std::pair<dof_id_type, dof_id_type>(elementid, neighborid));
155 
156  if (pos == _side_centroid.end())
157  mooseError("Side centroid values are not cached for element id '",
158  elementid,
159  "' and neighbor id '",
160  neighborid,
161  "' in ",
162  __FUNCTION__);
163 
164  return pos->second;
165 }
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_centroid
store the side centroid into this map indexed by pair of element ID and neighbor ID ...
static Threads::spin_mutex _mutex

◆ getSideNormal()

const Point & SlopeReconstructionBase::getSideNormal ( dof_id_type  elementid,
dof_id_type  neighborid 
) const
virtual

accessor function call to get cached internal side normal

Definition at line 186 of file SlopeReconstructionBase.C.

187 {
188  Threads::spin_mutex::scoped_lock lock(_mutex);
189  std::map<std::pair<dof_id_type, dof_id_type>, Point>::const_iterator pos =
190  _side_normal.find(std::pair<dof_id_type, dof_id_type>(elementid, neighborid));
191 
192  if (pos == _side_normal.end())
193  mooseError("Side normal values are not cached for element id '",
194  elementid,
195  "' and neighbor id '",
196  neighborid,
197  "' in ",
198  __FUNCTION__);
199 
200  return pos->second;
201 }
static Threads::spin_mutex _mutex
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_normal
store the side normal into this map indexed by pair of element ID and neighbor ID ...

◆ initialize()

void SlopeReconstructionBase::initialize ( )
virtual

Reimplemented from ElementLoopUserObject.

Definition at line 59 of file SlopeReconstructionBase.C.

60 {
62 
63  _rslope.clear();
64  _avars.clear();
65 }
std::map< dof_id_type, std::vector< Real > > & _avars
store the average variable values into this map indexed by element ID
std::map< dof_id_type, std::vector< RealGradient > > & _rslope
store the reconstructed slopes into this map indexed by element ID

◆ join()

void ElementLoopUserObject::join ( const ElementLoopUserObject )
inherited

Definition at line 221 of file ElementLoopUserObject.C.

222 {
223 }

◆ keepGoing()

virtual bool ElementLoopUserObject::keepGoing ( )
inlinevirtualinherited

Definition at line 80 of file ElementLoopUserObject.h.

Referenced by ElementLoopUserObject::execute().

80 { return true; }

◆ meshChanged()

void SlopeReconstructionBase::meshChanged ( )
virtual

Reimplemented from ElementLoopUserObject.

Definition at line 90 of file SlopeReconstructionBase.C.

91 {
93 
94  _side_geoinfo_cached = false;
95  _side_centroid.clear();
96  _bnd_side_centroid.clear();
97  _side_normal.clear();
98  _bnd_side_normal.clear();
99  _side_area.clear();
100  _bnd_side_area.clear();
101 }
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_normal
store the boundary side normal into this map indexed by pair of element ID and local side ID ...
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_centroid
store the side centroid into this map indexed by pair of element ID and neighbor ID ...
std::map< std::pair< dof_id_type, dof_id_type >, Real > & _side_area
store the side area into this map indexed by pair of element ID and neighbor ID
std::map< std::pair< dof_id_type, unsigned int >, Point > & _bnd_side_centroid
store the boundary side centroid into this map indexed by pair of element ID and local side ID ...
bool _side_geoinfo_cached
flag to indicated if side geometry info is cached
std::map< std::pair< dof_id_type, unsigned int >, Real > & _bnd_side_area
store the boundary side area into this map indexed by pair of element ID and local side ID ...
std::map< std::pair< dof_id_type, dof_id_type >, Point > & _side_normal
store the side normal into this map indexed by pair of element ID and neighbor ID ...

◆ onBoundary()

void ElementLoopUserObject::onBoundary ( const Elem *  elem,
unsigned int  side,
BoundaryID  bnd_id 
)
virtualinherited

Definition at line 153 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

154 {
155  _current_side = side;
156  computeBoundary();
157 }

◆ onElement()

void ElementLoopUserObject::onElement ( const Elem *  elem)
virtualinherited

Definition at line 146 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

147 {
148  _current_elem = elem;
149  computeElement();
150 }

◆ onInterface()

void ElementLoopUserObject::onInterface ( const Elem *  elem,
unsigned int  side,
BoundaryID  bnd_id 
)
virtualinherited

Definition at line 188 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

189 {
190  _current_elem = elem;
191  // Pointer to the neighbor we are currently working on.
192  _current_neighbor = elem->neighbor(side);
193 
194  // Get the global id of the element and the neighbor
195  const dof_id_type elem_id = elem->id();
196  const dof_id_type neighbor_id = _current_neighbor->id();
197 
198  // TODO: add if-statement to check if this needs to be executed
199  if ((_current_neighbor->active() && (_current_neighbor->level() == elem->level()) &&
200  (elem_id < neighbor_id)) ||
201  (_current_neighbor->level() < elem->level()))
202  {
204  }
205 
206  if (!_have_interface_elems &&
207  (_current_elem->processor_id() != _current_neighbor->processor_id()))
208  {
209  // if my current neighbor is on another processor store the current element
210  // ID for later communication
211  _interface_elem_ids.insert(_current_elem->id());
212  }
213 }
std::set< dof_id_type > _interface_elem_ids
List of element IDs that are on the processor boundary and need to be send to other processors...
bool _have_interface_elems
true if we have cached interface elements, false if they need to be cached. We want to (re)cache only...

◆ onInternalSide()

void ElementLoopUserObject::onInternalSide ( const Elem *  elem,
unsigned int  side 
)
virtualinherited

Definition at line 160 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

161 {
162  _current_elem = elem;
163  // Pointer to the neighbor we are currently working on.
164  _current_neighbor = elem->neighbor(side);
165 
166  // Get the global id of the element and the neighbor
167  const dof_id_type elem_id = elem->id();
168  const dof_id_type neighbor_id = _current_neighbor->id();
169 
170  // TODO: add if-statement to check if this needs to be executed
171  if ((_current_neighbor->active() && (_current_neighbor->level() == elem->level()) &&
172  (elem_id < neighbor_id)) ||
173  (_current_neighbor->level() < elem->level()))
174  {
176  }
177 
178  if (!_have_interface_elems &&
179  (_current_elem->processor_id() != _current_neighbor->processor_id()))
180  {
181  // if my current neighbor is on another processor store the current element ID for later
182  // communication
183  _interface_elem_ids.insert(_current_elem->id());
184  }
185 }
virtual void computeInternalSide()
std::set< dof_id_type > _interface_elem_ids
List of element IDs that are on the processor boundary and need to be send to other processors...
bool _have_interface_elems
true if we have cached interface elements, false if they need to be cached. We want to (re)cache only...

◆ post()

void ElementLoopUserObject::post ( )
virtualinherited

Definition at line 216 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

217 {
218 }

◆ pre()

void ElementLoopUserObject::pre ( )
virtualinherited

Definition at line 136 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

137 {
138 }

◆ reconstructElementSlope()

virtual void SlopeReconstructionBase::reconstructElementSlope ( )
pure virtual

compute the slope of the cell

Referenced by computeElement().

◆ serialize()

void SlopeReconstructionBase::serialize ( std::string &  serialized_buffer)
protectedvirtual

Definition at line 264 of file SlopeReconstructionBase.C.

Referenced by finalize().

265 {
266  std::ostringstream oss;
267 
268  // First store the number of elements to send
269  unsigned int size = _interface_elem_ids.size();
270  oss.write((char *)&size, sizeof(size));
271 
272  for (auto it = _interface_elem_ids.begin(); it != _interface_elem_ids.end(); ++it)
273  {
274  storeHelper(oss, *it, this);
275  storeHelper(oss, _rslope[*it], this);
276  }
277 
278  // Populate the passed in string pointer with the string stream's buffer contents
279  serialized_buffer.assign(oss.str());
280 }
std::set< dof_id_type > _interface_elem_ids
List of element IDs that are on the processor boundary and need to be send to other processors...
std::map< dof_id_type, std::vector< RealGradient > > & _rslope
store the reconstructed slopes into this map indexed by element ID

◆ subdomainChanged()

void ElementLoopUserObject::subdomainChanged ( )
virtualinherited

Definition at line 141 of file ElementLoopUserObject.C.

Referenced by ElementLoopUserObject::execute().

142 {
143 }

Member Data Documentation

◆ _avars

std::map<dof_id_type, std::vector<Real> >& SlopeReconstructionBase::_avars
protected

store the average variable values into this map indexed by element ID

Definition at line 77 of file SlopeReconstructionBase.h.

Referenced by getElementAverageValue(), and initialize().

◆ _bnd_avars

std::map<std::pair<dof_id_type, unsigned int>, std::vector<Real> >& SlopeReconstructionBase::_bnd_avars
protected

store the boundary average variable values into this map indexed by pair of element ID and local side ID

Definition at line 80 of file SlopeReconstructionBase.h.

Referenced by getBoundaryAverageValue().

◆ _bnd_side_area

std::map<std::pair<dof_id_type, unsigned int>, Real>& SlopeReconstructionBase::_bnd_side_area
protected

store the boundary side area into this map indexed by pair of element ID and local side ID

Definition at line 92 of file SlopeReconstructionBase.h.

Referenced by getBoundarySideArea(), and meshChanged().

◆ _bnd_side_centroid

std::map<std::pair<dof_id_type, unsigned int>, Point>& SlopeReconstructionBase::_bnd_side_centroid
protected

store the boundary side centroid into this map indexed by pair of element ID and local side ID

Definition at line 86 of file SlopeReconstructionBase.h.

Referenced by getBoundarySideCentroid(), and meshChanged().

◆ _bnd_side_normal

std::map<std::pair<dof_id_type, unsigned int>, Point>& SlopeReconstructionBase::_bnd_side_normal
protected

store the boundary side normal into this map indexed by pair of element ID and local side ID

Definition at line 98 of file SlopeReconstructionBase.h.

Referenced by getBoundarySideNormal(), and meshChanged().

◆ _coord

const MooseArray<Real>& ElementLoopUserObject::_coord
protectedinherited

Definition at line 99 of file ElementLoopUserObject.h.

◆ _current_elem

const Elem* ElementLoopUserObject::_current_elem
protectedinherited

◆ _current_elem_volume

const Real& ElementLoopUserObject::_current_elem_volume
protectedinherited

Definition at line 92 of file ElementLoopUserObject.h.

◆ _current_neighbor

const Elem* ElementLoopUserObject::_current_neighbor
protectedinherited

◆ _current_side

unsigned int ElementLoopUserObject::_current_side
protectedinherited

Definition at line 93 of file ElementLoopUserObject.h.

Referenced by ElementLoopUserObject::onBoundary().

◆ _have_interface_elems

bool ElementLoopUserObject::_have_interface_elems
protectedinherited

true if we have cached interface elements, false if they need to be cached. We want to (re)cache only when mesh changed

Definition at line 102 of file ElementLoopUserObject.h.

Referenced by ElementLoopUserObject::finalize(), ElementLoopUserObject::meshChanged(), ElementLoopUserObject::onInterface(), and ElementLoopUserObject::onInternalSide().

◆ _interface_elem_ids

std::set<dof_id_type> ElementLoopUserObject::_interface_elem_ids
protectedinherited

List of element IDs that are on the processor boundary and need to be send to other processors.

Definition at line 104 of file ElementLoopUserObject.h.

Referenced by ElementLoopUserObject::meshChanged(), ElementLoopUserObject::onInterface(), ElementLoopUserObject::onInternalSide(), SlopeLimitingBase::serialize(), and serialize().

◆ _JxW

const MooseArray<Real>& ElementLoopUserObject::_JxW
protectedinherited

Definition at line 98 of file ElementLoopUserObject.h.

◆ _JxW_face

const MooseArray<Real>& SlopeReconstructionBase::_JxW_face
protected

Definition at line 103 of file SlopeReconstructionBase.h.

◆ _mesh

MooseMesh& ElementLoopUserObject::_mesh
protectedinherited

◆ _mutex

Threads::spin_mutex SlopeReconstructionBase::_mutex
staticprivate

◆ _neighbor_elem

const Elem*& SlopeReconstructionBase::_neighbor_elem
protected

the neighboring element

Definition at line 113 of file SlopeReconstructionBase.h.

◆ _normals_face

const MooseArray<Point>& SlopeReconstructionBase::_normals_face
protected

Definition at line 104 of file SlopeReconstructionBase.h.

◆ _old_subdomain

SubdomainID ElementLoopUserObject::_old_subdomain
protectedinherited

The subdomain for the last element.

Definition at line 110 of file ElementLoopUserObject.h.

Referenced by ElementLoopUserObject::execute().

◆ _q_point

const MooseArray<Point>& ElementLoopUserObject::_q_point
protectedinherited

Definition at line 96 of file ElementLoopUserObject.h.

◆ _q_point_face

const MooseArray<Point>& SlopeReconstructionBase::_q_point_face
protected

required data for face assembly

Definition at line 101 of file SlopeReconstructionBase.h.

◆ _qrule

QBase*& ElementLoopUserObject::_qrule
protectedinherited

Definition at line 97 of file ElementLoopUserObject.h.

◆ _qrule_face

QBase*& SlopeReconstructionBase::_qrule_face
protected

Definition at line 102 of file SlopeReconstructionBase.h.

◆ _rslope

std::map<dof_id_type, std::vector<RealGradient> >& SlopeReconstructionBase::_rslope
protected

store the reconstructed slopes into this map indexed by element ID

Definition at line 74 of file SlopeReconstructionBase.h.

Referenced by deserialize(), getElementSlope(), initialize(), and serialize().

◆ _side

unsigned int& SlopeReconstructionBase::_side
protected

current side of the current element

Definition at line 107 of file SlopeReconstructionBase.h.

◆ _side_area

std::map<std::pair<dof_id_type, dof_id_type>, Real>& SlopeReconstructionBase::_side_area
protected

store the side area into this map indexed by pair of element ID and neighbor ID

Definition at line 89 of file SlopeReconstructionBase.h.

Referenced by getSideArea(), and meshChanged().

◆ _side_centroid

std::map<std::pair<dof_id_type, dof_id_type>, Point>& SlopeReconstructionBase::_side_centroid
protected

store the side centroid into this map indexed by pair of element ID and neighbor ID

Definition at line 83 of file SlopeReconstructionBase.h.

Referenced by getSideCentroid(), and meshChanged().

◆ _side_elem

const Elem*& SlopeReconstructionBase::_side_elem
protected

Definition at line 109 of file SlopeReconstructionBase.h.

◆ _side_geoinfo_cached

bool SlopeReconstructionBase::_side_geoinfo_cached
protected

flag to indicated if side geometry info is cached

Definition at line 116 of file SlopeReconstructionBase.h.

Referenced by finalize(), and meshChanged().

◆ _side_normal

std::map<std::pair<dof_id_type, dof_id_type>, Point>& SlopeReconstructionBase::_side_normal
protected

store the side normal into this map indexed by pair of element ID and neighbor ID

Definition at line 95 of file SlopeReconstructionBase.h.

Referenced by getSideNormal(), and meshChanged().

◆ _side_volume

const Real& SlopeReconstructionBase::_side_volume
protected

Definition at line 110 of file SlopeReconstructionBase.h.

◆ _subdomain

SubdomainID ElementLoopUserObject::_subdomain
protectedinherited

The subdomain for the current element.

Definition at line 107 of file ElementLoopUserObject.h.

Referenced by ElementLoopUserObject::execute().


The documentation for this class was generated from the following files: