[petsc-dev] dealing with MPIUNi

Barry Smith bsmith at mcs.anl.gov
Thu Feb 25 16:19:57 CST 2010

  After listening to our discussion of the half-plant/half animal  
handling of MPIUni I have adopted the plant :-) model.

Background: All the packages in PETSc/packages and BuildSystem/config/ 
packages have the following paradigm except MPI and BlasLapack.

1) PETSc can be built --with-package or --with-package=0
2) If --with-package=0 then there is no PETSC_HAVE_package defined, no  
extra libraries to link against and no extra include paths to look in

BlasLapack breaks this paradigm in only one way! You cannot use --with- 

MPI breaks the paradigm more completely. You can use --with-mpi=0 BUT  
if you use --with-mpi=0 then PETSC_HAVE_MPI is STILL defined!!!!!!  
There is an extra library to link against and an extra include path to  
look in.

The two possible solutions to resolve this perverse beast are
1) make mpiuni be a --download-mpiuni replacement for MPI, as we do -- 
download-c-blaslapack (this would replace the current --with-mpi=0  
2) better supporting --with-mpi=0 without breaking the paradigm

   I agree with Matt that 1 is the more elegant solution, since it  
fits the paradigm perfectly. But having --with-mpi=0 is easier and  
more understandable to the user then explaining about downloading a  
dummy MPI.

   Thus I have implemented and pushed 2). When you use --with-mpi=0
1) the macro PETSC_HAVE_MPI is not set
2) the list of include directories is not added to
3) the list of linked against libraries is not added to.

I have implemented 2) and 3) by having in petsc.h (fortran also)
#if defined(PETSC_HAVE_MPI)
#include "mpi.h"
#include "mpiuni/mpi.h"
and putting the dummy MPI stubs always into the PETSc libraries for  
both single library and multiple library PETSc installs.

Note: this means one cannot have an include "mpi.h" in the uni case  
which bothered me initially but then Lisandro convinced me it was not  
a bad thing.

The actual code changes to implement this were, of course, tiny. It is  
not perfect (only --download-mpiuni would be perfect :-), but it is  
better than before.

  Sorry Matt,


More information about the petsc-dev mailing list