20 #ifndef GEOS_PHYSICSSOLVERS_SURFACEGENERATION_PARALLELTOPOLOGYCHANGE_HPP_
21 #define GEOS_PHYSICSSOLVERS_SURFACEGENERATION_PARALLELTOPOLOGYCHANGE_HPP_
26 #define PARALLEL_TOPOLOGY_CHANGE_METHOD 1
31 class NeighborCommunicator;
35 std::set< localIndex > newNodes;
36 std::set< localIndex > newEdges;
37 std::set< localIndex > newFaces;
38 std::set< localIndex > modifiedNodes;
39 std::set< localIndex > modifiedEdges;
40 std::set< localIndex > modifiedFaces;
44 void clearNewFromModified()
48 modifiedNodes.erase( a );
53 modifiedEdges.erase( a );
58 modifiedFaces.erase( a );
64 newNodes.insert( modifiedObjects.newNodes.begin(),
65 modifiedObjects.newNodes.end() );
66 modifiedNodes.insert( modifiedObjects.modifiedNodes.begin(),
67 modifiedObjects.modifiedNodes.end() );
69 newEdges.insert( modifiedObjects.newEdges.begin(),
70 modifiedObjects.newEdges.end() );
71 modifiedEdges.insert( modifiedObjects.modifiedEdges.begin(),
72 modifiedObjects.modifiedEdges.end() );
74 newFaces.insert( modifiedObjects.newFaces.begin(),
75 modifiedObjects.newFaces.end() );
76 modifiedFaces.insert( modifiedObjects.modifiedFaces.begin(),
77 modifiedObjects.modifiedFaces.end() );
79 for(
auto & iter : modifiedObjects.newElements )
81 std::pair< localIndex, localIndex >
const & key = iter.first;
82 std::set< localIndex >
const & values = iter.second;
83 newElements[key].insert( values.begin(), values.end() );
86 for(
auto & iter : modifiedObjects.modifiedElements )
88 std::pair< localIndex, localIndex >
const & key = iter.first;
89 std::set< localIndex >
const & values = iter.second;
90 modifiedElements[key].insert( values.begin(), values.end() );
96 namespace parallelTopologyChange
99 void synchronizeTopologyChange(
MeshLevel *
const mesh,
114 m_elements.resize( elemManager.
numRegions() );
115 m_elementsView.resize( elemManager.
numRegions() );
116 m_elementsData.resize( elemManager.
numRegions() );
127 m_elementsData[er][esr].resize( 0 );
128 m_elements[er][esr].set( m_elementsData[er][esr] );
129 m_elementsView[er][esr] = m_elementsData[er][esr];
142 buffer_type::size_type m_size;
151 m_bufferPtr = receiveBuffer.data();
152 TopologyChangeStepData::init( elemManager );
The ElementRegionBase is the base class to manage the data stored at the element level.
localIndex numSubRegions() const
Get the number of subregions in the region.
The ElementRegionManager class provides an interface to ObjectManagerBase in order to manage ElementR...
array1d< array1d< ReferenceWrapper< VIEWTYPE > > > ElementReferenceAccessor
The ElementViewAccessor at the ElementRegionManager level is a 2D array of ReferenceWrapper around VI...
localIndex numRegions() const
Get number of the regions.
array1d< array1d< VIEWTYPE > > ElementViewAccessor
The ElementViewAccessor at the ElementRegionManager level is an array of array of VIEWTYPE.
T const & getRegion(KEY_TYPE const &key) const
Get a element region.
Class facilitating the representation of a multi-level discretization of a MeshBody.
Base template for ordered and unordered maps.
array1d< localIndex > localIndex_array
A 1-dimensional array of geos::localIndex types.
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
stdVector< buffer_unit_type > buffer_type
Type of storage for communication buffers.
std::vector< T, Allocator > stdVector
signed char buffer_unit_type
Type stored in communication buffers.
Array< T, 1 > array1d
Alias for 1D array.