从 0 到结果的“最小可用流程”——每一步只保留最关键动作。
1. 环境 & Case 模板
- ☐ 终端加载环境:
source /path/to/OpenFOAM/etc/bashrc - ☐ 进入工作目录:
cd $FOAM_RUN(或你自己的工程目录) - ☐ 拷贝最接近的教程:
cp -r $FOAM_TUTORIALS/... myCase - ☐ 进入算例:
cd myCase,确认有0/ constant/ system/三个目录
2. 网格准备(blockMesh / snappyHexMesh / 导入三选一)
- ☐ 使用 blockMesh :
- 编辑
system/blockMeshDict - 运行:
blockMesh
- 编辑
- ☐ 如需 snappyHexMesh :
- STL 放入
constant/triSurface - 编辑
system/snappyHexMeshDict - 运行:
snappyHexMesh -overwrite
- STL 放入
- ☐ 或导入外部网格:
fluentMeshToFoam/gmshToFoam等 - ☐ 必做:
checkMesh,确认无 FATAL ERROR、质量可接受
3. 0 / constant / system 三大目录快速检查
0 目录:初始场 & 边界条件
- ☐ 必要场文件:
U、p(可能还有T、k、epsilon/omega等)存在 - ☐
internalField初值合理(不要离谱) - ☐
boundaryField:每个 patch 类型 & 数值与物理边界一致
constant 目录:物性 & 湍流
- ☐
transportProperties:密度 / 黏度等正确 - ☐
turbulenceProperties/RASProperties:laminar/RAS/LES选择正确 - ☐ 有能量/可压缩:
thermophysicalProperties设置好状态方程、cp、k 等
system 目录:控制 & 数值
- ☐
controlDict:application= 所需求解器(如simpleFoam/pimpleFoam…)startTime/endTime或stopAt、deltaT合理writeControl/writeInterval合理
- ☐
fvSchemes:关键方程尽量二阶格式 - ☐
fvSolution:线性求解器 +relaxationFactors设为稳健值 - ☐ 并行打算:配置好
system/decomposeParDict
4. 预检查 & 小试一把
- ☐
paraFoam(或在 Paraview 中加载 case)- 看网格形状 & patch 名称是否正确
- 看各边界条件是否如预期
- ☐ 查看 0 时刻的
U/p/T:初场无明显奇怪值 - ☐ 外流等问题可(选做):
potentialFoam预求解一遍 - ☐ 并行准备(如需要):
decomposePar生成processor*目录
5. 正式求解(串行 / 并行)
串行
- ☐ 运行:
`simpleFoamlog.simpleFoam &
(把simpleFoam` 换成你的求解器) - ☐
tail -f log.simpleFoam监控残差 & 报错信息
并行
- ☐ 运行:
mpirun -np N simpleFoam -parallel > log.simpleFoam & - ☐ 结束后:
reconstructPar重构结果(需要的话)
发散**/异常时快速自检**
- ☐ 减小
deltaT或maxCo(瞬态) - ☐ 降低
relaxationFactors - ☐ 临时改为一阶格式,先跑稳
- ☐ 检查边界条件、物性、网格质量是否有明显错误
6. 后处理 & 快速验证
- ☐
paraFoam打开奖例:- 画速度/压力/温度云图
- 用 Slice / StreamTracer 看主要流动结构
- ☐ 有 force/coeff 等 functionObject 的:检查输出文件(forces/forceCoeffs 等)
- ☐ 用
postProcess -func sample/surfaceFieldValue等提取截面/patch 数据 - ☐ 简单验证:
- 看入口/出口质量流量是否平衡
- 与粗估公式 / 实验 / 文献数值对一下量级
7. 清理 & 模板化
- ☐ 写一个最简单的
Allrun:- 网格 → checkMesh →(可选 potentialFoam)→ 求解 → 后处理
- ☐ 写
Allclean:清除中间时间步,只保留0、constant、system和关键结果 - ☐ 把当前算例当作以后类似问题的模板保存/打包(或丢进 git)