An alternative approach is for you to solve it as a (non)linear variational inequality. See src/snes/examples/tutorials/ex9.c
How you should proceed depends on your long term goal. What problem do you really want to solve? Is it really a linear time dependent problem with 0 bounds on U? Can the problem always be represented as an optimization problem easily? What are and what will be the properties of K? For example if K is positive definite then likely the bounds will remain try without explicitly providing the constraints. Barry > On Apr 2, 2015, at 6:39 PM, Justin Chang <[email protected]> wrote: > > Hi everyone, > > I have a two part question regarding the integration of the following > optimization problem > > min 1/2 u^T*K*u + u^T*f > S.T. u >= 0 > > into SNES and TS > > 1) For SNES, assuming I am working with a linear FE equation, I have the > following algorithm/steps for solving my problem > > a) Set an initial guess x > b) Obtain residual r and jacobian A through functions SNESComputeFunction() > and SNESComputeJacobian() respectively > c) Form vector b = r - A*x > d) Set Hessian equal to A, gradient to A*x, objective function value to > 1/2*x^T*A*x + x^T*b, and variable (lower) bounds to a zero vector > e) Call TaoSolve > > This works well at the moment, but my question is there a more "efficient" > way of doing this? Because with my current setup, I am making a rather bold > assumption that my problem would converge in one SNES iteration without the > bounded constraints and does not have any unexpected nonlinearities. > > 2) How would I go about doing the above for time-stepping problems? At each > time step, I want to solve a convex optimization subject to the lower bounds > constraint. I plan on using backward euler and my resulting jacobian should > still be compatible with the above optimization problem. > > Thanks, > > -- > Justin Chang > PhD Candidate, Civil Engineering - Computational Sciences > University of Houston, Department of Civil and Environmental Engineering > Houston, TX 77004 > (512) 963-3262
