19 #ifndef GEOS_MESH_OBJECTMANAGERBASE_HPP_
20 #define GEOS_MESH_OBJECTMANAGERBASE_HPP_
24 #include "mpiCommunications/NeighborData.hpp"
80 parallelDeviceEvents & events )
const override;
87 parallelDeviceEvents & events )
const override;
93 parallelDeviceEvents & events,
94 MPI_Op op=MPI_REPLACE )
override;
105 template<
bool DO_PACKING >
129 integer const recursive )
const;
140 integer const recursive )
const;
182 bool const overwriteUpMaps,
183 bool const overwriteDownMaps )
211 return packParentChildMapsImpl< false >( buffer, packList );
223 return packParentChildMapsImpl< true >( buffer, packList );
247 template<
bool DO_PACKING >
253 parallelDeviceEvents & events )
const;
263 template<
bool DO_PACKING >
266 integer const recursive )
const;
275 template<
bool DO_PACKING >
289 void moveSets( LvArray::MemorySpace
const targetSpace );
319 const string & setName );
328 const string & setName );
337 const string & setName );
372 nonLocalGhosts.clear();
377 if( owningRank >= 0 )
431 void eraseObject( std::set< localIndex >
const & indicesToErase );
445 template<
typename TYPE_RELATION >
448 bool const clearIfUnmapped );
457 template<
typename TYPE_RELATION >
460 bool const clearIfUnmapped );
472 bool const clearIfUnmapped );
481 static void cleanUpMap( std::set< localIndex >
const & targetIndices,
492 static void cleanUpMap( std::set< localIndex >
const & targetIndices,
503 static void cleanUpMap( std::set< localIndex >
const & targetIndices,
513 static void cleanUpMap( std::set< localIndex >
const & targetIndices,
523 static void cleanUpMap( std::set< localIndex >
const & targetIndices,
547 while( parentIndices[rval] != -1 )
549 rval = parentIndices[rval];
563 template<
typename FIELD_TRAIT >
572 typename FIELD_TRAIT::dataType defaultValue( FIELD_TRAIT::defaultValue() );
574 return this->registerWrapper< typename FIELD_TRAIT::type >( FIELD_TRAIT::key() ).
575 setApplyDefaultValue( defaultValue ).
576 setPlotLevel( FIELD_TRAIT::plotLevel ).
578 setDescription( FIELD_TRAIT::description ).
579 setRegisteringObjects( nameOfRegisteringObject );
589 template<
typename FIELD_TRAIT >
591 typename FIELD_TRAIT::type * newObject )
594 setApplyDefaultValue( fieldTrait.defaultValue() ).
595 setPlotLevel( FIELD_TRAIT::plotLevel ).
597 setDescription( FIELD_TRAIT::description );
612 template<
typename FIELD_TRAIT0,
typename FIELD_TRAIT1,
typename ... FIELD_TRAITS >
615 registerField< FIELD_TRAIT0 >( nameOfRegisteringObject );
616 registerField< FIELD_TRAIT1, FIELD_TRAITS... >( nameOfRegisteringObject );
625 template<
typename FIELD_TRAIT >
628 return this->getWrapper< typename FIELD_TRAIT::type >( FIELD_TRAIT::key() ).reference();
637 template<
typename FIELD_TRAIT >
640 return this->getWrapper< typename FIELD_TRAIT::type >( FIELD_TRAIT::key() ).reference();
649 template<
typename FIELD_TRAIT >
652 return this->
hasWrapper( FIELD_TRAIT::key() );
709 static constexpr
char const *
setsString() {
return "sets"; }
879 string const & rankString = std::to_string( rank );
971 template<
typename TYPE_RELATION >
978 bool allValuesMapped =
true;
980 for(
auto & unmappedIndex: unmappedIndices )
984 for(
localIndex a = 0; a < globalIndices.size(); ++a )
990 relation[li][a] = globalToLocal.at( globalIndices[a] );
994 allValuesMapped =
false;
1000 GEOS_ERROR_IF( !allValuesMapped,
"some values of unmappedIndices were not used" );
1001 unmappedIndices.clear();
1005 template<
typename TYPE_RELATION >
1008 bool const clearIfUnmapped )
1014 iter != unmappedIndices.end();
1018 if( clearIfUnmapped )
1020 relation[li].clear();
1025 for(
auto const newGlobalIndex : globalIndices )
1030 auto iterG2L = globalToLocal.find( newGlobalIndex );
1031 if( iterG2L != globalToLocal.end() )
1033 relation[li].insert( iterG2L->second );
1038 unmappedIndices.clear();
1045 bool const clearIfUnmapped )
1050 iter != unmappedIndices.end();
1054 if( clearIfUnmapped )
1056 relation.clearSet( li );
1061 for(
globalIndex const newGlobalIndex : globalIndices )
1066 auto iterG2L = globalToLocal.find( newGlobalIndex );
1067 if( iterG2L != globalToLocal.end() )
1069 relation.insertIntoSet( li, iterG2L->second );
1074 unmappedIndices.clear();
#define GEOS_DECLTYPE_AUTO_RETURN
Doxygen can't parse a decltype( auto ) return type, using this gets around that.
#define GEOS_UNUSED_VAR(...)
Mark an unused variable and silence compiler warnings.
#define GEOS_ERROR_IF(EXP, msg)
Conditionally raise a hard error and terminate the program.
geos::ObjectManagerBase ObjectDataStructureBaseT
Alias to ObjectManagerBase.
#define GEOS_MARK_FUNCTION
Mark function with both Caliper and NVTX if enabled.
The ObjectManagerBase is the base object of all object managers in the mesh data hierachy.
array1d< integer > const & ghostRank()
Get the ghost information of each object.
array1d< integer > m_domainBoundaryIndicator
Domain boundary indicator: 1 means the "index" is on the boundary.
SortedArrayView< localIndex const > getSet(string const &setName) const
Get a set by name, const version.
array1d< integer > & getDomainBoundaryIndicator()
Get the domain boundary indicator.
arrayView1d< integer const > ghostRank() const
Get the ghost information of each object, const version.
NeighborData const & getNeighborData(int const rank) const
Get neighbor data for given rank, const version.
localIndex packParentChildMapsSize(arrayView1d< localIndex const > const &packList) const
Computes the pack size of the parent/child relations in packList.
array1d< integer > m_isExternal
Array that holds if an object is external.
globalIndex m_localMaxGlobalIndex
The maximum global index of any object of all objects on this rank.
NeighborData & getNeighborData(int const rank)
Get neighbor data for given rank.
virtual viewKeyStruct & viewKeys()
Get the view keys for Group access.
virtual localIndex packUpDownMaps(buffer_unit_type *&buffer, arrayView1d< localIndex const > const &packList) const
Packs the specific elements in the @ packList.
static void cleanUpMap(std::set< localIndex > const &targetIndices, ArrayOfSetsView< localIndex > const &upmap, ArrayOfArraysView< localIndex const > const &downmap)
Removes from the list of sets of upmap all the elements for which the "mirror target array" of downma...
virtual localIndex packGlobalMapsSize(arrayView1d< localIndex const > const &packList, integer const recursive) const
Computes the pack size of the global maps elements in the @ packList.
globalIndex maxGlobalIndex() const
Get the maximum global index of all objects across all rank. See.
Group m_neighborGroup
Group that holds all the NeighborData objects.
virtual ArrayOfSets< globalIndex > extractMapFromObjectForAssignGlobalIndexNumbers(ObjectManagerBase const &nodeManager)
Extract map from object and assign global indices.
std::set< string > m_packingExclusionList
Names of the wrappers that should not be packed.
static CatalogInterface::CatalogType & getCatalog()
Acessing the unique instance of this catalog.
unordered_map< int, NeighborData > m_neighborData
A map from rank to the associated NeighborData object.
Group m_sets
Group that holds object sets.
GEOS_DECLTYPE_AUTO_RETURN getField() const
Get a view to the field associated with a trait from this ObjectManagerBase.
virtual localIndex pack(buffer_unit_type *&buffer, string_array const &wrapperNames, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const override
Pack a list of indices within a list of wrappers.
globalIndex m_maxGlobalIndex
The maximum global index of all objects across all rank.
localIndex unpackSets(buffer_unit_type const *&buffer)
Unpack the content of buffer into the sets of the instance.
array1d< integer > m_ghostRank
Array that holds the ghost information about each object.
arrayView1d< globalIndex > localToGlobalMap()
Get local to global map.
unordered_map< globalIndex, localIndex > const & globalToLocalMap() const
Get global to local map.
void constructSetFromSetAndMap(SortedArrayView< localIndex const > const &inputSet, const array1d< localIndex_array > &map, const string &setName)
Builds a new set on this instance given another objects set and the map between them.
Group const & sets() const
Get the group holding the object sets, const version.
virtual localIndex unpack(buffer_unit_type const *&buffer, arrayView1d< localIndex > &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events, MPI_Op op=MPI_REPLACE) override
Unpack a buffer.
virtual void enforceStateFieldConsistencyPostTopologyChange(std::set< localIndex > const &targetIndices)
Updates the child and target indices after a topology change.
void setGhostRankForSenders(int const neighborRank)
Defines neighborRank ownership for ghost objects.
struct geos::ObjectManagerBase::groupKeyStruct m_ObjectManagerBaseGroupKeys
groupKey struct for the ObjectManagerBase class
static localIndex getParentRecursive(arraySlice1d< localIndex const > const &parentIndices, localIndex const lookup)
Get the upmost parent.
dataRepository::Wrapper< typename FIELD_TRAIT::type > & registerField(FIELD_TRAIT const &fieldTrait, typename FIELD_TRAIT::type *newObject)
Helper function to register fields.
ObjectManagerBase(string const &name, dataRepository::Group *const parent)
Constructor.
virtual string getCatalogName() const =0
Get the name of the catalog.
void constructGlobalToLocalMap()
Constructs the global to local map.
localIndex packParentChildMaps(buffer_unit_type *&buffer, arrayView1d< localIndex const > const &packList) const
Packs the parent/child relations in packList.
virtual localIndex packGlobalMaps(buffer_unit_type *&buffer, arrayView1d< localIndex const > const &packList, integer const recursive) const
Packs the global maps elements in the @ packList.
Group & sets()
Get the group holding the object sets.
real64 m_overAllocationFactor
Factor by which to overallocate when adding objects.
void moveSets(LvArray::MemorySpace const targetSpace)
Manually move all sets to a memory space.
SortedArray< localIndex > & createSet(const string &newSetName)
Creates a new set.
integer splitObject(localIndex const indexToSplit, int const rank, localIndex &newIndex)
Split object to deal with topology changes.
localIndex globalToLocalMap(globalIndex const gid) const
Retrieves the local index for given global index.
void removeNeighbor(int const rank)
Remove neighbor for rank.
static void cleanUpMap(std::set< localIndex > const &targetIndices, ArrayOfSetsView< localIndex > const &upmap, arrayView2d< localIndex const > const &downmap)
Removes from the list of sets of upmap all the elements for which the "mirror target array" of downma...
virtual viewKeyStruct const & viewKeys() const
Get the view keys for Group access, const version.
SortedArray< localIndex > & getSet(string const &setName)
Get a set by name.
static void cleanUpMap(std::set< localIndex > const &targetIndices, ArrayOfSetsView< localIndex > const &upmap, arrayView1d< arrayView1d< localIndex const > const > const &downmap)
Removes from the list of sets of upmap all the elements for which the "mirror target array" of downma...
virtual void setMaxGlobalIndex()
Computes the maximum global index allong all the MPI ranks.
virtual localIndex unpackGlobalMaps(buffer_unit_type const *&buffer, localIndex_array &packList, integer const recursive)
Unpacks the global maps from buffer.
localIndex resize(localIndex const newSize, const bool)
Resize the group and all contained wrappers that resize with parent.
localIndex unpackParentChildMaps(buffer_unit_type const *&buffer, localIndex_array &packList)
Unacks the parent/child relations in packList.
static void cleanUpMap(std::set< localIndex > const &targetIndices, array1d< SortedArray< localIndex > > &upmap, arrayView1d< arrayView1d< localIndex const > const > const &downmap)
Removes from the list of arrays of upmap all the elements for which the "mirror target array" of down...
void eraseObject(std::set< localIndex > const &indicesToErase)
Erase object from this object manager.
unordered_map< globalIndex, localIndex > m_globalToLocalMap
Map from object global index to the local index.
virtual groupKeyStruct & groupKeys()
Get the group keys for Group access.
virtual localIndex packSize(string_array const &wrapperNames, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const override
Get the size required to pack a list of indices within a list of wrappers.
virtual localIndex packUpDownMapsSize(arrayView1d< localIndex const > const &packList) const
Computes the pack size of the specific elements in the @ packList.
arrayView1d< globalIndex const > localToGlobalMap() const
Get local to global map, const version.
virtual localIndex unpackUpDownMaps(buffer_unit_type const *&buffer, array1d< localIndex > &packList, bool const overwriteUpMaps, bool const overwriteDownMaps)
Unpacks the specific elements in the @ packList.
array1d< integer > const & isExternal()
Get the locality information of the objects.
localIndex packSets(buffer_unit_type *&buffer, arrayView1d< localIndex const > const &packList) const
Packs the elements of each set that actually are in packList.
virtual groupKeyStruct const & groupKeys() const
Get the group keys for Group access, const version.
void inheritGhostRankFromParent(std::set< localIndex > const &indices)
sets the value of m_ghostRank to the value of the objects parent.
struct geos::ObjectManagerBase::viewKeyStruct m_ObjectManagerBaseViewKeys
viewKey struct for the ObjectManagerBase class
dataRepository::Wrapper< typename FIELD_TRAIT::type > & registerField(string const &nameOfRegisteringObject)
Register field with this ObjectManagerBase using a dataRepository::Wrapper.
void copyObject(localIndex const source, localIndex const destination)
Copy object from source to @ destination.
void excludeWrappersFromPacking(std::set< string > const &wrapperNames)
Registers wrappers that will be excluded from packing.
static void cleanUpMap(std::set< localIndex > const &targetIndices, array1d< SortedArray< localIndex > > &upmap, arrayView2d< localIndex const > const &downmap)
Removes from the list of arrays of upmap all the elements for which the "mirror target array" of down...
static void fixUpDownMaps(TYPE_RELATION &relation, map< localIndex, array1d< globalIndex > > &unmappedIndices, bool const clearIfUnmapped)
Fixing the up/down maps by mapping the unmapped indices.
SortedArrayView< localIndex const > externalSet() const
Get the external set, const version.
arrayView1d< integer const > getDomainBoundaryIndicator() const
Get the domain boundary indicator.
void setReceiveLists()
Clear and redefines the ghosts to receive.
localIndex getNumberOfGhosts() const
Get the number of ghost objects.
SortedArray< localIndex > & externalSet()
Get the external set.
~ObjectManagerBase() override
Destructor.
bool hasField() const
Checks if a field has been registered.
array1d< globalIndex > m_localToGlobalMap
Contains the global index of each object.
localIndex getNumberOfLocalIndices() const
Get the number of locally owned objects.
arrayView1d< integer const > isExternal() const
Get the locality information of the objects.
array1d< globalIndex > constructGlobalListOfBoundaryObjects() const
Computes the (global) index list that are domain boundaries.
void registerField(string const &nameOfRegisteringObject)
Register a collection of fields with this ObjectManagerBase using a dataRepository::Wrapper.
void constructSetFromSetAndMap(SortedArrayView< localIndex const > const &inputSet, ArrayOfArraysView< localIndex const > const &map, const string &setName)
Builds a new set on this instance given another objects set and the map between them.
GEOS_DECLTYPE_AUTO_RETURN getField()
Get the field associated with a trait from this ObjectManagerBase.
globalIndex localMaxGlobalIndex() const
Get the local maximum global index on this rank.
void updateGlobalToLocalMap(localIndex const lid)
Updates (if needed) the global index for local index lid.
void constructSetFromSetAndMap(SortedArrayView< localIndex const > const &inputSet, const array2d< localIndex > &map, const string &setName)
Builds a new set on this instance given another objects set and the map between them.
void addNeighbor(int const rank)
Add a neighbor for rank.
This class provides the base class/interface for the catalog value objects.
std::unordered_map< std::string, std::unique_ptr< CatalogInterface< BASETYPE, ARGS... > > > CatalogType
This is the type that will be used for the catalog. The catalog is actually instantiated in the BASET...
void deregisterGroup(string const &name)
Removes a child group from this group.
Wrapper< TBASE > & registerWrapper(string const &name, wrapperMap::KeyIndex::index_type *const rkey=nullptr)
Create and register a Wrapper around a new object.
bool hasWrapper(LOOKUP_TYPE const &lookup) const
Check if a wrapper exists.
T & registerGroup(string const &name, std::unique_ptr< T > newObject)
Register a new Group as a sub-group of current Group.
void setRestartFlags(RestartFlags flags)
Set flags that control restart output of this group.
string const & getName() const
Get group name.
GEOS_DECLTYPE_AUTO_RETURN getReference(LOOKUP_TYPE const &lookup) const
Look up a wrapper and get reference to wrapped object.
virtual localIndex packSize(string_array const &wrapperNames, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
Get the size required to pack a list of wrappers.
virtual localIndex pack(buffer_unit_type *&buffer, string_array const &wrapperNames, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
Pack a list of wrappers to a buffer.
virtual void resize(localIndex const newSize)
Resize the group and all contained wrappers that resize with parent.
Base template for ordered and unordered maps.
Group::wrapperMap::KeyIndex ViewKey
Type alias for KeyIndexT type used for wrapper lookups.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
array1d< localIndex > localIndex_array
A 1-dimensional array of geos::localIndex types.
Array< T, 2, PERMUTATION > array2d
Alias for 2D array.
array1d< string > string_array
A 1-dimensional array of geos::string types.
LvArray::ArrayOfSetsView< T, INDEX_TYPE const, LvArray::ChaiBuffer > ArrayOfSetsView
View of array of variable-sized sets. See LvArray::ArrayOfSetsView for details.
constexpr static localIndex unmappedLocalIndexValue
A global variable for the value of a object that has not been assigned a geos::globalIndex.
LvArray::ArrayOfArraysView< T, INDEX_TYPE const, CONST_SIZES, LvArray::ChaiBuffer > ArrayOfArraysView
View of array of variable-sized arrays. See LvArray::ArrayOfArraysView for details.
double real64
64-bit floating point type.
ArraySlice< T, 1, USD > arraySlice1d
Alias for 1D array slice.
std::int32_t integer
Signed integer type.
GEOSX_GLOBALINDEX_TYPE globalIndex
Global index type (for indexing objects across MPI partitions).
LvArray::SortedArray< T, localIndex, LvArray::ChaiBuffer > SortedArray
A sorted array of local indices.
LvArray::ArrayOfSets< T, INDEX_TYPE, LvArray::ChaiBuffer > ArrayOfSets
Array of variable-sized sets. See LvArray::ArrayOfSets for details.
LvArray::SortedArrayView< T, localIndex, LvArray::ChaiBuffer > SortedArrayView
A sorted array view of local indices.
signed char buffer_unit_type
Type stored in communication buffers.
ArrayView< T, 2, USD > arrayView2d
Alias for 2D array view.
GEOSX_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
Array< T, 1 > array1d
Alias for 1D array.
struct to serve as a container for group strings and keys
static constexpr char const * neighborDataString()
static constexpr char const * setsString()
dataRepository::GroupKey neighborData
View key to the Group holding the neighbor data.
dataRepository::GroupKey sets
View key to the Group holding the object sets.
struct to serve as a container for variable strings and keys
dataRepository::ViewKey localToGlobalMap
View key to the local->global map.
static constexpr char const * domainBoundaryIndicatorString()
dataRepository::ViewKey ghostRank
View key to ghost ranks.
static constexpr char const * ghostsToReceiveString()
static constexpr char const * ghostRankString()
static constexpr char const * isExternalString()
dataRepository::ViewKey externalSet
View key to external set.
static constexpr char const * localToGlobalMapString()
static constexpr char const * globalToLocalMapString()
dataRepository::ViewKey globalToLocalMap
View key to global->local map.
static constexpr char const * externalSetString()
static constexpr char const * adjacencyListString()