[petsc-users] VecGetArrayF90 in PETSc/3.10 (Fortran)
Smith, Barry F.
bsmith at mcs.anl.gov
Sun Jan 6 17:05:06 CST 2019
What is the error message, cut and paste the entire message?
Barry
> On Jan 6, 2019, at 3:12 PM, Chang Liu via petsc-users <petsc-users at mcs.anl.gov> wrote:
>
> Hi All,
> Recently, when I am upgrading our code from 3.8 to 3.10, it always runs into error during VecGetArrayF90 call (it is Fortran90-based code). The reason we use is to access the array for our user-defined matrix-vector multiplication subroutine, for example:
>
> subroutine mymult(A,x,y,loco_ierr)
> !!!!!!!!!!!!!!! matrix-vector multiplication y=A.x !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> use mat_vec_mult,only:matvec
> implicit none
> Mat,intent(in)::A ! required by PETSc
> Vec,intent(in)::x
> Vec,intent(out)::y
> PetscErrorCode,intent(out)::loco_ierr
> PetscScalar,pointer::xx(:),yy(:)
>
> call VecGetArrayReadF90(x,xx,loco_ierr)
> call VecGetArrayF90(y,yy,loco_ierr)
> call matvec(xx,yy)
> call VecRestoreArrayReadF90(x,xx,loco_ierr)
> call VecRestoreArrayF90(y,yy,loco_ierr)
> return
> end subroutine mymult
>
> I checked the change log on the website and saw a statement:
> TAO:
>
> • Added VecLock{Push|Pop} calls around user callbacks; use of VecGetArray in user callbacks is now prohibited.
> Is there any relation to my issue? All the online PETSc examples and description for VecGetArray/VecGetArrayF90 are the same as PETSc/3.8. I tried to add/use VecLockPop/Push, but still doesn't work.
>
> I am confused and not sure what is the problem?
> Could I get some help?
> Thanks,
> --
> Chang Liu
> PhD candidate
> Dept. of Electrical & Computer Engineering
> Ph: 765-7143357
> Email: chang.liu at utexas.edu
More information about the petsc-users
mailing list