[petsc-dev] Pairing DM{Get/Restore}GlobalVector() before/after SNESSolve() breaks vinewtonrsls

Barry Smith bsmith at mcs.anl.gov
Wed Apr 29 22:57:22 CDT 2015


  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)




More information about the petsc-dev mailing list