Files
pumpingStation/wiki/diagrams/basin-model.drawio.svg

171 lines
15 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 660" font-family="Arial, sans-serif" font-size="13" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2026-04-22T12:00:00.000Z&quot; agent=&quot;Claude Code placeholder&quot; etag=&quot;initial&quot; version=&quot;22.0.0&quot; type=&quot;device&quot;&gt;
&lt;diagram name=&quot;basin-model&quot; id=&quot;basinModel&quot;&gt;
&lt;mxGraphModel dx=&quot;1200&quot; dy=&quot;900&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;850&quot; pageHeight=&quot;900&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;
&lt;root&gt;
&lt;mxCell id=&quot;0&quot; /&gt;
&lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;
&lt;mxCell id=&quot;title&quot; value=&quot;Basin model — physical layout + control thresholds&quot; style=&quot;text;html=1;fontSize=16;fontStyle=1;align=center;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;200&quot; y=&quot;20&quot; width=&quot;500&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;tank&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;fillColor=#E6F2FF;strokeColor=#000000;strokeWidth=2;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;300&quot; y=&quot;80&quot; width=&quot;260&quot; height=&quot;520&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;deadvol&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;fillColor=#9FC5E8;strokeColor=none;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;302&quot; y=&quot;550&quot; width=&quot;256&quot; height=&quot;48&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;freeboard_label&quot; value=&quot;freeboard&quot; style=&quot;text;html=1;fontSize=11;fontStyle=2;align=center;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;310&quot; y=&quot;90&quot; width=&quot;240&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;overflow_line&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;strokeColor=#B22222;dashed=1;strokeWidth=2;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;
&lt;mxPoint x=&quot;250&quot; y=&quot;145&quot; as=&quot;sourcePoint&quot; /&gt;
&lt;mxPoint x=&quot;620&quot; y=&quot;145&quot; as=&quot;targetPoint&quot; /&gt;
&lt;/mxGeometry&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;overflow_label_l&quot; value=&quot;heightOverflow&quot; style=&quot;text;html=1;fontSize=12;align=right;fontColor=#B22222;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;140&quot; y=&quot;130&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;overflow_label_r&quot; value=&quot;spill → measure&quot; style=&quot;text;html=1;fontSize=12;align=left;fontColor=#B22222;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;630&quot; y=&quot;130&quot; width=&quot;140&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;maxflow_line&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;strokeColor=#D68910;dashed=1;strokeWidth=2;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;
&lt;mxPoint x=&quot;250&quot; y=&quot;200&quot; as=&quot;sourcePoint&quot; /&gt;
&lt;mxPoint x=&quot;620&quot; y=&quot;200&quot; as=&quot;targetPoint&quot; /&gt;
&lt;/mxGeometry&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;maxflow_label_l&quot; value=&quot;maxFlowLevel&quot; style=&quot;text;html=1;fontSize=12;align=right;fontColor=#D68910;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;140&quot; y=&quot;185&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;scaling_label&quot; value=&quot;SCALING RANGE&amp;#10;(levelbased: demand ramps 0→100%)&quot; style=&quot;text;html=1;fontSize=11;fontStyle=2;align=center;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;310&quot; y=&quot;255&quot; width=&quot;240&quot; height=&quot;40&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;startlevel_line&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;strokeColor=#1E8449;dashed=1;strokeWidth=2;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;
&lt;mxPoint x=&quot;250&quot; y=&quot;345&quot; as=&quot;sourcePoint&quot; /&gt;
&lt;mxPoint x=&quot;620&quot; y=&quot;345&quot; as=&quot;targetPoint&quot; /&gt;
&lt;/mxGeometry&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;startlevel_label_l&quot; value=&quot;startLevel&quot; style=&quot;text;html=1;fontSize=12;align=right;fontColor=#1E8449;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;140&quot; y=&quot;330&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;deadzone_label&quot; value=&quot;DEAD ZONE&amp;#10;(hysteresis — keep last cmd)&quot; style=&quot;text;html=1;fontSize=11;fontStyle=2;align=center;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;310&quot; y=&quot;360&quot; width=&quot;240&quot; height=&quot;40&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;inflow_arrow&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;strokeColor=#1F4E79;strokeWidth=3;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;
&lt;mxPoint x=&quot;150&quot; y=&quot;410&quot; as=&quot;sourcePoint&quot; /&gt;
&lt;mxPoint x=&quot;300&quot; y=&quot;410&quot; as=&quot;targetPoint&quot; /&gt;
&lt;/mxGeometry&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;inflow_label&quot; value=&quot;INFLOW&quot; style=&quot;text;html=1;fontSize=13;fontStyle=1;align=left;fontColor=#1F4E79;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;90&quot; y=&quot;395&quot; width=&quot;70&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;inlet_label&quot; value=&quot;heightInlet&quot; style=&quot;text;html=1;fontSize=12;align=left;fontColor=#1F4E79;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;570&quot; y=&quot;400&quot; width=&quot;90&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;stoplevel_line&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;strokeColor=#6C3483;dashed=1;strokeWidth=2;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;
&lt;mxPoint x=&quot;250&quot; y=&quot;465&quot; as=&quot;sourcePoint&quot; /&gt;
&lt;mxPoint x=&quot;620&quot; y=&quot;465&quot; as=&quot;targetPoint&quot; /&gt;
&lt;/mxGeometry&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;stoplevel_label_l&quot; value=&quot;stopLevel&quot; style=&quot;text;html=1;fontSize=12;align=right;fontColor=#6C3483;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;140&quot; y=&quot;450&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;stoplevel_label_r&quot; value=&quot;unconditional STOP&quot; style=&quot;text;html=1;fontSize=12;align=left;fontColor=#6C3483;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;630&quot; y=&quot;450&quot; width=&quot;160&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;buffer_label&quot; value=&quot;BUFFER&quot; style=&quot;text;html=1;fontSize=11;fontStyle=2;align=center;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;310&quot; y=&quot;490&quot; width=&quot;240&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;outflow_arrow&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;strokeColor=#1F4E79;strokeWidth=3;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;
&lt;mxPoint x=&quot;560&quot; y=&quot;540&quot; as=&quot;sourcePoint&quot; /&gt;
&lt;mxPoint x=&quot;720&quot; y=&quot;540&quot; as=&quot;targetPoint&quot; /&gt;
&lt;/mxGeometry&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;outflow_label&quot; value=&quot;OUTFLOW&quot; style=&quot;text;html=1;fontSize=13;fontStyle=1;align=left;fontColor=#1F4E79;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;730&quot; y=&quot;525&quot; width=&quot;80&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;outlet_label_l&quot; value=&quot;heightOutlet&quot; style=&quot;text;html=1;fontSize=12;align=right;fontColor=#B22222;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;140&quot; y=&quot;525&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;outlet_label_r&quot; value=&quot;dry-run trip&quot; style=&quot;text;html=1;fontSize=12;align=left;fontColor=#B22222;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;730&quot; y=&quot;550&quot; width=&quot;120&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;deadvol_label&quot; value=&quot;dead volume&quot; style=&quot;text;html=1;fontSize=11;fontStyle=2;align=center;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;310&quot; y=&quot;560&quot; width=&quot;240&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;floor_label&quot; value=&quot;floor (0)&quot; style=&quot;text;html=1;fontSize=11;align=right;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;190&quot; y=&quot;590&quot; width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;mxCell id=&quot;basin_label&quot; value=&quot;heightBasin&quot; style=&quot;text;html=1;fontSize=11;align=right;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;
&lt;mxGeometry x=&quot;180&quot; y=&quot;70&quot; width=&quot;60&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;
&lt;/mxCell&gt;
&lt;/root&gt;
&lt;/mxGraphModel&gt;
&lt;/diagram&gt;
&lt;/mxfile&gt;">
<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>