Barry/Shri, Is the new VI SNES type in general terms a constrained nonlinear solver ? In other words, given a certain constraint as a function of the variables of interest, does it find the optimal solution that both minimizes the residual and satisfy the constraint ? I have been looking at L-BFGS constrained optimization methods and from what I understand, the variational inequality solver seems to fall under a similar but much broader category. I would much appreciate it if you can point me to some papers related to the method. And if I misunderstood the domain of applicability, please do feel free to correct me.
Thanks, Vijay On Mon, Jul 25, 2011 at 9:58 PM, Barry Smith <bsmith at mcs.anl.gov> wrote: > > On Jul 25, 2011, at 5:50 PM, Jonathan Backs wrote: > >> Hi Shri, >> >> Thanks for your message and all the helpful tips. If the >> TSVISetVariableBounds() functions are available now, I would like to try >> them as well. Is the interface essentially the same as with >> SNESVISetVariableBounds()? I will get back to you and Barry when I have had >> a chance to modify my application. >> >> For my problem, I believe it makes sense to have bounds on one of the >> variables as well as one function of the variables. The two relevant degrees >> of freedom are the block voltage (one for each finite difference block) and >> the electrode voltage (one for each electrode, which may be present in >> multiple blocks). The electrode voltage should keep a constant phase while >> the magnitude is constrained between zero and some maximum. The block >> voltages near the electrodes depend on the electrode voltages as well as the >> neighbouring block voltages. The electrode current for a given electrode is >> a function of its electrode voltage and several nearby block voltages, and >> should be constrained in magnitude between zero and some maximum (and the >> phase unconstrained). Would I need to use SNESVISetComputeVariableBounds >> since the electrode current is a function of the other variables? Would any >> other provisions need to be made for the block voltages, since they depend >> on the electrode voltages? >> > > ? You cannot directly make a bound on some function of other variables. > Instead you need to introduce another variable that is defined to be equal to > that function and put the bound on that new variable. > > ? Barry > >> Thank you again, >> >> Jon >> >> On 2011-07-25, at 11:58 AM, Shri wrote: >> >>> >>> ----- Original Message ----- >>>> On Jul 22, 2011, at 4:16 PM, Jonathan Backs wrote: >>>> >>>>> Barry, >>>>> >>>>> Thank you so much for your response. Lucky, indeed! I look forward >>>>> to trying out these new features. >>>>> >>>>> I neglected to mention in my original post that my electrical >>>>> problem is part of a DAE, which includes a time-dependent heating >>>>> problem. Can SNESVI constraints be used in conjunction with >>>>> TSSetIFunction() and TSSetIJacobian() as well? (Of course, I only >>>>> need the constraints for the time-independent electrical portion.) >>>> >>>> We have not yet put that in but Shri is starting to look at that just >>>> now. Basically we would have a TSVISetVariableBounds() and handle >>>> everything from there. I suggest you start with a simple time >>>> electrical portion with constraints to explore and we'll go from >>>> there. Shri is actually a electrical networks guy and so can speak >>>> your language. >>> >>> >>> ? I've added TSVISetVariableBounds() for setting the bounds on the >>> variables using the TS object directly. >>> A few things that i want to mention here about using the variational >>> inequality nonlinear solver (SNESVI). >>> i) Use the runtime option -snes_type vi or explicitly set >>> SNESSetType(snes,SNESVI). >>> ii) There are two tested algorithms currently available, (a) semismooth >>> (-snes_vi_type ss) and (b) active set or reduced space >>> (-snes_vi_type rs). >>> iii) Take a look at example,ex61.c, in src/snes/examples/tutorials which is >>> a time-stepping nonlinear problem with constraints on the variables. This >>> example does not use the TS object directly but rather a time-loop is >>> explicitly written. Another example,ex8.c, in src/snes/examples/tests/ is a >>> minimum surface area problem which uses SNESVI. >>> >>> By the way, does your problem have bounds on the variables or bounds on >>> some function of the variables? >>> >>> Shri >>> >>> >>> >>>> >>>> Barry >>>> >>>> >>>> >>>>> >>>>> Thank you again, >>>>> >>>>> Jon >>>>> >>>>> On 2011-07-22, at 2:46 PM, Barry Smith wrote: >>>>> >>>>>> >>>>>> Jon, >>>>>> >>>>>> ?You may be in luck. In PETSc-dev >>>>>> ?http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html we >>>>>> ?have now implemented variational inequality non-linear solvers >>>>>> ?with box constraints. >>>>>> >>>>>> ?That is one has a set of variables u and algebraic equations >>>>>> ?F(u) = 0 (say of size n each) but in addition one has >>>>>> ?constraints lu <= u <= uu where some or all of lu may be >>>>>> ?negative infinity (no constraints) and some or all of uu may be >>>>>> ?infinity (no constraints). There is also a constraint on the >>>>>> ?sign of F() for those equations associated with active >>>>>> ?constraints. If your constraints are not in this form sometimes >>>>>> ?you can introduce new additional variables to get it in this >>>>>> ?form. Read up a little on variational inequalities on the web. >>>>>> >>>>>> ?To use this you provide the usual SNES function and Jacobian but >>>>>> ?you also provide SNESVISetVariableBounds() there is a manual >>>>>> ?page for this function and for for SNESVI at >>>>>> ?http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-dev/docs/index.html >>>>>> ?(the link is broken right now but Satish is fixing it). Plus >>>>>> ?several examples in src/snes/examples/tutorials (in petsc-dev). >>>>>> >>>>>> ?This is all new code so we would be interested in your feedback. >>>>>> >>>>>> >>>>>> Barry >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Jul 22, 2011, at 3:33 PM, Jonathan Backs wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I am trying to add a constraint feature to my first PETSc >>>>>>> application, which uses the finite difference method to calculate >>>>>>> the potential distribution produced by a collection of electrodes >>>>>>> in a resistive medium. I would like to make this simulation more >>>>>>> realistic by imposing a maximum electric current and a maximum >>>>>>> potential difference that can be supplied to each electrode by the >>>>>>> power supply. If the medium between the electrodes is very >>>>>>> conductive, the current maximum would be exceeded by the maximum >>>>>>> potential difference, so the potential difference should be >>>>>>> decreased from maximum until it produces the maximum current. On >>>>>>> the other hand, the potential difference between the electrodes >>>>>>> should remain at maximum as long as the current remains below >>>>>>> maximum (say, for a less conductive medium). >>>>>>> >>>>>>> I added an extra degree of freedom (the electrode voltages) to my >>>>>>> DMDA, and I developed a set of conditional expressions that >>>>>>> describe the above constraints, but one problem is that the logic >>>>>>> relies on if-then-else decisions that are made when forming the >>>>>>> function/residual and the Jacobian. Once these decisions are made, >>>>>>> of course, the conditions are not checked again until the next >>>>>>> function or Jacobian evaluation. The non-linear solver then tends >>>>>>> to oscillate between extreme solutions to the opposing conditions >>>>>>> with each iteration, and never converges towards a reasonable >>>>>>> solution. >>>>>>> >>>>>>> Is there a better strategy for solving such problems? Does PETSc >>>>>>> offer mechanisms to aid in their solution? I would very much >>>>>>> appreciate any hints. >>>>>>> >>>>>>> Thank you for your time, >>>>>>> >>>>>>> Jon >>>>>> >>>>> >>> >> > >
