stage of the method Create(). The previous implementation was
using MPI_Recv() with MPI_ANY_SOURCE which was causing issues
where one rank was receiving data sent from different calls to
Create().
In class GroupCommunicator, add const to the arguments of the
methods Create() and SetLTDofTable().
MPI_Session - the only communicator that makes sense with this class is
MPI_COMM_WORLD.
Replace `mfem::err.GetStream()` with `mfem::err`.
Remove #include "communication.hpp" from error.hpp.
general/globals.[ch].
Renamed class WrappedOStream to OutStream and use a different
implementation in order to support the case when the OutStream is passed
as a parameter of type std::ostream.
In class MPI_Session, added an MPI_Comm parameter to both constructors,
with a default value of MPI_COMM_WORLD.
Hide the global variable MFEM_COMM_WORLD and allow access (read and
write) with global functions: GetGlobalMPI_Comm() and
SetGlobalMPI_Comm() - in the future, we may want to perform some tasks
when changing the "global" MPI communicator.
In mfem_error(), use GetGlobalMPI_Comm() instead of MPI_COMM_WORLD.
Minor formatting changes and #include reordering.
while calling the original mode byGroup. The new mode, which is also the
new default, aggregates communications between the same two ranks that
may consist of data corresponding to multiple groups, thereby reducing
the total number of MPI send and receive calls. This optimization
addresses the slowdown observed in the last commit for small problem
sizes (per rank) while also providing small improvements for medium and
large problem sizes.
The communication mode of a GroupCommunicator can be specified with the
new second parameter of its constructor which has a default value
byNeighbor.
Add two new methods, mostly useful for debugging/diagnostics:
GroupCommunicator::PrintInfo() and HypreParMatrix::PrintCommPkg().