波浪模型SWAN学习(1)——模型编译与波浪折射模拟(Test of the refraction formulation)

SWAN模型编译与波浪折射模拟(Test of the refraction formulation)

  • 编译过程
  • 算例简介
  • 参数文件
    • 文件头(HEADING)
    • 计算区域和网格
    • 地形数据
    • 边界条件
    • 物理模块设置
    • 输出设置
    • 执行参数
  • 模拟结果

由于工作原因,最近开始接触波浪模型,所以学习一下SWAN,顺便做个记录、

SWAN是由Delft大学开发的第三代波浪模型,它基于动谱平衡方程,考虑了波-波的非线性作用,对近海、
与模型原理相关的内容详见以下论文:

  1. 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
  2. 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)结果与对应的解析解结果,如下图所示。图中的红色圆圈表示模拟值,黑线表示解析值。解析解数据在输入文件压缩包中。
在这里插入图片描述


  1. https://doi.org/10.1029/98JC02622 ↩︎

  2. https://doi.org/10.1029/1998JC900123 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918893.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更换cmd背景图片

打开cmd 右击顶部,选择设置选择命令提示符,外观选择背景图像路径更改成自己的图片,然后右下角保存 设置成功

基于RobustVideoMatting(RVM)进行视频人像分割(torch、onnx版本)

发表时间:2021年8月25日 项目地址:https://peterl1n.github.io/RobustVideoMatting/ 论文阅读:https://hpg123.blog.csdn.net/article/details/134409222 RVM是字节团队开源的一个实时人像分割模型,基于LSTMConv实现,…

强制从不抱怨环境。

警世俗语:强者逆袭心法(句句穿心)环境是泥潭?那就让它开出金莲! —— 抱怨是弱者的裹脚布,行动是强者的登天梯。烂泥里也能种出摇钱树,关键看你敢不敢下手挖!老天爷发牌烂&#xff1…

MC0439符号统计

码蹄集OJ-符号统计 MC0439・符号统计 难度:黄金 时间限制:1 秒 占用内存:256 M 收藏 报错 在华容道放曹的紧张时刻,小码哥接到了一个看似微不足道却至关重要的任务:解读一条仅由小写英文字母组成的神秘字符串 s&#…

Android Jetpack 系列(五)Room 本地数据库实战详解

1. 简介 在需要轻量级本地持久化的场景中,DataStore 是一个理想的选择(详见《Android Jetpack 系列(四)DataStore 全面解析与实践》)。但当你面临如下需求时,本地数据库便显得尤为重要: 复杂的…

C语言实现类似C#的格式化输出

在C#中,格式化输出可以使用索引占位符以及复合格式的占位符,可以不用关心后面参数是什么类型,使用起来非常方便,如下简单的示例: Console.WriteLine("{2} {1} {0} {{{2}}}", "Hello, World!", 1,…

一人公司方法论

** 一人公司方法论 ** 那什么是一人公司? 字面的理解就是一个人运营的公司,但实际上它指代的是比较少的人运营的小公司,一般来说 1 ~ 3 个人运营的公司,也可以把它放到一人公司的范围以内。其他一些形式,比如说一个人再…

Ceph CSI 镜像删除流程与 Trash 机制失效问题分析文档

#作者:闫乾苓 文章目录一、问题背景二、实际行为三、源码分析四、分析与推论五、期望行为与建议优化六、结论一、问题背景 在生产环境中,为避免因误操作导致的永久数据丢失,Ceph RBD 提供了 Trash 功能,允许将镜像“软删除”至回…

.NET Framework 3.5 不原生支持PreApplicationStartMethod特性

.NET Framework 3.5 不原生支持PreApplicationStartMethod特性。这个特性是在 .NET Framework 4.0 中引入的,用于在应用程序启动早期执行初始化逻辑。 在.NET 3.5 中,如果你需要实现类似的 “应用启动时自动注册模块” 功能,需要通过手动配置…

智能巡检技术浅析

从机载智能硬件到深度学习算法,从实时边缘计算到数字孪生平台,无人机AI智能巡检通过多模态感知、自主决策和持续进化,实现从"被动检查"到"主动预防"的跨越式发展。机载智能硬件边缘计算与机载AI芯片当代先进巡检无人机已…

【图像算法 - 11】基于深度学习 YOLO 与 ByteTrack 的目标检测与多目标跟踪系统(系统设计 + 算法实现 + 代码详解 + 扩展调优)

前言 详细视频介绍 【图像算法 - 11】基于深度学习 YOLO 与 ByteTrack 的目标检测与多目标跟踪系统(系统设计 算法实现 代码详解 扩展调优)在计算机视觉应用中,目标检测与多目标跟踪的结合是实现智能视频分析的关键。本文基于 YOLO 检测模…

AI加持下的智能路由监控:Amazon VPC Direct Connect实战指南

> 一次流量突增引发的生产事故,如何催生出融合流日志、机器学习与自动化告警的智能监控体系 深夜2点,电商平台运维负责人李明的手机疯狂报警——北美用户下单量断崖式下跌。他紧急登录系统,发现跨境专线延迟飙升至2000ms。**经过3小时的排查**,罪魁祸首竟是新部署的CDN…

具身智能竞速时刻,百度百舸提供全栈加速方案

2025年,全球具身智能赛道迎来快速发展期,技术方向日益清晰。每一家企业都面临着同样的核心命题:如何将前沿的模型能力,转化为在真实世界各类场景中可规模化应用落地的机器人产品?这背后,是研发团队对模型迭…

JavaScript 压缩与混淆实战:Terser 命令行详解

使用 Terser 压缩 JavaScript 文件(基础 现代语法问题解决) 在前端开发中,随着业务复杂度增加,JavaScript 文件体积越来越大。 文件大带来的问题: 加载慢:文件越大,浏览器下载和解析时间越长…

【数据结构初阶】--排序(三):冒泡排序、快速排序

😘个人主页:Cx330❀ 👀个人简介:一个正在努力奋斗逆天改命的二本觉悟生 📖个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》 前言:在上篇博客的学习中,我们掌握了直接选择排序…

名词概念:什么是尾部误差?

“尾部误差”就是指误差分布在两端的那一小撮、但数值特别大的误差——也就是离中心(均值/中位数)很远的“极端样本”的误差。对应统计学里的“分布尾部”(tails)。通俗点:大多数样本误差都很小,但总会有少…

记对外国某服务器的内网渗透

本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记 文章目录前文链接前言上线CS上线rdp后渗透信息收集SMB Pth攻击权限维持魔幻上线提权关Windows Defenderend前文链接 WAMP/DVWA/sqli-labs 搭建burpsuite工具抓包及Intruder暴力破解的使用目录扫描…

速卖通平台关键字搜索商品列表列表接口实现指南:从接口分析到代码落地

在跨境电商开发中,速卖通平台的商品数据获取是许多开发者关注的焦点。本文将详细介绍如何实现速卖通关键字搜索商品列表接口,涵盖接口请求参数分析、签名机制、分页处理及完整代码实现,帮助开发者快速对接速卖通开放平台。一、接口基本信息速…

UE UDP通信

1.确保工程为C工程,在项目工程的xx.Build.cs中加入Networking和Sockets模块。PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Networking", "Socke…

JavaScript 逻辑运算符与实战案例:从原理到落地

JavaScript 中的逻辑运算符不仅是条件判断的核心,还能通过“短路特性”简化代码;结合 DOM 操作的实战案例,更能体现其灵活性。本文整理了逻辑运算符的个人理解、优先级规则,以及 4 个高频实战需求的实现方案,附个人思路…