Add generator power model and meltdown handling
This commit is contained in:
@@ -4,6 +4,8 @@ from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field, asdict
|
||||
|
||||
from .generator import GeneratorState
|
||||
|
||||
|
||||
def clamp(value: float, min_value: float, max_value: float) -> float:
|
||||
return max(min_value, min(max_value, value))
|
||||
@@ -69,6 +71,7 @@ class PlantState:
|
||||
turbines: list[TurbineState]
|
||||
primary_pumps: list[PumpState] = field(default_factory=list)
|
||||
secondary_pumps: list[PumpState] = field(default_factory=list)
|
||||
generators: list[GeneratorState] = field(default_factory=list)
|
||||
time_elapsed: float = field(default=0.0)
|
||||
|
||||
def snapshot(self) -> dict[str, float]:
|
||||
@@ -84,6 +87,7 @@ class PlantState:
|
||||
"particles": self.core.emitted_particles,
|
||||
"primary_pumps": [pump.active for pump in self.primary_pumps],
|
||||
"secondary_pumps": [pump.active for pump in self.secondary_pumps],
|
||||
"generators": [gen.running or gen.starting for gen in self.generators],
|
||||
}
|
||||
|
||||
def total_electrical_output(self) -> float:
|
||||
@@ -105,6 +109,8 @@ class PlantState:
|
||||
turbines = [TurbineState(**t) for t in turbines_blob]
|
||||
prim_pumps_blob = data.get("primary_pumps", [])
|
||||
sec_pumps_blob = data.get("secondary_pumps", [])
|
||||
generators_blob = data.get("generators", [])
|
||||
generators = [GeneratorState(**g) for g in generators_blob]
|
||||
return cls(
|
||||
core=CoreState(**core_blob, fission_product_inventory=inventory, emitted_particles=particles),
|
||||
primary_loop=CoolantLoopState(**data["primary_loop"]),
|
||||
@@ -112,5 +118,6 @@ class PlantState:
|
||||
turbines=turbines,
|
||||
primary_pumps=[PumpState(**p) for p in prim_pumps_blob],
|
||||
secondary_pumps=[PumpState(**p) for p in sec_pumps_blob],
|
||||
generators=generators,
|
||||
time_elapsed=data.get("time_elapsed", 0.0),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user