Hello,

The PETSC_VIEWER_BINARY_ command is supposed to create a binary Petsc Viewer, 
then MatView VecView suppose to add matrices and vectors to the binary output 
file. However, it seems that the viewer gives different output if you use 
different number of processors. Below is a more detailed description of the 
problem from an example.

In test example snes/examples/tutorial/ex70.c, I add the following command to 
the StokesWriteSolution function:

    PetscViewer viewer = PETSC_VIEWER_BINARY_(PETSC_COMM_WORLD);

    MatView(s->subA[0],viewer);

    MatView(s->subA[1],viewer);

    MatView(s->subA[2],viewer);

    MatView(s->subA[3],viewer);

    VecView(s->x,viewer);

    VecView(s->b,viewer);

    VecView(s->y,viewer);


Now I run make ex70 to compile the code, and run the code with the options

-@${MPIEXEC} -n 4 ./ex70 -nx 100 -ny 100 -pc_type fieldsplit 
-fieldsplit_0_pc_type jacobi -fieldsplit_1_pc_type jacobi  -pc_fieldsplit_type 
SCHUR -ksp_monitor_short -ksp_converged_reason -ksp_rtol 1e1 
-fieldsplit_1_ksp_rtol 1e-2 -fieldsplit_0_ksp_rtol 1e-4 
-fieldsplit_1_ksp_max_it 100  -fieldsplit_0_ksp_max_it 1000 -ksp_type fgmres


Here you can see I have 4 processors running at the same time. I read in the 
output from MATLAB using the

command [A,B,C,D,x,b,y] = PetscBinaryRead('binaryoutput').


And I visualize the variable y by the commands:

mesh(reshape(y(20001:30000),100,100))

mesh(reshape(y(10001:20000),100,100))

mesh(reshape(y(1:10000),100,100))


The output plots are different from what I get if I use 1 processor.


Best,

Hui

Reply via email to