NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble::VectorCommunicator Class Reference

#include <nimble_vector_communicator.h>

Public Member Functions

 VectorCommunicator ()=default
 
 VectorCommunicator (int d, unsigned int n, comm_type comm)
 
 ~VectorCommunicator ()=default
 
void Initialize (std::vector< int > const &global_node_ids)
 
void GetPartitionBoundaryNodeLocalIds (std::vector< int > &node_local_ids, std::vector< int > &min_rank_containing_node)
 
void VectorReduction (int data_dimension, double *data)
 
template<class Lookup>
void VectorReduction (int data_dimension, Lookup &&lookup)
 

Constructor & Destructor Documentation

◆ VectorCommunicator() [1/2]

nimble::VectorCommunicator::VectorCommunicator ( )
default

◆ VectorCommunicator() [2/2]

nimble::VectorCommunicator::VectorCommunicator ( int d,
unsigned int n,
comm_type comm )
inline
94: dim_(d), num_nodes_(n), comm_(comm) {}

◆ ~VectorCommunicator()

nimble::VectorCommunicator::~VectorCommunicator ( )
default

Member Function Documentation

◆ GetPartitionBoundaryNodeLocalIds()

void nimble::VectorCommunicator::GetPartitionBoundaryNodeLocalIds ( std::vector< int > & node_local_ids,
std::vector< int > & min_rank_containing_node )
inline
Parameters
node_local_ids
min_rank_containing_node
132 {
133#ifdef NIMBLE_HAVE_MPI
134 MeshReductionInfo->GetAllIndices(node_local_ids, min_rank_containing_node);
135#else
136 min_rank_containing_node.push_back(0);
137#endif
138 }

◆ Initialize()

void nimble::VectorCommunicator::Initialize ( std::vector< int > const & global_node_ids)
inline
106 {
107#ifdef NIMBLE_HAVE_TRILINOS
108 if (comm_) {
109 auto tpetra_container = new nimble::TpetraContainer();
110 TpetraReductionInfo.reset(tpetra_container);
111 TpetraReductionInfo->Initialize(dim_, num_nodes_, comm_, global_node_ids);
112 }
113#endif
114
115#ifdef NIMBLE_HAVE_MPI
116 {
117 MPI_Comm duplicate_of_world;
118 MPI_Comm_dup(MPI_COMM_WORLD, &duplicate_of_world);
119 mpicontext context{duplicate_of_world};
120 reduction::ReductionInfo* reduction_info = reduction::GenerateReductionInfo(global_node_ids, context);
121 MeshReductionInfo.reset(reduction_info);
122 }
123#endif
124 }

◆ VectorReduction() [1/2]

void nimble::VectorCommunicator::VectorReduction ( int data_dimension,
double * data )
inline
Parameters
data_dimension
data
146 {
147#ifdef NIMBLE_HAVE_TRILINOS
148 if (TpetraReductionInfo) {
149 TpetraReductionInfo->VectorReduction(data_dimension, data);
150 return;
151 }
152#endif
153
154#ifdef NIMBLE_HAVE_MPI
155 MeshReductionInfo->PerformReduction(data, data_dimension);
156#endif
157 }

◆ VectorReduction() [2/2]

template<class Lookup>
void nimble::VectorCommunicator::VectorReduction ( int data_dimension,
Lookup && lookup )
inline
Template Parameters
Lookup
Parameters
data_dimension
lookup
167 {
168#ifdef NIMBLE_HAVE_MPI
169 MeshReductionInfo->PerformReduction(lookup, data_dimension);
170#endif
171 }

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