2026-04-22 12:19:26 +02:00
|
|
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2026-04-22 13:00:16 +02:00
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 660" font-family="Arial, sans-serif" font-size="13" content="<mxfile host="app.diagrams.net" modified="2026-04-22T12:00:00.000Z" agent="Claude Code placeholder" etag="initial" version="22.0.0" type="device">
|
|
|
|
|
<diagram name="basin-model" id="basinModel">
|
|
|
|
|
<mxGraphModel dx="1200" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="900" math="0" shadow="0">
|
|
|
|
|
<root>
|
|
|
|
|
<mxCell id="0" />
|
|
|
|
|
<mxCell id="1" parent="0" />
|
|
|
|
|
<mxCell id="title" value="Basin model — physical layout + control thresholds" style="text;html=1;fontSize=16;fontStyle=1;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="200" y="20" width="500" height="30" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="tank" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6F2FF;strokeColor=#000000;strokeWidth=2;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="80" width="260" height="520" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="deadvol" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9FC5E8;strokeColor=none;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="302" y="550" width="256" height="48" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="freeboard_label" value="freeboard" style="text;html=1;fontSize=11;fontStyle=2;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="310" y="90" width="240" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="overflow_line" value="" style="endArrow=none;html=1;strokeColor=#B22222;dashed=1;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="250" y="145" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="620" y="145" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="overflow_label_l" value="heightOverflow" style="text;html=1;fontSize=12;align=right;fontColor=#B22222;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="140" y="130" width="100" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="overflow_label_r" value="spill → measure" style="text;html=1;fontSize=12;align=left;fontColor=#B22222;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="630" y="130" width="140" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="maxflow_line" value="" style="endArrow=none;html=1;strokeColor=#D68910;dashed=1;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="250" y="200" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="620" y="200" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="maxflow_label_l" value="maxFlowLevel" style="text;html=1;fontSize=12;align=right;fontColor=#D68910;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="140" y="185" width="100" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="scaling_label" value="SCALING RANGE&#10;(levelbased: demand ramps 0→100%)" style="text;html=1;fontSize=11;fontStyle=2;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="310" y="255" width="240" height="40" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="startlevel_line" value="" style="endArrow=none;html=1;strokeColor=#1E8449;dashed=1;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="250" y="345" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="620" y="345" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="startlevel_label_l" value="startLevel" style="text;html=1;fontSize=12;align=right;fontColor=#1E8449;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="140" y="330" width="100" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="deadzone_label" value="DEAD ZONE&#10;(hysteresis — keep last cmd)" style="text;html=1;fontSize=11;fontStyle=2;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="310" y="360" width="240" height="40" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="inflow_arrow" value="" style="endArrow=classic;html=1;strokeColor=#1F4E79;strokeWidth=3;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="150" y="410" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="300" y="410" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="inflow_label" value="INFLOW" style="text;html=1;fontSize=13;fontStyle=1;align=left;fontColor=#1F4E79;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="90" y="395" width="70" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="inlet_label" value="heightInlet" style="text;html=1;fontSize=12;align=left;fontColor=#1F4E79;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="570" y="400" width="90" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="stoplevel_line" value="" style="endArrow=none;html=1;strokeColor=#6C3483;dashed=1;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="250" y="465" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="620" y="465" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="stoplevel_label_l" value="stopLevel" style="text;html=1;fontSize=12;align=right;fontColor=#6C3483;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="140" y="450" width="100" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="stoplevel_label_r" value="unconditional STOP" style="text;html=1;fontSize=12;align=left;fontColor=#6C3483;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="630" y="450" width="160" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="buffer_label" value="BUFFER" style="text;html=1;fontSize=11;fontStyle=2;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="310" y="490" width="240" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="outflow_arrow" value="" style="endArrow=classic;html=1;strokeColor=#1F4E79;strokeWidth=3;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="560" y="540" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="720" y="540" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="outflow_label" value="OUTFLOW" style="text;html=1;fontSize=13;fontStyle=1;align=left;fontColor=#1F4E79;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="730" y="525" width="80" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="outlet_label_l" value="heightOutlet" style="text;html=1;fontSize=12;align=right;fontColor=#B22222;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="140" y="525" width="100" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="outlet_label_r" value="dry-run trip" style="text;html=1;fontSize=12;align=left;fontColor=#B22222;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="730" y="550" width="120" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="deadvol_label" value="dead volume" style="text;html=1;fontSize=11;fontStyle=2;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="310" y="560" width="240" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="floor_label" value="floor (0)" style="text;html=1;fontSize=11;align=right;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="190" y="590" width="50" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="basin_label" value="heightBasin" style="text;html=1;fontSize=11;align=right;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="180" y="70" width="60" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
</root>
|
|
|
|
|
</mxGraphModel>
|
|
|
|
|
</diagram>
|
|
|
|
|
</mxfile>">
|
2026-04-22 12:19:26 +02:00
|
|
|
<title>Basin model — physical layout + control thresholds</title>
|
|
|
|
|
<defs>
|
|
|
|
|
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
|
|
|
|
<path d="M 0 0 L 10 5 L 0 10 z" fill="#1F4E79" />
|
|
|
|
|
</marker>
|
|
|
|
|
</defs>
|
|
|
|
|
|
|
|
|
|
<text x="425" y="30" text-anchor="middle" font-weight="bold" font-size="16">Basin model — physical layout + control thresholds</text>
|
|
|
|
|
|
|
|
|
|
<!-- Tank body -->
|
|
|
|
|
<rect x="300" y="80" width="260" height="520" fill="#E6F2FF" stroke="#000" stroke-width="2" />
|
|
|
|
|
<!-- Dead volume (darker band at the bottom) -->
|
|
|
|
|
<rect x="302" y="550" width="256" height="48" fill="#9FC5E8" />
|
|
|
|
|
|
|
|
|
|
<!-- Zone labels inside the tank -->
|
|
|
|
|
<text x="430" y="106" text-anchor="middle" font-style="italic" font-size="12">freeboard</text>
|
|
|
|
|
<text x="430" y="268" text-anchor="middle" font-style="italic" font-size="12">SCALING RANGE</text>
|
|
|
|
|
<text x="430" y="284" text-anchor="middle" font-style="italic" font-size="11">(levelbased: demand ramps 0 → 100 %)</text>
|
|
|
|
|
<text x="430" y="378" text-anchor="middle" font-style="italic" font-size="12">DEAD ZONE</text>
|
|
|
|
|
<text x="430" y="394" text-anchor="middle" font-style="italic" font-size="11">(hysteresis — keep last cmd)</text>
|
|
|
|
|
<text x="430" y="502" text-anchor="middle" font-style="italic" font-size="12">BUFFER</text>
|
|
|
|
|
<text x="430" y="576" text-anchor="middle" font-style="italic" font-size="11" fill="#333">dead volume</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightBasin (top, solid) -->
|
|
|
|
|
<line x1="250" y1="80" x2="560" y2="80" stroke="#000" stroke-width="2" />
|
|
|
|
|
<text x="240" y="84" text-anchor="end" font-size="11">heightBasin</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightOverflow (dashed red) -->
|
|
|
|
|
<line x1="250" y1="145" x2="620" y2="145" stroke="#B22222" stroke-dasharray="6 3" stroke-width="1.5" />
|
|
|
|
|
<text x="240" y="141" text-anchor="end" fill="#B22222" font-size="12">heightOverflow</text>
|
|
|
|
|
<text x="630" y="141" text-anchor="start" fill="#B22222" font-size="12">→ spill → measure</text>
|
|
|
|
|
|
|
|
|
|
<!-- maxFlowLevel (dashed orange) -->
|
|
|
|
|
<line x1="250" y1="200" x2="620" y2="200" stroke="#D68910" stroke-dasharray="6 3" stroke-width="1.5" />
|
|
|
|
|
<text x="240" y="196" text-anchor="end" fill="#D68910" font-size="12">maxFlowLevel</text>
|
|
|
|
|
|
|
|
|
|
<!-- startLevel (dashed green) -->
|
|
|
|
|
<line x1="250" y1="345" x2="620" y2="345" stroke="#1E8449" stroke-dasharray="6 3" stroke-width="1.5" />
|
|
|
|
|
<text x="240" y="341" text-anchor="end" fill="#1E8449" font-size="12">startLevel</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightInlet (solid blue) with INFLOW pipe -->
|
|
|
|
|
<line x1="150" y1="410" x2="296" y2="410" stroke="#1F4E79" stroke-width="3" marker-end="url(#arrow)" />
|
|
|
|
|
<text x="140" y="406" text-anchor="end" font-weight="bold" fill="#1F4E79">INFLOW</text>
|
|
|
|
|
<text x="570" y="414" text-anchor="start" fill="#1F4E79" font-size="12">heightInlet</text>
|
|
|
|
|
|
|
|
|
|
<!-- stopLevel (dashed purple) -->
|
|
|
|
|
<line x1="250" y1="465" x2="620" y2="465" stroke="#6C3483" stroke-dasharray="6 3" stroke-width="1.5" />
|
|
|
|
|
<text x="240" y="461" text-anchor="end" fill="#6C3483" font-size="12">stopLevel</text>
|
|
|
|
|
<text x="630" y="461" text-anchor="start" fill="#6C3483" font-size="12">→ unconditional STOP</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightOutlet (solid red) with OUTFLOW pipe -->
|
|
|
|
|
<line x1="564" y1="540" x2="720" y2="540" stroke="#1F4E79" stroke-width="3" marker-end="url(#arrow)" />
|
|
|
|
|
<text x="730" y="536" text-anchor="start" font-weight="bold" fill="#1F4E79">OUTFLOW</text>
|
|
|
|
|
<text x="240" y="536" text-anchor="end" fill="#B22222" font-size="12">heightOutlet</text>
|
|
|
|
|
<text x="730" y="552" text-anchor="start" fill="#B22222" font-size="12">→ dry-run trip</text>
|
|
|
|
|
|
|
|
|
|
<!-- floor -->
|
|
|
|
|
<line x1="250" y1="600" x2="560" y2="600" stroke="#000" stroke-width="2" />
|
|
|
|
|
<text x="240" y="604" text-anchor="end" font-size="11">floor (0)</text>
|
|
|
|
|
</svg>
|