[petsc-users] Conditional Constraints

Shri abhyshr at mcs.anl.gov
Mon Jul 25 12:58:11 CDT 2011


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


More information about the petsc-users mailing list