51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
import pytest
|
|
|
|
from reactor_sim import constants
|
|
from reactor_sim.state import CoolantLoopState
|
|
from reactor_sim.thermal import ThermalSolver, heat_transfer, saturation_temperature
|
|
|
|
|
|
def _secondary_loop(temp_in: float = 350.0, pressure: float = 0.5, flow: float = 200.0) -> CoolantLoopState:
|
|
nominal_mass = constants.SECONDARY_LOOP_VOLUME_M3 * constants.COOLANT_DENSITY
|
|
return CoolantLoopState(
|
|
temperature_in=temp_in,
|
|
temperature_out=temp_in,
|
|
pressure=pressure,
|
|
mass_flow_rate=flow,
|
|
steam_quality=0.0,
|
|
inventory_kg=nominal_mass,
|
|
level=constants.SECONDARY_INVENTORY_TARGET,
|
|
)
|
|
|
|
|
|
def test_secondary_heats_to_saturation_before_boiling():
|
|
solver = ThermalSolver()
|
|
loop = _secondary_loop(temp_in=330.0, flow=180.0, pressure=0.5)
|
|
sat_temp = saturation_temperature(loop.pressure)
|
|
solver.step_secondary(loop, transferred_mw=50.0, dt=1.0)
|
|
assert loop.steam_quality == pytest.approx(0.0)
|
|
assert loop.temperature_out < sat_temp
|
|
|
|
|
|
def test_secondary_generates_steam_when_energy_exceeds_sensible_heat():
|
|
solver = ThermalSolver()
|
|
loop = _secondary_loop(temp_in=330.0, flow=180.0, pressure=0.5)
|
|
loop.inventory_kg *= 0.1 # reduce mass to let boil-up happen quickly
|
|
sat_temp = saturation_temperature(loop.pressure)
|
|
solver.step_secondary(loop, transferred_mw=120.0, dt=100.0)
|
|
assert loop.temperature_out == pytest.approx(sat_temp, rel=0.05)
|
|
assert loop.steam_quality > 0.0
|
|
assert loop.steam_quality < 1.0
|
|
|
|
|
|
def test_heat_transfer_reduced_by_fouling():
|
|
primary = CoolantLoopState(
|
|
temperature_in=360.0, temperature_out=380.0, pressure=15.0, mass_flow_rate=50_000.0, steam_quality=0.0
|
|
)
|
|
secondary = CoolantLoopState(
|
|
temperature_in=320.0, temperature_out=330.0, pressure=6.5, mass_flow_rate=50_000.0, steam_quality=0.1
|
|
)
|
|
clean = heat_transfer(primary, secondary, core_power_mw=7_000.0, fouling_factor=0.0)
|
|
fouled = heat_transfer(primary, secondary, core_power_mw=7_000.0, fouling_factor=0.25)
|
|
assert fouled < clean
|