Adjust pump statuses for power loss and add nominal displays
This commit is contained in:
@@ -27,6 +27,7 @@ PUMP_POWER_MW = 12.0 # MW draw per pump unit
|
||||
BASE_AUX_LOAD_MW = 5.0 # control, instrumentation, misc.
|
||||
NORMAL_CORE_POWER_MW = 3_000.0
|
||||
TEST_MAX_POWER_MW = 4_000.0
|
||||
PRIMARY_OUTLET_TARGET_K = 580.0
|
||||
# Threshold inventories (event counts) for flagging common poisons in diagnostics.
|
||||
KEY_POISON_THRESHOLDS = {
|
||||
"Xe": 1e20, # xenon
|
||||
|
||||
@@ -373,8 +373,8 @@ class ReactorDashboard:
|
||||
f"{state.primary_loop.mass_flow_rate:7.0f}/{self.reactor.primary_pump.nominal_flow * len(self.reactor.primary_pump_units):.0f} kg/s",
|
||||
),
|
||||
("Inlet Temp", f"{state.primary_loop.temperature_in:7.1f} K"),
|
||||
("Outlet Temp", f"{state.primary_loop.temperature_out:7.1f} K"),
|
||||
("Pressure", f"{state.primary_loop.pressure:5.2f} MPa"),
|
||||
("Outlet Temp", f"{state.primary_loop.temperature_out:7.1f} K (Target {constants.PRIMARY_OUTLET_TARGET_K:4.0f})"),
|
||||
("Pressure", f"{state.primary_loop.pressure:5.2f}/{constants.MAX_PRESSURE:4.1f} MPa"),
|
||||
],
|
||||
)
|
||||
self._draw_section(
|
||||
@@ -384,10 +384,13 @@ class ReactorDashboard:
|
||||
[
|
||||
("Pump1", self._pump_status(state.secondary_pumps, 0)),
|
||||
("Pump2", self._pump_status(state.secondary_pumps, 1)),
|
||||
("Flow", f"{state.secondary_loop.mass_flow_rate:7.0f} kg/s"),
|
||||
("Inlet Temp", f"{state.secondary_loop.temperature_in:7.1f} K"),
|
||||
("Pressure", f"{state.secondary_loop.pressure:5.2f} MPa"),
|
||||
("Steam Quality", f"{state.secondary_loop.steam_quality:5.2f}"),
|
||||
(
|
||||
"Flow",
|
||||
f"{state.secondary_loop.mass_flow_rate:7.0f}/{self.reactor.secondary_pump.nominal_flow * len(self.reactor.secondary_pump_units):.0f} kg/s",
|
||||
),
|
||||
("Inlet Temp", f"{state.secondary_loop.temperature_in:7.1f} K (Max {constants.PRIMARY_OUTLET_TARGET_K:4.0f})"),
|
||||
("Pressure", f"{state.secondary_loop.pressure:5.2f}/{constants.MAX_PRESSURE:4.1f} MPa"),
|
||||
("Steam Quality", f"{state.secondary_loop.steam_quality:5.2f}/1.00"),
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
@@ -230,23 +230,25 @@ class Reactor:
|
||||
unit_enabled = (
|
||||
self.primary_pump_active and idx < len(self.primary_pump_units) and self.primary_pump_units[idx]
|
||||
)
|
||||
powered = power_ratio > 0.1
|
||||
desired_flow = target_flow if unit_enabled else 0.0
|
||||
desired_pressure = target_pressure if unit_enabled else 0.5
|
||||
if not powered:
|
||||
desired_flow = 0.0
|
||||
desired_pressure = 0.5
|
||||
pump_state.flow_rate = self._ramp_value(
|
||||
pump_state.flow_rate, desired_flow, dt, self.primary_pump.spool_time
|
||||
)
|
||||
pump_state.pressure = self._ramp_value(
|
||||
pump_state.pressure, desired_pressure, dt, self.primary_pump.spool_time
|
||||
)
|
||||
pump_state.active = (unit_enabled and power_ratio > 0.05) or pump_state.flow_rate > 1.0
|
||||
if unit_enabled and pump_state.flow_rate < max(1.0, desired_flow * 0.8):
|
||||
pump_state.active = unit_enabled and powered and pump_state.flow_rate > 1.0
|
||||
if not powered or not unit_enabled:
|
||||
pump_state.status = "STOPPING" if pump_state.flow_rate > 1.0 else "OFF"
|
||||
elif pump_state.flow_rate < max(1.0, desired_flow * 0.8):
|
||||
pump_state.status = "STARTING"
|
||||
elif not unit_enabled and pump_state.flow_rate > 1.0:
|
||||
pump_state.status = "STOPPING"
|
||||
elif pump_state.active:
|
||||
pump_state.status = "RUN"
|
||||
else:
|
||||
pump_state.status = "OFF"
|
||||
pump_state.status = "RUN"
|
||||
total_flow += pump_state.flow_rate
|
||||
loop_pressure = max(loop_pressure, pump_state.pressure)
|
||||
state.primary_loop.mass_flow_rate = total_flow
|
||||
@@ -273,28 +275,30 @@ class Reactor:
|
||||
total_flow = 0.0
|
||||
target_pressure = 12.0 * 0.75 + 2.0
|
||||
loop_pressure = 0.5
|
||||
target_flow = self.secondary_pump.flow_rate(0.75)
|
||||
target_flow = self.secondary_pump.flow_rate(0.75) * power_ratio
|
||||
for idx, pump_state in enumerate(state.secondary_pumps):
|
||||
unit_enabled = (
|
||||
self.secondary_pump_active and idx < len(self.secondary_pump_units) and self.secondary_pump_units[idx]
|
||||
)
|
||||
powered = power_ratio > 0.1
|
||||
desired_flow = target_flow if unit_enabled else 0.0
|
||||
desired_pressure = target_pressure if unit_enabled else 0.5
|
||||
if not powered:
|
||||
desired_flow = 0.0
|
||||
desired_pressure = 0.5
|
||||
pump_state.flow_rate = self._ramp_value(
|
||||
pump_state.flow_rate, desired_flow, dt, self.secondary_pump.spool_time
|
||||
)
|
||||
pump_state.pressure = self._ramp_value(
|
||||
pump_state.pressure, desired_pressure, dt, self.secondary_pump.spool_time
|
||||
)
|
||||
pump_state.active = unit_enabled or pump_state.flow_rate > 1.0
|
||||
if unit_enabled and pump_state.flow_rate < max(1.0, desired_flow * 0.8):
|
||||
pump_state.active = unit_enabled and powered and pump_state.flow_rate > 1.0
|
||||
if not powered or not unit_enabled:
|
||||
pump_state.status = "STOPPING" if pump_state.flow_rate > 1.0 else "OFF"
|
||||
elif pump_state.flow_rate < max(1.0, desired_flow * 0.8):
|
||||
pump_state.status = "STARTING"
|
||||
elif not unit_enabled and pump_state.flow_rate > 1.0:
|
||||
pump_state.status = "STOPPING"
|
||||
elif pump_state.active:
|
||||
pump_state.status = "RUN"
|
||||
else:
|
||||
pump_state.status = "OFF"
|
||||
pump_state.status = "RUN"
|
||||
total_flow += pump_state.flow_rate
|
||||
loop_pressure = max(loop_pressure, pump_state.pressure)
|
||||
state.secondary_loop.mass_flow_rate = total_flow
|
||||
|
||||
Reference in New Issue
Block a user