[petsc-users] VecGetArrayF90 in PETSc/3.10 (Fortran)

Victor Eijkhout eijkhout at tacc.utexas.edu
Sun Jan 6 17:21:26 CST 2019


Hey Barry,

Chang is one of my users and I’m out of my depth here:

> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Corrupt argument:

> [0]PETSC ERROR: Invalid Pointer to Object: Parameter # 1

> [0]PETSC ERROR: #1 VecGetArray() line 1578 in

It looks like VecGetArrayF90 is no longer allowed in callbacks, which is what seems to be happening here.

Victor.


On Jan 6, 2019, at 5:05 PM, Smith, Barry F. via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:


  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<mailto: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<mailto:chang.liu at utexas.edu>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190106/0d4e81c3/attachment-0001.html>


More information about the petsc-users mailing list