[petsc-dev] DMSetDefaultSection destroys old sections

Matthew Knepley knepley at gmail.com
Thu Aug 30 19:38:21 CDT 2012


On Thu, Aug 30, 2012 at 6:04 PM, Chris Eldred <chris.eldred at gmail.com>wrote:

> Does this mean that I need a different DMComplex object for each
> section that I want to use? It seems like that would get expensive
> memory-wise pretty fast (unless DMComplexClone is just a shallow
> copy?)
>

It is a shallow copy.


> The reason I would like separate sections for each field is that
> different fields might have different stencil sizes- and there are a
> lot of constant fields that don't need any sort of stencils since they
> are generated and used only locally. So by having separate sections
> (and SF) for each field I can control what gets ghosted/communicated
> and what is not.
>

Yes, you want different DMs. The way I organize things is to have a DM
for the solve, with all the unknown fields, and one for all auxiliary
fields.
Then if you want specific subsets of fields, you use DMCreateSubDM()
which uses DMComplexClone() underneath.

   Matt


> On Thu, Aug 30, 2012 at 4:54 PM, Matthew Knepley <knepley at gmail.com>
> wrote:
> > On Thu, Aug 30, 2012 at 5:51 PM, Chris Eldred <chris.eldred at gmail.com>
> > wrote:
> >>
> >> It appears that PetscObjectReference works for DM and Vec (in
> >> Fortran), but not for Section. Is this possibly related to the Fortran
> >> stub/binding for PetscObjectReference?
> >
> >
> > Sorry, I was not paying attention. PetscSection is not a PetscObject.
> That
> > is also why it
> > is not referenced. It was originally designed to be a helper object. So,
> in
> > order to
> > do what you want, currently (and actually this is how the other PETSc
> people
> > want
> > DM to behave), you should do
> >
> >   call DMComplexClone(dm, dmNew, ierr)
> >   call DMSetDefaultSection(dmNew, sectionNew, ierr)
> >
> >    Matt
> >
> >>
> >> On Thu, Aug 30, 2012 at 4:44 PM, Jed Brown <jedbrown at mcs.anl.gov>
> wrote:
> >> > You must have something else going on. The following works fine, for
> >> > example.
> >> >
> >> > diff --git a/src/snes/examples/tutorials/ex5f.F
> >> > b/src/snes/examples/tutorials/ex5f.F
> >> > --- a/src/snes/examples/tutorials/ex5f.F
> >> > +++ b/src/snes/examples/tutorials/ex5f.F
> >> > @@ -58,6 +58,7 @@
> >> >        PetscErrorCode ierr
> >> >        PetscReal      lambda_max,lambda_min
> >> >        PetscBool      flg
> >> > +      DM da2
> >> >
> >> >
> >> >  !  Note: Any user-defined Fortran routines (such as
> FormJacobianLocal)
> >> > @@ -144,6 +145,9 @@
> >> >        call DMDASetLocalFunction(da,FormFunctionLocal,ierr)
> >> >        call DMDASetLocalJacobian(da,FormJacobianLocal,ierr)
> >> >        call SNESSetDM(snes,da,ierr)
> >> > +      da2 = da
> >> > +      call PetscObjectReference(da2,ierr)
> >> > +      call DMDestroy(da2,ierr)
> >> >
> >> >  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> >> >  !  Customize nonlinear solver; set runtime options
> >> >
> >> >
> >> > On Thu, Aug 30, 2012 at 5:36 PM, Chris Eldred <chris.eldred at gmail.com
> >
> >> > wrote:
> >> >>
> >> >> I get an error when I try to use that:
> >> >>
> >> >> [0]PETSC ERROR: --------------------- Error Message
> >> >> ------------------------------------
> >> >> [0]PETSC ERROR: Corrupt argument:
> >> >> see http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind!
> >> >> [0]PETSC ERROR: Invalid type of object: Parameter # 1!
> >> >> [0]PETSC ERROR:
> >> >>
> >> >>
> ------------------------------------------------------------------------
> >> >> [0]PETSC ERROR: Petsc Development HG revision:
> >> >> 56f27b189e4fd57f5a4b7ffd6aa6bb08bd8a4d5b  HG Date: Wed Aug 29
> 12:03:50
> >> >> 2012 -0500
> >> >> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
> >> >> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> >> >> [0]PETSC ERROR: See docs/index.html for manual pages.
> >> >> [0]PETSC ERROR:
> >> >>
> >> >>
> ------------------------------------------------------------------------
> >> >> [0]PETSC ERROR: ./swe on a arch-linu named Puget-101334 by user Thu
> >> >> Aug 30 16:35:51 2012
> >> >> [0]PETSC ERROR: Libraries linked from
> >> >> /home/user/Desktop/LIBRARIES/petsc-dev/arch-linux2-cxx-debug/lib
> >> >> [0]PETSC ERROR: Configure run at Wed Aug 29 12:49:26 2012
> >> >> [0]PETSC ERROR: Configure options --download-boost --download-chaco
> >> >> --download-ctetgen --download-f-blas-lapack --download-fiat
> >> >> --download-generator --download-metis --download-ml --download-mpich
> >> >> --download-parmetis --download-scientificpython --download-triangle
> >> >> --with-clanguage=cxx --with-dynamic-loading --with-shared-libraries
> >> >> --with-sieve PETSC_ARCH=arch-linux2-cxx-debug
> >> >> [0]PETSC ERROR:
> >> >>
> >> >>
> ------------------------------------------------------------------------
> >> >> [0]PETSC ERROR: PetscObjectReference() line 378 in
> >> >> /home/user/Desktop/LIBRARIES/petsc-dev/src/sys/objects/inherit.c
> >> >> application called MPI_Abort(MPI_COMM_WORLD, 64) - process 0
> >> >> [unset]: aborting job:
> >> >> application called MPI_Abort(MPI_COMM_WORLD, 64) - process 0
> >> >>
> >> >>
> >> >> On Thu, Aug 30, 2012 at 4:32 PM, Jed Brown <jedbrown at mcs.anl.gov>
> >> >> wrote:
> >> >> > On Thu, Aug 30, 2012 at 5:30 PM, Chris Eldred
> >> >> > <chris.eldred at gmail.com>
> >> >> > wrote:
> >> >> >>
> >> >> >> How would I use PetscObjectReference((PetscObject)section) in
> >> >> >> Fortran?
> >> >> >
> >> >> >
> >> >> > call PetscObjectReference(section,ierr)
> >> >> >
> >> >> >>
> >> >> >>
> >> >> >> On Thu, Aug 30, 2012 at 4:16 PM, Jed Brown <jedbrown at mcs.anl.gov>
> >> >> >> wrote:
> >> >> >> > On Thu, Aug 30, 2012 at 5:12 PM, Matthew Knepley
> >> >> >> > <knepley at gmail.com>
> >> >> >> > wrote:
> >> >> >> >>
> >> >> >> >> Its not wrong. This is the way I wanted it. You set the
> >> >> >> >> PetscSection
> >> >> >> >> and
> >> >> >> >> give up control. If you
> >> >> >> >> do not want to give up control, then call
> PetscObjectReference()
> >> >> >> >> before
> >> >> >> >> passing it in.
> >> >> >> >
> >> >> >> >
> >> >> >> > Since this is (a) different from everything else in PETSc and
> (b)
> >> >> >> > not
> >> >> >> > explicitly documented, it is doubly wrong.
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> --
> >> >> >> Chris Eldred
> >> >> >> DOE Computational Science Graduate Fellow
> >> >> >> Graduate Student, Atmospheric Science, Colorado State University
> >> >> >> B.S. Applied Computational Physics, Carnegie Mellon University,
> 2009
> >> >> >> chris.eldred at gmail.com
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> Chris Eldred
> >> >> DOE Computational Science Graduate Fellow
> >> >> Graduate Student, Atmospheric Science, Colorado State University
> >> >> B.S. Applied Computational Physics, Carnegie Mellon University, 2009
> >> >> chris.eldred at gmail.com
> >> >
> >> >
> >>
> >>
> >>
> >> --
> >> Chris Eldred
> >> DOE Computational Science Graduate Fellow
> >> Graduate Student, Atmospheric Science, Colorado State University
> >> B.S. Applied Computational Physics, Carnegie Mellon University, 2009
> >> chris.eldred at gmail.com
> >
> >
> >
> >
> > --
> > 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
>
>
>
> --
> Chris Eldred
> DOE Computational Science Graduate Fellow
> Graduate Student, Atmospheric Science, Colorado State University
> B.S. Applied Computational Physics, Carnegie Mellon University, 2009
> chris.eldred at gmail.com
>



-- 
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120830/0f412144/attachment.html>


More information about the petsc-dev mailing list