<center>
06-POLYMESH-TUTORIAL-POLYMESH+POLOGON_CREATE+MESH_RUN</center>
POLYMESH参考资料
wave-workshop-exercise-polymesh.pdf
;
- 是
COURS/WAVES_SHORT_COURSE/TUTORIALS/TUTORIAL_POLYMESH
里面的内容;TUTORIALS
目录的链接: https://pan.baidu.com/s/1S4qGSGGyJizdSAeFIerewA 密码: jpi1- TUTORIAL 是会更新的,关于 2019 版本的;
POLYMESH内容
在这个教程练习中,我们将让你熟悉 PolyMesh
的主要功能,这是一个由 A. Roland
和合作者开发的软件。PolyMesh
是作为 JR Shewchuk
的 Triangle
网格化程序的一个 接口 interface
。PolyMesh
以 多边形 polygon
为基础,其结果是生成一个网格。多边形可以用来做任何事情,从定义海岸线、细化区域……这里我们主要是按照 PolyMesh
手册中的一些例子,从实验室配置开始。网格将用 TWIST
和 parvisu
…设计成以经度和纬度来读取结点位置,而不是以米为单位。
本教程并不取代手册…在那里你会发现更多的细节。相反,它被设计为对一些基本功能的快速测试。
建议将关于
PolyMesh
的调整网格参数的例子全放在这里,进行归纳。
手册
中的内容;use_and_tricks_guide
中的内容;
POLYMESH工作目录
创建一个 POLYMESH 工作目录,假如为 work-polymesh
,在目录下打开终端,输入以下命令
cp -r $COURS/WAVES-SHORT-COURSE/TUTORIALS/TUTORIAL_POLYMESH .
现在可以进 ./TUTORIAL_POLYMESH
,可以发现如下文件:
POLYMESH安装
具体 PolyMesh
的下载、安装和编译见手册 ,完成编译后生成的 可执行文件
会被用到。
POLYMESH的运行,msh文件的可视化
以 TUTORIAL_POLYMESH/rand
的例子为例。
## POLYMESH的运行
# 1.进入TUTORIAL_POLYMESH中的rand工作文件夹,rand工作文件夹有以下输入数据:
# xyz.dat :水深数据
# rand.dat :定义网格所覆盖区域的 "边界多边形"
# meshin.nml :是PolyMesh的输入文件。这是一个namelist,即名单列表,定义了所有的参数。
cd ./TUTORIAL_POLYMESH/rand
# 2.用生成的可执行文件,运行POLYMESH
# polymesh
# (or ~/bin/polymesh if ~/bin is not in your $PATH variable )
~/bin/polymesh
## msh的可视化
# 使用TWIST对msh进行可视化
idl -rt=/home/jincanliu/BaiduNetdiskWorkspace/WaveModel2/work-mesh-edit/TUTORIAL_MESH_EDIT/rt_visumain.sav
IDL
的下载、安装在Prerequisites,基于IDL
的TWIST
的使用位于MESH-EDIT;
调整网格参数–EX:网格约束
Adjusting mesh parameters ——a playing with mesh constraints
EX 工作文件夹位置:TUTORIAL_POLYMESH/rand
xyz.dat
:水深数据
rand.dat
:定义网格所覆盖区域的 “边界多边形”
- 对于现实生活中的示例,您将看到
海岸线多边形
的定义对生成的网格有决定性的影响。- 您可能想要使用
粗化 coarsening
选项(参见手册)或对rand
和insel
文件进行一些特殊的预处理。此选项在教程mesh create
中进行了探讨。
meshin.nml
:是PolyMesh
的输入文件。这是一个namelist,即名单列表,定义了所有的参数。
运行 polymesh
,并对 final.msh
进行可视化。
要修改网格,你需要修改 meshin.nml
文件并重新运行 polymesh
。meshin.nml
文件被分成不同的部分,第一个部分定义了文件名和基本的I/O选项。然后你会看到有一个部分 &REFINEMENT
,实际上是告诉 triangle
程序什么是网格三角形的目标尺寸。这使用了两个 criteria
的组合:
DZ creteria
:这是三角形内允许的最大深度变化(米)
。CFL creteria
:我们不希望三角形太小
而影响CPU时间,这只在使用有CFL约束的显式方案
时有意义。然而,即使使用隐式方案
,CFL条件的值也应该与方案的误差有关。该计算是针对由WAVEPERIOD
定义的目标波周期进行的。详见PolyMesh
手册。
在 LCFL=T
和 LDZ=F
的情况下,你可以调整参数 MAX_EDGE_CFL
(试试 0.5
)。
在 LCFL=T
和 LDZ=T
时,你可以调整参数 LMINVAL
。
在 LCFL=F
和 LDZ=T
的情况下,你可以调整参数 DMAX_DZ
。
调整网格参数–EX:添加岛屿(不含网格),添加多边形(含网格)
EX 工作文件夹位置:TUTORIAL_POLYMESH/randisland
关于岛屿的数据文件
insel.dat
;
- 该文件包含多个多边形,每个结点由 (longitude, latitude, depth ) 定义,每个多边形以包含
-1
结束,除了最后一个岛,以-2
结束。关于多边形的数据文件
polygon.dat
;
运行 polymesh
,并对 final.msh
进行可视化,实现了岛屿的添加。
图中没有网格的部分就是
岛屿
;在
meshin.nml
中,您可以激活LDIST_METHOD
和LISLANDCOARS
并使用参数DISTTOL
进行操作。
为了能够读取 polygon.dat
数据和 meshin.nml
中额外的 &REFINEMENT
部分,需要激活 &GENERAL
中的 LPOLY= T
。
第一个
&REFINEMENT
部分位于&TRIANGLEOPTIONS
之前
随后的
&REFINEMENT
部分位于meshin.nml
中最后的部分
激活 LPOLY
后的可视化。
———————————————-
POLYGON_CREATE参考资料
wave-workshop-exercise-polygon-create.pdf
;
- 是
COURS/WAVES_SHORT_COURSE/TUTORIALS/TUTORIAL_POLYGON_CREATE
里面的内容;TUTORIALS
目录的链接: https://pan.baidu.com/s/1S4qGSGGyJizdSAeFIerewA 密码: jpi1- TUTORIAL 是会更新的,关于 2019 版本的;
POLYGON_CREATE内容
在本教程的练习中,我们将从水深测量和海岸线数据开始,生成一个基于三角形的网格,在 WAVEWATCH III
中运行。正如你在 Polymesh
教程中所了解的,这意味着创建两个文件:rand.dat
和 insel.dat
,其中包含构成外部边界和岛屿的多边形列表。你可以用很多方法来做。这里我们将使用 TWIST IDL
工具。本文件与 wiki页面
( http://tinyurl.com/w3wiki/En:idl_tool:contour_and_islands_for_polymesh)上的例子和步骤一致。
- 打不开
wiki页面
;
POLYGON_CREATE工作目录
创建一个 POLYGON_CREATE 工作目录,假如为 work-polygon-create
,在目录下打开终端,输入以下命令
cp -r $COURS/WAVES-SHORT-COURSE/TUTORIALS/TUTORIAL_POLYGON_CREATE .
cd ./TUTORIAL_POLYGON_CREATE
ln -sf $WAVE_DATA/SHORELINE/france_edited.line .
ubuntu
添加环境变量$COURS
和$WAVE_DATA
;
现在可以进 ./TUTORIAL_POLYMESH
,可以发现如下文件:
海岸线数据
你还需要一些海岸线数据。默认情况下,它可以是夏威夷大学的
GSHHS海岸线
(Wessel and Smith 1996)。但它不是很准确。其他基于
planet.OSM
的公共数据源通过openstreetmap
提供陆地多边形,这些数据非常好,它们被用于bathy emodnet
产品,我们也将其用于我们新的欧洲非结构化网格。
Openstreetmap
链接:https://osmdata.openstreetmap.de/data/land-polygons.html。在这里,我们将使用我们服务器上的
法国海岸线的文件
:ftp://ftp.ifremer.fr/ifremer/ww3/COURS/WAVE_DATA/SHORELINE/
EX:生成rand.dat和insel.dat
EX 工作文件夹位置:work-polygon-create/TUTORIAL_POLYGON_CREATE
水深日志文件
PACA.log
应该包含以下信息——只有第一行是强制性 mandatory
的:
TWIST
读取并绘制水深日志文件。
Read file
选取bathy log file
,加载PACA.log
;
Maps
选取Grid+Topo
;
TWIST
读取并绘制海岸线数据。
加载项
Read file
选取*.line coastline
,加载france_edited.line
;
Refresh
:
接下来是定义沿 近海边界 offshore boundary
的位置:
打开
Mesh
工具箱;在
Work on nodes
中选择Initialize to zero
;在
DX1
中为近海边界
设置一个目标间距值,例如10.00(公里)
;在
Work on nodes
,选择Force open contour (DX1 in km)
:这比Add open contour (DX1 in km)
快得多…因为它不检查点是在陆地还是海洋…这意味着我们将不得不手工清理陆地上的点;返回
主窗口
,在Overlays 覆盖物
中选取GP #
,默认是NO SYM
,Refresh
:清理陆地上的点。从上面的图可以看出,陆地点(绿色部分)位于
31
和56
之间。打开Mesh
工具箱,在表格
中,在左边的空白处点击数字31
,然后向下滚动到56
,在56
上按下Shift
键。它应该突出显示从31
到56
的表格部分。要删除这些点,只需点击Del GP (Table)
(在网格编辑器
的右下方)。回到主窗口Refresh
:(图中1-34
即为定义的沿近海边界的位置)主窗口
Overlays
选择outline
(默认是Coast
),Refresh
后,可以看到将定义我们边界框 bounding box
的多边形,它以蓝色出现:移动数字编号,使数字
1
成为靠近陆地但在水中的第一个点。主窗口点击Pick New
按钮,然后点击蓝色多边形中最接近陆地的那一点(这里是31
号),然后在Work on nodes
中选择shift contour numbers
,Refresh
:
现在,已经可以来做 Polymesh
,但是为了得到一个更好的海岸线,将在海岸线上添加点。
打开
Mesh
工具箱,修改DX0
的值为1 km
,在Make contour
中选取at coastline DX0
,Refresh
:
在一个被西部边界 切开的泻湖 lagoon
中,有一些点会造成一些<font color='red'>
问题(什么问题?)</font>
,需手动把它们删除。
使用主窗口中的工具来放大/缩小和移动,
<font color='red'>
找到网格中的坏点(什么是坏点?)</font>
。放大后看到有两个多边形(<font color='red'>
绿色和蓝色线条多边形?</font>
)需要删除,这两个多边形的编号是414
到448
(<font color='red'>
怎么找到坏点的编号?</font>
)。按照之前的方式清除坏点:
清楚后,能看到图中还存在坏点(
绿色部分
):这些是490
到493
,把它们去掉:
Zoom out
:
检查多边形是否自己交叉。
- 通过
Work on nodes
中的check for segment crossing
来完成。
保存成 rand.dat
和 insel.dat
文件。
- 在
Mesh
工具箱,选择save file
中的polymesh rand and insel
,会在打开rt_visumain.sav
的目录下创建文件。
运行 polymesh
,进行可视化。
~/bin/polymesh
,得到sorted.msh
;修改
sorted.msh
文件中733行,数字从1384变成1464(这是个bug);(<font color='red'>
我没看到这个bug,找不出来</font>
)
TWIST
可视化:
技巧提示:如果你想把一个 多边形一分为二
,你首先需要知道地图上的结点号(#nb),它应该是新多边形的起点,然后打开网格编辑器,在表格中定义这个结点的轮廓值为-1。
———————————————-
MESH_RUN参考资料
wave-workshop-exercise-mesh-run.pdf
;
- 是
COURS/WAVES_SHORT_COURSE/TUTORIALS/TUTORIAL_MESH_RUN
里面的内容;TUTORIALS
目录的链接: https://pan.baidu.com/s/1S4qGSGGyJizdSAeFIerewA 密码: jpi1- TUTORIAL 是会更新的,关于 2019 版本的;
MESH_RUN内容
在这个教程练习中,我们将使用 WW3
的非结构化网格模式构建一个 后报模拟 handcast simulation
。涵盖的主题是 非结构化网格的生成
和 非结构化模型运行
的设置,包括沿海应用的 近海波浪边界条件
的指定。
MESH_RUN工作目录
创建一个 MESH_RUN 工作目录,假如为 work-mesh-run
,在目录下打开终端,输入以下命令
cp -r $COURS/WAVES-SHORT-COURSE/TUTORIALS/TUTORIAL_MESH_RUN .
现在可以进 ./TUTORIAL_MESH_RUN
,在 data
文件夹可以发现如下文件:
非结构网格的定义+MATLAB可视化msh文件和nc文件(附录)
这个模型配置相对于常规网格选项的主要区别在于非结构化网格文件 *.msh
的存在。由于这种网格没有像常规网格那样的规则结构,因此需要明确定义 网格点(称为结点 nodes)
和它们的 连接(称为元素 elements)
。WW3
使用的非结构化网格由三角形元素组成,但一般来说,非结构化网格也可以采用四边形、五边形、六边形等 元素
。
构建一个好的非结构化网格是一个耗时的过程,我们在这里只讨论一般原则。目前有很多网格生成程序可以用来构建网格,有的是相对简单的开源系统,如Gmsh、Triangle、BatTri,有的是更复杂的专有软件,如SMS。
- 目前只学了基于
Triangle
的polymehs
,貌似趋势分析那篇文章
用的是SMS
;- 都提供了相关网站,可以学习;
WW3
被设计成可以使用 Gmsh
程序产生的网格格式,该程序是根据 GNU
通用公共许可证(General Public License, GPL
)的条款发布的。请参阅所附的 gmsh_manual.pdf
。
- 不知道附在了哪里…
图1展示了一个夏威夷群岛的非结构化网格。你可以通过运行 Matlab
函数 plot_gmsh.m
来制作这个图片(如需说明,请输入 help plot_gmsh
)。这个网格通过减少岛屿区域的 网格元素尺寸 grid element sizes
,准确地将岛屿包含在这个开放的海洋领域中。 使用 Matlab
的 缩放工具 zoom tool
来探索沿着岛屿海岸线不断提高的分辨率。