<p>Barry,</p>
<p>Thanks for the clarification. I didn't see a reference to any papers in the dev documentation and I probably misunderstood the usage of the variational solver.</p>
<p>I was also going to ask whether this can be used to solve a DAE by decoupling it into a time dependent equation and an algebraic (functional) constraint associated with it. From your explanation, I feel this might again be stretching the actual usage of the method. </p>
<p>I will search for references on the method to understand it better.</p>
<p>Thanks,<br>
Vijay</p>
<div class="gmail_quote">On Jul 25, 2011 11:16 PM, "Barry Smith" <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> wrote:<br type="attribution">> <br>> Vijay,<br>> <br>
> VI solvers do not solve (directly anyway) an optimization problem. For optimization you should use the Tao package. VI solvers solve a nonlinear equation coupled to inequality constraints. In our case the inequality constraints can only be on the independent variables (called boxed constraints). Essentially for each equation F_i(x) at the solution x* either F_i(x*) is 0 or x_i is on the constraint and F_i(x*) is of a particular sign. I am not the person to ask about good references on this topic, I know there are lots of books and papers on the topic.<br>
> <br>> Barry<br>> <br>> <br>> <br>> On Jul 25, 2011, at 10:17 PM, Vijay S. Mahadevan wrote:<br>> <br>>> Barry/Shri,<br>>> <br>>> Is the new VI SNES type in general terms a constrained nonlinear<br>
>> solver ? In other words, given a certain constraint as a function of<br>>> the variables of interest, does it find the optimal solution that both<br>>> minimizes the residual and satisfy the constraint ? I have been<br>
>> looking at L-BFGS constrained optimization methods and from what I<br>>> understand, the variational inequality solver seems to fall under a<br>>> similar but much broader category. I would much appreciate it if you<br>
>> can point me to some papers related to the method. And if I<br>>> misunderstood the domain of applicability, please do feel free to<br>>> correct me.<br>>> <br>>> Thanks,<br>>> Vijay<br>
>> <br>>> On Mon, Jul 25, 2011 at 9:58 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> wrote:<br>>>> <br>>>> On Jul 25, 2011, at 5:50 PM, Jonathan Backs wrote:<br>
>>> <br>>>>> Hi Shri,<br>>>>> <br>>>>> 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.<br>
>>>> <br>>>>> 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?<br>
>>>> <br>>>> <br>>>> 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.<br>
>>> <br>>>> Barry<br>>>> <br>>>>> Thank you again,<br>>>>> <br>>>>> Jon<br>>>>> <br>>>>> On 2011-07-25, at 11:58 AM, Shri wrote:<br>
>>>> <br>>>>>> <br>>>>>> ----- Original Message -----<br>>>>>>> On Jul 22, 2011, at 4:16 PM, Jonathan Backs wrote:<br>>>>>>> <br>>>>>>>> Barry,<br>
>>>>>>> <br>>>>>>>> Thank you so much for your response. Lucky, indeed! I look forward<br>>>>>>>> to trying out these new features.<br>>>>>>>> <br>
>>>>>>> I neglected to mention in my original post that my electrical<br>>>>>>>> problem is part of a DAE, which includes a time-dependent heating<br>>>>>>>> problem. Can SNESVI constraints be used in conjunction with<br>
>>>>>>> TSSetIFunction() and TSSetIJacobian() as well? (Of course, I only<br>>>>>>>> need the constraints for the time-independent electrical portion.)<br>>>>>>> <br>
>>>>>> We have not yet put that in but Shri is starting to look at that just<br>>>>>>> now. Basically we would have a TSVISetVariableBounds() and handle<br>>>>>>> everything from there. I suggest you start with a simple time<br>
>>>>>> electrical portion with constraints to explore and we'll go from<br>>>>>>> there. Shri is actually a electrical networks guy and so can speak<br>>>>>>> your language.<br>
>>>>> <br>>>>>> <br>>>>>> I've added TSVISetVariableBounds() for setting the bounds on the variables using the TS object directly.<br>>>>>> A few things that i want to mention here about using the variational inequality nonlinear solver (SNESVI).<br>
>>>>> i) Use the runtime option -snes_type vi or explicitly set SNESSetType(snes,SNESVI).<br>>>>>> ii) There are two tested algorithms currently available, (a) semismooth (-snes_vi_type ss) and (b) active set or reduced space<br>
>>>>> (-snes_vi_type rs).<br>>>>>> 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.<br>
>>>>> <br>>>>>> By the way, does your problem have bounds on the variables or bounds on some function of the variables?<br>>>>>> <br>>>>>> Shri<br>>>>>> <br>
>>>>> <br>>>>>> <br>>>>>>> <br>>>>>>> Barry<br>>>>>>> <br>>>>>>> <br>>>>>>> <br>>>>>>>> <br>
>>>>>>> Thank you again,<br>>>>>>>> <br>>>>>>>> Jon<br>>>>>>>> <br>>>>>>>> On 2011-07-22, at 2:46 PM, Barry Smith wrote:<br>
>>>>>>> <br>>>>>>>>> <br>>>>>>>>> Jon,<br>>>>>>>>> <br>>>>>>>>> You may be in luck. In PETSc-dev<br>>>>>>>>> <a href="http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html</a> we<br>
>>>>>>>> have now implemented variational inequality non-linear solvers<br>>>>>>>>> with box constraints.<br>>>>>>>>> <br>>>>>>>>> That is one has a set of variables u and algebraic equations<br>
>>>>>>>> F(u) = 0 (say of size n each) but in addition one has<br>>>>>>>>> constraints lu <= u <= uu where some or all of lu may be<br>>>>>>>>> negative infinity (no constraints) and some or all of uu may be<br>
>>>>>>>> infinity (no constraints). There is also a constraint on the<br>>>>>>>>> sign of F() for those equations associated with active<br>>>>>>>>> constraints. If your constraints are not in this form sometimes<br>
>>>>>>>> you can introduce new additional variables to get it in this<br>>>>>>>>> form. Read up a little on variational inequalities on the web.<br>>>>>>>>> <br>
>>>>>>>> To use this you provide the usual SNES function and Jacobian but<br>>>>>>>>> you also provide SNESVISetVariableBounds() there is a manual<br>>>>>>>>> page for this function and for for SNESVI at<br>
>>>>>>>> <a href="http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-dev/docs/index.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-dev/docs/index.html</a><br>>>>>>>>> (the link is broken right now but Satish is fixing it). Plus<br>
>>>>>>>> several examples in src/snes/examples/tutorials (in petsc-dev).<br>>>>>>>>> <br>>>>>>>>> This is all new code so we would be interested in your feedback.<br>
>>>>>>>> <br>>>>>>>>> <br>>>>>>>>> Barry<br>>>>>>>>> <br>>>>>>>>> <br>>>>>>>>> <br>
>>>>>>>> <br>>>>>>>>> <br>>>>>>>>> On Jul 22, 2011, at 3:33 PM, Jonathan Backs wrote:<br>>>>>>>>> <br>>>>>>>>>> Hi,<br>
>>>>>>>>> <br>>>>>>>>>> I am trying to add a constraint feature to my first PETSc<br>>>>>>>>>> application, which uses the finite difference method to calculate<br>
>>>>>>>>> the potential distribution produced by a collection of electrodes<br>>>>>>>>>> in a resistive medium. I would like to make this simulation more<br>>>>>>>>>> realistic by imposing a maximum electric current and a maximum<br>
>>>>>>>>> potential difference that can be supplied to each electrode by the<br>>>>>>>>>> power supply. If the medium between the electrodes is very<br>>>>>>>>>> conductive, the current maximum would be exceeded by the maximum<br>
>>>>>>>>> potential difference, so the potential difference should be<br>>>>>>>>>> decreased from maximum until it produces the maximum current. On<br>>>>>>>>>> the other hand, the potential difference between the electrodes<br>
>>>>>>>>> should remain at maximum as long as the current remains below<br>>>>>>>>>> maximum (say, for a less conductive medium).<br>>>>>>>>>> <br>
>>>>>>>>> I added an extra degree of freedom (the electrode voltages) to my<br>>>>>>>>>> DMDA, and I developed a set of conditional expressions that<br>>>>>>>>>> describe the above constraints, but one problem is that the logic<br>
>>>>>>>>> relies on if-then-else decisions that are made when forming the<br>>>>>>>>>> function/residual and the Jacobian. Once these decisions are made,<br>>>>>>>>>> of course, the conditions are not checked again until the next<br>
>>>>>>>>> function or Jacobian evaluation. The non-linear solver then tends<br>>>>>>>>>> to oscillate between extreme solutions to the opposing conditions<br>>>>>>>>>> with each iteration, and never converges towards a reasonable<br>
>>>>>>>>> solution.<br>>>>>>>>>> <br>>>>>>>>>> Is there a better strategy for solving such problems? Does PETSc<br>>>>>>>>>> offer mechanisms to aid in their solution? I would very much<br>
>>>>>>>>> appreciate any hints.<br>>>>>>>>>> <br>>>>>>>>>> Thank you for your time,<br>>>>>>>>>> <br>>>>>>>>>> Jon<br>
>>>>>>>> <br>>>>>>>> <br>>>>>> <br>>>>> <br>>>> <br>>>> <br>> <br></div>