Snapshot WIP: Probe calibration path, faer LU backend, and BPHX phase-change duty.
Some checks failed
CI / check (push) Has been cancelled
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:
@@ -224,6 +224,11 @@ pub struct System {
|
||||
/// Registry of component names for constraint validation.
|
||||
/// Maps human-readable names (e.g., "evaporator") to NodeIndex.
|
||||
component_names: HashMap<String, NodeIndex>,
|
||||
/// Per-component calibration indices snapshot, captured at `finalize()` time.
|
||||
/// Lets external readers (e.g. result extraction) learn which Z-factors
|
||||
/// (z_ua, z_dp, z_flow, …) were promoted to free unknowns and where they
|
||||
/// live in the state vector, so the solved values can be surfaced to the user.
|
||||
calib_indices_by_name: HashMap<String, entropyk_core::CalibIndices>,
|
||||
finalized: bool,
|
||||
total_state_len: usize,
|
||||
/// When `true` (default), `finalize` rejects **over-constrained** systems.
|
||||
@@ -246,6 +251,7 @@ impl System {
|
||||
saturated_controllers: Vec::new(),
|
||||
free_actuators: Vec::new(),
|
||||
component_names: HashMap::new(),
|
||||
calib_indices_by_name: HashMap::new(),
|
||||
finalized: false,
|
||||
total_state_len: 0,
|
||||
enforce_dof_gate: true,
|
||||
@@ -682,6 +688,10 @@ impl System {
|
||||
}
|
||||
}
|
||||
|
||||
// Persist the per-component calib map so external readers (result
|
||||
// extraction) can surface solved Z-factor values (z_ua, z_dp, …).
|
||||
self.calib_indices_by_name = comp_calib_indices;
|
||||
|
||||
// Wire physical thermal couplings (Story 3.4 completion): each coupling
|
||||
// owns one state unknown Q [W] at `coupling_state_index(i)`. The
|
||||
// cold-side receiver component (e.g. `ThermalLoad`) reads Q in its
|
||||
@@ -1145,6 +1155,15 @@ impl System {
|
||||
self.component_names.keys().map(|s| s.as_str())
|
||||
}
|
||||
|
||||
/// Per-component `CalibIndices` snapshot captured at `finalize()`.
|
||||
/// Each `Some(idx)` slot (z_ua, z_dp, z_flow, z_flow_eco, z_power, z_etav,
|
||||
/// actuator) means that factor was promoted to a free solver unknown and
|
||||
/// its solved value lives at `state[idx]`. Used by result extraction to
|
||||
/// surface solved calibration/control values to the user.
|
||||
pub fn calib_indices_by_name(&self) -> &HashMap<String, entropyk_core::CalibIndices> {
|
||||
&self.calib_indices_by_name
|
||||
}
|
||||
|
||||
/// Returns a reference to the component stored at the given node index.
|
||||
///
|
||||
/// # Panics
|
||||
@@ -2514,11 +2533,11 @@ impl System {
|
||||
self.total_state_len + self.inverse_control.mapping_count() + i
|
||||
}
|
||||
|
||||
fn saturated_base_index(&self) -> usize {
|
||||
pub fn saturated_base_index(&self) -> usize {
|
||||
self.total_state_len + self.inverse_control.mapping_count() + self.coupling_residual_count()
|
||||
}
|
||||
|
||||
fn saturated_u_index(&self, i: usize) -> usize {
|
||||
pub fn saturated_u_index(&self, i: usize) -> usize {
|
||||
self.saturated_base_index() + 2 * i
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user