diff --git a/src/reactor_sim/generator.py b/src/reactor_sim/generator.py index 5ec7685..d25bba8 100644 --- a/src/reactor_sim/generator.py +++ b/src/reactor_sim/generator.py @@ -52,8 +52,11 @@ class DieselGenerator: 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) + progress = 1.0 - state.spool_remaining / max(self.spool_time, 1e-6) + available = self.rated_output_mw * progress + delivered = min(available, max(0.0, load_demand_mw)) + state.power_output_mw = delivered + state.battery_output_mw = min(0.5, delivered) if delivered > 0 else 0.0 if state.spool_remaining <= 0.0: state.starting = False state.running = True @@ -61,7 +64,8 @@ class DieselGenerator: LOGGER.info("Generator online at %.1f MW", self.rated_output_mw) elif state.running: available = self.rated_output_mw - state.power_output_mw = min(available, load_demand_mw) + delivered = min(available, max(0.0, load_demand_mw)) + state.power_output_mw = delivered state.status = "RUN" if state.power_output_mw > 0 else "IDLE" else: state.power_output_mw = 0.0