Well it is always "with array" since you always need to provide an array of 
indices, so why both with the redundant "withArray" (With 
VecCreateSeqWithArray() there is also a VecCreateSeq() that does not take an 
array, hence WithArray in that case is not redundant)?

   Regarding having two routines: I found having three almost identical 
routines unneededly complicated. You still want to have two routines, one is 
just a subset of the functionality of the second. That is redundant and hence 
unneeded.
 
   I do appreciate your suggestions, please keep on having them even if they 
don't always convince me.


   Barry

On Oct 3, 2010, at 5:45 PM, Lisandro Dalcin wrote:

> 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