Skip to content
Snippets Groups Projects
Verified Commit fbb81a4c authored by Paul Dechamps's avatar Paul Dechamps :speech_balloon:
Browse files

(test) Added 3D test case

Added test case on the rae2822 3D finite wing thattests the 3D functionnalities of the code with vtk writing
parent 223260e2
No related branches found
No related tags found
1 merge request!1BLASTER v1.0
Pipeline #19733 failed
/* RAE 2822 rectangular wing */
// Parameters
// domain and mesh
DefineConstant[ spn = { 1.0, Name "Wing span" },
lgt = { 6.0, Name "Channel length" },
wdt = { 3.0, Name "Channel width" },
hgt = { 6.0, Name "Channel height" },
msN = { 0.05, Name "Leading edge mesh size" },
msF = { 1.0, Name "Farfield mesh size" } ];
//// GEOMETRY
/// Points
// Airfoil 1
Point(1) = {1.000000, 0.0000, 0.000000, msN};
Point(2) = {0.999398, 0.0000, 0.000128, msN};
Point(3) = {0.997592, 0.0000, 0.000510, msN};
Point(4) = {0.994588, 0.0000, 0.001137, msN};
Point(5) = {0.990393, 0.0000, 0.002001, msN};
Point(6) = {0.985016, 0.0000, 0.003092, msN};
Point(7) = {0.978470, 0.0000, 0.004401, msN};
Point(8) = {0.970772, 0.0000, 0.005915, msN};
Point(9) = {0.961940, 0.0000, 0.007622, msN};
Point(10) = {0.951995, 0.0000, 0.009508, msN};
Point(11) = {0.940961, 0.0000, 0.011562, msN};
Point(12) = {0.928864, 0.0000, 0.013769, msN};
Point(13) = {0.915735, 0.0000, 0.016113, msN};
Point(14) = {0.901604, 0.0000, 0.018580, msN};
Point(15) = {0.886505, 0.0000, 0.021153, msN};
Point(16) = {0.870476, 0.0000, 0.023817, msN};
Point(17) = {0.853553, 0.0000, 0.026554, msN};
Point(18) = {0.835779, 0.0000, 0.029347, msN};
Point(19) = {0.817197, 0.0000, 0.032176, msN};
Point(20) = {0.797850, 0.0000, 0.035017, msN};
Point(21) = {0.777785, 0.0000, 0.037847, msN};
Point(22) = {0.757051, 0.0000, 0.040641, msN};
Point(23) = {0.735698, 0.0000, 0.043377, msN};
Point(24) = {0.713778, 0.0000, 0.046029, msN};
Point(25) = {0.691342, 0.0000, 0.048575, msN};
Point(26) = {0.668445, 0.0000, 0.050993, msN};
Point(27) = {0.645142, 0.0000, 0.053258, msN};
Point(28) = {0.621490, 0.0000, 0.055344, msN};
Point(29) = {0.597545, 0.0000, 0.057218, msN};
Point(30) = {0.573365, 0.0000, 0.058845, msN};
Point(31) = {0.549009, 0.0000, 0.060194, msN};
Point(32) = {0.524534, 0.0000, 0.061254, msN};
Point(33) = {0.500000, 0.0000, 0.062029, msN};
Point(34) = {0.475466, 0.0000, 0.062530, msN};
Point(35) = {0.450991, 0.0000, 0.062774, msN};
Point(36) = {0.426635, 0.0000, 0.062779, msN};
Point(37) = {0.402455, 0.0000, 0.062562, msN};
Point(38) = {0.378510, 0.0000, 0.062133, msN};
Point(39) = {0.354858, 0.0000, 0.061497, msN};
Point(40) = {0.331555, 0.0000, 0.060660, msN};
Point(41) = {0.308658, 0.0000, 0.059629, msN};
Point(42) = {0.286222, 0.0000, 0.058414, msN};
Point(43) = {0.264302, 0.0000, 0.057026, msN};
Point(44) = {0.242949, 0.0000, 0.055470, msN};
Point(45) = {0.222215, 0.0000, 0.053753, msN};
Point(46) = {0.202150, 0.0000, 0.051885, msN};
Point(47) = {0.182803, 0.0000, 0.049874, msN};
Point(48) = {0.164221, 0.0000, 0.047729, msN};
Point(49) = {0.146447, 0.0000, 0.045457, msN};
Point(50) = {0.129524, 0.0000, 0.043071, msN};
Point(51) = {0.113495, 0.0000, 0.040585, msN};
Point(52) = {0.098396, 0.0000, 0.038011, msN};
Point(53) = {0.084265, 0.0000, 0.035360, msN};
Point(54) = {0.071136, 0.0000, 0.032644, msN};
Point(55) = {0.059039, 0.0000, 0.029874, msN};
Point(56) = {0.048005, 0.0000, 0.027062, msN};
Point(57) = {0.038060, 0.0000, 0.024219, msN};
Point(58) = {0.029228, 0.0000, 0.021348, msN};
Point(59) = {0.021530, 0.0000, 0.018441, msN};
Point(60) = {0.014984, 0.0000, 0.015489, msN};
Point(61) = {0.009607, 0.0000, 0.012480, msN};
Point(62) = {0.005412, 0.0000, 0.009416, msN};
Point(63) = {0.002408, 0.0000, 0.006306, msN};
Point(64) = {0.000602, 0.0000, 0.003165, msN};
Point(65) = {0.000000, 0.0000, 0.000000, msN};
Point(66) = {0.000602, 0.0000, -0.003160, msN};
Point(67) = {0.002408, 0.0000, -0.006308, msN};
Point(68) = {0.005412, 0.0000, -0.009443, msN};
Point(69) = {0.009607, 0.0000, -0.012559, msN};
Point(70) = {0.014984, 0.0000, -0.015649, msN};
Point(71) = {0.021530, 0.0000, -0.018707, msN};
Point(72) = {0.029228, 0.0000, -0.021722, msN};
Point(73) = {0.038060, 0.0000, -0.024685, msN};
Point(74) = {0.048005, 0.0000, -0.027586, msN};
Point(75) = {0.059039, 0.0000, -0.030416, msN};
Point(76) = {0.071136, 0.0000, -0.033170, msN};
Point(77) = {0.084265, 0.0000, -0.035843, msN};
Point(78) = {0.098396, 0.0000, -0.038431, msN};
Point(79) = {0.113495, 0.0000, -0.040929, msN};
Point(80) = {0.129524, 0.0000, -0.043326, msN};
Point(81) = {0.146447, 0.0000, -0.045610, msN};
Point(82) = {0.164221, 0.0000, -0.047773, msN};
Point(83) = {0.182803, 0.0000, -0.049805, msN};
Point(84) = {0.202150, 0.0000, -0.051694, msN};
Point(85) = {0.222215, 0.0000, -0.053427, msN};
Point(86) = {0.242949, 0.0000, -0.054994, msN};
Point(87) = {0.264302, 0.0000, -0.056376, msN};
Point(88) = {0.286222, 0.0000, -0.057547, msN};
Point(89) = {0.308658, 0.0000, -0.058459, msN};
Point(90) = {0.331555, 0.0000, -0.059046, msN};
Point(91) = {0.354858, 0.0000, -0.059236, msN};
Point(92) = {0.378510, 0.0000, -0.058974, msN};
Point(93) = {0.402455, 0.0000, -0.058224, msN};
Point(94) = {0.426635, 0.0000, -0.056979, msN};
Point(95) = {0.450991, 0.0000, -0.055257, msN};
Point(96) = {0.475466, 0.0000, -0.053099, msN};
Point(97) = {0.500000, 0.0000, -0.050563, msN};
Point(98) = {0.524534, 0.0000, -0.047719, msN};
Point(99) = {0.549009, 0.0000, -0.044642, msN};
Point(100) = {0.573365, 0.0000, -0.041397, msN};
Point(101) = {0.597545, 0.0000, -0.038043, msN};
Point(102) = {0.621490, 0.0000, -0.034631, msN};
Point(103) = {0.645142, 0.0000, -0.031207, msN};
Point(104) = {0.668445, 0.0000, -0.027814, msN};
Point(105) = {0.691342, 0.0000, -0.024495, msN};
Point(106) = {0.713778, 0.0000, -0.021289, msN};
Point(107) = {0.735698, 0.0000, -0.018232, msN};
Point(108) = {0.757051, 0.0000, -0.015357, msN};
Point(109) = {0.777785, 0.0000, -0.012690, msN};
Point(110) = {0.797850, 0.0000, -0.010244, msN};
Point(111) = {0.817197, 0.0000, -0.008027, msN};
Point(112) = {0.835779, 0.0000, -0.006048, msN};
Point(113) = {0.853553, 0.0000, -0.004314, msN};
Point(114) = {0.870476, 0.0000, -0.002829, msN};
Point(115) = {0.886505, 0.0000, -0.001592, msN};
Point(116) = {0.901604, 0.0000, -0.000600, msN};
Point(117) = {0.915735, 0.0000, 0.000157, msN};
Point(118) = {0.928864, 0.0000, 0.000694, msN};
Point(119) = {0.940961, 0.0000, 0.001033, msN};
Point(120) = {0.951995, 0.0000, 0.001197, msN};
Point(121) = {0.961940, 0.0000, 0.001212, msN};
Point(122) = {0.970772, 0.0000, 0.001112, msN};
Point(123) = {0.978470, 0.0000, 0.000935, msN};
Point(124) = {0.985016, 0.0000, 0.000719, msN};
Point(125) = {0.990393, 0.0000, 0.000497, msN};
Point(126) = {0.994588, 0.0000, 0.000296, msN};
Point(127) = {0.997592, 0.0000, 0.000137, msN};
Point(128) = {0.999398, 0.0000, 0.000035, msN};
// Airfoil 2
Point(301) = {1.000000, spn, 0.000000, msN};
Point(302) = {0.999398, spn, 0.000128, msN};
Point(303) = {0.997592, spn, 0.000510, msN};
Point(304) = {0.994588, spn, 0.001137, msN};
Point(305) = {0.990393, spn, 0.002001, msN};
Point(306) = {0.985016, spn, 0.003092, msN};
Point(307) = {0.978470, spn, 0.004401, msN};
Point(308) = {0.970772, spn, 0.005915, msN};
Point(309) = {0.961940, spn, 0.007622, msN};
Point(310) = {0.951995, spn, 0.009508, msN};
Point(311) = {0.940961, spn, 0.011562, msN};
Point(312) = {0.928864, spn, 0.013769, msN};
Point(313) = {0.915735, spn, 0.016113, msN};
Point(314) = {0.901604, spn, 0.018580, msN};
Point(315) = {0.886505, spn, 0.021153, msN};
Point(316) = {0.870476, spn, 0.023817, msN};
Point(317) = {0.853553, spn, 0.026554, msN};
Point(318) = {0.835779, spn, 0.029347, msN};
Point(319) = {0.817197, spn, 0.032176, msN};
Point(320) = {0.797850, spn, 0.035017, msN};
Point(321) = {0.777785, spn, 0.037847, msN};
Point(322) = {0.757051, spn, 0.040641, msN};
Point(323) = {0.735698, spn, 0.043377, msN};
Point(324) = {0.713778, spn, 0.046029, msN};
Point(325) = {0.691342, spn, 0.048575, msN};
Point(326) = {0.668445, spn, 0.050993, msN};
Point(327) = {0.645142, spn, 0.053258, msN};
Point(328) = {0.621490, spn, 0.055344, msN};
Point(329) = {0.597545, spn, 0.057218, msN};
Point(330) = {0.573365, spn, 0.058845, msN};
Point(331) = {0.549009, spn, 0.060194, msN};
Point(332) = {0.524534, spn, 0.061254, msN};
Point(333) = {0.500000, spn, 0.062029, msN};
Point(334) = {0.475466, spn, 0.062530, msN};
Point(335) = {0.450991, spn, 0.062774, msN};
Point(336) = {0.426635, spn, 0.062779, msN};
Point(337) = {0.402455, spn, 0.062562, msN};
Point(338) = {0.378510, spn, 0.062133, msN};
Point(339) = {0.354858, spn, 0.061497, msN};
Point(340) = {0.331555, spn, 0.060660, msN};
Point(341) = {0.308658, spn, 0.059629, msN};
Point(342) = {0.286222, spn, 0.058414, msN};
Point(343) = {0.264302, spn, 0.057026, msN};
Point(344) = {0.242949, spn, 0.055470, msN};
Point(345) = {0.222215, spn, 0.053753, msN};
Point(346) = {0.202150, spn, 0.051885, msN};
Point(347) = {0.182803, spn, 0.049874, msN};
Point(348) = {0.164221, spn, 0.047729, msN};
Point(349) = {0.146447, spn, 0.045457, msN};
Point(350) = {0.129524, spn, 0.043071, msN};
Point(351) = {0.113495, spn, 0.040585, msN};
Point(352) = {0.098396, spn, 0.038011, msN};
Point(353) = {0.084265, spn, 0.035360, msN};
Point(354) = {0.071136, spn, 0.032644, msN};
Point(355) = {0.059039, spn, 0.029874, msN};
Point(356) = {0.048005, spn, 0.027062, msN};
Point(357) = {0.038060, spn, 0.024219, msN};
Point(358) = {0.029228, spn, 0.021348, msN};
Point(359) = {0.021530, spn, 0.018441, msN};
Point(360) = {0.014984, spn, 0.015489, msN};
Point(361) = {0.009607, spn, 0.012480, msN};
Point(362) = {0.005412, spn, 0.009416, msN};
Point(363) = {0.002408, spn, 0.006306, msN};
Point(364) = {0.000602, spn, 0.003165, msN};
Point(365) = {0.000000, spn, 0.000000, msN};
Point(366) = {0.000602, spn, -0.003160, msN};
Point(367) = {0.002408, spn, -0.006308, msN};
Point(368) = {0.005412, spn, -0.009443, msN};
Point(369) = {0.009607, spn, -0.012559, msN};
Point(370) = {0.014984, spn, -0.015649, msN};
Point(371) = {0.021530, spn, -0.018707, msN};
Point(372) = {0.029228, spn, -0.021722, msN};
Point(373) = {0.038060, spn, -0.024685, msN};
Point(374) = {0.048005, spn, -0.027586, msN};
Point(375) = {0.059039, spn, -0.030416, msN};
Point(376) = {0.071136, spn, -0.033170, msN};
Point(377) = {0.084265, spn, -0.035843, msN};
Point(378) = {0.098396, spn, -0.038431, msN};
Point(379) = {0.113495, spn, -0.040929, msN};
Point(380) = {0.129524, spn, -0.043326, msN};
Point(381) = {0.146447, spn, -0.045610, msN};
Point(382) = {0.164221, spn, -0.047773, msN};
Point(383) = {0.182803, spn, -0.049805, msN};
Point(384) = {0.202150, spn, -0.051694, msN};
Point(385) = {0.222215, spn, -0.053427, msN};
Point(386) = {0.242949, spn, -0.054994, msN};
Point(387) = {0.264302, spn, -0.056376, msN};
Point(388) = {0.286222, spn, -0.057547, msN};
Point(389) = {0.308658, spn, -0.058459, msN};
Point(390) = {0.331555, spn, -0.059046, msN};
Point(391) = {0.354858, spn, -0.059236, msN};
Point(392) = {0.378510, spn, -0.058974, msN};
Point(393) = {0.402455, spn, -0.058224, msN};
Point(394) = {0.426635, spn, -0.056979, msN};
Point(395) = {0.450991, spn, -0.055257, msN};
Point(396) = {0.475466, spn, -0.053099, msN};
Point(397) = {0.500000, spn, -0.050563, msN};
Point(398) = {0.524534, spn, -0.047719, msN};
Point(399) = {0.549009, spn, -0.044642, msN};
Point(400) = {0.573365, spn, -0.041397, msN};
Point(401) = {0.597545, spn, -0.038043, msN};
Point(402) = {0.621490, spn, -0.034631, msN};
Point(403) = {0.645142, spn, -0.031207, msN};
Point(404) = {0.668445, spn, -0.027814, msN};
Point(405) = {0.691342, spn, -0.024495, msN};
Point(406) = {0.713778, spn, -0.021289, msN};
Point(407) = {0.735698, spn, -0.018232, msN};
Point(408) = {0.757051, spn, -0.015357, msN};
Point(409) = {0.777785, spn, -0.012690, msN};
Point(410) = {0.797850, spn, -0.010244, msN};
Point(411) = {0.817197, spn, -0.008027, msN};
Point(412) = {0.835779, spn, -0.006048, msN};
Point(413) = {0.853553, spn, -0.004314, msN};
Point(414) = {0.870476, spn, -0.002829, msN};
Point(415) = {0.886505, spn, -0.001592, msN};
Point(416) = {0.901604, spn, -0.000600, msN};
Point(417) = {0.915735, spn, 0.000157, msN};
Point(418) = {0.928864, spn, 0.000694, msN};
Point(419) = {0.940961, spn, 0.001033, msN};
Point(420) = {0.951995, spn, 0.001197, msN};
Point(421) = {0.961940, spn, 0.001212, msN};
Point(422) = {0.970772, spn, 0.001112, msN};
Point(423) = {0.978470, spn, 0.000935, msN};
Point(424) = {0.985016, spn, 0.000719, msN};
Point(425) = {0.990393, spn, 0.000497, msN};
Point(426) = {0.994588, spn, 0.000296, msN};
Point(427) = {0.997592, spn, 0.000137, msN};
Point(428) = {0.999398, spn, 0.000035, msN};
// Box
Point(10001) = {1+lgt/2, 0, 0, msF};
Point(10002) = {1+lgt/2, 0, hgt/2, msF};
Point(10003) = {-lgt/2, 0, hgt/2, msF};
Point(10004) = {-lgt/2, 0, -hgt/2, msF};
Point(10005) = {1+lgt/2, 0, -hgt/2, msF};
Point(10011) = {1+lgt/2, wdt, hgt/2, msF};
Point(10012) = {-lgt/2, wdt, hgt/2, msF};
Point(10013) = {-lgt/2, wdt, -hgt/2, msF};
Point(10014) = {1+lgt/2, wdt, -hgt/2, msF};
// Wake
Point(10021) = {1+lgt/2, spn, 0, msF};
/// Lines
// Airfoil 1:
Spline(1) = {1:14};
Spline(2) = {14:46};
Spline(3) = {46:65};
Spline(4) = {65:84};
Spline(5) = {84:116};
Spline(6) = {116:128,1};
// Airfoil 2:
Spline(7) = {301:314};
Spline(8) = {314:346};
Spline(9) = {346:365};
Spline(10) = {365:384};
Spline(11) = {384:416};
Spline(12) = {416:428,301};
// Airfoil 1 to airfoil 2:
Line(61) = {1,301};
Line(62) = {14,314};
Line(63) = {46,346};
Line(64) = {65,365};
Line(65) = {84,384};
Line(66) = {116,416};
// Box
Line(201) = {10001,10002};
Line(202) = {10002,10003};
Line(203) = {10003,10004};
Line(204) = {10004,10005};
Line(205) = {10005,10001};
Line(211) = {10011,10012};
Line(212) = {10012,10013};
Line(213) = {10013,10014};
Line(214) = {10014,10011};
Line(221) = {1, 10001};
Line(222) = {301, 10021};
Line(231) = {10002,10011};
Line(232) = {10003,10012};
Line(233) = {10004,10013};
Line(234) = {10005,10014};
// Wake
Line(241) = {10001, 10021};
/// Line loops & Surfaces
// Wing 1:
Line Loop(1) = {1,62,-7,-61};
Line Loop(2) = {2,63,-8,-62};
Line Loop(3) = {3,64,-9,-63};
Line Loop(4) = {4,65,-10,-64};
Line Loop(5) = {5,66,-11,-65};
Line Loop(6) = {6,61,-12,-66};
Surface(1) = {-1};
Surface(2) = {-2};
Surface(3) = {-3};
Surface(4) = {-4};
Surface(5) = {-5};
Surface(6) = {-6};
// Wingtip:
Line Loop(11) = {7:12};
Plane Surface(11) = {-11};
// Symmetry
Line Loop(21) = {201, 202, 203, 204, 205};
Line Loop(22) = {1, 2, 3, 4, 5, 6};
Plane Surface(21) = {-21, 22};
// Downsteam
Line Loop(31) = {201, 231, -214, -234, 205};
Plane Surface(31) = {31};
// Farfield
Line Loop(41) = {233, -212, -232, 203};
Plane Surface(41) = {41};
Line Loop(42) = {204, 234, -213, -233};
Plane Surface(42) = {42};
Line Loop(43) = {202, 232, -211, -231};
Plane Surface(43) = {43};
Line Loop(44) = {213, 214, 211, 212};
Plane Surface(44) = {44};
// Wake
Line Loop(51) = {221, 241, -222, -61};
Surface(51) = {51};
/// Volume
Surface Loop(1) = {1,2,3,4,5,6,11,21,31,41,42,43,44};
Volume(1) = {1};
/// Embbeded
Line{221} In Surface{21};
Line{241} In Surface{31};
Surface{51} In Volume{1};
//// MESHING ALGORITHM
/// 2D:
///Wing, farfield and symmetry plane:
MeshAlgorithm Surface{1,2,3,4,5,6,11,21,31,41,42,43,44,51} = 5;
/// 3D:
Mesh.Algorithm3D = 2;
Mesh.Optimize = 1;
Mesh.Smoothing = 10;
Mesh.SmoothNormals = 1;
//// PHYSICAL GROUPS
// Trailing edge and wake tip
Physical Line("wakeTip") = {222};
Physical Line("te") = {61};
// Internal Field:
Physical Volume("field") = {1};
// Wing:
Physical Surface("wing") = {1,2,3,11};
Physical Surface("wing_") = {4,5,6};
// Symmetry:
Physical Surface("symmetry") = {21};
// Downstream:
Physical Surface("downstream") = {31};
// Farfield:
Physical Surface("upstream") = {41};
Physical Surface("farfield") = {42,43,44};
// Wake:
Physical Surface("wake") = {51};
/* RAE 2822 rectangular wing */
// Parameters
// domain and mesh
DefineConstant[ spn = { 1.0, Name "Wing span" },
lgt = { 6.0, Name "Channel length" },
nLe = { 15, Name "nLe" },
progLe = { 1.0, Name "progLe" },
nMid = { 50, Name "nMid" },
progMid = { 1.0, Name "progMid" },
nTe = { 5, Name "nTe" },
progTe = { 1.0, Name "progTe" },
nSpan = { 50, Name "nSpan" },
progSpan = { 1.0, Name "progSpan" },
nWake = { 25, Name "nWake" }
progWake = { 1.0, Name "progWake" } ];
//// GEOMETRY
/// Points
// Airfoil 1
Point(1) = {1.000000, 0.0000, 0.000000};
Point(2) = {0.999398, 0.0000, 0.000128};
Point(3) = {0.997592, 0.0000, 0.000510};
Point(4) = {0.994588, 0.0000, 0.001137};
Point(5) = {0.990393, 0.0000, 0.002001};
Point(6) = {0.985016, 0.0000, 0.003092};
Point(7) = {0.978470, 0.0000, 0.004401};
Point(8) = {0.970772, 0.0000, 0.005915};
Point(9) = {0.961940, 0.0000, 0.007622};
Point(10) = {0.951995, 0.0000, 0.009508};
Point(11) = {0.940961, 0.0000, 0.011562};
Point(12) = {0.928864, 0.0000, 0.013769};
Point(13) = {0.915735, 0.0000, 0.016113};
Point(14) = {0.901604, 0.0000, 0.018580};
Point(15) = {0.886505, 0.0000, 0.021153};
Point(16) = {0.870476, 0.0000, 0.023817};
Point(17) = {0.853553, 0.0000, 0.026554};
Point(18) = {0.835779, 0.0000, 0.029347};
Point(19) = {0.817197, 0.0000, 0.032176};
Point(20) = {0.797850, 0.0000, 0.035017};
Point(21) = {0.777785, 0.0000, 0.037847};
Point(22) = {0.757051, 0.0000, 0.040641};
Point(23) = {0.735698, 0.0000, 0.043377};
Point(24) = {0.713778, 0.0000, 0.046029};
Point(25) = {0.691342, 0.0000, 0.048575};
Point(26) = {0.668445, 0.0000, 0.050993};
Point(27) = {0.645142, 0.0000, 0.053258};
Point(28) = {0.621490, 0.0000, 0.055344};
Point(29) = {0.597545, 0.0000, 0.057218};
Point(30) = {0.573365, 0.0000, 0.058845};
Point(31) = {0.549009, 0.0000, 0.060194};
Point(32) = {0.524534, 0.0000, 0.061254};
Point(33) = {0.500000, 0.0000, 0.062029};
Point(34) = {0.475466, 0.0000, 0.062530};
Point(35) = {0.450991, 0.0000, 0.062774};
Point(36) = {0.426635, 0.0000, 0.062779};
Point(37) = {0.402455, 0.0000, 0.062562};
Point(38) = {0.378510, 0.0000, 0.062133};
Point(39) = {0.354858, 0.0000, 0.061497};
Point(40) = {0.331555, 0.0000, 0.060660};
Point(41) = {0.308658, 0.0000, 0.059629};
Point(42) = {0.286222, 0.0000, 0.058414};
Point(43) = {0.264302, 0.0000, 0.057026};
Point(44) = {0.242949, 0.0000, 0.055470};
Point(45) = {0.222215, 0.0000, 0.053753};
Point(46) = {0.202150, 0.0000, 0.051885};
Point(47) = {0.182803, 0.0000, 0.049874};
Point(48) = {0.164221, 0.0000, 0.047729};
Point(49) = {0.146447, 0.0000, 0.045457};
Point(50) = {0.129524, 0.0000, 0.043071};
Point(51) = {0.113495, 0.0000, 0.040585};
Point(52) = {0.098396, 0.0000, 0.038011};
Point(53) = {0.084265, 0.0000, 0.035360};
Point(54) = {0.071136, 0.0000, 0.032644};
Point(55) = {0.059039, 0.0000, 0.029874};
Point(56) = {0.048005, 0.0000, 0.027062};
Point(57) = {0.038060, 0.0000, 0.024219};
Point(58) = {0.029228, 0.0000, 0.021348};
Point(59) = {0.021530, 0.0000, 0.018441};
Point(60) = {0.014984, 0.0000, 0.015489};
Point(61) = {0.009607, 0.0000, 0.012480};
Point(62) = {0.005412, 0.0000, 0.009416};
Point(63) = {0.002408, 0.0000, 0.006306};
Point(64) = {0.000602, 0.0000, 0.003165};
Point(65) = {0.000000, 0.0000, 0.000000};
Point(66) = {0.000602, 0.0000, -0.003160};
Point(67) = {0.002408, 0.0000, -0.006308};
Point(68) = {0.005412, 0.0000, -0.009443};
Point(69) = {0.009607, 0.0000, -0.012559};
Point(70) = {0.014984, 0.0000, -0.015649};
Point(71) = {0.021530, 0.0000, -0.018707};
Point(72) = {0.029228, 0.0000, -0.021722};
Point(73) = {0.038060, 0.0000, -0.024685};
Point(74) = {0.048005, 0.0000, -0.027586};
Point(75) = {0.059039, 0.0000, -0.030416};
Point(76) = {0.071136, 0.0000, -0.033170};
Point(77) = {0.084265, 0.0000, -0.035843};
Point(78) = {0.098396, 0.0000, -0.038431};
Point(79) = {0.113495, 0.0000, -0.040929};
Point(80) = {0.129524, 0.0000, -0.043326};
Point(81) = {0.146447, 0.0000, -0.045610};
Point(82) = {0.164221, 0.0000, -0.047773};
Point(83) = {0.182803, 0.0000, -0.049805};
Point(84) = {0.202150, 0.0000, -0.051694};
Point(85) = {0.222215, 0.0000, -0.053427};
Point(86) = {0.242949, 0.0000, -0.054994};
Point(87) = {0.264302, 0.0000, -0.056376};
Point(88) = {0.286222, 0.0000, -0.057547};
Point(89) = {0.308658, 0.0000, -0.058459};
Point(90) = {0.331555, 0.0000, -0.059046};
Point(91) = {0.354858, 0.0000, -0.059236};
Point(92) = {0.378510, 0.0000, -0.058974};
Point(93) = {0.402455, 0.0000, -0.058224};
Point(94) = {0.426635, 0.0000, -0.056979};
Point(95) = {0.450991, 0.0000, -0.055257};
Point(96) = {0.475466, 0.0000, -0.053099};
Point(97) = {0.500000, 0.0000, -0.050563};
Point(98) = {0.524534, 0.0000, -0.047719};
Point(99) = {0.549009, 0.0000, -0.044642};
Point(100) = {0.573365, 0.0000, -0.041397};
Point(101) = {0.597545, 0.0000, -0.038043};
Point(102) = {0.621490, 0.0000, -0.034631};
Point(103) = {0.645142, 0.0000, -0.031207};
Point(104) = {0.668445, 0.0000, -0.027814};
Point(105) = {0.691342, 0.0000, -0.024495};
Point(106) = {0.713778, 0.0000, -0.021289};
Point(107) = {0.735698, 0.0000, -0.018232};
Point(108) = {0.757051, 0.0000, -0.015357};
Point(109) = {0.777785, 0.0000, -0.012690};
Point(110) = {0.797850, 0.0000, -0.010244};
Point(111) = {0.817197, 0.0000, -0.008027};
Point(112) = {0.835779, 0.0000, -0.006048};
Point(113) = {0.853553, 0.0000, -0.004314};
Point(114) = {0.870476, 0.0000, -0.002829};
Point(115) = {0.886505, 0.0000, -0.001592};
Point(116) = {0.901604, 0.0000, -0.000600};
Point(117) = {0.915735, 0.0000, 0.000157};
Point(118) = {0.928864, 0.0000, 0.000694};
Point(119) = {0.940961, 0.0000, 0.001033};
Point(120) = {0.951995, 0.0000, 0.001197};
Point(121) = {0.961940, 0.0000, 0.001212};
Point(122) = {0.970772, 0.0000, 0.001112};
Point(123) = {0.978470, 0.0000, 0.000935};
Point(124) = {0.985016, 0.0000, 0.000719};
Point(125) = {0.990393, 0.0000, 0.000497};
Point(126) = {0.994588, 0.0000, 0.000296};
Point(127) = {0.997592, 0.0000, 0.000137};
Point(128) = {0.999398, 0.0000, 0.000035};
// Airfoil 2
Point(301) = {1.000000, spn, 0.000000};
Point(302) = {0.999398, spn, 0.000128};
Point(303) = {0.997592, spn, 0.000510};
Point(304) = {0.994588, spn, 0.001137};
Point(305) = {0.990393, spn, 0.002001};
Point(306) = {0.985016, spn, 0.003092};
Point(307) = {0.978470, spn, 0.004401};
Point(308) = {0.970772, spn, 0.005915};
Point(309) = {0.961940, spn, 0.007622};
Point(310) = {0.951995, spn, 0.009508};
Point(311) = {0.940961, spn, 0.011562};
Point(312) = {0.928864, spn, 0.013769};
Point(313) = {0.915735, spn, 0.016113};
Point(314) = {0.901604, spn, 0.018580};
Point(315) = {0.886505, spn, 0.021153};
Point(316) = {0.870476, spn, 0.023817};
Point(317) = {0.853553, spn, 0.026554};
Point(318) = {0.835779, spn, 0.029347};
Point(319) = {0.817197, spn, 0.032176};
Point(320) = {0.797850, spn, 0.035017};
Point(321) = {0.777785, spn, 0.037847};
Point(322) = {0.757051, spn, 0.040641};
Point(323) = {0.735698, spn, 0.043377};
Point(324) = {0.713778, spn, 0.046029};
Point(325) = {0.691342, spn, 0.048575};
Point(326) = {0.668445, spn, 0.050993};
Point(327) = {0.645142, spn, 0.053258};
Point(328) = {0.621490, spn, 0.055344};
Point(329) = {0.597545, spn, 0.057218};
Point(330) = {0.573365, spn, 0.058845};
Point(331) = {0.549009, spn, 0.060194};
Point(332) = {0.524534, spn, 0.061254};
Point(333) = {0.500000, spn, 0.062029};
Point(334) = {0.475466, spn, 0.062530};
Point(335) = {0.450991, spn, 0.062774};
Point(336) = {0.426635, spn, 0.062779};
Point(337) = {0.402455, spn, 0.062562};
Point(338) = {0.378510, spn, 0.062133};
Point(339) = {0.354858, spn, 0.061497};
Point(340) = {0.331555, spn, 0.060660};
Point(341) = {0.308658, spn, 0.059629};
Point(342) = {0.286222, spn, 0.058414};
Point(343) = {0.264302, spn, 0.057026};
Point(344) = {0.242949, spn, 0.055470};
Point(345) = {0.222215, spn, 0.053753};
Point(346) = {0.202150, spn, 0.051885};
Point(347) = {0.182803, spn, 0.049874};
Point(348) = {0.164221, spn, 0.047729};
Point(349) = {0.146447, spn, 0.045457};
Point(350) = {0.129524, spn, 0.043071};
Point(351) = {0.113495, spn, 0.040585};
Point(352) = {0.098396, spn, 0.038011};
Point(353) = {0.084265, spn, 0.035360};
Point(354) = {0.071136, spn, 0.032644};
Point(355) = {0.059039, spn, 0.029874};
Point(356) = {0.048005, spn, 0.027062};
Point(357) = {0.038060, spn, 0.024219};
Point(358) = {0.029228, spn, 0.021348};
Point(359) = {0.021530, spn, 0.018441};
Point(360) = {0.014984, spn, 0.015489};
Point(361) = {0.009607, spn, 0.012480};
Point(362) = {0.005412, spn, 0.009416};
Point(363) = {0.002408, spn, 0.006306};
Point(364) = {0.000602, spn, 0.003165};
Point(365) = {0.000000, spn, 0.000000};
Point(366) = {0.000602, spn, -0.003160};
Point(367) = {0.002408, spn, -0.006308};
Point(368) = {0.005412, spn, -0.009443};
Point(369) = {0.009607, spn, -0.012559};
Point(370) = {0.014984, spn, -0.015649};
Point(371) = {0.021530, spn, -0.018707};
Point(372) = {0.029228, spn, -0.021722};
Point(373) = {0.038060, spn, -0.024685};
Point(374) = {0.048005, spn, -0.027586};
Point(375) = {0.059039, spn, -0.030416};
Point(376) = {0.071136, spn, -0.033170};
Point(377) = {0.084265, spn, -0.035843};
Point(378) = {0.098396, spn, -0.038431};
Point(379) = {0.113495, spn, -0.040929};
Point(380) = {0.129524, spn, -0.043326};
Point(381) = {0.146447, spn, -0.045610};
Point(382) = {0.164221, spn, -0.047773};
Point(383) = {0.182803, spn, -0.049805};
Point(384) = {0.202150, spn, -0.051694};
Point(385) = {0.222215, spn, -0.053427};
Point(386) = {0.242949, spn, -0.054994};
Point(387) = {0.264302, spn, -0.056376};
Point(388) = {0.286222, spn, -0.057547};
Point(389) = {0.308658, spn, -0.058459};
Point(390) = {0.331555, spn, -0.059046};
Point(391) = {0.354858, spn, -0.059236};
Point(392) = {0.378510, spn, -0.058974};
Point(393) = {0.402455, spn, -0.058224};
Point(394) = {0.426635, spn, -0.056979};
Point(395) = {0.450991, spn, -0.055257};
Point(396) = {0.475466, spn, -0.053099};
Point(397) = {0.500000, spn, -0.050563};
Point(398) = {0.524534, spn, -0.047719};
Point(399) = {0.549009, spn, -0.044642};
Point(400) = {0.573365, spn, -0.041397};
Point(401) = {0.597545, spn, -0.038043};
Point(402) = {0.621490, spn, -0.034631};
Point(403) = {0.645142, spn, -0.031207};
Point(404) = {0.668445, spn, -0.027814};
Point(405) = {0.691342, spn, -0.024495};
Point(406) = {0.713778, spn, -0.021289};
Point(407) = {0.735698, spn, -0.018232};
Point(408) = {0.757051, spn, -0.015357};
Point(409) = {0.777785, spn, -0.012690};
Point(410) = {0.797850, spn, -0.010244};
Point(411) = {0.817197, spn, -0.008027};
Point(412) = {0.835779, spn, -0.006048};
Point(413) = {0.853553, spn, -0.004314};
Point(414) = {0.870476, spn, -0.002829};
Point(415) = {0.886505, spn, -0.001592};
Point(416) = {0.901604, spn, -0.000600};
Point(417) = {0.915735, spn, 0.000157};
Point(418) = {0.928864, spn, 0.000694};
Point(419) = {0.940961, spn, 0.001033};
Point(420) = {0.951995, spn, 0.001197};
Point(421) = {0.961940, spn, 0.001212};
Point(422) = {0.970772, spn, 0.001112};
Point(423) = {0.978470, spn, 0.000935};
Point(424) = {0.985016, spn, 0.000719};
Point(425) = {0.990393, spn, 0.000497};
Point(426) = {0.994588, spn, 0.000296};
Point(427) = {0.997592, spn, 0.000137};
Point(428) = {0.999398, spn, 0.000035};
// Wake
Point(10001) = {1+lgt/2, 0, 0};
Point(10021) = {1+lgt/2, spn, 0};
/// Lines
// Airfoil 1:
Spline(1) = {1:14};
Spline(2) = {14:46};
Spline(3) = {46:65};
Spline(4) = {65:84};
Spline(5) = {84:116};
Spline(6) = {116:128,1};
// Airfoil 2:
Spline(7) = {301:314};
Spline(8) = {314:346};
Spline(9) = {346:365};
Spline(10) = {365:384};
Spline(11) = {384:416};
Spline(12) = {416:428,301};
// Airfoil 1 to airfoil 2:
Line(61) = {1,301};
Line(62) = {14,314};
Line(63) = {46,346};
Line(64) = {65,365};
Line(65) = {84,384};
Line(66) = {116,416};
// Box
Line(221) = {1, 10001};
Line(222) = {301, 10021};
// Wake
Line(241) = {10001, 10021};
/// Line loops & Surfaces
// Wing 1:
Line Loop(1) = {1,62,-7,-61};
Line Loop(2) = {2,63,-8,-62};
Line Loop(3) = {3,64,-9,-63};
Line Loop(4) = {4,65,-10,-64};
Line Loop(5) = {5,66,-11,-65};
Line Loop(6) = {6,61,-12,-66};
Surface(1) = {1};
Surface(2) = {2};
Surface(3) = {3};
Surface(4) = {4};
Surface(5) = {5};
Surface(6) = {6};
// Wake
Line Loop(51) = {221, 241, -222, -61};
Surface(51) = {51};
//// MESHING ALGORITHM
Transfinite Curve {222, 221} = nWake Using Progression progWake;
Transfinite Curve {64, 63, 65, 62, 62, 66, 61, 241} = nSpan Using Progression progSpan;
Transfinite Curve {-3, 4, 10, -9} = nLe Using Progression progLe;
Transfinite Curve {1, 6, 7, 12} = nTe Using Progression progTe;
Transfinite Curve {2, 5, 11, 8} = nMid Using Progression progMid;
Transfinite Surface {3};
Transfinite Surface {4};
Transfinite Surface {2};
Transfinite Surface {5};
Transfinite Surface {1};
Transfinite Surface {6};
Transfinite Surface {51};
Recombine Surface {3};
Recombine Surface {4};
Recombine Surface {2};
Recombine Surface {5};
Recombine Surface {1};
Recombine Surface {6};
Recombine Surface {51};
//// PHYSICAL GROUPS
// Trailing edge and wake tip
Physical Line("wakeTip") = {222};
Physical Line("te") = {61};
// Wing:
Physical Surface("wing") = {1,2,3,11};
Physical Surface("wing_") = {4,5,6};
// Wake:
Physical Surface("wake") = {51};
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2022 University of Liège
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# @author Paul Dechamps
# @date 2022
# Test the blast implementation. The test case is a compressible attached transitional flow.
# Tested functionalities;
# - Time integration.
# - Two time-marching techniques (agressive and safe).
# - Transition routines.
# - Forced transition.
# - Compressible flow routines.
# - Laminar and turbulent flow.
#
# Untested functionalities.
# - Separation routines.
# - Multiple failure case at one iteration.
# - Response to unconverged inviscid solver.
# Imports.
import blast.utils as viscUtils
import numpy as np
import os.path
from fwk.wutils import parseargs
import fwk
from fwk.testing import *
from fwk.coloring import ccolors
import math
def cfgInviscid(nthrds, verb):
# Parameters
return {
# Options
'scenario' : 'aerodynamic',
'task' : 'analysis',
'Threads' : nthrds, # number of threads
'Verb' : verb, # verbosity
# Model (geometry or mesh)
'File' : os.path.abspath(os.path.join(os.path.abspath(__file__), '../../../models/dart/rae_3.geo')), # Input file containing the model
'Pars' : {'spn' : 1.0, 'lgt' : 6.0, 'wdt' : 3.0, 'hgt' : 6.0, 'msN' : 0.02, 'msF' : 1}, # parameters for input file model
'Dim' : 3, # problem dimension
'Format' : 'vtk', # save format (vtk or gmsh)
# Markers
'Fluid' : 'field', # name of physical group containing the fluid
'Farfield' : ['upstream', 'farfield', 'downstream'], # LIST of names of physical groups containing the farfield boundaries (upstream/downstream should be first/last element)
'Wings' : ['wing'], # LIST of names of physical groups containing the lifting surface boundary
'Wakes' : ['wake'], # LIST of names of physical group containing the wake
'WakeTips' : ['wakeTip'], # LIST of names of physical group containing the edge of the wake
'Tes' : ['te'], # LIST of names of physical group containing the trailing edge
'Symmetry': 'symmetry', # name of physical group containing the symmetry BC
'dbc' : True,
'Upstream' : 'upstream',
# Freestream
'M_inf' : 0.8, # freestream Mach number
'AoA' : 0.0, # freestream angle of attack
# Geometry
'S_ref' : 1.0, # reference surface length
'c_ref' : 1.0, # reference chord length
'x_ref' : 0.0, # reference point for moment computation (x)
'y_ref' : 0.0, # reference point for moment computation (y)
'z_ref' : 0.0, # reference point for moment computation (z)
# Numerical
'LSolver' : 'GMRES', # inner solver (Pardiso, MUMPS or GMRES)
'G_fill' : 2, # fill-in factor for GMRES preconditioner
'G_tol' : 1e-5, # tolerance for GMRES
'G_restart' : 50, # restart for GMRES
'Rel_tol' : 1e-6, # relative tolerance on solver residual
'Abs_tol' : 1e-8, # absolute tolerance on solver residual
'Max_it' : 50 # solver maximum number of iterations
}
def cfgBlast(verb):
return {
'Re' : 1e7, # Freestream Reynolds number
'Minf' : 0.8, # Freestream Mach number (used for the computation of the time step only)
'CFL0' : 1, # Inital CFL number of the calculation
'sections' : np.linspace(0.01, 0.95, 30),
'writeSections': [0.2, 0.4, 0.6, 0.8, 1.0],
'Sym':[0.],
'span':1.,
'interpolator': 'Rbf',
'rbftype': 'linear',
'smoothing': 1e-8,
'degree': 0,
'neighbors': 10,
'saveTag': 4,
'Verb': verb, # Verbosity level of the solver
'couplIter': 50, # Maximum number of iterations
'couplTol' : 5e-2, # Tolerance of the VII methodology
'iterPrint': 1, # int, number of iterations between outputs
'resetInv' : False, # bool, flag to reset the inviscid calculation at every iteration.
'xtrF' : [0., 0.], # Forced transition location
'nDim' : 3
}
def main():
# Timer.
tms = fwk.Timers()
tms['total'].start()
args = parseargs()
icfg = cfgInviscid(args.k, args.verb)
vcfg = cfgBlast(args.verb)
parsViscous = {'spn': icfg['Pars']['spn'], 'lgt': icfg['Pars']['lgt'],
'nLe': 25, 'nMid': 50, 'nTe': 10, 'nSpan': 60, 'nWake': 25,
'progLe': 1.1, 'progMid': 1.0, 'progTe': 1.0, 'progSpan': 1.0, 'progWake': 1.15}
vMeshFile = os.path.abspath(os.path.join(os.path.abspath(__file__), '../../../models/dart/rae_3_visc.geo'))
vMsh = viscUtils.mesh(vMeshFile, parsViscous)
vcfg['vMsh'] = vMsh
tms['pre'].start()
coupler, iSolverAPI, vSolver = viscUtils.initBlast(icfg, vcfg)
tms['pre'].stop()
print(ccolors.ANSI_BLUE + 'PySolving...' + ccolors.ANSI_RESET)
tms['solver'].start()
aeroCoeffs = coupler.run()
tms['solver'].stop()
# Display results.
print(ccolors.ANSI_BLUE + 'PyRes...' + ccolors.ANSI_RESET)
print(' Re M alpha Cl Cd Cd_wake Cdp Cdf Cm')
print('{0:6.1f}e6 {1:8.2f} {2:8.1f} {3:8.4f} {4:8.4f} {5:8.4f} {6:8.4f} {7:8.4f} {8:8.4f}'.format(vcfg['Re']/1e6, iSolverAPI.getMinf(), iSolverAPI.getAoA()*180/math.pi, iSolverAPI.getCl(), vSolver.Cdf + iSolverAPI.getCd(), vSolver.Cdt, vSolver.Cdp, vSolver.Cdf, iSolverAPI.getCm()))
# Write results to file.
vSolution = viscUtils.getSolution(vSolver)
# Write results to file.
for iSec in range(len(iSolverAPI.cfg['EffSections'])):
vSolution = viscUtils.getSolution(vSolver, iSec)
viscUtils.write(vSolution, vSolver.getRe(), sfx='slice'+str(iSec))
vSolution['Cdt_int'] = vSolver.Cdf + iSolverAPI.getCd()
# Save pressure coefficient
iSolverAPI.save(sfx='_viscous')
tms['total'].stop()
print(ccolors.ANSI_BLUE + 'PyTiming...' + ccolors.ANSI_RESET)
print('CPU statistics')
print(tms)
print('SOLVERS statistics')
print(coupler.tms)
# Test solution
print(ccolors.ANSI_BLUE + 'PyTesting...' + ccolors.ANSI_RESET)
tests = CTests()
tests.add(CTest('Cl', iSolverAPI.getCl(), 0.128, 5e-2))
tests.add(CTest('Cd wake', vSolution['Cdt_int'], 0.0132, 1e-3, forceabs=True))
tests.add(CTest('Iterations', len(aeroCoeffs), 5, 0, forceabs=True))
tests.run()
# eof
print('')
if __name__ == "__main__":
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment