On Thu, Aug 30, 2012 at 6:04 PM, Chris Eldred <span dir="ltr"><<a href="mailto:chris.eldred@gmail.com" target="_blank">chris.eldred@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Does this mean that I need a different DMComplex object for each<br>
section that I want to use? It seems like that would get expensive<br>
memory-wise pretty fast (unless DMComplexClone is just a shallow<br>
copy?)<br></blockquote><div><br></div><div>It is a shallow copy.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The reason I would like separate sections for each field is that<br>
different fields might have different stencil sizes- and there are a<br>
lot of constant fields that don't need any sort of stencils since they<br>
are generated and used only locally. So by having separate sections<br>
(and SF) for each field I can control what gets ghosted/communicated<br>
and what is not.<br></blockquote><div><br></div><div>Yes, you want different DMs. The way I organize things is to have a DM</div><div>for the solve, with all the unknown fields, and one for all auxiliary fields.</div><div>
Then if you want specific subsets of fields, you use DMCreateSubDM()</div><div>which uses DMComplexClone() underneath.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

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