Hello, Matt
First,thanks for your help, and I have a new recognition of MPI. As you
said(only part of a Vec is stored on each MPI process),I use MPI_Send,MPI_Recv
and MPI_Bcast to deal with it and get some right results.
However,I have not yet fully solved this problem.The number of loops of the
subroutine named PETSCSOLVE to solve Ax=b with PETSc is 20 times.I print the
results of each loop and find that the front 9 times are right. In the 10
time,there is a strange error: plug the result x into the equation I find that
Ax!=b.
The code and the A,x,b are shown below.So can you give me some hints? Thank
you very much!
Jim
(1)code
call MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr)
call VecView(b,PETSC_VIEWER_STDOUT_WORLD,ierr)
call KSPSolve(ksp,b,x,ierr)
call VecView(x,PETSC_VIEWER_STDOUT_WORLD,ierr)
(2)Ax=b
A:
type: mpiaij
row 0: (0, 1) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0) (7, 0) (8, 0)
row 1: (0, 0) (1, 1) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0) (7, 0) (8, 0)
row 2: (0, 0) (1, 0) (2, -2e-06) (3, -50) (4, 0) (5, 0) (6, 0) (7, -50)
(8, 0)
row 3: (0, 0) (1, 0) (2, -50) (3, 1.36265e+07) (4, 0) (5, 0) (6, 0) (7,
1.23877e+06) (8, 0)
row 4: (0, 0) (1, 0) (2, 0) (3, 0) (4, 1) (5, 0) (6, 0) (7, 0) (8, 0)
row 5: (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 1) (6, 0) (7, 0) (8, 0)
row 6: (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 1) (7, 0) (8, 0)
row 7: (0, 0) (1, 0) (2, -50) (3, 1.23877e+06) (4, 0) (5, 0) (6, 0) (7,
1.36265e+07) (8, 0)
row 8: (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0) (7, 0) (8, 1)
b:
type: mpi
Process [0]
0
0
-0.75
96949.5
0
Process [1]
0
-0.015
96949.5
-0.015
x:
type: mpi
Process [0]
0
0
1167.84
0.00819383
0
Process [1]
0
-0.00824055
0.00390865
-0.00824055
>? 2012-05-22 19:33:10?"Matthew Knepley" <knepley at gmail.com> ???
>On Tue, May 22, 2012 at 5:17 AM, w_ang_temp <w_ang_temp at 163.com> wrote:
>Hello
> I am a beginner of PETSc.I find the petsc-users lists is very useful,
> however I do not know how to ask a question in it. So can you tell me? >And
> below is what I want to ask.
> I am solving Ax=b with PETSc. And I only use it in a fortran subroutine to
> get x ,then the main function of my program use x to do other >things. The
> question is that: when the process is 1(mpiexec -n 1),the result of my
> program is ok, but when the process is more than 1 the > result is wrong.
> "Wrong" is not an acceptable description. I suspect that you do not
> understand that only part of a Vec
> is stored on each MPI process. First, get the book Using MPI, and then read
> the PETSc manual
> section on vectors.
> Thanks,
> Matt
> So where could be wrong? Can you give me some hints on how I can debug?
> Thanks.
> Jim
> --
> What most experimenters take for granted before they begin their experiments
> is infinitely more interesting than any results to which their > experiments
> lead.
> -- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120526/3339c187/attachment-0001.html>