例子 4
/*********************************************************************
*
* Gmsh tutorial 4
*
* 内部函数、洞
*
*********************************************************************/
cm = 1e-02 ;
e1 = 4.5*cm ; e2 = 6*cm / 2 ; e3 = 5*cm / 2 ;
h1 = 5*cm ; h2 = 10*cm ; h3 = 5*cm ; h4 = 2*cm ; h5 = 4.5*cm ;
R1 = 1*cm ; R2 = 1.5*cm ; r = 1*cm ;
ccos = ( -h5*R1 + e2 * Hypot(h5,Hypot(e2,R1)) ) / (h5^2 + e2^2) ;
ssin = Sqrt(1-ccos^2) ;
Lc1 = 0.01 ;
Lc2 = 0.003 ;
// 下面是所有的操作符的列表,除了 '^' 以外,这些操作符和 C、C++
// 语言中都是一样的:
//
// '-' (in both unary and binary versions, i.e. as in '-1' and '1-2')
// '!' (the negation)
// '+'
// '*'
// '/'
// '%' (the rest of the integer division)
// '<'
// '>'
// '<='
// '>='
// '=='
// '!='
// '&&' (and)
// '||' (or)
// '||' (or)
// '^' (power)
// '?' ':' (the ternary operator)
//
// 使用括号可以将表达式结合
//
// 除了这些操作符以外,所有的 C 数学函数也能够使用(注意首字母
// 要大写):
//
// Exp(x)
// Log(x)
// Log10(x)
// Sqrt(x)
// Sin(x)
// Asin(x)
// Cos(x)
// Acos(x)
// Tan(x)
// Atan(x)
// Atan2(x,y)
// Sinh(x)
// Cosh(x)
// Tanh(x)
// Fabs(x)
// Floor(x)
// Ceil(x)
// Fmod(x,y)
//
// 我们还有增加的函数:
//
// Hypot(x,y) computes Sqrt(x^2+y^2)
// Rand(x) generates a random number in [0,x]
//
// Gmsh 中唯一预定义的常数就是 Pi.
Point(1) = { -e1-e2, 0.0 , 0.0 , Lc1};
Point(2) = { -e1-e2, h1 , 0.0 , Lc1};
Point(3) = { -e3-r , h1 , 0.0 , Lc2};
Point(4) = { -e3-r , h1+r , 0.0 , Lc2};
Point(5) = { -e3 , h1+r , 0.0 , Lc2};
Point(6) = { -e3 , h1+h2, 0.0 , Lc1};
Point(7) = { e3 , h1+h2, 0.0 , Lc1};
Point(8) = { e3 , h1+r , 0.0 , Lc2};
Point(9) = { e3+r , h1+r , 0.0 , Lc2};
Point(10)= { e3+r , h1 , 0.0 , Lc2};
Point(11)= { e1+e2, h1 , 0.0 , Lc1};
Point(12)= { e1+e2, 0.0 , 0.0 , Lc1};
Point(13)= { e2 , 0.0 , 0.0 , Lc1};
Point(14)= { R1 / ssin , h5+R1*ccos, 0.0 , Lc2};
Point(15)= { 0.0 , h5 , 0.0 , Lc2};
Point(16)= { -R1 / ssin , h5+R1*ccos, 0.0 , Lc2};
Point(17)= { -e2 , 0.0 , 0.0 , Lc1};
Point(18)= { -R2 , h1+h3 , 0.0 , Lc2};
Point(19)= { -R2 , h1+h3+h4, 0.0 , Lc2};
Point(20)= { 0.0 , h1+h3+h4, 0.0 , Lc2};
Point(21)= { R2 , h1+h3+h4, 0.0 , Lc2};
Point(22)= { R2 , h1+h3 , 0.0 , Lc2};
Point(23)= { 0.0 , h1+h3 , 0.0 , Lc2};
Point(24)= { 0 , h1+h3+h4+R2, 0.0 , Lc2};
Point(25)= { 0 , h1+h3-R2, 0.0 , Lc2};
Line(1) = {1 ,17};
Line(2) = {17,16};
// 圆弧是通过三个给定的点来定义的,分别表示起始点、中心点和
// 截止点。所有的圆弧都是逆时针的。这三个点不应该在同一条直
// 线上,否则您应该指定这个圆弧位于那个平面上如
//
// Circle(num) = {start,center,end} Plane {nx,ny,nz}
Circle(3) = {14,15,16};
Line(4) = {14,13};
Line(5) = {13,12};
Line(6) = {12,11};
Line(7) = {11,10};
Circle(8) = { 8, 9,10};
Line(9) = { 8, 7};
Line(10) = { 7, 6};
Line(11) = { 6, 5};
Circle(12) = { 3, 4, 5};
Line(13) = { 3, 2};
Line(14) = { 2, 1};
Line(15) = {18,19};
Circle(16) = {21,20,24};
Circle(17) = {24,20,19};
Circle(18) = {18,23,25};
Circle(19) = {25,23,22};
Line(20) = {21,22};
Line Loop(21) = {17,-15,18,19,-20,16};
Plane Surface(22) = {21};
// 这个曲面有两条闭环曲线构造出来,从而它会有一个洞:
Line Loop(23) = {11,-12,13,14,1,2,-3,4,5,6,7,-8,9,10};
Plane Surface(24) = {23,21};
Physical Surface(1) = {22};
Physical Surface(2) = {24};