[petsc-users] maintaining application compatibility with 3.1 and 3.2

Barry Smith bsmith at mcs.anl.gov
Thu Apr 18 11:04:54 CDT 2013


On Apr 18, 2013, at 7:08 AM, Alexei Matveev <alexei.matveev+petsc at gmail.com> wrote:

> 
> 
> Hi, All,
> 
> Thanks for your comments.
> 
> On 17 April 2013 23:35, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
>        It is our intention that PETSc be easy enough for anyone to install that rather than making your application work with different versions one simply install the PETSc version one needs. In addition we recommend updating applications to work with the latest release within a couple of months after each release.
> 
> I understand that. With rapid development it is unavoidable to break
> API occasionally.
> 
> I managed to compile and run the code with the quick hack below and somewhat
> more. Thanks, Kirk! Need yet to find out why the tests fail.
> 
> Do I understand it correctly that there is no way currently to load a distributed
> Vec from the file without knowing and setting its dimensions first?
> Like I was doing here:
> 
> +# if PETSC_VERSION < 30200
>    VecLoad (viewer, VECMPI, &vec); /* creates it */
> +#else
> +  /* FIXME: how to make it distributed? */
> +  VecCreate (PETSC_COMM_WORLD, &vec);
> +  VecLoad (vec, viewer);
> +#endif

   Use VecCreate(),  VecSetType(vec,VECSTANDARD); <-- indicates seq on one process and MPI on several VecLoad(). If that does not work then please send all error output to petsc-maint.

> 
> BTW, I found myself calling (DM)DAGetInfo() on the array descriptor DM/DA
> quite often to get the shape of the 3d grid. I noticed that now that the signature
> of the *GetInfo() changed. Is there an official way to get that shape info by enquiring
> the Vec itself?

   We now have in petsc-dev  VecGetDM() that will give you the DM/DA associated with the vector, if it has one, from that you can get the shape info.

   Barry

> 
> Alexei
> 
> -#include "petscda.h"            /* Vec, Mat, DA, ... */
> +#include "petscdmda.h"          /* Vec, Mat, DA, ... */
>  #include "petscdmmg.h"          /* KSP, ... */
> 
> +#define PETSC_VERSION (PETSC_VERSION_MAJOR * 10000 + PETSC_VERSION_MINOR * 100)
> +
> +/* FIXME: PETSC 3.2 */
> +#if PETSC_VERSION >= 30200
> +typedef DM DA;
> +typedef PetscBool PetscTruth;
> +#  define VecDestroy(x)         (VecDestroy)(&(x))
> +#  define VecScatterDestroy(x)  (VecScatterDestroy)(&(x))
> +#  define MatDestroy(x)         (MatDestroy)(&(x))
> +#  define ISDestroy(x)          (ISDestroy)(&(x))
> +#  define KSPDestroy(x)         (KSPDestroy)(&(x))
> +#  define SNESDestroy(x)        (SNESDestroy)(&(x))
> +#  define PetscViewerDestroy(x) (PetscViewerDestroy)(&(x))
> +#  define PCDestroy(x)          (PCDestroy)(&(x))
> +#  define DADestroy(x)          (DMDestroy)(&(x))
> +#  define DAGetCorners          DMDAGetCorners
> +#  define DACreate3d            DMDACreate3d
> +#  define DACreateGlobalVector  DMCreateGlobalVector
> +#  define DAGetGlobalVector     DMGetGlobalVector
> +#  define DAGetInfo             DMDAGetInfo
> +#  define DAGetMatrix           DMGetMatrix
> +#  define DARestoreGlobalVector DMRestoreGlobalVector
> +#  define DAVecGetArray         DMDAVecGetArray
> +#  define DAVecRestoreArray     DMDAVecRestoreArray
> +#  define VecLoadIntoVector(viewer, vec) VecLoad (vec, viewer)
> +#  define DA_STENCIL_STAR       DMDA_STENCIL_STAR
> +#  define DA_XYZPERIODIC        DMDA_XYZPERIODIC
> +#endif



More information about the petsc-users mailing list