<div dir="ltr"><div dir="ltr">Hi Satish,<div>I included that part in the module... At the beginning, I have: </div><div><div>#include "petsc/finclude/petscsys.h"</div><div>#include "petsc/finclude/petscvec.h"</div><div>#include "petsc/finclude/petscmat.h"</div><div>#include "petsc/finclude/petscpc.h"</div><div>#include "petsc/finclude/petscksp.h"</div></div><div>use petscksp</div><div><br></div><div>Sorry, I didnt mention at first...</div><div>Thanks,</div><div>Chang</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Jan 6, 2019 at 4:45 PM Balay, Satish <<a href="mailto:balay@mcs.anl.gov">balay@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This code is missing:<br>
<br>
#include <petsc/finclude/petscvec.h><br>
      use petscvec<br>
<br>
Check:<br>
<br>
<a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/UsingFortran.html" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/UsingFortran.html</a><br>
<br>
Satish<br>
<br>
On Sun, 6 Jan 2019, Chang Liu via petsc-users wrote:<br>
<br>
> Hi All,<br>
> Recently, when I am upgrading our code from 3.8 to 3.10, it always runs<br>
> into error during VecGetArrayF90 call (it is Fortran90-based code). The<br>
> reason we use is to access the array for our user-defined matrix-vector<br>
> multiplication subroutine, for example:<br>
> <br>
> *  subroutine mymult(A,x,y,loco_ierr) *<br>
> *   !!!!!!!!!!!!!!! matrix-vector multiplication  y=A.x<br>
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*<br>
> *    use mat_vec_mult,only:matvec*<br>
> *    implicit none*<br>
> *    Mat,intent(in)::A ! required by PETSc*<br>
> *    Vec,intent(in)::x*<br>
> *    Vec,intent(out)::y*<br>
> *    PetscErrorCode,intent(out)::loco_ierr*<br>
> *    PetscScalar,pointer::xx(:),yy(:)*<br>
> <br>
> *    call VecGetArrayReadF90(x,xx,loco_ierr)*<br>
> *    call VecGetArrayF90(y,yy,loco_ierr)*<br>
> *    call matvec(xx,yy)*<br>
> *    call VecRestoreArrayReadF90(x,xx,loco_ierr)*<br>
> *    call VecRestoreArrayF90(y,yy,loco_ierr)*<br>
> *    return*<br>
> * end subroutine mymult*<br>
> <br>
> I checked the change log on the website and saw a statement:<br>
> TAO:<br>
> <br>
>    - Added VecLock{Push|Pop} calls around user callbacks; use of<br>
>    VecGetArray in user callbacks is now prohibited.<br>
> <br>
> Is there any relation to my issue? All the online PETSc examples and<br>
> description for VecGetArray/VecGetArrayF90 are the same as PETSc/3.8.  I<br>
> tried to add/use VecLockPop/Push, but still doesn't work.<br>
> <br>
> I am confused and not sure what is the problem?<br>
> Could I get some help?<br>
> Thanks,<br>
> <br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Chang Liu</div><div>PhD candidate</div><div>Dept. of Electrical & Computer Engineering</div><div>Ph: 765-7143357</div><div>Email: <a href="mailto:chang.liu@utexas.edu" target="_blank">chang.liu@utexas.edu</a></div></div></div></div></div>