知识

OpenFOAM初探(一)

前言

笔者早年的工作主要在 win10 平台进行,使用过诸如 CFX、Fluent 等商业软件,后续论文工作主要操练的是 Fluent UDF。诚然,Fluent 依托 UDF 在可操作性上已经远超其余商业 CFD 软件(待考证),但是其缺陷依然明显:1, 界面操作繁琐,对于一些参数化的研究工作,很难通过脚本实现(GUI 依赖版本,TUI 懒得学);2, 新功能的整合程度参差不齐,以笔者常用的 DPM 为例,功能限制较多,BUG 不少…;3, 很难修改顶层求解器,很多中间步骤需要手工;4, 安装包太大,正版太贵。 OpenFOAM 是一款流行的开源 CFD 工具箱,最初萌生体验的想法主要还是觉得自己的代码水平有些上路了(自我感觉),此外觉得用命令行和脚本操作很有一种 Geek 的感觉~

基本介绍

OpenFOAM 主要有两大分支,一是基金会版(.org),版本号为 OF6,7,8…,似乎是由帝国理工维护,从”血统”上讲更纯;二是ESI 版(.com),版本号为 v1912,v2006,v2012…(前两位数字代表年份,后两位数字代表月份,第一次接触乍一看还以为这版本好几年没更新了),由 ESI Group 维护,有那么一点点商业化的感觉。通过使用 OpenFOAM 7/8/v2006/v2012 这四个版本, 我大致了解了一下这两个分支的区别:

  • 手册 ESI 版的手册要远比基金会版的全面,后者基本就是看源码。当然总体来说 OpenFOAM 是我用过的大型开源软件里文档做的最差的,大概是为了培训收入吧。
  • 算例 ESI 版自带的 Tutorials 要比基金会版的多,比如大气边界层的建模,基金会版似乎没有。
  • 后处理 ESI 版 DPM 类的求解器输出的 lagrangian 粒子场能够通过外部安装的 Paraview 读取,而基金会版的只能通过在 ThirdParty 中编译的 Paraview 打开,而这个版本的显示性能较差。同时,如果使用的是 WSL1 这种没有显示接口的系统,使用 Windows 下的 Paraview 做颗粒后处理的话,ESI 版是唯一的选择。
  • 求解器 基金会版似乎对一些求解器做了整合,比如将动网格功能合并进了一些原始的求解器,这一点比较友好。求解器功能上两者似乎差异不大。
  • 第三方包 ESI 版支持更多的第三方内容,比如比较知名的科学计算套件 Petsc(很高端,很想学,但没空)、基于一些奇妙方法的多相流求解器 OpenQBMM(但是算例好像跑不了…)、优化大规模 IO 的 adios(听着很妙但没钱玩超算)…但是鲁迅说过,我可以不用,但它必须要有。
  • 平台支持 参考基金会官网,OpenFOAM 主要面向 Linux,同时也一定程度支持 Windows 10 和 macOS。基金会提供了面向 Linux 的源码包,以及 Ubuntu 等主流 Linux 发行版的二进制包。在 Win10 上安装 OpenFOAM(不包括虚拟机)需要安装 Linux 子系统,即 WSL。而 ESI 版提供基于 MSYS 的 OpenCFD,能在 Windows 上做到开箱即用(似乎就是个 docker?),针对不同发行版的二进制包也更多。不过平台的支持程度并不是很关键,因为想要好好学习 OpenFOAM 还是得从编译源码包开始,使用原生 Linux 无论从性能和兼容性来看都是最佳选择,WSL 可以作为 Windows 系统上的备胎。否则 OpenFOAM 对比 Fluent 似乎没有明显优势。

环境配置

Arch/Manjaro

sudo pacman -S gcc flex cmake git openmpi

Debian/Ubuntu

sudo apt-get update
sudo apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev
sudo apt-get install qt4-dev-tools libqt4-dev libqt4-opengl-dev freeglut3-dev libqtwebkit-dev