Restore full power when rods are withdrawn

This commit is contained in:
Codex Agent
2025-11-22 19:27:18 +01:00
parent a8da5371db
commit 287a8e186a
3 changed files with 18 additions and 1 deletions

View File

@@ -11,6 +11,7 @@ COOLANT_DENSITY = 700.0 # kg/m^3 averaged between phases
MAX_CORE_TEMPERATURE = 1_800.0 # K MAX_CORE_TEMPERATURE = 1_800.0 # K
MAX_PRESSURE = 15.0 # MPa typical PWR primary loop limit MAX_PRESSURE = 15.0 # MPa typical PWR primary loop limit
CONTROL_ROD_SPEED = 0.03 # fraction insertion per second CONTROL_ROD_SPEED = 0.03 # fraction insertion per second
CONTROL_ROD_WORTH = 0.03 # delta rho contribution when fully withdrawn
STEAM_TURBINE_EFFICIENCY = 0.34 STEAM_TURBINE_EFFICIENCY = 0.34
GENERATOR_EFFICIENCY = 0.96 GENERATOR_EFFICIENCY = 0.96
ENVIRONMENT_TEMPERATURE = 295.0 # K ENVIRONMENT_TEMPERATURE = 295.0 # K

View File

@@ -33,7 +33,7 @@ class NeutronDynamics:
def reactivity(self, state: CoreState, control_fraction: float) -> float: def reactivity(self, state: CoreState, control_fraction: float) -> float:
rho = ( rho = (
self.shutdown_bias + self.shutdown_bias +
0.02 * (1.0 - control_fraction) constants.CONTROL_ROD_WORTH * (1.0 - control_fraction)
+ temperature_feedback(state.fuel_temperature) + temperature_feedback(state.fuel_temperature)
- fuel_reactivity_penalty(state.burnup) - fuel_reactivity_penalty(state.burnup)
- xenon_poisoning(state.neutron_flux) - xenon_poisoning(state.neutron_flux)

View File

@@ -144,3 +144,19 @@ def test_primary_pumps_spool_up_over_seconds():
reactor.step(state, dt=1.0, command=ReactorCommand(coolant_demand=1.0)) reactor.step(state, dt=1.0, command=ReactorCommand(coolant_demand=1.0))
assert state.primary_loop.mass_flow_rate == pytest.approx(target_flow, rel=0.1) assert state.primary_loop.mass_flow_rate == pytest.approx(target_flow, rel=0.1)
def test_full_rod_withdrawal_reaches_gigawatt_power():
reactor = Reactor.default()
state = reactor.initial_state()
reactor.shutdown = False
reactor.control.manual_control = True
reactor.control.rod_fraction = 0.0
reactor.primary_pump_active = True
reactor.secondary_pump_active = True
for _ in range(60):
reactor.step(state, dt=1.0)
assert state.core.power_output_mw > 2_000.0
assert state.core.fuel_temperature > 400.0