18#ifdef DEAL_II_WITH_SCALAPACK
20# include <deal.II/lac/scalapack.templates.h>
36 inline std::pair<int, int>
67 const double ratio = double(n) / m;
79 int n_process_rows =
Np / n_process_columns;
81 Assert(n_process_columns >= 1 && n_process_rows >= 1 &&
84 "error in process grid: " + std::to_string(n_process_rows) +
"x" +
85 std::to_string(n_process_columns) +
"=" +
86 std::to_string(n_process_rows * n_process_columns) +
" out of " +
89 return std::make_pair(n_process_rows, n_process_columns);
113 ExcMessage(
"Number of process grid rows has to be positive."));
115 ExcMessage(
"Number of process grid columns has to be positive."));
120 "Size of process grid is larger than number of available MPI processes."));
123 const bool column_major =
false;
127 const char *order = (column_major ?
"Col" :
"Row");
212 const unsigned int row_block_size,
213 const unsigned int column_block_size)
225 const unsigned int n_rows,
226 const unsigned int n_columns)
243 template <
typename NumberType>
266Utilities::MPI::ProcessGrid::send_to_inactive<double>(
double *,
269Utilities::MPI::ProcessGrid::send_to_inactive<float>(
float *,
const int)
const;
271Utilities::MPI::ProcessGrid::send_to_inactive<int>(
int *,
const int)
const;
value_type * data() const noexcept
MPI_Comm mpi_communicator
ProcessGrid(const MPI_Comm mpi_communicator, const unsigned int n_rows, const unsigned int n_columns)
bool mpi_process_is_active
MPI_Comm mpi_communicator_inactive_with_root
void send_to_inactive(NumberType *value, const int count=1) const
const unsigned int n_mpi_processes
const unsigned int this_mpi_process
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertThrowMPI(error_code)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
unsigned int n_mpi_processes(const MPI_Comm mpi_communicator)
unsigned int this_mpi_process(const MPI_Comm mpi_communicator)
const MPI_Datatype mpi_type_id_for_type
void free_communicator(MPI_Comm mpi_communicator)
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)