possible bug in DMCompositeGetMatrix().
Barry Smith
bsmith at mcs.anl.gov
Mon Jul 27 21:04:16 CDT 2009
You cannot use the stencil operations to put values into a
"composite matrix". The numbering of rows and columns of the composite
matrix reflect all the different variables (unknowns) sp do not match
what they are for a single component.
Barry
On Jul 26, 2009, at 6:51 PM, (Rebecca) Xuefei YUAN wrote:
> Hi,
>
> I am working on an optimization problem, in which I would like to
> assemble a Jacobian matrix. Thus
> DMMGSetSNES(dmmg,FormFunction,FormJacobian) is called.
>
> In damgsnes.c:637, in calling DMGetMatrix(), it calls
> DMCompositeGetMatrix() where the temp matrix Atmp has been freed
> before it passes any information to J at pack.c:1722 and 1774.
>
> So after calling DMGetMatrix() in DMMGSetSNES, the stencil of the
> dmmg[i]->B has unchanged, i.e.,
>
> (gdb) p dmmg[0]->B->stencil
> $107 = {dim = 0, dims = {0, 0, 0, 0}, starts = {0, 0, 0, 0}, noc =
> PETSC_FALSE}
> (gdb) where
> #0 DMMGSetSNES (dmmg=0x8856208, function=0x804c84f <FormFunction>,
> jacobian=0x8052932 <FormJacobian>) at damgsnes.c:641
> #1 0x0804c246 in main (argc=Cannot access memory at address 0x0
> ) at tworeggt.c:126
>
> I compare this with
> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex18.c.html
>
> and it shows that the stencil has been carried out and passed to
> dmmg[0]->B as follows:
>
> (gdb) p dmmg[i]->B->stencil
> $80 = {dim = 2, dims = {5, 5, 1, 0}, starts = {0, 0, 0, 0}, noc =
> PETSC_TRUE}
> (gdb) where
> #0 DMMGSetSNES (dmmg=0x884b530, function=0x804c364 <FormFunction>,
> jacobian=0x804d34d <FormJacobian>) at damgsnes.c:642
> #1 0x0804b969 in main (argc=Cannot access memory at address 0x2
> ) at ex18.c:100
>
> Because of this missing stencil of Jacobian matrix, I get the error
> code as follows:
> Program received signal SIGSEGV, Segmentation fault.
> 0x082447c2 in ISLocalToGlobalMappingApply (mapping=0x0, N=1,
> in=0xbff8f250,
> out=0xbff8ce14) at /home/rebecca/soft/petsc-3.0.0-p1/include/
> petscis.h:129
> 129 PetscInt i,*idx = mapping->indices,Nmax = mapping->n;
> (gdb) where
> #0 0x082447c2 in ISLocalToGlobalMappingApply (mapping=0x0, N=1,
> in=0xbff8f250, out=0xbff8ce14)
> at /home/rebecca/soft/petsc-3.0.0-p1/include/petscis.h:129
> #1 0x0824440c in MatSetValuesLocal (mat=0x88825e8, nrow=1,
> irow=0xbff8f250,
> ncol=4, icol=0xbff8ee50, y=0xbff8f628, addv=INSERT_VALUES) at
> matrix.c:1583
> #2 0x08240aae in MatSetValuesStencil (mat=0x88825e8, m=1,
> idxm=0xbff8f6b8,
> n=4, idxn=0xbff8f4b4, v=0xbff8f628, addv=INSERT_VALUES) at
> matrix.c:1099
> #3 0x08053835 in FormJacobian (snes=0x8874700, X=0x8856778,
> J=0x88747d0,
> B=0x88747d4, flg=0xbff8f8d4, ptr=0x8856338) at tworeggt.c:937
> #4 0x0805a5cf in DMMGComputeJacobian_Multigrid (snes=0x8874700,
> X=0x8856778,
> J=0x88747d0, B=0x88747d4, flag=0xbff8f8d4, ptr=0x8856208) at
> damgsnes.c:60
> #5 0x0806b18a in SNESComputeJacobian (snes=0x8874700, X=0x8856778,
> A=0x88747d0, B=0x88747d4, flg=0xbff8f8d4) at snes.c:1111
> #6 0x08084945 in SNESSolve_LS (snes=0x8874700) at ls.c:189
> #7 0x08073198 in SNESSolve (snes=0x8874700, b=0x0, x=0x8856778) at
> snes.c:2221
> #8 0x0805d5f9 in DMMGSolveSNES (dmmg=0x8856208, level=0) at
> damgsnes.c:510
> #9 0x08056e38 in DMMGSolve (dmmg=0x8856208) at damg.c:372
> #10 0x0804c3fe in main (argc=128, argv=0xbff90c04) at tworeggt.c:131
>
> I think there might be a bug in DMCompositeGetMatrix().
>
> Thanks very much!
>
> Cheers,
>
> --
> (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