Panzer Version of the Day
Loading...
Searching...
No Matches
panzer_stk::STKConnManager Class Reference

A panzer::ConnManager implementation backed by an STK mesh, mapping local element IDs to global mesh-entity (node/edge/face/cell) IDs according to a given field pattern. More...

#include <Panzer_STKConnManager.hpp>

Inheritance diagram for panzer_stk::STKConnManager:

Classes

struct  CacheKeyCompare
 Matches a cache entry on mesh, field pattern and sideset association list. More...

Public Types

typedef panzer::ConnManager::LocalOrdinal LocalOrdinal
typedef panzer::ConnManager::GlobalOrdinal GlobalOrdinal
typedef Kokkos::DynRankView< GlobalOrdinal, PHX::Device >::host_mirror_type::const_type GlobalOrdinalView
typedef Kokkos::DynRankView< LocalOrdinal, PHX::Device >::host_mirror_type::const_type LocalOrdinalView
Public Types inherited from panzer::ConnManager
using GlobalOrdinal = panzer::GlobalOrdinal
using LocalOrdinal = int

Public Member Functions

 STKConnManager (const Teuchos::RCP< const STK_Interface > &stkMeshDB)
 Construct from the STK mesh to build connectivity from. buildConnectivity() must be called before connectivity queries are valid.
 STKConnManager (const panzer_stk::STKConnManager &cm)
 Copy constructor.
virtual ~STKConnManager ()
virtual void buildConnectivity (const panzer::FieldPattern &fp)
virtual Teuchos::RCP< panzer::ConnManager > noConnectivityClone () const
virtual const panzer::GlobalOrdinal * getConnectivity (LocalOrdinal localElmtId) const
virtual LocalOrdinal getConnectivitySize (LocalOrdinal localElmtId) const
const GlobalOrdinalView getConnectivityView () const
 Returns a read-only view of the flat connectivity array (all elements' global IDs, concatenated).
const LocalOrdinalView getConnectivitySizeView () const
 Returns a read-only view of the per-element connectivity size array.
const LocalOrdinalView getElementLidToConnView () const
 Returns a read-only view of the per-element offset into the flat connectivity array returned by getConnectivityView().
virtual std::string getBlockId (LocalOrdinal localElmtId) const
virtual std::size_t numElementBlocks () const
virtual void getElementBlockIds (std::vector< std::string > &elementBlockIds) const
virtual void getElementBlockTopologies (std::vector< shards::CellTopology > &elementBlockTopologies) const
virtual const std::vector< LocalOrdinal > & getElementBlock (const std::string &blockId) const
virtual const std::vector< LocalOrdinal > & getNeighborElementBlock (const std::string &blockId) const
virtual void getDofCoords (const std::string &blockId, const panzer::Intrepid2FieldPattern &coordProvider, std::vector< std::size_t > &localCellIds, Kokkos::DynRankView< double, PHX::Device > &points) const
Teuchos::RCP< const STK_Interface > getSTKInterface () const
std::size_t getOwnedElementCount () const
void associateElementsInSideset (const std::string sideset_id)
std::vector< std::string > checkAssociateElementsInSidesets (const Teuchos::Comm< int > &comm) const
virtual const std::vector< LocalOrdinal > & getAssociatedNeighbors (const LocalOrdinal &el) const
virtual bool hasAssociatedNeighbors () const
Public Member Functions inherited from panzer::ConnManager
virtual ~ConnManager ()

Static Public Member Functions

static void cacheConnectivity ()
 Enables the caching of connectivity data.
static void clearCachedConnectivityData ()
 If you enable caching with cacheConnectivity(), this must be called prior to exiting the code.
static void clearCachedConnectivityData (const Teuchos::RCP< const STK_Interface > &mesh)
 Removes all cached connectivity data built on the given mesh.
static int getCachedReuseCount ()
 This is purely for unit testing. Returns the number of times that buildConnectivity() was called, but a cached version was found to use instead.

Protected Types

using CachedEntry = std::pair<Teuchos::RCP<const panzer::FieldPattern>,Teuchos::RCP<panzer_stk::STKConnManager>>

Protected Member Functions

void applyPeriodicBCs (const panzer::FieldPattern &fp, GlobalOrdinal nodeOffset, GlobalOrdinal edgeOffset, GlobalOrdinal faceOffset, GlobalOrdinal cellOffset)
void applyInterfaceConditions ()
void buildLocalElementMapping ()
void clearLocalElementMapping ()
void buildOffsetsAndIdCounts (const panzer::FieldPattern &fp, LocalOrdinal &nodeIdCnt, LocalOrdinal &edgeIdCnt, LocalOrdinal &faceIdCnt, LocalOrdinal &cellIdCnt, GlobalOrdinal &nodeOffset, GlobalOrdinal &edgeOffset, GlobalOrdinal &faceOffset, GlobalOrdinal &cellOffset) const
LocalOrdinal addSubcellConnectivities (stk::mesh::Entity element, unsigned subcellRank, LocalOrdinal idCnt, GlobalOrdinal offset, const unsigned maxIds=0)
 Loops over relations of a given rank for a specified element and adds a unique ID to the connectivity vector.
void modifySubcellConnectivities (const panzer::FieldPattern &fp, stk::mesh::Entity element, unsigned subcellRank, unsigned subcellId, GlobalOrdinal newId, GlobalOrdinal offset)

Protected Attributes

Teuchos::RCP< const STK_Interface > stkMeshDB_
Teuchos::RCP< std::vector< stk::mesh::Entity > > elements_
std::map< std::string, Teuchos::RCP< std::vector< LocalOrdinal > > > elementBlocks_
std::map< std::string, Teuchos::RCP< std::vector< LocalOrdinal > > > neighborElementBlocks_
Teuchos::RCP< std::vector< LocalOrdinal > > elmtLidToConnPtr_
Teuchos::RCP< std::vector< LocalOrdinal > > connSizePtr_
Teuchos::RCP< std::vector< GlobalOrdinal > > connectivityPtr_
std::size_t ownedElementCount_
std::vector< std::string > sidesetsToAssociate_
std::vector< bool > sidesetYieldedAssociations_
Teuchos::RCP< std::vector< std::vector< LocalOrdinal > > > elmtToAssociatedElmtsPtr_

Static Protected Attributes

static bool cache_connectivity_ {false}
static std::vector< CachedEntry > cached_conn_managers_ {}
static int cached_reuse_count_ {0}

Detailed Description

A panzer::ConnManager implementation backed by an STK mesh, mapping local element IDs to global mesh-entity (node/edge/face/cell) IDs according to a given field pattern.

Connectivity caching

When caching is enabled with cacheConnectivity(), the connectivity built by buildConnectivity() is saved and reused by later calls on any STKConnManager. A cached result is reused only when all of the following match: the STK_Interface object (compared by address), the field pattern, and the list of sidesets passed to associateElementsInSideset() (in the same order).

  • The cache holds a reference to every mesh it has seen, so those meshes are not freed until their cache entries are removed with clearCachedConnectivityData(const Teuchos::RCP<const STK_Interface>&) or clearCachedConnectivityData().
  • Cached connectivity data is shared, not copied, between the cache and every STKConnManager that reuses it. For this reason all accessors return read-only data.
  • The cache cannot detect changes made to a mesh after its connectivity was cached (e.g. rebalancing or refinement). Reusing a cached entry for a modified mesh returns stale connectivity, so clear the cached data for a mesh whenever that mesh changes.

Definition at line 55 of file Panzer_STKConnManager.hpp.

Member Typedef Documentation

◆ LocalOrdinal

◆ GlobalOrdinal

◆ GlobalOrdinalView

typedef Kokkos::DynRankView<GlobalOrdinal,PHX::Device>::host_mirror_type::const_type panzer_stk::STKConnManager::GlobalOrdinalView

Definition at line 59 of file Panzer_STKConnManager.hpp.

◆ LocalOrdinalView

typedef Kokkos::DynRankView<LocalOrdinal,PHX::Device>::host_mirror_type::const_type panzer_stk::STKConnManager::LocalOrdinalView

Definition at line 60 of file Panzer_STKConnManager.hpp.

◆ CachedEntry

using panzer_stk::STKConnManager::CachedEntry = std::pair<Teuchos::RCP<const panzer::FieldPattern>,Teuchos::RCP<panzer_stk::STKConnManager>>
protected

Definition at line 297 of file Panzer_STKConnManager.hpp.

Constructor & Destructor Documentation

◆ STKConnManager() [1/2]

panzer_stk::STKConnManager::STKConnManager ( const Teuchos::RCP< const STK_Interface > & stkMeshDB)

Construct from the STK mesh to build connectivity from. buildConnectivity() must be called before connectivity queries are valid.

Definition at line 63 of file Panzer_STKConnManager.cpp.

◆ STKConnManager() [2/2]

panzer_stk::STKConnManager::STKConnManager ( const panzer_stk::STKConnManager & cm)

Copy constructor.

Definition at line 73 of file Panzer_STKConnManager.cpp.

◆ ~STKConnManager()

virtual panzer_stk::STKConnManager::~STKConnManager ( )
inlinevirtual

Definition at line 68 of file Panzer_STKConnManager.hpp.

Member Function Documentation

◆ buildConnectivity()

void panzer_stk::STKConnManager::buildConnectivity ( const panzer::FieldPattern & fp)
virtual

Tell the connection manager to build the connectivity assuming a particular field pattern.

Parameters
[in]fpField pattern to build connectivity for

Implements panzer::ConnManager.

Definition at line 261 of file Panzer_STKConnManager.cpp.

◆ noConnectivityClone()

Teuchos::RCP< panzer::ConnManager > panzer_stk::STKConnManager::noConnectivityClone ( ) const
virtual

Build a clone of this connection manager, without any assumptions about the required connectivity (e.g. buildConnectivity has never been called).

Implements panzer::ConnManager.

Definition at line 89 of file Panzer_STKConnManager.cpp.

◆ getConnectivity()

virtual const panzer::GlobalOrdinal * panzer_stk::STKConnManager::getConnectivity ( LocalOrdinal localElmtId) const
inlinevirtual

Get ID connectivity for a particular element

Parameters
[in]localElmtIdLocal element ID
Returns
Pointer to beginning of indices, with total size equal to getConnectivitySize(localElmtId)

Implements panzer::ConnManager.

Definition at line 90 of file Panzer_STKConnManager.hpp.

◆ getConnectivitySize()

virtual LocalOrdinal panzer_stk::STKConnManager::getConnectivitySize ( LocalOrdinal localElmtId) const
inlinevirtual

How many mesh IDs are associated with this element?

Parameters
[in]localElmtIdLocal element ID
Returns
Number of mesh IDs that are associated with this element.

Implements panzer::ConnManager.

Definition at line 99 of file Panzer_STKConnManager.hpp.

◆ getConnectivityView()

const GlobalOrdinalView panzer_stk::STKConnManager::getConnectivityView ( ) const
inline

Returns a read-only view of the flat connectivity array (all elements' global IDs, concatenated).

Definition at line 103 of file Panzer_STKConnManager.hpp.

◆ getConnectivitySizeView()

const LocalOrdinalView panzer_stk::STKConnManager::getConnectivitySizeView ( ) const
inline

Returns a read-only view of the per-element connectivity size array.

Definition at line 107 of file Panzer_STKConnManager.hpp.

◆ getElementLidToConnView()

const LocalOrdinalView panzer_stk::STKConnManager::getElementLidToConnView ( ) const
inline

Returns a read-only view of the per-element offset into the flat connectivity array returned by getConnectivityView().

Definition at line 111 of file Panzer_STKConnManager.hpp.

◆ getBlockId()

std::string panzer_stk::STKConnManager::getBlockId ( STKConnManager::LocalOrdinal localElmtId) const
virtual

Get the block ID for a particular element.

Parameters
[in]localElmtIdLocal element ID

Implements panzer::ConnManager.

Definition at line 362 of file Panzer_STKConnManager.cpp.

◆ numElementBlocks()

virtual std::size_t panzer_stk::STKConnManager::numElementBlocks ( ) const
inlinevirtual

How many element blocks in this mesh?

Implements panzer::ConnManager.

Definition at line 122 of file Panzer_STKConnManager.hpp.

◆ getElementBlockIds()

virtual void panzer_stk::STKConnManager::getElementBlockIds ( std::vector< std::string > & elementBlockIds) const
inlinevirtual

Get block IDs from STK mesh object

Implements panzer::ConnManager.

Definition at line 127 of file Panzer_STKConnManager.hpp.

◆ getElementBlockTopologies()

virtual void panzer_stk::STKConnManager::getElementBlockTopologies ( std::vector< shards::CellTopology > & elementBlockTopologies) const
inlinevirtual

What are the cellTopologies linked to element blocks in this connection manager?

Implements panzer::ConnManager.

Definition at line 132 of file Panzer_STKConnManager.hpp.

◆ getElementBlock()

virtual const std::vector< LocalOrdinal > & panzer_stk::STKConnManager::getElementBlock ( const std::string & blockId) const
inlinevirtual

Get the local element IDs for a paricular element block. These are only the owned element ids.

Parameters
[in]blockIndexBlock Index
Returns
Vector of local element IDs.

Implements panzer::ConnManager.

Definition at line 148 of file Panzer_STKConnManager.hpp.

◆ getNeighborElementBlock()

virtual const std::vector< LocalOrdinal > & panzer_stk::STKConnManager::getNeighborElementBlock ( const std::string & blockId) const
inlinevirtual

Get the local element IDs for a paricular element block. These element ids are not owned, and the element will live on another processor.

Parameters
[in]blockIndexBlock Index
Returns
Vector of local element IDs.

Implements panzer::ConnManager.

Definition at line 159 of file Panzer_STKConnManager.hpp.

◆ getDofCoords()

void panzer_stk::STKConnManager::getDofCoords ( const std::string & blockId,
const panzer::Intrepid2FieldPattern & coordProvider,
std::vector< std::size_t > & localCellIds,
Kokkos::DynRankView< double, PHX::Device > & points ) const
virtual

Get the coordinates (with local cell ids) for a specified element block and field pattern.

Parameters
[in]blockIdBlock containing the cells
[in]coordProviderField pattern that builds the coordinates
[out]localCellIdsLocal cell Ids (indices)
[out]Resizablefield container that contains the coordinates of the points on exit.

Get the coordinates for a specified element block and field pattern.

Definition at line 422 of file Panzer_STKConnManager.cpp.

◆ getSTKInterface()

Teuchos::RCP< const STK_Interface > panzer_stk::STKConnManager::getSTKInterface ( ) const
inline

Get STK interface that this connection manager is built on.

Definition at line 177 of file Panzer_STKConnManager.hpp.

◆ getOwnedElementCount()

std::size_t panzer_stk::STKConnManager::getOwnedElementCount ( ) const
inline

How many elements are owned by this processor. Further, the ordering of the local ids is suct that the first getOwnedElementCount() elements are owned by this processor. This is true only because of the local element ids generated by the STK_Interface object.

Definition at line 187 of file Panzer_STKConnManager.hpp.

◆ associateElementsInSideset()

void panzer_stk::STKConnManager::associateElementsInSideset ( const std::string sideset_id)

Before calling buildConnectivity, provide sideset IDs from which to extract associated elements.

Definition at line 444 of file Panzer_STKConnManager.cpp.

◆ checkAssociateElementsInSidesets()

std::vector< std::string > panzer_stk::STKConnManager::checkAssociateElementsInSidesets ( const Teuchos::Comm< int > & comm) const

After calling buildConnectivity, optionally check which sidesets yielded no element associations in this communicator. This is a parallel operation. In many applications, the outcome indicating correctness is that the returned vector is empty.

Definition at line 487 of file Panzer_STKConnManager.cpp.

◆ getAssociatedNeighbors()

const std::vector< STKConnManager::LocalOrdinal > & panzer_stk::STKConnManager::getAssociatedNeighbors ( const LocalOrdinal & el) const
virtual

Get elements, if any, associated with el, excluding el itself.

Implements panzer::ConnManager.

Definition at line 501 of file Panzer_STKConnManager.cpp.

◆ hasAssociatedNeighbors()

bool panzer_stk::STKConnManager::hasAssociatedNeighbors ( ) const
virtual

Return whether getAssociatedNeighbors will return true for at least one input. Default implementation returns false.

Implements panzer::ConnManager.

Definition at line 439 of file Panzer_STKConnManager.cpp.

◆ cacheConnectivity()

void panzer_stk::STKConnManager::cacheConnectivity ( )
inlinestatic

Enables the caching of connectivity data.

Cached data keeps its meshes alive until it is cleared. Be sure to call clearCachedConnectivityData() before exiting your program, and see the class documentation for when cached data must be cleared.

Definition at line 218 of file Panzer_STKConnManager.hpp.

◆ clearCachedConnectivityData() [1/2]

void panzer_stk::STKConnManager::clearCachedConnectivityData ( )
inlinestatic

If you enable caching with cacheConnectivity(), this must be called prior to exiting the code.

Definition at line 222 of file Panzer_STKConnManager.hpp.

◆ clearCachedConnectivityData() [2/2]

void panzer_stk::STKConnManager::clearCachedConnectivityData ( const Teuchos::RCP< const STK_Interface > & mesh)
static

Removes all cached connectivity data built on the given mesh.

This releases the cache's references to that mesh. Call it whenever the mesh is modified or is no longer needed.

Definition at line 38 of file Panzer_STKConnManager.cpp.

◆ getCachedReuseCount()

int panzer_stk::STKConnManager::getCachedReuseCount ( )
inlinestatic

This is purely for unit testing. Returns the number of times that buildConnectivity() was called, but a cached version was found to use instead.

Definition at line 236 of file Panzer_STKConnManager.hpp.

◆ applyPeriodicBCs()

void panzer_stk::STKConnManager::applyPeriodicBCs ( const panzer::FieldPattern & fp,
GlobalOrdinal nodeOffset,
GlobalOrdinal edgeOffset,
GlobalOrdinal faceOffset,
GlobalOrdinal cellOffset )
protected

Apply periodic boundary conditions associated with the mesh object.

Note
This function requires global All-2-All communication IFF periodic boundary conditions are required.

Definition at line 370 of file Panzer_STKConnManager.cpp.

◆ applyInterfaceConditions()

void panzer_stk::STKConnManager::applyInterfaceConditions ( )
protected

Definition at line 458 of file Panzer_STKConnManager.cpp.

◆ buildLocalElementMapping()

void panzer_stk::STKConnManager::buildLocalElementMapping ( )
protected

Definition at line 108 of file Panzer_STKConnManager.cpp.

◆ clearLocalElementMapping()

void panzer_stk::STKConnManager::clearLocalElementMapping ( )
protected

Definition at line 94 of file Panzer_STKConnManager.cpp.

◆ buildOffsetsAndIdCounts()

void panzer_stk::STKConnManager::buildOffsetsAndIdCounts ( const panzer::FieldPattern & fp,
LocalOrdinal & nodeIdCnt,
LocalOrdinal & edgeIdCnt,
LocalOrdinal & faceIdCnt,
LocalOrdinal & cellIdCnt,
GlobalOrdinal & nodeOffset,
GlobalOrdinal & edgeOffset,
GlobalOrdinal & faceOffset,
GlobalOrdinal & cellOffset ) const
protected

Definition at line 168 of file Panzer_STKConnManager.cpp.

◆ addSubcellConnectivities()

STKConnManager::LocalOrdinal panzer_stk::STKConnManager::addSubcellConnectivities ( stk::mesh::Entity element,
unsigned subcellRank,
LocalOrdinal idCnt,
GlobalOrdinal offset,
const unsigned maxIds = 0 )
protected

Loops over relations of a given rank for a specified element and adds a unique ID to the connectivity vector.

Parameters
[in]elementMesh element
[in]subcellRankRank of the subcell entities to identify
[in]idCntNumber of IDs on the requested subcell type
[in]offsetOffset for requested subcell type
[in,optional]maxIds If positive, maximum number of IDs to connect to this element. If 0 (default), add all IDs.
Precondition
Should call buildOffsetsAndIdCounts() to obtain idCnt and offset.
Note
The connectivity manager needs only the lowest order nodal information. Hence, maxIds should be set appropriately if the STK mesh is second order or higher.

Definition at line 210 of file Panzer_STKConnManager.cpp.

◆ modifySubcellConnectivities()

void panzer_stk::STKConnManager::modifySubcellConnectivities ( const panzer::FieldPattern & fp,
stk::mesh::Entity element,
unsigned subcellRank,
unsigned subcellId,
GlobalOrdinal newId,
GlobalOrdinal offset )
protected

Definition at line 247 of file Panzer_STKConnManager.cpp.

Member Data Documentation

◆ stkMeshDB_

Teuchos::RCP<const STK_Interface> panzer_stk::STKConnManager::stkMeshDB_
protected

Definition at line 276 of file Panzer_STKConnManager.hpp.

◆ elements_

Teuchos::RCP<std::vector<stk::mesh::Entity> > panzer_stk::STKConnManager::elements_
protected

Definition at line 278 of file Panzer_STKConnManager.hpp.

◆ elementBlocks_

std::map<std::string,Teuchos::RCP<std::vector<LocalOrdinal> > > panzer_stk::STKConnManager::elementBlocks_
protected

Definition at line 281 of file Panzer_STKConnManager.hpp.

◆ neighborElementBlocks_

std::map<std::string,Teuchos::RCP<std::vector<LocalOrdinal> > > panzer_stk::STKConnManager::neighborElementBlocks_
protected

Definition at line 282 of file Panzer_STKConnManager.hpp.

◆ elmtLidToConnPtr_

Teuchos::RCP<std::vector<LocalOrdinal> > panzer_stk::STKConnManager::elmtLidToConnPtr_
protected

Definition at line 287 of file Panzer_STKConnManager.hpp.

◆ connSizePtr_

Teuchos::RCP<std::vector<LocalOrdinal> > panzer_stk::STKConnManager::connSizePtr_
protected

Definition at line 288 of file Panzer_STKConnManager.hpp.

◆ connectivityPtr_

Teuchos::RCP<std::vector<GlobalOrdinal> > panzer_stk::STKConnManager::connectivityPtr_
protected

Definition at line 289 of file Panzer_STKConnManager.hpp.

◆ ownedElementCount_

std::size_t panzer_stk::STKConnManager::ownedElementCount_
protected

Definition at line 291 of file Panzer_STKConnManager.hpp.

◆ sidesetsToAssociate_

std::vector<std::string> panzer_stk::STKConnManager::sidesetsToAssociate_
protected

Definition at line 293 of file Panzer_STKConnManager.hpp.

◆ sidesetYieldedAssociations_

std::vector<bool> panzer_stk::STKConnManager::sidesetYieldedAssociations_
protected

Definition at line 294 of file Panzer_STKConnManager.hpp.

◆ elmtToAssociatedElmtsPtr_

Teuchos::RCP<std::vector<std::vector<LocalOrdinal> > > panzer_stk::STKConnManager::elmtToAssociatedElmtsPtr_
protected

Definition at line 295 of file Panzer_STKConnManager.hpp.

◆ cache_connectivity_

bool panzer_stk::STKConnManager::cache_connectivity_ {false}
staticprotected

Definition at line 316 of file Panzer_STKConnManager.hpp.

◆ cached_conn_managers_

std::vector< STKConnManager::CachedEntry > panzer_stk::STKConnManager::cached_conn_managers_ {}
staticprotected

Definition at line 317 of file Panzer_STKConnManager.hpp.

◆ cached_reuse_count_

int panzer_stk::STKConnManager::cached_reuse_count_ {0}
staticprotected

Definition at line 318 of file Panzer_STKConnManager.hpp.


The documentation for this class was generated from the following files: