Files
Reactor-Sim/tests/test_neutronics.py
2025-11-23 23:23:21 +01:00

46 lines
1.2 KiB
Python

import pytest
from reactor_sim.neutronics import NeutronDynamics
from reactor_sim.state import CoreState
def _core_state(
temperature: float = 950.0,
flux: float = 2e7,
burnup: float = 0.01,
power: float = 500.0,
) -> CoreState:
return CoreState(
fuel_temperature=temperature,
neutron_flux=flux,
reactivity_margin=0.0,
power_output_mw=power,
burnup=burnup,
)
def test_reactivity_increases_with_rod_withdrawal():
dynamics = NeutronDynamics()
state = _core_state()
rho_full_out = dynamics.reactivity(state, control_fraction=0.0)
rho_half = dynamics.reactivity(state, control_fraction=0.5)
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
def test_xenon_penalty_caps():
dynamics = NeutronDynamics()
state = _core_state()
state.xenon_inventory = 50.0
assert dynamics.xenon_penalty(state) == 0.05
state.xenon_inventory = 0.2
assert dynamics.xenon_penalty(state) == pytest.approx(0.01)