Snapshot WIP: Probe calibration path, faer LU backend, and BPHX phase-change duty.
Some checks failed
CI / check (push) Has been cancelled

Checkpoint incomplete calibration work (cond SDT green, evap SST failing) plus related solver/UI changes so the next pass can fix and extend safely.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-19 21:44:01 +02:00
parent 2f1f7ecb80
commit 3808e0f11b
39 changed files with 3648 additions and 265 deletions

View File

@@ -158,6 +158,7 @@ export function portRole(port: string): "source" | "target" {
*/
export function nodeSize(type: string): { w: number; h: number } {
const t = String(type || "");
if (t === "Probe") return { w: 36, h: 36 };
if (t === "SaturatedController") return { w: 184, h: 96 };
if (t.includes("Compressor")) return { w: 76, h: 76 };
if (t === "HeatExchanger") return { w: 92, h: 92 };
@@ -207,11 +208,80 @@ export const COMPONENT_CATEGORIES = [
"Piping",
"Hydraulics",
"Boundaries",
"Instrumentation",
"Advanced",
"Generic",
] as const;
export const COMPONENTS: ComponentMeta[] = [
// ── Instrumentation: measurement taps for calibration (Probe = all measurements) ──
{
type: "Probe",
label: "Probe (sonde)",
category: "Instrumentation",
description:
"Sonde de mesure posée sur une ligne. Lit P/T/SH/SC/SST/SDT/DGT/DSH/capacité/ṁ/h à cet endroit. Toute calibration impose sa cible sur un Probe.",
help:
"Sonde de calibration (Probe)\n" +
"Toute calibration se fait via un Probe posé sur une ligne (règle dure).\n\n" +
"1. Glisse le Probe sur un fil du schéma (comme pour insérer un Pipe).\n" +
"2. Choisis la grandeur mesurée (SST, SDT, DGT, DSH, SH, SC, T, P, débit, capacité, enthalpie) et le fluide.\n" +
"3. Coche Fixed sur « Cible » et tape la valeur mesurée.\n" +
"4. Libère le Z-factor correspondant (Z_UA, Z_dP, Z_flow…) sur le composant à calibrer.\n" +
"Le solveur appaire automatiquement le Probe (mesure) et le Z-factor libre (inconnue).",
ports: ["inlet", "outlet"],
color: "#0ea5e9",
params: [
{
key: "measure",
label: "Grandeur mesurée",
kind: "string",
default: "SH",
required: true,
section: "Mesure",
description:
"Grandeur physique mesurée à l'emplacement du Probe. SST/SDT = Tsat(P), SH/DSH = TTsat(P), SC = Tsat(P)T.",
options: [
{ value: "SST", label: "SST (Tsat aspiration)" },
{ value: "SDT", label: "SDT (Tsat refoulement)" },
{ value: "DGT", label: "DGT (T° gaz refoulement)" },
{ value: "DSH", label: "DSH (surch. refoulement)" },
{ value: "SH", label: "SH (surchauffe)" },
{ value: "SC", label: "SC (sous-refroid.)" },
{ value: "T", label: "T (température)" },
{ value: "P", label: "P (pression)" },
{ value: "MassFlow", label: "Débit massique" },
{ value: "Capacity", label: "Capacité (kW)" },
{ value: "Enthalpy", label: "Enthalpie" },
],
},
{
key: "fluid",
label: "Fluide",
kind: "string",
default: "R134a",
required: true,
section: "Mesure",
description: "Fluide frigorigène pour le calcul de Tsat/SH/SC (via CoolProp).",
},
{
key: "target",
label: "Cible (Fixed = impose)",
kind: "number",
section: "Calibration",
fixable: true,
defaultFixed: false,
// Auto: resolved from `measure` at config-build time
// (SST/SDT → saturationTemperature, SH/DSH → superheat, SC → subcooling,
// DGT/T → temperature, P → pressure, MassFlow → massFlowRate,
// Capacity → capacity, Enthalpy → heatTransferRate as carrier).
measureOutput: "auto",
description:
"Coche Fixed et tape la valeur mesurée (K pour températures, K pour SH/SC, Pa pour P, kg/s pour débit, W pour capacité, J/kg pour h).",
},
],
},
// ── Advanced regulation (optional — most users use Fixed on Calibration tab) ──
{
type: "SaturatedController",
@@ -739,19 +809,6 @@ export const COMPONENTS: ComponentMeta[] = [
{ key: "fan_head_pressure_target_c", label: "Fan head-pressure target", kind: "number", unit: "°C", section: "Controls", advanced: true },
{ key: "flooded_head_pressure_target_c", label: "Flooded head-pressure target", kind: "number", unit: "°C", section: "Controls", advanced: true },
{ key: "skip_pressure_eq", label: "Skip pressure equation", kind: "boolean", default: false, section: "Solver structure", advanced: true },
// Fixed checkbox: ON = impose SDT; OFF = ignore as measure
{
key: "calib_sdt_c",
label: "SDT (calib target)",
kind: "number",
unit: "°C",
default: 40.0,
section: "Calibration",
fixable: true,
defaultFixed: false,
measureOutput: "saturationTemperature",
description: "Cocher Fixed pour imposer la SDT (mesure). Libérer Z_UA en même temps.",
},
{
key: "z_ua",
label: "Z_UA (UA factor)",
@@ -803,18 +860,6 @@ export const COMPONENTS: ComponentMeta[] = [
{ key: "ua", label: "UA", kind: "number", unit: "W/K", default: 6000.0, required: true, section: "Thermal model", min: 0.0, sweepable: true, sweepGroup: "thermal" },
{ key: "t_sat_k", label: "Fixed saturation temperature", kind: "number", unit: "K", default: 275.15, section: "Thermal model", description: "Used only in fixed-pressure mode." },
{ key: "superheat_k", label: "Outlet superheat closure", kind: "number", unit: "K", default: 5.0, section: "Thermal model", min: 0.0 },
{
key: "calib_sst_c",
label: "SST (calib target)",
kind: "number",
unit: "°C",
default: 5.0,
section: "Calibration",
fixable: true,
defaultFixed: false,
measureOutput: "saturationTemperature",
description: "Cocher Fixed pour imposer la SST. Décocher Fixed sur Z_UA pour calibrer.",
},
{
key: "z_ua",
label: "Z_UA (UA factor)",
@@ -1090,17 +1135,6 @@ export const COMPONENTS: ComponentMeta[] = [
],
},
{ key: "ua", label: "UA override", kind: "number", unit: "W/K", section: "Calibration", min: 0.0, advanced: true },
{
key: "calib_sst_c",
label: "SST (calib target)",
kind: "number",
unit: "°C",
default: 5.0,
section: "Calibration",
fixable: true,
defaultFixed: false,
measureOutput: "saturationTemperature",
},
{
key: "z_ua",
label: "Z_UA (UA factor)",
@@ -1190,17 +1224,6 @@ export const COMPONENTS: ComponentMeta[] = [
],
},
{ key: "ua", label: "UA override", kind: "number", unit: "W/K", section: "Calibration", min: 0.0, advanced: true },
{
key: "calib_sdt_c",
label: "SDT (calib target)",
kind: "number",
unit: "°C",
default: 40.0,
section: "Calibration",
fixable: true,
defaultFixed: false,
measureOutput: "saturationTemperature",
},
{
key: "z_ua",
label: "Z_UA (UA factor)",
@@ -1270,18 +1293,6 @@ export const COMPONENTS: ComponentMeta[] = [
section: "Secondary hydraulics",
min: 0.0,
},
{
key: "calib_sst_c",
label: "SST (calib target)",
kind: "number",
unit: "°C",
default: 5.0,
section: "Calibration",
fixable: true,
defaultFixed: false,
measureOutput: "saturationTemperature",
description: "Cocher Fixed pour imposer la SST mesurée. Décocher Fixed sur Z_UA.",
},
{
key: "z_ua",
label: "Z_UA (UA factor)",