diff --git a/benchmarks/2d/ruled_on_sphere.geo b/benchmarks/2d/ruled_on_sphere.geo
new file mode 100644
index 0000000000000000000000000000000000000000..1e9f3203575d55648e9889febfa8423c095ed1d9
--- /dev/null
+++ b/benchmarks/2d/ruled_on_sphere.geo
@@ -0,0 +1,281 @@
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+size = 5;
+
+R=315.0/2.0; //Radius
+
+Point(0)  = {0, 0, 0, size};
+
+// Blende C1 ==============================
+
+C1Psi = Pi/2;
+C1Phi = Pi;
+alC1 = Asin(33.5/2.0/R);
+
+x1=R*Cos(alC1)*Sin(C1Psi)*Cos(C1Phi);
+y1=R*Cos(alC1)*Sin(C1Psi)*Sin(C1Phi);
+z1=R*Cos(alC1)*Cos(C1Psi);
+
+Point(100)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(C1Psi+alC1)*Cos(C1Phi);
+y2 = R*Sin(C1Psi+alC1)*Sin(C1Phi);
+z2 = R*Cos(C1Psi+alC1);
+
+Point(200)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {  Point{200} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{200} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {  Point{200} ; }}
+
+Circle(1) = {201,100,203};
+Circle(2) = {203,100,202};
+Circle(3) = {202,100,200};
+Circle(4) = {200,100,201};
+
+// Blende C01 ==============================
+
+C01Psi = Pi/2;
+C01Phi = Pi/2;
+alC01 = Asin(7.5/2.0/R);
+
+x1=R*Cos(alC01)*Sin(C01Psi)*Cos(C01Phi);
+y1=R*Cos(alC01)*Sin(C01Psi)*Sin(C01Phi);
+z1=R*Cos(alC01)*Cos(C01Psi);
+
+Point(300)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(C01Psi+alC01)*Cos(C01Phi);
+y2 = R*Sin(C01Psi+alC01)*Sin(C01Phi);
+z2 = R*Cos(C01Psi+alC01);
+
+Point(400)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {  Point{400} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{400} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {  Point{400} ; }}
+
+Circle(5) = {401,300,403};
+Circle(6) = {403,300,402};
+Circle(7) = {402,300,400};
+Circle(8) = {400,300,401};
+
+// Port1 ==============================
+
+P1Psi =  Asin((20.0+34.0)/R);// noch nachmessen!
+P1Phi = 0;
+alP1 = Asin(34.0/2.0/R);
+
+x1=R*Cos(alP1)*Sin(P1Psi)*Cos(P1Phi);
+y1=R*Cos(alP1)*Sin(P1Psi)*Sin(P1Phi);
+z1=R*Cos(alP1)*Cos(P1Psi);
+
+Point(500)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(P1Psi+alP1)*Cos(P1Phi);
+y2 = R*Sin(P1Psi+alP1)*Sin(P1Phi);
+z2 = R*Cos(P1Psi+alP1);
+
+
+Point(600)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {  Point{600} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{600} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {  Point{600} ; }}
+
+Circle(9) = {601,500,603};
+Circle(10) = {603,500,602};
+Circle(11) = {602,500,600};
+Circle(12) = {600,500,601};
+
+// Port2 ==============================
+
+P2Psi =  0;//
+P2Phi = 0;
+alP2 = Asin(34.0/2.0/R);
+
+x1=R*Cos(alP2)*Sin(P2Psi)*Cos(P2Phi);
+y1=R*Cos(alP2)*Sin(P2Psi)*Sin(P2Phi);
+z1=R*Cos(alP2)*Cos(P2Psi);
+
+Point(700)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(P2Psi+alP2)*Cos(P2Phi);
+y2 = R*Sin(P2Psi+alP2)*Sin(P2Phi);
+z2 = R*Cos(P2Psi+alP2);
+
+Point(800)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/4} {Duplicata {   Point{800} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {   Point{800} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi*3/4} {Duplicata {  Point{800} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {     Point{800} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi*3/4} {Duplicata {  Point{800} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{800} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/4} {Duplicata {  Point{800} ; }}
+
+//Circle(120) =  {800,700,801};
+Circle(130) =  {801,700,803};
+//Circle(140) = {802,700,803};
+//Circle(150) = {803,700,804};
+Circle(160) = {803,700,805};
+Circle(170) = {805,700,807};
+//Circle(180) = {806,700,807};
+Circle(190) = {807,700,801};
+
+// Port3 ==============================
+
+P3Psi =  -Asin((20.0+34.0)/R);// auch noch nachmessen!
+P3Phi = 0;
+alP3 = Asin(34.0/2.0/R);
+
+x1=R*Cos(alP3)*Sin(P3Psi)*Cos(P3Phi);
+y1=R*Cos(alP3)*Sin(P3Psi)*Sin(P3Phi);
+z1=R*Cos(alP3)*Cos(P3Psi);
+
+Point(900)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(P3Psi+alP3)*Cos(P3Phi);
+y2 = R*Sin(P3Psi+alP3)*Sin(P3Phi);
+z2 = R*Cos(P3Psi+alP3);
+
+Point(1000)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {   Point{1000} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{1000} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {     Point{1000} ; }}
+
+Circle(17) = {1001,900,1003};
+Circle(18) = {1003,900,1002};
+Circle(19) = {1002,900,1000};
+Circle(20) = {1000,900,1001};
+
+// TempSen1 ==============================
+
+TS1Psi = Pi/2 ;
+TS1Phi = -Pi/2 ;
+alTS1 = Asin(5/R);
+
+x1=R*Cos(alTS1)*Sin(TS1Psi)*Cos(TS1Phi);
+y1=R*Cos(alTS1)*Sin(TS1Psi)*Sin(TS1Phi);
+z1=R*Cos(alTS1)*Cos(TS1Psi);
+
+Point(1100)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(TS1Psi+alTS1)*Cos(TS1Phi);
+y2 = R*Sin(TS1Psi+alTS1)*Sin(TS1Phi);
+z2 = R*Cos(TS1Psi+alTS1);
+
+Point(1200)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {   Point{1200} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{1200} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {     Point{1200} ; }}
+
+Circle(21) = {1201,1100,1203};
+Circle(22) = {1203,1100,1202};
+Circle(23) = {1202,1100,1200};
+Circle(24) = {1200,1100,1201};
+
+// TempSen2 ==============================
+
+TS2Psi = Pi/2 ;
+TS2Phi = 0 ;
+alTS2 = Asin(5/R);
+
+x1=R*Cos(alTS2)*Sin(TS2Psi)*Cos(TS2Phi);
+y1=R*Cos(alTS2)*Sin(TS2Psi)*Sin(TS2Phi);
+z1=R*Cos(alTS2)*Cos(TS2Psi);
+
+Point(1300)  = {x1,y1,z1,size};
+
+x2 =  R*Sin(TS2Psi+alTS2)*Cos(TS2Phi);
+y2 = R*Sin(TS2Psi+alTS2)*Sin(TS2Phi);
+z2 = R*Cos(TS2Psi+alTS2);
+
+Point(1400)  = {x2,y2,z2,size};
+
+Rotate { {x1,y1,z1} , {0,0,0}, Pi/2} {Duplicata {   Point{1400} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, -Pi/2} {Duplicata {  Point{1400} ; }}
+Rotate { {x1,y1,z1} , {0,0,0}, Pi} {Duplicata {     Point{1400} ; }}
+
+Circle(25) = {1401,1300,1403};
+Circle(26) = {1403,1300,1402};
+Circle(27) = {1402,1300,1400};
+Circle(28) = {1400,1300,1401};
+
+// Punkt der unteren Späre ==============================
+
+pUsPsi = Pi ;
+pUsPhi = 0 ;
+
+x1=R*Sin(pUsPsi)*Cos(pUsPhi);
+y1=R*Sin(pUsPsi)*Sin(pUsPhi);
+z1=R*Cos(pUsPsi);
+
+Point(1500)  = {x1,y1,z1,size};
+
+// Stützpunkte Äquator ==============================
+
+Sp1Psi = Pi/3;
+Sp1Phi = 0.0;
+
+x2 =  R*Sin(Sp1Psi)*Cos(Sp1Phi);
+y2 = R*Sin(Sp1Psi)*Sin(Sp1Phi);
+z2 = R*Cos(Sp1Psi);
+
+Point(2000)  = {x2,y2,z2,size};
+Point(2030)  = {x2,y2,-z2,size};
+
+x1 = 0;
+y1 = 0;
+z1=R*Cos(Sp1Psi);
+
+Point(1600)  = {x1,y1,z1,size};
+Point(1700)  = {x1,y1,-z1,size};
+
+Rotate { {x1,y1,z1} ,{0,0,0},  Pi/4} {Duplicata {   Point{2000} ; }}
+Rotate { {x1,y1,z1} ,{0,0,0},  Pi*3/4} {Duplicata {  Point{2000} ; }}
+Rotate { {x1,y1,z1} ,{0,0,0},  -Pi/4} {Duplicata {   Point{2000} ; }}
+Rotate { {x1,y1,z1} ,{0,0,0},  -Pi*3/4} {Duplicata {  Point{2000} ; }}
+
+Rotate { {x1,y1,z1} ,{0,0,0},  Pi/4} {Duplicata    {   Point{2030} ; }}
+Rotate { {x1,y1,z1} ,{0,0,0},  Pi*3/4} {Duplicata  {   Point{2030} ; }}
+Rotate { {x1,y1,z1} ,{0,0,0},  -Pi/4} {Duplicata   {   Point{2030} ; }}
+Rotate { {x1,y1,z1} ,{0,0,0},  -Pi*3/4} {Duplicata {   Point{2030} ; }}
+
+//Circle(29) = {1703,1700,1704};
+//Circle(30) = {1603,1600,1604};
+//Circle(31) = {1703,0,1603};
+//Circle(32) = {1604,0,1704};
+
+Circle(200) = {1500,0,2035};
+Circle(201) = {1500,0,2036};
+Circle(202) = {1500,0,2037};
+Circle(203) = {1500,0,2038};
+
+Circle(204) = {2035,1700,2037};
+Circle(205) = {2037,1700,2038};
+Circle(206) = {2038,1700,2036};
+Circle(207) = {2036,1700,2035};
+
+Circle(208) = {2031,0,2035};
+Circle(209) = {2033,0,2037};
+Circle(210) = {2034,0,2038};
+Circle(211) = {2032,0,2036};
+
+Circle(212) = {2031,1600,2032};
+Circle(213) = {2032,1600,2034};
+Circle(214) = {2034,1600,2033};
+Circle(215) = {2033,1600,2031};
+
+Circle(216) = {2031,0,801};
+Circle(217) = {2033,0,807};
+
+Circle(218) = {2032,0,803};
+Circle(219) = {2034,0,805};
+//
+
+Line Loop(220) = {4,1,2,3};
+Ruled Surface(221) = {220} In Sphere{0};
+Line Loop(222) = {213,210,206,-211};
+Ruled Surface(223) = {222,220} In Sphere{0};