开源CFD软件-OpenFOAM:软件简介及文件结构(1)

目录

一、OpenFOAM简介

二、OpenFOAM文件结构

2.1 Applications文件夹

2.2 bin文件夹

2.3 doc文件夹

2.4 etc文件夹

2.5 platform文件夹

2.6 src文件夹

2.7 tutorials文件夹

2.8 wmake文件夹

2.9 用户目录

2.10 通用求解器目录

2.11 通用工具目录

三、源码信息检索和环境变量

3.1 源码信息检索

3.2 环境变量


        从本节起,我们开始一起系统性地学习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高级编程轻松实现,如:

\frac{\partial T}{\partial t}+\bigtriangledown \cdot(\phi T)-\bigtriangledown \cdot(v\bigtriangledown T)=0

↓↓↓

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第一个案例及案例设置。❀感谢大家支持❀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿核试Bug愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值