]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix compiling with non-MPI PETSc 3719/head
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Fri, 30 Dec 2016 00:03:44 +0000 (01:03 +0100)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Fri, 30 Dec 2016 10:23:07 +0000 (11:23 +0100)
include/deal.II/base/exceptions.h
source/base/mpi.cc

index 4846a17ee7af449b3ac4412af178b3fd75812d9b..5dfca28ebca64b9a70e0db0c7a68cb72df24007c 100644 (file)
@@ -1204,11 +1204,14 @@ namespace StandardExceptions
  * exception of type ExcMPI is thrown with the given error code as an
  * argument.
  *
+ * @note Active only if deal.II is compiled with MPI
  * @ingroup Exceptions
  * @author David Wells, 2016
  */
 #define AssertThrowMPI(error_code) AssertThrow(error_code == MPI_SUCCESS, \
                                                dealii::ExcMPI(error_code))
+#else
+#define AssertThrowMPI(error_code) {}
 #endif // DEAL_II_WITH_MPI
 
 #ifdef DEAL_II_WITH_CUDA
index b1c770a8a876e9ef2563d7146bc61fd497530d3e..8ebab8f77a01f5b9806ca94cea74b7d6c8b1e4a3 100644 (file)
 #endif
 
 #ifdef DEAL_II_WITH_PETSC
-#  ifdef DEAL_II_WITH_MPI
 #    include <petscsys.h>
 #    include <deal.II/lac/petsc_block_vector.h>
 #    include <deal.II/lac/petsc_parallel_block_vector.h>
 #    include <deal.II/lac/petsc_vector.h>
 #    include <deal.II/lac/petsc_parallel_vector.h>
-#  endif
 #endif
 
 #ifdef DEAL_II_WITH_SLEPC
@@ -64,21 +62,6 @@ namespace Utilities
   namespace MPI
   {
 #ifdef DEAL_II_WITH_MPI
-    // Unfortunately, we have to work around an oddity in the way PETSc and
-    // some gcc versions interact. If we use PETSc's MPI dummy implementation,
-    // it expands the calls to the two MPI functions basically as ``(n_jobs=1,
-    // 0)'', i.e. it assigns the number one to the variable holding the number
-    // of jobs, and then uses the comma operator to let the entire expression
-    // have the value zero. The latter is important, since ``MPI_Comm_size''
-    // returns an error code that we may want to check (we don't here, but one
-    // could in principle), and the trick with the comma operator makes sure
-    // that both the number of jobs is correctly assigned, and the return
-    // value is zero. Unfortunately, if some recent versions of gcc detect
-    // that the comma expression just stands by itself, i.e. the result is not
-    // assigned to another variable, then they warn ``right-hand operand of
-    // comma has no effect''. This unwanted side effect can be suppressed by
-    // casting the result of the entire expression to type ``void'' -- not
-    // beautiful, but helps calming down unwarranted compiler warnings...
     unsigned int n_mpi_processes (const MPI_Comm &mpi_communicator)
     {
       int n_jobs=1;
@@ -324,12 +307,12 @@ namespace Utilities
                           "in a program since it initializes the MPI system."));
 
 
-
+      int ierr;
 #ifdef DEAL_II_WITH_MPI
       // if we have PETSc, we will initialize it and let it handle MPI.
       // Otherwise, we will do it.
       int MPI_has_been_started = 0;
-      int ierr = MPI_Initialized(&MPI_has_been_started);
+      ierr = MPI_Initialized(&MPI_has_been_started);
       AssertThrowMPI(ierr);
       AssertThrow (MPI_has_been_started == 0,
                    ExcMessage ("MPI error. You can only start MPI once!"));
@@ -351,6 +334,7 @@ namespace Utilities
       // make sure the compiler doesn't warn about these variables
       (void)argc;
       (void)argv;
+      (void)ierr;
 #endif
 
       // we are allowed to call MPI_Init ourselves and PETScInitialize will

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.