Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::mesh::LinkCSRDataT< MemSpace > Class Template Reference

#include <LinkCSRData.hpp>

Inheritance diagram for mundy::mesh::LinkCSRDataT< MemSpace >:
[legend]

Public Types

Aliases
using entity_value_t = stk::mesh::Entity::entity_value_type
using ConnectedEntities = stk::util::StridedArray<const stk::mesh::Entity>
using LinkCSRPartition = LinkCSRPartitionT<MemSpace>
using LinkCSRPartitionView = Kokkos::View<LinkCSRPartition*, stk::ngp::UVMMemSpace>
using LinkBucketToPartitionIdMap = Kokkos::UnorderedMap<unsigned, unsigned, MemSpace>
using SelectorToPartitionsMap = std::map<stk::mesh::Selector, LinkCSRPartitionView>
using PartitionKeyToIdMap = std::map<impl::PartitionKey, unsigned>

Public Member Functions

Constructors and destructor
 LinkCSRDataT ()=default
 Default constructor.
 LinkCSRDataT (const LinkCSRDataT &)=default
 Default copy or move constructors/operators.
 LinkCSRDataT (LinkCSRDataT &&)=default
LinkCSRDataToperator= (const LinkCSRDataT &)=default
LinkCSRDataToperator= (LinkCSRDataT &&)=default
 LinkCSRDataT (stk::mesh::BulkData &bulk_data, LinkMetaData &link_meta_data)
 Construct from scratch.
template<typename OtherMemSpace>
 LinkCSRDataT (LinkCSRDataT< OtherMemSpace > &other)
 Construct from a LinkCSRDataT with a different memory space. Does NOT perform a deep copy. Simply steals their pointers to the bulk data and meta data.
virtual ~LinkCSRDataT ()
 Destructor.
Getters
bool is_valid () const noexcept
 Get if the link data is valid.
const LinkMetaDatalink_meta_data () const
 Fetch the link meta data manager.
LinkMetaDatalink_meta_data ()
 Fetch the link meta data manager.
const stk::mesh::BulkDatabulk_data () const
 Fetch the bulk data manager we extend.
stk::mesh::BulkDatabulk_data ()
 Fetch the bulk data manager we extend.
stk::mesh::EntityRank link_rank () const noexcept
 Fetch the link rank.
CSR Partition management
const LinkCSRPartitionViewget_all_crs_partitions () const noexcept
 Get all CSR partitions.
const LinkCSRPartitionViewget_or_create_crs_partitions (const stk::mesh::Selector &selector) const
 Get the CSR partitions for a given link subset selector (Memoized/host only/not thread safe).
LinkBucketToPartitionIdMap get_updated_stk_link_bucket_to_partition_id_map ()
 Get the map from link bucket id to partition id (memoized/host only/not thread safe).
void update_stk_link_bucket_to_partition_id_map ()
 Update the map from link bucket id to partition id (host only/not thread safe).
void clear_structural_caches ()
 Clear all memoized CSR structure. The next partition request rebuilds from current mesh buckets.
void mark_crs_bucket_conns_dirty (const stk::mesh::Selector &selector)
 Mark every CSR bucket-connection in the selected partitions as dirty.
void mark_all_crs_bucket_conns_dirty ()
 Mark every CSR bucket-connection in every partition as dirty.
template<typename OtherMemSpace>
void synchronize_with (LinkCSRDataT< OtherMemSpace > &src)
stk::mesh::Selector all_selector () const

Protected Member Functions

Internal methods
unsigned get_linker_dimensionality (const stk::mesh::Entity &linker) const
 Get the dimensionality of a linker.
unsigned get_linker_dimensionality (const stk::mesh::Bucket &linker_bucket) const
 Get the dimensionality of a linker bucket.
unsigned get_linker_dimensionality (const impl::PartitionKey &partition_key) const
 Get the dimensionality of a linker partition.
void destroy_partition_view (LinkCSRPartitionView &view) const
void clear_partitions_and_views ()
void clear_stk_link_bucket_to_partition_id_map ()
 Clear the memoized map from STK link bucket id to partition id.

Member Typedef Documentation

◆ entity_value_t

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::entity_value_t = stk::mesh::Entity::entity_value_type

◆ ConnectedEntities

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::ConnectedEntities = stk::util::StridedArray<const stk::mesh::Entity>

◆ LinkCSRPartition

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRPartition = LinkCSRPartitionT<MemSpace>

◆ LinkCSRPartitionView

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRPartitionView = Kokkos::View<LinkCSRPartition*, stk::ngp::UVMMemSpace>

◆ LinkBucketToPartitionIdMap

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::LinkBucketToPartitionIdMap = Kokkos::UnorderedMap<unsigned, unsigned, MemSpace>

◆ SelectorToPartitionsMap

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::SelectorToPartitionsMap = std::map<stk::mesh::Selector, LinkCSRPartitionView>

◆ PartitionKeyToIdMap

template<typename MemSpace>
using mundy::mesh::LinkCSRDataT< MemSpace >::PartitionKeyToIdMap = std::map<impl::PartitionKey, unsigned>

Constructor & Destructor Documentation

◆ LinkCSRDataT() [1/5]

template<typename MemSpace>
mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRDataT ( )
default

◆ LinkCSRDataT() [2/5]

template<typename MemSpace>
mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRDataT ( const LinkCSRDataT< MemSpace > & )
default

◆ LinkCSRDataT() [3/5]

template<typename MemSpace>
mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRDataT ( LinkCSRDataT< MemSpace > && )
default

◆ LinkCSRDataT() [4/5]

template<typename MemSpace>
mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRDataT ( stk::mesh::BulkData & bulk_data,
LinkMetaData & link_meta_data )
inline

◆ LinkCSRDataT() [5/5]

template<typename MemSpace>
template<typename OtherMemSpace>
mundy::mesh::LinkCSRDataT< MemSpace >::LinkCSRDataT ( LinkCSRDataT< OtherMemSpace > & other)
inlineexplicit

This constructor exists so that we can use NgpLinkCSRData(LinkCSRData) to perform a shallow copy if NgpMemSpace == MemSpace and this operator otherwise.

◆ ~LinkCSRDataT()

template<typename MemSpace>
virtual mundy::mesh::LinkCSRDataT< MemSpace >::~LinkCSRDataT ( )
inlinevirtual

Member Function Documentation

◆ operator=() [1/2]

template<typename MemSpace>
LinkCSRDataT & mundy::mesh::LinkCSRDataT< MemSpace >::operator= ( const LinkCSRDataT< MemSpace > & )
default

◆ operator=() [2/2]

template<typename MemSpace>
LinkCSRDataT & mundy::mesh::LinkCSRDataT< MemSpace >::operator= ( LinkCSRDataT< MemSpace > && )
default

◆ is_valid()

template<typename MemSpace>
bool mundy::mesh::LinkCSRDataT< MemSpace >::is_valid ( ) const
inlinenoexcept

◆ link_meta_data() [1/2]

template<typename MemSpace>
const LinkMetaData & mundy::mesh::LinkCSRDataT< MemSpace >::link_meta_data ( ) const
inline

◆ link_meta_data() [2/2]

template<typename MemSpace>
LinkMetaData & mundy::mesh::LinkCSRDataT< MemSpace >::link_meta_data ( )
inline

◆ bulk_data() [1/2]

template<typename MemSpace>
const stk::mesh::BulkData & mundy::mesh::LinkCSRDataT< MemSpace >::bulk_data ( ) const
inline

◆ bulk_data() [2/2]

template<typename MemSpace>
stk::mesh::BulkData & mundy::mesh::LinkCSRDataT< MemSpace >::bulk_data ( )
inline

◆ link_rank()

template<typename MemSpace>
stk::mesh::EntityRank mundy::mesh::LinkCSRDataT< MemSpace >::link_rank ( ) const
inlinenoexcept

◆ get_all_crs_partitions()

template<typename MemSpace>
const LinkCSRPartitionView & mundy::mesh::LinkCSRDataT< MemSpace >::get_all_crs_partitions ( ) const
inlinenoexcept

Safety: This view is always safe to use and the reference is valid as long as the LinkData is valid, which has the same lifetime as the bulk data manager. It remains valid even during mesh modifications.

◆ get_or_create_crs_partitions()

template<typename MemSpace>
const LinkCSRPartitionView & mundy::mesh::LinkCSRDataT< MemSpace >::get_or_create_crs_partitions ( const stk::mesh::Selector & selector) const
inline

This is the only way for either Mundy or users to create a new partition. The returned view is persistent but its contents/size will change dynamically as new partitions are created and destroyed. The only promise we will make is to never delete a partition outside of a modification cycle.

Note
Other classes perform synchronization of LinkCSRData objects between memory spaces. Importantly, creating an empty partition as a result of this function is not considered a "modification" and does not dirty other memory spaces. Instead, we only maintain consistency of populated partitions across memory spaces.

◆ get_updated_stk_link_bucket_to_partition_id_map()

template<typename MemSpace>
LinkBucketToPartitionIdMap mundy::mesh::LinkCSRDataT< MemSpace >::get_updated_stk_link_bucket_to_partition_id_map ( )
inline

◆ update_stk_link_bucket_to_partition_id_map()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::update_stk_link_bucket_to_partition_id_map ( )
inline

◆ clear_structural_caches()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::clear_structural_caches ( )
inline

◆ mark_crs_bucket_conns_dirty()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::mark_crs_bucket_conns_dirty ( const stk::mesh::Selector & selector)
inline

◆ mark_all_crs_bucket_conns_dirty()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::mark_all_crs_bucket_conns_dirty ( )
inline

◆ synchronize_with()

template<typename MemSpace>
template<typename OtherMemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::synchronize_with ( LinkCSRDataT< OtherMemSpace > & src)
inline

◆ all_selector()

template<typename MemSpace>
stk::mesh::Selector mundy::mesh::LinkCSRDataT< MemSpace >::all_selector ( ) const
inline

◆ get_linker_dimensionality() [1/3]

template<typename MemSpace>
unsigned mundy::mesh::LinkCSRDataT< MemSpace >::get_linker_dimensionality ( const stk::mesh::Entity & linker) const
inlineprotected
Parameters
linker[in] The linker (must be valid and of the correct rank).

◆ get_linker_dimensionality() [2/3]

template<typename MemSpace>
unsigned mundy::mesh::LinkCSRDataT< MemSpace >::get_linker_dimensionality ( const stk::mesh::Bucket & linker_bucket) const
inlineprotected

◆ get_linker_dimensionality() [3/3]

template<typename MemSpace>
unsigned mundy::mesh::LinkCSRDataT< MemSpace >::get_linker_dimensionality ( const impl::PartitionKey & partition_key) const
inlineprotected

◆ destroy_partition_view()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::destroy_partition_view ( LinkCSRPartitionView & view) const
inlineprotected

◆ clear_partitions_and_views()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::clear_partitions_and_views ( )
inlineprotected

◆ clear_stk_link_bucket_to_partition_id_map()

template<typename MemSpace>
void mundy::mesh::LinkCSRDataT< MemSpace >::clear_stk_link_bucket_to_partition_id_map ( )
inlineprotected