[petsc-users] DAGlobalToLocalBegin()
Barry Smith
bsmith at mcs.anl.gov
Wed Mar 24 16:41:03 CDT 2010
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
>
More information about the petsc-users
mailing list