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

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