(作者:毛艳军)
在应用 CFD 方法进行 船舶与海洋工程,港口海岸及近海工程等相关工程问题模拟的过程中,首先要做的就是建立数值波浪水槽(Numerical Wave Tank NWT), NWT 需要具备基本的造波和消波功能。waves2Foam 就是一个基于 OpenFOAM 进行二次开发的用于波浪模拟的拓展工具箱。它由丹麦科技大学 Niels Gjol Jacobsen 在2011年9月开源公布,也是目前影响力和知名度较高的一个造波工具箱。
waves2Foam 采用速度入口式造波方法,松弛区消波方式。预设了多种规则波,不规则波,孤立波等造波类型;松弛区消波可以在水槽两端设置先后消波区从而可以消除尾端波浪以及结构物二次反射波浪。经众多学者和以及笔者验证,waves2Foam 造波和消波效果都较为稳定,同时计算效率也表现不错,因此得到了众多学者使用。同时,其中包含了较多的前后处理程序也是值得学习和使用的。

这里主要分享:
- waves2Foam 安装过程中容易出现的问题和解决办法,是waves2Foam手册的有效补充;
- waveDyMFoam 和 overwaveDyMFoam 动网格版本求解器的手动修改,手册的有效补充和首发内容;
- 新手学习和使用OF和waves2Foam的建议。
1 waves2Foam的安装与使用
关于wavesFoam的安装与使用http://http://openfoamwiki.net/index.php/Contrib/waves2Foam已做了详细介绍,其中主要内容都迁移至wave2Foam Manual 。因此对于使用waves2Foam的人员,建议通读manualwaves2Foam.pdf。其中安装部分已经把基本安装流程和所需要的依赖都说明白了,先移步去尝试尝试可好?这里主要是点出安装过程中对于新手常遇到的几个小坑。
2 支持版本
关于支持版本,手册中已经写明了支持的版本,亲测2.x ,3.x系列几乎安装没有太大问题,下面小坑有几个可以学习一下,万一不幸碰到也好解决(为什么笔者这么不幸)。
OpenFoam-v1706 版本支持修改
waves2Foam 近期公布了其支持的OF17012_PLUS版本,之前尝试了N久的在OF1706_PLUS上编译安装的工作也算告一段落,在此填坑,是否能够和重叠网格有效结合有待于进一步验证,应该问题不大。
由于暂时不会将OF1706_PLUS直接升级为1712,因此强迫症的我打算再次尝试OF1706_PLUS上编译安装。application/solvers/
里面没有对应1706_PLUS的版本。因此从1712_PLUS版拷贝,从1606拷贝的兼容性极差,似乎版本差异太大,缺失很多声明文件。
此部分讲解较为详细,希望大家可以耐心阅读学习整个程序修改和查错过程,注意程序中的注释内容,逐渐具备基本的程序修改能力。

设置好其他,编译发现如下错误:

显示为scAlpha未声明,查看此变量未找到相关声明,参考查找icAlpha
关键字,在OpenFOAMv1706/src/finiteVolume/cfdTools/general/include/alphaControls$
中发现此变量,如下:

对比1712代码,发现了如下关键字声明:

因不方便改动源码,因此将此声明放到了alphaEqn.H中,尝试可以编译成功,至此此坑填满。如下:

3 相关依赖
一定要把manualwaves2Foam中的相关依赖都下载和编译安装好之后再进行waves2Foam的安装。依赖的相关安装方法自行百度。这里面有个很容易出的问题,就是ThirdParrty里面,关于OceanWave3D-Fortran90的下载,与安装时采用的git clone.
git clone https://github.com/boTerpPaulsen/OceanWave3D-Fortran90.git
,详细见ThirdParty/Allwmake
这里面关键部分是这部分容易出问题,如果OceanWave3D编译出现问题,请参考下面这段的介绍:

这一部分由于网络问题或者git 库可能迁移,会导致无法下载OceanWave3D,从而引发一系列问题。导致编译失败。此部分可以通过阅读make 文件的操作,进行手动解决OceanWave3D的编译,主要进行了以下操作:

完成这三步,就相当于手动解决了OCeanWave3D的下载问题,然后可以运行Allmake进行编译。或者自行阅读后续过程手动编译OceanWave3D.
4 环境变量设置
这里按照手册要求,安装路径是 $FOAM_RUN/../applications/utilities
,这里使用了OF的环境变量FOAM_RUN,新手一定要将源代码放入此路径中,因为默认的环境变量$WAVES_DIR是这个路径,当然,进一步如果了解到了这个问题,你可以把waves2Foam安装到任意位置。环境变量设置文件位于binbashrc.org
下面,此路径中定义了所有waves2Foam的环境变量。由于篇幅限制,完整文件请自行查看,下面展示主要部分: #号表示注释内容:

还有一块叫做Easy navigation,此部分的使用方法是将该http://bashrc.org的路径到自己的配置文件中`./.bashrc`中去,参考多版本OF控制的原理,在此不详述。

剩下的环境变量部分主要是进行的版本的区别和不同进行了一定的修改和设置。
补充:使用默认的路径编译好可执行文件后,后续如果自己改动求解器编译时Make/file 中的路径尽量不要使用waves2Foam提供了的环境变量,最好使用绝对路径,虽然麻烦了一些但是不会出现太多的环境变量问题,或者如上文所述,记得将其添加到自己的配置文件中,每次开启终端即可自动source .bashrc的话也可以。
经过再次编译安装前一定要到/bin/里面`source bashrc`,记得设置waves2Foam的环境变量,否则你会得到各种错误,如缺少很多include文件以及如下问题:

5 环境变量设置
默认算例可以通过运行Allrun命令来运行算例,此处可以通过阅读Allrun来了解waves2Foam算例运行过程中的执行的命令,可以手动按顺序执行。此处一个小坑,算例换到其他位置后无法运行Allrun。请看代码注释部分:

6 waveDyMFoam的修改
部分版本中waveDyMFoam需要自己通过interDyMFoam进行修改,此处的主要问题就是需要理解Make文件夹中的两个文件file和option
file:**.C文件文件名,和可执行文件的存放位置,注意此处最好手动写绝对路径。

options:源文件需要引用的相关代码和库文件,编译时,时常出现缺失某些文件的情况,主要是此处路径的问题,可以在此处添加,include进来,强调一点,一定要注意路径书写的正确性,不要换行书写,注意结尾的 。 小写 -i include某个文件,大写 -I include某个文件夹下所有,同理 -l & -L。

waveDyMFoam.C的改写方式
由于waves2Foam中未对动网格求解器进行编写,此部分在manual中给出了部分解释,但是相对较难理解。manual中的compareFiles.sh后显示的内容如下,这里面主要是对比了所有的interFoam和waveFoam的区别,作为参考用于waveDyMFOAM的改写:

- 首先做最简单的工作,复制interDyMFoam/ 到waveDyMFoam/ 参见上文
- 修改file 和option 文件 参见上文
- 代码改写,给出了局部添加代码行号和上下文位置
waveDyMFoam.C 的改写代码
waveDyMFoam.C

creatFiels.H

createAlphaFluxes.H的定义如下:

总结,此次编译工作纯属自娱自乐,程序调整较大,个别地方有待于进一步验证,经过以上修改,验证后可以正确的将waves2Foam的造波条件应用于interDyMFoam 求解器。 对整个程序有了更进一步的认识,下一步工作将其应用于重叠网格模型overInterFoam和isoInterFoam的新型自由液面的压缩格式上。
7 overWave DyMFoam solver
相信此部分内容应该属于全网首发,其实没什么新鲜东西,一句话,搞清楚什么是造波边界条件,什么是动网格求解器,两者算法上应该是相互独立的,因此上面 waveDyMFoam solver 的修改流程完全适用于 overWaveDyMFoam solver, 此部分工作已经过验证可以正确应用,需要注意的是相关依赖和include 文件要搞清楚,作者建议 overWaveDyMFoam 求解器最好基于 overInterDyMFoam 进行修改,对于新手不要随意换目录,很多 include 文件搞不清楚很容易找不到。 编译前,记得去 source waves2Foam/bin/bashrc
,否则 好多造波的库是找不到的,另外此处 waves2Foam 的造波边界条件似乎和 OF -v1706中的 waveModel 边界条件名称有所冲突,因此可以将自带的 waveModel 库 comment out 掉。
error 提示
1.

2.

如果你觉得本部分对你的研究有借鉴意义,可以使用如下引用:
