当前位置: 首页 > news >正文

静压模型SWASH学习(9)——平底水槽高频驻波算例(Standing short wave in closed basin)

平底水槽高频驻波算例(Standing short wave in closed basin)

  • 算例简介
  • 模型配置
  • 网格及参数设置
    • 网格设置
    • 初始条件与边界条件
    • 数值求解方法
    • 输出设置
  • 模拟时间
  • 模拟结果

SWASH是由Delft大学开发,用于模拟非静压条件下的水动力/波浪运动的数值模型。
与模型原理相关的内容详见以下论文:

  1. SWASH: An operational public domain code for simulating wave fields and rapidly varied flows in coastal waters (Marcel Zijlema, Guus Stelling, Pieter Smit)1
  2. Computation of free surface waves in coastal waters with SWASH on unstructured grids (Marcel Zijlema)2
  3. 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/mNσ备注
1101.02传统交错网格,网格垂向均匀
2101.010传统交错网格,网格垂向均匀
31001.013Kellor-Box网格,网格比例分别为0.05, 0.25, 0.7

网格及参数设置

网格设置

模型的计算域及水平网格通过配置文件.sws中的如下命令指定:

MODE DYN ONEDCGRID 0. 0. 0. 20. 0. 20 0

上述的第一行命令指定了模型采用了垂向二维计算域,而CGRID指令指定了计算域的水平长度为20.0 m,且水平上被均分为20个网格。
对于模型的垂向网格设置,三个工况对应的控制指令如下:

  1. 工况1:a13stw01.sws(垂向上有2个均匀的σ层)
VERT 2
  1. 工况2:a13stw02.sws(垂向上有10个均匀的σ层)
VERT 10
  1. 工况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。


  1. https://doi.org/10.1016/j.coastaleng.2011.05.015 ↩︎

  2. https://doi.org/10.1016/j.compfluid.2020.104751 ↩︎

  3. https://doi.org/10.1002/fld.595 ↩︎

相关文章:

  • C++ 算法(12):数组参数传递详解,值传递、指针传递与引用传递
  • ARM汇编的LDM和STM指令
  • ubuntu 交叉编译 macOS 库, 使用 osxcross 搭建 docker 编译 OS X 库
  • Vue el-checkbox 虚拟滚动解决多选框全选卡顿问题 - 高性能处理大数据量选项列表
  • 网络开发基础(游戏)之 粘包分包
  • N8N 官方 MCP 节点实战指南:AI 驱动下的多工具协同应用场景全解析
  • Java—— 正则表达式
  • 算法之回溯法
  • C++初阶——string的使用(上)
  • 词语关系图谱模型
  • QGIS实用功能:加载天地图与下载指定区域遥感影像
  • Python实例题:Python3OpenCV视频转字符动画
  • [Java · 铢积寸累] 基础函数 — 生成随机数 - Math.random() 详解
  • G1 人形机器人硬件构成与接口
  • AI算子开发是什么
  • Agent系统工程实践:Langchain-Chatchat框架定制与优化
  • PostgreSQL认证培训推荐机构
  • 关于el-table可展开行实现懒加载的方案
  • ​​电商系统用户需求报告(示例)
  • Java基础复习(JavaSE进阶)第六章 IO流体系
  • 北朝时期的甲胄
  • 从神舟五号到神舟二十号,每次任务标识藏着哪些逐梦星辰的密码
  • 黎巴嫩“伊斯兰集团”组织证实其高级成员在以军空袭中丧生
  • 中国与柬埔寨签署多领域合作文件
  • 两代“楚王”世纪同框,楚王熊悍鼎将回安徽展出
  • 这5种走路姿势,藏着疾病秘密,第2种你可能也有