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

Ed Bueler elbueler at alaska.edu
Wed Apr 29 14:38:55 CDT 2015


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


More information about the petsc-dev mailing list