<p dir="ltr">Are there any places that call MPI directly, but do not include anything from petsc-private?</p>
<div class="gmail_quote">On Jan 21, 2013 6:27 PM, "Barry Smith" <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On Jan 21, 2013, at 5:41 PM, Jed Brown <<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>> wrote:<br>
<br>
><br>
> On Mon, Jan 21, 2013 at 5:31 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
> On Mon, Jan 21, 2013 at 4:12 PM, Karl Rupp <<a href="mailto:rupp@mcs.anl.gov">rupp@mcs.anl.gov</a>> wrote:<br>
> Dear PETScians,<br>
><br>
> MPI 3.0 *removes* a set of functions from MPI 1.x, of which the following are in use in PETSc:<br>
><br>
>  * MPI_Type_struct, used in<br>
>    src/ts/characteristic/impls/da/slda.c<br>
>    src/dm/impls/mesh/meshpcice.c<br>
><br>
>  * MPI_Errhandler_create/MPI_Errhandler_set, used in<br>
>    src/sys/objects/pinit.c<br>
>    src/sys/objects/init.c<br>
><br>
> In both cases function were renamed in MPI-2.0:<br>
>   MPI_Type_struct       -> MPI_Type_create_struct<br>
>   MPI_Errhandler_create -> MPI_Comm_create_errhandler<br>
>   MPI_Errhandler_set    -> MPI_Comm_set_errhandler<br>
<br>
  Damn assholes, changing their API all the time for no good reason.<br>
<br>
><br>
> It should be sufficient to update BuildSystem/config/packages/MPI.py and add the respective checks in configureMPI2(). Any objections on the following defines:<br>
>   HAVE_MPI_TYPE_CREATE_STRUCT<br>
>   HAVE_MPI_COMM_CREATE_ERRHANDLER<br>
>   HAVE_MPI_COMM_SET_ERRHANDLER<br>
> in the case of success?<br>
><br>
> Yes, this is the right way.<br>
><br>
> I'm also in favor of changing all the call sites to the new function names. I think that if configure does not find a new function name, we can<br>
><br>
> #define MPI_Type_create_struct(count,lens,displs,types,newtype) MPI_Type_struct((count),(lens),(displs),(types),(newtype))<br>
<br>
 Yes switch to the new names and have configure generate the old when needed. I am actually in favor of having configure generate the string<br>
> #define MPI_Type_create_struct(count,lens,displs,types,newtype) MPI_Type_struct((count),(lens),(displs),(types),(newtype))<br>
and sticking it in petscconf.h or petscfix.h when needed and not having in PETSc source/include file code ugly stuff like<br>
<br>
#if !defined(PETSC_HAVE_MPI_TYPE_CREATE_STRUCT)<br>
> #define MPI_Type_create_struct(count,lens,displs,types,newtype) MPI_Type_struct((count),(lens),(displs),(types),(newtype))<br>
#endif<br>
<br>
but I am sure Jed will find some objection to having configure generate the string directly.<br>
<br>
><br>
> similar to the defines in petsclog.h (though those are for logging) so that we don't need macros at every call site. FWIW, I'd prefer that the redefines in petsclog.h be moved to a header that is not mandatory for users to include (because the current approach cannot be used with another library that also does the same thing).<br>

<br>
   Is this even possible without requiring some "extra" include in each PETSc source that has to be added?  Though I agree in principle with not having these macros visible in user code I don't like needing some convoluted "thing" that is different between PETSc source code and user code; one of the original goals of PETSc design was the user code and PETSc code were indistinguishable as much as possible both to the human eye and compilers. So I'd need to see a clean way of handling this that didn't involve ugly stuff like<br>

#define THIS_BE_PETSC_SOURCE at the top of each PETSc source code file.<br>
<br>
   Barry<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div>