I've got a bug with block sizes in multigrid that is getting harry and wanted 
to see if I could get some help.

The crux of the problem seems to be that different versions of VecScatterEnd 
are being called.  I've added a print statement in:

PetscErrorCode PETSCMAP1(VecScatterEnd)(VecScatter ctx,Vec xin,Vec 
yin,InsertMode addv,ScatterMode mode)

in vpscat.h. and with a two processor run see this:

*****[0]VecScatterEnd_3 start, N=27 Xin.bs=3 yin.bs=1
*****[1]VecScatterEnd_3 start, N=27 Xin.bs=3 yin.bs=1
*****[0]VecScatterEnd_2 start, N=27 Xin.bs=3 yin.bs=1
*****[1]VecScatterEnd_1 start, N=27 Xin.bs=3 yin.bs=1
[1]PETSC ERROR: VecScatterEnd_1() line 217 in 
/Users/markadams/Codes/petsc-dev/include/../src/vec/vec/utils/vpscat.h
[1]PETSC ERROR: VecScatterEnd() line 1620 in 
/Users/markadams/Codes/petsc-dev/src/vec/vec/utils/vscat.c
[1]PETSC ERROR: MatMultAdd_MPIAIJ() line 1118 in 
/Users/markadams/Codes/petsc-dev/src/mat/impls/aij/mpi/mpiaij.c
[1]PETSC ERROR: MatMultAdd() line 2372 in 
/Users/markadams/Codes/petsc-dev/src/mat/interface/matrix.c
[1]PETSC ERROR: MatInterpolateAdd() line 7439 in 
/Users/markadams/Codes/petsc-dev/src/mat/interface/matrix.c
[1]PETSC ERROR: PCMGMCycle_Private() line 52 in 
/Users/markadams/Codes/petsc-dev/src/ksp/pc/impls/mg/mg.c


This is a two level solve and the coarse grid is all on proc 0 and has a block 
size of 3. The fine grid has a block size of 2.  THis error, as you can see, 
comes from the interpolation from coarse to fine.  You can see from this output 
that the code called VecScatterEnd_3 successfully (the coarse grid) but when it 
does the interpolation proc 0 calls VecScatterEnd_2 (the destination is block 
size 2) and proc 1 calls VecScatterEnd_1 -- clearly wrong.

Anyway, I'll keep digging, but any ideas would be welcome.

Mark


Reply via email to