I wish I could answer this but I am weak on these algorithms. Hopefully Todd has a good understanding of their application and strengths and weaknesses.
Barry > On Jun 25, 2016, at 3:31 PM, Justin Chang <[email protected]> wrote: > > Hi all, > > 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. > > 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. > > 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: > > f = r - J*u^0 > gradient g = J*u - f = J*(u + *u^0) + r > > 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. > > Any ideas what is going on?? > > Thanks! > Justin > > On Wed, Jun 22, 2016 at 9:42 PM, Ed Bueler <[email protected]> wrote: > Justin -- > > 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. > > Ed > > Date: Wed, 22 Jun 2016 08:42:33 +0100 > From: Justin Chang <[email protected]> > To: petsc-users <[email protected]> > Subject: [petsc-users] SetVariableBounds vs ComputeVariableBounds > > Hi all, > > I am looking at the SNES tutorials ex9.c and ex58.c and am wondering why > SNESVISetComputeVariableBounds() is called instead of just > SNESVISetVariableBounds(). When would it be appropriate to use only using > the latter? > > Thanks, > Justin > > <ex9_TAO.c><makefile>
