8.3 KiB
低温液氮储箱仿真模块使用说明
本目录实现了一个低温液氮储箱模型,用于模拟液氮储箱在氦气增压、液氮进出口流量、环境漏热和气液两区换热作用下的温度、液位、压力、氦气用量等随时间变化。
模型入口文件是 main.py,主要参数集中在 config.py。运行后会把数据和图像写入 results/cryo_tank/。
运行方法
在项目根目录运行:
python3 src/cryo_tank/main.py
如果使用本地虚拟环境,先安装依赖:
.venv/bin/python -m pip install numpy scipy matplotlib pillow CoolProp pytest python-docx
然后运行:
.venv/bin/python src/cryo_tank/main.py
建议从项目根目录运行,而不是进入 src/cryo_tank/ 后运行。这样输出路径会稳定写到:
results/cryo_tank/
输出文件
默认输出目录由 config.py 中的 OUTPUT_DIR 控制:
OUTPUT_DIR = "results/cryo_tank"
运行完成后会生成:
cryo_tank_history.npz:压缩后的完整时序数据,适合用 Python 后处理。cryo_tank_history.csv:CSV 表格数据,适合用 Excel、Origin 或其他工具查看。cryo_tank_temperatures.png:液相温度和气枕区温度曲线。cryo_tank_level.png:液位和充满率曲线。cryo_tank_he_flow.png:氦气质量和氦气流量曲线。cryo_tank_heat.png:漏热和气液换热曲线。cryo_tank_pressure.png:总压和氦气气枕压力曲线。
如果没有看到 CSV 文件,先确认本地代码里是否有:
grep -n "save_history_csv" src/cryo_tank/main.py src/cryo_tank/output.py
然后确认实际输出位置:
find results/cryo_tank -maxdepth 1 -type f -print
代码文件功能
main.py
仿真入口。主要流程是:
- 从
config.py读取几何、工况、初始条件和求解参数。 - 创建漏热模型
MLIHeatLeak。 - 创建储箱模型
CryoTank。 - 调用
solver.run()进行 ODE 求解。 - 调用
output.py保存.npz、.csv和图像。
如果只是运行已有工况,一般只需要执行这个文件,不需要改动它。
config.py
集中存放默认参数。常用调参基本都在这个文件里完成,包括:
- 储箱几何尺寸
- 工作压力
- 初始温度和初始气枕率
- 液氮入口、出口流量
- 氦气入口温度
- 气液换热系数
- 环境温度
- 仿真结束时间
- 求解器误差容限
- 输出目录
tank_model.py
核心物理模型,定义 CryoTank 类。
状态量为:
y = [m_liq, U_liq, T_ull]
含义分别是:
m_liq:液氮质量U_liq:液相内能T_ull:气枕区温度
derive(y) 会根据状态量计算温度、体积、液位、充满率、氦气质量、气枕区总内能和氦气气枕压力等派生量。当前模型按恒压纯氦气枕处理,m_He = rho_He(T_ull, P_work) * V_ull,所以氦气质量是派生量,不是独立 ODE 状态。
rhs(t, y) 是 ODE 右端函数,由 scipy.integrate.solve_ivp 调用。
solver.py
ODE 求解器封装。主要函数是:
run(tank, t_end, rtol=1e-8, atol=1e-10, max_step=10.0)
它会:
- 调用
tank.initial_state()获取初始状态。 - 使用
solve_ivp求解。 - 在液氮质量降到 0 时终止计算。
- 对每个输出时刻计算温度、压力、液位、漏热、换热等时序数据。
- 返回
history字典。
properties.py
物性计算模块。
主要功能:
- 液氮密度、焓、内能计算。
- 根据液氮比内能和压力反推液相温度。
- 氦气密度、焓、内能、比热计算。
- 根据氦气压力和密度反推气枕温度。
- 计算氦气恒压密度温度导数
(partial rho / partial T)_P。 - 计算氦气恒压内能温度导数
(partial u / partial T)_P。
该模块依赖 CoolProp。
heat_leak.py
漏热模型模块。
当前包含:
HeatLeakModel:漏热模型基类。MLIHeatLeak:真空多层绝热模型,按固定热流密度q_mli计算。FoamHeatLeak:泡沫或包覆绝热模型,按一维稳态导热计算。
默认在 main.py 中使用:
heat_leak = MLIHeatLeak(A_total=A_TOTAL, q_mli=1.0)
output.py
输出模块。
负责保存:
- 压缩时序数据
.npz - 表格数据
.csv - 温度、液位、氦气流量、热流和压力图像
绘图使用 matplotlib 的 Agg 后端,因此不需要图形界面。
常用调参方法
修改仿真时间
在 config.py 中修改:
T_END = 3600.0
单位是秒。比如仿真 10 分钟:
T_END = 600.0
修改储箱尺寸
在 config.py 中修改:
V_TOTAL = 420.1e-3
H_TANK = 0.5
其中:
V_TOTAL是储箱总体积,单位m^3。H_TANK是圆柱储箱高度,单位m。
横截面积、直径、侧面积和总面积会自动由这两个参数计算。
修改工作压力
在 config.py 中修改:
P_WORKING = 0.17e6
P_MAX = 0.8e6
单位是 Pa,代码中使用绝对压力。
P_WORKING 是模型维持的工作压力,P_MAX 是最大承压限制,用于参数合法性检查。
修改初始充液量
在 config.py 中修改:
ULLAGE_FRACTION = 0.30
该参数表示初始气枕体积分数。比如:
0.30表示气枕区占 30%,液氮占 70%。0.20表示气枕区占 20%,液氮占 80%。
取值必须在 0 到 1 之间。
修改液氮进出口流量
在 config.py 中修改:
MDOT_IN_LN2 = 1.144
MDOT_OUT_LN2 = 1.1895
单位是 kg/s。
当前液氮质量变化率为:
dm_liq/dt = MDOT_IN_LN2 - MDOT_OUT_LN2
如果出口流量大于入口流量,液位会逐渐下降。
修改入口温度
在 config.py 中修改:
T_IN_LN2 = 77.0
T_IN_HE = 100.0
单位是 K。
修改环境漏热
默认漏热模型在 main.py 中设置:
heat_leak = MLIHeatLeak(A_total=A_TOTAL, q_mli=1.0)
其中 q_mli 是单位面积漏热,单位 W/m^2。增大 q_mli 会增加外界进入储箱的热量。
如果需要改用泡沫绝热模型,可以在 main.py 中引入并替换为:
from cryo_tank.heat_leak import FoamHeatLeak
heat_leak = FoamHeatLeak(A_total=A_TOTAL, k_eff=0.03, delta=0.05)
其中:
k_eff是等效导热系数,单位W/(m*K)。delta是绝热层厚度,单位m。
修改气液换热
在 config.py 中修改:
H_CONV_SURFACE = 50.0
单位是 W/(m^2*K)。该参数控制液相和气枕区之间的换热强度。
修改求解精度
在 config.py 中修改:
RTOL = 1e-8
ATOL = 1e-10
如果计算较慢,可以适当放宽;如果需要更高精度,可以适当收紧。收紧误差容限通常会增加计算时间。
solver.run() 还有一个默认参数:
max_step=10.0
表示最大时间步长,单位秒。如果需要更密集的输出点,可以在调用 run() 时减小它。
后处理数据
读取 .npz 数据示例:
import numpy as np
data = np.load("results/cryo_tank/cryo_tank_history.npz")
print(data.files)
print(data["t"])
print(data["T_liq"])
读取 CSV 数据示例:
import numpy as np
data = np.loadtxt(
"results/cryo_tank/cryo_tank_history.csv",
delimiter=",",
skiprows=1,
)
print(data.shape)
CSV 第一行是列名,列名来自 history 字典,包括:
tm_liqU_liqU_ullT_liqT_ullm_Hemdot_HeV_liqV_ullliquid_levelfill_fractionP_HeP_totalQ_leakQ_leak_liqQ_leak_ullQ_liq_to_ull
测试
运行低温储箱相关测试:
pytest -q tests/cryo_tank
运行全项目测试:
pytest -q
注意事项
- 本模型当前将储箱分为液相区和气枕区两个区域,不是完整 CFD 模型。
- 气枕区按纯氦气处理,物性由 CoolProp 计算。
- 气枕温度
T_ull是 ODE 状态量;氦气质量m_He和补气流量mdot_He是恒压条件下的派生结果。 - 液氮物性依赖
CoolProp,缺少该包会导致程序无法启动。 results/目录默认被.gitignore忽略,仿真输出不会自动上传到 Git。- 建议每次修改参数后保存对应工况说明,避免不同仿真结果混在同一个输出目录中。