Add diagram workbench UI with Modelica DoF coaching and ISO glyphs.

Ship the Next.js cycle editor with CAD chrome, technical HX symbols, Fixed/Free boundary guidance, and secondary water/air pressure drop support in the solver stack.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-17 22:46:46 +02:00
parent 62efea0646
commit 3358b74342
275 changed files with 70187 additions and 5230 deletions

View File

@@ -0,0 +1,71 @@
# Modelica Fixed/Free — sources consulted (Entropyk alignment)
## Official MSL (fetched)
1. **Package** `Modelica.Fluid.Sources`
https://doc.modelica.org/om/Modelica.Fluid.Sources.html
2. **`MassFlowSource_T`** — prescribed **mass flow + temperature** (not pressure)
https://doc.modelica.org/om/Modelica.Fluid.Sources.MassFlowSource_T.html
Quote from OpenModelica HTML (fetched 2026-07-17):
> Models an ideal flow source, with prescribed values of flow rate, temperature…
> - Prescribed mass flow rate.
> - Prescribed temperature.
No “prescribed pressure” in the component description.
3. **`Boundary_pT`** — prescribed **pressure + temperature** (not ṁ)
https://doc.modelica.org/om/Modelica.Fluid.Sources.Boundary_pT.html
Quote (fetched 2026-07-17):
> - Prescribed boundary pressure.
> - Prescribed boundary temperature.
4. **Context7** `/modelica/modelicastandardlibrary``SimplePipeline` example:
`Boundary_pT``StaticPipe` (wall friction / ΔP) → `Boundary_pT`
Double Fixed P is legal **only** with hydraulic resistance between the ends.
An isobaric secondary path must **not** Fixed-P both ends.
## Community
Rene Just Nielsen — legal pipe-end combinations:
https://stackoverflow.com/questions/79349553/how-pressure-and-flow-ports-are-different-in-modelica
| Inlet | Outlet | OK? |
|-------|--------|-----|
| Boundary_pT | Boundary_pT | Yes → ṁ from ΔP |
| Boundary_pT | MassFlowSource_T | Yes |
| MassFlowSource_T | Boundary_pT | Yes |
| MassFlowSource_T | MassFlowSource_T | **No** |
Quote: *“There is no boundary component specifying both mass flow rate and pressure.”*
## Entropyk mapping
| Mode | Source | Sink | HX secondary |
|------|--------|------|--------------|
| MassFlowSource_T (default) | Fixed T, Fixed ṁ, **Free P** | Fixed P (anchor), Free T_out | `P_outP_in+ΔP_sec(ṁ)=0` |
| Boundary_pT + friction | Fixed P, Fixed T, Free ṁ | Fixed P | Needs frictional ΔP (pipe / HX) |
| T_out rating | Free ṁ, Free P | Fixed P + Fixed T_out | Same secondary momentum |
Secondary water ΔP (quadratic, Modelica `dp_nominal` style):
`secondary_rated_pressure_drop_pa` + `secondary_rated_m_flow_kg_s`
**not** refrigerant `dp_model=msh` (tube two-phase only).
### Why HX secondary isobaric P was missing (bug)
Entropyk stores **two edges** on a water loop (`source→HX`, `HX→sink`), each with its own `P`.
Without `P_out P_in = 0` on the HX, Free P on the source left `P_in` unconstrained → DoF under by 1 per loop.
Modelica closes that via the connection/pipe graph; Entropyk now closes it on Condenser / Evaporator / FloodedEvaporator secondary residuals.
Implementation:
- UI: `apps/web/src/lib/boundaryFix.ts`
- Components: `condenser.rs`, `evaporator.rs`, `flooded_evaporator.rs` (`n_secondary` + residuals)
- Ledger: `apps/web/src/lib/dofLedger.ts`