tetgen手册 下载本文

个,其中六个顶点位于四面体六条边的中点。关于有多少个额外的顶点和一个四面体有关可以参考章节4.1.4。

-C -C选项表明tetgen会检查网格完成的一致性。如果使用-CC,tetgen也会检查网格是否符合约束德洛内性或者遵守德洛内特性。

-V -V选项将会给出tetgen正在做什么的详细信息。更多是V将会增加更多详细信息。

特别需要说明的是-V选项会给出一些关于算法过程和更多详细的统计资料信息,其中会包含一个大概的网

格质量报告。要想得到一个已存在的网格的统计数据,用户可以运行tetgen,其选项为-rNEP,tetgen会读入网格并且打印统计数据而不产生输出文件。

-VV 给出了关于算法的更详细的信息,并且会降低tetgen的执行速度。-VVV只有在调试的时候有用。

3.3 命令行举例

Tetgen根据不同的命令行选项和输入文件来进行德洛内约束四面体剖分和控制生成网格质量。这个章节为每个任务提供了几个例子。

3.3.1 产生德洛内四面体剖分

对于一个三维的顶点集,tetgen能够计算它准确的德洛内四面体剖分。在得到这个四面体剖分之后,这个顶点集的凸壳是被这个德洛内四面体剖分之后最外面的面所包含,这些面是一些三角形平面列表。

图14(a)展示了一个三维顶点集V。将V保存在a.node文件中,如r100.node。命令如下: Tetgen r100.node

图14(b)展示了顶点集V进行德洛内四面体剖分之后的效果。V的凸壳在图14(c)高亮显示。

3.3.2 生成约束的德洛内四面体剖分

对于一个PLC来说,tetgen可以生成它的约束德洛内四面体剖分和四面体网格质量。如果这个PLC没有包含低于90度的输入角时,后者也遵守德洛内四面体剖分。

你可以像例子中那样将PLC保存在a.poly或者是.smesh文件中,用-p选项告诉tetgen输入文件是一个

PLC。图15中图片分别说明了一个PLC它的约束德洛内四面体剖分和符合德洛内型的网格质量。命令如下: tetgen -p example tetgen -pq example

3.3.3 网格质量,网格大小控制

为了提高网格质量,Tetgen允许用户设置质量界限(在-q选项后加上一个值较小的数,默认是2.0),或

者是对所有的四面体强加一个有限元界限(-a选项后带一个较小的值)。根据给出的不同的命令行选项,tetgen生成的网格将会有不同的质量和大小。图16分别显示了先前例子在下面不同选项下不同的效果。 tetgen tetgen

除了对所有的四面体强加的最大体积限制之外,你也可以对于输入PLC的一段上的小平面强加最大面积限制,或者是边最大长度限制。你可以在 a.var 4.1.9 文件中设置这个平面或者是段对应的面积或者是长度约束。提供的文件跟这个PLC文件一起作为输入,同时在运行tetgen时调用-p,-q选项。.var文件格式允许你对所有的面或者段进行约束设置。

-pq1.3

example example

-pq1.3a1.0

4 文件格式

4.1 tetgen文件格式

表2列出了每一个文件格式。所有文件都是ASCII格式,并且还可能包含一些以字符#为前缀的注释。点,四面体,面,洞,和最大有限元约束必须是连续编号,且从0或者是1开始。然而,所有的输入文件必须是一致的。Tetgen在读入.node文件时会自动检测你的选择。当从其他程序调用tetgen时,如果你希望对象序号从0开始,你可以用-z选项。

注意:下面的描述符#是可以用数字代替,不要是和注释前缀相混淆。

4.1.1 node文件

第一行四个数字分别对应一下变量:

Numberofpoints mesh_dim numberofpointattributes pointmarkerlist

顶点个数 为空,1表示非空) 接下来为顶点列表:

空间维数

顶点属性个数

顶点标识符列表(0表示列表

顶点标号 x坐标 y坐标 z坐标

.node文件包含了一个三维顶点列表。每一个顶点都有x,y,z坐标,还可能有一个或几个属性,或者是边界标识。.node文件可以用来作为PLC,网格顶点集,或者是作为被插入到其他网格中的输入文件(里面的点作为额外顶点)或者是输出文件。下面的例子展示了.node文件的布局。

# Node count, 3 dim, no attribute, no boundary marker 8300

# Node index, node coordinates 1 0.0 0.0 0.0 2 1.0 0.0 0.0 3 1.0 1.0 0.0 4 0.0 1.0 0.0 5 0.0 0.0 1.0 6 1.0 0.0 1.0 7 1.0 1.0 1.0 8 0.0 1.0 1.0

这个属性是典型浮点数值,它是一些顶点相关的物理量(像块或者是导电性),复制不变的到输出的网格

中。如果使用了-p选项,根据线性差值每一个插入到网格段上的新施耐泰点都会分配属性。并且,如果选择-q ,-a, -i,用来提高网格质量的每一个添加的新点属性都会分配为0.

如果第一行的第四个入口点是1.那么剩下的文件最后一列就认为是边界标示符。边界标识符用来标识边界

顶点(PLC平面上的点)。如果没有被-B选项禁止的话,Tetgen生成的.node文件会在最后一列包含边界标识符。在输出文件和每一个点相关的边界标示符被选中。示例如下:

如果一个点在输入文件中输入非0标识符,那么在输出的.node文件中也会分配相同的标识符。

否则的话,如果在一个PLC的小平面的节点有非0边界标识符,那么这个节点也会分配和小平面同样 的非0标示符。如果节点同时位于几个这样的小平面上,那么这个标识符就会被随意选取一个。 否则,这个顶点分配标识符0.

Tetgen可以决定所有在边界上点,哪些点输入时边界标识符为0,输出时将会变为1。

4.1.2 poly文件格式

一个.poly文件和其他额外的信息一样也可以标识一个PLC。尽管这里对PLCs上的小平面没有约束,tetgen要求由PLC表示的那些网格区域应该是完全有界的,也就是说,它是封闭的。.poly文件格式由四部分组成,分别是一系列的点,一系列的小平面,一系列的洞点和一系列的区域属性。前面三个部分是强制性的,最后一个是可选的。

下面描述了这四个部分。在这个章节的结尾,有一个.poly文件表示了一个立方体。

-----------首先是顶点列表

第1行4个数字分别对应一下四个变量:

0 mesh_dim

numberofpointattributes pointmarkerlist

(0表示顶点在一个node文件中) ( 空间维数) (顶点属性个数)

(顶点标识符列表,0为空,1为非空)

------------接下来是面列表

Numberoffacets facetmarkerlist

(facet个数)

(facet标识符列表,0为空,1为非空)

第3行4个数字对应变量如下:

f->numberofpolygons f->numberofholes facetmarkerlist i+ firstnumber

(多边形个数) (多边形包含洞的个数) (facet标识符列表,有为对应的值,没有为0) (面的编号) 注意:f表示一个指向facet的指针

第4行5个数字分别对应如下值:

一个facet包含的顶点数目 顶点1 顶点2 顶点3 顶点4

接下来的跟3、4行对应

---------接下来是洞列表

对应的值为: 洞的编号 洞的标识值1 洞的标识值2 洞的标识值3

------- 接下来的洞的输出 ------- 接下来的区域输出 .

每一个面都要求是二维区域中的平面直线图。它可以是一个包含段,单一点和洞的多边形区域。一个面由一系列的多边形组成。每一个多边形有n个角,n>=1。它可以被退化,也就说,n=1或者n=2分别代表一个单点或者是一个段。面的格式如下:

每一个多边形可以通过给出角的个数来设定,后面跟着这个角的有序索引。用户不必要关心你选择列出的索引的顺序(顺时针或者是逆时针)。每一行索引不应该是任意长的,因为tetgen能够识别的每一行的最大字符长度是1024。这个列表可以分成几行。

通过标记在洞内部的一个点可以设定平面上的一个洞。洞点列表跟在多边形列表后面的。

如果边界标识符为1,tetgen将为.face文件中的每一个面生成另外一个边界标识符。用户可以通过使用 –B选项来阻止边界标识符写入到.face文件中。

面的边界标识符是它的一个标签,主要用来识别四面体化后的哪些面和哪一个PLC的面相关,进而知道哪

些面发生在四面体剖分后的边界上。它普遍应用于决定网格应该使用哪些不同的边界限制条件。 ...

可以通过标识每一个洞内部的一个点来设置洞的的体积。在约束德洛内四面体剖分形成之后,tetgen可以通过删除一些四面体来创建洞。这就是为什么tetgen要求PLCs是闭合边界的确切原因。在非闭合的PLCs平面情况下,整个四面体剖分将有可能被吃掉。如果两个四面体相邻的面被删除,那么这个面它自己也会消失。洞点不得不用区域内的其他点来代替,否则这个误差会决定面的哪一边变成洞。