例子 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};

目录前一页后一页