Files
2026-06-03 15:41:04 +08:00

48 lines
1.6 KiB
Python

# tests/cryo_tank/test_heat_leak.py
"""Tests for heat leak models."""
from cryo_tank.heat_leak import HeatLeakModel, MLIHeatLeak, FoamHeatLeak
class TestMLIHeatLeak:
def test_mli_returns_constant_heat_flux(self):
model = MLIHeatLeak(A_total=3.306, q_mli=1.5)
Q = model.compute(T_inner=78.0, T_env=300.0)
assert abs(Q - 3.306 * 1.5) < 1e-10
def test_mli_default_q_is_1(self):
model = MLIHeatLeak(A_total=3.306)
Q = model.compute(T_inner=78.0, T_env=300.0)
assert abs(Q - 3.306) < 1e-10
def test_mli_independent_of_temperature(self):
model = MLIHeatLeak(A_total=3.306, q_mli=2.0)
Q1 = model.compute(T_inner=78.0, T_env=300.0)
Q2 = model.compute(T_inner=80.0, T_env=250.0)
assert abs(Q1 - Q2) < 1e-10
class TestFoamHeatLeak:
def test_foam_constant_k(self):
model = FoamHeatLeak(A_total=3.306, k_eff=0.03, delta=0.05)
Q = model.compute(T_inner=78.0, T_env=300.0)
expected = 3.306 * 0.03 * (300.0 - 78.0) / 0.05
assert abs(Q - expected) < 1e-6
def test_foam_callable_k(self):
def k_func(T):
return 0.01 + 0.0001 * T # linear k(T)
model = FoamHeatLeak(A_total=3.306, k_eff=k_func, delta=0.05)
Q = model.compute(T_inner=78.0, T_env=300.0)
T_mean = (300.0 + 78.0) / 2.0
k_at_mean = k_func(T_mean)
expected = 3.306 * k_at_mean * (300.0 - 78.0) / 0.05
assert abs(Q - expected) < 1e-6
def test_foam_zero_dT_gives_zero_Q(self):
model = FoamHeatLeak(A_total=3.306, k_eff=0.03, delta=0.05)
Q = model.compute(T_inner=300.0, T_env=300.0)
assert abs(Q) < 1e-10