On Tue, 3 Jul 2012, Barry Smith wrote:

> 
> On Jul 3, 2012, at 3:08 AM, Blaise Bourdin wrote:
> 
> > 
> > On Jul 3, 2012, at 4:10 AM, Barry Smith wrote:
> > 
> >> 
> >> Blaise,
> >> 
> >>  I don't understand why the patch does anything:
> >> 
> >> -  *ierr = VecRestoreArray(*v,0);if (*ierr) return;
> >> +  PetscScalar *fa;
> >> +  *ierr = F90Array1dAccess(a,PETSC_SCALAR,(void**)&fa 
> >> PETSC_F90_2PTR_PARAM(ptrd));
> >> +  *ierr = VecRestoreArray(*v,&fa);if (*ierr) return;
> >> *ierr = F90Array1dDestroy(&a,PETSC_SCALAR PETSC_F90_2PTR_PARAM(ptrd));
> >> 
> >> All that passing &fa into VecRestoreArray() does is cause fa to be zeroed. 
> >> Why would that have any affect on anything?
> > 
> > 
> > Not sure either, I quite don't understand this code, but I noticed that the 
> > logic of VecRestoreArrayF90 was different from that of 
> > DMDAVecRestoreArrayF90
> > 
> > src/vec/vec/interface/f90-custom/zvectorf90.c:33
> > PetscScalar *fa;
> > *__ierr = F90Array1dAccess(ptr,PETSC_SCALAR,(void**)&fa 
> > PETSC_F90_2PTR_PARAM(ptrd));if (*__ierr) return;
> > *__ierr = F90Array1dDestroy(ptr,PETSC_SCALAR PETSC_F90_2PTR_PARAM(ptrd));if 
> > (*__ierr) return;
> 
>      It could be the above line is important; but the Accesser and restore 
> array are not.
> 
>      I'll have Satish apply the patch.

pushed to petsc-3.3 [petsc-dev will get this update]

Satish

Reply via email to