OpenFOAM(Open Field Operation and Manipulation)是一个开源的计算流体动力学(CFD)软件包。它提供了各种模拟和建模工具,用于研究和解决复杂的流体流动问题。
OpenFOAM提供了一个强大的求解器库,可以用于模拟各种流体流动现象,如湍流、多相流、传热等。它采用有限体积方法,将物理域离散成小的体积单元,并解析守恒方程。OpenFOAM还提供了灵活的求解器设置和边界条件定义,使用户能够针对特定问题进行自定义模拟。
但是,在使用已有OpenFOAM求解器针对特定问题进行求解时,并不能保证求解算法一定适合该问题的解决,因此本文以投影法为例,简单介绍OpenFOAM求解器自定义编辑逻辑。
1.投影法求解原理
投影法是求解不可压缩N-S方程的常用方法之一,对于二维不可压缩N-S方程以及连续性方程如公式(1)。
(1)
投影法原理可以分为以下三步,将时间推进分成三个子步,在中间步解出压力,最后推导出速度。首先需要确定时间离散格式,这里时间离散化采用显式欧拉格式,则离散方程如(2)所示。
(2)
将公式(2)拆分,引入速度中间量获得方程组(3)、(4)。
(3)
(4)
公式(3)通过显式欧拉格式得到速度中间量U*。公式(4)并不满足连续性方程,对两边求散度,得:
(5)
其中Ut+△t满足连续性方程:
(6)
化简得到Pt+△t:
(7)
最终回带公式(4),获得Ut+△t:
(8)
通过以上操作,可以获得下一时间步的速度、压力信息,进而不断迭代最终计算出结果。
2.创建自定义 OpenFOAM 求解器的一般步骤:
1 复制现有求解器:
在 OpenFOAM 中,通常会从一个现有的求解器开始。选择与想要解决的问题类型最接近的现有求解器,然后将其复制到一个新目录中,以便可以进行修改。本文将以icoFoam求解器作为模板,根据上述投影法公式对求解器相关文件进行修改。
以OpenFOAM-10为例,用户可以通过OpenFOAM-10/applications/solvers/incompressible/icoFoam路径找到OpenFOAM提供的icoFoam求解器文件。
2 修改求解器:
将icoFoam求解器文件夹复制到算例文件夹后,需要修改自定义求解器代码的目录。通常,可以将该目录放在 user 目录中,防止避免自定义求解器对系统自带的求解器操作的覆盖。本文对icoFoam/Make文件夹下files文件进行修改,将icoFoam求解器的名称修改为myicoFoam。
此处将第三行代码EXE = $(FOAM_USER_APPBIN)/myicoFoam末尾名称进行更换。
完成上述步骤后,进行修改求解器源代码文件:
打开icoFoam文件夹下icoFoam.C文件,对理论公式进行修改。
修改完成后,需打开同一文件夹下createFields.H文件,修改变量信息,以确保公式中变量规范。
3 编译自定义求解器:
确认无误后,即可使用 wmake 命令编译你的自定义求解器。在求解器目录终端中运行:wmake
3.使用自定义求解器进行运算
使用自定义求解器对算例进行运算之前,需要对算例进行调试,进行一些修改,以便计算进行。
本文以elbow为例进行运算。完成网格绘制、边界条件设定、求解迭代设置等内容后,即可在终端中使用myicoFoam求解器进行求解。
通过简单运算,可以获得基于投影法的速度、压力场结果。
4.小结
本文从基础理论出发,基于投影法对OpenFOAM中的icoFoam求解器进行修改,并完成elbow算例计算,得到的速度场、压力场精度较低但是符合仿真规律。文章仅作为入门指导,具体算例方法需要根据实际情况进行自定义修改,希望本文能够给您提供帮助。