21 #ifndef GEOS_DATAREPOSITORY_GROUP_HPP_ 
   22 #define GEOS_DATAREPOSITORY_GROUP_HPP_ 
   36 #ifndef NOCHARTOSTRING_KEYLOOKUP 
   38 #define NOCHARTOSTRING_KEYLOOKUP 0 
   50 namespace dataRepository
 
   88   explicit Group( 
string const & name,
 
   89                   Group * 
const parent );
 
   97   explicit Group( 
string const & name,
 
   98                   conduit::Node & rootNode );
 
  199   template< 
typename T = Group >
 
  202     newObject->m_parent = 
this;
 
  203     return dynamicCast< T & >( *m_subGroups.
insert( name, newObject.release(), 
true ) );
 
  216   template< 
typename T = Group >
 
  218   { 
return dynamicCast< T & >( *m_subGroups.
insert( name, newObject, 
false ) ); }
 
  230   template< 
typename T = Group >
 
  232   { 
return registerGroup< T >( name, std::make_unique< T >( name, 
this ) ); }
 
  244   template< 
typename T = Group >
 
  247     T & rval = registerGroup< T >( keyIndex.
key(), std::make_unique< T >( keyIndex.
key(), 
this ) );
 
  298   template< 
typename T = Group, 
typename KEY = 
void >
 
  300   { 
return dynamicCast< T * >( m_subGroups[ key ] ); }
 
  305   template< 
typename T = Group, 
typename KEY = 
void >
 
  307   { 
return dynamicCast< T const * >( m_subGroups[ key ] ); }
 
  317   template< 
typename T = Group, 
typename KEY = 
void >
 
  320     Group * 
const child = m_subGroups[ key ];
 
  322                    "Group " << 
getDataContext() << 
" has no child named " << key << std::endl
 
  325     T * 
const castedChild = dynamicCast< T * >( child );
 
  327                    GEOS_FMT( 
"{} was expected to be a '{}'.",
 
  336   template< 
typename T = Group, 
typename KEY = 
void >
 
  339     Group const * 
const child = m_subGroups[ key ];
 
  341                    "Group " << 
getDataContext() << 
" has no child named " << key << std::endl
 
  344     T 
const * 
const castedChild = dynamicCast< T const * >( child );
 
  346                    GEOS_FMT( 
"{} was expected to be a '{}'.",
 
  361   template< 
typename T = Group >
 
  363   { 
return dynamicCast< T & >( 
const_cast< Group & 
>( getBaseGroupByPath( path ) ) ); }
 
  368   template< 
typename T = Group >
 
  370   { 
return dynamicCast< T const & >( getBaseGroupByPath( path ) ); }
 
  379   { 
return m_subGroups; }
 
  386   { 
return m_subGroups; }
 
  404   template< 
typename T = Group >
 
  406   { 
return dynamicCast< T const * >( m_subGroups[ name ] ) != 
nullptr; }
 
  413   template< 
typename T >
 
  416     bool hasSubGroup = 
false;
 
  419     forSubGroups< T >( [&]( T 
const & ){ hasSubGroup = 
true; } );
 
  437   template< 
typename CASTTYPE, 
typename CONTAINERTYPE, 
typename LAMBDA >
 
  440     using T = std::conditional_t< std::is_const< CONTAINERTYPE >::value, CASTTYPE 
const, CASTTYPE >;
 
  441     T * 
const castedContainer = 
dynamic_cast< T * 
>( &container );
 
  442     if( castedContainer != 
nullptr )
 
  444       lambda( *castedContainer );
 
  463   template< 
typename T0, 
typename T1, 
typename ... CASTTYPES, 
typename CONTAINERTYPE, 
typename LAMBDA >
 
  466     using T = std::conditional_t< std::is_const< CONTAINERTYPE >::value, T0 
const, T0 >;
 
  467     T * 
const castedContainer = 
dynamic_cast< T * 
>( &container );
 
  469     if( castedContainer != 
nullptr )
 
  471       lambda( *castedContainer );
 
  499   template< 
typename GROUPTYPE = 
Group, 
typename ... GROUPTYPES, 
typename LAMBDA >
 
  502     for( 
auto & subGroupIter : m_subGroups )
 
  506         lambda( castedSubGroup );
 
  514   template< 
typename GROUPTYPE = 
Group, 
typename ... GROUPTYPES, 
typename LAMBDA >
 
  517     for( 
auto const & subGroupIter : m_subGroups )
 
  519       applyLambdaToContainer< GROUPTYPE, GROUPTYPES... >( *subGroupIter.second, [&]( 
auto const & castedSubGroup )
 
  521         lambda( castedSubGroup );
 
  534   template< 
typename GROUPTYPE = 
Group, 
typename ... GROUPTYPES, 
typename LAMBDA >
 
  538     for( 
auto & subGroupIter : m_subGroups )
 
  541                                                           [&]( 
auto & castedSubGroup )
 
  543         lambda( counter, castedSubGroup );
 
  552   template< 
typename GROUPTYPE = 
Group, 
typename ... GROUPTYPES, 
typename LAMBDA >
 
  556     for( 
auto const & subGroupIter : m_subGroups )
 
  559                                                           [&]( 
auto const & castedSubGroup )
 
  561         lambda( counter, castedSubGroup );
 
  578   template< 
typename GROUPTYPE = 
Group, 
typename ... GROUPTYPES, 
typename LOOKUP_CONTAINER, 
typename LAMBDA >
 
  579   void forSubGroups( LOOKUP_CONTAINER 
const & subGroupKeys, LAMBDA && lambda )
 
  583     for( 
auto const & subgroup : subGroupKeys )
 
  587         lambda( counter, castedSubGroup );
 
  604   template< 
typename GROUPTYPE = 
Group, 
typename ... GROUPTYPES, 
typename LOOKUP_CONTAINER, 
typename LAMBDA >
 
  605   void forSubGroups( LOOKUP_CONTAINER 
const & subGroupKeys, LAMBDA && lambda )
 const 
  608     for( 
auto const & subgroup : subGroupKeys )
 
  612         lambda( counter, castedSubGroup );
 
  636   template< 
typename LAMBDA >
 
  639     for( 
auto & wrapperIter : m_wrappers )
 
  641       lambda( *wrapperIter.second );
 
  648   template< 
typename LAMBDA >
 
  651     for( 
auto const & wrapperIter : m_wrappers )
 
  653       lambda( *wrapperIter.second );
 
  664   template< 
typename TYPE, 
typename ... TYPES, 
typename LAMBDA >
 
  667     for( 
auto & wrapperIter : m_wrappers )
 
  669       applyLambdaToContainer< Wrapper< TYPE >, 
Wrapper< TYPES >... >( *wrapperIter.second,
 
  670                                                                       std::forward< LAMBDA >( lambda ));
 
  681   template< 
typename TYPE, 
typename ... TYPES, 
typename LAMBDA >
 
  684     for( 
auto const & wrapperIter : m_wrappers )
 
  686       applyLambdaToContainer< Wrapper< TYPE >, 
Wrapper< TYPES >... >( *wrapperIter.second,
 
  687                                                                       std::forward< LAMBDA >( lambda ));
 
  772                                   std::set< string > & siblingNames );
 
  817   template< 
typename T, 
typename TBASE=T >
 
  828   template< 
typename T, 
typename TBASE=T >
 
  839   template< 
typename T >
 
  850   template< 
typename T >
 
  876   template< 
typename LOG_LEVEL_INFO >
 
  877   std::enable_if_t< geos::is_log_level_info< LOG_LEVEL_INFO >, 
void >
 
  892     string indent( level*2, 
' ' );
 
  894     for( 
auto const & subGroupIter : m_subGroups )
 
  896       std::cout << indent << subGroupIter.second->getName() << std::endl;
 
  897       subGroupIter.second->generateDataStructureSkeleton( level + 1 );
 
  967                                parallelDeviceEvents & events ) 
const;
 
  985                                parallelDeviceEvents & events ) 
const;
 
 1001                        parallelDeviceEvents & events ) 
const;
 
 1025                            parallelDeviceEvents & events ) 
const;
 
 1050                            parallelDeviceEvents & events ) 
const;
 
 1073                    parallelDeviceEvents & events ) 
const;
 
 1098                              parallelDeviceEvents & events,
 
 1099                              MPI_Op op=MPI_REPLACE );
 
 1122   template< 
typename KEY >
 
 1125     WrapperBase const * 
const wrapper = m_wrappers[ key ];
 
 1127                    "Group " << 
getDataContext() << 
" has no wrapper named " << key << std::endl
 
 1129                    std::domain_error );
 
 1137   template< 
typename KEY >
 
 1142                    "Group " << 
getDataContext() << 
" has no wrapper named " << key << std::endl
 
 1144                    std::domain_error );
 
 1155   { 
return m_wrappers.
getIndex( name ); }
 
 1162   { 
return m_wrappers; }
 
 1168   { 
return m_wrappers; }
 
 1175   { 
return m_wrappers.
size(); }
 
 1203   template< 
typename LOOKUP_TYPE >
 
 1205   { 
return m_wrappers[ lookup ] != 
nullptr; }
 
 1215   template< 
typename T, 
typename LOOKUP_TYPE >
 
 1219     return dynamicCast< Wrapper< T > 
const & >( wrapper );
 
 1225   template< 
typename T, 
typename LOOKUP_TYPE >
 
 1229     return dynamicCast< Wrapper< T > & >( wrapper );
 
 1240   template< 
typename T, 
typename LOOKUP_TYPE >
 
 1242   { 
return dynamicCast< Wrapper< T > 
const * >( m_wrappers[ index ] ); }
 
 1247   template< 
typename T, 
typename LOOKUP_TYPE >
 
 1249   { 
return dynamicCast< Wrapper< T > * >( m_wrappers[ index ] ); }
 
 1273   template< 
typename T, 
typename LOOKUP_TYPE >
 
 1276   { 
return getWrapper< T >( lookup ).reference(); }
 
 1281   template< 
typename T, 
typename LOOKUP_TYPE >
 
 1283   { 
return getWrapper< T >( lookup ).reference(); }
 
 1311   { 
return m_capacity; }
 
 1346   { 
return *m_dataContext; }
 
 1355   template< 
typename KEY >
 
 1357   { 
return getWrapperBase< KEY >( key ).getDataContext(); }
 
 1383   { 
return m_parent != 
nullptr; }
 
 1404   { 
return m_sizedFromParent; }
 
 1413     m_sizedFromParent = val;
 
 1474   { 
return m_conduitNode; }
 
 1478   { 
return m_conduitNode; }
 
 1519 #if defined(GEOS_USE_PYGEOSX) 
 1520   virtual PyTypeObject * getPythonType() 
const;
 
 1584   Group const & getBaseGroupByPath( 
string const & path ) 
const;
 
 1600   template< 
bool DO_PACKING >
 
 1606                        parallelDeviceEvents & events ) 
const;
 
 1610   Group * m_parent = 
nullptr;
 
 1645   conduit::Node & m_conduitNode;
 
 1648   std::unique_ptr< LogLevelsRegistry > m_logLevelsRegistry;
 
 1652   std::unique_ptr< DataContext > m_dataContext;
 
 1668 template< 
typename T, 
typename TBASE >
 
 1670                                            ViewKey::index_type * 
const rkey )
 
 1672   std::unique_ptr< TBASE > newObj = std::make_unique< T >();
 
 1677   if( rkey != 
nullptr )
 
 1679     *rkey = m_wrappers.
getIndex( name );
 
 1691 template< 
typename T, 
typename TBASE >
 
 1694   ViewKey::index_type index;
 
 1695   Wrapper< TBASE > & rval = registerWrapper< T, TBASE >( viewKey.key(), &index );
 
 1696   viewKey.setIndex( index );
 
 1702 template< 
typename T >
 
 1704                                        std::unique_ptr< T > newObject )
 
 1706   static_assert( !std::is_base_of< WrapperBase, T >::value, 
"This function should not be used for `WrapperBase`. Use the dedicated `registerWrapper` instead." );
 
 1708                      new Wrapper< T >( name, *
this, std::move( newObject ) ),
 
 1719 template< 
typename T >
 
 1723   static_assert( !std::is_base_of< WrapperBase, T >::value, 
"This function should not be used for `WrapperBase`. Use the dedicated `registerWrapper` instead." );
 
 1736 template< 
typename LOG_LEVEL_INFO >
 
 1737 std::enable_if_t< geos::is_log_level_info< LOG_LEVEL_INFO >, 
void >
 
 1740   GEOS_ERROR_IF( m_logLevelsRegistry == 
nullptr, 
"You cannot call addLogLevel after schema generation" );
 
 1743   if( wrapper == 
nullptr )
 
 1749   m_logLevelsRegistry->addEntry( LOG_LEVEL_INFO::getMinLogLevel(),
 
 1750                                  LOG_LEVEL_INFO::getDescription() );
 
 1751   wrapper->
setDescription( m_logLevelsRegistry->buildLogLevelDescription());
 
#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.
 
#define GEOS_THROW_IF(EXP, msg, TYPE)
Conditionally throw an exception.
 
INDEX_TYPE index_type
the type used for the index
 
void setIndex(INDEX_TYPE const &index) const
Set the index.
 
KEY_TYPE const  & key() const
Access for the key.
 
INDEX_TYPE size() const
function to return the number of entries stored
 
KeyIndexT< keyType const, indexType > KeyIndex
alias for the KeyIndex itself
 
T * insert(KEY_TYPE const &keyName, T_PTR source, bool takeOwnership, bool overwrite=false)
insert new entry into MappedVector
 
INDEX_TYPE getIndex(KEY_TYPE const &key) const
 
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...
 
T & getGroupByPath(string const &path)
Retrieve a group from the hierarchy using a path.
 
void forSubGroups(LOOKUP_CONTAINER const &subGroupKeys, LAMBDA &&lambda) const
Apply the given functor to subgroups that can be casted to one of specified types.
 
T const  & getGroupByPath(string const &path) const
Retrieve a group from the hierarchy using a path.
 
virtual void initializePreSubGroups()
Called by Initialize() prior to initializing sub-Groups.
 
virtual void initialize_postMeshGeneration()
initialization post generation of the mesh.
 
localIndex capacity() const
Get the "capacity" of the group, which determines the capacity of resizable wrappers.
 
virtual void postInputInitialization()
 
virtual localIndex packSize(string_array const &wrapperNames, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
Get the size required to pack a list of indices within a list of wrappers.
 
void setInputFlags(InputFlags flags)
Set input flags for schema generation.
 
void processInputFileRecursive(xmlWrapper::xmlDocument &xmlDocument, xmlWrapper::xmlNode &targetNode, xmlWrapper::xmlNodePos const &targetNodePos)
Same as processInputFileRecursive(xmlWrapper::xmlDocument &, xmlWrapper::xmlNode &) but allow to reus...
 
int sizedFromParent() const
Check whether this Group is resized when its parent is resized.
 
localIndex pack(buffer_unit_type *&buffer, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
Pack a list of indices for all registered wrappers.
 
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.
 
T * getGroupPointer(KEY const &key)
Return a pointer to a sub-group of the current Group.
 
localIndex packSize(arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
Get the size required to pack a list of indices for all registered wrappers.
 
virtual localIndex unpack(buffer_unit_type const *&buffer, arrayView1d< localIndex > &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events, MPI_Op op=MPI_REPLACE)
Unpack a buffer.
 
InputFlags getInputFlags() const
Get input flags for schema generation.
 
DataContext const  & getDataContext() const
 
bool hasWrapper(LOOKUP_TYPE const &lookup) const
Check if a wrapper exists.
 
T & registerGroup(string const &name, T *newObject)
Register a new Group as a sub-group of current Group.
 
void postInputInitializationRecursive()
Recursively call postInputInitialization() to apply post processing after reading input values.
 
Group(Group &&source)=default
Move constructor.
 
wrapperMap & wrappers()
Get access to the internal wrapper storage.
 
localIndex getIndexInParent() const
Get the group's index within its parent group.
 
void processInputFileRecursive(xmlWrapper::xmlDocument &xmlDocument, xmlWrapper::xmlNode &targetNode)
Recursively read values using ProcessInputFile() from the input file and put them into the wrapped va...
 
T & registerGroup(string const &name, std::unique_ptr< T > newObject)
Register a new Group as a sub-group of current Group.
 
string dumpWrappersNames() const
 
Group(string const &name, Group *const parent)
Constructor.
 
void forWrappers(LAMBDA &&lambda)
Apply the given functor to wrappers that can be cast to one of specified types.
 
virtual void expandObjectCatalogs()
Expand any catalogs in the data structure.
 
MappedVector< WrapperBase, WrapperBase *, keyType, indexType > wrapperMap
The template specialization of MappedVector to use for the collection wrappers objects.
 
virtual void initializePostSubGroups()
Called by Initialize() after to initializing sub-Groups.
 
virtual void reinit()
Performs re-initialization of certain variable depending on the solver being used.
 
void setRestartFlags(RestartFlags flags)
Set flags that control restart output of this group.
 
Wrapper< T > & getWrapper(LOOKUP_TYPE const &index)
Retrieve a Wrapper stored in this group.
 
WrapperBase & registerWrapper(std::unique_ptr< WrapperBase > wrapper)
Register and take ownership of an existing Wrapper.
 
void forSubGroupsIndex(LAMBDA &&lambda) const
Apply the given functor to subgroups that can be casted to one of specified types.
 
string const  & getName() const
Get group name.
 
string dumpSubGroupsNames() const
 
GEOS_DECLTYPE_AUTO_RETURN getReference(LOOKUP_TYPE const &lookup) const
Look up a wrapper and get reference to wrapped object.
 
WrapperBase & getWrapperBase(KEY const &key)
Return a reference to a WrapperBase stored in this group.
 
WrapperBase const  & getWrapperBase(KEY const &key) const
Return a reference to a WrapperBase stored in this group.
 
virtual void registerDataOnMeshRecursive(Group &meshBodies)
Calls RegisterDataOnMesh() recursively.
 
conduit::Node & getConduitNode()
Return the Conduit node object associated with this group.
 
void forSubGroups(LAMBDA &&lambda) const
Apply the given functor to subgroups that can be casted to one of specified types.
 
virtual void initializePostInitialConditionsPostSubGroups()
Called by InitializePostInitialConditions() after to initializing sub-Groups.
 
void initialize()
Run initialization functions on this and all subgroups.
 
Group(Group const &)=delete
Deleted copy constructor.
 
T & registerGroup(subGroupMap::KeyIndex const &keyIndex)
Register a new Group as a sub-group of current Group.
 
static CatalogInterface::CatalogType & getCatalog()
Get the singleton catalog for this Group.
 
void forSubGroupsIndex(LAMBDA &&lambda)
Apply the given functor to subgroups that can be casted to one of specified types.
 
virtual void initializationOrder(string_array &order)
Sets the initialization order for sub-Groups.
 
RestartFlags getRestartFlags() const
Get flags that control restart output of this group.
 
void deregisterWrapper(string const &name)
Removes a Wrapper from this group.
 
std::enable_if_t< geos::is_log_level_info< LOG_LEVEL_INFO >, void > addLogLevel()
Append a levelCondition and a log description to the description of the wrapped object given a log in...
 
void initializePostInitialConditions()
Initialization routine to be called after calling ApplyInitialConditions().
 
localIndex numSubGroups() const
return the number of sub groups in this Group
 
indexType numWrappers() const
Return the number of wrappers.
 
virtual void reserve(indexType const newsize)
Set the new capacity and reserve it in all wrappers that resize with parent.
 
string dumpInputOptions() const
 
T & getGroup(KEY const &key)
Return a reference to a sub-group of the current Group.
 
void loadFromConduit()
Read the group and its wrappers from Conduit.
 
MappedVector< Group, Group *, keyType, indexType > subGroupMap
The template specialization of MappedVector to use for the collection of sub-Group objects.
 
Group & getParent()
Access the group's parent.
 
void finishWriting()
Write the group and its wrappers into Conduit.
 
virtual void postRestartInitialization()
Performs initialization required after reading from a restart file.
 
Group(string const &name, conduit::Node &rootNode)
Constructor.
 
bool hasGroup(string const &name) const
Check whether a sub-group exists.
 
indexType getWrapperIndex(string const &name) const
 
bool hasSubGroupOfType() const
Check whether a sub-group exists by type.
 
static bool applyLambdaToContainer(CONTAINERTYPE &container, LAMBDA &&lambda)
Apply a given functor to a container if the container can be cast to one of the specified types.
 
void prepareToWrite()
Register the group and its wrappers with Conduit.
 
T const  * getGroupPointer(KEY const &key) const
Return a pointer to a sub-group of the current Group.
 
virtual bool registerCallback(void *func, const std::type_info &funcType)
Register a callback function on the group.
 
void forWrappers(LAMBDA &&lambda) const
Apply the given functor to wrappers.
 
virtual localIndex pack(buffer_unit_type *&buffer, string_array const &wrapperNames, arrayView1d< localIndex const > const &packList, integer const recursive, bool onDevice, parallelDeviceEvents &events) const
Pack a list of indices within a list of wrappers.
 
localIndex getSubGroupIndex(keyType const &key) const
Get the index of a sub-Group within this group.
 
Wrapper< T > const  & getWrapper(LOOKUP_TYPE const &index) const
Retrieve a Wrapper stored in this group.
 
T & getReference(LOOKUP_TYPE const &lookup)
Look up a wrapper and get reference to wrapped object.
 
virtual void registerDataOnMesh(Group &meshBodies)
Register data on mesh entities.
 
localIndex size() const
Get the "size" of the group, which determines the number of elements in resizable wrappers.
 
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.
 
Group()=delete
Deleted default constructor.
 
Wrapper< T > * getWrapperPointer(LOOKUP_TYPE const &index)
Retrieve a Wrapper stored in this group.
 
T const  & getGroup(KEY const &key) const
Return a reference to a sub-group of the current Group.
 
void forSubGroups(LAMBDA &&lambda)
Apply the given functor to subgroups that can be casted to one of specified types.
 
stdVector< string > getWrappersNames() const
 
stdVector< string > getSubGroupsNames() const
 
integer getLogLevel() const
 
virtual Group * createChild(string const &childKey, string const &childName)
Creates a new sub-Group using the ObjectCatalog functionality.
 
void forWrappers(LAMBDA &&lambda) const
Apply the given functor to wrappers that can be cast to one of specified types.
 
string getPath() const
Return the path of this Group in the data repository. Starts with '/' followed by the hierarchy of th...
 
Group & operator=(Group const &)=delete
Deleted copy assignment operator.
 
void setLogLevel(integer const logLevel)
Set verbosity level.
 
Group const  & getParent() const
Access the group's parent.
 
conduit::Node const  & getConduitNode() const
Return the Conduit node object associated with this group.
 
void postRestartInitializationRecursive()
Initialization routine to be called after calling reading a restart file.
 
Group & setSizedFromParent(int val)
Set whether this wrapper is resized when its parent is resized.
 
DataContext const  & getWrapperDataContext(KEY key) const
 
Group & operator=(Group &&)=delete
Deleted move assignment operator.
 
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 ~Group()
Destructor, deletes all Groups and Wrappers owned by this Group.
 
void forWrappers(LAMBDA &&lambda)
Apply the given functor to wrappers.
 
subGroupMap const  & getSubGroups() const
Get the subgroups object.
 
void forSubGroups(LOOKUP_CONTAINER const &subGroupKeys, LAMBDA &&lambda)
Apply the given functor to subgroups that can be casted to one of specified types.
 
void generateDataStructureSkeleton(integer const level)
Build a complete datastructure for schema generation.
 
virtual void setSchemaDeviations(xmlWrapper::xmlNode schemaRoot, xmlWrapper::xmlNode schemaParent, integer documentationType)
Inform the schema generator of any deviations between the xml and GEOS data structures.
 
void printDataHierarchy(integer indent=0) const
Prints the data hierarchy recursively.
 
wrapperMap const  & wrappers() const
Get access to the internal wrapper storage.
 
T & registerGroup(string const &name)
Register a new Group as a sub-group of current Group.
 
virtual void initializePostInitialConditionsPreSubGroups()
Called by InitializePostInitialConditions() prior to initializing sub-Groups.
 
static string processInputName(xmlWrapper::xmlNode const &targetNode, xmlWrapper::xmlNodePos const &targetNodePos, string_view parentNodeName, xmlWrapper::xmlNodePos const &parentNodePos, std::set< string > &siblingNames)
 
Wrapper< T > const  * getWrapperPointer(LOOKUP_TYPE const &index) const
Retrieve a Wrapper stored in this group.
 
subGroupMap & getSubGroups()
Get the subgroups object.
 
virtual void resize(localIndex const newSize)
Resize the group and all contained wrappers that resize with parent.
 
Base class for all wrappers containing common operations.
 
int sizedFromParent() const
Check whether this wrapper is resized when its parent is resized.
 
Wrapper< T > & setInputFlag(InputFlags const input)
Set the InputFlag of the wrapper.
 
std::enable_if_t< !traits::is_array< U > &&DefaultValue< U >::has_default_value, Wrapper< T > & > setApplyDefaultValue(typename DefaultValue< U >::value_type const &defaultVal)
Set and apply for default value.
 
Wrapper< T > & setDescription(string const &description)
Set the description string of the wrapper.
 
virtual void resize(int ndims, localIndex const *const dims) override
Calls T::resize( num_dims, dims )
 
@ OPTIONAL
Optional in input.
 
Group::wrapperMap::KeyIndex ViewKey
Type alias for KeyIndexT type used for wrapper lookups.
 
localIndex indexType
The default index type for entries the hierarchy.
 
string keyType
The default key type for entries in the hierarchy.
 
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
 
stdVector< string > string_array
A 1-dimensional array of geos::string types.
 
std::string string
String type.
 
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
 
signed char buffer_unit_type
Type stored in communication buffers.
 
int integer
Signed integer type.
 
std::string_view string_view
String type.
 
internal::StdVectorWrapper< T, Allocator, USE_STD_CONTAINER_BOUNDS_CHECKING > stdVector
 
Exception class used to report errors from type conversion.
 
Structure to hold scoped key names.
 
static constexpr char const  * logLevelString()