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
>>>>>>
>>>>>
>>>
>>
>
>

Reply via email to