[petsc-dev] changed ISCreateGeneral/NC/WithArray()

Barry Smith bsmith at mcs.anl.gov
Sun Oct 3 12:57:45 CDT 2010


   I find the three routines ISCreateGeneral(), ISCreateGeneralNC() and ISCreateGeneralWithArray() to be confusing and code redundant.

   Therefore in PETSc-dev I have introduced 

/*E
    PetscCopyMode  - Determines how an array passed to certain functions is copied or retained

   Level: beginner

$   PETSC_COPY_VALUES - the array values are copied into new space, the user is free to reuse or delete the passed in array
$   PETSC_OWN_POINTER - the array values are NOT copied, the object takes ownership of the array and will free it later, the user cannot change or 
$                       delete the array. The array MUST have been obtained with PetscMalloc(). Hence this mode cannot be used in Fortran.
$   PETSC_USE_POINTER - the array values are NOT copied, the object uses the array but does NOT take ownership of the array. The user cannot use 
                        the array but the user must delete the array after the object is destroyed.

E*/
typedef enum { PETSC_COPY_VALUES, PETSC_OWN_POINTER, PETSC_USE_POINTER} PetscCopyMode;
extern const char *PetscCopyModes[];

and merged  ISCreateGeneral/NC/WithArray() into a single routine with an additional PetscCopyMode argument.

I have also merged ISLocalToGlobalMappingCreate() and ISLocalToGlobalMappingCreateNC() into a single routine.

There may be other places we can use this paradigm in the future, keep your eyes open,

  Happy computing,

    Barry




More information about the petsc-dev mailing list