Start your cycle
++ Drag parts from the library onto the sheet, then wire ports. Select a part, + then use the top bar, right-click menu, or{" "} + R/H/ + V. Drop a pipe on a line to insert it. +
++ Chaque Fixed doit libérer une + inconnue ailleurs (Free P, actionneur, pression émergente…). Suit les étapes dans + l’ordre. +
+{fallbackHelp}
+ ) : ( +Pas de fiche technique liée à ce type.
+ )} +Chargement…
} + {error && ( +{error}
+ {fallbackHelp && ( +{fallbackHelp}
+ )} +
+ {part.slice(1, -1)}
+
+ );
+ }
+ if (part.startsWith("**") && part.endsWith("**") && part.length >= 4) {
+ return {part.slice(2, -2)};
+ }
+ const lm = /^\[([^\]]+)\]\(([^)]+)\)$/.exec(part);
+ if (lm) {
+ return (
+
+ {lm[1]}
+
+ );
+ }
+ return {part};
+ })}
+ >
+ );
+}
+
+export default function MarkdownDoc({ source }: { source: string }) {
+ const blocks = useMemo(() => parseBlocks(source), [source]);
+
+ return (
+
+
+ {b.text}
+
+ );
+ case "ul":
+ return (
+ |
+ |
+ ))}
+
|---|
|
+ |
+ ))}
+
++ ); + default: + return null; + } + })} + ++
+ Les variables viennent du schéma actuel (sources eau/air, UA, etc.). + {boundaryCount > 0 + ? ` ${boundaryCount} condition(s) limite détectée(s).` + : " Aucune source eau/air — ajoute des BrineSource pour balayer T eau."} +
++ Schéma vide — charge un exemple ou place des composants avant le multi-run. +
+ )} + + {sweeps.map((sweep, i) => { + const selected = targets.find((t) => t.path === sweep.path); + return ( +{error}
} + + {results && ( +| Cas | +Statut | +COP | +Qcool kW | +Wcomp kW | +ms | +
|---|---|---|---|---|---|
| + {r.case.label} + | ++ {r.ok ? k.status : r.error ?? "failed"} + | ++ {k.cop != null ? k.cop.toFixed(3) : "—"} + | ++ {k.qCoolKw != null ? k.qCoolKw.toFixed(2) : "—"} + | ++ {k.powerKw != null ? k.powerKw.toFixed(2) : "—"} + | +{Math.round(r.durationMs)} | +
Sélectionne un composant sur le schéma pour voir ses paramètres.
++ Après Simulate, clique un composant pour ouvrir ses variables (P, T, ṁ, ΔP…) comme dans + Modelica / Dymola. +
+Rappel rapide
+No parameters in this tab.
+ ) : ( +| Parameter | +Value | +Unit | + {showFixedCol && ( ++ Fixed + | + )} +
|---|---|---|---|
| + {p.label} + {p.required ? * : null} + | +
+ |
+ + {p.unit ?? ""} + | + {showFixedCol && ( +
+ {p.fixable ? (
+ {
+ const checked = e.target.checked;
+ const seed =
+ node.data.params[p.key] === undefined &&
+ p.default !== undefined
+ ? { [p.key]: p.default }
+ : {};
+
+ if (BOUNDARY_TYPES.has(node.data.type)) {
+ const patches = boundaryFixPairingPatches(
+ node.id,
+ p.key,
+ checked,
+ nodes as Node |
+ )}
+
+ Comment calibrer : coche Fixed sur la cible (SST/SDT), décoche + Fixed sur le facteur (Z_UA). Z_UA vaut 1 par défaut (pas de + correction). +
++ Tu n’as pas besoin du nœud « Regulation loop » pour ça. +
+Primary objective only.
+ ) : ( +Pas encore de résultats
++ Lance Simulate, puis reclique ce composant — tu verras P, T, Tsat, ṁ, ΔP, + Q̇ comme dans le Variable Browser Modelica. +
+Aucun port câblé.
+ ) : ( +| Port | +P | +T | +Tsat | +h | +ṁ | +
|---|---|---|---|---|---|
| + {p.port} + + {p.stream === "secondary" ? "sec" : p.role} + + | +{fmtOpt(p.pressure_bar, 3)} | +{fmtOpt(p.temperature_c, 1)} | +{fmtOpt(p.tsat_c, 1)} | +{fmtOpt(p.enthalpy_kj_kg, 1)} | +{fmtOpt(p.mass_flow_kg_s, 4)} | +
No solution to inspect
++ Load the air-water exchanger example, choose Newton or Picard, then solve. +
+
+ {error}
+
+ {diagnostics && (
+ | edge | +P bar | +h kJ/kg | +m kg/s | +
|---|---|---|---|
| + {s.source && s.target ? `${s.source} -> ${s.target}` : `edge ${s.edge ?? s.edge_id ?? i}`} + | +{formatNumber(edgePressureBar(s), 3)} | +{formatNumber(edgeEnthalpyKj(s), 2)} | +{formatNumber(s.mass_flow_kg_s, 4)} | +
| # | +‖r‖₂ | +‖Δx‖ | +α | +dom | +
|---|---|---|---|---|
| {row.iteration} | +{formatScientific(row.residual_norm)} | +{formatScientific(row.delta_norm)} | ++ {typeof row.alpha === "number" ? row.alpha.toFixed(3) : "—"} + | ++ {typeof row.max_residual_index === "number" + ? `eq[${row.max_residual_index}]` + : "—"} + | +
+ {result.dof.summary}
+
+
+ {config ? JSON.stringify(config, null, 2) : "No config has been sent yet."}
+
+
+ {result ? JSON.stringify(result, null, 2) : "No response yet."}
+
+