安装 OpenFOAM + waves2foam

waves2foam 不算是特别难编译的软件,主要是版本兼容性、权限之类的细节需要注意。中文互联网上已有的几篇介绍 waves2foam 编译的文章,都不够重视版本兼容性的重要性,openfoam wiki 上的描述也比较简略,我在这篇文章中扩充一下。

这篇文章中,Ubuntu 使用 14.04 版,OpenFOAM 使用 3.0.0 版,waves2foam 使用 r2094版,因为一些历史问题,都没有选择最新版。截至发稿,waves2foam 已经发布了 r2125 版,版本历史详见Contrib/waves2Foam – OpenFOAMWiki,用户手册上说兼容 OpenFOAM 3.0 版和 4.0 版,实际上配合 OpenFOAM 3.0 编译的时候缺少一个动态库,无法编译出 waveFoam,想必是开发者根本没有测试就发布了新版,这也是开源软件常有的事情。我将针对这一问题给出解决方案。此外,我会介绍些通行的方法,如果你要配合其他版本的 Ubuntu 或 OpenFOAM,请用这些通用的方法,找到一个合适的 waves2foam 版本。

为了表述清楚,避免误会,我给出每一步的 bash 命令。

1 安装依赖包

sudo apt install libgsl0-dev gfortran subversion git

如果你使用 ubuntu 18.04 版,上面的libgsl0-dev 应该换成 libgsl-dev。

2 下载源代码

mkdir -p $FOAM_RUN/../applications/utilities
cd $FOAM_RUN/../applications/utilities
svn co -r 2094 http://svn.code.sf.net/p/openfoam-extend/svn/trunk/Breeder_1.6/other/waves2FoamCode language: PHP (php)

注意这里 svn 命令的参数 -r,这个参数的含义是指定具体的版本号,不指定这个参数默认是最新版。由于最新版在 OpenFOAM 3.0 上出现了兼容性问题,所以我尝试了一个稍老的版本,这个版本是 waves2foam 在兼容 OpenFOAM 4.0 前的最后一个版本,想必可以兼容 3.0。如果你也遇到了兼容性问题,比如动态库找不到之类的,可以多尝试几个版本。只要是用户手册上注明了支持的版本,开发者肯定是曾经编译成功过的,只要找到他们当时发布的版本,肯定可以不加修改地编译出全部代码。

如果 svn 命令运行无误的话,输出的开头和结尾如下

A    waves2Foam/ThirdParty
A    waves2Foam/ThirdParty/fenton4Foam
...
A    waves2Foam/TODO
A    waves2Foam/README
Checked out revision 2094.

3 编译

cd waves2Foam
./Allwmake

这里需要注意的是,运行 Allwmake 后会从 GitHub 下载 OceanWave3D-Fortran90 的源代码,必须保持网络畅通。编译过程中看下输出,是否有报错,尤其是不能有 fatal error。

4 测试

编译完成后测试下,最简单的当然是

waveFoam -help

运行后,有如下输出

Usage: waveFoam [OPTIONS]
options:
  -case <dir>       specify alternate case directory, default is the cwd
  -noFunctionObjects
                    do not execute functionObjects
  -parallel         run in parallel
  -roots <(dir1 .. dirN)>
                    slave root directories for distributed running
  -srcDoc           display source code in browser
  -doc              display application documentation in browser
  -help             print the usage

Using: OpenFOAM-3.0.0 (see www.OpenFOAM.org)
Build: 3.0.0-8b097f6d8dd9Code language: CSS (css)

进一步地,可以试下 tutorials,比如驻波这个算例

tutorials/waveFoam/standingWave
./Allrun
paraFoam

运行算例的时候,完全可能会再遇到一些问题,比如 fvSchemes 缺少项目什么的,一般删掉 fvSchemes 里的注释符号即可解决。

常恭

作者: 常恭

略懂 OpenFOAM

发表评论