From 92857a27a0fadc12853f12d2f1aa5ec39d9c2e84 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Sat, 22 Nov 2025 23:23:06 +0100 Subject: [PATCH] Show generator battery output and slow idle drain --- src/reactor_sim/dashboard.py | 2 +- src/reactor_sim/generator.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/reactor_sim/dashboard.py b/src/reactor_sim/dashboard.py index 285fecf..8736048 100644 --- a/src/reactor_sim/dashboard.py +++ b/src/reactor_sim/dashboard.py @@ -565,7 +565,7 @@ class ReactorDashboard: status = "RUN" if gen.running else "START" if gen.starting else "OFF" spool = f" spool {gen.spool_remaining:4.1f}s" if gen.starting else "" lines.append((f"Gen{idx + 1}", f"{status} {gen.power_output_mw:6.1f}/{self.reactor.generators[idx].rated_output_mw:4.0f} MW{spool}")) - lines.append((f" Battery", f"{gen.battery_charge*100:5.1f}%")) + lines.append((f" Battery", f"{gen.battery_charge*100:5.1f}% out {gen.battery_output_mw:4.1f} MW")) return lines def _power_lines(self, state: PlantState) -> list[tuple[str, str]]: diff --git a/src/reactor_sim/generator.py b/src/reactor_sim/generator.py index 39bb023..5ec7685 100644 --- a/src/reactor_sim/generator.py +++ b/src/reactor_sim/generator.py @@ -18,6 +18,7 @@ class GeneratorState: power_output_mw: float battery_charge: float status: str = "OFF" + battery_output_mw: float = 0.0 @dataclass @@ -48,9 +49,11 @@ class DieselGenerator: def step(self, state: GeneratorState, load_demand_mw: float, dt: float) -> float: """Advance generator dynamics and return delivered power.""" + state.battery_output_mw = 0.0 if state.starting: state.spool_remaining = max(0.0, state.spool_remaining - dt) state.power_output_mw = self.rated_output_mw * (1.0 - state.spool_remaining / max(self.spool_time, 1e-6)) + state.battery_output_mw = min(0.5, load_demand_mw) if state.spool_remaining <= 0.0: state.starting = False state.running = True @@ -67,8 +70,8 @@ class DieselGenerator: if state.running: state.battery_charge = min(1.0, state.battery_charge + 0.02 * dt) elif state.starting: - state.battery_charge = max(0.0, state.battery_charge - 0.01 * dt) + state.battery_charge = max(0.0, state.battery_charge - 0.003 * dt) else: - state.battery_charge = max(0.0, state.battery_charge - 0.001 * dt) + state.battery_charge = max(0.0, state.battery_charge - 0.00005 * dt) return state.power_output_mw