<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Times New Roman \(Body CS\)";
        panose-1:2 11 6 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Times New Roman",serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Moritz,<o:p></o:p></p>
<p class="MsoNormal">  I think your case will also work with using TSEvent. I think your problem is similar, correct me if I am wrong, to my application where I need to constrain the states within some limits, lb \le x. I use events to handle this, where I
 use two event functions:<o:p></o:p></p>
<p class="MsoNormal">(i)                 x – lb = 0.      if x > lb &<o:p></o:p></p>
<p class="MsoNormal">(ii)              \dot{x} = 0       x = lb<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">  <o:p></o:p></p>
<p class="MsoNormal">The first event function is used to detect when x hits the limit lb. Once it hits the limit, the differential equation for x is changed to (x-lb = 0) in the model to hold x at limit lb. For releasing x, there is an event function on the
 derivative of x, \dot{x}, and x is released on detection of the condition \dot{x} > 0. This is done through the event function \dot{x} = 0 with a positive zero crossing.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">  <o:p></o:p></p>
<p class="MsoNormal">An example of how the above works is in the example src/ts/examples/tutorials/power_grid/stability_9bus/ex9bus.c. In this example, there is an event function that first checks whether the state VR has hit the upper limit VRMAX. Once it
 does so, the flag VRatmax is set by the post-event function. The event function is then switched to the \dot{VR}<o:p></o:p></p>
<p class="MsoNormal">if (!VRatmax[i]))<o:p></o:p></p>
<p class="MsoNormal">    fvalue[2+2*i] = VRMAX[i] - VR;<o:p></o:p></p>
<p class="MsoNormal">} else {<o:p></o:p></p>
<p class="MsoNormal">     fvalue[2+2*i] = (VR - KA[i]*RF + KA[i]*KF[i]*Efd/TF[i] - KA[i]*(Vref[i] - Vm))/TA[i];<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">You can either try TSEvent or what Barry suggested SNESLineSearchSetPreCheck(), or both.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Shri <o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-left:.5in"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">"Huck, Moritz" <Moritz.Huck@rwth-aachen.de><br>
<b>Date: </b>Wednesday, August 7, 2019 at 8:46 AM<br>
<b>To: </b>"Smith, Barry F." <bsmith@mcs.anl.gov><br>
<b>Cc: </b>"Abhyankar, Shrirang G" <shrirang.abhyankar@pnnl.gov>, "petsc-users@mcs.anl.gov" <petsc-users@mcs.anl.gov><br>
<b>Subject: </b>AW: [petsc-users] Problem with TS and SNES VI<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Thank you for your response.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">The sizes are only allowed to go down to a certain value.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">The non-physical values do also occur during the function evaluations (IFunction).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">I will try to implment your suggestions with SNESLineSearchSetPreCheck. This would mean I dont have to use SNESVISetVariableBounds at all, right?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">________________________________________<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Von: Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Gesendet: Dienstag, 6. August 2019 17:47:13<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">An: Huck, Moritz<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Cc: Abhyankar, Shrirang G; <a href="mailto:petsc-users@mcs.anl.gov">
petsc-users@mcs.anl.gov</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Betreff: Re: [petsc-users] Problem with TS and SNES VI<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Thanks, very useful.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Are the non-physical values appearing in the nonlinear solver ? Or just at the time-step?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Do you check for non-physical values each time you do a function evaluation needed by SNES/TS?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   If the non-physical values are an artifact of the steps taken in the nonlinear solver in SNES then the correct solution is to use<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">SNESLineSearchSetPreCheck() what you do is change the step so the resulting solutions are physical.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   For you case where the sizes go negative I am not sure what to do. Are the sizes allowed to go to zero? If so then adjust the step so that the sizes that go to negative values just go to zero. If they are suppose
 to be always positive then you need to pick some tolerance (say epsilon) and adjust the step so they are of size epsilon. Note you don't scale the entire step vector by a small number to satisfy the constraint you change each entry in the step as needed to
 satisfy the constraints.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Good luck and let us know how it goes<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Barry<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<blockquote style="border:none;border-left:solid #B5C4DF 4.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-right:0in" id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE">
<div>
<p class="MsoNormal" style="margin-left:.5in">On Aug 6, 2019, at 9:24 AM, Huck, Moritz <<a href="mailto:Moritz.Huck@rwth-aachen.de">Moritz.Huck@rwth-aachen.de</a>> wrote:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">At the moment I output only the values at the actual time-step (with the poststep functionality), I dont know the values during the stages.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Unphysical values are e.g. particle sizes below zero.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">My model as no explicit inequalities, the only handling of the constraints is done by setting SNES VI.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">The model does not change in the senes that there are new equations. If have put in an conditional that xdot is calculated to be positive of x is on or below the lower bound.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">________________________________________<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Von: Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Gesendet: Dienstag, 6. August 2019 15:51:16<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">An: Huck, Moritz<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Cc: Abhyankar, Shrirang G; <a href="mailto:petsc-users@mcs.anl.gov">
petsc-users@mcs.anl.gov</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Betreff: Re: [petsc-users] Problem with TS and SNES VI<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">  Could you explain in a bit more detail what you mean by "some states go to unphysical values" ?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">  Is this within a stage or at the actual time-step after the stage?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Does you model explicitly have these bounds on the solution; i.e. it is imposed as a variational inequality or does the model not explicitly have the constraints because its "analytic" solution just naturally
 stays in the physical region anyways? But numerical it can go out?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">  Or, is your model suppose to "change" at a certain time, which you don't know in advance when the solution goes out of some predefined bounds" (this is where the event is designed for).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   This information can help us determine what approach you should take.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Thanks<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   Barry<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<blockquote style="border:none;border-left:solid #B5C4DF 4.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-right:0in" id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE">
<div>
<p class="MsoNormal" style="margin-left:.5in">On Aug 6, 2019, at 2:12 AM, Huck, Moritz via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> wrote:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Hi,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">I think I am missing something here.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">How would events help to constrain the states.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Do you mean to use the event to "pause" to integration an adjust the state manually?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Or are the events to enforce smaller timesteps when the state come close to the constraints?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Thank you,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Moritz<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">________________________________________<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Von: Abhyankar, Shrirang G <<a href="mailto:shrirang.abhyankar@pnnl.gov">shrirang.abhyankar@pnnl.gov</a>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Gesendet: Montag, 5. August 2019 17:21:41<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">An: Huck, Moritz; <a href="mailto:petsc-users@mcs.anl.gov">
petsc-users@mcs.anl.gov</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Betreff: Re: [petsc-users] Problem with TS and SNES VI<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">For problems with constraints on the states, I would recommend trying the event functionality, TSEvent, that allows detection and location of discrete events, such as one that you have in your problem.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetEventHandler.html">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetEventHandler.html</a>.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">An example using TSEvent functionality:  <a href="https://www.mcs.anl.gov/petsc/petsc-current/src/ts/examples/tutorials/ex40.c.html">https://www.mcs.anl.gov/petsc/petsc-current/src/ts/examples/tutorials/ex40.c.html</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">A brief intro to TSEvent can be found here<<a href="https://www.mcs.anl.gov/petsc/petsc-20/conference/Abhyankar_S.pdf">https://www.mcs.anl.gov/petsc/petsc-20/conference/Abhyankar_S.pdf</a>>.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Shri<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">From: petsc-users <<a href="mailto:petsc-users-bounces@mcs.anl.gov">petsc-users-bounces@mcs.anl.gov</a>> on behalf of "Huck, Moritz via petsc-users" <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Reply-To: "Huck, Moritz" <<a href="mailto:Moritz.Huck@rwth-aachen.de">Moritz.Huck@rwth-aachen.de</a>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Date: Monday, August 5, 2019 at 5:18 AM<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">To: "<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>" <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Subject: [petsc-users] Problem with TS and SNES VI<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Hi,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">I am trying to solve a DAE with the ARKIMEX solver, which works mostly fine.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">The problem arises when some states go to unphysical values. I try to constrain my states with SNESVISetVariableBounds (through the petsc4py interface).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">But TS seems not respect this e.g. I have a state with is usually between 1 and 1e3 for which I set a lower bound of 1, but the state goes t0 -0.8 at some points.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Are there some tolerances I have to set for VI or something like this?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Best Regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Moritz<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
</div>
</body>
</html>