[petsc-dev] Pairing DM{Get/Restore}GlobalVector() before/after SNESSolve() breaks vinewtonrsls
Barry Smith
bsmith at mcs.anl.gov
Thu Apr 30 13:13:58 CDT 2015
> On Apr 30, 2015, at 9:06 AM, Ed Bueler <elbueler at alaska.edu> wrote:
>
> O.k., I will just avoid holding it in that way.
>
> Unfortunately, the man page
>
> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetGlobalVector.html
>
> gives no hint that a "complicated PETSc solver", a presumably well-defined phrase ;-), interferes with this particular DM functionality.
You are right, I've added a little to the manual pages on this.
You are also right that it is not a well-defined issue; I don't have a good solution to that problem.
Barry
>
> Ed
>
>
> On Wed, Apr 29, 2015 at 9:57 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> To quote Steve Jobs, you are using it wrong :-)
>
> The DMGetXXX routines are not intended to be used to obtain vectors that are kept around while complicated PETSc solvers are being used. They are for obtaining work vectors for example for a function evaluation inside an ODE or nonlinear solver call. If you plan to keep it around you should use the Create versions.
>
> Barry
>
> > On Apr 29, 2015, at 2:38 PM, Ed Bueler <elbueler at alaska.edu> wrote:
> >
> > Dear Petsc --
> >
> > The patch at bottom is off of current master. Applying it shows that in SNES example ex9.c the rsls version of SNESVI breaks. Note that "./ex9 -snes_type vinewtonssls" does not break.
> >
> > The expected behavior is no change, but the actual behavior with the patched version gives a "Clearing DM of global vectors that has a global vector obtained with DMGetGlobalVector()" message. That is,
> >
> > $ ./ex9
> > setup done: grid Mx,My = 11,11 with spacing dx,dy = 0.4000,0.4000
> > [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
> > [0]PETSC ERROR: Object is in wrong state
> > [0]PETSC ERROR: Clearing DM of global vectors that has a global vector obtained with DMGetGlobalVector()
> > [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
> > [0]PETSC ERROR: Petsc Development GIT revision: v3.5.3-2797-g27699ca GIT Date: 2015-04-27 23:20:45 -0500
> > [0]PETSC ERROR: ./ex9 on a linux-c-opt named bueler-leopard by ed Wed Apr 29 13:34:36 2015
> > [0]PETSC ERROR: Configure options --download-mpich --with-debugging=0
> > [0]PETSC ERROR: #1 DMClearGlobalVectors() line 196 in /home/ed/petsc/src/dm/interface/dmget.c
> > [0]PETSC ERROR: #2 DMSetVI() line 238 in /home/ed/petsc/src/snes/impls/vi/rs/virs.c
> > [0]PETSC ERROR: #3 SNESSolve_VINEWTONRSLS() line 461 in /home/ed/petsc/src/snes/impls/vi/rs/virs.c
> > [0]PETSC ERROR: #4 SNESSolve() line 3884 in /home/ed/petsc/src/snes/interface/snes.c
> > [0]PETSC ERROR: #5 main() line 103 in /home/ed/petsc/src/snes/examples/tutorials/ex9.c
> > [0]PETSC ERROR: No PETSc Option Table entries
> > [0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint at mcs.anl.gov----------
> > application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0
> > [unset]: aborting job:
> > application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0
> >
> >
> > Note that all I have done is use DMGetGlobalVector() on the DM for a dummy vector. I guess that since the SNES messes with the DM things get confused.
> >
> > An easy workaround is to use DMCreateGlobalVector() or VecDuplicate() etc., so no crisis.
> >
> > Generally rsls is doing heroic work for me, so no serious complaints.
> >
> > Ed
> >
> >
> >
> > From c9a0f2dd913b3a0ab3cf39379d9361d10d22a2b4 Mon Sep 17 00:00:00 2001
> > From: Ed Bueler <elbueler at alaska.edu>
> > Date: Wed, 29 Apr 2015 13:29:02 -0600
> > Subject: [PATCH] Pairing DM{Get/Restore}GlobalVector() before/after
> > SNESSolve() breaks vinewtonrsls.
> >
> > ---
> > src/snes/examples/tutorials/ex9.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/src/snes/examples/tutorials/ex9.c b/src/snes/examples/tutorials/ex9.c
> > index ca4d344..3afa8b9 100644
> > --- a/src/snes/examples/tutorials/ex9.c
> > +++ b/src/snes/examples/tutorials/ex9.c
> > @@ -96,9 +96,14 @@ int main(int argc,char **argv)
> > ierr = PetscPrintf(PETSC_COMM_WORLD,"setup done: grid Mx,My = %D,%D with spacing dx,dy = %.4f,%.4f\n",
> > info.mx,info.my,4.0/(PetscReal)(info.mx-1),4.0/(PetscReal)(info.my-1));CHKERRQ(ierr);
> >
> > +Vec foo;
> > +ierr = DMGetGlobalVector(da,&foo);CHKERRQ(ierr);
> > +
> > /* solve nonlinear system */
> > ierr = SNESSolve(snes,NULL,u);CHKERRQ(ierr);
> >
> > +ierr = DMRestoreGlobalVector(da,&foo);CHKERRQ(ierr);
> > +
> > /* compare to exact */
> > ierr = VecAXPY(u,-1.0,user.uexact);CHKERRQ(ierr); /* u <- u - uexact */
> > ierr = VecNorm(u,NORM_1,&error1);CHKERRQ(ierr);
> > --
> > 1.9.1
> >
> >
> > --
> > Ed Bueler
> > Dept of Math and Stat and Geophysical Institute
> > University of Alaska Fairbanks
> > Fairbanks, AK 99775-6660
> > 301C Chapman and 410D Elvey
> > 907 474-7693 and 907 474-7199 (fax 907 474-5394)
>
>
>
>
> --
> Ed Bueler
> Dept of Math and Stat and Geophysical Institute
> University of Alaska Fairbanks
> Fairbanks, AK 99775-6660
> 301C Chapman and 410D Elvey
> 907 474-7693 and 907 474-7199 (fax 907 474-5394)
More information about the petsc-dev
mailing list