Dear Barry, Thanks for pointing out this issue and my problem is solved with -dmmg_is_coloring_type global. I will add FormJacobian() in my code, so this won't be a problem for me later on.
Have a good night! Rebecca Quoting Barry Smith <bsmith at mcs.anl.gov>: > > Rebecca, > > I apologize, there is an error in our code. In DMMGCreate() is the > line (including the comment) > > p[i]->isctype = IS_COLORING_GHOSTED; /* default to faster > version, requires DMMGSetSNESLocal() */ > > This code is fundamentally wrong, the only place we check that > DMMGSetSNESLocal() is used is in the comment!!! > > These the default value doesn't work when you use DMMGSetSNES(), it > only works as Matt points out when you change the value from the > default. > > I have fixed this in the petsc-dev source. > > I apologize for the run-around on this and that it took us so long > to deal with it properly. > > Barry > > PETSc developers, it is also disgraceful that we don't have a single > test case that detects this problem! > > . > On Mar 24, 2010, at 4:12 PM, (Rebecca) Xuefei YUAN wrote: > >> Dear Matt, >> >> Thanks a lot! >> >> Yes, when >> >> -dmmg_iscoloring_type global >> >> is applied, this is right now. But what is difference between >> IS_COLORING_GHOSTED and IS_COLORING_GLOBAL? >> >> Cheers, >> >> Rebecca >> >> >> Quoting Matthew Knepley <knepley at gmail.com>: >> >>> On Wed, Mar 24, 2010 at 3:01 PM, (Rebecca) Xuefei YUAN >>> <xy2102 at columbia.edu>wrote: >>> >>>> Dear Jed and Matt, >>>> >>> >>> This is a genuine bug. It is in DMMGComputeJacobianWithFD() and only occurs >>> when >>> IS_COLORING_GHOSTED is true. So, using IS_COLORING_GLOBAL would probably >>> work here (can't look up the option right now). >>> >>> Barry, what is supposed to happen here? Clearly a local vector is being >>> passed where >>> a global vector is expected (at least part of the time). >>> >>> Matt >>> >>> >>>> Yes, X and F are global and localFIELD is serial. I ran with np=2. >>>> >>>> The error I get is: >>>> >>>> >>>> ************************************************** >>>> 0 SNES Function norm 1.095445115010e+01 >>>> [1]PETSC ERROR: VecScatterBegin() line 1538 in src/vec/vec/utils/vscat.c >>>> Vector wrong size 100 for scatter 60 (scatter forward and vector >>>> from != ctx >>>> from size) >>>> [0]PETSC ERROR: VecScatterBegin() line 1538 in src/vec/vec/utils/vscat.c >>>> Vector wrong size 100 for scatter 60 (scatter forward and vector >>>> from != ctx >>>> from size) >>>> >>>> >>>> from gdb, I get: >>>> >>>> >>>> Program received signal SIGABRT, Aborted. >>>> [Switching to Thread 0xb7c396b0 (LWP 6301)] >>>> 0xb7f09410 in __kernel_vsyscall () >>>> (gdb) where >>>> #0 0xb7f09410 in __kernel_vsyscall () >>>> #1 0xb7c89085 in raise () from /lib/tls/i686/cmov/libc.so.6 >>>> #2 0xb7c8aa01 in abort () from /lib/tls/i686/cmov/libc.so.6 >>>> #3 0x087d591d in PetscAbortErrorHandler (line=1538, >>>> fun=0x88fe26d "VecScatterBegin", file=0x88fd9f7 "vscat.c", >>>> dir=0x88fd9ff "src/vec/vec/utils/", n=60, p=1, >>>> mess=0xbfd31124 "Vector wrong size 100 for scatter 60 (scatter forward >>>> and v >>>> ector from != ctx from size)", ctx=0x0) at errabort.c:62 >>>> #4 0x0874a88e in PetscError (line=1538, func=0x88fe26d "VecScatterBegin", >>>> file=0x88fd9f7 "vscat.c", dir=0x88fd9ff "src/vec/vec/utils/", n=60, p=1, >>>> mess=0x88fe3a0 "Vector wrong size %D for scatter %D (scatter forward and >>>> vec >>>> tor from != ctx from size)") at err.c:482 >>>> #5 0x086558cc in VecScatterBegin (inctx=0x8a393b0, x=0x8b39cc0, >>>> y=0x8b3b310, >>>> addv=INSERT_VALUES, mode=SCATTER_FORWARD) at vscat.c:1538 >>>> #6 0x0828b54c in DAGlobalToLocalBegin (da=0x8a2d360, g=0x8b39cc0, >>>> mode=INSERT_VALUES, l=0x8b3b310) at dagtol.c:50 >>>> #7 0x080f1b25 in FormFunction (snes=0x8a47840, X=0x8b39cc0, F=0x8adb2f0, >>>> dummg=0x8a2b810) at twgcqt2unffnictv.c:8382 >>>> #8 0x0860c63d in MatFDColoringApply_AIJ (J=0x8a6bbb0, coloring=0x8aa7b40, >>>> x1=0x8b12a60, flag=0xbfd32164, sctx=0x8a47840) at fdmatrix.c:680 >>>> #9 0x0860abaf in MatFDColoringApply (J=0x8a6bbb0, coloring=0x8aa7b40, >>>> x1=0x8b12a60, flag=0xbfd32164, sctx=0x8a47840) at fdmatrix.c:521 >>>> #10 0x08122e45 in SNESDefaultComputeJacobianColor (snes=0x8a47840, >>>> ---Type <return> to continue, or q <return> to quit--- >>>> x1=0x8b12a60, J=0x8a47910, B=0x8a47914, flag=0xbfd32164, ctx=0x8aa7b40) >>>> at snesj2.c:49 >>>> #11 0x0811c7cf in DMMGComputeJacobianWithFD (snes=0x8a47840, x1=0x8a39c20, >>>> J=0x8a47910, B=0x8a47914, flag=0xbfd32164, ctx=0x8a2b810) at >>>> damgsnes.c:365 >>>> #12 0x0811a883 in DMMGComputeJacobian_Multigrid (snes=0x8a47840, >>>> X=0x8a39c20, >>>> J=0x8a47910, B=0x8a47914, flag=0xbfd32164, ptr=0x8a2b6b0) at >>>> damgsnes.c:60 >>>> #13 0x080fc610 in SNESComputeJacobian (snes=0x8a47840, X=0x8a39c20, >>>> A=0x8a47910, B=0x8a47914, flg=0xbfd32164) at snes.c:1188 >>>> #14 0x08124471 in SNESSolve_LS (snes=0x8a47840) at ls.c:189 >>>> #15 0x08103fac in SNESSolve (snes=0x8a47840, b=0x0, x=0x8a39c20) at >>>> snes.c:2242 >>>> #16 0x0811db31 in DMMGSolveSNES (dmmg=0x8a2b6b0, level=0) at >>>> damgsnes.c:510 >>>> #17 0x08117029 in DMMGSolve (dmmg=0x8a2b6b0) at damg.c:313 >>>> #18 0x08052ecc in Solve (dmmg=0x8a2b6b0) at twgcqt2unffnictv.c:679 >>>> #19 0x0804def5 in main (argc=Cannot access memory at address 0x189d >>>> ) at twgcqt2unffnictv.c:303 >>>> >>>> >>>> Same things happened to ex25.c from >>>> >>>> >>>> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex25.c.html >>>> >>>> >>>> with >>>> >>>> ierr = DMMGSetSNES(dmmg,FormFunction,0);CHKERRQ(ierr); >>>> // ierr = >>>> DMMGSetSNESLocal(dmmg,FormFunctionLocal,0,ad_FormFunctionLocal,0);CHKERRQ(ierr); >>>> >>>> >>>> Thanks a lot! >>>> >>>> Rebecca >>>> >>>> >>>> >>>> >>>> Quoting Jed Brown <jed at 59A2.org>: >>>> >>>> On Wed, 24 Mar 2010 15:41:38 -0400, "(Rebecca) Xuefei YUAN" < >>>>> xy2102 at columbia.edu> wrote: >>>>> >>>>>> Hi,all, >>>>>> >>>>>> I have an error from >>>>>> >>>>>> ierr = DAGlobalToLocalBegin(dafield,X,INSERT_VALUES,localFIELD); >>>>>> CHKERRQ(ierr); >>>>>> >>>>>> where >>>>>> >>>>>> ierr = DMMGSetSNES(dmmg, FormFunction,0);CHKERRQ(ierr); is used for >>>>>> set up the SNES. >>>>>> >>>>>> So I check up the vector size of X, F, localFIELD where >>>>>> ierr = DAGetLocalVector(dafield,&localFIELD);CHKERRQ(ierr); >>>>>> PetscInt nlocalFIELD,nX,nF; >>>>>> ierr = VecGetSize(localFIELD,&nlocalFIELD);CHKERRQ(ierr); >>>>>> ierr = VecGetSize(X,&nX);CHKERRQ(ierr); >>>>>> ierr = VecGetSize(F,&nF);CHKERRQ(ierr); >>>>>> ierr = DAGlobalToLocalBegin(dafield,X,INSERT_VALUES,localFIELD); >>>>>> CHKERRQ(ierr); >>>>>> ierr = >>>>>> DAGlobalToLocalEnd(dafield,X,INSERT_VALUES,localFIELD);CHKERRQ(ierr); >>>>>> ierr = >>>>>> DAVecGetArray(dafield,localFIELD,&localfield);CHKERRQ(ierr); >>>>>> >>>>>> >>>>>> (gdb) disp nX >>>>>> 1: nX = 120 >>>>>> (gdb) disp nF >>>>>> 2: nF = 120 >>>>>> (gdb) disp nlocalFIELD >>>>>> 3: nlocalFIELD = 100 >>>>>> >>>>> >>>>> Is this run in parallel? Note that the sizes of X and F are global, >>>>> while localFIELD is serial. What error did you get? >>>>> >>>>> >>>>> Matt, it's clearly FormFunction and not FormFunctionLocal because the >>>>> function prototype has the SNES. >>>>> >>>>> Jed >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> (Rebecca) Xuefei YUAN >>>> Department of Applied Physics and Applied Mathematics >>>> Columbia University >>>> Tel:917-399-8032 >>>> www.columbia.edu/~xy2102 >>>> >>>> >>> >>> >>> -- >>> 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 >>> >> >> >> >> -- >> (Rebecca) Xuefei YUAN >> Department of Applied Physics and Applied Mathematics >> Columbia University >> Tel:917-399-8032 >> www.columbia.edu/~xy2102 >> -- (Rebecca) Xuefei YUAN Department of Applied Physics and Applied Mathematics Columbia University Tel:917-399-8032 www.columbia.edu/~xy2102