16#ifdef DEAL_II_WITH_TRILINOS
18# ifdef DEAL_II_TRILINOS_WITH_EPETRA
19# ifdef DEAL_II_WITH_MPI
20# include <Epetra_MpiComm.h>
22# include <Epetra_SerialComm.h>
24# ifdef DEAL_II_WITH_MPI
25# include <Teuchos_DefaultComm.hpp>
27# include <Teuchos_RCP.hpp>
35#ifdef DEAL_II_TRILINOS_WITH_EPETRA
41# ifdef DEAL_II_WITH_MPI
42 static Teuchos::RCP<Epetra_MpiComm> communicator =
43 Teuchos::rcp(
new Epetra_MpiComm(MPI_COMM_WORLD),
true);
45 static Teuchos::RCP<Epetra_SerialComm> communicator =
46 Teuchos::rcp(
new Epetra_SerialComm(),
true);
57# ifdef DEAL_II_WITH_MPI
58 static Teuchos::RCP<Epetra_MpiComm> communicator =
59 Teuchos::rcp(
new Epetra_MpiComm(MPI_COMM_SELF),
true);
61 static Teuchos::RCP<Epetra_SerialComm> communicator =
62 Teuchos::rcp(
new Epetra_SerialComm(),
true);
73# ifdef DEAL_II_WITH_MPI
78 const Epetra_MpiComm *mpi_comm =
79 dynamic_cast<const Epetra_MpiComm *
>(&communicator);
80 if (mpi_comm !=
nullptr)
81 return new Epetra_MpiComm(
89 Assert(
dynamic_cast<const Epetra_SerialComm *
>(&communicator) !=
nullptr,
91 return new Epetra_SerialComm(
92 dynamic_cast<const Epetra_SerialComm &
>(communicator));
102# ifdef DEAL_II_WITH_MPI
103 Epetra_MpiComm *mpi_comm =
dynamic_cast<Epetra_MpiComm *
>(&communicator);
104 if (mpi_comm !=
nullptr)
107 *mpi_comm = Epetra_MpiComm(MPI_COMM_SELF);
119 return mpi_communicator.NumProc();
126 return static_cast<unsigned int>(mpi_communicator.MyPID());
134 if (map.LinearMap() ==
true)
141 return Epetra_Map(map.NumGlobalElements(),
150 return Epetra_Map(map.NumGlobalElements(),
152 map.MyGlobalElements(),
161#ifdef DEAL_II_TRILINOS_WITH_TPETRA
164 const Teuchos::RCP<const Teuchos::Comm<int>> &
167# ifdef DEAL_II_WITH_MPI
168 static auto communicator = Teuchos::RCP<const Teuchos::Comm<int>>(
169 new Teuchos::MpiComm<int>(MPI_COMM_SELF));
171 static auto communicator =
172 Teuchos::RCP<const Teuchos::Comm<int>>(
new Teuchos::Comm<int>());
182 const Teuchos::RCP<
const Teuchos::Comm<int>> &teuchos_comm)
185# ifdef DEAL_II_WITH_MPI
187 const Teuchos::MpiComm<int> *mpi_comm =
188 dynamic_cast<const Teuchos::MpiComm<int> *
>(teuchos_comm.get());
192 out = *(mpi_comm->getRawMpiComm())();
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
#define Assert(cond, exc)
static ::ExceptionBase & ExcInternalError()
MPI_Comm duplicate_communicator(const MPI_Comm mpi_communicator)
void free_communicator(MPI_Comm mpi_communicator)
void destroy_communicator(Epetra_Comm &communicator)
Epetra_Map duplicate_map(const Epetra_BlockMap &map, const Epetra_Comm &comm)
unsigned int get_this_mpi_process(const Epetra_Comm &mpi_communicator)
unsigned int get_n_mpi_processes(const Epetra_Comm &mpi_communicator)
const Epetra_Comm & comm_self()
MPI_Comm teuchos_comm_to_mpi_comm(const Teuchos::RCP< const Teuchos::Comm< int > > &teuchos_comm)
const Teuchos::RCP< const Teuchos::Comm< int > > & tpetra_comm_self()
Epetra_Comm * duplicate_communicator(const Epetra_Comm &communicator)
const Epetra_Comm & comm_world()