目录
从本节起,我们开始一起系统性地学习OpenFOAM软件!加油!
一、OpenFOAM简介
OpenFOAM是Open Source Field Operation and Manipulation的简称,是最著名的开源计算流体力学软件。OpenFOAM完全由C++语言编写,在Linux系统下运行,是一个面向对象的计算流体力学C++库,主要用于求解偏微分方程(PDE)和常微分方程(ODE),同时包含现成的或开箱即用的求解器、前处理程序和后处理程序。
OpenFOAM特点:
(1)支持大规模并行计算;
(2)支持多物理场仿真,包括计算流体力学(可压缩和不可压缩流)、热传递和共轭传热、燃烧和化学反应、多相流和传质、粒子法(DEM、DSMC、MD)和拉格朗日粒子追踪、应力分析和流固耦合、计算气动声学,计算电磁学,计算固体力学,MHD等,支持参照系旋转、任意网格界面、动态网格处理和自适应网格,包含6自由度求解器、ODE求解器等;
(3)丰富的物理模型库,包括湍流模型(RANS、DES、LES)、输运/流变模型、牛顿和非牛顿粘性模型、流体热力学模型和物理属性、源项模型、拉格朗日粒子模型、多相流的相间动量传递模型,支持燃烧、火焰速度、化学反应、多孔介质、辐射、相变等模型;
(4)求解功能类型齐全,包括有限体积(FVM)求解器、同位多面体非结构化网格、支持空间和时间二阶精度(许多离散方案,包括高阶方法)、稳态和瞬态求解器、基于压力-速度耦合的SIMPLE和PISO、基于域分解的大规模并行、网格生成工具、网格操作和转换工具、后处理工具等,所有组件均以库的形式实现,便于复用。
与商业CFD软件相比,目前OpenFOAM不支持GUI界面,无自带预定义设置,用户需要对CFD基础知识有基本了解并熟悉OpenFOAM命令行界面(CLI),但软件完全开源,求解器可以根据特定需求进行定制,免费使用,并且对可使用的核心数量没有限制。
全新的求解器可以使用OpenFOAM高级编程轻松实现,如:
↓↓↓
solve
{
fvm::ddt(T)
+ fvm::div(phi, T)
- fvm::laplacian(nu, T)
==
0
};
代码实现和原方程之间的对应关系非常清晰。
二、OpenFOAM文件结构
OpenFOAM的主要文件结构如下图所示。如果在默认位置安装了OpenFOAM,则环境变量$WM_PROJECT_DIR的目录应指向以下目录(取决于安装的版本):
$HOME/OpenFOAM/OpenFOAM-9
or
$HOME/OpenFOAM/OpenFOAM-dev
其中最重要的是“Allwmake”文件, 用于编译OpenFOAM。
以符号$开头的条目是环境变量,可以使用echo命令回显环境变量的值,例如:
echo $WM_PROJECT_DIR
命令行会显示如下值:
可以使用env命令列出所有OpenFOAM的环境变量:
env | grep "OpenFOAM"
命令行会显示如下值:
2.1 Applications文件夹
applications文件夹中包含内容如下:
①solvers:包含分布式求解器的源代码;
②test:包含几个测试用例的源代码,这些测试用例显示了一些OpenFOAM®类的用法;
③tools:包含针对于程序二次开发和高阶用户的工具;
④utilities:包含分布式实用程序的源代码。
⑤Allwmake:用于编译求解器和实用程序的所有内容。要在test中编译测试用例,请转到所需的测试用例目录,并通过键入wmake来编译它。
2.2 bin文件夹
bin文件夹中包含内容如下:
其中包含许多脚本文件,如foamNew,foamLog,foamJob,foamNewApp等,还包含启动paraView的脚本paraFoam。
2.3 doc文件夹
doc文件夹中包含内容如下:
主要包含OpenFOAM软件的文档,即用户指南、程序员指南和Doxygen生成的html文档。Doxygen文档需要通过在$WM_PROJECT_DIR中输入Allwmake doc来编译。
2.4 etc文件夹
etc文件夹包含内容如下:
主要包含环境文件、全局OpenFOAM指令、模板和默认热化学数据库thermoData,同时还包含超级字典controlDict,可以在其中设置调试标志和默认单位等。
2.5 platform文件夹
platform文件夹包含内容如下:
主要包含编译applications时生成的二进制文件,编译src目录中的源代码时生成的库文件。编译完成后,二进制文件将存储在下面路径中:
$WM_PROJECT_DIR/platforms/linux64GccDPInt32Opt/bin
$WM_PROJECT_DIR/platforms/linux64GccDPInt32Opt/lib
2.6 src文件夹
src文件夹包含内容如下:
主要包含OpenFOAM基础库的源代码,是软件核心,每个子目录包含不同的库,其中OpenFOAM文件夹中包含用于操作的容器的定义、字段定义、网格和网格特征(如区域和集合)的声明;finiteVolume文件夹是有限体积法实现,提供了有限体积离散化所需的所有类,如网格处理、有限体积离散化运算符(散度、拉普拉斯算子、梯度、fvc/fvm等)和边界条件。在目录finiteVolume/lnInclude中,您还可以找到非常重要的文件fvCFD.H,大多数应用程序中都包含该文件;sixDoFRigidBodyMotion文件夹包含6自由度的刚体运动求解器;transportModels包含许多输运模型;TurbulenceModels包含许多湍流模型。
2.7 tutorials文件夹
tutorials文件夹包含内容如下:
主要包含每个求解器的示范案例,通过所涉及的物理学知识来组织管理各文件夹,用户可以使用这些案例作为起点开发自己的案例。
2.8 wmake文件夹
wmake文件夹包含内容如下:
主要包含编译所需的文件。OpenFOAM使用wmake命令来编译,wmake可以理解OpenFOAM的文件结构中,并使用此目录中设置的默认编译器指令。如果在OpenFOAM bashrc文件中添加了一个新的编译器名称,还应该告诉wmake如何解释这个名称。在wmake/rules中可以找到可用编译器的默认设置。同时,还可以找到一些在组织文件进行编译或清理时非常有用的脚本。
2.9 用户目录
用户可以通过环境变量$WM_PROJECT_USER_DIR来设置自己的目录以便于管理,这样可以将自己的案例文件、修改后的求解器、实用程序和库存放在此,避免修改原始安装中的任何内容。
2.10 通用求解器目录
目录:$WM_PROJECT_DIR/applications/solvers/solverName/
该目录下包括求解器的源码文件,如上图拉普拉斯算子的源码是laplacianFoam.c,createFields.H声明所有的字段变量和初始化求解。Make文件夹中包含编译当前求解器的指令
2.11 通用工具目录
目录:$WM_PROJECT_DIR/applications/utilities/utilityName/
该目录下包括通用工具的源代码文件,如上图的前处理功能中的边界层应用,源文件、头文件、Make文件夹功能和求解器文件夹中的类似。
如果需要将自己的求解器、工具代码放在安装目录下,建议将自定义的内容存放在$WM_PROJECT_USER_DIR中,并且按照与$WM_PROJECT_DIR/applications/solvers/和$WM_PROJECT_DIR/applications/utilities/的形式进行组织管理,同时需要修改Make/files和Make/options中的文件,用于编译时的库文件定位等。
三、源码信息检索和环境变量
3.1 源码信息检索
可以使用“find”命令来定位源码文件。
①如果需要在$WM_PROJECT_DIR定位包含fvPatch字符串的文件夹,可以执行下面的操作:
find $WM_PROJECT_DIR -type d -name "*fvPatch*"
# $WM_PROJECT_DIR 在哪里搜索
# -type d 搜索类型为文件夹
# -name 指定名字
# "*fvPatch*" 寻找的内容
②如果需要在$WM_PROJECT_DIR定位包含fvPatch字符串的文件,可以执行下面的操作:
find $WM_PROJECT_DIR -type f -name "*fvPatch*"
# $WM_PROJECT_DIR 在哪里搜索
# -type f 搜索类型为文件
# -name 指定名字
# "*fvPatch*" 寻找的内容
③如果需要在文件中搜索某个字符串,可以使用grep命令。例如,如果在$FOAM_SOLVERS中查找LES,可以执行下面的操作:
grep -r -n "LES" $FOAM_SOLVERS
# -r 递归搜索
# -n 输出行号
# "LES" 指定检索内容
# $FOAM_SOLVERS 目标路径
字典是OpenFOAM的输入文件,查找这些文件的简单方法便是在安装目录进行本地搜索,如下所示:
④如果需要在tutorials目录中查找以Dict单词结尾的所有文件,可以执行下面的操作
#区分大小写的检索
find $FOAM_TUTORIALS -name "*Dict"
#不区分大小写的检索
find $FOAM_TUTORIALS -iname "*dict"
#可以使用单引号''或双引号"",但不要混用
这里还有一些高级的检索命令,可以用来在安装目录中检索信息:
⑤如果要查找滑移slip边界条件的教程,可以执行下面的操作:
find $FOAM_TUTORIALS -type f | xargs grep -sl 'slip'
⑥如果要查找滑移slip边界条件的源代码所在位置,可以执行下面的操作:
find $FOAM_SRC -name '*slip*'
⑦如果要查找哪些应用程序无法并行运行,可以执行下面的操作:
find $WM_PROJECT_DIR -type f | xargs grep -sl 'noParallel'
3.2 环境变量
OpenFOAM的环境变量设置位于/etc文件夹中,可以在$HOME/.bashrc文件中添加以下行来获取$WM_PROJECT_DIR/etc/bashrc文件,或者使用source命令,添加环境变量配置文件etc/bashrc。默认情况下,OpenFOAM使用系统编译器和系统MPI编译器。
当使用OpenFOAM时,使用的是它的环境设置,也就是它的库和编译器路径。如果用户正在进行软件开发,并且由于库冲突或缺少编译器而遇到编译问题,可以尝试卸载OpenFOAM环境变量。
本节主要对OpenFOAM软件、文件结构等进行简单介绍,下一节我们将介绍OpenFOAM中的应用程序、案例的目录结构、运行OpenFOAM第一个案例及案例设置。❀感谢大家支持❀