Files

223 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 水平卧式流化床 · 空床流场仿真
> 用 GPU 加速的 **3D D3Q19 格子玻尔兹曼方法 (LBM)** 计算水平卧式流化床**空床**(无颗粒)气相流场,
> 以**恒功率离心风机曲线**为压力进口,布风板为**多孔板**,流量与压差由物理自洽涌现。
---
## 1. 物理场景
| 项目 | 参数 |
| --- | --- |
| 布风板尺寸 | 2400 mm (x, 长度) × 567 mm (y, 宽度),水平放置 |
| 布风板厚度 | **2 mm** |
| 布风板开孔 | 孔径 2 mm,开孔率 **5.6%**,孔轴 **5° 倾斜**(朝 -x,出料方向) |
| 进风分区 | 沿长度均分 **4 段**(每段 600 mm),每段下方独立风箱 |
| 风箱高度 | 450 mm |
| 进风管 | 每段 **DN300**,从 567 mm 侧面水平居中进入(风向平行床板) |
| 沸腾/渐扩段 | 由 2400 × 567 在 **1000 mm** 高度内渐扩至 2400 × 1200 |
| 上部稳压段 | 2400 × 1200 × 400 mm |
| 渐缩段 | 500 mm |
| 排风 | 顶部居中 **DN800** 圆管 |
### 工况(离心风机)
| 项目 | 数值 |
| --- | --- |
| 单段额定风量 | 2500 m³/h(4 段合计 10000 m³/h) |
| 额定压差 | 2900 Pa(布风板上下) |
| 风机特性 | **恒功率输出** `Δp · Q = P`,P = 2900 × (10000/3600) ≈ **8056 W** |
| 关死压力 | 4350 Pa(用于 Q→0 截断) |
> **关键物理认识**:2500 m³/h 与 2900 Pa 是风机**额定点**上的两个值,不是两个独立约束。
> 离心风机给的是**风机曲线**,实际工况点是「风机曲线 ∩ 系统阻力曲线」的**唯一交点**。
> 因此仿真中**只施加风机曲线压力**,流量由系统阻力自然涌现。
---
## 2. 数值方法
- **求解器**:D3Q19 格子玻尔兹曼,BGK 碰撞 + 推流 + 半步反弹(bounce-back)固体边界
- **加速**:NVIDIA GPU(`numba.cuda`),实测约 **120 MLUPS**(百万格点更新/秒)
- **网格**:**100 格/m**,240 × 130 × 265 = **8,268,000 单元**(本机 8 GB 显存上限)
- **进口**:**压力进口**(固定密度 = 风机曲线压力),速度零梯度自由
- **出口**:**压力出口**(密度 = 1,速度自由)
- **布风板**:固体薄板 + 规则开孔(1 格孔 / 间距 4 格 ≈ 6.25% 开孔率)
- **固体壁**:无滑移
### 缩放
| 量 | 说明 |
| --- | --- |
| `U_LB` | 0.015(进口参考速度对应的格子速度) |
| `SCALE_U` | `U_in / U_LB` |
| `SCALE_P` | `1.2 × SCALE_U²`(格子压力 → Pa) |
---
## 3. 结果(100 格/m,2 mm 板厚)
| 指标 | 数值 |
| --- | --- |
| 工况点风量 | **Q ≈ 1463 m³/h**(风机曲线与系统阻力交点) |
| 风机压力 | 4350 Pa(关死) |
| 风箱静压 | **4061 Pa** |
| 沸腾段静压 | **181 Pa** |
| **布风板压差** | **+3880 Pa**(风箱 > 沸腾段 ✓) |
| 最大流速 | 4.89 m/s |
| 求解 | 3900 步 / 184 s |
> 压力**符号、结构、量级**均正确:风箱高压 → 布风板节流降压 → 沸腾段低压 → 向排风递减。
---
## 4. 输出图(`docs/assets/`,19 张,4× 分辨率)
| 文件 | 内容 |
| --- | --- |
| `fbed-overview.png` | 四联总览(x-z / y-z / 近板 / 沸腾段) |
| `fbed-montage-plenum.png` | 风箱层水平切面 ×5(4 段侧进风分布) |
| `fbed-montage-nearplate.png` | 布风板近区水平切面 ×6(射流合并) |
| `fbed-montage-freeboard.png` | 沸腾段/渐扩/排风水平切面 ×6 |
| `fbed-montage-xz.png` | 垂直切面 x-z ×5 |
| `fbed-montage-yz.png` | 垂直切面 y-z ×8(沿长度) |
| `fbed-sections.png` | 4 个区段中心 y-z |
| `fbed-zoom-sections.png` | 按区段剖分的 x-z 局部放大 |
| `fbed-streamlines.png` | 双大图流线 |
| `fbed-vectors.png` | 速度矢量图 |
| `fbed-components.png` | 速度分量 ux/uy/uz |
| `fbed-3d-cutaway.png` | 三正交切面三维剖切 |
| `fbed-pressure.png` | 静压场四联 |
| `fbed-pressure-drop.png` | 布风板压差分析 |
| `fbed-uniformity.png` | 各区段流量均匀性 |
| `fbed-decay.png` | 沿高度气速衰减 |
| `fbed-flowrate.png` | 进风/布风板/排风 风量平衡 |
| `fbed-tilt.png` | 布风板 5° 倾斜对近板风向影响 |
| `fbed-geometry.png` | 几何与边界示意 |
数据:`docs/assets/fbed_fields.npz`(ux/uy/uz/rho/solid)。
---
## 5. 复现
```bash
# 依赖: Python 3.11+, numpy, numba, numba-cuda, CUDA 13.2 runtime, matplotlib
# 主仿真 (100 格/m, 约 3-5 分钟)
python tools/fbed_simulation.py
# 批量出图 (秒级, 读 npz)
python tools/fbed_figures.py
python tools/fbed_analysis.py
```
环境变量(可选):
| 变量 | 默认 | 说明 |
| --- | --- | --- |
| `FBED_PPM` | 100 | 网格分辨率 (格/m) |
| `FBED_ULB` | 0.015 | 参考格子速度(越小越不可压,但越慢) |
| `FBED_HOLE` / `FBED_SPACE` | 1 / 4 | 开孔大小 / 间距(格) |
| `FBED_TB` | 120 | 求解墙钟预算 (s) |
| `FBED_DP` | 2900 | 额定压差 (Pa) |
---
## 6. 脚本说明
| 文件 | 作用 |
| --- | --- |
| `tools/fbed_simulation.py` | 主求解器(GPU LBM + 风机曲线 + 多孔板) |
| `tools/fbed_figures.py` | 切面/矢量/压力/流量等批量出图 |
| `tools/fbed_analysis.py` | 几何/倾斜/均匀性/衰减/压差等分析图 |
| `tools/fbed_check.py` / `fbed_check2.py` | 通量与压差诊断 |
| `tools/fbed_probe.py` | 切面 ASCII 速度探针 |
| `tools/fbed_rans.py` | RANS(投影法+AMG) 尝试版(未收敛,留档) |
---
## 7. 局限与已知问题(诚实声明)
1. **板厚亚网格**:2 mm 板厚在 100 格/m(格距 10 mm)下**小于一个网格**,只能按 1 格最薄板近似。要真正解析 2 mm 板 + 2 mm 孔,需 ~500 格/m(约 10.3 亿单元,需 ~157 GB 显存,本机 8 GB 无法承载)。
2. **5° 倾角未施加**:倾角水平分量仅为垂直分量的 8.7%,粗网格下孔道倾斜不足 1 格,无法几何分辨;作为动量源施加时曾导致进口反流,暂关闭。方向已按设计设为 **-x**。
3. **不可压近似**:LBM 密度波动 ~2.5%,压力场为相对值。
4. **层流**:未加湍流模型,粗网格下湍流混合未解析。
5. **工况点偏低**:细网格把布风板开孔阻力解析得更"阻",工况点落在 1463 m³/h;若要标定到额定 10000 m³/h,需放大等效开孔或减薄板厚。
---
## 8. 前景价值与 AI 相关性
### 8.1 工业价值
流化床是**化工、能源、制药、食品**行业的核心装备(催化裂化、煤/生物质气化、干燥、造粒、燃烧、涂层)。
**空床气相流场**是流化床设计与运行的基础:
- 布风均匀性 → 决定起始流化质量与死区分布
- 孔板射流动量 → 决定气泡生成与颗粒夹带
- 渐扩段气速衰减 → 决定颗粒扬析与返料
- 风箱配气 → 决定分区控制精度
传统 CFD(Fluent / OpenFOAM)单次仿真为**小时~天级**,无法支撑设计迭代、参数扫描与在线优化。
本项目用 **GPU LBM** 把空床流场压到**分钟级**,可直接用于:
| 场景 | 价值 |
| --- | --- |
| 布风板开孔/倾角优化 | 快速比选方案,缩短研发周期 |
| 分区风量配比标定 | 验证各区段均匀性 |
| 故障诊断(堵孔、偏流) | 快速复现异常工况 |
| 教学/演示 | 实时可视化流场结构 |
### 8.2 科学意义
- 验证了 **「恒功率风机曲线 + 压力进口 + 多孔板」** 这一**物理自洽**的建模路线:
流量与压差由「风机曲线 ∩ 系统阻力」唯一确定,而非人为指定。
- 定量揭示了**不可压求解器表达高损失系统(损失系数 K≈900)的固有限制**:
2900 Pa 压差在 LBM 中对应约 10% 密度波动,逼近不可压假设边界。
- 给出了**亚网格多孔板的建模误差**(2 mm 板在 100 格/m 下不可分辨)。
### 8.3 AI 相关性(核心)
本项目天然是 **AI for Science / 神经算子** 的数据工厂与落地场景:
```
GPU 求解器(真值) ──► 参数化数据集 ──► 神经算子训练 ──► 毫秒级实时推理
(本仓库) (几何/边界/风速) (FNO/GNN/Transformer) (数字孪生)
```
| AI 方向 | 与本项目的结合点 |
| --- | --- |
| **神经算子 (Neural Operator)** | FNO / DeepONet 把「解算子」参数化为网络权重;输入几何+边界,输出全场 |
| **图神经网络 (GNN)** | MeshGraphNet 类模型适配非结构/复杂几何,天然处理不规则边界 |
| **Transformer / Attention** | 把流场当序列建模,长程依赖捕捉回流与全局耦合 |
| **物理约束机器学习 (PINN)** | 在损失中嵌入 Navier-Stokes / 守恒律,提升外推可信度 |
| **数字孪生** | 毫秒推理 → 参数拖拽即时刷新 → 在线优化与预测性维护 |
| **代理模型加速** | 用 1% 的算力逼近求解器精度,支撑大规模参数扫描 |
**闭环价值**:
1. **数据**:GPU LBM 批量生成 (几何 + 风机曲线 + 开孔率) → 流场/压力场
2. **训练**:FNO / GNN / Transformer 学习解算子
3. **推理**:毫秒级出结果,替代逐次 CFD
4. **迭代**:在线优化布风板与配气,反馈回设计
> 本仓库当前提供**第 1 环(真值引擎 + 快速基线)**;后续接入第 2–4 环即可实现
> 「物理世界流场实时仿真」的完整闭环。
### 8.4 战略意义
- **自主可控**:全链路 Python + 开源栈(numba / CUDA / scipy / pyamg),无商业 CFD 许可依赖
- **可扩展**:同一套 GPU 求解器可平移至洁净室、数据中心、燃烧室、气象等流场场景
- **算力弹性**:单卡可跑 100 格/m,多卡/云 GPU 可扩展至 500 格/m 以上
---
## 9. 后续方向
- 用 **OpenFOAM**(`simpleFoam` + `k-ε` + `porousBafflePressure`)在 CPU 上跑更高分辨率(~250–300 格/m)
- 布风板改用**多孔跳变边界**(Δp = K·½ρv²,K≈900),避免离散开孔的网格依赖
- 以求解器生成参数化数据集 → 训练 **GNN/Transformer 神经算子** → 毫秒级实时推理
---
*本项目为物理世界流场实时仿真方向的水平卧式流化床 Demo。*