静压模型SWASH学习(9)——平底水槽高频驻波算例(Standing short wave in closed basin)
平底水槽高频驻波算例(Standing short wave in closed basin)
- 算例简介
- 模型配置
- 网格及参数设置
- 网格设置
- 初始条件与边界条件
- 数值求解方法
- 输出设置
- 模拟时间
- 模拟结果
SWASH是由Delft大学开发,用于模拟非静压条件下的水动力/波浪运动的数值模型。
与模型原理相关的内容详见以下论文:
- SWASH: An operational public domain code for simulating wave fields and rapidly varied flows in coastal waters (Marcel Zijlema, Guus Stelling, Pieter Smit)1
- Computation of free surface waves in coastal waters with SWASH on unstructured grids (Marcel Zijlema)2
- An accurate and efficient finite-difference algorithm for non-hydrostatic free-surface flow with application to wave propagation3
其中,第2篇论文是描述了SWASH模型的最新功能,即可支持非结构化三角形网格。不过,本blog提及的算法、模型设置以结构化网格版本的swash模型为对象,暂不涉及非机构化网格。
注:有些指令、参数已经在前面的博客中进行讲解了,故之后不会再详细说明;相关内容详见之前的博文。也希望大家能留言,来相互交流!
SWASH主页:https://swash.sourceforge.io/
模型手册:https://swash.sourceforge.io/online_doc/swashuse/swashuse.html
算例简介
本算例模拟了平底水槽中高频驻波的运动,其中涉及了显著的非静压效应。本算例可用于检验非静压模型模拟短波运动的能力,同时也可检测模型的质量、能量守恒特性。
模型输入文件及相关数据可下载于【传送门】。若要运行此算例,请将此下载的压缩文件解压,将含有.sws、 .bot和 .bnd后缀的所有文件解压至swash.exe所在的目录下。
模型配置
本算例的模型区域为一个垂向二维的平底水槽,其水平长度 L x L_x Lx = 20.0 m。初始时刻的水深为 h h h ,初始水位分布满足:
η ( x ) = A c o s ( k x ) \eta(x) = Acos(kx) η(x)=Acos(kx)
式中, A A A = 0.1 m表示振幅, k = 2 π / L k=2\pi/L k=2π/L表示波数,波长L与水槽长度一致。此外,模型的左右两侧均为光滑的垂直壁面,底部为光滑的壁面,且本算例中的水体粘度为零。
为测试不同网格设置的模型效果,本算例配置了如下三种垂向网格:
工况编号 | 水深/m | Δx/m | Nσ | 备注 |
---|---|---|---|---|
1 | 10 | 1.0 | 2 | 传统交错网格,网格垂向均匀 |
2 | 10 | 1.0 | 10 | 传统交错网格,网格垂向均匀 |
3 | 100 | 1.0 | 13 | Kellor-Box网格,网格比例分别为0.05, 0.25, 0.7 |
网格及参数设置
网格设置
模型的计算域及水平网格通过配置文件.sws中的如下命令指定:
MODE DYN ONEDCGRID 0. 0. 0. 20. 0. 20 0
上述的第一行命令指定了模型采用了垂向二维计算域,而CGRID指令指定了计算域的水平长度为20.0 m,且水平上被均分为20个网格。
对于模型的垂向网格设置,三个工况对应的控制指令如下:
- 工况1:a13stw01.sws(垂向上有2个均匀的σ层)
VERT 2
- 工况2:a13stw02.sws(垂向上有10个均匀的σ层)
VERT 10
- 工况3:a13stw03.sws(垂向上有3个σ层,从上至下的网格比例分别为5%,25%和70%)
VERT 3 5. 25. 70.
此外,计算域的底高程(静止水深)通过INPGRID BOTTOM和READINP BOTTOM指令读取。工况1和2对应的指令如下所示(水深为10.0 m,READINP中的fac = 10.0):
INPGRID BOTTOM 0. 0. 0. 1 0 20. 1.
READINP BOTTOM 10. 'a13stwav.bot' 1 0 FREE
工况3对应的指令如下所示(水深为100.0 m,READINP中的fac = 100.0):
INPGRID BOTTOM 0. 0. 0. 1 0 20. 1.
READINP BOTTOM 100. 'a13stwav.bot' 1 0 FREE
初始条件与边界条件
模型的初始流速为零,初始水位则通过如下指令从a13stwav.wlv文件中读取:
INPGRID WLEV 0. 0. 0. 20 0 1. 1.
READINP WLEV 1. 'a13stwav.wlv' 1 0 FREE
由于模型的左右边界都是默认的光滑垂直壁面(封闭边界),因此无需额外通过指令指定左右边界。而模型的底部摩阻力则通过如下指令设置:
FRIC CONST 0.
VISC 0.
即底部为光滑壁面,水体粘度为零。
数值求解方法
对于工况1、2,模型设置的指令如下:
NONHYDrostaticDISCRET UPW NONE
DISCRET UPW UMOM V NONE
DISCRET CORRDEP NONE
首先,模型采用了非静压模拟(NONHYDrostatic)的方法,并采用了传统(Standard)的交错网格设置。
对于水平流速,模型采用中心差分格式(UPW NONE)进行计算;对于垂向流速,模型也采用中心差分格式(UPW UMOM V NONE)进行计算;此外,模型中的水位和水深值将基于流速计算点进行中心差分(DISCRET CORRDEP NONE)。
输出设置
模型中首先输出了测点x = 18.0m处的水位变化,输出的时间间隔为0.01 s;对应指令如下:
GROUP 'GAUGE' 18 18 1 1
TABLE 'GAUGE' NOHEAD 'a13stw01.tbl' TSEC WATL OUTPUT 000000.000 0.01 SEC
此外,在工况2的模拟中,模型中还输出了测点x = 18.0m处的流速的垂向分布,输出的时间间隔为0.01 s;对应指令如下:
GROUP 'GAUGE' 18 18 1 1
TABLE 'GAUGE' NOHEAD 'a13stw02.tbl' TSEC WATL OUTPUT 000000.000 0.01 SEC
TABLE 'GAUGE' HEAD 'a13stw02.tab' TSEC ZK VELK VZ OUTPUT 000000.000 0.01 SEC
模拟时间
对于工况1和3,垂向网格数较少,模型的时间步长可设置为0.01 s。对应的指令如下所示:
TEST 1,0
COMPUTE 000000.000 0.01 SEC 000030.000
STOP
对于工况2,垂向网格数较多,在此将时间步长缩短至0.002 s。对应的指令如下所示:
TEST 1,0
COMPUTE 000000.000 0.002 SEC 000030.000
STOP
模拟结果
首先,将参数文件a13stw01.sws、a13stw02.sws和a13stw03.sws,以及地形数据文件a13stwav.bot 和初始水位a13stwav.wlv复制到swash.exe的同一目录下。并在这个目录下,用swashrun指令依次运行a13stw01、a13stw02和a13stw03。得到结果后,运行数据包中的mkplot.m脚本将数据结果可视化。
测点x = 18.0 m处的水位过程如下图所示:
测点x = 18.0 m处的流速的垂向分布如下图所示(工况2):
图中圆圈数据表示解析解所得流速分布。解析解所得流速分布数据也在数据包中,其文件格式为.dat。
https://doi.org/10.1016/j.coastaleng.2011.05.015 ↩︎
https://doi.org/10.1016/j.compfluid.2020.104751 ↩︎
https://doi.org/10.1002/fld.595 ↩︎