[petsc-dev] horrid bug
Mark F. Adams
mark.adams at columbia.edu
Fri May 18 13:03:32 CDT 2012
Thanks, I think I found it and pushed to solution. The problem was that the row block sizes where used to set the scatter maps in MatMult where column block size is needed. This splitting the row and column block sizes will probably cause more problems. This bug was only a fatal problem when the two block sizes where not multiples of each other (so my 3D problems worked fine).
Mark
On May 18, 2012, at 1:50 PM, Dmitry Karpeev wrote:
> The problem is most likely in the creation routine or, rather, in the arguments passed into it:
> is it possible that the Vecs fed into VecScatterCreate have different block sizes on different procs?
>
> Dmitry.
>
> On Fri, May 18, 2012 at 7:20 AM, Mark F. Adams <mark.adams at columbia.edu> wrote:
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120518/86a70fdd/attachment.html>
More information about the petsc-dev
mailing list