GEOSX
MeshLevel.hpp
Go to the documentation of this file.
1 /*
2  * ------------------------------------------------------------------------------------------------------------
3  * SPDX-License-Identifier: LGPL-2.1-only
4  *
5  * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
6  * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
7  * Copyright (c) 2018-2020 TotalEnergies
8  * Copyright (c) 2019- GEOSX Contributors
9  * All rights reserved
10  *
11  * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
12  * ------------------------------------------------------------------------------------------------------------
13  */
14 
19 #ifndef GEOS_MESH_MESHLEVEL_HPP_
20 #define GEOS_MESH_MESHLEVEL_HPP_
21 
22 #include "NodeManager.hpp"
23 #include "ParticleManager.hpp"
25 #include "EdgeManager.hpp"
26 #include "ElementRegionManager.hpp"
27 #include "FaceManager.hpp"
28 
29 namespace geos
30 {
31 class ElementRegionManager;
32 
41 {
42 public:
43 
49  MeshLevel( string const & name,
50  Group * const parent );
51 
52 
59  MeshLevel( string const & name,
60  Group * const parent,
61  MeshLevel & source );
62 
63 
71  MeshLevel( string const & name,
72  Group * const parent,
73  MeshLevel const & source,
74  int const order );
75 
76  virtual ~MeshLevel() override;
77 
81  void generateSets();
82 
83 
99  localIndex_array & nodeAdjacencyList,
100  localIndex_array & edgeAdjacencyList,
101  localIndex_array & faceAdjacencyList,
103  integer const depth );
104 
105 
107 
108 
110 
111  struct viewStructKeys
112  {
113  dataRepository::ViewKey meshLevel = { "meshLevel" };
114 // static constexpr char const * baseDiscretizationString() { return "baseDiscretization"; }
115 
116  } viewKeys;
117 
118  struct groupStructKeys
119  {
120  dataRepository::GroupKey vertexManager = { "vertexManager" };
121  dataRepository::GroupKey cellManager = { "cellManager" };
122 
123  static constexpr char const * nodeManagerString() { return "nodeManager"; }
124  static constexpr char const * edgeManagerString() { return "edgeManager"; }
125  static constexpr char const * faceManagerString() { return "faceManager"; }
126 
127  // This key is defined in problem manager:
128  static constexpr char const * elemManagerString() { return "ElementRegions"; }
129  static constexpr char const * particleManagerString() { return "ParticleRegions"; }
130 
131  static constexpr auto embSurfNodeManagerString = "embeddedSurfacesNodeManager";
132  static constexpr auto embSurfEdgeManagerString = "embeddedSurfacesEdgeManager";
133 
134  dataRepository::GroupKey nodeManager = {nodeManagerString()};
135  dataRepository::GroupKey particleManager = {particleManagerString()};
136  dataRepository::GroupKey edgeManager = {edgeManagerString()};
137  dataRepository::GroupKey faceManager = {faceManagerString()};
138  dataRepository::GroupKey elemManager = {elemManagerString()};
139  dataRepository::GroupKey embSurfNodeManager = {embSurfNodeManagerString};
140  dataRepository::GroupKey embSurfEdgeManager = {embSurfEdgeManagerString};
141  } groupKeys;
142 
144 
149 
154  NodeManager const & getNodeManager() const
155  { return *m_nodeManager; }
156 
161  { return *m_nodeManager; }
162 
168  { return *m_particleManager; }
169 
174  { return *m_particleManager; }
175 
180  EdgeManager const & getEdgeManager() const
181  { return *m_edgeManager; }
182 
187  { return *m_edgeManager; }
188 
193  FaceManager const & getFaceManager() const
194  { return *m_faceManager; }
195 
200  { return *m_faceManager; }
201 
207  { return *m_elementManager; }
208 
213  { return *m_elementManager; }
214 
220  { return *m_embSurfNodeManager; }
221 
226  { return *m_embSurfNodeManager; }
227 
233  { return *m_embSurfEdgeManager; }
234 
239  { return *m_embSurfEdgeManager; }
240 
246  { return m_modificationTimestamp; }
247 
251  void modified()
252  { m_modificationTimestamp++; }
253 
257  bool isShallowCopy() const
258  { return m_isShallowCopy; }
259 
265  bool isShallowCopyOf( MeshLevel const & comparisonLevel ) const;
266 
267 
273  MeshLevel const & getShallowParent() const;
274 
281 
283 
284 private:
285 
287  NodeManager * const m_nodeManager;
289  ParticleManager * const m_particleManager;
291  EdgeManager * const m_edgeManager;
293  FaceManager * const m_faceManager;
295  ElementRegionManager * const m_elementManager;
296 
298  EmbeddedSurfaceNodeManager * const m_embSurfNodeManager;
300  EdgeManager * const m_embSurfEdgeManager;
301 
303  Timestamp m_modificationTimestamp;
304 
305  bool const m_isShallowCopy = false;
306 
307  MeshLevel * const m_shallowParent;
308 
309 };
310 
311 } /* namespace geos */
312 
313 #endif /* GEOS_MESH_MESHLEVEL_HPP_ */
This class provides an interface to ObjectManagerBase in order to manage edge data.
Definition: EdgeManager.hpp:42
The ElementRegionManager class provides an interface to ObjectManagerBase in order to manage ElementR...
array1d< array1d< VIEWTYPE > > ElementViewAccessor
The ElementViewAccessor at the ElementRegionManager level is an array of array of VIEWTYPE.
The EmbeddedSurfaceNodeManager class provides an interface to ObjectManagerBase in order to manage no...
The FaceManager class provides an interface to ObjectManagerBase in order to manage face data.
Definition: FaceManager.hpp:43
Class facilitating the representation of a multi-level discretization of a MeshBody.
Definition: MeshLevel.hpp:41
EdgeManager const & getEmbSurfEdgeManager() const
Get the edge Manager related to the embedded surfaces grid.
Definition: MeshLevel.hpp:232
virtual void initializePostInitialConditionsPostSubGroups() override
Called by InitializePostInitialConditions() after to initializing sub-Groups.
EdgeManager & getEdgeManager()
Get the edge manager.
Definition: MeshLevel.hpp:186
EmbeddedSurfaceNodeManager & getEmbSurfNodeManager()
Get the node Manager of the embedded surfaces grid.
Definition: MeshLevel.hpp:225
NodeManager const & getNodeManager() const
Get the node manager.
Definition: MeshLevel.hpp:154
NodeManager & getNodeManager()
Get the node manager.
Definition: MeshLevel.hpp:160
FaceManager const & getFaceManager() const
Get the face manager.
Definition: MeshLevel.hpp:193
ParticleManager const & getParticleManager() const
Get the particle manager.
Definition: MeshLevel.hpp:167
bool isShallowCopyOf(MeshLevel const &comparisonLevel) const
Determines if this->MeshLevel is a shallow copy of the input.
ElementRegionManager const & getElemManager() const
Get the element region manager.
Definition: MeshLevel.hpp:206
EmbeddedSurfaceNodeManager const & getEmbSurfNodeManager() const
Get the node Manager of the embedded surfaces grid.
Definition: MeshLevel.hpp:219
EdgeManager & getEmbSurfEdgeManager()
Get the edge Manager related to the embedded surfaces grid.
Definition: MeshLevel.hpp:238
FaceManager & getFaceManager()
Get the face manager.
Definition: MeshLevel.hpp:199
void generateAdjacencyLists(arrayView1d< localIndex const > const &seedNodeList, localIndex_array &nodeAdjacencyList, localIndex_array &edgeAdjacencyList, localIndex_array &faceAdjacencyList, ElementRegionManager::ElementViewAccessor< ReferenceWrapper< localIndex_array > > &elementAdjacencyList, integer const depth)
Collects the nodes, edges, faces, and elements that are adjacent to a given list of nodes.
void modified()
Increment the modification timestamp if the mesh has been modified.
Definition: MeshLevel.hpp:251
ParticleManager & getParticleManager()
Get the particle manager.
Definition: MeshLevel.hpp:173
MeshLevel & getShallowParent()
If this is a shallow clone of another MeshLevel, then return the source MeshLevel.
MeshLevel(string const &name, Group *const parent, MeshLevel const &source, int const order)
Constructor for the MeshLevel object.
Timestamp getModificationTimestamp() const
Getter for the modification timestamp.
Definition: MeshLevel.hpp:245
ElementRegionManager & getElemManager()
Get the element region manager.
Definition: MeshLevel.hpp:212
EdgeManager const & getEdgeManager() const
Get the edge manager.
Definition: MeshLevel.hpp:180
MeshLevel(string const &name, Group *const parent)
Constructor for the MeshLevel object.
MeshLevel(string const &name, Group *const parent, MeshLevel &source)
Constructor to create a shallow MeshLevel.
MeshLevel const & getShallowParent() const
If this is a shallow clone of another MeshLevel, then return the source MeshLevel.
bool isShallowCopy() const
Definition: MeshLevel.hpp:257
void generateSets()
Generate the sets for the objects within a MeshLevel.
The NodeManager class provides an interface to ObjectManagerBase in order to manage node data.
Definition: NodeManager.hpp:45
The ParticleManager class provides an interface to ObjectManagerBase in order to manage ParticleRegio...
Group::wrapperMap::KeyIndex ViewKey
Type alias for KeyIndexT type used for wrapper lookups.
Definition: Group.hpp:1625
Group::subGroupMap::KeyIndex GroupKey
Type alias for KeyIndexT type used for sub-group lookups.
Definition: Group.hpp:1620
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Definition: DataTypes.hpp:220
array1d< localIndex > localIndex_array
A 1-dimensional array of geos::localIndex types.
Definition: DataTypes.hpp:438
unsigned long long int Timestamp
Timestamp type (used to perform actions such a sparsity pattern computation after mesh modifications)
Definition: DataTypes.hpp:167
std::int32_t integer
Signed integer type.
Definition: DataTypes.hpp:122