Add shared snapshot helper and simulation snapshot mode
This commit is contained in:
@@ -18,6 +18,7 @@ from .reactor import Reactor
|
||||
from .simulation import ReactorSimulation
|
||||
from .state import PlantState
|
||||
from .commands import ReactorCommand
|
||||
from .snapshot import snapshot_lines
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@@ -431,31 +432,7 @@ class TextualDashboard(App):
|
||||
return (enthalpy * mass_flow) / 1_000.0
|
||||
|
||||
def _snapshot_lines(self) -> list[str]:
|
||||
core = self.state.core
|
||||
prim = self.state.primary_loop
|
||||
sec = self.state.secondary_loop
|
||||
t0 = self.state.turbines[0] if self.state.turbines else None
|
||||
lines = [
|
||||
f"Time {self.state.time_elapsed:6.1f}s",
|
||||
f"Core: {core.power_output_mw:6.1f}MW fuel {core.fuel_temperature:6.1f}K rods {self.reactor.control.rod_fraction:.3f} ({'AUTO' if not self.reactor.control.manual_control else 'MAN'})",
|
||||
f"Primary: P={prim.pressure:4.1f}/{constants.MAX_PRESSURE:4.1f}MPa Tin={prim.temperature_in:6.1f}K Tout={prim.temperature_out:6.1f}K Flow={prim.mass_flow_rate:6.0f}kg/s",
|
||||
f"Secondary: P={sec.pressure:4.1f}/{constants.MAX_PRESSURE:4.1f}MPa Tin={sec.temperature_in:6.1f}K Tout={sec.temperature_out:6.1f}K q={sec.steam_quality:4.2f} Flow={sec.mass_flow_rate:6.0f}kg/s",
|
||||
f"HX ΔT={self.state.primary_to_secondary_delta_t:4.0f}K Eff={self.state.heat_exchanger_efficiency*100:5.1f}%",
|
||||
]
|
||||
if t0:
|
||||
lines.append(
|
||||
f"Turbines: h={t0.steam_enthalpy:5.0f}kJ/kg avail={self._steam_available_power(self.state):5.1f}MW "
|
||||
f"CondP={t0.condenser_pressure:4.2f}/{constants.CONDENSER_MAX_PRESSURE_MPA:4.2f}MPa "
|
||||
f"CondT={t0.condenser_temperature:6.1f}K"
|
||||
)
|
||||
lines.append("Outputs: " + " ".join([f"T{idx+1}:{t.electrical_output_mw:5.1f}MW" for idx, t in enumerate(self.state.turbines)]))
|
||||
failures = ", ".join(self.reactor.health_monitor.failure_log) if self.reactor.health_monitor.failure_log else "None"
|
||||
lines.append(
|
||||
f"Status: pumps pri {[p.status for p in self.state.primary_pumps]} sec {[p.status for p in self.state.secondary_pumps]} "
|
||||
f"relief pri={'OPEN' if self.reactor.primary_relief_open else 'CLOSED'} sec={'OPEN' if self.reactor.secondary_relief_open else 'CLOSED'} "
|
||||
f"failures={failures}"
|
||||
)
|
||||
return lines
|
||||
return snapshot_lines(self.reactor, self.state)
|
||||
|
||||
def _save_snapshot(self, auto: bool = False) -> None:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user