<div dir="ltr">Hi all,<div><br></div><div>So I modified SNES ex9.c so that one has the option to use TAO's complementarity solvers for this problem. Attached is the file.</div><div><br></div><div>I expect the TAO solvers to behave the same as the SNESVI ones, but I am having the same issues as before - SSILS and SSFLS do not work whatsoever but for some reason ASILS and ASFLS work. Although the latter two produce the same results as the SNES VI counterparts, they converge much slower, and something tells me I am not doing something correctly. Based on what I have seen from the two TAO complementarity examples, I would also expect the AS and SS solvers to be roughly the same.</div><div><br></div><div>BTW, in the modified code, I made some "shortcuts." Instead of explicitly forming the Tao versions of the Gradient and Jacobian, I first assemble the residual r and Jacobian J through the SNESComputeXXX functions. Then I pass them into the TaoSetConstraints and TaoSetJacobian routines. Because this is a linear system, I have:<br></div><div><br></div><div>f = r - J*u^0</div><div>gradient g = J*u - f = J*(u + *u^0) + r</div><div><br></div><div>were u^0 is the initial vector. I am not sure if this "shortcut" has anything to do with the issue at hand. Attached is the makefile which has instructions on how to run the problem.</div><div><br></div><div>Any ideas what is going on??</div><div><br></div><div>Thanks!</div><div>Justin</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 22, 2016 at 9:42 PM, Ed Bueler <span dir="ltr"><<a href="mailto:elbueler@alaska.edu" target="_blank">elbueler@alaska.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Justin --<div><br>Yeah, good point.  SNESVISetVariableBounds() works fine, at least in ex9.c (see attached patch).  The reason for the other choice, which I found in my 5 year old email, was some bug in petsc3.2.</div><div><br></div><div>Ed</div><div><div class="gmail_extra"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Date: Wed, 22 Jun 2016 08:42:33 +0100<br>
From: Justin Chang <<a href="mailto:jychang48@gmail.com" target="_blank">jychang48@gmail.com</a>><br>
To: petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>><br>
Subject: [petsc-users] SetVariableBounds vs ComputeVariableBounds<span class=""><br>
<br>
Hi all,<br>
<br>
I am looking at the SNES tutorials ex9.c and ex58.c and am wondering why<br>
SNESVISetComputeVariableBounds() is called instead of just<br>
SNESVISetVariableBounds(). When would it be appropriate to use only using<br>
the latter?<br>
<br></span>
Thanks,<br>
Justin<br></blockquote></div>
</div></div></div>
</blockquote></div><br></div>