On 3 October 2010 14:57, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> ? 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
>

I would prefer to have:

ISCreateGeneralWithArray(comm,n,ptr,copy_mode,&is);

and then implement

ISCreateGeneral(comm,n,ptr,&is) {
return ISCreateGeneralWithArray(comm,n,ptr,PETSC_COPY_VALUES,&is);
}

What do you think?

-- 
Lisandro Dalcin
---------------
CIMEC (INTEC/CONICET-UNL)
Predio CONICET-Santa Fe
Colectora RN 168 Km 472, Paraje El Pozo
Tel: +54-342-4511594 (ext 1011)
Tel/Fax: +54-342-4511169

Reply via email to