diff --git a/benchmarks/2d/foil_bernhard.geo b/benchmarks/2d/foil_bernhard.geo
new file mode 100644
index 0000000000000000000000000000000000000000..bdd9e83591e11ecb3812092f35b9706dcb1a0a9d
--- /dev/null
+++ b/benchmarks/2d/foil_bernhard.geo
@@ -0,0 +1,219 @@
+//Gmesh input File created by Gmeshgen.pl
+//Inputfile was: foil_e.new
+
+//foil_e with first dod added
+
+Point(1) = {0.9359327875882, -0.348543553581827, 0, 0.00926728261397759};
+Point(2) = {0.928114977413582, -0.343567172253897, 0, 0.00936736544525385};
+Point(3) = {0.919793312627437, -0.339030011153759, 0, 0.0146875475762159};
+Point(4) = {0.901731619523067, -0.330651497992155, 0, 0.0199287102224063};
+Point(5) = {0.883139803094809, -0.323373248926015, 0, 0.0199597268072343};
+Point(6) = {0.864330801513522, -0.316696513610415, 0, 0.0199593386113302};
+Point(7) = {0.845278420716531, -0.310723485465271, 0, 0.0199966767341584};
+Point(8) = {0.825964049786336, -0.305406664915849, 0, 0.0258329118663419};
+Point(9) = {0.795211947891967, -0.297967873332412, 0, 0.0315991077698568};
+Point(10) = {0.764347451818138, -0.291356422845708, 0, 0.0258172578168972};
+Point(11) = {0.744626201002564, -0.287613868485117, 0, 0.0200557665168294};
+Point(12) = {0.724886304573388, -0.284162471189041, 0, 0.0271461881818962};
+Point(13) = {0.69116481868521, -0.278151166336926, 0, 0.0318931378133309};
+Point(14) = {0.662026069368709, -0.273332891865129, 0, 0.0249223149264925};
+Point(15) = {0.642013604498078, -0.269865922278254, 0, 0.0205097086275018};
+Point(16) = {0.621610857030059, -0.266318392341861, 0, 0.0284656239628679};
+Point(17) = {0.585963558674197, -0.25988797892692, 0, 0.0317113823168865};
+Point(18) = {0.559251391759666, -0.254753611108236, 0, 0.0237856555059461};
+Point(19) = {0.539302197276391, -0.250628012194069, 0, 0.0201455390628506};
+Point(20) = {0.5198591014454, -0.246290843220131, 0, 0.0199210659767429};
+Point(21) = {0.500481171265563, -0.241665678900468, 0, 0.0202627323931576};
+Point(22) = {0.480532042698889, -0.236508422942135, 0, 0.0264853264379584};
+Point(23) = {0.449376941569323, -0.227728398919969, 0, 0.0322983648231686};
+Point(24) = {0.418528866527625, -0.218388168372257, 0, 0.0266766700633718};
+Point(25) = {0.398393989653995, -0.212002066967497, 0, 0.0215078063545241};
+Point(26) = {0.377589322529617, -0.205186021805505, 0, 0.029823722761522};
+Point(27) = {0.341862165119822, -0.19297654273656, 0, 0.0322613582857859};
+Point(28) = {0.31665064490278, -0.183980868590595, 0, 0.0233504462218875};
+Point(29) = {0.297942383665753, -0.177101211178704, 0, 0.0222947628252582};
+Point(30) = {0.274879795307499, -0.168378884042901, 0, 0.0318086526590736};
+Point(31) = {0.238623598599262, -0.154113317099911, 0, 0.0309695943042226};
+Point(32) = {0.217375609666903, -0.145362982598803, 0, 0.0216940200401716};
+Point(33) = {0.198615443888708, -0.13732434516385, 0, 0.0260980477607313};
+Point(34) = {0.169608740654052, -0.124321152535931, 0, 0.032532156598543};
+Point(35) = {0.139509397330839, -0.11012434310305, 0, 0.0273186200365896};
+Point(36) = {0.120393619034701, -0.100591428416028, 0, 0.0207962496384824};
+Point(37) = {0.102485704966114, -0.0911722403229753, 0, 0.0204613653949275};
+Point(38) = {0.0843085108384768, -0.0812902662291091, 0, 0.0203821595528047};
+Point(39) = {0.0669222430512572, -0.0712481371116766, 0, 0.0199894765364316};
+Point(40) = {0.0501215109839633, -0.0605642987064651, 0, 0.0199048339860836};
+Point(41) = {0.0337822763409929, -0.0491902072338127, 0, 0.0198822400727737};
+Point(42) = {0.0182682429803414, -0.036761290519787, 0, 0.020028059882027};
+Point(43) = {0.0044076929196071, -0.021957385503917, 0, 0.0186018142701722};
+Point(44) = {-0.000545, -0.004665, 0, 0.0174138223878821};
+Point(45) = {0.00802811738685041, 0.012681571860643, 0, 0.0190579337371557};
+Point(46) = {0.0237952543749791, 0.024667087724548, 0, 0.0195780565499709};
+Point(47) = {0.0424947288298432, 0.0312625806796818, 0, 0.0197615832379809};
+Point(48) = {0.0620561415099308, 0.0345759324570624, 0, 0.0200301488483181};
+Point(49) = {0.0823277501897034, 0.0355237848390759, 0, 0.0206628478249333};
+Point(50) = {0.103379807522397, 0.0349855032513773, 0, 0.0205991384034411};
+Point(51) = {0.123474008661671, 0.0334541410014759, 0, 0.0201394062533854};
+Point(52) = {0.143471123268731, 0.0311036044011568, 0, 0.0202761075806219};
+Point(53) = {0.163674821009299, 0.0281271492542872, 0, 0.0202149424587974};
+Point(54) = {0.183404953717206, 0.0247897481973451, 0, 0.0232901150349838};
+Point(55) = {0.209481411561047, 0.0196729139017771, 0, 0.0312100576866921};
+Point(56) = {0.244446696962101, 0.0117445810902932, 0, 0.0286832234538724};
+Point(57) = {0.265325470454963, 0.00654468793358354, 0, 0.0207334406268184};
+Point(58) = {0.284610938598925, 0.0014326494263408, 0, 0.0247858400722505};
+Point(59) = {0.313115619433306, -0.00662547277069381, 0, 0.0315763212379621};
+Point(60) = {0.345209121186304, -0.0163470164534945, 0, 0.0269595988553551};
+Point(61) = {0.364623795903282, -0.0225687358778646, 0, 0.0201762380960724};
+Point(62) = {0.383560899703301, -0.028895459361713, 0, 0.0263768059081484};
+Point(63) = {0.414499824570811, -0.039753767853987, 0, 0.0314815669366757};
+Point(64) = {0.442803366622299, -0.0502188348099153, 0, 0.0251907852911001};
+Point(65) = {0.461657927737907, -0.0574855461069077, 0, 0.0202813954602051};
+Point(66) = {0.480567718212488, -0.0650240283657424, 0, 0.0345689190526605};
+Point(67) = {0.525476159382051, -0.0840801690162847, 0, 0.0509161357722141};
+Point(68) = {0.573569760210408, -0.106502115497568, 0, 0.0377704634887952};
+Point(69) = {0.593641185590719, -0.116637208970882, 0, 0.0215545710347929};
+Point(70) = {0.611853135692119, -0.12632082614438, 0, 0.0232824630008295};
+Point(71) = {0.6345362820689, -0.138905648915796, 0, 0.0245691146248024};
+Point(72) = {0.654607472593212, -0.150541318499709, 0, 0.0216746077040628};
+Point(73) = {0.671877149041675, -0.160924144101017, 0, 0.020039776040139};
+Point(74) = {0.688829038241941, -0.171404082925965, 0, 0.0199313326257925};
+Point(75) = {0.705666443697942, -0.182073982104933, 0, 0.0203483985919353};
+Point(76) = {0.723082307259842, -0.193380043942776, 0, 0.0208984345604876};
+Point(77) = {0.740627042628023, -0.204981072508691, 0, 0.0205022842167705};
+Point(78) = {0.757227109479332, -0.216084825681715, 0, 0.0199488079755526};
+Point(79) = {0.773721081148063, -0.22726569440398, 0, 0.019930493258262};
+Point(80) = {0.790139826510799, -0.238571517383188, 0, 0.0199906905194793};
+Point(81) = {0.806605436325771, -0.250006187237882, 0, 0.0200511656312841};
+Point(82) = {0.823045171736949, -0.261493891349264, 0, 0.0200019407150932};
+Point(83) = {0.839374748026521, -0.272951398941841, 0, 0.0199407431580142};
+Point(84) = {0.855684671056675, -0.284411047257735, 0, 0.0204326841823021};
+Point(85) = {0.87281166103206, -0.296445040214211, 0, 0.0209959263379308};
+Point(86) = {0.890043381875916, -0.308552188117086, 0, 0.0204969709593783};
+Point(87) = {0.906283957295287, -0.320111655031399, 0, 0.0199342952520923};
+Point(88) = {0.922646453893173, -0.33149873913958, 0, 0.0200934255210673};
+Point(89) = {0.939873146133408, -0.342174052677162, 0, 0.0107766691144685};
+Point(90) = {0.939962, -0.344333, 0, 0.00209496573682432};
+Point(91) = {0.940097, -0.346358, 0, 0.00197302185745622};
+Point(92) = {0.939468, -0.348248, 0, 0.00189612743506337};
+Point(93) = {0.938446, -0.349772, 0, 0.00183495504032115};
+Point(94) = {30, 15, 0, 5};
+Point(95) = {-15, 15, 0, 5};
+Point(96) = {-15, -15, 0, 5};
+Point(97) = {30, -15, 0, 5};
+//Additional stearing triangles
+Point(98) = {26, 3.2, 0, 1.5};
+Point(99) = {24.5, 3.2, 0, 1.5};
+Point(100) = {26, 4.7, 0, 1.5};
+Point(101) = {26, -1.3, 0, 1.5};
+Point(102) = {24.5, -1.3, 0, 1.5};
+Point(103) = {26, -2.8, 0, 1.5};
+
+//now the list of lines
+Line(1) = {2,1};
+Line(2) = {3,2};
+Line(3) = {4,3};
+Line(4) = {5,4};
+Line(5) = {6,5};
+Line(6) = {7,6};
+Line(7) = {8,7};
+Line(8) = {9,8};
+Line(9) = {10,9};
+Line(10) = {11,10};
+Line(11) = {12,11};
+Line(12) = {13,12};
+Line(13) = {14,13};
+Line(14) = {15,14};
+Line(15) = {16,15};
+Line(16) = {17,16};
+Line(17) = {18,17};
+Line(18) = {19,18};
+Line(19) = {20,19};
+Line(20) = {21,20};
+Line(21) = {22,21};
+Line(22) = {23,22};
+Line(23) = {24,23};
+Line(24) = {25,24};
+Line(25) = {26,25};
+Line(26) = {27,26};
+Line(27) = {28,27};
+Line(28) = {29,28};
+Line(29) = {30,29};
+Line(30) = {31,30};
+Line(31) = {32,31};
+Line(32) = {33,32};
+Line(33) = {34,33};
+Line(34) = {35,34};
+Line(35) = {36,35};
+Line(36) = {37,36};
+Line(37) = {38,37};
+Line(38) = {39,38};
+Line(39) = {40,39};
+Line(40) = {41,40};
+Line(41) = {42,41};
+Line(42) = {43,42};
+Line(43) = {44,43};
+Line(44) = {45,44};
+Line(45) = {46,45};
+Line(46) = {47,46};
+Line(47) = {48,47};
+Line(48) = {49,48};
+Line(49) = {50,49};
+Line(50) = {51,50};
+Line(51) = {52,51};
+Line(52) = {53,52};
+Line(53) = {54,53};
+Line(54) = {55,54};
+Line(55) = {56,55};
+Line(56) = {57,56};
+Line(57) = {58,57};
+Line(58) = {59,58};
+Line(59) = {60,59};
+Line(60) = {61,60};
+Line(61) = {62,61};
+Line(62) = {63,62};
+Line(63) = {64,63};
+Line(64) = {65,64};
+Line(65) = {66,65};
+Line(66) = {67,66};
+Line(67) = {68,67};
+Line(68) = {69,68};
+Line(69) = {70,69};
+Line(70) = {71,70};
+Line(71) = {72,71};
+Line(72) = {73,72};
+Line(73) = {74,73};
+Line(74) = {75,74};
+Line(75) = {76,75};
+Line(76) = {77,76};
+Line(77) = {78,77};
+Line(78) = {79,78};
+Line(79) = {80,79};
+Line(80) = {81,80};
+Line(81) = {82,81};
+Line(82) = {83,82};
+Line(83) = {84,83};
+Line(84) = {85,84};
+Line(85) = {86,85};
+Line(86) = {87,86};
+Line(87) = {88,87};
+Line(88) = {89,88};
+Line(89) = {90,89};
+Line(90) = {91,90};
+Line(91) = {92,91};
+Line(92) = {93,92};
+Line(93) = {1,93};
+Line(94) = {95,94};
+Line(95) = {96,95};
+Line(96) = {97,96};
+Line(97) = {94,97};
+Line(98) = {99,98};
+Line(99) = {100,99};
+Line(100) = {98,100};
+Line(101) = {102,101};
+Line(102) = {103,102};
+Line(103) = {101,103};
+Line Loop(104) = {96,95,94,97};
+Line Loop(105) = {102,101,103};
+Line Loop(106) = {98,100,99};
+Line Loop(107) = {66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67};
+Plane Surface(108) = {104,105,106,107};
diff --git a/benchmarks/2d/many_holes.geo b/benchmarks/2d/many_holes.geo
new file mode 100644
index 0000000000000000000000000000000000000000..2b8c9c9c941105e8d23e87de9e9cd9da6add1773
--- /dev/null
+++ b/benchmarks/2d/many_holes.geo
@@ -0,0 +1,48 @@
+Point(1) = {0,0,0,50};
+Point(2) = {1473.175,0,0,50};
+Point(3) = {0,1473.75,0,50};
+
+Circle (1) = {2,1,3};
+Line (2) = {1,2};
+Line (3) = {1,3};
+
+Line Loop(10) = {1,-3,2};
+
+//Définition d'une fonction créatrice d'un cercle
+
+Function TubeHole
+
+ p1 = newp; Point(p1) = {x,y,0,8};
+ p2 = newp; Point(p2) = {x+r,y,0,8};
+ p3 = newp; Point(p3) = {x,y+r,0,8};
+ p4 = newp; Point(p4) = {x-0.71*r,y-0.71*r,0,8};
+
+c1 = newreg; Circle(c1) = {p2,p1,p3};
+c2 = newreg; Circle(c2) = {p3,p1,p4};
+c3 = newreg; Circle(c3) = {p4,p1,p2};
+
+Line Loop(10+K) = {c1,c2,c3};
+
+
+Return
+
+r=11.3;
+y=0;
+K=0;
+
+For J In {1:46}
+ x=0;
+ y+=31.353;
+ For I In {1:46}
+  x+=31.353;
+  If ((x*x+y*y)<1960000)
+   K+=1;
+   Call TubeHole;
+  EndIf
+ EndFor
+EndFor
+
+Plane Surface (20) = {10,11:(10+K)};
+
+//Physical Surface (30) = {20};
+
diff --git a/benchmarks/3d/inducteur_cenaero.geo b/benchmarks/3d/inducteur_cenaero.geo
new file mode 100644
index 0000000000000000000000000000000000000000..5ce27e1aed49d088626c692538ffe2694456451c
--- /dev/null
+++ b/benchmarks/3d/inducteur_cenaero.geo
@@ -0,0 +1,100 @@
+//Core1
+
+Point(1) = {0, 0, 0, 2};Point(100) = {0, 0, 1, 2};
+Point(2) = {0, 5, 1, 2};
+Point(3) = {5, 0, 1, 2};
+Point(4) = {-5, 0, 1, 2};
+Point(5) = {0, -5, 1, 2};
+Point(6) = {0, 6, 0, 2};
+Point(7) = {6, 0, 0, 2};
+Point(8) = {-6, 0, 0, 2};
+Point(9) = {0, -6, 0, 2};
+Point(10) = {0, 8, 0, 2};
+Point(11) = {8, 0, 0, 2};
+Point(12) = {-8, 0, 0, 2};
+Point(13) = {0, -8, 0, 2};
+Circle(1) = {7,1,6};
+Circle(2) = {6,1,8};
+Circle(3) = {8,1,9};
+Circle(4) = {9,1,7};
+Circle(5) = {11,1,10};
+Circle(6) = {10,1,12};
+Circle(7) = {12,1,13};
+Circle(8) = {13,1,11};
+Line Loop(9) = {1,2,3,4};
+Line Loop(10) = {5,6,7,8};
+Extrude Line {2, {0.0,0.0,10}};
+Extrude Line {3, {0.0,0.0,10}};
+Extrude Line {4, {0.0,0.0,10}};
+Extrude Line {1, {0.0,0.0,10}};
+Extrude Line {5, {0.0,0.0,10}};
+Extrude Line {6, {0.0,0.0,10}};
+Extrude Line {7, {0.0,0.0,10}};
+Extrude Line {8, {0.0,0.0,10}};
+Line Loop(43) = {31,35,39,27};
+Line Loop(44) = {11,15,19,23};
+Plane Surface(45) = {43,44};
+Plane Surface(46) = {10,9};
+
+Surface Loop(47) = {34,-46,30,45,38,42,-26,-14,-18,-22};
+Volume(100000) = {47};
+
+//Core2
+
+Circle(100001) = {3,100,2};
+Circle(100002) = {2,100,4};
+Circle(100003) = {4,100,5};
+Circle(100004) = {5,100,3};
+Extrude Line {100003, {0.0,0.0,15}};
+Extrude Line {100004, {0.0,0.0,15}};
+Extrude Line {100001, {0.0,0.0,15}};
+Extrude Line {100002, {0.0,0.0,15}};
+Line Loop(100021) = {100013,100017,100005,100009};
+Plane Surface(100022) = {100021};
+Line Loop(100023) = {100004,100001,100002,100003};
+Plane Surface(100024) = {100023};
+
+Surface Loop(100025) = {100022,100016,-100024,100012,100008,100020};
+Volume(100026) = {100025};
+
+//Air
+
+Point(128) = {20,0,0,2};
+Point(129) = {-20,0,0,2};
+Point(130) = {0,20,0,2};
+Point(131) = {0,-20,0,2};
+Point(132) = {0,0,20,2};
+Point(133) = {0,0,-20,2};
+Circle(100027) = {128,1,130};
+Circle(100028) = {130,1,129};
+Circle(100029) = {129,1,131};
+Circle(100030) = {131,1,128};
+Circle(100031) = {130,1,132};
+Circle(100032) = {132,1,131};
+Circle(100033) = {130,1,133};
+Circle(100034) = {133,1,131};
+Circle(100035) = {129,1,132};
+Circle(100036) = {132,1,128};
+Circle(100037) = {128,1,133};
+Circle(100038) = {133,1,129};
+
+Line Loop(100039) = {100036,100027,100031};
+Ruled Surface(100040) = {100039};
+Line Loop(100041) = {100031,-100035,-100028};
+Ruled Surface(100042) = {100041};
+Line Loop(100043) = {100035,100032,-100029};
+Ruled Surface(100044) = {100043};
+Line Loop(100045) = {100032,100030,-100036};
+Ruled Surface(100046) = {100045};
+Line Loop(100047) = {100028,-100038,-100033};
+Ruled Surface(100048) = {100047};
+Line Loop(100049) = {100033,-100037,100027};
+Ruled Surface(100050) = {100049};
+Line Loop(100051) = {100037,100034,100030};
+Ruled Surface(100052) = {100051};
+Line Loop(100053) = {100034,-100029,-100038};
+Ruled Surface(100054) = {100053};
+
+Surface Loop(100055) = {100042,-100040,-100046,100044,-100054,100052,100050,100048};
+
+Volume(100056) = {100055,47,100025};
diff --git a/benchmarks/3d/plate_extrude.geo b/benchmarks/3d/plate_extrude.geo
new file mode 100644
index 0000000000000000000000000000000000000000..7627d5157b579bbc084b64ded007d3482b12322a
--- /dev/null
+++ b/benchmarks/3d/plate_extrude.geo
@@ -0,0 +1,22 @@
+// This works fine; examine memory usage, though...
+
+// Grosseur maille (mm)
+lc=1. ;
+// def. des points (par ex. zmax - zmin = hauteur passage, zmin position sortie, etc)
+xmin = -260. ;
+xmax = 302. ;
+ymin = -75. ;
+ymax = 69. ;
+zmin = -184. ;
+zmax = -180. ;
+Point (1) = {xmin,ymin,zmin,lc} ;
+Point (2) = {xmax,ymin,zmin,lc} ;
+Point (3) = {xmax,ymax,zmin,lc} ;
+Point (4) = {xmin,ymax,zmin,lc} ;
+Line(1) = {1,2} ;
+Line(2) = {2,3} ;
+Line(3) = {3,4} ;
+Line(4) = {4,1} ;
+Line Loop(23) = {3,4,1,2} ;
+Plane Surface(24)={23} ;
+Extrude Surface{24, {0,0,zmax-zmin}} {Layers{3,1};};
diff --git a/benchmarks/3d/plate_notextrude.geo b/benchmarks/3d/plate_notextrude.geo
new file mode 100644
index 0000000000000000000000000000000000000000..9a3e5b0e0f548f8ae248ea198b4610558b80bbb7
--- /dev/null
+++ b/benchmarks/3d/plate_notextrude.geo
@@ -0,0 +1,52 @@
+// Grosseur maille (mm)
+lc=1. ;
+// def. des points (par ex. zmax - zmin = hauteur passage, zmin position sortie, etc)
+xmin = -260. ;
+xmax = 302. ;
+ymin = -75. ;
+ymax = 69. ;
+zmin = -184. ;
+zmax = -180. ;
+// def du parallelipipede:
+// (xmin, ymin, zmin)
+// (xmax, ymin, zmin)
+// (xmax, ymax, zmin)
+//( xmin, ymax, zmin)
+// (xmin, ymin, zpass)
+// (xmax, ymin, zpass)
+// (xmax, ymax, zpass)
+//( xmin, ymax, zpass)
+Point (1) = {xmin,ymin,zmin,lc} ;
+Point (2) = {xmax,ymin,zmin,lc} ;
+Point (3) = {xmax,ymax,zmin,lc} ;
+Point (4) = {xmin,ymax,zmin,lc} ;
+Point (5) = {xmin,ymin,zmax,lc} ;
+Point (6) = {xmax,ymin,zmax,lc} ;
+Point (7) = {xmax,ymax,zmax,lc} ;
+Point (8) = {xmin,ymax,zmax,lc} ;
+Line(1) = {1,2} ;
+Line(2) = {2,3} ;
+Line(3) = {3,4} ;
+Line(4) = {4,1} ;
+Line(5) = {2,6} ;
+Line(6) = {6,7} ;
+Line(7) = {7,3} ;
+Line(8) = {5,6} ;
+Line(9) = {7,8} ;
+Line(10) = {1,5} ;
+Line(11) = {4,8} ;
+Line(12) = {5,8} ;
+Line Loop(13) = {1,5,-8,-10} ;
+Plane Surface(14)={13} ;
+Line Loop(15) = {-5,2,-7,-6} ;
+Plane Surface(16)={15} ;
+Line Loop(17) = {-9,7,3,11} ;
+Plane Surface(18)={17} ;
+Line Loop(19) = {-4,11,-12,-10} ;
+Plane Surface(20)={19} ;
+Line Loop(21) = {9,-12,8,6} ;
+Plane Surface(22)={21} ;
+Line Loop(23) = {3,4,1,2} ;
+Plane Surface(24)={23} ;
+Surface Loop(25)={-14,16,18,20,22,24};
+Volume (26)={25};
\ No newline at end of file
diff --git a/benchmarks/misc/adaptive_view.pos.gz b/benchmarks/misc/adaptive_view.pos.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6b215b5b127a2399a501198302e4dc45e0855a17
Binary files /dev/null and b/benchmarks/misc/adaptive_view.pos.gz differ