OpenFOAM多相流分析

类别:分析 | 统一版 2026-04-06
CAE visualization for openfoam multiphase theory - technical simulation diagram
OpenFOAM多相流分析

OpenFOAM多相流的理论基础

概要

🧑🎓

老师! 今天是关于OpenFOAM多相流分析的话题对吧? 是什么样的内容呢?


🎓

interFoam(VOF法)、multiphaseInterFoam、reactingMultiphaseEulerFoam等求解器可用于自由表面、分散系、反应系多相流分析。通过MULES算法进行界面捕捉。


🧑🎓

老师的说明很易懂! 通过求解器的讲解,我理清了思路。


支配方程式


🎓

用公式表示就是这样。


$$\frac{\partial\alpha}{\partial t} + \nabla\cdot(\mathbf{U}\alpha) + \nabla\cdot(\mathbf{U}_r\alpha(1-\alpha)) = 0$$

🧑🎓

嗯…只看公式的话我还不太明白… 这表示的是什么?


🎓

表面张力的CSF模型:



$$\mathbf{f}_\sigma = \sigma\kappa\nabla\alpha, \quad \kappa = -\nabla\cdot\hat{\mathbf{n}}$$
🧑🎓

老师的说明很易懂! 表面张力的讲解让我茅塞顿开。


理论的基盘

🧑🎓

我听说过「理论的基盘」,但可能没有真正理解…


🎓

OpenFOAM多相流分析的数值解法基于有限体积法(FVM)或有限要素法(FEM)。由于是开源的,最大的优点是可以在源代码级别确认并修改算法详情。商用求解器中作为黑盒的离散化方案和收敛判定逻辑可以直接验证,特别适合学术研究和方法开发。社区的持续改进和缺陷修复保证了质量。


🧑🎓

啊,是这么回事啊! 多相流分析的数值解法就是这样的机制啊。


数值解法的理论的背景

🧑🎓

老师,请告诉我关于「数值解法的理论的背景」!


🎓

讲解开源CAE工具实现的数值解法的理论基础。



有限要素法(FEM)的变分原理

🧑🎓

请告诉我关于「有限要素法」!


🎓

结构分析的基础是最小势能原理:



$$ \Pi(\mathbf{u}) = \frac{1}{2} \int_{\Omega} \boldsymbol{\sigma} : \boldsymbol{\varepsilon} \, d\Omega - \int_{\Omega} \mathbf{f} \cdot \mathbf{u} \, d\Omega - \int_{\Gamma_t} \mathbf{t} \cdot \mathbf{u} \, d\Gamma $$


🎓

使 $\Pi$ 停留的位移场 $\mathbf{u}$ 就是平衡解。CalculiX和Code_Aster实现了基于这一变分原理的Galerkin法。




有限体积法(FVM)的保存法则

🧑🎓

请告诉我关于「有限体积法」!


🎓

OpenFOAM采用的FVM基于控制体积的积分保存法则:



$$ \frac{\partial}{\partial t} \int_{V} \rho \phi \, dV + \oint_{S} \rho \phi \mathbf{u} \cdot d\mathbf{S} = \oint_{S} \Gamma \nabla \phi \cdot d\mathbf{S} + \int_{V} S_\phi \, dV $$


🎓

在每个控制体积上应用这个积分形式,通过数值方法评估面上的通量,得到离散方程。



许可证和质量保证

🧑🎓

请告诉我关于「许可证和质量保证」!


🎓

开源CAE的源代码是公开的,因此第三方可以验证算法。与此不同,商用工具没有供应商支持,用户社区和论坛的信息共享就变得格外重要。



适用条件和注意事项

🧑🎓

我听说过「适用条件和注意事项」,但可能没有真正理解…


🎓
  • 必须用已知的基准问题验证OSS工具的结果
  • 注意版本之间的不兼容性(特别是OpenFOAM的fork之间的差异)
  • 通过与商用工具的结果比较来确认OSS的精度
  • 当文档不足时,需要直接参考源代码

  • 🧑🎓

    也就是说,在工具结果的地方偷懒的话,后来会吃苦头。我会牢记在心!


    无次元参数和支配的规模

    🧑🎓

    老师,请告诉我关于「无次元参数和支配的规模」!


    🎓

    理解支配被分析对象物理现象的无次元参数,是适当选择模型和设置参数的基础。


    🎓
    • Peclet数 Pe:对流和扩散的相对重要性。Pe >> 1时对流占主导(需要稳定化方法)
    • Reynolds数 Re:惯性力和粘性力的比。流体问题的基本参数
    • Biot数 Bi:内部传导和表面对流的比。Bi < 0.1时可应用集中热容量法
    • Courant数 CFL:数值稳定性指标。显式格式需要 CFL ≤ 1

    • 🧑🎓

      啊,是这么回事啊! 支配被分析对象物理现象的就是这样的机制啊。



      量纲分析的验证

      🧑🎓

      请告诉我关于「量纲分析的验证」!


      🎓

      基于Buckingham的Π定理进行量纲分析,对估算分析结果的数量级很有效。用代表长度 $L$、代表速度 $U$、代表时间 $T = L/U$ 来提前估算各物理量的数量级,并验证分析结果的合理性。


      🧑🎓

      我明白了。那么,只要支配被分析对象物理现象的工作做好了,基本上就没问题了吧?


      边界条件的分类和数学的特征

      🧑🎓

      我听说边界条件如果搞错了,整个分析都会完蛋…


      类型数学表示物理意义例子
      Dirichlet条件$u = u_0$ on $\Gamma_D$变量值的指定固定壁、温度指定
      Neumann条件$\partial u/\partial n = g$ on $\Gamma_N$梯度(通量)的指定热流束、力
      Robin条件$\alpha u + \beta \partial u/\partial n = h$变量和梯度的线性组合对流热传递
      周期边界条件$u(x) = u(x+L)$空间周期性单位单元分析
      🎓

      适当的边界条件选择与解的唯一性和物理合理性直接相关。不足的边界条件会导致问题不适定,过度的边界条件会产生矛盾。



      🧑🎓

      OpenFOAM多相流分析的整体面貌我已经掌握了! 明天开始在实务中加以应用。


      🎓

      好的,你的状态很好! 实际动手做才是最好的学习。有不懂的地方随时问我。


      Coffee Break 闲聊话题

      界面的「厚度」是零还是非零——VOF法的物理解释

      OpenFOAM的interFoam采用的VOF(Volume of Fluid)法中,气液界面表示为「体积分率α从0变化到1的区域」。物理上界面的厚度是分子尺度(纳米米),但在CFD网格的单元尺寸(毫米~厘米)下,界面不得不被视为「扩散的过渡层」来处理。为了抑制这种人工的界面扩散,interFoam的alpha.water方程中引入了interfacialCompression(α的压缩项)。界面的「尖锐性」和「数值稳定性」是二律背反的,将compressionFactor cAlpha从1.0增加到2.0会使界面变得更清晰,但数值振荡也会增加。这样一个设置就足以大幅影响计算质量,是物理与数值的微妙平衡。

      OpenFOAM多相流的数值计算方法

      数值方法的详细

      🧑🎓

      具体来说,用什么样的算法来求解OpenFOAM多相流?


      🎓

      讲解OpenFOAM多相流分析的数值解法和实现要点。



      编译和构建

      🧑🎓

      我听说过「编译和构建」,但可能没有真正理解…


      🎓

      从源代码编译需要使用CMake或专用编译系统(如OpenFOAM的wmake等)。依赖库(MPIPETSc、BLAS/LAPACK等)的适当版本管理至关重要。Linux环境是推荐的,但通过WSL2或Docker容器也可以在Windows上构建。


      🧑🎓

      也就是说,源代码编译的地方偷懒的话,后来会吃苦头。我会牢记在心!


      输入文件的构成

      🧑🎓

      不同软件间交换数据时有什么需要注意的吗?


      🎓

      理解情形文件结构和主要参数设置是实现的第一步。词典文件(dict)和命令文件的格式是各软件特有的,从公开教程的模板开始编辑是最有效率的。



      脚本自动化

      🧑🎓

      我听说过「脚本自动化」,但可能没有真正理解…


      🎓

      用Python或Bash脚本自动化参数研究是提高生产效率的关键。还应该考虑利用PyFoam或cfMesh等包装工具。



      调试和开发环境


      🎓

      GDB、Valgrind、AddressSanitizer用于内存泄漏检测和调试很有效。利用IDE(VSCode、CLion)的远程调试功能,建立高效的开发环境。导入单元测试框架(Google Test、pytest),自动化回归测试。



      求解器设置和算法

      🧑🎓

      我想更详细地了解计算后面发生的是什么!



      OpenFOAM 求解器选择指针

      🧑🎓

      求解器选择指针,具体指的是什么?


      求解器用途方程系
      simpleFoam定常非压缩乱流SIMPLE
      pimpleFoam非定常非压缩PIMPLE (PISO+SIMPLE)
      interFoam二相流(VOF)MULES
      rhoSimpleFoam定常压缩性SIMPLE
      buoyantSimpleFoam自然对流SIMPLE+Boussinesq
      reactingFoam燃烧PIMPLE+化学反应

      CalculiX 输入文件结构

      🧑🎓

      输入文件结构,具体指的是什么?


      🎓

      ```

      *NODE


      🎓

      1, 0.0, 0.0, 0.0

      ...


      🎓

      *ELEMENT, TYPE=C3D8

      1, 1, 2, 3, 4, 5, 6, 7, 8


      🎓

      ...

      *MATERIAL, NAME=STEEL


      🎓

      *ELASTIC

      210000., 0.3


      🎓

      *DENSITY

      7.85e-9


      🎓

      *STATIC


      🎓

      *BOUNDARY

      1, 1, 3


      🎓

      *CLOAD

      100, 2, 1000.


      🎓

      *END STEP

      ```


      🧑🎓

      啊,是这么回事啊! 求解器选择指针就是这样的机制啊。



      Code_Aster 命令文件结构

      🧑🎓

      接下来是命令文件结构的讲解。什么样的内容呢?


      🎓

      ```

      DEBUT()


      🎓

      MAIL = LIRE_MAILLAGE()

      MODELE = AFFE_MODELE(MAILLAGE=MAIL, ...)


      🎓

      RESULT = MECA_STATIQUE(MODELE=MODELE, ...)

      FIN()


      🎓

      ```




      离散化格式的选择

      🧑🎓

      请告诉我关于「离散化格式的选择」!


      🎓

      OpenFOAM的离散化格式在 fvSchemes 文件中设置。对流项的离散化对精度和稳定性影响最大:


      🧑🎓

      到目前为止听了这么多,我终于理解了求解器选择指针为什么那么重要!


      🎓
      • upwind:1阶精度,稳定但数值扩散大
      • linearUpwind:2阶精度,有限制
      • limitedLinear:2阶精度,带TVD限制
      • LUST:混合格式,LES推荐


      • 误差评估和精度验证

        🧑🎓

        我听说过「误差评估和精度验证」,但可能没有真正理解…



        离散化误差的评估

        🧑🎓

        离散化误差的评估,具体指的是什么?


        🎓

        使用Richardson外推法估算离散化误差:



        $$ f_{\text{exact}} \approx f_h + \frac{f_h - f_{2h}}{r^p - 1} $$


        🎓

        其中 $f_h$ 是网格宽度 $h$ 的解,$r$ 是网格比,$p$ 是离散化的阶数。




        GCI(Grid Convergence Index)

        🧑🎓

        请告诉我关于「GCI」!


        🎓

        基于ASME V&V 20-2009的网格收敛性定量评价:


        🧑🎓

        到目前为止听了这么多,我终于理解了离散化误差的评估为什么那么重要!


        🎓

        用公式表示就是这样。


        $$ GCI_{\text{fine}} = \frac{F_s |\varepsilon|}{r^p - 1} $$

        🧑🎓

        嗯…只看公式的话我还不太明白… 这表示的是什么?


        🎓

        安全系数 $F_s = 1.25$(3水准以上的网格比较时)。GCI < 5% 作为收敛的目标。


        🧑🎓

        我前辈说「离散化误差的评估一定要好好做」,现在我理解了是什么意思。



        验证基准问题

        🧑🎓

        请告诉我关于「验证基准问题」!


        🎓

        为了确保分析结果的可信度,建议与以下基准问题比较:


        领域基准参考解
        结构补片测试均匀应力场的再现
        结构Scordelis-Lo屋顶参考位移
        流体盖驱动腔Ghia等人(1982)
        1D分析解$T(x) = T_0 + (T_1-T_0)x/L$

        加速方法

        🧑🎓

        老师,请告诉我关于「加速方法」!


        🎓
        • 多网格(AMG前处理:提高大规模问题的可扩展性
        • GPU并行化:将矩阵-向量乘积卸载到GPU
        • 域分割法:MPI并行分布式内存计算
        • 缩约基底法(ROM:参数研究的加速


        • 🧑🎓

          OpenFOAM多相流分析的整体面貌我已经掌握了! 明天开始在实务中加以应用。


          🎓

          好的,你的状态很好! 实际动手做才是最好的学习。有不懂的地方随时问我。


          Coffee Break 闲聊话题

          CSF模型的表面张力实现——Brackbill等1992年论文与OpenFOAM

          气液界面的表面张力在VOF法中的实现方法,标准的就是CSF(Continuum Surface Force)模型,由Brackbill、Kothe、Zemach在1992年提出。该模型将表面张力转换为界面周围的源项,变成体积力,可以用通常的运动方程求解器处理。OpenFOAM的interFoam正是采用了这个方法,interfaceProperties类负责曲率(κ)的计算。问题在于曲率的数值计算需要体积分率的二阶微分,在网格粗的区域曲率误差会很大。这是造成气泡变形过度或出现「寄生流」(parasitic currents)现象的原因,是多相流CFD的经典难题。

          OpenFOAM多相流的实务应用

          实践指南

          🧑🎓

          老师,请告诉我关于「实践指南」!


          🎓

          讲解在实务中活用OpenFOAM多相流分析的步骤和最佳实践。



          分析流程

          🧑🎓

          从最初的一步开始教我吧! 应该从哪里开始呢?


          🎓

          1. 几何准备:CAD数据的导入和清理(建议STL/STEP格式)

          2. 网格生成:适当的单元类型和尺寸选择、边界层网格设置


          🎓

          3. 物理模型设置:材料特性、边界条件、初始条件的定义和单位系确认

          4. 求解器执行:监视残差收敛和日志文件进展


          🎓

          5. 后处理验证:用ParaView等进行结果可视化,确认物理合理性



          最佳实践

          🧑🎓

          老师,请告诉我关于「最佳实践」!


          🎓
          • 基于公开教程案例,循序渐进地构建问题来积累知识
          • 通过版本管理(Git)对案例文件的变更进行追踪,确保可重现性
          • 确认网格独立性(用3个以上网格密度进行比较验证)
          • 必须进行与实验值或分析解的验证(V&V),确保结果的可信度

          • 🧑🎓

            哦~,公开教程案例的讲解,超级有意思! 请多告诉我一些。


            质量保证和文档化

            🧑🎓

            在实务中使用OpenFOAM多相流分析时,最要注意的是什么?


            🎓

            以体系化的方式记录分析条件、网格设置、物理模型选择的根据、验证结果。整备分析操作规程(SOP),促进团队内知识共享和工作标准化。建立分析结果的审查流程,以组织的形式管理质量。



            实务教程

            🧑🎓

            在实务中使用OpenFOAM多相流分析时,最要注意的是什么?



            OpenFOAM 基本执行步骤

            🧑🎓

            接下来是基本执行步骤的讲解。什么样的内容呢?


            🎓

            ```

            # 1. 创建案例目录


            🎓

            mkdir -p myCase/{0,constant,system}


            🎓

            blockMesh # 结构化网格


            🎓

            # 或者

            snappyHexMesh -overwrite # 非结构化网格(STL形状输入)


            🎓

            # 3. 网格质量确认

            checkMesh


            🎓

            # 4. 设置初始和边界条件

            # 在0/目录中放置 U, p, k, omega 等


            🎓

            # 5. 求解器执行

            simpleFoam > log.simpleFoam 2>&1 &


            🎓

            # 6. 残差监视

            foamMonitor -l postProcessing/residuals/0/residuals.dat


            🎓

            paraFoam # 用ParaView可视化


            🎓

            ```


            🧑🎓

            啊,是这么回事啊! 基本执行步骤就是这样的机制啊。



            CalculiX 基本执行步骤

            🧑🎓

            接下来是基本执行步骤的讲解。什么样的内容呢?


            🎓

            ```

            # 1. 网格生成(用Gmsh等生成并以.inp格式输出)


            🎓

            gmsh model.geo -3 -format inp -o model.inp



            🎓

            # 2. CalculiX执行

            ccx model


            🎓

            # 3. 结果确认

            cgx model.frd # 用CalculiX GraphiX可视化


            🎓

            ```


            🧑🎓

            到目前为止听了这么多,我终于理解了基本执行步骤为什么那么重要!



            网格质量基准

            🧑🎓

            请告诉我关于「网格质量基准」!


            指标OpenFOAM推荐值CalculiX推荐值
            宽高比< 20< 5
            非正交性< 65° (警告) / < 70° (错误)
            倾斜度< 4< 0.8
            y+ (壁面)30-300 (壁函数) / < 1 (壁面分辨)

            并行计算的设置

            🧑🎓

            并行计算的设置,具体指的是什么?


            🎓

            ```

            # OpenFOAM:区域分割


            🎓

            decomposePar -method scotch

            mpirun -np 8 simpleFoam -parallel > log 2>&1


            🎓

            reconstructPar

            ```



            项目管理和工作流自动化

            🧑🎓

            想粗略掌握整体流程,能按步骤告诉我吗?



            目录结构的推荐

            🧑🎓

            接下来是目录结构的推荐的讲解。什么样的内容呢?


            🎓

            ```

            project/


            🎓

            ├── cad/ # CAD模型

            ├── mesh/ # 网格文件


            🎓

            ├── setup/ # 分析设置文件

            ├── results/ # 计算结果


            🎓

            │ ├── case01/

            │ ├── case02/


            🎓

            │ └── ...

            ├── postprocess/ # 后处理脚本图像


            🎓

            ├── report/ # 报告

            └── validation/ # 验证数据


            🎓

            ```



            自动化脚本的活用

            🧑🎓

            接下来是自动化脚本的活用的讲解。什么样的内容呢?


            🎓

            参数研究和网格收敛性确认可以用Python脚本自动化,大幅提高可重现性和效率。


            🧑🎓

            那,目录结构的推荐做好了的话,应该没问题吧?



            审查清单

            🧑🎓

            请告诉我关于「审查清单」!


            🎓

            1. 输入数据:材料常数的单位系、CAD的尺寸精度、网格质量指标

            2. 边界条件:物理合理性、过约束/约束不足的确认


            🎓

            3. 求解器设置:收敛判定基准、时间步长、输出频率

            4. 结果验证:力的平衡、能量平衡、与理论解的比较


            🎓

            5. 灵敏度分析网格依赖性、边界条件的影响、材料参数的不确定性


            🧑🎓

            也就是说,目录结构的推荐的地方偷懒的话,后来会吃苦头。我会牢记在心!


            报告书制作的要点

            🧑🎓

            老师,请告诉我关于「报告书制作的要点」!


            🎓
            • 以可重现的水准记述分析条件(网格、材料、边界条件
            • 明示网格收敛性的确认结果
            • 定量地记述结果的不确定性(网格误差、模型误差、输入数据误差)
            • 附上与已知基准问题或实验数据的比较结果


            • 🧑🎓

              OpenFOAM多相流分析的整体面貌我已经掌握了! 明天开始在实务中加以应用。


              🎓

              好的,你的状态很好! 实际动手做才是最好的学习。有不懂的地方随时问我。


              Coffee Break 闲聊话题

              interFoam的时间步管理——Co < 0.5的遵守还不够深层的原因

              在用OpenFOAM的interFoam进行多相流计算时,maxAlphaCo(界面附近的Courant数上限)和maxCo(全体的Courant数上限)可以分别设置,但这一点很少被人注意到。界面存在的区域通过α的输运会发生数值扩散,比通常的Co < 0.5更严格的maxAlphaCo < 0.2被推荐在某些场景。特别是波浪分析(波高/波长比较大的情况)中,界面附近的速度梯度陡峭,即使全体Co数较小,界面附近也会局部不稳定。通过foamMonitor观察Co数的时间序列,可以发现「界面附近特别高」的异常状况。这样的诊断技能在多相流分析的实践中是必要的。

              OpenFOAM多相流的软件比较

              与商用工具的比较

              🧑🎓

              那么,做OpenFOAM多相流分析有什么软件可以用呢?


              🎓

              进行OpenFOAM多相流分析与同等功能商用工具的比较。



              比较表

              🧑🎓

              预算和时间都有限,成本效益最强的是哪个?


              观点开源工具商用求解器
              成本免费(需要人工成本)每年数百万日元~
              支持社区/付费支持官方技术支持
              GUI有限(需另外工具)集成GUI、易于操作
              验证用户自责实施V&V供应商已验证
              自定义化源代码改动自由API/UDF有限
              学习成本高(文档分散)低(体系化培训)

              选择指南

              🧑🎓

              最终选哪个,有判断基准吗?


              🎓

              教育研究用途,OSS是最优选择。量产设计流程中,商用工具的支持体制和GUI操作性在生产效率上有优势。混合运用(用OSS进行方法开发验证→用商用工具量产展开)作为有效的战略,被许多企业采用。



              迁移战略

              🧑🎓

              我听说过「迁移战略」,但可能没有真正理解…


              🎓

              从商用求解器向OSS迁移,或反之迁移时,要事前制定输入文件格式转换工具、结果比较验证步骤、教育训练计划。分阶段迁移(从部分分析开始)是现实的做法。设置OSS和商用的并行运用期,降低风险。



              开源工具 vs 商用工具比较

              🧑🎓

              那么,做OpenFOAM多相流分析有什么软件可以用呢?


              项目OpenFOAMAnsys FluentCOMSOL
              初期成本免费每年数百万日元每年数百万日元
              源代码公开(GPL)非公开非公开
              GUI无(文本基础)充实充实
              网格器snappyHexMeshFluent MeshingCOMSOL内置
              并行可扩展性优秀(数千核心)优秀中等
              支持社区官方支持官方支持
              多物理有限
              自定义化◎(C++扩展)△(UDF)△(Java API)
              项目CalculiXAbaqusAnsys Mechanical
              初期成本免费每年数百万日元每年数百万日元
              输入兼容性Abaqus兼容
              非线性分析
              接触分析
              动力分析
              GUICGX(有限的)CAE(充实)Workbench

              导入判断的基准

              🧑🎓

              导入判断的基准,具体指的是什么?


              🎓
              • 预算约束很严格:以OSS为基础,必要时加用商用工具
              • 质量保证必须:利用商用工具的V&V文件认证对应
              • 自定义物理模型:需要源代码改动的话OSS唯一
              • 团队教育成本:基于GUI的商用工具学习快

              • 🧑🎓

                等等,初期成本是指……也能在这种情形用吗?


                许可证形态和总所有成本(TCO)

                🧑🎓

                我听说过「许可证形态和总所有成本(TCO)」,但可能没有真正理解…



                商用工具的成本结构

                🧑🎓

                商用工具的成本结构,具体指的是什么?


                项目年额目安说明
                节点锁定许可证100-500万日元固定在1台PC
                浮动许可证150-800万日元网络内共享
                HPC代币50-300万日元按并行核心数量的从量制
                支持维护许可证的15-25%含版本升级
                培训30-80万日元/课程初期导入时必须