Show xenon/iodine inventories on dashboard

This commit is contained in:
Codex Agent
2025-11-23 19:48:02 +01:00
parent ba4505701a
commit 70608efdc8
2 changed files with 13 additions and 5 deletions

View File

@@ -548,15 +548,14 @@ class ReactorDashboard:
inventory = state.core.fission_product_inventory or {} inventory = state.core.fission_product_inventory or {}
particles = state.core.emitted_particles or {} particles = state.core.emitted_particles or {}
lines: list[tuple[str, str]] = [] lines: list[tuple[str, str]] = []
def fmt(symbol: str, label: str) -> tuple[str, str]: def fmt(symbol: str, label: str, qty: float) -> tuple[str, str]:
qty = inventory.get(symbol, 0.0)
threshold = constants.KEY_POISON_THRESHOLDS.get(symbol) threshold = constants.KEY_POISON_THRESHOLDS.get(symbol)
flag = " !" if threshold is not None and qty >= threshold else "" flag = " !" if threshold is not None and qty >= threshold else ""
return (f"{label}{flag}", f"{qty:9.2e}") return (f"{label}{flag}", f"{qty:9.2e}")
lines.append(fmt("Xe", "Xe (xenon)")) lines.append(fmt("Xe", "Xe (xenon)", getattr(state.core, "xenon_inventory", 0.0)))
lines.append(fmt("Sm", "Sm (samarium)")) lines.append(fmt("Sm", "Sm (samarium)", inventory.get("Sm", 0.0)))
lines.append(fmt("I", "I (iodine)")) lines.append(fmt("I", "I (iodine)", getattr(state.core, "iodine_inventory", 0.0)))
lines.append(("Neutrons (src)", f"{particles.get('n', 0.0):9.2e}")) lines.append(("Neutrons (src)", f"{particles.get('n', 0.0):9.2e}"))
lines.append(("Gammas", f"{particles.get('gamma', 0.0):9.2e}")) lines.append(("Gammas", f"{particles.get('gamma', 0.0):9.2e}"))
lines.append(("Alphas", f"{particles.get('alpha', 0.0):9.2e}")) lines.append(("Alphas", f"{particles.get('alpha', 0.0):9.2e}"))

View File

@@ -23,3 +23,12 @@ def test_reactivity_increases_with_rod_withdrawal():
rho_full_out = dynamics.reactivity(state, control_fraction=0.0) rho_full_out = dynamics.reactivity(state, control_fraction=0.0)
rho_half = dynamics.reactivity(state, control_fraction=0.5) rho_half = dynamics.reactivity(state, control_fraction=0.5)
assert rho_full_out > rho_half assert rho_full_out > rho_half
def test_poisons_accumulate_under_power():
dynamics = NeutronDynamics()
state = _core_state(power=800.0, flux=1e6)
dynamics.update_poisons(state, dt=100.0)
dynamics.update_poisons(state, dt=100.0)
assert state.iodine_inventory > 0.0
assert state.xenon_inventory > 0.0