OpenFOAM(Open Field Operation and Manipulation)是一个用于计算流体动力学(CFD)的开源软件包。它由英国的SINTEF ICT部门开发,并且现在由OpenFOAM基金会维护。OpenFOAM提供了大量的工具来解决各种复杂的科学和工程问题,特别是在流体力学领域。
OpenFOAM 官网:https://openfoam.org
Feature
- 开源:OpenFOAM是完全免费且开源的,允许用户自由地使用、修改和分发其源代码。
- 广泛的物理模型:包括但不限于湍流模型、传热模型、化学反应模型等,适用于多种类型的流动模拟。
- 并行处理能力:OpenFOAM内置了对MPI的支持,可以方便地在多处理器或分布式内存系统上进行并行计算。
- 强大的网格处理功能:支持多种网格类型(如结构化网格、非结构化网格)以及网格操作(如网格生成、网格变形)。
- 丰富的求解器集合:提供了一系列预构建的求解器,用于解决不同类型的偏微分方程,如稳态和瞬态流动、不可压缩和可压缩流动等。
- 脚本语言支持:提供了Python接口,使得非C++程序员也能利用OpenFOAM的强大功能。
- 社区支持:由于其开放性,OpenFOAM拥有一个活跃的开发者和用户社区,提供持续的技术支持和新功能的开发。
应用领域
OpenFOAM的应用范围广泛,从航空航天到汽车工业,再到能源生产和环境研究等多个领域都有所涉及。它可以帮助工程师和科学家们模拟和分析流体流动、热量传递、固体变形等现象,为设计优化和科学研究提供数据支持。
编译与安装
OpenFOAM可以在Linux和Unix-like操作系统上运行,虽然也有Windows版本,但通常推荐在类Unix系统中使用。使用OpenFOAM需要一定的编程知识,尤其是C++,因为许多高级功能都需要通过编写自定义程序来实现。
Linux(Debian)
前置配置
安装编译环境:
sudo apt update
sudo apt install -y git gcc cmake flex openmpi-bin paraview
拉取源码:
mkdir $HOME/OpenFOAM
cd $HOME/OpenFOAM
git clone https://github.com/OpenFOAM/OpenFOAM-dev.git
git clone https://github.com/OpenFOAM/ThirdParty-dev.git
如果无法连接到 github.com
或者速度不佳,可以使用笔者提前下载的压缩包:
百度网盘:
链接: https://pan.baidu.com/s/1HKJAdPWwtlpu0HrkSLiyKA?pwd=im88
提取码: im88
下载之后将其解压在用户主目录。
确认自己的命令行 Shell
为 bash
,或者:
bash
然后加载环境变量:
source $HOME/OpenFOAM/OpenFOAM-dev/etc/bashrc
检查环境变量是否成功配置:
echo $WM_PROJECT_DIR
这将会返回 ${HOME}/OpenFOAM/OpenFOAM-dev
。($HOME为自己的用户目录)
编译
cd OpenFOAM-dev
./Allwmake -q -j `nproc`
注意: nproc
会获取电脑当前核心数,使用 -j
选项并行执行编译,使用 -q
选项同时编译多个库和可执行文件。
接下来将会进行大致10分钟的编译(根据电脑性能不同而定)。
更新
源存储库,特别是 OpenFOAM-dev,会定期更新。 可以通过在 OpenFOAM-dev 目录中执行来将更新“拉取”到源目录
git pull
然后可以使用 -update
选项(带或不带并行 -j
选项)将更新编译到 OpenFOAM 中:
./Allwmake -update
如果更新版本没有正确编译,例如在一些非常重大的更改之后,那么应该在重新编译之前清理平台:
wcleanPlatform
./Allwmake
编译后续
在后续使用的过程中,需要将环境变量写入.bashrc
或者 .zshrc
之类的文件:
vim ~/.bashrc
# 或者你的shell为zsh时:
vim ~/.zshrc
在文件最后写入以下内容:
export WM_PROJECT_DIR="$HOME/OpenFOAM/OpenFOAM-dev"
export PATH="$PATH:$WM_PROJECT_DIR/platforms/linux64GccDPInt32Opt/bin"
export PATH="$PATH:$WM_PROJECT_DIR/bin"
export LD_LIBRARY_PATH="$WM_PROJECT_DIR/platforms/linux64GccDPInt32Opt/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$WM_PROJECT_DIR/platforms/linux64GccDPInt32Opt/lib/dummy:$LD_LIBRARY_PATH"
然后 :wq
保存退出。上述写入内容的具体目录可根据具体编译后的情况而定。
重新载入配置文件:
source ~/.bashrc
# 或者使用 zsh 时:
source ~/.zshrc
测试 OpenFOAM
进入案例:
cd OpenFOAM-dev/tutorials/incompressibleFluid/cavity
这是一个不可压缩流体的封闭腔案例。
ls
可见该目录下有三个文件夹:
├── 0
├── constant
└── system
接下来进行第一步,构建网格:
blockMesh
使用 pimpleFoam
求解器来对瞬态流动进行求解:
pimpleFoam
求解后将生成的文件:
0 0.5 1 10 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 constant system
接下来使用 ParaView
进行后处理:
paraFoam -builtin
接下来你会看到:
点击 Play
可以查看随时间变化的状态:
点击 Glyph
创建矢量箭头:
然后:
更多操作请读者自行探索学习。