<div dir="ltr"><div>Dear Petsc --</div><div><br></div><div>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.</div><div><br></div><div>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,</div><div><br></div><div><div>$ ./ex9</div><div>setup done: grid  Mx,My = 11,11  with spacing  dx,dy = 0.4000,0.4000</div><div>[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------</div><div>[0]PETSC ERROR: Object is in wrong state</div><div>[0]PETSC ERROR: Clearing DM of global vectors that has a global vector obtained with DMGetGlobalVector()</div><div>[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.</div><div>[0]PETSC ERROR: Petsc Development GIT revision: v3.5.3-2797-g27699ca  GIT Date: 2015-04-27 23:20:45 -0500</div><div>[0]PETSC ERROR: ./ex9 on a linux-c-opt named bueler-leopard by ed Wed Apr 29 13:34:36 2015</div><div>[0]PETSC ERROR: Configure options --download-mpich --with-debugging=0</div><div>[0]PETSC ERROR: #1 DMClearGlobalVectors() line 196 in /home/ed/petsc/src/dm/interface/dmget.c</div><div>[0]PETSC ERROR: #2 DMSetVI() line 238 in /home/ed/petsc/src/snes/impls/vi/rs/virs.c</div><div>[0]PETSC ERROR: #3 SNESSolve_VINEWTONRSLS() line 461 in /home/ed/petsc/src/snes/impls/vi/rs/virs.c</div><div>[0]PETSC ERROR: #4 SNESSolve() line 3884 in /home/ed/petsc/src/snes/interface/snes.c</div><div>[0]PETSC ERROR: #5 main() line 103 in /home/ed/petsc/src/snes/examples/tutorials/ex9.c</div><div>[0]PETSC ERROR: No PETSc Option Table entries</div><div>[0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov----------</div><div>application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0</div><div>[unset]: aborting job:</div><div>application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0</div></div><div><br></div><div><br></div><div>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.</div><div><br></div><div>An easy workaround is to use DMCreateGlobalVector() or VecDuplicate() etc., so no crisis.</div><div><br></div><div>Generally rsls is doing heroic work for me, so no serious complaints.</div><div><br></div><div>Ed</div><div><br></div><div><br></div><div><br></div><div>From c9a0f2dd913b3a0ab3cf39379d9361d10d22a2b4 Mon Sep 17 00:00:00 2001</div><div>From: Ed Bueler <<a href="mailto:elbueler@alaska.edu">elbueler@alaska.edu</a>></div><div>Date: Wed, 29 Apr 2015 13:29:02 -0600</div><div>Subject: [PATCH] Pairing DM{Get/Restore}GlobalVector() before/after</div><div> SNESSolve() breaks vinewtonrsls.</div><div><br></div><div>---</div><div> src/snes/examples/tutorials/ex9.c | 5 +++++</div><div> 1 file changed, 5 insertions(+)</div><div><br></div><div>diff --git a/src/snes/examples/tutorials/ex9.c b/src/snes/examples/tutorials/ex9.c</div><div>index ca4d344..3afa8b9 100644</div><div>--- a/src/snes/examples/tutorials/ex9.c</div><div>+++ b/src/snes/examples/tutorials/ex9.c</div><div>@@ -96,9 +96,14 @@ int main(int argc,char **argv)</div><div>   ierr = PetscPrintf(PETSC_COMM_WORLD,"setup done: grid  Mx,My = %D,%D  with spacing  dx,dy = %.4f,%.4f\n",</div><div>                      <a href="http://info.mx">info.mx</a>,info.my,4.0/(PetscReal)(info.mx-1),4.0/(PetscReal)(info.my-1));CHKERRQ(ierr);</div><div> </div><div>+Vec foo;</div><div>+ierr = DMGetGlobalVector(da,&foo);CHKERRQ(ierr);</div><div>+</div><div>   /* solve nonlinear system */</div><div>   ierr = SNESSolve(snes,NULL,u);CHKERRQ(ierr);</div><div> </div><div>+ierr = DMRestoreGlobalVector(da,&foo);CHKERRQ(ierr);</div><div>+</div><div>   /* compare to exact */</div><div>   ierr = VecAXPY(u,-1.0,user.uexact);CHKERRQ(ierr); /* u <- u - uexact */</div><div>   ierr = VecNorm(u,NORM_1,&error1);CHKERRQ(ierr);</div><div>-- </div><div>1.9.1</div><div><br></div><div><br></div>-- <br><div class="gmail_signature">Ed Bueler<br>Dept of Math and Stat and Geophysical Institute<br>University of Alaska Fairbanks<br>Fairbanks, AK 99775-6660<br>301C Chapman and 410D Elvey<br>907 474-7693 and 907 474-7199  (fax 907 474-5394)</div>
</div>