例子 1
/*********************************************************************
*
* Gmsh tutorial 1
*
* 变量,基本实体,物理实体,背景网格
*
*********************************************************************/
// Gmsh 中所有几何体的描述使用是一种类似于 C 的语言。最简单的
// 构造这种语言的方法是 "affectation".
// 所有的命令都使用分号结尾。下面的行定义了一个叫做 'lc' 的变
// 量,并且设置其值为 0.007 :
lc = 0.007 ;
// 这个新创建的变量能够被用来定义一个 Gmsh 的基本实体:一个点
// 'Point'。一个点能够用四个数的表来表示,包括它的坐标 x, y, z
// 以及一个特征长度用来指定该点处产生出来的网格尺度:
Point(1) = {0, 0, 0, 9.e-1 * lc} ;
// 网格尺度指的是网格中线段的长度、三角形的外接圆的半径和四面
// 体的外接球的半径。实际上的网格尺度的分布是使用的预先指定的
// 点上的特征尺度通过插值得到的。指定特征长度还有其他方法:比
// 如 吸引子(参考 t7.geo)和背景网格(参考 bgmesh.pos)。
// 如同上面的这个定义,更加复杂的表达式也能够通过变量构造出来。
// 这里,上面的变量 'lc' 被乘上了常数 9.e-1 作为了上面定义这个
// 点的第四个参数。
//
// 下面的一般的语法规则能够应用到定义所有的几何实体上:
//
// “如果一个数定义了一个新的实体,它就是放在一对小括号
// 中,如果一个数引用了一个以前定义的实体,那么它就是
// 放在一对花括号中。”
//
// 下面我们又定义了三个点:
Point(2) = {.1, 0, 0, lc} ;
Point(3) = {.1, .3, 0, lc} ;
Point(4) = {0, .3, 0, lc} ;
// Gmsh 中的第二种基本几何实体是曲线。直线是曲线中最简单的一
// 种。一条直线可以用一串点定义出来,比如下面的 Line 1 是从
// 点 1 出发的,到点 2 截止:
Line(1) = {1,2} ;
Line(2) = {3,2} ;
Line(3) = {3,4} ;
Line(4) = {4,1} ;
// 第三种基本实体是曲面。为了使用上面的四条线定义一个简单的
// 矩形曲面,我们要先定义一个曲线闭环(line loop)。一个曲线闭
// 环是一串连接着的线,每条线上都带着一个符号,用来表示这条
// 线的方向。
Line Loop(5) = {4,1,-2,3} ;
// The surface is then defined as a list of line loops (only one
// here):
// 然后这个曲面就能够使用一系列的曲线闭环来定义了(这里只有
// 一个):
Plane Surface(6) = {5} ;
// 这时候,Gmsh 知道所有的关于怎么显示这个矩形曲面和布上网格
// 的信息。但是我们还需要提供对网格中不同的元素(包括点、线、
// 三角形)指定区域指标(region number)。这可以通过定义物理实体
// 的方法实现。物理实体能够将网格中的元素分成组,给定一个区
// 域指标,并指定其定向。
//
// 比如,下面我们就将点 1 和点 2 组合到物理实体 1 中了:
Physical Point(1) = {1,2} ;
// 从而,两个元素会被同时输出到输出文件中,并具有区域指标 1。
// 对于曲线和曲面,也能这样指定相应的区域指标:
Physical Line(10) = {1,2,4} ;
MySurface = 100;
Physical Surface(MySurface) = {6} ;
// 所有的在剖分曲线 1、2、4的时候产生的线元素都会被存储为区域
// 指标为 10,所有在剖分曲面 6 时产生的三角形都具有区域指标 100。
//
// 如果没有定义物理实体,网格中所有的元素都被直接存储为缺省的
// 定向,其区域指标为它们的基本区域指标。请参考 FORMATS 文件
// 了解网格和后处理的格式。