Namespaces | |
Utils | |
Typedefs | |
typedef MPI_Comm | communicator |
typedef MPI_Datatype | data_type |
typedef std::pair< Hilbert::HilbertIndices, unique_id_type > | DofObjectKey |
typedef MPI_Request | request |
typedef MPI_Status | status |
Functions | |
void | wait (std::vector< Request > &r) |
std::size_t | waitany (std::vector< Request > &r) |
LIBMESH_INT_TYPE (char) | |
LIBMESH_INT_TYPE (signed char) | |
LIBMESH_INT_TYPE (unsigned char) | |
LIBMESH_INT_TYPE (short int) | |
LIBMESH_INT_TYPE (unsigned short int) | |
LIBMESH_INT_TYPE (int) | |
LIBMESH_INT_TYPE (long) | |
LIBMESH_INT_TYPE (unsigned long long) | |
LIBMESH_FLOAT_TYPE (float) | |
LIBMESH_FLOAT_TYPE (double) | |
LIBMESH_FLOAT_TYPE (long double) | |
template<typename T , typename C , typename A > | |
LIBMESH_CONTAINER_TYPE (std::set< T LIBMESH_ATTRIBUTES_COMMA C LIBMESH_ATTRIBUTES_COMMA A >) | |
template<typename T , typename A > | |
LIBMESH_CONTAINER_TYPE (std::vector< T LIBMESH_ATTRIBUTES_COMMA A >) | |
LIBMESH_PARALLEL_INTEGER_OPS (char) | |
LIBMESH_PARALLEL_INTEGER_OPS (signed char) | |
LIBMESH_PARALLEL_INTEGER_OPS (unsigned char) | |
LIBMESH_PARALLEL_INTEGER_OPS (short int) | |
LIBMESH_PARALLEL_INTEGER_OPS (unsigned short int) | |
LIBMESH_PARALLEL_INTEGER_OPS (int) | |
LIBMESH_PARALLEL_INTEGER_OPS (long) | |
LIBMESH_PARALLEL_INTEGER_OPS (unsigned long long) | |
LIBMESH_PARALLEL_FLOAT_OPS (float) | |
LIBMESH_PARALLEL_FLOAT_OPS (double) | |
LIBMESH_PARALLEL_FLOAT_OPS (long double) | |
template<typename Context , typename buffertype , typename OutputIter , typename T > | |
void | unpack_range (const typename std::vector< buffertype > &buffer, Context *context, OutputIter out, const T *output_type) |
template<typename Context , typename buffertype , typename Iter > | |
Iter | pack_range (const Context *context, Iter range_begin, const Iter range_end, typename std::vector< buffertype > &buffer, std::size_t approx_buffer_size=1000000) |
template<typename Context , typename Iter > | |
std::size_t | packed_range_size (const Context *context, Iter range_begin, const Iter range_end) |
template<typename Context , typename buffertype , typename OutputIter , typename T > | |
void | unpack_range (const std::vector< buffertype > &buffer, Context *context, OutputIter out_iter, const T *) |
template<typename Iterator , typename DofObjType , typename SyncFunctor > | |
void | sync_dofobject_data_by_xyz (const Communicator &comm, const Iterator &range_begin, const Iterator &range_end, LocationMap< DofObjType > *location_map, SyncFunctor &sync) |
template<typename Iterator , typename SyncFunctor > | |
void | sync_dofobject_data_by_id (const Communicator &comm, const Iterator &range_begin, const Iterator &range_end, SyncFunctor &sync) |
template<typename Iterator , typename DofObjectCheckFunctor , typename SyncFunctor > | |
void | sync_dofobject_data_by_id (const Communicator &comm, const Iterator &range_begin, const Iterator &range_end, const DofObjectCheckFunctor &dofobj_check, SyncFunctor &sync) |
template<typename Iterator , typename SyncFunctor > | |
void | sync_element_data_by_parent_id (MeshBase &mesh, const Iterator &range_begin, const Iterator &range_end, SyncFunctor &sync) |
template<typename ElemCheckFunctor , typename NodeCheckFunctor , typename SyncFunctor > | |
bool | sync_node_data_by_element_id_once (MeshBase &mesh, const MeshBase::const_element_iterator &range_begin, const MeshBase::const_element_iterator &range_end, const ElemCheckFunctor &elem_check, const NodeCheckFunctor &node_check, SyncFunctor &sync) |
template<typename ElemCheckFunctor , typename NodeCheckFunctor , typename SyncFunctor > | |
void | sync_node_data_by_element_id (MeshBase &mesh, const MeshBase::const_element_iterator &range_begin, const MeshBase::const_element_iterator &range_end, const ElemCheckFunctor &elem_check, const NodeCheckFunctor &node_check, SyncFunctor &sync) |
template<typename Iterator , typename DofObjType , typename SyncFunctor > | |
void | sync_dofobject_data_by_xyz (const Communicator &comm, const Iterator &range_begin, const Iterator &range_end, LocationMap< DofObjType > &location_map, SyncFunctor &sync) |
template<typename T > | |
data_type | dataplusint_type () |
template<> | |
data_type | dataplusint_type< short int > () |
template<> | |
data_type | dataplusint_type< int > () |
template<> | |
data_type | dataplusint_type< long > () |
template<> | |
data_type | dataplusint_type< float > () |
template<> | |
data_type | dataplusint_type< double > () |
template<> | |
data_type | dataplusint_type< long double > () |
template<typename MapToVectors , typename RequestContainer , typename ActionFunctor > | |
void | push_parallel_vector_data (const Communicator &comm, const MapToVectors &data, RequestContainer &reqs, ActionFunctor &act_on_data) |
template<typename MapToVectors , typename ActionFunctor > | |
void | push_parallel_vector_data (const Communicator &comm, const MapToVectors &data, ActionFunctor &act_on_data) |
template<typename datum , typename MapToVectors , typename RequestContainer , typename GatherFunctor , typename ActionFunctor > | |
void | pull_parallel_vector_data (const Communicator &comm, const MapToVectors &queries, RequestContainer &reqs, GatherFunctor &gather_data, ActionFunctor &act_on_data, const datum *example) |
template<typename datum , typename MapToVectors , typename GatherFunctor , typename ActionFunctor > | |
void | pull_parallel_vector_data (const Communicator &comm, const MapToVectors &queries, GatherFunctor &gather_data, ActionFunctor &act_on_data, const datum *example) |
template<template< typename, typename, typename ... > class MapType, typename KeyType , typename ValueType , typename A1 , typename A2 , typename ... ExtraTypes, typename RequestContainer , typename ActionFunctor > | |
void | push_parallel_vector_data (const Communicator &comm, const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > &data, RequestContainer &reqs, ActionFunctor &act_on_data) |
template<template< typename, typename, typename ... > class MapType, typename KeyType , typename ValueType , typename A1 , typename A2 , typename ... ExtraTypes, typename ActionFunctor > | |
void | push_parallel_vector_data (const Communicator &comm, const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > &data, ActionFunctor &act_on_data) |
template<typename datum , typename A , typename MapToVectors , typename RequestContainer , typename GatherFunctor , typename ActionFunctor > | |
void | pull_parallel_vector_data (const Communicator &comm, const MapToVectors &queries, RequestContainer &reqs, GatherFunctor &gather_data, ActionFunctor &act_on_data, const std::vector< datum, A > *example) |
template<template< typename, typename, typename ... > class MapType, typename ValueType , typename A1 , typename A2 , typename ... ExtraTypes, typename RequestContainer , typename ActionFunctor > | |
void | push_parallel_vector_data (const Communicator &comm, const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > &data, RequestContainer &reqs, ActionFunctor &act_on_data) |
template<template< typename, typename, typename ... > class MapType, typename ValueType , typename A1 , typename A2 , typename ... ExtraTypes, typename ActionFunctor > | |
void | push_parallel_vector_data (const Communicator &comm, const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > &data, ActionFunctor &act_on_data) |
Status | wait (Request &r) |
LIBMESH_STANDARD_TYPE (char, MPI_CHAR) | |
LIBMESH_STANDARD_TYPE (signed char, MPI_SIGNED_CHAR) | |
LIBMESH_STANDARD_TYPE (unsigned char, MPI_UNSIGNED_CHAR) | |
LIBMESH_STANDARD_TYPE (short int, MPI_SHORT) | |
LIBMESH_STANDARD_TYPE (unsigned short int, MPI_UNSIGNED_SHORT) | |
LIBMESH_STANDARD_TYPE (int, MPI_INT) | |
LIBMESH_STANDARD_TYPE (unsigned int, MPI_UNSIGNED) | |
LIBMESH_STANDARD_TYPE (long, MPI_LONG) | |
LIBMESH_STANDARD_TYPE (long long, MPI_LONG_LONG_INT) | |
LIBMESH_STANDARD_TYPE (unsigned long, MPI_UNSIGNED_LONG) | |
LIBMESH_STANDARD_TYPE (unsigned long long, MPI_UNSIGNED_LONG_LONG) | |
LIBMESH_STANDARD_TYPE (float, MPI_FLOAT) | |
LIBMESH_STANDARD_TYPE (double, MPI_DOUBLE) | |
LIBMESH_STANDARD_TYPE (long double, MPI_LONG_DOUBLE) | |
Variables | |
const unsigned int | any_source |
const MessageTag | any_tag = MessageTag(MPI_ANY_TAG) |
const MessageTag | no_tag = MessageTag(0) |
The Parallel namespace is for wrapper functions for common general parallel synchronization tasks.
For MPI 1.1 compatibility, temporary buffers are used instead of MPI 2's MPI_IN_PLACE
The Parallel namespace is for wrapper functions for common general parallel synchronization tasks.
typedef int libMesh::Parallel::communicator |
Communicator object for talking with subsets of processors
Definition at line 57 of file communicator.h.
typedef MPI_Datatype libMesh::Parallel::data_type |
Data types for communication
Definition at line 46 of file data_type.h.
typedef Hilbert::HilbertIndices libMesh::Parallel::DofObjectKey |
Definition at line 69 of file parallel_hilbert.h.
typedef MPI_Request libMesh::Parallel::request |
typedef MPI_Status libMesh::Parallel::status |
|
inline |
Templated function to return the appropriate MPI datatype for use with built-in C types when combined with an int
|
inline |
Definition at line 167 of file parallel_implementation.h.
|
inline |
Definition at line 164 of file parallel_implementation.h.
|
inline |
Definition at line 158 of file parallel_implementation.h.
|
inline |
Definition at line 161 of file parallel_implementation.h.
|
inline |
Definition at line 170 of file parallel_implementation.h.
|
inline |
Definition at line 155 of file parallel_implementation.h.
libMesh::Parallel::LIBMESH_CONTAINER_TYPE | ( | std::set< T LIBMESH_ATTRIBUTES_COMMA C LIBMESH_ATTRIBUTES_COMMA A > | ) |
libMesh::Parallel::LIBMESH_CONTAINER_TYPE | ( | std::vector< T LIBMESH_ATTRIBUTES_COMMA A > | ) |
libMesh::Parallel::LIBMESH_FLOAT_TYPE | ( | float | ) |
libMesh::Parallel::LIBMESH_FLOAT_TYPE | ( | double | ) |
libMesh::Parallel::LIBMESH_FLOAT_TYPE | ( | long | double | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | char | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | signed | char | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | unsigned | char | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | short | int | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | unsigned short | int | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | int | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | long | ) |
libMesh::Parallel::LIBMESH_INT_TYPE | ( | unsigned long | long | ) |
libMesh::Parallel::LIBMESH_PARALLEL_FLOAT_OPS | ( | float | ) |
libMesh::Parallel::LIBMESH_PARALLEL_FLOAT_OPS | ( | double | ) |
libMesh::Parallel::LIBMESH_PARALLEL_FLOAT_OPS | ( | long | double | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | char | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | signed | char | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | unsigned | char | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | short | int | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | unsigned short | int | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | int | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | long | ) |
libMesh::Parallel::LIBMESH_PARALLEL_INTEGER_OPS | ( | unsigned long | long | ) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | char | , |
MPI_CHAR | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | signed | char, |
MPI_SIGNED_CHAR | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | unsigned | char, |
MPI_UNSIGNED_CHAR | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | short | int, |
MPI_SHORT | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | unsigned short | int, |
MPI_UNSIGNED_SHORT | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | int | , |
MPI_INT | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | unsigned | int, |
MPI_UNSIGNED | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | long | , |
MPI_LONG | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | long | long, |
MPI_LONG_LONG_INT | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | unsigned | long, |
MPI_UNSIGNED_LONG | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | unsigned long | long, |
MPI_UNSIGNED_LONG_LONG | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | float | , |
MPI_FLOAT | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | double | , |
MPI_DOUBLE | |||
) |
libMesh::Parallel::LIBMESH_STANDARD_TYPE | ( | long | double, |
MPI_LONG_DOUBLE | |||
) |
|
inline |
Encode a range of potentially-variable-size objects to a data array.
The data will be buffered in vectors with lengths that do not exceed the sum of approx_buffer_size
and the size of an individual packed object.
Helper function for range packing
Definition at line 139 of file packing.h.
References libMesh::Parallel::Packing< T >::pack(), libMesh::Parallel::Packing< T >::packable_size(), and libMesh::Parallel::Packing< T >::packed_size().
Referenced by libMesh::Parallel::Communicator::allgather_packed_range(), libMesh::Parallel::Communicator::broadcast_packed_range(), libMesh::Parallel::Communicator::gather_packed_range(), libMesh::Parallel::Communicator::nonblocking_send_packed_range(), libMesh::Parallel::Communicator::send_packed_range(), and libMesh::Parallel::Communicator::send_receive_packed_range().
|
inline |
Return the total buffer size needed to encode a range of potentially-variable-size objects to a data array.
Helper function for range packing
Definition at line 118 of file packing.h.
References libMesh::Parallel::Packing< T >::packable_size().
Referenced by libMesh::Parallel::Communicator::send_packed_range().
void libMesh::Parallel::pull_parallel_vector_data | ( | const Communicator & | comm, |
const MapToVectors & | queries, | ||
RequestContainer & | reqs, | ||
GatherFunctor & | gather_data, | ||
ActionFunctor & | act_on_data, | ||
const datum * | example | ||
) |
Send query vectors, receive and answer them with vectors of data, then act on those answers.
The data
map is indexed by processor ids as keys, and for each processor id in the map there should be a vector of query ids to send.
Query data which is received from other processors will be operated on by gather_data(processor_id_type pid, const std::vector<id> & ids, std::vector<datum> & data)
Answer data which is received from other processors will be operated on by act_on_data(processor_id_type pid, const std::vector<id> & ids, const std::vector<datum> & data);
The example pointer may be null; it merely needs to be of the correct type. It's just here because function overloading in C++ is easy, whereas SFINAE is hard and partial template specialization of functions is impossible.
No guarantee about operation ordering is made - this function will attempt to act on data in the order in which it is received.
All receives and actions are completed before this function returns.
Not all sends may have yet completed. The supplied container of Request objects, req
, has more requests inserted, one for each of the data sends. These requests must be waited on before the data
map is deleted.
Definition at line 472 of file parallel_sync.h.
References libMesh::Parallel::Communicator::get_unique_tag(), push_parallel_vector_data(), query, libMesh::Parallel::Communicator::rank(), libMesh::Parallel::Communicator::receive(), libMesh::Parallel::Communicator::send(), libMesh::Parallel::Communicator::size(), wait(), and waitany().
Referenced by libMesh::DofMap::allgather_recursive_constraints(), libMesh::MeshCommunication::assign_global_indices(), libMesh::Partitioner::assign_partitioning(), libMesh::MeshCommunication::find_global_indices(), libMesh::DofMap::gather_constraints(), libMesh::DistributedVector< T >::localize(), pull_parallel_vector_data(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), sync_dofobject_data_by_id(), sync_dofobject_data_by_xyz(), sync_element_data_by_parent_id(), sync_node_data_by_element_id_once(), and libMesh::XdrIO::write_serialized_connectivity().
void libMesh::Parallel::pull_parallel_vector_data | ( | const Communicator & | comm, |
const MapToVectors & | queries, | ||
GatherFunctor & | gather_data, | ||
ActionFunctor & | act_on_data, | ||
const datum * | example | ||
) |
Send query vectors, receive and answer them with vectors of data, then act on those answers.
The data
map is indexed by processor ids as keys, and for each processor id in the map there should be a vector of query ids to send.
Query data which is received from other processors will be operated on by gather_data(processor_id_type pid, const std::vector<id> & ids, std::vector<datum> & data)
Answer data which is received from other processors will be operated on by act_on_data(processor_id_type pid, const std::vector<id> & ids, const std::vector<datum> & data);
The example pointer may be null; it merely needs to be of the correct type. It's just here because function overloading in C++ is easy, whereas SFINAE is hard and partial template specialization of functions is impossible.
No guarantee about operation ordering is made - this function will attempt to act on data in the order in which it is received.
All communication and actions are complete when this function returns.
Definition at line 559 of file parallel_sync.h.
References pull_parallel_vector_data(), and wait().
void libMesh::Parallel::pull_parallel_vector_data | ( | const Communicator & | comm, |
const MapToVectors & | queries, | ||
RequestContainer & | reqs, | ||
GatherFunctor & | gather_data, | ||
ActionFunctor & | act_on_data, | ||
const std::vector< datum, A > * | example | ||
) |
Definition at line 580 of file parallel_sync.h.
References any_source, libMesh::Parallel::Communicator::get_unique_tag(), libMesh::Parallel::Communicator::probe(), push_parallel_vector_data(), query, libMesh::Parallel::Communicator::rank(), libMesh::Parallel::Communicator::receive(), libMesh::Parallel::Communicator::send(), and wait().
void libMesh::Parallel::push_parallel_vector_data | ( | const Communicator & | comm, |
const MapToVectors & | data, | ||
RequestContainer & | reqs, | ||
ActionFunctor & | act_on_data | ||
) |
Send and receive and act on vectors of data.
The data
map is indexed by processor ids as keys, and for each processor id in the map there should be a vector of data to send.
Data which is received from other processors will be operated on by act_on_data(processor_id_type pid, const std::vector<datum> & data)
No guarantee about operation ordering is made - this function will attempt to act on data in the order in which it is received.
All receives and actions are completed before this function returns.
Not all sends may have yet completed. The supplied container of Request objects, req
, has more requests inserted, one for each of the data sends. These requests must be waited on before the data
map is deleted.
Definition at line 239 of file parallel_sync.h.
References libMesh::Parallel::Communicator::alltoall(), data, libMesh::Parallel::Communicator::get_unique_tag(), libMesh::Parallel::Communicator::rank(), libMesh::Parallel::Communicator::receive(), libMesh::Parallel::Communicator::send(), libMesh::Parallel::Communicator::size(), and waitany().
Referenced by libMesh::DofMap::allgather_recursive_constraints(), libMesh::Parallel::Sort< KeyType, IdxType >::communicate_bins(), libMesh::MeshTools::correct_node_proc_ids(), pull_parallel_vector_data(), push_parallel_vector_data(), and libMesh::DofMap::scatter_constraints().
void libMesh::Parallel::push_parallel_vector_data | ( | const Communicator & | comm, |
const MapToVectors & | data, | ||
ActionFunctor & | act_on_data | ||
) |
Send and receive and act on vectors of data.
The data
map is indexed by processor ids as keys, and for each processor id in the map there should be a vector of data to send.
Data which is received from other processors will be operated on by act_on_data(processor_id_type pid, const std::vector<datum> & data);
No guarantee about operation ordering is made - this function will attempt to act on data in the order in which it is received.
All communication and actions are complete when this function returns.
Definition at line 435 of file parallel_sync.h.
References data, push_parallel_vector_data(), and wait().
void libMesh::Parallel::push_parallel_vector_data | ( | const Communicator & | comm, |
const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > & | data, | ||
RequestContainer & | reqs, | ||
ActionFunctor & | act_on_data | ||
) |
Definition at line 348 of file parallel_sync.h.
References libMesh::Parallel::Communicator::alltoall(), any_source, data, libMesh::Parallel::Communicator::get_unique_tag(), libMesh::Parallel::Communicator::probe(), libMesh::Parallel::Communicator::rank(), libMesh::Parallel::Communicator::receive(), libMesh::Parallel::Communicator::send(), and libMesh::Parallel::Communicator::size().
void libMesh::Parallel::push_parallel_vector_data | ( | const Communicator & | comm, |
const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > & | data, | ||
ActionFunctor & | act_on_data | ||
) |
Definition at line 454 of file parallel_sync.h.
References data, push_parallel_vector_data(), and wait().
void libMesh::Parallel::push_parallel_vector_data | ( | const Communicator & | comm, |
const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > & | data, | ||
RequestContainer & | reqs, | ||
ActionFunctor & | act_on_data | ||
) |
Definition at line 348 of file parallel_sync.h.
References libMesh::Parallel::Communicator::alltoall(), any_source, data, libMesh::Parallel::Communicator::get_unique_tag(), libMesh::Parallel::Communicator::probe(), libMesh::Parallel::Communicator::rank(), libMesh::Parallel::Communicator::receive(), libMesh::Parallel::Communicator::send(), and libMesh::Parallel::Communicator::size().
void libMesh::Parallel::push_parallel_vector_data | ( | const Communicator & | comm, |
const MapType< processor_id_type, std::vector< std::vector< ValueType, A1 >, A2 >, ExtraTypes... > & | data, | ||
ActionFunctor & | act_on_data | ||
) |
Definition at line 454 of file parallel_sync.h.
References data, push_parallel_vector_data(), and wait().
void libMesh::Parallel::sync_dofobject_data_by_id | ( | const Communicator & | comm, |
const Iterator & | range_begin, | ||
const Iterator & | range_end, | ||
SyncFunctor & | sync | ||
) |
Request data about a range of ghost dofobjects uniquely identified by their id. Fulfill requests with sync.gather_data(const std::vector<dof_id_type> & ids, std::vector<sync::datum> & data), by resizing and setting the values of the data vector. Respond to fulfillment with sync.act_on_data(const std::vector<dof_id_type> & ids, std::vector<sync::datum> & data) The user must define Parallel::StandardType<sync::datum> if sync::datum isn't a built-in type.
Definition at line 336 of file parallel_ghost_sync.h.
Referenced by libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::FEMSystem::mesh_position_set(), libMesh::LaplaceMeshSmoother::smooth(), and libMesh::MeshRefinement::uniformly_coarsen().
void libMesh::Parallel::sync_dofobject_data_by_id | ( | const Communicator & | comm, |
const Iterator & | range_begin, | ||
const Iterator & | range_end, | ||
const DofObjectCheckFunctor & | dofobj_check, | ||
SyncFunctor & | sync | ||
) |
Request data about a range of ghost dofobjects uniquely identified by their id.
Elements within the range can be excluded from the request by returning false from dofobj_check(dof_object)
Definition at line 347 of file parallel_ghost_sync.h.
References data, libMesh::DofObject::id(), libMesh::DofObject::invalid_processor_id, libMesh::DofObject::processor_id(), pull_parallel_vector_data(), libMesh::Parallel::Communicator::rank(), and libMesh::Parallel::Communicator::size().
void libMesh::Parallel::sync_dofobject_data_by_xyz | ( | const Communicator & | comm, |
const Iterator & | range_begin, | ||
const Iterator & | range_end, | ||
LocationMap< DofObjType > * | location_map, | ||
SyncFunctor & | sync | ||
) |
Request data about a range of ghost nodes uniquely identified by their xyz location or a range of active ghost elements uniquely identified by their centroids' xyz location. Fulfill requests with sync.gather_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data), by resizing and setting the values of the data vector. Respond to fulfillment with sync.act_on_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data) The user must define Parallel::StandardType<sync::datum> if sync::datum isn't a built-in type. The user-provided location_map will be used and left unchanged if it is provided, or filled and cleared if it is empty.
void libMesh::Parallel::sync_dofobject_data_by_xyz | ( | const Communicator & | comm, |
const Iterator & | range_begin, | ||
const Iterator & | range_end, | ||
LocationMap< DofObjType > & | location_map, | ||
SyncFunctor & | sync | ||
) |
Definition at line 232 of file parallel_ghost_sync.h.
References data, libMesh::LocationMap< T >::empty(), libMesh::LocationMap< T >::find(), libMesh::DofObject::invalid_processor_id, libMesh::Parallel::Communicator::max(), libMesh::LocationMap< T >::point_of(), pull_parallel_vector_data(), libMesh::Parallel::Communicator::rank(), and libMesh::Parallel::Communicator::size().
void libMesh::Parallel::sync_element_data_by_parent_id | ( | MeshBase & | mesh, |
const Iterator & | range_begin, | ||
const Iterator & | range_end, | ||
SyncFunctor & | sync | ||
) |
Request data about a range of ghost elements uniquely identified by their parent id and which child they are. Fulfill requests with sync.gather_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data), by resizing and setting the values of the data vector. Respond to fulfillment with sync.act_on_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data) The user must define Parallel::StandardType<sync::datum> if sync::datum isn't a built-in type.
Definition at line 429 of file parallel_ghost_sync.h.
References libMesh::Elem::active(), libMesh::Elem::child_ptr(), data, libMesh::Elem::has_children(), libMesh::DofObject::id(), libMesh::DofObject::invalid_processor_id, mesh, libMesh::Elem::parent(), libMesh::DofObject::processor_id(), pull_parallel_vector_data(), and libMesh::Elem::which_child_am_i().
Referenced by libMesh::MeshCommunication::make_elems_parallel_consistent().
void libMesh::Parallel::sync_node_data_by_element_id | ( | MeshBase & | mesh, |
const MeshBase::const_element_iterator & | range_begin, | ||
const MeshBase::const_element_iterator & | range_end, | ||
const ElemCheckFunctor & | elem_check, | ||
const NodeCheckFunctor & | node_check, | ||
SyncFunctor & | sync | ||
) |
Synchronize data about a range of ghost nodes uniquely identified by an element id and local node id, iterating until data is completely in sync and futher synchronization passes cause no changes.
Imagine a vertex surrounded by triangles, each on a different processor, with a ghosting policy that include only face neighbors and not point neighbors. Then the only way for authoritative information to trickle out from that vertex is by being passed along, one neighbor at a time, to processors who mostly don't even see the node's true owner!
Data for all nodes connected to elements in the given range of element iterators will be requested.
Elements can be further excluded from the request by returning false from element_check(elem)
Nodes can be further excluded from the request by returning false from node_check(elem, local_node_num)
Fulfill requests with sync.gather_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data), by resizing and setting the values of the data vector. Respond to fulfillment with bool sync.act_on_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data) and return true iff the response changed any data.
The user must define Parallel::StandardType<sync::datum> if sync::datum isn't a built-in type.
Definition at line 752 of file parallel_ghost_sync.h.
References mesh, and sync_node_data_by_element_id_once().
Referenced by libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), and libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent().
bool libMesh::Parallel::sync_node_data_by_element_id_once | ( | MeshBase & | mesh, |
const MeshBase::const_element_iterator & | range_begin, | ||
const MeshBase::const_element_iterator & | range_end, | ||
const ElemCheckFunctor & | elem_check, | ||
const NodeCheckFunctor & | node_check, | ||
SyncFunctor & | sync | ||
) |
Synchronize data about a range of ghost nodes uniquely identified by an element id and local node id, assuming a single synchronization pass is necessary.
Data for all nodes connected to elements in the given range of element iterators will be requested.
Elements can be further excluded from the request by returning false from element_check(elem)
Nodes can be further excluded from the request by returning false from node_check(elem, local_node_num)
Fulfill requests with sync.gather_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data), by resizing and setting the values of the data vector. Respond to fulfillment with bool sync.act_on_data(const std::vector<unsigned int> & ids, std::vector<sync::datum> & data) and return true iff the response changed any data.
The user must define Parallel::StandardType<sync::datum> if sync::datum isn't a built-in type.
This method returns true iff the sync pass changed any data on any processor.
Definition at line 546 of file parallel_ghost_sync.h.
References libMesh::as_range(), data, libMesh::DofObject::id(), libMesh::DofObject::invalid_id, libMesh::DofObject::invalid_processor_id, mesh, libMesh::Elem::n_nodes(), libMesh::Elem::node_ref(), libMesh::DofObject::processor_id(), and pull_parallel_vector_data().
Referenced by libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), and sync_node_data_by_element_id().
|
inline |
Decode a range of potentially-variable-size objects from a data array.
Referenced by libMesh::Parallel::Communicator::allgather_packed_range(), libMesh::Parallel::Communicator::broadcast_packed_range(), libMesh::Parallel::Communicator::gather_packed_range(), libMesh::Parallel::Communicator::receive_packed_range(), libMesh::Parallel::PostWaitUnpackBuffer< Container, Context, OutputIter, T >::run(), and libMesh::Parallel::Communicator::send_receive_packed_range().
|
inline |
Helper function for range unpacking
Definition at line 194 of file packing.h.
References libMesh::Parallel::Packing< T >::packed_size(), and libMesh::Parallel::Packing< T >::unpack().
Wait for a non-blocking send or receive to finish
Definition at line 129 of file request.h.
References libMesh::Parallel::Request::wait().
void libMesh::Parallel::wait | ( | std::vector< Request > & | r | ) |
Wait for all non-blocking operations to finish
Definition at line 213 of file request.C.
Referenced by libMesh::DofMap::allgather_recursive_constraints(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::SparsityPattern::Build::parallel_sync(), pull_parallel_vector_data(), push_parallel_vector_data(), libMesh::Nemesis_IO::read(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::DofMap::scatter_constraints(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::System::write_serialized_blocked_dof_objects(), and libMesh::XdrIO::write_serialized_nodes().
std::size_t libMesh::Parallel::waitany | ( | std::vector< Request > & | r | ) |
Wait for at least one non-blocking operation to finish. Return the index of the request which completed.
Definition at line 219 of file request.C.
References libMesh::Parallel::Request::_prior_request, libMesh::Parallel::Request::get(), libMesh::MeshTools::Subdivision::next, and libMesh::Parallel::Request::post_wait_work.
Referenced by pull_parallel_vector_data(), and push_parallel_vector_data().
const unsigned int libMesh::Parallel::any_source |
Processor id meaning "Accept from any source"
Definition at line 70 of file communicator.h.
Referenced by libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::MeshRefinement::make_coarsening_compatible(), pull_parallel_vector_data(), push_parallel_vector_data(), libMesh::Nemesis_IO::read(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::MeshRefinement::uniformly_coarsen(), and libMesh::System::write_serialized_blocked_dof_objects().
const MessageTag libMesh::Parallel::any_tag = MessageTag(MPI_ANY_TAG) |
Default message tag ids
Definition at line 115 of file message_tag.h.
const MessageTag libMesh::Parallel::no_tag = MessageTag(0) |
Definition at line 120 of file message_tag.h.