基于 PyFluent 的二维 NACA 翼型可压缩流仿真与气动系数数据库构建工具。 本仓库附带 Cursor Agent Skills,把已收敛的工程主路径固化下来,便于人或 AI Agent 复现,而无需重新探索失败分支:
| Skill | 用途 |
|-------|------|
| airfoil-cfd-pipeline | 单工况流程:NACA 几何 → 多块拼接结构网格 → Fluent 求解(定常收敛判定 / 波动转 URANS)→ Tecplot/matplotlib 后处理(CL/CD/CM + 流场图) |
| airfoil-aero-database | 批量扫描 (Mach, AoA, Re) → 气动系数数据库;与薄翼/普朗特–格劳厄特/经验模型对比;工况矩阵可问询增减 |
| aero-database | 跨项目气动数据库生命周期契约(工况问询 → 收敛判定 → URANS → 报告刷新) |
每个 skill 含 skill.json、探索轨迹、原子技能目录、错误手册与示例,详见上表链接。
autoCFD/
├─ src/
│ ├─ config.py # 默认参数与机器路径(可用环境变量覆盖)
│ ├─ geometry.py # NACA 四位数翼型坐标
│ ├─ mesh.py # 单块结构网格 + .msh 导出
│ ├─ multiblock.py # 钝后缘多块拼接结构网格
│ ├─ solver.py # PyFluent 求解生命周期
│ ├─ numerics.py # CASM + HOTR + CFL=5 等数值设置
│ ├─ convergence.py # 力收敛早停(分块迭代)
│ ├─ urans.py # URANS 时均与波动带
│ ├─ postprocess.py # 气动力、Tecplot 流场、CSV 汇总
│ ├─ aero_database.py # 气动系数库 I/O + 插值 API
│ └─ aero_theory.py # 薄翼 / PG / 经验模型
├─ scripts/
│ ├─ run_simulation.py # 单工况入口
│ ├─ run_with_convergence.py # 力收敛早停求解
│ ├─ run_urans_average.py # URANS 时均 + 波动带
│ ├─ build_aero_database.py # 批量扫掠 → 气动库
│ ├─ compare_aero_models.py # CFD vs 理论/经验报告
│ ├─ export_matrixA.py # 导出完整矩阵表(含波动列)
│ ├─ sync_urans_bands_to_db.py # URANS 波动带同步入库
│ ├─ rerun_one_db_point.py # 重跑单个定常点
│ └─ rerun_one_db_point_urans.py / rerun_urans_queue.py
├─ .cursor/skills/ # Cursor skills(可复用 know-how)
├─ requirements.txt
├─ README.md
└─ LICENSE
- ANSYS Fluent 2023 R1+(设置
FLUENT_EXE) - Tecplot 360 EX(可选,仅流场出图,设置
TECPLOT_EXE) - Python 3.9+
- 依赖见 requirements.txt
python -m pip install -r requirements.txt
可执行文件路径集中在 src/config.py,优先读环境变量:
# Windows PowerShell $env:FLUENT_EXE = "C:\Program Files\ANSYS Inc\v231\fluent\ntbin\win64\fluent.exe" $env:TECPLOT_EXE = "C:\Program Files\Tecplot\Tecplot 360 EX 2023 R1\bin\tec360.exe" # Linux / macOS export FLUENT_EXE=/usr/ansys/v231/fluent/bin/fluent
| 项目 | 选择 |
|------|------|
| 气体 | 理想气体空气;批量扫掠用常黏度强制 Re(非 Sutherland) |
| T∞ / P∞ | 300 K / 101325 Pa |
| 求解器 | 密度基隐式,定常(波动时升级 URANS) |
| 湍流 | k-ω SST |
| 壁面 | 无滑移、等温 |
| 远场 | 压力远场(Mach, AoA, Tu, μt/μ) |
| 力矩中心 | x = c/4(抬头为正) |
| 网格 | 多块拼接结构网格,钝后缘开缝,保形交界面 |
| 数值(推荐) | CASM + HOTR + CFL=5 + 远场标准初始化;Pseudo Time 关闭 |
接到仿真请求时,Agent 会先询问计算条件 / 网格 / 求解 / 输出;也可回复「默认」直接开算。
# 固定迭代 python scripts/run_simulation.py --mach 0.5 --aoa 2.0 --re 3e6 --iter 5000 --nproc 4 # 力收敛早停(推荐) python scripts/run_with_convergence.py ` --mach 0.3 --aoa 2.0 --re 3e6 --nproc 4 --case naca0012_m03_a2_conv ` --window 300 --res-tol 1e-5 --dcl 1e-4 --dcd 2e-4 --dcm 2e-4 ` --min-iter 2000 --max-iter 10000 --chunk 200 --warmup 600
| 参数 | 默认 | 说明 |
|------|------|------|
| --mach | 0.5 | 来流马赫数 |
| --aoa | 2.0 | 攻角 [deg] |
| --re | 3e6 | 弦长雷诺数 |
| --iter | 5000 | 定常默认迭代步数 |
| --ni / --nj | 201 / 81 | 流向 / 法向网格点数 |
| --dy1 | 5e-6 | 第一层网格法向高度 [m] |
| --case | naca0012 | 算例名 / 输出子目录 |
| --airfoil | 0012 | NACA 四位数 |
| --nproc | 4 | CPU 核数(分区失败可回退 1) |
若定常力/力矩波动幅值 amp% > 5%(或不收敛),升级 URANS(scheme B:dt = 0.005 c/U),取最后 3 个稳定周期时均并标注波动区间:
python scripts/run_urans_average.py ` --mach 0.5 --aoa 10 --re 3e6 --nproc 4 ` --dt-factor 0.005 --inner-iter 25 --max-steps 10000 --avg-periods 3
接到建库任务时,会先列出拟算工况(Matrix A,约 37 点)供增减,并询问可并行提交多少个工况(默认 4 个、每案 4 核);也可回复「默认」开算。
# 预览工况矩阵(不启动 Fluent) python scripts/build_aero_database.py --dry-run # 批量扫掠(推荐力收敛早停) python scripts/build_aero_database.py --converged --nproc 4 --n-parallel 4 ` --window 300 --res-tol 1e-5 --dcl 1e-4 --dcd 2e-4 --dcm 2e-4 ` --min-iter 2000 --max-iter 10000 --chunk 200 --warmup 600 # URANS 可疑点队列(如 M0.5 α=10/12/14;M0.7 α=6/8/10) python scripts/rerun_urans_queue.py --dt-factor 0.005 python scripts/sync_urans_bands_to_db.py # 刷新对比报告与图片 python scripts/export_matrixA.py python scripts/compare_aero_models.py
输出目录 outputs/aero_database/<airfoil>/:
cfd_database.csv— CL/CD/CM/L/D 及波动带、source(全部来自 Fluent 力报告)cfd_database.meta.json— 包络元数据comparison_report.md— CFD vs 理论/经验(含 MAPE 与图)figures/— 各 Ma 极曲线、马赫/雷诺扫描、相对误差图(α≈0 不画;高 α/跨声速标「理论参考区外」)matrixA_results.csv— 完整矩阵表(含波动列) Python 查询示例:
from pathlib import Path from src.aero_database import AeroDatabase db = AeroDatabase.from_csv(Path("outputs/aero_database/naca0012/cfd_database.csv")) CL = db.query(0.6, 4.0, "CL") # 在 (Mach, AoA) 上线性 ND 插值
-
几何 — NACA 四位数坐标(余弦分布,开缝钝后缘)
-
网格 — 多块拼接结构网格 → Fluent ASCII
.msh(airfoil/farfield) -
设置 — 密度基 / SST / 理想气体 / 远场 BC / 参考点 c/4
-
求解 — CASM+HOTR+CFL=5 + 远场标准初始化;固定迭代或力收敛早停
-
波动门控 — amp%>5% 或不收敛 → URANS 时均 + 波动带(禁止用 last-iter 快照入库)
-
后处理 — 保存 cas/dat;Tecplot 流场;matplotlib Cp;写
summary.csv -
数据库(批量) — 共享多块拼接结构网格;并行计划默认 4 ×ばつ4 核(--n-parallel / --nproc);常黏度强制 Re;每案 checkpoint
-
对比 — 同节点评估薄翼/PG/经验模型;生成图与 Markdown 报告
单工况(M=0.5,α=2°,Re=3e6,多块,5000 iter):CL≈0.24,CD≈0.010,CM≈-0.002,L/D≈25 量级。
Matrix A 数据库(NACA0012,Re=3e6,37 点;部分高 α/跨声速点为 URANS)见
outputs/aero_database/naca0012/comparison_report.md。
-
代数多块网格(非椭圆光顺);钝后缘靠开缝实现
-
默认亚声速(M≤0.85);矩阵 |α|≤16°
-
默认网格上 5000 iter 残差未必到 1e-6;边际点(如 M=0.6 α=2)可能需 6000 iter
-
Tecplot 出图需许可证;气动库批量构建本身只需 Fluent
-
库内 CL/CD/CM 全部来自 Fluent 力报告,不做理论填补;理论/经验模型仅作对比基线
完整清单见各 skill 的 SKILL.md。
outputs/<case>/*.msh存在,C/W 块无负体积单元- Fluent 显示 Calculation finished(非 AMG 发散)
summary.csv中 CL/CD/CM 有限- 健全性:M=0.5、α=2°、Re=3e6 时 CL 约在 0.15–0.25
- 数据库:无长期
status=failed;无CD≤0;无「定常 last-iter 且 amp%>5%」仍标 ok
.cursor/skills/ 中的技能固化了主路径、原子契约、错误手册与示例,供人或 Agent 复用。注册表见
.cursor/skills/skill-pool/index.json。
欢迎 PR。请注意:
- 代码变更时同步更新 skill(并 bump
skill.json的version) - 勿提交
outputs/或.cas/.dat(已在.gitignore) - 机器路径用环境变量,勿硬编码进仓库
@software{autoCFD,
title = {autoCFD: 自动化 NACA 翼型 CFD 与气动系数数据库},
author = {autoCFD contributors},
year = {2026},
url = {https://github.com/Shao-hansen/AutoAeroModelForAirfoil}
}