Hi Justin,

I will have to look regarding the TAO semismooth solvers.  The TAO
solvers probably "cheated" and modified the Jacobian matrix rather 
than extracting submatrices and shifting the diagonal or using a
matrix-free version.  

Note: the TAO interior-point and semismooth methods start from an element 
of the generalized Jacobian matrix for a semismooth reformulation of 
the VI problem.  This generalization Jacobian is a diagonal 
perturbation to a scale version of the Jacobian you input.
If we cheat and modify the matrix, then it needs to be
filled back in during a Jacobian evaluation.

At some point, the plan was to move all the VI methods into PETSc proper,
but we may have stopped with the active-set (ASLS) method because that
tends to have the best performance for PDE-related problems. 

Todd.

> On Jun 27, 2016, at 12:37 PM, Justin Chang <[email protected]> wrote:
> 
> So I figured it out. I had to explicitly form the Tao Gradient/Constraints 
> and Jacobian. I couldn't just "pre-process" the gradient Vec and Jacobian Mat 
> through SNESComputeXXX. Attached is the updated file and makefile.
> 
> My question now is, why exactly is this the case? This preprocessing strategy 
> seemed to work for bounded constrained optimization solvers (e.g., 
> TRON/BLMVM) but apparently not with the MCP ones. The system is linear so my 
> original reasoning was that the Jacobian shouldn't change, thus it just needs 
> to be assembled once. I recall faintly from a previous discussion that the 
> SNESVI solvers will vary the Mat and Vec sizes depending on the regions that 
> need to be "constrained" or something?
> 
> Thanks,
> Justin
> 
> On Sun, Jun 26, 2016 at 5:03 AM, Barry Smith <[email protected]> wrote:
> 
>   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>
> 
> 
> <ex9_TAO.c><makefile>

Reply via email to