[petsc-users] error in calling VecGetArrayf90()
Peter Wang
pengxwang at hotmail.com
Tue Jan 4 22:10:43 CST 2011
In last question, the pointer xx_v is local data. However, if write them to the monitor or assign them to another array, the value is incorrect.
The protion of the code to display them on the monitor is like as following:
call MatGetOwnershipRange(A,Istart,Iend,ierr)
call VecGetArrayF90(x,xx_v,ierr) ! Vector x is matched with Matrix A in the same communicator
write(*,*)xx_v,myid ! write the poiner array together
do i=Istart,Iend-1
write(6,*)'check xx_v',i,xx_v(i),myid !write the element of the array one by one with local range (Istart to Iend-1)
enddo
=========The result is as following: ( the values of the elements from 7 to 20 are not correct !!)
3999.9999999999982 3999.9999999999982 3999.9999999999982 3999.9999999999982 3999.9999999999982 3000.0000000000005 3000.0000000000005 0
3000.0000000000009 3000.0000000000009 3000.0000000000009 2000.0000000000011 2000.0000000000011 2000.0000000000000 1
2000.0000000000009 2000.0000000000009 1000.0000000000003 1000.0000000000003 1000.0000000000003 999.99999999999989 2
1000.0000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 3
check xx_v 0 0.0000000000000000 0.0000000000000000 0
check xx_v 1 3999.9999999999982 3999.9999999999982 0
check xx_v 2 3999.9999999999982 3999.9999999999982 0
check xx_v 3 3999.9999999999982 3999.9999999999982 0
check xx_v 4 3999.9999999999982 3999.9999999999982 0
check xx_v 5 3999.9999999999982 3999.9999999999982 0
check xx_v 6 3000.0000000000005 3000.0000000000005 0
check xx_v 7 1.99665037664579820E-314 1.99665037664579820E-314 1
check xx_v 8 2.61360726650019422E-321 2.61360726650019422E-321 1
check xx_v 9 7.90505033345994471E-323 7.90505033345994471E-323 1
check xx_v 10 1.69759663277221785E-312 1.69759663277221785E-312 1
check xx_v 11 6.16846344148335980E-317 6.16846344148335980E-317 1
check xx_v 12 6.16846640587723485E-317 6.16846640587723485E-317 1
check xx_v 13 6.16838982570212945E-317 6.16838982570212945E-317 2
check xx_v 14 1.99665037664579820E-314 1.99665037664579820E-314 2
check xx_v 15 6.19790333112210216E-317 6.19790333112210216E-317 2
check xx_v 16 6.20255545324334334E-317 6.20255545324334334E-317 2
check xx_v 17 6.20225061473985929E-317 6.20225061473985929E-317 2
check xx_v 18 6.18242376037225006E-317 6.18242376037225006E-317 2
check xx_v 19 6.16846640587723485E-317 6.16846640587723485E-317 3
check xx_v 20 6.18113523716789609E-317 6.18113523716789609E-317 3
check xx_v 21 0.0000000000000000 0.0000000000000000 3
check xx_v 22 0.0000000000000000 0.0000000000000000 3
check xx_v 23 0.0000000000000000 0.0000000000000000 3
check xx_v 24 0.0000000000000000 0.0000000000000000 3
======The vector x is :
Process [0]
4000
4000
4000
4000
4000
3000
3000
Process [1]
3000
3000
3000
2000
2000
2000
Process [2]
2000
2000
1000
1000
1000
1000
Process [3]
1000
0
0
0
0
0
> Date: Tue, 4 Jan 2011 17:50:11 -0600
> From: balay at mcs.anl.gov
> To: petsc-users at mcs.anl.gov
> Subject: Re: [petsc-users] error in calling VecGetArrayf90()
>
> Did you included "finclude/petscvec.h90" in your code - as the example did?
>
> satish
>
> On Tue, 4 Jan 2011, Peter Wang wrote:
>
> >
> > I am trying to obtain the value of each element of a solution Vector by KSPsolve().
> >
> > The variables are defined according the example of ex4f90.F in \petsc-3.1-p5\src\snes\examples\tutorials\ as following,
> >
> > PetscScalar, pointer :: xx_v(:)
> >
> > ...
> > call KSPSolve(ksp,b,x,ierr)
> > call VecView(x,PETSC_VIEWER_STDOUT_WORLD,ierr)
> >
> > call VecGetArrayF90(x,xx_v,ierr)
> > call VecRestoreArrayF90(x,xx_v,ierr)
> >
> > ...
> >
> > But, the error keeps coming out when call VecGetArrayF90(x,xx_v,ierr) and call VecRestoreArrayF90(x,xx_v,ierr) are not commented off.
> >
> >
> > The error information shows:
> > Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range
> >
> > [0]PETSC ERROR: --------------------- Stack Frames ------------------------------------
> > [0]PETSC ERROR: Note: The EXACT line numbers in the stack are not available,
> > [0]PETSC ERROR: INSTEAD the line number of the start of the function
> > [0]PETSC ERROR: is given.
> > [0]PETSC ERROR: [0] F90Array1dCreate line 52 src/sys/f90-src/f90_cwrap.c
> > [0]PETSC ERROR: --------------------- Error Message ------------------------------------
> >
> > I checked the code according the example, but cannot see any difference to that. Just don't know why the pointer array xx_v doesn't work here? Thanks.
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110104/721064fb/attachment-0001.htm>
More information about the petsc-users
mailing list