<!DOCTYPE Charon SYSTEM "charon.dtd">

<Charon>
<System name="New Project" description="">
<Agent id="a1" name="LeakyTank" width="500" height="500" scale="1.0">
<Variable id="var7" name="level" interface="private" update="analog" type="real" value=""/>
<Variable id="var6" name="flow" interface="private" update="analog" type="real" value=""/>
<Renaming id="ren1" start="io6" end="io9" as="var7"/>
<Renaming id="ren3" start="io10" end="io5" as="var6"/>
<SubAgent id="sub1" name="tank" defid="a4" defpackage="New Project" xcenter="-2" ycenter="-126" scale="3.75">
<IOPort id="io5" varid="var4" xpct="0.24888888888888888" ypct="1.0" scale="1.0"/>
<IOPort id="io6" varid="var5" xpct="0.7777777777777778" ypct="1.0" scale="1.0"/></SubAgent>

<SubAgent id="sub2" name="pump" defid="a2" defpackage="New Project" xcenter="2" ycenter="145" scale="3.75">
<Argument id="arg1" paramid="param2" value="5"/>
<Argument id="arg2" paramid="param1" value="10"/>
<IOPort id="io9" varid="var8" xpct="0.76" ypct="0.0" scale="1.0"/>
<IOPort id="io10" varid="var9" xpct="0.2311111111111111" ypct="0.0" scale="1.0"/></SubAgent>
</Agent>

<Agent id="a2" name="Pump" width="500" height="500" scale="1.0">
<Variable id="var9" name="flow" interface="writeExclusive" update="analog" type="real" value=""/>
<Variable id="var8" name="level" interface="read" update="analog" type="real" value=""/>
<Parameter id="param2" name="low" type="int"/>
<Parameter id="param1" name="high" type="int"/>
<IOPort id="io8" varid="var8" xpct="0.696" ypct="0.0" scale="1.0"/>
<IOPort id="io7" varid="var9" xpct="0.174" ypct="0.0" scale="1.0"/></Agent>

<Agent id="a4" name="LTank" width="500" height="500" scale="1.0">
<Variable id="var5" name="level" interface="writeExclusive" update="analog" type="real" value=""/>
<Variable id="var4" name="inflow" interface="read" update="analog" type="real" value=""/>
<Variable id="var14" name="leak" interface="private" update="discrete" type="real" value=""/>
<IOPort id="io4" varid="var4" xpct="0.868" ypct="1.0" scale="1.0"/>
<IOPort id="io3" varid="var5" xpct="0.872" ypct="0.0" scale="1.0"/>
<Renaming id="ren2" start="io13" end="io16" as="var14"/>
<Renaming id="ren4" start="io15" end="io3" as="var5"/>
<Renaming id="ren5" start="io4" end="io14" as="var4"/>
<SubAgent id="sub4" name="hole" defid="a6" defpackage="New Project" xcenter="-152" ycenter="-26" scale="2.75">
<IOPort id="io13" varid="var13" xpct="1.0" ypct="0.7967479674796748" scale="1.0"/></SubAgent>

<SubAgent id="sub5" name="tank" defid="a3" defpackage="New Project" xcenter="142" ycenter="-25" scale="2.75">
<IOPort id="io14" varid="var1" xpct="0.7515151515151515" ypct="1.0" scale="1.0"/>
<IOPort id="io15" varid="var2" xpct="0.7636363636363637" ypct="0.0" scale="1.0"/>
<IOPort id="io16" varid="var3" xpct="0.0" ypct="0.3170731707317073" scale="1.0"/></SubAgent>
</Agent>

<Agent id="a3" name="Tank" width="500" height="500" scale="1.0">
<Variable id="var3" name="leak" interface="read" update="discrete" type="real" value=""/>
<Variable id="var2" name="level" interface="writeExclusive" update="analog" type="real" value="6"/>
<Variable id="var1" name="inflow" interface="read" update="analog" type="real" value=""/>
<IOPort id="io12" varid="var1" xpct="0.496" ypct="0.0" scale="1.0"/>
<IOPort id="io11" varid="var2" xpct="1.0" ypct="0.386" scale="1.0"/>
<IOPort id="io2" varid="var3" xpct="0.0" ypct="0.444" scale="1.0"/>
<SubMode id="sub3" name="top" defid="m1" defpackage="New Project" xcenter="-6" ycenter="-36" scale="4.0"></SubMode>
</Agent>

<Agent id="a6" name="Hole" width="500" height="500" scale="1.0">
<Variable id="var13" name="leak" interface="writeExclusive" update="analog" type="real" value="1"/>
<IOPort id="io1" varid="var13" xpct="0.65" ypct="0.0" scale="1.0"/></Agent>

<Mode id="m1" name="TankMode" width="500" height="500" scale="1.0">
<Variable id="var12" name="leak" interface="read" update="discrete" type="real" value=""/>
<Variable id="var11" name="level" interface="writeShared" update="analog" type="real" value=""/>
<Variable id="var10" name="inflow" interface="read" update="analog" type="real" value=""/>
<Constraint id="cons1" name="" type="diff"><![CDATA[d(level) == inflow-leak]]></Constraint>
</Mode>

<Mode id="m2" name="Maintain" width="500" height="500" scale="1.0">
<Variable id="var21" name="flow" interface="writeExclusive" update="analog" type="real" value=""/>
<Variable id="var19" name="level" interface="read" update="analog" type="real" value=""/>
<Variable id="var20" name="rate" interface="read" update="discrete" type="real" value=""/>
<Variable id="var22" name="clock" interface="writeExclusive" update="analog" type="real" value=""/>
<Parameter id="param11" name="tolerance" type="real"/>
<Parameter id="param4" name="high" type="int"/>
<Parameter id="param3" name="low" type="int"/>
<Constraint id="cons3" name="" type="inv"><![CDATA[clock <= 1]]></Constraint>

<Transition id="trans4" name="" start="ctrl15" end="ctrl16">
<Guard><![CDATA[java.lang.Math.abs(rate-flow) > tolerance]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<Transition id="trans3" name="" start="ctrl1" end="ctrl2">
<Guard><![CDATA[flow <= 0]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<Transition id="trans5" name="" start="ctrl5" end="ctrl6">
<Guard><![CDATA[level > high]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<Transition id="trans6" name="" start="ctrl14" end="ctrl7">
<Guard><![CDATA[level < low]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<Transition id="trans7" name="" start="ctrl8" end="ctrl17">
<Guard><![CDATA[java.lang.Math.abs(rate-flow) <= tolerance]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<Transition id="trans8" name="" start="ctrl18" end="ctrl19">
<Guard><![CDATA[level <= low]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<Transition id="trans9" name="" start="ctrl21" end="ctrl22">
<Guard><![CDATA[level > high]]></Guard>

<Actions><![CDATA[]]></Actions>
</Transition>

<SubMode id="sub11" name="on" defid="m6" defpackage="New Project" xcenter="9" ycenter="-154" scale="1.75">
<Argument id="arg5" paramid="param9" value="high"/>
<Argument id="arg6" paramid="param8" value="0"/>
<Argument id="arg7" paramid="param7" value="true"/>
<CtrlPnt id="ctrl15" type="exit" name="default" xpct="1.0" ypct="0.44871794871794873" scale="1.0"/>
<CtrlPnt id="ctrl20" type="entry" name="default" xpct="0.0" ypct="0.5256410256410257" scale="1.0"/>
<CtrlPnt id="ctrl5" type="exit" name="default" xpct="0.0" ypct="0.44871794871794873" scale="1.0"/>
<CtrlPnt id="ctrl17" type="entry" name="default" xpct="1.0" ypct="0.6666666666666666" scale="1.0"/></SubMode>

<SubMode id="sub12" name="off" defid="m6" defpackage="New Project" xcenter="10" ycenter="135" scale="1.75">
<Argument id="arg8" paramid="param9" value="10000000"/>
<Argument id="arg9" paramid="param8" value="low"/>
<Argument id="arg10" paramid="param7" value="false"/>
<CtrlPnt id="ctrl14" type="entry" name="default" xpct="1.0" ypct="0.5" scale="1.0"/>
<CtrlPnt id="ctrl2" type="entry" name="default" xpct="0.0" ypct="0.5128205128205128" scale="1.0"/></SubMode>

<SubMode id="sub13" name="adjust" defid="m7" defpackage="New Project" xcenter="182" ycenter="-12" scale="1.75">
<Argument id="arg11" paramid="param10" value="high"/>
<Argument id="arg13" paramid="param12" value="tolerance"/>
<CtrlPnt id="ctrl13" type="exit" name="default" xpct="0.37142857142857144" ypct="1.0" scale="1.0"/>
<CtrlPnt id="ctrl16" type="entry" name="default" xpct="0.45714285714285713" ypct="0.0" scale="1.0"/>
<CtrlPnt id="ctrl7" type="entry" name="default" xpct="0.45714285714285713" ypct="1.0" scale="1.0"/>
<CtrlPnt id="ctrl8" type="exit" name="default" xpct="0.2761904761904762" ypct="0.0" scale="1.0"/>
<CtrlPnt id="ctrl19" type="entry" name="default" xpct="0.0" ypct="0.44871794871794873" scale="1.0"/>
<CtrlPnt id="ctrl21" type="exit" name="default" xpct="0.0" ypct="0.6538461538461539" scale="1.0"/></SubMode>

<SubMode id="sub6" name="turnOff" defid="m9" defpackage="New Project" xcenter="-155" ycenter="-9" scale="1.75">
<Argument id="arg14" paramid="param13" value="low"/>
<CtrlPnt id="ctrl1" type="exit" name="default" xpct="0.5047619047619047" ypct="1.0" scale="1.0"/>
<CtrlPnt id="ctrl6" type="entry" name="default" xpct="0.49523809523809526" ypct="0.0" scale="1.0"/>
<CtrlPnt id="ctrl18" type="exit" name="default" xpct="1.0" ypct="0.41025641025641024" scale="1.0"/>
<CtrlPnt id="ctrl22" type="entry" name="default" xpct="1.0" ypct="0.6153846153846154" scale="1.0"/></SubMode>
</Mode>

<Mode id="m3" name="Compute" width="500" height="500" scale="1.0">
<CtrlPnt id="ctrl4" type="exit" name="return" xpct="1.0" ypct="0.412" scale="1.0"/>
<CtrlPnt id="ctrl3" type="entry" name="start" xpct="0.0" ypct="0.41" scale="1.0"/>
<Transition id="trans10" name="" start="ctrl3" end="ctrl23">
<Guard><![CDATA[true]]></Guard>

<Actions><![CDATA[delta = level - past]]></Actions>
</Transition>

<Transition id="trans11" name="" start="ctrl24" end="ctrl25">
<Guard><![CDATA[delta <= -20]]></Guard>

<Actions><![CDATA[rate = 20]]></Actions>
</Transition>

<Transition id="trans12" name="" start="ctrl26" end="ctrl27">
<Guard><![CDATA[delta > 0]]></Guard>

<Actions><![CDATA[rate = 0]]></Actions>
</Transition>

<Transition id="trans13" name="" start="ctrl28" end="ctrl29">
<Guard><![CDATA[-20 < delta && delta < 0]]></Guard>

<Actions><![CDATA[rate = -delta]]></Actions>
</Transition>

<Transition id="trans14" name="" start="ctrl30" end="ctrl4">
<Guard><![CDATA[true]]></Guard>

<Actions><![CDATA[past - level]]></Actions>
</Transition>

<SubMode id="sub7" name="pt0" defid="m10" defpackage="New Project" xcenter="-94" ycenter="-49" scale="1.0">
<CtrlPnt id="ctrl23" type="entry" name="default" xpct="0.0" ypct="0.5454545454545454" scale="1.0"/>
<CtrlPnt id="ctrl24" type="exit" name="default" xpct="1.0" ypct="0.28888888888888886" scale="1.0"/>
<CtrlPnt id="ctrl26" type="exit" name="default" xpct="1.0" ypct="0.5333333333333333" scale="1.0"/>
<CtrlPnt id="ctrl28" type="exit" name="default" xpct="1.0" ypct="0.7777777777777778" scale="1.0"/></SubMode>

<SubMode id="sub14" name="pt1" defid="m10" defpackage="New Project" xcenter="103" ycenter="-48" scale="1.0">
<CtrlPnt id="ctrl25" type="entry" name="default" xpct="0.0" ypct="0.26666666666666666" scale="1.0"/>
<CtrlPnt id="ctrl27" type="entry" name="default" xpct="0.0" ypct="0.5111111111111111" scale="1.0"/>
<CtrlPnt id="ctrl29" type="entry" name="default" xpct="0.0" ypct="0.7555555555555555" scale="1.0"/>
<CtrlPnt id="ctrl30" type="exit" name="default" xpct="1.0" ypct="0.5555555555555556" scale="1.0"/></SubMode>
</Mode>

<Mode id="m5" name="PumpMode" width="500" height="500" scale="1.0">
<Variable id="var18" name="rate" interface="private" update="discrete" type="real" value=""/>
<Variable id="var17" name="clock" interface="private" update="analog" type="real" value=""/>
<Variable id="var16" name="flow" interface="writeExclusive" update="analog" type="real" value=""/>
<Variable id="var15" name="level" interface="read" update="analog" type="real" value=""/>
<Parameter id="param6" name="high" type="int"/>
<Parameter id="param5" name="low" type="int"/>
<Constraint id="cons2" name="" type="diff"><![CDATA[d(clock)=1]]></Constraint>

<Transition id="trans1" name="recompute" start="ctrl11" end="ctrl10">
<Guard><![CDATA[clock > 1]]></Guard>

<Actions><![CDATA[clock = 0; rate = 0;]]></Actions>
</Transition>

<Transition id="trans2" name="" start="ctrl9" end="ctrl12">
<Guard><![CDATA[true]]></Guard>

<Actions><![CDATA[clock = 0]]></Actions>
</Transition>

<SubMode id="sub9" name="c" defid="m3" defpackage="New Project" xcenter="18" ycenter="-124" scale="2.75">
<CtrlPnt id="ctrl9" type="exit" name="return" xpct="0.8121212121212121" ypct="1.0" scale="1.0"/>
<CtrlPnt id="ctrl10" type="entry" name="start" xpct="0.17575757575757575" ypct="1.0" scale="1.0"/></SubMode>

<SubMode id="sub10" name="m" defid="m2" defpackage="New Project" xcenter="16" ycenter="132" scale="2.75">
<Argument id="arg3" paramid="param4" value="high"/>
<Argument id="arg4" paramid="param3" value="low"/>
<Argument id="arg12" paramid="param11" value=""/>
<CtrlPnt id="ctrl11" type="exit" name="default" xpct="0.18787878787878787" ypct="0.0" scale="1.0"/>
<CtrlPnt id="ctrl12" type="entry" name="default" xpct="0.8242424242424242" ypct="0.0" scale="1.0"/></SubMode>
</Mode>

<Mode id="m6" name="SteadyMode" width="500" height="500" scale="1.0">
<Variable id="var24" name="rate" interface="read" update="discrete" type="real" value=""/>
<Variable id="var23" name="flow" interface="writeExclusive" update="analog" type="real" value=""/>
<Parameter id="param9" name="high" type="int"/>
<Parameter id="param8" name="low" type="int"/>
<Parameter id="param7" name="tolerance" type="real"/>
<Constraint id="cons4" name="" type="inv"><![CDATA[low <= level && level<= high && java.lang.Math.abs(rate-flow) <= tolerance]]></Constraint>

<Constraint id="cons9" name="" type="diff"><![CDATA[d(flow) == 0]]></Constraint>
</Mode>

<Mode id="m7" name="TransientMode" width="500" height="500" scale="1.0">
<Variable id="var27" name="level" interface="read" update="analog" type="real" value=""/>
<Variable id="var26" name="flow" interface="writeExclusive" update="analog" type="real" value=""/>
<Variable id="var25" name="rate" interface="read" update="discrete" type="real" value=""/>
<Parameter id="param12" name="tolerance" type="real"/>
<Parameter id="param10" name="high" type="int"/>
<Constraint id="cons5" name="" type="diff"><![CDATA[d(flow) = 5*(rate-flow)]]></Constraint>

<Constraint id="cons6" name="" type="inv"><![CDATA[java.lang.Math.abs(rate-flow) > tolerance && level <= high]]></Constraint>
</Mode>

<Mode id="m4" name="HoleMode" width="500" height="500" scale="1.0">
<SubMode id="sub8" name="d" defid="m8" defpackage="New Project" xcenter="1" ycenter="0" scale="2.25"></SubMode>
</Mode>

<Mode id="m8" name="empty" width="500" height="500" scale="1.0"></Mode>

<Mode id="m9" name="TurnOffMode" width="500" height="500" scale="1.0">
<Parameter id="param13" name="low" type="int"/>
<Constraint id="cons7" name="" type="inv"><![CDATA[flow >= 0 && level >= low]]></Constraint>

<Constraint id="cons8" name="d(flow) == -5*flow" type="diff"><![CDATA[]]></Constraint>
</Mode>

<Mode id="m10" name="point" width="500" height="500" scale="1.0">
<Constraint id="cons10" name="" type="inv"><![CDATA[false]]></Constraint>
</Mode>
</System>
</Charon>
