OpenFOAM后处理

分类:开源CAE | 2026-10-02 改写
CAE visualization for openfoam postprocess theory - technical simulation diagram
OpenFOAM后处理

理论:提取数值的机制

概述

🙋

OpenFOAM的后处理不就是用ParaView看结果吗?

🎓

只是看结果的话ParaView就够了,但用于设计的数值,基本上要用“函数对象”提取。在system/controlDict的functions中写入forces(力和力矩)、forceCoeffs(阻力和升力系数)、probes(点的时间历程)、sets与surfaces(线和面上的分布)、fieldAverage(时间平均)、yPlus、wallShearStress等,计算的同时就会输出到postProcessing文件夹。计算后也可以用postProcess -func对已有结果做同样的处理。提取数值时容易出错的是参考面积、速度和密度的给法,时间平均的开始时刻以及输出间隔,它们都会改变结果的数量级或含义。

系数定义与单位

$$ C_d = \frac{F_d}{\tfrac12 \rho_\infty U_\infty^2 A_{\text{ref}}},\qquad A_{\text{ref}} = D \times \text{(mesh thickness)},\qquad St = \frac{f D}{U_\infty},\qquad p_{\text{Pa}} = \rho\, p_{\text{kin}} $$

F_d为阻力,ρ∞、U∞为参考密度和速度,A_ref为参考面积,D为圆柱直径,f为涡脱落频率,St为斯特劳哈尔数,p_kin为不可压缩求解器的运动学压力。

Coffee Break 随笔闲谈

paraFoam与ParaView

打开OpenFOAM结果的paraFoam,其实是启动ParaView并加载OpenFOAM格式读取器的脚本。ParaView本身是美国国家实验室与Kitware公司开发的可视化软件,与OpenFOAM是不同的项目。使用ParaView自带的读取器(.foam文件)不用paraFoam也能打开,在Windows电脑上查看计算机上的结果时常这样用。

算例

Cd = 1.33与St = 0.165是用于检查设置的示例输入,不是本站仿真结果。精确基准比较必须统一阻塞率与边界条件。请使用所用版本的命令,如Foundation v13的foamPostProcess。

例:Re = 100圆柱(直径0.01 m,流速1 m/s,运动黏度1×10⁻⁴ m²/s,网格厚度0.002 m)

项目值备注
阻力系数(示例输入)≈ 1.33时间平均
斯特劳哈尔数(示例输入)≈ 0.165
网格厚度上的阻力1.33×10⁻⁵ NrhoInf = 1
误设Aref = D时的显示0.00266小500倍
涡脱落频率/周期16.5 Hz / 0.061 s
每周期20点的采样间隔0.003 s
10个周期平均所需时间0.61 s去除初始过渡后

示例输入为代表性数值。forceCoeffs的参考面积为直径×网格厚度,涡脱落频率由升力系数时间历程做FFT求得。

🙋

把阻力系数时间历程平均后得到1.45,比示例输入1.33高9%。应该加密网格吗?

🎓

在那之前,先确认平均方法。圆柱后方的涡脱落在开始流动后的一段时间内仍在发展,可能要几十个周期才进入周期性状态。从一开始就平均,会混入起始的过渡过程而产生偏差。fieldAverage或forceCoeffs的平均,应在升力系数振幅稳定后开始,并取整数个周期(例如10个周期,本例为0.61秒)平均。在周期中途截断,平均值会因振荡而偏移。在此基础上仍有差异,再依次检查计算域大小(侧壁太近会使阻力增大,宽度以直径的20倍以上为宜)、出口位置、时间步长(库朗数)和网格。

实务流程

  1. 确定需要的数值(力、系数、点时间历程、截面分布),写入controlDict的函数对象。
  2. 设置参考面积、长度、速度和密度,二维时要计入网格厚度。
  3. 非稳态时以小于现象周期1/20的间隔输出,过渡结束后按整数周期平均。
  4. 用yPlus和wallShearStress确认壁面处理是否合理。
  5. 与示例输入或实验比较,按计算域、时间步长、网格的顺序查找差异原因。
Coffee Break 随笔闲谈

“并行计算结果不能直接打开”

用decomposePar分割并行计算的结果,分别保存在processor0、processor1……等文件夹中。直接用ParaView打开,可能只看到初始时刻而感到困惑。用reconstructPar合并,或在打开.foam文件时选择“Decomposed Case”即可看到全部。函数对象的输出统一写在postProcessing文件夹中,从这里提取数值更可靠。

常见错误

错误与对策

错误后果对策
二维时Aref不计厚度系数差几个数量级直径×网格厚度
把运动学压力当作Pa压力和力差密度倍指定rhoInf
平均时包含过渡平均值偏移周期稳定后取整数周期
输出间隔太粗频率算错小于周期的1/20
力方向向量错误升力与阻力互换检查liftDir和dragDir
🙋

我想了解相关内容。

常见问题

在OpenFOAM中如何求力和系数?

在system/controlDict的functions(函数对象)中写入forces或forceCoeffs,使其在计算的同时输出。forceCoeffs需要指定参考速度magUInf、参考长度lRef、参考面积Aref、流体密度rhoInf以及力的方向(liftDir、dragDir)。也可以在计算后用postProcess -func从已保存的结果中求出。

二维计算的阻力系数小得离谱。

很可能参考面积Aref没有计入网格厚度。OpenFOAM的二维计算是只有一层网格厚的三维网格,力只作用在这个厚度上。直径0.01 m的圆柱用厚0.002 m的网格计算时,Aref = 0.01 × 0.002 m²。若输入Aref = 0.01,阻力系数会把1.33显示为0.00266。

不可压缩求解器的压力值不对劲?

simpleFoam、pimpleFoam等不可压缩求解器求解的p是压力除以密度后的“运动学压力”(单位m²/s²)。对于空气(密度1.2 kg/m³),p = 50 m²/s²相当于60 Pa。forces中若不给出rho rhoInf及rhoInf的值,力会按密度1计算。

参考资料与检验范围

所列数值是基于文中假设的教学参考计算。资料用于理论和设置参考,不证明已在各软件中复现这些数值。工程决策须按实际条件验证。

关联模拟器

在本领域的交互式模拟器中体验理论

模拟器列表

相关分析领域

结构分析流体分析(CFD)热分析
本文评价
感谢您的反馈!
有帮助
更详细
报错
有帮助
0
更详细
0
报错
0