06-POLYMESH-TUTORIAL-POLYMESH, POLOGON_CREAT, MESH_RUN


<center>06-POLYMESH-TUTORIAL-POLYMESH+POLOGON_CREATE+MESH_RUN</center>

POLYMESH参考资料

wave-workshop-exercise-polymesh.pdf


POLYMESH内容

在这个教程练习中,我们将让你熟悉 PolyMesh的主要功能,这是一个由 A. Roland和合作者开发的软件。PolyMesh是作为 JR ShewchukTriangle网格化程序的一个 接口 interfacePolyMesh多边形 polygon为基础,其结果是生成一个网格。多边形可以用来做任何事情,从定义海岸线、细化区域……这里我们主要是按照 PolyMesh手册中的一些例子,从实验室配置开始。网格将用 TWISTparvisu…设计成以经度和纬度来读取结点位置,而不是以米为单位。

本教程并不取代手册…在那里你会发现更多的细节。相反,它被设计为对一些基本功能的快速测试。

建议将关于 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

运行POLYMESH后,在rand工作文件夹生成的部分文件

##	msh的可视化

#	使用TWIST对msh进行可视化
idl -rt=/home/jincanliu/BaiduNetdiskWorkspace/WaveModel2/work-mesh-edit/TUTORIAL_MESH_EDIT/rt_visumain.sav

IDL 的下载、安装在Prerequisites,基于 IDLTWIST的使用位于MESH-EDIT

使用TWIST对final.msh可视化

调整网格参数–EX:网格约束

Adjusting mesh parameters ——a playing with mesh constraints

EX 工作文件夹位置:TUTORIAL_POLYMESH/rand

xyz.dat:水深数据

rand.dat:定义网格所覆盖区域的 “边界多边形”

  • 对于现实生活中的示例,您将看到 海岸线多边形的定义对生成的网格有决定性的影响。
  • 您可能想要使用 粗化 coarsening选项(参见手册)或对 randinsel 文件进行一些特殊的预处理。此选项在教程 mesh create中进行了探讨。

meshin.nml:是 PolyMesh的输入文件。这是一个namelist,即名单列表,定义了所有的参数。

运行 polymesh,并对 final.msh进行可视化。

使用TWIST对final.msh可视化

要修改网格,你需要修改 meshin.nml文件并重新运行 polymeshmeshin.nml文件被分成不同的部分,第一个部分定义了文件名和基本的I/O选项。然后你会看到有一个部分 &REFINEMENT,实际上是告诉 triangle程序什么是网格三角形的目标尺寸。这使用了两个 criteria的组合:

  • DZ creteria:这是三角形内允许的 最大深度变化(米)
  • CFL creteria:我们不希望 三角形太小而影响CPU时间,这只在使用 有CFL约束的显式方案时有意义。然而,即使使用 隐式方案,CFL条件的值也应该与方案的误差有关。该计算是针对由 WAVEPERIOD定义的目标波周期进行的。详见 PolyMesh手册。

LCFL=TLDZ=F的情况下,你可以调整参数 MAX_EDGE_CFL(试试 0.5)。
LCFL=TLDZ=T时,你可以调整参数 LMINVAL
LCFL=FLDZ=T的情况下,你可以调整参数 DMAX_DZ

EX中meshin.nml中&REFINEMENT部分

LCFL=F, LDZ=FLCFL=F, LDZ=T

LCFL=T, LDZ=T

调整网格参数–EX:添加岛屿(不含网格),添加多边形(含网格)

EX 工作文件夹位置:TUTORIAL_POLYMESH/randisland

关于岛屿的数据文件 insel.dat

  • 该文件包含多个多边形,每个结点由 (longitude, latitude, depth ) 定义,每个多边形以包含 -1 结束,除了最后一个岛,以 -2结束。

关于多边形的数据文件 polygon.dat

运行 polymesh,并对 final.msh进行可视化,实现了岛屿的添加。

添加岛屿

图中没有网格的部分就是 岛屿

meshin.nml 中,您可以激活 LDIST_METHODLISLANDCOARS 并使用参数 DISTTOL 进行操作。

为了能够读取 polygon.dat数据和 meshin.nml中额外的 &REFINEMENT部分,需要激活 &GENERAL中的 LPOLY= T

第一个 &REFINEMENT部分位于 &TRIANGLEOPTIONS之前

随后的 &REFINEMENT部分位于 meshin.nml中最后的部分

激活 LPOLY后的可视化。

———————————————-

POLYGON_CREATE参考资料

wave-workshop-exercise-polygon-create.pdf

POLYGON_CREATE内容

在本教程的练习中,我们将从水深测量和海岸线数据开始,生成一个基于三角形的网格,在 WAVEWATCH III中运行。正如你在 Polymesh教程中所了解的,这意味着创建两个文件:rand.datinsel.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
    在./.bashrc中添加环境变量

    检验是否成功添加

现在可以进 ./TUTORIAL_POLYMESH,可以发现如下文件:

  • 海岸线数据

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

    海岸线数据(French riviera)

接下来是定义沿 近海边界 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 SYMRefresh:

  • 清理陆地上的点。从上面的图可以看出,陆地点(绿色部分)位于 3156之间。打开 Mesh工具箱,在 表格中,在左边的空白处点击数字 31,然后向下滚动到 56,在 56上按下 Shift键。它应该突出显示从 3156的表格部分。要删除这些点,只需点击 Del GP (Table)(在 网格编辑器的右下方)。回到主窗口 Refresh:(图中 1-34即为定义的沿近海边界的位置)

  • 主窗口 Overlays选择 outline(默认是 Coast),Refresh后,可以看到 将定义我们边界框 bounding box的多边形,它以蓝色出现:

  • 移动数字编号,使数字 1成为靠近陆地但在水中的第一个点。主窗口点击 Pick New按钮,然后点击蓝色多边形中最接近陆地的那一点(这里是 31号),然后在 Work on nodes中选择 shift contour numbersRefresh

现在,已经可以来做 Polymesh,但是为了得到一个更好的海岸线,将在海岸线上添加点。

  • 打开 Mesh工具箱,修改 DX0的值为 1 km,在 Make contour中选取 at coastline DX0Refresh

在一个被西部边界 切开的泻湖 lagoon中,有一些点会造成一些<font color='red'>问题(什么问题?)</font>,需手动把它们删除。

  • 使用主窗口中的工具来放大/缩小和移动,<font color='red'>找到网格中的坏点(什么是坏点?)</font>。放大后看到有两个多边形(<font color='red'>绿色和蓝色线条多边形?</font>)需要删除,这两个多边形的编号是 414448<font color='red'>怎么找到坏点的编号?</font>)。

  • 按照之前的方式清除坏点:

  • 清楚后,能看到图中还存在坏点(绿色部分):这些是 490493,把它们去掉:

  • Zoom out

检查多边形是否自己交叉。

  • 通过 Work on nodes中的 check for segment crossing来完成。

保存成 rand.datinsel.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

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使用的非结构化网格由三角形元素组成,但一般来说,非结构化网格也可以采用四边形、五边形、六边形等 元素

构建一个好的非结构化网格是一个耗时的过程,我们在这里只讨论一般原则。目前有很多网格生成程序可以用来构建网格,有的是相对简单的开源系统,如GmshTriangleBatTri,有的是更复杂的专有软件,如SMS

  • 目前只学了基于 Trianglepolymehs,貌似 趋势分析那篇文章用的是 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来探索沿着岛屿海岸线不断提高的分辨率。


Author: Jincan
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Jincan !
  TOC