0、前言
由于我发现,关于风暴潮耦合模型ADCIRC+SWAN,能够在网上找到的资料实在是少之又少,所以特此打算写一系列的有关该模型的使用流程。
1、软件介绍
在这里或许有人会问,到底什么是ADCIRC?什么是SWAN?为什么会有两个模型,而ADCIRC+SWAN又是什么 ?
我的理解是:ADCIRC是一个风暴潮模型,用于模拟在风场和气压场条件下(当然,这个模型支持很多种风场模式,不同的模式需要的输入不同,下文会讲到)的沿海增水的过程,主要是用于模拟由于输入导致的海水变化,这种变化包括水位的升降和海水的流速以及流动方向等。而SWAN是一个波浪模型,同样的也是考虑风场和气压场条件下对波浪的影响,主要是用于模拟由于输入导致的波高、波周期和波向的变化。
这两个模型可以单独使用,即单独运行ADCIRC(模拟的就是沿岸增水和流速等变化)和单独运行SWAN(模拟的是海水产生的波浪信息)。当然也可以联合使用,也就是我们说的耦合模型ADCIRC+SWAN,换句话说就是,海水的水位和流速这些变化不仅仅是受到风场和气压场的影响,还会受到海水本身产生的波浪信息的影响,反之亦然,波浪信息除了受到风场输入的影响外,也会受到水位等信息对它产生的影响,即在运行ADCIRC+SWAN的过程中,SWAN产生的波辐射应力会修改来自ADCIRC的水位和水流,从而与SWAN相互交换,以进一步更新波辐射应力,从而达到两者耦合的效果。
2、源代码获取
ADCIRC模型的源代码需要向ADCIRC官网申请, 官网(https://adcirc.org/)首页底部明确写明了申请的条件,只需要向官方发送邮件,说明原因即可。
SWAN模型的源代码获取相对比较简单,只需要直接访问官网点击下载即可,官网网址:SWAN官网,手册及源码网址:手册及源代码
3、源代码编译
至于源码编译,是一个比较繁琐的过程,而编译教程,有很多UP主和博主,也给出了比较详细的过程,而且软件的编译也不是该模型的学习重点,即使你不会编译也不影响后期的使用,这里就不再阐述,大概流程如下:
- 确定编译器:我使用的是GNU系列的编译器(gcc gfortran g++)
- NetCDF安装、MPICH2安装、CMAKE安装
- 设置环境变量
- ADCIRC安装
最后安装成功之后就会出现以下四个程序,大家使用的时候可以把这四个程序单独拿出来和其他输入文件(下面会讲到)放到一个文件夹里以便于使用。
而具体编译流程,大家可以参考很多大佬写的文章:
https://www.bilibili.com/read/cv22603731/?spm_id_from=333.976.0.0
https://zhuanlan.zhihu.com/p/480153896
https://zhuanlan.zhihu.com/p/393743862
4、输入文件
大家需要制作的ADCIRC的输入文件有:
节点属性文件fort.13:设置了每个节点的性质,最典型的就是曼宁系数的设置
网格信息文件fort.14:包括格点信息、网格信息、边界信息
控制文件fort.15:记录了你所建立模型的参数设置
风场文件fort.22:这个很好理解,有风的输入才会产生风暴潮,对吧
4.1 节点属性文件 fort.13
该文件记录了网格中每个节点的属性,包括Tau0等参数,此外还有常见的曼宁系数等都是在该文件中设置的,可以使用官网的程序(节点属性文件制作工具)进行制作,较为方便,大致如下:
4.2 网格信息文件 fort.14
该文件生成方式有SMS软件和matlab两种,而我则是以matlab生成一个大概的文件,然后再到SMS里面进行细部的修改,matlab使用的程序是OceanMesh2D,较为简单,程序和手册可以在GitHub(https://github.com/CHLNDDEV/OceanMesh2D)获取,另外该程序需要的依赖包m_map也可以在这里(https://www.eoas.ubc.ca/~rich/map.html)获取。
然后是全球海岸线数据和水深数据,有了这两个数据,才能制作出网格文件,我使用的是GSHHS海岸线数据(GSHHS数据),而全球水深数据是GEBCO(GEBCO数据)。
将以上所有数据准备好之后就可以生成fort.14文件,格点信息、网格信息、边界信息分别对应如下:
4.3 控制文件 fort.15
此文件是运行 ADCIRC 模型所必需的,包含运行 ADCIRC 所需的大部分参数,包括坐标类型、干湿分离、运行时间步长和输入时间步长、输出文件设置等,每个参数的具体解释,可以在官网(fort.15文件官网)找到,制作出来的文件大概如下:
4.4 风场文件 fort.22
选择不同的风场文件,格式不尽相同,ADCIRC支持大概20多种风场格式,我使用的是Holland风场(NWS=8 or 308)和ERA5风场模型(NWS=5 or 305),更多的风场格式也可以查看官网(fort.22文件官网)查看,Holland风场模型的文件如下所示:
4.5 SWAN文件 fort.26 和 文件 swaninit
如果只是单独运行ADCIRC,不考虑SWAN的耦合,那么以上文件即可满足要求,但如果是做耦合模型的,就需要加入这两个文件,fort.15文件是ADCIRC模型的控制文件,而fort.26文件则是SWAN模型的控制文件,两者都会对模拟的时间段进行设置,而这个时间段需要彼此对应,不然运行的时候就会出现报错,该控制文件的制作可以参考使用手册(使用手册),fort.26如下所示:
最后将所有文件制作完成之后,与编译好的程序放到同一个文件夹下,之后在终端输出相关命令就可以成功运行了,制作好的所有文件如下:
5、运行命令
- source ~/.bashrc_adcirc #激活环境变量
- ./adcprep --np 4 --partmesh #网格文件划分,4为使用的核数
- ./adcprep --np 4 --prepall #其他文件划分
- mpirun -np 4 ./padcirc #并行运行计算
6、输出文件
运行结束之后,会输出很多相应的文件,此处列出比较重要的几个文件:
全局水深fort.63:记录了风暴潮水位信息(ADCIRC输出文件)
全局流速fort.64:记录了风暴潮水流流速信息(ADCIRC输出文件)
全局有效波高swan_HS.63:记录了波浪有效波高(SWAN输出文件)
全局平均波向swan_DIR.63:记录了波浪平均波向(SWAN输出文件)
全局波峰周期swan_TPS.63:记录了波浪波峰周期(SWAN输出文件)
以上是运行结束之后输出的所有文件,里面的大概内容,此处以fort.63为例,如下所示:
这是水位信息,其它的输出文件格式也和该文件类似,除fort.64(水流流速)和fort.74(风速)以外,至于为什么不同,大家应该都想得到,水流流速和风速是矢量,在绿色部分的数据那里,会有两列数据,分别是x方向上的数据和y方向上的数据,除此之外,其他所有信息都和输出的水位文件的格式一样。
7、数据可视化
好了,以上就是ADCIRC+SWAN耦合模型所有的流程了,后面内容就是数据可视化问题,但这部分就不进行过多的介绍了,毕竟我也不是计算机专业的,可视化操作,我只会面向复制粘贴编程,然后搞懂每一行代码的作用,最后成为自己的代码,最后画出来的图,大概就是这样,实在是难以搬上台面。
有科研问题、模型编译以及后续需求的读者
可以联系⬇⬇⬇⬇⬇⬇
闲鱼号:tb419451591
闲鱼昵称:会思考的鸣人