<center>
06-PolyMesh手册</center>
参考资料
PolyMesh.pdf
;(2012)
- 是
COURS/WAVES_SHORT_COURSE/TUTORIALS/TUTORIAL_POLYMESH
里面的polymesh_manual.pdf
内容;TUTORIALS
目录的链接: https://pan.baidu.com/s/1S4qGSGGyJizdSAeFIerewA 密码: jpi1- 2012年
- 链接:https://pan.baidu.com/s/13z_4lsjlfoP7WLDPfBVCeQ
提取码:7tau
–来自百度网盘超级会员V5的分享
PolyMesh2015.pdf
;(2015)
- 2015
- 下载来源于
ifremer
中polymesh_manual.pdf
;(2021-01-07下载的,2015和2012下载来源不一样)- 链接:https://pan.baidu.com/s/1SssFRYfC-YZE9bC0DZuVRg
提取码:fwwi
–来自百度网盘
内容
PolyMesh
是一个 Fortran
程序,它使用 Jonathan Richard Shewchuk
(jrs@cs.berkeley.edu)的 Triangle
网格生成器生成二维分辨率的非结构化网格。该软件可以创建一个满足若干要求的网格,特别是在边界条件方面。该软件是为 Linux
开发的,但理论上应该可以在任何一种平台上工作。
Fortran
是世界上第一个被正式采用并流传至今的高级编程语言
;(https://zh.wikipedia.org/wiki/Fortran)
Triangle
是一个二维质量网格生成器;(http://www.cs.cmu.edu/~quake/triangle.html)
PolyMesh
对边界、岛屿、多边形、结构进行预处理,并进行水深内插。此外,它还提供网格生成和不同的网格优化的可能性。PolyMesh
是由用户在执行前设置的一般 选项(option)
控制的。这个配置被存储在一个叫做 meshin.nml
的文本输入文件中。
2-安装
下载
从我们的 GIT 仓库
下载最新版本的 PolyMesh
,并将其克隆到你的 私有基础目录
中。使用 git clone polyuser@ite-solutions.de:/home/git/polymesh
命令。<img src="https://raw.githubusercontent.com/Liu-Jincan/PicGo/main/img/20220107175909.png" alt=" " style="zoom:70%;" />
其它两种下载方式:
从
ftp
下载(polymesh教程提供的下载方式)cd ~ mkdir POLYMESH ## $WAVE_COURSE 是 ftp 中的一个文件夹 cp -r $WAVE_COURSE/TOOLS/POLYMESH/* POLYMESH/ ## polymesh文件夹就是所需下载的文件夹 cd POLYMESH/polymesh
百度网盘
链接: https://pan.baidu.com/s/1q5eYWRGqKNSNfmiwxyRsSA 密码: 48t3
src
文件夹 (source code, mostly in Fortran90)
triangle
文件夹 (the actual meshing program, in C, by J R Shewchuk)
编译
我们使用 GNU编译器(在4.6-4.9版本中测试)
或 intel编译器(在14和15版本中测试)
。编辑 Rules.make
文件,选择你的编译器,并打开/关闭调试和优化模式。
在下载包中提供了一个完全预先配置的 Makefile
。要开始编译过程,请进入你的本地 PolyMesh
文件夹,然后输入 make
即可。请检查编译器的输出是否有错误,如果是否定的,编译实例就完全完成了。默认情况下,make
完成后,可执行文件
将被复制到你的 BIN目录:/home/yourusername/bin
。
3-程序功能
读取已有的网格
这个函数的工作是读取已经网格化的现有网格。例如,从另一个网格生成器读取已经网格化的网格。有必要读取坐标,特别是读取坐标下的元素信息。因此,PolyMesh
可以与现有的网格一起工作,用户可以 细化(refine)
网格的特殊区域。
主要的优点是 时间上的优势
。因此,在节点数量超过一百万的大网格上,运行时间可以减少到一半,因为 PolyMesh
可以跳过第一个三角计算。
还有一个函数可以将最终结果写成二进制文件。二进制文件可以像文本文件那样更快地被读取,并节省大量的磁盘空间。通过这种方式,PolyMesh
能够减少生成网格的运行时间,因为读取时间减少了。
插值
水深
LXYZ
,FNAMEBATHY
基础数据结构(Underlying data structure)
LFASTSEARCH
,LFASTSEARCH2
,SMEMORY
边界,岛屿,结构
要启用边界的水深插值,将LBOUNDARYINTER
设置为true
。对于岛屿,将LISLAND
和LISLANDINTER
设置为true
。对于结构
,变量被命名为LSTRUCT
和LSTRUCTINTER
。最后,为了插值读入段(segments)
,将LREADSEGMENTS
和LSEGMENTINTER
设置为true
。预定义深度
LTAKEBOUNDDEPTH
,LBOUNDPRDEP
,DEPTHBOUND
LTAKEISLANDDEPTH
,LISLANDPRDEP
,DEPTHISLAND
LTAKESTRUCTDEPTH
,LSTRUCTPRDEP
,DEPTHSTRUCT
LSEGMENTINTER
网格细化
PolyMesh
有三个细化选项来考虑网格生成过程中的边界条件,即 CFL-准则 (CFL-Criterion)
、DZ-准则 (DZ-Criterion)
和 多边形细化 (polygon refinement)
。在 特定区域的网格细化
与其他区域的网格细化不同,其原因是预测变量变化的地理尺度不同。例如,波浪特性的变化在沿海地区发生的时间和空间尺度要比在深海地区小得多。
因此,海洋近岸部分的网格也必须比深海部分的网格更细。但也可能有其他的要求,例如在使用流体力学模型时,海流速度的变化,或者在一些特殊的地方需要高分辨率,因为在那个地方要进行一些建设,等等。
基本上我们为非结构化网格的细化定义了两个不同的准则。这些准则我们称之为 CFL准则
和 MAXDZ准则
。以下是对这准则的描述。
CFL准则
CFL准则
是根据所关注的特定量的速度
自然地减少网格长度,例如,对于水波(water waves)
来说,这是波浪的群速度,对于海流(currents)
来说,这是浅水的波速,如公式2所示。CFL条件
也是显式数值方法的稳定性标准
,例如,它必须低于1才能实现稳定的积分。因此,通过强制执行CFL<1
,我们可以根据公式1估计每个元素的稳定最大边缘长度,以获得稳定的积分。从图2-4可以看出,在波罗的海的浅水区
,网格长度根据公式1减少,不需要减少积分时间步长DT
。DZ准则
DZ准则
取决于某个三角形元素中的高程(elevation)
变化。如果某个元素中的深度变化
大于用户给定的阈值
,那么这个比率就被用来强制减少或增加元素面积(见公式3)。这样,元素网格中的坡度(slope)
就根据输入文件中的设置来解决,并可以根据用户的需要和某些感兴趣的问题进行无缝(seamlessly)调整
(见图2-6)。BZR 边界区域细化
使用
BZR
可以在没有任何水深信息的情况下,在边界附近创建一个具有较高分辨率的网格。分辨率由MIN_EDGE_BZR
和MAX_EDGE_BZR
变量控制,这两个变量大约规定了边界上的最小边长和网格中部的最大边长。多边形细化
这个选项使用户可以细化域的一个特殊区域。这可以像编辑器中的结构多边形一样完成。用户必须定义细化多边形的边界,在多边形内部,用户可以在输入文件中定义特殊的细化标准。如第2.3.3章所述,多边形细化过程与
CFL
和MAX DZ
准则一起工作。修复边界分辨率
人们可以通过在三角参数中设置
Y
标志来强制Polymesh
不细化边界:PARAITER="Darpq20Y"
。
网格平滑(Mesh Smothing)
从现实世界的数据中重建的三角网格通常包含不受欢迎的 噪声(noise)
。在保留三角网格的几何特征的同时,平滑其上的噪声是一个重要的要求。让我们考虑三角形网格上的噪声的定义。在一个没有 额外噪声(additive noise)
的三角形网格上,每个三角形的顶点都存在于适当的位置,特别是在网格表面的接触。
如果一个三角形网格有一些噪声,顶点就会被打乱,其位置与网格分离。我们将 噪声定义
为网格顶点从其在网格表面的适当位置分离。因此,噪声抑制过程等同于对网格顶点位置的修正。
边界粗化(Coarsening on boundary)
为了生成一个 有限元网格(finite element mesh)
,你需要代表一个域的 边界坐标
,如果存在一个岛的话。太近的节点
可以用新开发的算法进行 粗化
。在这个过程中,非常重要的一点是,线条的特性将被保留。
在从 PolyMesh
中读入 边界多边形
后,将调用 粗化
的初始化。随后,由用户启用的 粗化程序(coarsening routine)
将在 节点列表
中运行。这些算法将根据用户定义的 准则
决定是否删除每个点。在运行过程中,程序将存储 决定
在一个单独的数组中,以便在以后的过程中删除选定的点。
粗化的详细用法在 第4.3章
的一个特殊测试案例 Testgrid
中显示。
排序(Sorting)
排序选项的目的是在计算过程中减少 chashe dismisses
,并进行 cash localization
。
这是用不同的排序算法完成的,比如 希尔伯特排序(hilbert sort)
,或一些为 WWM
、WWIII
和 WAM
中使用的 波动分割方案(fluctuation spiltting schemes)
定制的排序。
河流网格化(River mesh)
See #5.3.6.River meshing|outline
4-PolyMesh 处理(Handling)
在运行 PolyMesh
之前,有一些步骤必须在执行 PolyMesh
之前完成。 以下子章节描述了它们。
输入文件
为了使 PolyMesh
能够工作,用户必须提供输入文件。至少需要:
rand.dat
(边界信息的)xyz.dat
(水深数据)
文件(rand.dat
)包含关于边界节点的坐标。第二个文件(xyz.dat
)包含水深数据。另外需要的文件(仅当该特征被启用时)是:
insel.dat
(如果该区域有岛屿)struct.dat
(如果你要将一个结构加载到网格中)polygon.dat
(如果你想细化一个特殊区域的多边形)
所有这些输入文件都有一个特殊的格式,在运行 PolyMesh
之前,应在 附录A
中详细确认。必须提供正确的格式,否则 PolyMesh
会中止。
POLYMESH_use_and_tricks_guide.pdf
貌似包含polymesh
的输入文件创建。
xyz.dat(xf格式)
Randknoten
是Boundarynodes
, 即边界点;Gebietsknoten
是Areanodes
, 即区域(内)点;x-Koord.
是lon
, 即经度;y-Koord.
是lat
, 即纬度;Skalarwert
是measurementvalue
, 即对应坐标系下的测量水深;Anzahl der Elemente
是Number of Elements
,即Element
的数量;Knoten
是Notes
, 即点;
xyz.dat(xyz格式)
- 第一行:
6
表示有6个水深数据点;- 数据形式为(x,y,z):
(lon,lat,measurement)
xyz.dat文件创建–待实现
获取全球水深数据文件,例如
ETOPO1
和ETOPO2
等,可用水深数据集在GRIDGEN教程中有链接,GRIDGEN
教程包含ETOPO1
和ETOPO2
;用
MATLAB
或PYTHON
提取所需数据,输出生成xyz.dat
文件具体程序待制作上传;
insel.dat / polygon.dat / struct.dat
- 第一行:注释行 - 第一个字符必须是
C
或c
,后面是一个字符串(名称)
。- 数据形式为
(标号,经度,纬度,测量值)
- 数据集必须以
-1
关闭;- 文件必须包含至少1个
岛屿(island)
或多边形(polygon)
,其中每组数据集至少有2个以上测量值。
rand.dat
与 insel.dat
等文件格式相同,但只包含一组测量数据。
insel.dat / polygon.dat / struct.dat / rand.dat 文件创建–待实现
输入文件可用 Google-Earth kml polygon 形式提供。
INOUT教程 提供了
google-earth
在ubuntu
上的下载安装。
名单变量 IBOUNDFORMAT
必须设置为1。
IBOUNDFORMAT
是哪里的名单变量?
输入参数
为了得到最好的结果,必须在 meshin.nml
文件中正确定义 triangulation
的输入参数。PolyMesh
会从这个文件中读取所有必要的输入参数。只能在你的命令提示符下编辑它并设置你的标准,否则 PolyMesh
将使用默认参数。在 附录C 42
中附有一个完整描述的输入文件。
或者使用编辑器 kater-Toolbox
作为图形界面。只要用 ToolBox
启动 kater-Toolbox
,在下拉菜单中编辑参数。
kater-Toolbox
是什么软件?
为了更好地理解,我们将输入文件分成了不同的 部分
,这些 部分
命名是直观的(intuitive)。这些 部分
是:
General
Interpolation
Refinement
Triangleoptions
Smooth
Coarsening
Regmesh
Sorting
Debug
在输入文件每个 部分
中,有三种形式的输入参数。
logical switches
,用于启用或禁用PolyMesh
的某项功能,以L
开头,例如LISLAND
。字符串
,为PolyMesh
的代码提供文件名(即输出文件)的。参数值
,为测试案例设定值。
GENERAL
INTERPOLATION
REFINEMENT
TRIANGLEOPTIONS
SMOOTH
COARSENING
REGMESH
SORTING
RIVER
DEBUG
输出文件
PolyMesh
能够以四种不同的文件格式写出结果:
XFN
TRIANGLE
GR3
MSH
要改变输出格式,请编辑输入文件 meshin.nml
,并进入 General
部分。这里你可以改变变量 OUTPUTFORMAT
。
额外的描述位于完全推荐的 meshin_example.nml
文件中(/polymesh/manual/meshin_example.nml
)。
第一次运行
要运行 PolyMesh
,请在你的 本地测试案例文件夹
中输入 polymesh
,这个文件夹包含了从 档案中
提取的输入文件。在 PolyMesh
中运行的过程如下:
水深数据
和边界文件
读入几个数组。- 将
水深数据
提供给要网格化的三角形。水深网格
的结果可以在bathyorig.node
或bathyorig.ele
文件中查看。 - 第一版
常规网格
是由三角区
进行三角化的。因此,PolyMesh
从文件中读取额外的数据,例如岛屿信息,并以正确的格式提供给三角形。结果被写入init.node
和init.ele
文件中。 - 此后,迭代过程开始。迭代和细化参数必须在输入文件部分正确设置。这些部分的名称是直观的。
- 编写最终输出文件。
- Hier muss der Prozess noch genauer besrieben werden.(德语:这里需要更详细地描述这个过程。)
观察结果
网格生成的最终结果写在 final.node
和 final.ele
文件中。三角形网格生成器提供了一个程序来观察结果。它被称为 showme
。
可能需要安装
apt-get install triangle-bin
只要输入 showme final.node
就可以看到结果。
此外,你还可以观看初始的水深网格。输出文件被命名为 bathy.1.node
和 init.1.node
。在迭代过程中,你可以通过 iter.1.node
、iter.2.node
观察结果。文件名中的数字代表迭代号。
5-PolyMesh练习
为了使 PolyMesh
的使用更容易一些,我们提供了一些应用实例。只要遵循这些步骤,你就可以看到,使用该程序是非常容易的。
Example 1 – HISWA
在这个例子中,你可以按照步骤,学习如何使用 PolyMesh
。只需阅读这些章节,最后尝试制作你自己的网格。
定义边界,水深数据
使用 PolyMesh
生成网格的第一步是加载水深数据库。水深文件的主文件名可以在输入文件中设置。水深文件 xyz.dat
的变量被称为 Depthfile
。在接下来的步骤中,PolyMesh
会自动读取这些数据,因为水深总是被启用的。
此外,PolyMesh
需要边界坐标,这也应该存储在一个单独的文件中,否则 PolyMesh
会中止。默认名称是 rand.dat
。你可以在输入文件中设置你喜欢的文件名。如果你已经设置了所有的输入参数,你就可以往前走一步了。
xyz.dat
和rand.dat
文件怎么生成?
开始程序,可视化结果
在你的 私人文件夹
中下载并解压 PolyMesh
。如果你需要进一步的帮助,请先阅读 第2.1章
,以后再继续。
将编译生成的可执行文件,在
程序文件夹
,创建软连接ln -s /home/jincanliu/bin/* .
在你的命令提示符下用 polymesh
运行可执行程序。该程序将读取数据并生成网格。考虑到开关 LINSEL
、LSTRUCT
和 LPOLY
为 False
。结果将被写入 final.dat
文件中。要查看结果,请使用 showme
或类似的程序。
用结构多边形生成网格
下一步是整合一个 结构多边形(struct polygon)
。使用与之前章节中相同的选项。只需在 程序文件夹
中提供结构数据库文件。现在设置结构文件的文件名,并将输入文件中的 LSTRUCT
切换为true。至少要再次运行 PolyMesh
并查看结果。
用结构、岛屿多边形生成网格
本章将演示如何在现有的网格中添加岛屿。这个域的网格生成将由 Triangle
完成。第一步是设置开关 LISLAND
为 True
,并在你的 程序文件夹
中提供岛屿数据库。不要忘记在输入文件 meshin.nml
中输入正确的文件名。接下来只需运行 PolyMesh
并查看最终结果,该结果已被写入你的 程序文件夹
中的 final.dat
。
用结构、岛屿、细化多边形生成网格
本子章演示了多边形细化的过程。在 inputfile
中启用开关 LPOLY
,polymesh
将读入多边形文件。文件名是 polygon.dat
。
Example 2 - Baltic See
下面几章将以 波罗的海(Baltic See)
为测试案例,详细展示 PolyMesh
的功能。
生成受约束的Delaunay网格
在这个案例中,我们只提供水深数据 xyz.dat
和边界数据 rand.dat
。此外,输入文件可以被修改,允许每个用户按照自己的意愿设置 三角形选项
。
该图显示了三角化后的 波罗的海网格
。三角化是在没有任何细化选项的情况下完成的。