@@ -19,19 +19,41 @@ an engineering software project.
1919- Configurable sample count, interval, random seed, and ISO 8601 start time
2020- CSV and JSON output
2121- Scenario and ground-truth anomaly labels in every row
22- - Coupled flow, pump, pressure-loss, heat-load, and temperature relationships
22+ - A clearly named ` synthetic_heat_load_w ` model input in every output row
23+ - Coupled flow, pump, resistance, pressure-loss, and temperature relationships
2324- Fixed default start time and seeded randomness for full reproducibility
2425- Committed example datasets and a matplotlib plotting script
2526
2627## Technical approach
2728
2829The simulator uses Python's standard ` random.Random ` class with a local seeded
29- generator. Pump speed influences flow, pipe resistance and flow influence
30- pressure loss , and the outlet temperature rise is calculated from a simplified
31- heat balance using water's approximate specific heat. Each scenario changes a
32- small number of those variables so its behavior remains understandable .
30+ generator. Each scenario first sets pump speed, relative hydraulic resistance,
31+ synthetic heat load , and any downstream delivery loss. The generator then
32+ calculates flow, pressure drop, and outlet temperature in that order. This keeps
33+ the reported pump, flow, and pressure values tied to one simplified model .
3334
34- These relationships are simplified and are not a complete physical model.
35+ The core relationships are:
36+
37+ ``` text
38+ flow = 0.39 kg/s × (pump speed / 60%) × downstream delivery fraction
39+ / sqrt(relative resistance) × (1 + seeded flow noise)
40+
41+ pressure drop = 35 kPa × relative resistance × (flow / 0.39 kg/s)²
42+
43+ temperature rise = synthetic_heat_load_w / (flow × 4180 J/(kg·K))
44+ ```
45+
46+ Relative resistance is 1.0 in normal operation. Restricted-flow and
47+ pressure-drop-increase scenarios raise it; their synthetic pump controller also
48+ raises pump speed. Pump failure reduces commanded pump speed and the imposed
49+ heat load. The leak scenario reduces the fraction of flow delivered past the
50+ modeled leak location and lowers inlet pressure.
51+
52+ ` synthetic_heat_load_w ` is an imposed ground-truth value created by the model.
53+ It is not measured electrical power, a calibrated sensor reading, or evidence
54+ from real cooling equipment. The relationships above are intentionally
55+ simplified and are not a pump curve, hydraulic solver, or complete physical
56+ model.
3557
3658## Installation
3759
@@ -84,8 +106,9 @@ Every output row contains:
84106
85107``` text
86108timestamp, inlet_temperature_c, outlet_temperature_c, flow_rate_kg_s,
87- inlet_pressure_kpa, outlet_pressure_kpa, relative_humidity_percent,
88- pump_speed_percent, leak_detected, scenario, is_anomaly, anomaly_type
109+ synthetic_heat_load_w, inlet_pressure_kpa, outlet_pressure_kpa,
110+ relative_humidity_percent, pump_speed_percent, leak_detected, scenario,
111+ is_anomaly, anomaly_type
89112```
90113
91114Committed datasets:
@@ -95,7 +118,7 @@ Committed datasets:
95118- ` data/pump_failure.csv `
96119- ` data/leak_event.json `
97120
98- Plot the restricted-flow dataset:
121+ Plot the restricted-flow dataset, including its imposed synthetic heat load :
99122
100123``` bash
101124python examples/plot_session.py
@@ -111,22 +134,29 @@ python -m ruff check .
111134python -m ruff format --check .
112135```
113136
114- The tests cover all scenarios, physical relationships, timestamps, file output,
115- invalid inputs, CLI behavior, and exact reproducibility for equal seeds.
137+ The tests cover all eight scenarios, rounded heat-balance consistency, expected
138+ scenario trends, timestamps, file output, invalid inputs, CLI behavior, and
139+ exact reproducibility for equal seeds.
116140
117141## Assumptions
118142
119143- Water has a constant approximate specific heat of 4180 J/(kg·K).
120- - A steady synthetic heat load is applied within each sample.
121- - Flow is related to pump speed with small measurement noise.
122- - Pressure loss follows a simplified resistance-times-flow-squared relationship.
144+ - The exported heat load is synthetic ground truth imposed by the generator.
145+ - Flow scales with pump speed and inverse square-root relative resistance, with
146+ small seeded noise.
147+ - Pressure loss follows a simplified relative-resistance-times-flow-squared
148+ relationship.
123149- Scenario transitions are intentionally smooth enough to inspect in a chart.
124150
125151## Limitations
126152
127153- All values are synthetic and have not been measured on physical equipment.
128154- The model omits control-loop dynamics, fluid-property variation, pipe geometry,
129- sensor calibration curves, and detailed pump performance.
155+ sensor calibration curves, pump curves, and detailed pump performance.
156+ - Relative resistance and downstream delivery fraction are illustrative scenario
157+ controls, not identified parameters from real equipment.
158+ - The sensor-drift scenario deliberately biases reported outlet temperature, so
159+ its measured temperature rise no longer closes the underlying heat balance.
130160- Ground-truth labels are known because the generator creates the anomalies; they
131161 do not represent the output of a detection algorithm.
132162- The ranges are plausible examples, not specifications for a real system.
0 commit comments