<div dir="ltr">O.k., I will just avoid holding it in that way.<div><br></div><div>Unfortunately, the man page</div><div><br></div><div><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetGlobalVector.html">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetGlobalVector.html</a></div><div><br></div><div>gives no hint that a "complicated PETSc solver", a presumably well-defined phrase ;-), interferes with this particular DM functionality.</div><div><br></div><div>Ed</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 29, 2015 at 9:57 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  To quote Steve Jobs, you are using it wrong :-)<br>
<br>
   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.<br>
<span class="HOEnZb"><font color="#888888"><br>
  Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> On Apr 29, 2015, at 2:38 PM, Ed Bueler <<a href="mailto:elbueler@alaska.edu">elbueler@alaska.edu</a>> wrote:<br>
><br>
> Dear Petsc --<br>
><br>
> 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.<br>
><br>
> 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,<br>
><br>
> $ ./ex9<br>
> setup done: grid  Mx,My = 11,11  with spacing  dx,dy = 0.4000,0.4000<br>
> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
> [0]PETSC ERROR: Object is in wrong state<br>
> [0]PETSC ERROR: Clearing DM of global vectors that has a global vector obtained with DMGetGlobalVector()<br>
> [0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
> [0]PETSC ERROR: Petsc Development GIT revision: v3.5.3-2797-g27699ca  GIT Date: 2015-04-27 23:20:45 -0500<br>
> [0]PETSC ERROR: ./ex9 on a linux-c-opt named bueler-leopard by ed Wed Apr 29 13:34:36 2015<br>
> [0]PETSC ERROR: Configure options --download-mpich --with-debugging=0<br>
> [0]PETSC ERROR: #1 DMClearGlobalVectors() line 196 in /home/ed/petsc/src/dm/interface/dmget.c<br>
> [0]PETSC ERROR: #2 DMSetVI() line 238 in /home/ed/petsc/src/snes/impls/vi/rs/virs.c<br>
> [0]PETSC ERROR: #3 SNESSolve_VINEWTONRSLS() line 461 in /home/ed/petsc/src/snes/impls/vi/rs/virs.c<br>
> [0]PETSC ERROR: #4 SNESSolve() line 3884 in /home/ed/petsc/src/snes/interface/snes.c<br>
> [0]PETSC ERROR: #5 main() line 103 in /home/ed/petsc/src/snes/examples/tutorials/ex9.c<br>
> [0]PETSC ERROR: No PETSc Option Table entries<br>
> [0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov----------<br>
> application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0<br>
> [unset]: aborting job:<br>
> application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0<br>
><br>
><br>
> 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.<br>
><br>
> An easy workaround is to use DMCreateGlobalVector() or VecDuplicate() etc., so no crisis.<br>
><br>
> Generally rsls is doing heroic work for me, so no serious complaints.<br>
><br>
> Ed<br>
><br>
><br>
><br>
> From c9a0f2dd913b3a0ab3cf39379d9361d10d22a2b4 Mon Sep 17 00:00:00 2001<br>
> From: Ed Bueler <<a href="mailto:elbueler@alaska.edu">elbueler@alaska.edu</a>><br>
> Date: Wed, 29 Apr 2015 13:29:02 -0600<br>
> Subject: [PATCH] Pairing DM{Get/Restore}GlobalVector() before/after<br>
>  SNESSolve() breaks vinewtonrsls.<br>
><br>
> ---<br>
>  src/snes/examples/tutorials/ex9.c | 5 +++++<br>
>  1 file changed, 5 insertions(+)<br>
><br>
> diff --git a/src/snes/examples/tutorials/ex9.c b/src/snes/examples/tutorials/ex9.c<br>
> index ca4d344..3afa8b9 100644<br>
> --- a/src/snes/examples/tutorials/ex9.c<br>
> +++ b/src/snes/examples/tutorials/ex9.c<br>
> @@ -96,9 +96,14 @@ int main(int argc,char **argv)<br>
>    ierr = PetscPrintf(PETSC_COMM_WORLD,"setup done: grid  Mx,My = %D,%D  with spacing  dx,dy = %.4f,%.4f\n",<br>
>                       <a href="http://info.mx" target="_blank">info.mx</a>,info.my,4.0/(PetscReal)(info.mx-1),4.0/(PetscReal)(info.my-1));CHKERRQ(ierr);<br>
><br>
> +Vec foo;<br>
> +ierr = DMGetGlobalVector(da,&foo);CHKERRQ(ierr);<br>
> +<br>
>    /* solve nonlinear system */<br>
>    ierr = SNESSolve(snes,NULL,u);CHKERRQ(ierr);<br>
><br>
> +ierr = DMRestoreGlobalVector(da,&foo);CHKERRQ(ierr);<br>
> +<br>
>    /* compare to exact */<br>
>    ierr = VecAXPY(u,-1.0,user.uexact);CHKERRQ(ierr); /* u <- u - uexact */<br>
>    ierr = VecNorm(u,NORM_1,&error1);CHKERRQ(ierr);<br>
> --<br>
> 1.9.1<br>
><br>
><br>
> --<br>
> 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)<br>
<br>
</div></div></blockquote></div><br><br clear="all"><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>