波浪模型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
英文地址,請注明出處:http://en.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 個高頻實戰需求的實現方案,附個人思路…