From 37f24ee816be0454c7339f2267b16e9f9e40b424 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Mon, 27 Nov 2006 19:23:04 +0000
Subject: [PATCH] remove elliptic - same as Transfinite with Mesh.Smoothing > 1

---
 Fltk/Callbacks.cpp         |   7 +-
 Fltk/Callbacks.h           |   1 -
 Fltk/GUI.cpp               |   3 +-
 Parser/Gmsh.tab.cpp        | 336 +++++++++++++++++--------------------
 Parser/Gmsh.y              |  26 +--
 Parser/Gmsh.yy.cpp         |   4 +-
 benchmarks/2d/elliptic.geo |   4 +-
 doc/texinfo/gmsh.texi      |  26 +--
 8 files changed, 174 insertions(+), 233 deletions(-)

diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 383c05156f..7c3ac661ca 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.483 2006-11-27 03:19:47 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.484 2006-11-27 19:22:57 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -3999,11 +3999,6 @@ void mesh_define_transfinite_volume_cb(CALLBACK_ARGS)
   _add_transfinite_elliptic(0, 3);
 }
 
-void mesh_define_elliptic_surface_cb(CALLBACK_ARGS)
-{
-  _add_transfinite_elliptic(1, 2);
-}
-
 // Dynamic Solver Menus
 
 void solver_cb(CALLBACK_ARGS)
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index 392857a2ee..3cacf33721 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -286,7 +286,6 @@ void mesh_define_transfinite_cb (CALLBACK_ARGS);
 void mesh_define_transfinite_line_cb(CALLBACK_ARGS);
 void mesh_define_transfinite_surface_cb(CALLBACK_ARGS);
 void mesh_define_transfinite_volume_cb(CALLBACK_ARGS); 
-void mesh_define_elliptic_surface_cb(CALLBACK_ARGS);
 
 // Dynamic Solver Menus
 
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index ecf43f1006..2a9ca51a02 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.565 2006-11-27 03:19:47 geuzaine Exp $
+// $Id: GUI.cpp,v 1.566 2006-11-27 19:22:57 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -358,7 +358,6 @@ Context_Item menu_mesh[] = {
       {"Characteristic length", (Fl_Callback *)mesh_define_length_cb  } ,
       {"Recombine",   (Fl_Callback *)mesh_define_recombine_cb  } ,
       {"Transfinite", (Fl_Callback *)mesh_define_transfinite_cb  } , 
-      {"Elliptic",    (Fl_Callback *)mesh_define_elliptic_surface_cb  } , 
       {0} 
     };  
         Context_Item menu_mesh_define_transfinite[] = {
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 2c6a88cdb0..fba61ab6c8 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -126,7 +126,7 @@
 
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.282 2006-11-27 17:45:07 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.283 2006-11-27 19:22:57 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -531,21 +531,21 @@ static const short yyrline[] = { 0,
   2142,  2152,  2159,  2166,  2173,  2180,  2187,  2194,  2201,  2208,
   2215,  2220,  2227,  2232,  2239,  2244,  2251,  2256,  2263,  2268,
   2275,  2280,  2287,  2292,  2299,  2304,  2311,  2316,  2326,  2330,
-  2335,  2360,  2382,  2390,  2409,  2427,  2445,  2474,  2509,  2536,
-  2563,  2577,  2595,  2602,  2608,  2611,  2617,  2622,  2631,  2633,
-  2634,  2635,  2636,  2637,  2638,  2639,  2640,  2647,  2648,  2649,
-  2650,  2651,  2652,  2653,  2654,  2655,  2656,  2657,  2658,  2659,
-  2660,  2661,  2662,  2663,  2664,  2665,  2666,  2667,  2668,  2669,
-  2670,  2671,  2672,  2673,  2674,  2675,  2676,  2677,  2678,  2680,
-  2681,  2682,  2683,  2684,  2685,  2686,  2687,  2688,  2689,  2690,
-  2691,  2692,  2693,  2694,  2695,  2696,  2697,  2698,  2699,  2700,
-  2705,  2710,  2711,  2712,  2713,  2714,  2715,  2719,  2735,  2750,
-  2770,  2784,  2797,  2820,  2838,  2856,  2874,  2892,  2899,  2904,
-  2908,  2912,  2916,  2922,  2927,  2931,  2935,  2941,  2945,  2949,
-  2955,  2961,  2968,  2974,  2978,  2983,  2987,  2998,  3005,  3016,
-  3036,  3046,  3056,  3066,  3083,  3102,  3126,  3154,  3160,  3164,
-  3168,  3180,  3185,  3197,  3204,  3225,  3230,  3244,  3250,  3256,
-  3261,  3269,  3277,  3291,  3305,  3309,  3328,  3350
+  2335,  2360,  2382,  2390,  2409,  2427,  2445,  2474,  2509,  2514,
+  2541,  2555,  2573,  2580,  2586,  2589,  2595,  2600,  2609,  2611,
+  2612,  2613,  2614,  2615,  2616,  2617,  2618,  2625,  2626,  2627,
+  2628,  2629,  2630,  2631,  2632,  2633,  2634,  2635,  2636,  2637,
+  2638,  2639,  2640,  2641,  2642,  2643,  2644,  2645,  2646,  2647,
+  2648,  2649,  2650,  2651,  2652,  2653,  2654,  2655,  2656,  2658,
+  2659,  2660,  2661,  2662,  2663,  2664,  2665,  2666,  2667,  2668,
+  2669,  2670,  2671,  2672,  2673,  2674,  2675,  2676,  2677,  2678,
+  2683,  2688,  2689,  2690,  2691,  2692,  2693,  2697,  2713,  2728,
+  2748,  2762,  2775,  2798,  2816,  2834,  2852,  2870,  2877,  2882,
+  2886,  2890,  2894,  2900,  2905,  2909,  2913,  2919,  2923,  2927,
+  2933,  2939,  2946,  2952,  2956,  2961,  2965,  2976,  2983,  2994,
+  3014,  3024,  3034,  3044,  3061,  3080,  3104,  3132,  3138,  3142,
+  3146,  3158,  3163,  3175,  3182,  3203,  3208,  3222,  3228,  3234,
+  3239,  3247,  3255,  3269,  3283,  3287,  3306,  3328
 };
 #endif
 
@@ -5389,34 +5389,12 @@ case 198:
 case 199:
 #line 2510 "Gmsh.y"
 {
-      Surface *s = FindSurface((int)yyvsp[-4].d);
-      if(!s)
-	yymsg(WARNING, "Unknown surface %d", (int)yyvsp[-4].d);
-      else{
-        s->Method = ELLIPTIC;
-        int k = List_Nbr(yyvsp[-1].l);
-        if(k != 4)
-	  yymsg(GERROR, "Wrong definition of Elliptic Surface %d: "
-		"%d points instead of 4" , (int)yyvsp[-4].d, k);
-        else{
-	  List_Reset(s->TrsfPoints);
-	  for(int i = 0; i < k; i++){
-	    double d;
-	    List_Read(yyvsp[-1].l, i, &d);
-	    int j = (int)fabs(d);
-	    Vertex *v = FindPoint(j);
-	    if(!v)
-	      yymsg(WARNING, "Unknown point %d", j);
-	    else
-	      List_Add(s->TrsfPoints, &v);
-	  }
-	}
-      }
+      yymsg(GERROR, "Elliptic Surface is deprecated: use smoothed Transfinite instead");
       List_Delete(yyvsp[-1].l);
     ;
     break;}
 case 200:
-#line 2537 "Gmsh.y"
+#line 2515 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d);
       if(!v)
@@ -5445,7 +5423,7 @@ case 200:
     ;
     break;}
 case 201:
-#line 2564 "Gmsh.y"
+#line 2542 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5461,7 +5439,7 @@ case 201:
     ;
     break;}
 case 202:
-#line 2578 "Gmsh.y"
+#line 2556 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	double d;
@@ -5476,7 +5454,7 @@ case 202:
     ;
     break;}
 case 203:
-#line 2597 "Gmsh.y"
+#line 2575 "Gmsh.y"
 { 
       Surface *s = FindSurface((int)yyvsp[-1].d);
       if(s)
@@ -5484,7 +5462,7 @@ case 203:
     ;
     break;}
 case 204:
-#line 2603 "Gmsh.y"
+#line 2581 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-1].d);
       if(s)
@@ -5492,61 +5470,61 @@ case 204:
     ;
     break;}
 case 205:
-#line 2609 "Gmsh.y"
+#line 2587 "Gmsh.y"
 {
     ;
     break;}
 case 206:
-#line 2612 "Gmsh.y"
+#line 2590 "Gmsh.y"
 {
     ;
     break;}
 case 207:
-#line 2619 "Gmsh.y"
+#line 2597 "Gmsh.y"
 { 
       ReplaceAllDuplicates();
     ;
     break;}
 case 208:
-#line 2623 "Gmsh.y"
+#line 2601 "Gmsh.y"
 { 
       yymsg(GERROR, "Intersect is deprecated");
     ;
     break;}
 case 209:
-#line 2632 "Gmsh.y"
+#line 2610 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 210:
-#line 2633 "Gmsh.y"
+#line 2611 "Gmsh.y"
 { yyval.d = yyvsp[-1].d;           ;
     break;}
 case 211:
-#line 2634 "Gmsh.y"
+#line 2612 "Gmsh.y"
 { yyval.d = -yyvsp[0].d;          ;
     break;}
 case 212:
-#line 2635 "Gmsh.y"
+#line 2613 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 213:
-#line 2636 "Gmsh.y"
+#line 2614 "Gmsh.y"
 { yyval.d = !yyvsp[0].d;          ;
     break;}
 case 214:
-#line 2637 "Gmsh.y"
+#line 2615 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d;      ;
     break;}
 case 215:
-#line 2638 "Gmsh.y"
+#line 2616 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d;      ;
     break;}
 case 216:
-#line 2639 "Gmsh.y"
+#line 2617 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d;      ;
     break;}
 case 217:
-#line 2641 "Gmsh.y"
+#line 2619 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5555,247 +5533,247 @@ case 217:
     ;
     break;}
 case 218:
-#line 2647 "Gmsh.y"
+#line 2625 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d;  ;
     break;}
 case 219:
-#line 2648 "Gmsh.y"
+#line 2626 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d);  ;
     break;}
 case 220:
-#line 2649 "Gmsh.y"
+#line 2627 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d;      ;
     break;}
 case 221:
-#line 2650 "Gmsh.y"
+#line 2628 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d;      ;
     break;}
 case 222:
-#line 2651 "Gmsh.y"
+#line 2629 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d;     ;
     break;}
 case 223:
-#line 2652 "Gmsh.y"
+#line 2630 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d;     ;
     break;}
 case 224:
-#line 2653 "Gmsh.y"
+#line 2631 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d;     ;
     break;}
 case 225:
-#line 2654 "Gmsh.y"
+#line 2632 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d;     ;
     break;}
 case 226:
-#line 2655 "Gmsh.y"
+#line 2633 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d;     ;
     break;}
 case 227:
-#line 2656 "Gmsh.y"
+#line 2634 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d;     ;
     break;}
 case 228:
-#line 2657 "Gmsh.y"
+#line 2635 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d;  ;
     break;}
 case 229:
-#line 2658 "Gmsh.y"
+#line 2636 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 230:
-#line 2659 "Gmsh.y"
+#line 2637 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 231:
-#line 2660 "Gmsh.y"
+#line 2638 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 232:
-#line 2661 "Gmsh.y"
+#line 2639 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 233:
-#line 2662 "Gmsh.y"
+#line 2640 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 234:
-#line 2663 "Gmsh.y"
+#line 2641 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 235:
-#line 2664 "Gmsh.y"
+#line 2642 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 236:
-#line 2665 "Gmsh.y"
+#line 2643 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 237:
-#line 2666 "Gmsh.y"
+#line 2644 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 238:
-#line 2667 "Gmsh.y"
+#line 2645 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 239:
-#line 2668 "Gmsh.y"
+#line 2646 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 240:
-#line 2669 "Gmsh.y"
+#line 2647 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 241:
-#line 2670 "Gmsh.y"
+#line 2648 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 242:
-#line 2671 "Gmsh.y"
+#line 2649 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 243:
-#line 2672 "Gmsh.y"
+#line 2650 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 244:
-#line 2673 "Gmsh.y"
+#line 2651 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 245:
-#line 2674 "Gmsh.y"
+#line 2652 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 246:
-#line 2675 "Gmsh.y"
+#line 2653 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 247:
-#line 2676 "Gmsh.y"
+#line 2654 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 248:
-#line 2677 "Gmsh.y"
+#line 2655 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 249:
-#line 2678 "Gmsh.y"
+#line 2656 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 250:
-#line 2680 "Gmsh.y"
+#line 2658 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 251:
-#line 2681 "Gmsh.y"
+#line 2659 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 252:
-#line 2682 "Gmsh.y"
+#line 2660 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 253:
-#line 2683 "Gmsh.y"
+#line 2661 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 254:
-#line 2684 "Gmsh.y"
+#line 2662 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 255:
-#line 2685 "Gmsh.y"
+#line 2663 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 256:
-#line 2686 "Gmsh.y"
+#line 2664 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 257:
-#line 2687 "Gmsh.y"
+#line 2665 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 258:
-#line 2688 "Gmsh.y"
+#line 2666 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 259:
-#line 2689 "Gmsh.y"
+#line 2667 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 260:
-#line 2690 "Gmsh.y"
+#line 2668 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 261:
-#line 2691 "Gmsh.y"
+#line 2669 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 262:
-#line 2692 "Gmsh.y"
+#line 2670 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 263:
-#line 2693 "Gmsh.y"
+#line 2671 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 264:
-#line 2694 "Gmsh.y"
+#line 2672 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 265:
-#line 2695 "Gmsh.y"
+#line 2673 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 266:
-#line 2696 "Gmsh.y"
+#line 2674 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 267:
-#line 2697 "Gmsh.y"
+#line 2675 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 268:
-#line 2698 "Gmsh.y"
+#line 2676 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 269:
-#line 2699 "Gmsh.y"
+#line 2677 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 270:
-#line 2700 "Gmsh.y"
+#line 2678 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 271:
-#line 2709 "Gmsh.y"
+#line 2687 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 272:
-#line 2710 "Gmsh.y"
+#line 2688 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 273:
-#line 2711 "Gmsh.y"
+#line 2689 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 274:
-#line 2712 "Gmsh.y"
+#line 2690 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 275:
-#line 2713 "Gmsh.y"
+#line 2691 "Gmsh.y"
 { yyval.d = Get_GmshMajorVersion(); ;
     break;}
 case 276:
-#line 2714 "Gmsh.y"
+#line 2692 "Gmsh.y"
 { yyval.d = Get_GmshMinorVersion(); ;
     break;}
 case 277:
-#line 2715 "Gmsh.y"
+#line 2693 "Gmsh.y"
 { yyval.d = Get_GmshPatchVersion(); ;
     break;}
 case 278:
-#line 2720 "Gmsh.y"
+#line 2698 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[0].c;
@@ -5810,7 +5788,7 @@ case 278:
     ;
     break;}
 case 279:
-#line 2736 "Gmsh.y"
+#line 2714 "Gmsh.y"
 {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", yyvsp[-4].c, (int)yyvsp[-1].d) ;
@@ -5827,7 +5805,7 @@ case 279:
     ;
     break;}
 case 280:
-#line 2751 "Gmsh.y"
+#line 2729 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
@@ -5849,7 +5827,7 @@ case 280:
     ;
     break;}
 case 281:
-#line 2771 "Gmsh.y"
+#line 2749 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
@@ -5865,7 +5843,7 @@ case 281:
     ;
     break;}
 case 282:
-#line 2785 "Gmsh.y"
+#line 2763 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-1].c;
@@ -5880,7 +5858,7 @@ case 282:
     ;
     break;}
 case 283:
-#line 2798 "Gmsh.y"
+#line 2776 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-4].c;
@@ -5902,7 +5880,7 @@ case 283:
     ;
     break;}
 case 284:
-#line 2821 "Gmsh.y"
+#line 2799 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5922,7 +5900,7 @@ case 284:
     ;
     break;}
 case 285:
-#line 2839 "Gmsh.y"
+#line 2817 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5942,7 +5920,7 @@ case 285:
     ;
     break;}
 case 286:
-#line 2857 "Gmsh.y"
+#line 2835 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5962,7 +5940,7 @@ case 286:
     ;
     break;}
 case 287:
-#line 2875 "Gmsh.y"
+#line 2853 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5982,124 +5960,124 @@ case 287:
     ;
     break;}
 case 288:
-#line 2893 "Gmsh.y"
+#line 2871 "Gmsh.y"
 { 
       yyval.d = GetValue(yyvsp[-3].c, yyvsp[-1].d);
       Free(yyvsp[-3].c);
     ;
     break;}
 case 289:
-#line 2901 "Gmsh.y"
+#line 2879 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
     ;
     break;}
 case 290:
-#line 2905 "Gmsh.y"
+#line 2883 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
     ;
     break;}
 case 291:
-#line 2909 "Gmsh.y"
+#line 2887 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 292:
-#line 2913 "Gmsh.y"
+#line 2891 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
     ;
     break;}
 case 293:
-#line 2917 "Gmsh.y"
+#line 2895 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
     ;
     break;}
 case 294:
-#line 2924 "Gmsh.y"
+#line 2902 "Gmsh.y"
 { 
       yyval.v[0] = yyvsp[-9].d;  yyval.v[1] = yyvsp[-7].d;  yyval.v[2] = yyvsp[-5].d;  yyval.v[3] = yyvsp[-3].d; yyval.v[4] = yyvsp[-1].d;
     ;
     break;}
 case 295:
-#line 2928 "Gmsh.y"
+#line 2906 "Gmsh.y"
 { 
       yyval.v[0] = yyvsp[-7].d;  yyval.v[1] = yyvsp[-5].d;  yyval.v[2] = yyvsp[-3].d;  yyval.v[3] = yyvsp[-1].d; yyval.v[4] = 1.0;
     ;
     break;}
 case 296:
-#line 2932 "Gmsh.y"
+#line 2910 "Gmsh.y"
 {
       yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
     ;
     break;}
 case 297:
-#line 2936 "Gmsh.y"
+#line 2914 "Gmsh.y"
 {
       yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
     ;
     break;}
 case 298:
-#line 2943 "Gmsh.y"
+#line 2921 "Gmsh.y"
 {
     ;
     break;}
 case 299:
-#line 2946 "Gmsh.y"
+#line 2924 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 300:
-#line 2950 "Gmsh.y"
+#line 2928 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 301:
-#line 2957 "Gmsh.y"
+#line 2935 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(List_T*));
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 302:
-#line 2962 "Gmsh.y"
+#line 2940 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 303:
-#line 2970 "Gmsh.y"
+#line 2948 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 304:
-#line 2975 "Gmsh.y"
+#line 2953 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 305:
-#line 2979 "Gmsh.y"
+#line 2957 "Gmsh.y"
 {
       // creates an empty list
       yyval.l = List_Create(2, 1, sizeof(double));
     ;
     break;}
 case 306:
-#line 2984 "Gmsh.y"
+#line 2962 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 307:
-#line 2988 "Gmsh.y"
+#line 2966 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
       double *pd;
@@ -6110,7 +6088,7 @@ case 307:
     ;
     break;}
 case 308:
-#line 3000 "Gmsh.y"
+#line 2978 "Gmsh.y"
 { 
       yyval.l = List_Create(2, 1, sizeof(double)); 
       for(double d = yyvsp[-2].d; (yyvsp[-2].d < yyvsp[0].d) ? (d <= yyvsp[0].d) : (d >= yyvsp[0].d); (yyvsp[-2].d < yyvsp[0].d) ? (d += 1.) : (d -= 1.)) 
@@ -6118,7 +6096,7 @@ case 308:
     ;
     break;}
 case 309:
-#line 3006 "Gmsh.y"
+#line 2984 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double)); 
       if(!yyvsp[0].d || (yyvsp[-4].d < yyvsp[-2].d && yyvsp[0].d < 0) || (yyvsp[-4].d > yyvsp[-2].d && yyvsp[0].d > 0)){
@@ -6131,7 +6109,7 @@ case 309:
    ;
     break;}
 case 310:
-#line 3017 "Gmsh.y"
+#line 2995 "Gmsh.y"
 {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -6153,7 +6131,7 @@ case 310:
     ;
     break;}
 case 311:
-#line 3037 "Gmsh.y"
+#line 3015 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -6165,7 +6143,7 @@ case 311:
     ;
     break;}
 case 312:
-#line 3047 "Gmsh.y"
+#line 3025 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -6177,7 +6155,7 @@ case 312:
     ;
     break;}
 case 313:
-#line 3057 "Gmsh.y"
+#line 3035 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -6189,7 +6167,7 @@ case 313:
     ;
     break;}
 case 314:
-#line 3067 "Gmsh.y"
+#line 3045 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6208,7 +6186,7 @@ case 314:
     ;
     break;}
 case 315:
-#line 3084 "Gmsh.y"
+#line 3062 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6229,7 +6207,7 @@ case 315:
     ;
     break;}
 case 316:
-#line 3103 "Gmsh.y"
+#line 3081 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6255,7 +6233,7 @@ case 316:
     ;
     break;}
 case 317:
-#line 3127 "Gmsh.y"
+#line 3105 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6283,26 +6261,26 @@ case 317:
     ;
     break;}
 case 318:
-#line 3156 "Gmsh.y"
+#line 3134 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 319:
-#line 3161 "Gmsh.y"
+#line 3139 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 320:
-#line 3165 "Gmsh.y"
+#line 3143 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 321:
-#line 3169 "Gmsh.y"
+#line 3147 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	double d;
@@ -6313,19 +6291,19 @@ case 321:
     ;
     break;}
 case 322:
-#line 3182 "Gmsh.y"
+#line 3160 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 323:
-#line 3186 "Gmsh.y"
+#line 3164 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 324:
-#line 3198 "Gmsh.y"
+#line 3176 "Gmsh.y"
 {
       int flag;
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
@@ -6334,7 +6312,7 @@ case 324:
     ;
     break;}
 case 325:
-#line 3205 "Gmsh.y"
+#line 3183 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -6355,13 +6333,13 @@ case 325:
     ;
     break;}
 case 326:
-#line 3227 "Gmsh.y"
+#line 3205 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 327:
-#line 3231 "Gmsh.y"
+#line 3209 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -6375,26 +6353,26 @@ case 327:
     ;
     break;}
 case 328:
-#line 3246 "Gmsh.y"
+#line 3224 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 329:
-#line 3251 "Gmsh.y"
+#line 3229 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 330:
-#line 3258 "Gmsh.y"
+#line 3236 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 331:
-#line 3262 "Gmsh.y"
+#line 3240 "Gmsh.y"
 {
       yyval.c = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -6404,7 +6382,7 @@ case 331:
     ;
     break;}
 case 332:
-#line 3270 "Gmsh.y"
+#line 3248 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
       strcpy(yyval.c, yyvsp[-3].c);
@@ -6414,7 +6392,7 @@ case 332:
     ;
     break;}
 case 333:
-#line 3278 "Gmsh.y"
+#line 3256 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6430,7 +6408,7 @@ case 333:
     ;
     break;}
 case 334:
-#line 3292 "Gmsh.y"
+#line 3270 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6446,13 +6424,13 @@ case 334:
     ;
     break;}
 case 335:
-#line 3306 "Gmsh.y"
+#line 3284 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 336:
-#line 3310 "Gmsh.y"
+#line 3288 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
@@ -6473,7 +6451,7 @@ case 336:
     ;
     break;}
 case 337:
-#line 3329 "Gmsh.y"
+#line 3307 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6497,7 +6475,7 @@ case 337:
     ;
     break;}
 case 338:
-#line 3351 "Gmsh.y"
+#line 3329 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6742,7 +6720,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 3374 "Gmsh.y"
+#line 3352 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 0c0dec61ec..b49f1b260e 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.242 2006-11-27 17:45:16 geuzaine Exp $
+// $Id: Gmsh.y,v 1.243 2006-11-27 19:23:03 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -2508,29 +2508,7 @@ Transfinite :
     }
   | tElliptic tSurface '{' FExpr '}' tAFFECT ListOfDouble tEND
     {
-      Surface *s = FindSurface((int)$4);
-      if(!s)
-	yymsg(WARNING, "Unknown surface %d", (int)$4);
-      else{
-        s->Method = ELLIPTIC;
-        int k = List_Nbr($7);
-        if(k != 4)
-	  yymsg(GERROR, "Wrong definition of Elliptic Surface %d: "
-		"%d points instead of 4" , (int)$4, k);
-        else{
-	  List_Reset(s->TrsfPoints);
-	  for(int i = 0; i < k; i++){
-	    double d;
-	    List_Read($7, i, &d);
-	    int j = (int)fabs(d);
-	    Vertex *v = FindPoint(j);
-	    if(!v)
-	      yymsg(WARNING, "Unknown point %d", j);
-	    else
-	      List_Add(s->TrsfPoints, &v);
-	  }
-	}
-      }
+      yymsg(GERROR, "Elliptic Surface is deprecated: use smoothed Transfinite instead");
       List_Delete($7);
     }
   | tTransfinite tVolume '{' FExpr '}' tAFFECT ListOfDouble tEND
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 0eab956ea8..8c76c1a429 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.281 2006-11-27 17:45:18 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.282 2006-11-27 19:23:03 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -727,7 +727,7 @@ char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.281 2006-11-27 17:45:18 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.282 2006-11-27 19:23:03 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
diff --git a/benchmarks/2d/elliptic.geo b/benchmarks/2d/elliptic.geo
index af85e783dd..e3928a890d 100644
--- a/benchmarks/2d/elliptic.geo
+++ b/benchmarks/2d/elliptic.geo
@@ -24,7 +24,9 @@ Translate {0.2,0.0,0.0} {
 Transfinite Line{8,10} = 30 ;
 Transfinite Line{9,11} = 30 Using Progression 1.08;
 
-Elliptic Surface{7} = {6,10,14,5};
+Transfinite Surface{7} = {6,10,14,5};
 Recombine Surface{7};
 
 Extrude Surface {7, {0.0,0.0,0.1}}{Layers{10,1,1};Recombine;};
+
+Mesh.Smoothing  = 30;
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index f2fc70c6e5..e691ae4a24 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -1,5 +1,5 @@
 \input texinfo.tex @c -*-texinfo-*-
-@c $Id: gmsh.texi,v 1.218 2006-11-27 05:16:31 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.219 2006-11-27 19:23:04 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 @c
@@ -517,8 +517,8 @@ surfaces;
 @item
 Gmsh is not primarily a structured mesh generator: no automatic
 quadrilateral or hexahedral meshing algorithm is provided. If you want
-quadrangles, you have to use transfinite, elliptic or extruded meshes or
-recombine unstructured triangular meshes. For hexahedra, your only choice is
+quadrangles, you have to use transfinite or extruded meshes or recombine
+unstructured triangular meshes. For hexahedra, your only choice is
 transfinite or extruded meshes;
 @item
 Gmsh is not a multi-bloc generator: all meshes produced by Gmsh are
@@ -1853,12 +1853,12 @@ and quadrangles (when @code{Recombine Surface} is used: see
 @ref{Miscellaneous mesh commands}). The 3D unstructured algorithms only
 generate tetrahedra.
 
-The 2D @emph{structured} algorithms (transfinite, elliptic and extrusion)
-generate triangles by default, but quadrangles can be obtained by using the
+The 2D @emph{structured} algorithms (transfinite and extrusion) generate
+triangles by default, but quadrangles can be obtained by using the
 @code{Recombine} commands (see @ref{Structured grids}, and
-@ref{Miscellaneous mesh commands}). The 3D structured algorithms generate
-tetrahedra, hexahedra, prisms and pyramids, depending on the type of the
-surface meshes they are based on.
+@ref{Miscellaneous mesh commands}). The 3D structured algorithms
+generate tetrahedra, hexahedra, prisms and pyramids, depending on the
+type of the surface meshes they are based on.
 
 @c todo: explain what happens if we have a degenerate geometry (incorrect
 @c holes with surfaces in contact with the exterior shell, intersecting
@@ -2011,8 +2011,6 @@ numbers are listed in @var{expression-list}. The new value is given by
 @cindex Mesh, extrusion
 @cindex Transfinite, mesh
 @cindex Mesh, transfinite
-@cindex Elliptic, mesh
-@cindex Mesh, elliptic
 
 @ftable @code
 @item Extrude @{ @var{expression-list} @} @{ @var{extrude-list} @var{layers} @}
@@ -2082,14 +2080,6 @@ defines the ordering and orientation of the mesh elements, and should thus
 follow the node ordering for prisms or hexahedra given in @ref{Gmsh node
 ordering}.
 
-@item Elliptic Surface @{ @var{expression} @} = @{ @var{expression-list} @};
-Selects the surface @var{expression} to be meshed with the 2D elliptic
-algorithm (the surface can only have four sides). The @var{expression-list}
-should contain the identification numbers of the points on the boundary of
-the surface. The ordering of these point numbers defines the ordering and
-orientation of the mesh elements, and should thus follow the node ordering
-for triangles or quadrangles given in @ref{Gmsh node ordering}.
-
 @end ftable
 
 @c .........................................................................
-- 
GitLab