波浪模型SWAN学习(1)——模型编译与波浪折射模拟(Test of the refraction formulation)
SWAN模型编译与波浪折射模拟(Test of the refraction formulation)
- 编译过程
- 算例简介
- 参数文件
- 文件头(HEADING)
- 计算区域和网格
- 地形数据
- 边界条件
- 物理模块设置
- 输出设置
- 执行参数
- 模拟结果
由于工作原因,最近开始接触波浪模型,所以学习一下SWAN,顺便做个记录、
SWAN是由Delft大学开发的第三代波浪模型,它基于动谱平衡方程,考虑了波-波的非线性作用,对近海、
与模型原理相关的内容详见以下论文:
- Booij, N., R.C. Ris and L.H. Holthuijsen, 1999, A third-generation wave model for coastal regions, Part I, Model description and validation, J. Geophys. Res. C4, 104, 7649-7666.1
- Ris, R.C., N. Booij and L.H. Holthuijsen, 1999, A third-generation wave model for coastal regions, Part II, Verification, J. Geophys. Res. C4, 104, 7667-7681.2
目前,SWAN模型支持结构化矩形网格、曲边矩形网格、非结构化三角形网格。本人暂时从简单的结构化矩形网格开始学习。
希望大家能留言,来相互交流!
SWAN主页:https://swanmodel.sourceforge.io/
用户手册:https://swanmodel.sourceforge.io/online_doc/swanuse/swanuse.html
原理手册:https://swanmodel.sourceforge.io/
编译过程
这里主要介绍SWAN模型在windows系统下WSL子系统环境中的编译过程。该过程与swash模型代码的编译过程类似(详见在windows 11的WSL上上编译SWASH模型)。
本次尝试所使用的平台是windows 11系统下的ubuntu 18.04.6 LTS子系统,代码版本为swan41.45(下载链接)。
编译代码前我们需要安装gfortran和MPI库。安装指令如下
sudo apt-get update
sudo apt-get install gcc
sudo apt-get install gfortransudo apt-get install mpich
之后,再安装编译代码所需的make工具:
sudo apt-get install make
首先,解压代码包文件,并在wsl输入指令以进入该文件夹。之后,输入make config以形成新的macro.inc文件(暂不涉及NETCDF库的运用)。
接下来,我们将通过make ser(串行)或make mpi(并行)生成可执行文件 swan.exe。
并行运行swan程序的指令格式如下:
./swanrun -input [inputfile] -mpi [n]
其中,[inputfile]表示.sws文件的名称,n表示并行的线程数。
串行运行swan程序的指令格式如下:
./swashrun -input [inputfile]
算例简介
该算例模拟了一个理想的方形区域中波浪触壁折射等过程。该算例的输入文件可在SWAN官网下载,下载连接是https://swanmodel.sourceforge.io/download/zip/refrac.tar.gz。
参数文件
参数文件或控制文件.swn包含文件头(HEADING)、输入(MODEL INPUT)和输出(OUTPUT REQUESTS)这三部分,最终以STOP指令表示结束。$ 或 ! 符号表示注释,即以 $ 或 ! 开头的行不会被读取,仅有注释作用。
其中文件头包含了算例的名称;输入部分包含了网格、初始条件、边界条件、数值方法等;输出部分定义了文件格式、输出次数等。
文件头(HEADING)
在本算例控制文件a11refr.swn中,文件头如下:
PROJ 'a11refr' 'A11'
它表示了模拟算例的名称为‘a11refr’,模拟的组次为A11。
此外,文件头部通常还包括了SET、MODE等指令,用于设置模拟参数等,本例中暂不介绍,都采用默认值。值得注意的是,MODE指令设置了模拟的空间维度与运行模式,如下图所示;在默认情况下,模拟是平面二维的稳态模拟。
计算区域和网格
设置计算区域与网格的指令如下:
CGRID 0. 0. 0. 20000. 4000. 25 100 SECTOR 80. 130. 100 0.05 0.25 40
模型采用结构化的矩形网格(默认REGular),前三个参数分别为表示计算域原点的坐标及计算域与x轴正方向的夹角;在本算例中,这三个参数均为零,即计算域的长宽方向分别于x、y轴正方向平行,且计算域原点于笛卡尔坐标系原点一致。
模型在x、y方向上的长度分别为xlenc = 20000.0 m和ylenc = 4000.0 m,x、y方向上的网格数分别是25和100个。
模型并未模拟全波向(CIRcle,即模拟了0 ~ 360°方向上所有波的谱)的波浪,而只考虑了部分波向上的波浪(SECtor);在本算例中,模型计算了80 ~ 130°方向上的波浪,并将该方向均分了mdc = 100个小份进行离散。在频率上,模型考虑了频率范围在 0.05 ~ 0.25 Hz的波浪,msc = 40 表示频域上离散的网格数。
值得注意的是,除频域外,其余部分的离散方式都采用均匀离散,而频域上采用等比数列的方式离散。以本算例为例,离散后的频域为:
0.05000.05210.05420.05640.05870.06110.06370.06630.06900.07180.07480.07780.08100.08440.08780.09140.09520.09910.10320.10740.11180.11640.12120.12610.13130.13670.14230.14820.15430.16060.16720.17400.18120.18860.19640.20440.21280.22160.23070.24010.2500
地形数据
地形数据通过以下指令读入:
INPGRID BOTTOM 0. 0. 0. 1 1 20000. 4000.
READINP BOTTOM 1. 'a11refr.bot' 1 0 FREE
首先通过INPGRID定义了一个地形数据的网格,这个网格区域的原点也是(0.0, 0.0),并且它的长度方向与x轴的夹角为0;地形数据在x、y方向上的范围分别有20000 m、4000 m。
数据文件通过READINP指令从a11refr.bot文件中读入,读入数据都变成原数据的fac = 1.0倍,数据文件中不包含heading(nhedf = 0)。此外,数据格式的形式为第一类(idla = 1)。
结合.bot文件中的数据可知,本算例的地形如下图所示。
边界条件
设置模型边界条件的指令如下:
BOU SHAPE GAUSS 0.01 PEAK DSPR POWER
BOUN SIDE S CCW CON PAR 1. 10. 120. 500.
设置模型边界需要两步。首先,指定边界处的波浪谱,如下所示。本算例选择了高斯谱(GAUSS),并指定了其中的参数σfr=0.01\sigma_{fr}=0.01σfr=0.01,指定谱峰周期为波浪的特征周期,入射波在波向上的分布采用POWER形式。在此情况下,入射波的方向在一定范围内呈摆动的状态。
第二步是设置设置边界条件的添加位置,如下图所示。在本算例中,边界被添加到南边界上;边界处的波浪参数设置为恒定状态,并指定了特征波高为1.0 m,谱峰周期为10.0 s,谱峰波浪的方向为120°,POWER模式中的系数值m = 500。
物理模块设置
OFF QUAD
OFF BREA
OFF WCAP
本算例关闭了三个模块,即不考虑四波相互作用(QUAD)、不考虑水深变化所致波浪破碎(BREA)、 不考虑白浪耗散(WCAP)。
输出设置
CURVE 'CTA11' 10000. 0. 100 10000. 4000.
TABLE 'CTA11' HEAD DIST HS TM01 DIR DEP RTP DSPR
TABLE 'CTA11' NOHEAD 'a11ref01.tab' DIST HS DIR DEP RTP
本次模拟将输出一个a11ref01.tab文件,该文件将输出在结束时刻,线段(10000,0) - (10000, 4000)上的101个100等分点上的物理量。这些物理量包含与(10000,0)的距离、特征波高、平均波周期(绝对)、平均波向、水深、峰值波高(相对值),共六列数据。
POINTS 'loc' FILE 'a11refr.loc'
SPEC 'loc' SPEC1D 'a11ref01.spc'
TABLE 'loc' HEAD 'a11ref01.tbl' HS RTP TM01 TM02 FSPR
本次模拟还将输出一系列点上物理量的时间序列,这些点的坐标详见a11refr.loc文件。输出数据包括一个一维的谱数据文件a11ref01.spc、一个数据列表文件a11ref01.tbl,文件中包含了物理量有特征波高、峰值波高、平均波周期(基于波能谱)、平均波周期(基于上跨零点)、无量纲的频谱范围宽度。
执行参数
TEST 1,0
COMPUTE
STOP
由于本算例是恒定条件运行,因此没有设置起止时间、时间步长等参数,仅写入COMPUTE指令即可。
模拟结果
以下对比了模拟所得特征波高(Hs)、平均波向(Dir)结果与对应的解析解结果,如下图所示。图中的红色圆圈表示模拟值,黑线表示解析值。解析解数据在输入文件压缩包中。
https://doi.org/10.1029/98JC02622 ↩︎
https://doi.org/10.1029/1998JC900123 ↩︎