ug4
distributed_grid.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2015: G-CSC, Goethe University Frankfurt
3  * Author: Sebastian Reiter
4  *
5  * This file is part of UG4.
6  *
7  * UG4 is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License version 3 (as published by the
9  * Free Software Foundation) with the following additional attribution
10  * requirements (according to LGPL/GPL v3 §7):
11  *
12  * (1) The following notice must be displayed in the Appropriate Legal Notices
13  * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14  *
15  * (2) The following notice must be displayed at a prominent place in the
16  * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17  *
18  * (3) The following bibliography is recommended for citation and must be
19  * preserved in all covered files:
20  * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21  * parallel geometric multigrid solver on hierarchically distributed grids.
22  * Computing and visualization in science 16, 4 (2013), 151-164"
23  * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24  * flexible software system for simulating pde based models on high performance
25  * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  */
32 
33 #ifndef __H__LIB_GRID__DISTRIBUTED_GRID__
34 #define __H__LIB_GRID__DISTRIBUTED_GRID__
35 
36 #include <map>
37 #include <vector>
38 #include "parallel_grid_layout.h"
39 #include "lib_grid/multi_grid.h"
41 #include "distro_adjuster.h"
42 
43 namespace ug
44 {
45 
48 
50 
56 {
62 
63  //ES_GHOST = 1 << 5,//currently unused
65  ES_IN_INTERFACE = 1 << 7
66 };
67 
68 
70 
88 {
89  public:
92  virtual ~DistributedGridManager();
93 
94  // assignment
95  void assign(MultiGrid& grid);
96 
97  inline MultiGrid* get_assigned_grid() {return m_pGrid;}
98  inline const MultiGrid* get_assigned_grid() const {return m_pGrid;}
99 
100  // layout access
104  inline const GridLayoutMap& grid_layout_map() const {return m_gridLayoutMap;}
105 
107 
116  void grid_layouts_changed(bool addedElemsOnly = false);
117 
119 
124  byte get_status(GridObject* go) const;
125  inline byte get_status(Vertex* vrt) const {return elem_info(vrt).get_status();}
126  inline byte get_status(Edge* edge) const {return elem_info(edge).get_status();}
127  inline byte get_status(Face* face) const {return elem_info(face).get_status();}
128  inline byte get_status(Volume* vol) const {return elem_info(vol).get_status();}
132 
134  template <class TGeomObj>
135  bool contains_status(TGeomObj* o, byte status) const {return (get_status(o) & status) == status;}
136 
138 
140  template<class TElem>
141  inline bool is_ghost(TElem* elem) const;
142 
144  template<class TElem>
145  inline bool is_in_horizontal_interface(TElem* elem) const;
146 
148  template<class TElem>
149  inline bool is_in_vertical_interface(TElem* elem) const;
150 
151  // element creation
153 
156 
158 
161 
162  // element deletion
164  void begin_element_deletion();
165 
167  void end_element_deletion();
168 
170  template <class TElem>
171  bool is_interface_element(TElem* elem);
172 
176  template <class TElem>
178  std::vector<std::pair<int, size_t> >& vEntriesOut,
179  TElem* elem, byte statusType, bool clearContainer = true);
180 
181 
183 
189 
190 
192 
203 
206 
208  // grid callbacks
209  virtual void grid_to_be_destroyed(Grid* grid);
210 
211  // vertex callbacks
212  virtual void vertex_created(Grid* grid, Vertex* vrt,
213  GridObject* pParent = NULL,
214  bool replacesParent = false);
215 
216  virtual void edge_created(Grid* grid, Edge* e,
217  GridObject* pParent = NULL,
218  bool replacesParent = false);
219 
220  virtual void face_created(Grid* grid, Face* f,
221  GridObject* pParent = NULL,
222  bool replacesParent = false);
223 
224  virtual void volume_created(Grid* grid, Volume* v,
225  GridObject* pParent = NULL,
226  bool replacesParent = false);
227 
228  virtual void vertex_to_be_erased(Grid* grid, Vertex* vrt,
229  Vertex* replacedBy = NULL);
230 
231  virtual void edge_to_be_erased(Grid* grid, Edge* e,
232  Edge* replacedBy = NULL);
233 
234  virtual void face_to_be_erased(Grid* grid, Face* f,
235  Face* replacedBy = NULL);
236 
237  virtual void volume_to_be_erased(Grid* grid, Volume* vol,
238  Volume* replacedBy = NULL);
239 
240  protected:
242 
243  void set_grid(Grid* grid);
244 
246  void free_grid_data();
247 
248  template <class TGeomObj>
249  void reset_elem_infos();
250 
251  /* Currently unused. See implementation for more details.
252  template <class TElem>
253  void set_preliminary_ghost_states();
254 
255  void update_ghost_states();
256  */
257 
258  template <class TGeomObj, class TLayoutMap>
259  void update_elem_info(TLayoutMap& layoutMap, int nodeType,
260  byte newStatus, bool addStatus = false);
261 
262  template <class TGeomObj>
263  void update_all_elem_infos();
264 
266  template <class TElem>
267  void handle_created_element(TElem* pElem, GridObject* pParent,
268  bool replacesParent);
269 
270  template <class TElem, class TScheduledElemMap, class TParent>
271  void schedule_element_for_insertion(TScheduledElemMap& elemMap,
272  TElem* elem,
273  TParent* pParent);
274 
276 
277  template <class TScheduledElemMap>
278  void perform_ordered_element_insertion(TScheduledElemMap& elemMap);
279 
280  template <class TElem>
281  void add_element_to_interface(TElem* pElem, int procID);
282 
283  template <class TElem>
284  void element_to_be_erased(TElem* elem);
285 
287  template <class TElem>
288  void create_missing_constrained_h_interfaces(std::vector<TElem*>& newConstrainedElems);
289 
290  protected:
292 
296  template <class TGeomObj>
298  {
299  public:
300  // types
301  typedef typename GridLayoutMap::template Types<TGeomObj>
303  typedef typename Interface::iterator InterfaceElemIter;
304  //typedef std::pair<Interface*, InterfaceElemIter> Entry;
305 
306  struct Entry{
307  Entry() {}
308  Entry(Interface* intfc, InterfaceElemIter intfcElemIter, int intfcType) :
309  m_interface(intfc), m_interfaceElemIter(intfcElemIter),
310  m_interfaceType(intfcType) {}
311 
315  };
316 
317  typedef std::list<Entry> EntryList;
318  typedef typename EntryList::iterator EntryIterator;
319  typedef typename EntryList::const_iterator ConstEntryIterator;
320 
321  // methods
323 
324  ~ElementInfo() {if(has_data()) m_data.reset();}
325 
326  void reset()
327  {
328  if(has_data()){
329  //todo: reuse m_data
330  m_data.reset();
331  }
332  }
333 
334  void add_entry(Interface* interface,
335  InterfaceElemIter iter,
336  int intfcType) {data().m_entries.push_back(Entry(interface, iter, intfcType));}
337 
338  void remove_entry(Interface* interface) {data().m_entries.erase(find_entry(interface));}
339 
341 
342  inline EntryIterator entries_begin() {assert(has_data()); return m_data->m_entries.begin();}
343  inline EntryIterator entries_end() {assert(has_data()); return m_data->m_entries.end();}
344 
345  inline ConstEntryIterator entries_begin() const {assert(has_data()); return m_data->m_entries.begin();}
346  inline ConstEntryIterator entries_end() const {assert(has_data()); return m_data->m_entries.end();}
349  size_t get_local_id(EntryIterator iter) const {return iter->m_interface->get_local_id(iter->m_interfaceElemIter);}
350  size_t get_local_id(ConstEntryIterator iter) const {return iter->m_interface->get_local_id(iter->m_interfaceElemIter);}
351  int get_target_proc(EntryIterator iter) const {return iter->m_interface->get_target_proc();}
352  int get_target_proc(ConstEntryIterator iter) const {return iter->m_interface->get_target_proc();}
353  Interface* get_interface(EntryIterator iter) {return iter->m_interface;}
354  int get_interface_type(EntryIterator iter) const {return iter->m_interfaceType;}
355  int get_interface_type(ConstEntryIterator iter) const {return iter->m_interfaceType;}
356 
359  { assert(has_data());
360  for(EntryIterator iter = entries_begin(); iter != entries_end(); ++iter){
361  if(iter->m_interface == interface)
362  return iter;
363  }
364  return entries_end();
365  }
366 
367  void set_status(byte status)
368  {
369  if(!has_data() && (status == ES_NONE))
370  return;
371  data().m_status = status;
372  }
373  byte get_status() const
374  {
375  if(!has_data()) return ES_NONE;
376  return m_data->m_status;
377  }
378 
380  {
381  if(!has_data()) return false;
382  return !m_data->m_entries.empty();
383  }
384 
385  protected:
386  struct Data{
389  byte m_status;
390  };
391 
393  inline Data& data()
394  {
395  if(!has_data())
396  m_data.get() = new Data;
397  return *m_data;
398  }
399 
400  inline bool has_data() const {return m_data.get() != NULL;}
401 
403 
407  };
408 
413 
418 
420 
426  {
427  ScheduledElement(GridObject* obj, int procID) :
428  geomObj(obj), connectedProcID(procID) {}
429 
432  };
433 
434  typedef std::multimap<size_t, ScheduledElement> ScheduledElemMap;
435 
436  protected:
437  inline ElemInfoVrt& elem_info(Vertex* ele) {return m_aaElemInfoVRT[ele];}
438  inline ElemInfoEdge& elem_info(Edge* ele) {return m_aaElemInfoEDGE[ele];}
439  inline ElemInfoFace& elem_info(Face* ele) {return m_aaElemInfoFACE[ele];}
440  inline ElemInfoVol& elem_info(Volume* ele) {return m_aaElemInfoVOL[ele];}
441 
442  inline const ElemInfoVrt& elem_info(Vertex* ele) const {return m_aaElemInfoVRT[ele];}
443  inline const ElemInfoEdge& elem_info(Edge* ele) const {return m_aaElemInfoEDGE[ele];}
444  inline const ElemInfoFace& elem_info(Face* ele) const {return m_aaElemInfoFACE[ele];}
445  inline const ElemInfoVol& elem_info(Volume* ele) const {return m_aaElemInfoVOL[ele];}
446 
450  inline void got_new_constrained_vertical(Volume*) {UG_THROW("There are no constrained volumes!");}
451 
452 
453  protected:
456 
458 
461 
466 
471 
476 
477  std::vector<Vertex*> m_newConstrainedVerticalVrts;
478  std::vector<Edge*> m_newConstrainedVerticalEdges;
479  std::vector<Face*> m_newConstrainedVerticalFaces;
480 
482 };
483 
485 
486 }// end of namespace
487 
489 // include implementation
490 #include "distributed_grid_impl.hpp"
491 
492 #endif
Definition: smart_pointer.h:108
Be careful when creating copies of ElementInfo.
Definition: distributed_grid.h:298
size_t get_local_id(ConstEntryIterator iter) const
Definition: distributed_grid.h:350
int get_interface_type(ConstEntryIterator iter) const
Definition: distributed_grid.h:355
void reset()
Definition: distributed_grid.h:326
void remove_entry(Interface *interface)
Definition: distributed_grid.h:338
GridLayoutMap::template Types< TGeomObj >::Interface Interface
Definition: distributed_grid.h:302
Interface * get_interface(EntryIterator iter)
Definition: distributed_grid.h:353
int get_target_proc(EntryIterator iter) const
Definition: distributed_grid.h:351
OwnedPtr< Data > m_data
OwnedPtr is required to transfer ownership of the data-ptr during copy-operations.
Definition: distributed_grid.h:406
ConstEntryIterator entries_begin() const
Note: This method may only be called if is_interface_entry() returns true.
Definition: distributed_grid.h:345
bool has_data() const
Definition: distributed_grid.h:400
Data & data()
returns the data object. Creates it if necessary.
Definition: distributed_grid.h:393
std::list< Entry > EntryList
Definition: distributed_grid.h:317
int get_interface_type(EntryIterator iter) const
Definition: distributed_grid.h:354
EntryIterator entries_end()
Note: This method may only be called if is_interface_entry() returns true.
Definition: distributed_grid.h:343
int get_target_proc(ConstEntryIterator iter) const
Definition: distributed_grid.h:352
ElementInfo()
Definition: distributed_grid.h:322
EntryList::iterator EntryIterator
Definition: distributed_grid.h:318
bool is_interface_element()
Definition: distributed_grid.h:379
byte get_status() const
Definition: distributed_grid.h:373
void add_entry(Interface *interface, InterfaceElemIter iter, int intfcType)
Definition: distributed_grid.h:334
void set_status(byte status)
Definition: distributed_grid.h:367
EntryList::const_iterator ConstEntryIterator
Definition: distributed_grid.h:319
EntryIterator entries_begin()
Note: This method may only be called if is_interface_entry() returns true.
Definition: distributed_grid.h:342
Interface::iterator InterfaceElemIter
Definition: distributed_grid.h:303
EntryIterator find_entry(Interface *interface)
Note: This method may only be called if is_interface_entry() returns true.
Definition: distributed_grid.h:358
ConstEntryIterator entries_end() const
Note: This method may only be called if is_interface_entry() returns true.
Definition: distributed_grid.h:346
size_t get_local_id(EntryIterator iter) const
Definition: distributed_grid.h:349
~ElementInfo()
Definition: distributed_grid.h:324
manages the layouts and interfaces which are associated with a distributed grid.
Definition: distributed_grid.h:88
Grid::FaceAttachmentAccessor< AElemInfoFace > m_aaElemInfoFACE
Definition: distributed_grid.h:469
void collect_interface_entries(std::vector< std::pair< int, size_t > > &vEntriesOut, TElem *elem, byte statusType, bool clearContainer=true)
Definition: distributed_grid_impl.hpp:79
void add_element_to_interface(TElem *pElem, int procID)
Definition: distributed_grid.cpp:438
void handle_created_element(TElem *pElem, GridObject *pParent, bool replacesParent)
vertex_created, edge_created, ... callbacks call this method.
Definition: distributed_grid.cpp:570
void free_grid_data()
free's all grid related data
Definition: distributed_grid.cpp:129
ScheduledElemMap m_volMap
holds all elements that were scheduled by volumes
Definition: distributed_grid.h:475
virtual void grid_to_be_destroyed(Grid *grid)
Definition: distributed_grid.cpp:145
AElemInfoFace m_aElemInfoFace
Definition: distributed_grid.h:464
const MultiGrid * get_assigned_grid() const
Definition: distributed_grid.h:98
virtual void volume_created(Grid *grid, Volume *v, GridObject *pParent=NULL, bool replacesParent=false)
Notified whenever a new element of the given type is created in the given grid.
Definition: distributed_grid.cpp:695
byte get_status(Volume *vol) const
returns the status of the given object.
Definition: distributed_grid.h:128
void set_distro_adjuster(SmartPtr< DistroAdjuster > adj)
set a global distribution adjuster
Definition: distributed_grid.h:202
std::vector< Edge * > m_newConstrainedVerticalEdges
Definition: distributed_grid.h:478
ScheduledElemMap m_edgeMap
holds all elements that were scheduled by edges
Definition: distributed_grid.h:473
bool is_in_horizontal_interface(TElem *elem) const
returns true if the element is contained in a horizontal interface
Definition: distributed_grid_impl.hpp:51
byte get_status(Vertex *vrt) const
returns the status of the given object.
Definition: distributed_grid.h:125
virtual ~DistributedGridManager()
Definition: distributed_grid.cpp:76
ElementInfo< Vertex > ElemInfoVrt
Definition: distributed_grid.h:409
std::vector< Vertex * > m_newConstrainedVerticalVrts
Definition: distributed_grid.h:477
SmartPtr< DistroAdjuster > m_spDistroAdjuster
Definition: distributed_grid.h:481
std::multimap< size_t, ScheduledElement > ScheduledElemMap
Definition: distributed_grid.h:434
void begin_element_deletion()
call this method before you start deleting elements in the associated grid
Definition: distributed_grid.cpp:705
byte get_status(GridObject *go) const
returns the status of the given object.
Definition: distributed_grid.cpp:379
void clear_scheduled_elements()
Definition: distributed_grid.cpp:525
DistributedGridManager()
Definition: distributed_grid.cpp:47
void got_new_constrained_vertical(Vertex *v)
Definition: distributed_grid.h:447
const ElemInfoVol & elem_info(Volume *ele) const
Definition: distributed_grid.h:445
const ElemInfoEdge & elem_info(Edge *ele) const
Definition: distributed_grid.h:443
void set_grid(Grid *grid)
performs registration and deregistration at a grid.
Definition: distributed_grid.cpp:98
MultiGrid * m_pGrid
Definition: distributed_grid.h:454
ElemInfoVrt & elem_info(Vertex *ele)
Definition: distributed_grid.h:437
virtual void vertex_created(Grid *grid, Vertex *vrt, GridObject *pParent=NULL, bool replacesParent=false)
Notified whenever a new element of the given type is created in the given grid.
Definition: distributed_grid.cpp:673
virtual void face_to_be_erased(Grid *grid, Face *f, Face *replacedBy=NULL)
Notified whenever an element of the given type is erased from the given grid.
Definition: distributed_grid.cpp:1261
ScheduledElemMap m_faceMap
holds all elements that were scheduled by faces
Definition: distributed_grid.h:474
void grid_layouts_changed(bool addedElemsOnly=false)
call this method if you altered the layout externally.
Definition: distributed_grid.cpp:280
ElemInfoVol & elem_info(Volume *ele)
Definition: distributed_grid.h:440
void got_new_constrained_vertical(Face *f)
Definition: distributed_grid.h:449
void got_new_constrained_vertical(Volume *)
Definition: distributed_grid.h:450
const ElemInfoVrt & elem_info(Vertex *ele) const
Definition: distributed_grid.h:442
Attachment< ElemInfoEdge > AElemInfoEdge
Definition: distributed_grid.h:415
virtual void face_created(Grid *grid, Face *f, GridObject *pParent=NULL, bool replacesParent=false)
Notified whenever a new element of the given type is created in the given grid.
Definition: distributed_grid.cpp:688
void begin_ordered_element_insertion()
call this method before you start creating new elements in the associated grid.
Definition: distributed_grid.cpp:400
void create_missing_constrained_h_interfaces(std::vector< TElem * > &newConstrainedElems)
Definition: distributed_grid.cpp:1042
bool m_interfaceManagementEnabled
only for debug purposes
Definition: distributed_grid.h:457
ElemInfoEdge & elem_info(Edge *ele)
Definition: distributed_grid.h:438
Grid::VertexAttachmentAccessor< AElemInfoVrt > m_aaElemInfoVRT
Definition: distributed_grid.h:467
ElementInfo< Edge > ElemInfoEdge
Definition: distributed_grid.h:410
void schedule_element_for_insertion(TScheduledElemMap &elemMap, TElem *elem, TParent *pParent)
Definition: distributed_grid.cpp:537
virtual void vertex_to_be_erased(Grid *grid, Vertex *vrt, Vertex *replacedBy=NULL)
Notified whenever an element of the given type is erased from the given grid.
Definition: distributed_grid.cpp:1247
bool is_interface_element(TElem *elem)
returns true if an element is in one or more interfaces
Definition: distributed_grid_impl.hpp:44
void enable_interface_management(bool bEnable)
Enables or disables interface managment. Use with care!
Definition: distributed_grid.h:188
void update_all_elem_infos()
Definition: distributed_grid.cpp:307
GridLayoutMap m_gridLayoutMap
Definition: distributed_grid.h:455
void reset_elem_infos()
Definition: distributed_grid.cpp:324
virtual void edge_created(Grid *grid, Edge *e, GridObject *pParent=NULL, bool replacesParent=false)
Notified whenever a new element of the given type is created in the given grid.
Definition: distributed_grid.cpp:681
AElemInfoVol m_aElemInfoVol
Definition: distributed_grid.h:465
void got_new_constrained_vertical(Edge *e)
Definition: distributed_grid.h:448
ElementInfo< Face > ElemInfoFace
Definition: distributed_grid.h:411
Attachment< ElemInfoVrt > AElemInfoVrt
Definition: distributed_grid.h:414
Grid::VolumeAttachmentAccessor< AElemInfoVol > m_aaElemInfoVOL
Definition: distributed_grid.h:470
Grid::EdgeAttachmentAccessor< AElemInfoEdge > m_aaElemInfoEDGE
Definition: distributed_grid.h:468
ElementInfo< Volume > ElemInfoVol
Definition: distributed_grid.h:412
std::vector< Face * > m_newConstrainedVerticalFaces
Definition: distributed_grid.h:479
bool is_ghost(TElem *elem) const
returns true if the element is a ghost
Definition: distributed_grid_impl.hpp:67
void end_ordered_element_insertion()
call this method when you're done with element creation.
Definition: distributed_grid.cpp:505
byte get_status(Face *face) const
returns the status of the given object.
Definition: distributed_grid.h:127
Attachment< ElemInfoFace > AElemInfoFace
Definition: distributed_grid.h:416
GridLayoutMap & grid_layout_map()
Definition: distributed_grid.h:103
SmartPtr< DistroAdjuster > distro_adjuster()
get the distribution adjuster
Definition: distributed_grid.h:205
bool contains_status(TGeomObj *o, byte status) const
returns true if the status of the given object contains the given status.
Definition: distributed_grid.h:135
const GridLayoutMap & grid_layout_map() const
Definition: distributed_grid.h:104
bool is_in_vertical_interface(TElem *elem) const
returns true if the element is contained in a vertical interface
Definition: distributed_grid_impl.hpp:59
bool m_bOrderedInsertionMode
Definition: distributed_grid.h:459
ElemInfoFace & elem_info(Face *ele)
Definition: distributed_grid.h:439
AElemInfoVrt m_aElemInfoVrt
Definition: distributed_grid.h:462
void perform_ordered_element_insertion(TScheduledElemMap &elemMap)
Definition: distributed_grid.cpp:474
bool m_bElementDeletionMode
Definition: distributed_grid.h:460
void update_elem_info(TLayoutMap &layoutMap, int nodeType, byte newStatus, bool addStatus=false)
Definition: distributed_grid.cpp:337
MultiGrid * get_assigned_grid()
Definition: distributed_grid.h:97
byte get_status(Edge *edge) const
returns the status of the given object.
Definition: distributed_grid.h:126
void assign(MultiGrid &grid)
Definition: distributed_grid.cpp:92
virtual void edge_to_be_erased(Grid *grid, Edge *e, Edge *replacedBy=NULL)
Notified whenever an element of the given type is erased from the given grid.
Definition: distributed_grid.cpp:1254
AElemInfoEdge m_aElemInfoEdge
Definition: distributed_grid.h:463
void end_element_deletion()
call this method after you're done deleting elements from the associated grid
Definition: distributed_grid.cpp:1175
ScheduledElemMap m_vrtMap
holds all elements that were scheduled by vertices
Definition: distributed_grid.h:472
virtual void volume_to_be_erased(Grid *grid, Volume *vol, Volume *replacedBy=NULL)
Notified whenever an element of the given type is erased from the given grid.
Definition: distributed_grid.cpp:1268
const ElemInfoFace & elem_info(Face *ele) const
Definition: distributed_grid.h:444
Attachment< ElemInfoVol > AElemInfoVol
Definition: distributed_grid.h:417
void element_to_be_erased(TElem *elem)
Definition: distributed_grid.cpp:1227
Base-class for edges.
Definition: grid_base_objects.h:397
Faces are 2-dimensional objects.
Definition: grid_base_objects.h:510
Definition: grid.h:211
Definition: grid.h:221
Manages the elements of a grid and their interconnection.
Definition: grid.h:132
lets you access layouts by type and key
Definition: parallel_grid_layout.h:152
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition: grid_base_objects.h:157
Definition: grid_observer.h:80
Definition: multi_grid.h:72
Holds and automatically deletes a pointer, similar to std::auto_ptr. USE WITH CARE!
Definition: owned_pointer.h:63
Base-class for all vertex-types.
Definition: grid_base_objects.h:231
Volumes are 3-dimensional objects.
Definition: grid_base_objects.h:754
ElementStatusTypes
the states with which elements are marked in ug::DistributedGridManager
Definition: distributed_grid.h:56
@ ES_V_SLAVE
Definition: distributed_grid.h:61
@ ES_IN_INTERFACE
Definition: distributed_grid.h:65
@ ES_H_MASTER
Definition: distributed_grid.h:58
@ ES_NONE
Definition: distributed_grid.h:57
@ ES_SCHEDULED_FOR_INTERFACE
Definition: distributed_grid.h:64
@ ES_V_MASTER
Definition: distributed_grid.h:60
@ ES_H_SLAVE
Definition: distributed_grid.h:59
#define UG_THROW(msg)
Definition: error.h:57
the ug namespace
@ INT_NONE
Definition: parallel_grid_layout.h:103
@ INT_V_MASTER
vertical master node
Definition: parallel_grid_layout.h:106
@ INT_H_MASTER
horizontal master node
Definition: parallel_grid_layout.h:104
@ INT_H_SLAVE
horizontal slave node
Definition: parallel_grid_layout.h:105
@ INT_V_SLAVE
vertical slave node
Definition: parallel_grid_layout.h:107
Definition: parser_node.h:59
Definition: distributed_grid.h:386
EntryList m_entries
Definition: distributed_grid.h:388
byte m_status
Definition: distributed_grid.h:389
Data()
Definition: distributed_grid.h:387
Definition: distributed_grid.h:306
Interface * m_interface
Definition: distributed_grid.h:312
int m_interfaceType
Definition: distributed_grid.h:314
Entry()
Definition: distributed_grid.h:307
Entry(Interface *intfc, InterfaceElemIter intfcElemIter, int intfcType)
Definition: distributed_grid.h:308
InterfaceElemIter m_interfaceElemIter
Definition: distributed_grid.h:313
Used to schedule an element for insertion during ordered-insertion-mode.
Definition: distributed_grid.h:426
ScheduledElement(GridObject *obj, int procID)
Definition: distributed_grid.h:427
int connectedProcID
Definition: distributed_grid.h:431
GridObject * geomObj
Definition: distributed_grid.h:430