Files
Physics-Ai-Fluent-Analysis/README.md
T

223 lines
9.8 KiB
Markdown
Raw Normal View History

# 水平卧式流化床 · 空床流场仿真
> 用 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。*