From af8a781e0e8763be5e0297495eabb67502aaa66a Mon Sep 17 00:00:00 2001 From: rois1995 Date: Fri, 1 Dec 2023 11:24:57 +0100 Subject: [PATCH 1/5] - Added regression case for CGNS output --- CGNSWrite/config.cfg | 187 ++++ CGNSWrite/mesh.cgns | Bin 0 -> 525815 bytes parallel_regression.py | 1844 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2031 insertions(+) create mode 100644 CGNSWrite/config.cfg create mode 100644 CGNSWrite/mesh.cgns create mode 100644 parallel_regression.py diff --git a/CGNSWrite/config.cfg b/CGNSWrite/config.cfg new file mode 100644 index 00000000..faeeea3f --- /dev/null +++ b/CGNSWrite/config.cfg @@ -0,0 +1,187 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Transonic simulation RAE2822 (RANS) % +% Author: Francisco Palacios % +% Institution: Stanford University % +% Date: 5/15/2013 % +% File Version 7.4.0 "Blackbird" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Physical governing equations (EULER, NAVIER_STOKES, +% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, +% POISSON_EQUATION) +SOLVER= RANS +% +% Specify turbulent model (NONE, SA, SA_NEG, SST) +KIND_TURB_MODEL= SST +% +% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) +MATH_PROBLEM= DIRECT +% +% Restart solution (NO, YES) +RESTART_SOL= NO + +% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% +% +% Mach number (non-dimensional, based on the free-stream values) +MACH_NUMBER= 0.2 +% AirSpeed = 279.9663 +% Density = 1.225 +% +% Angle of attack (degrees, only for compressible flows) +AOA= 0.0 +% Free-stream temperature (288.15 K by default) +FREESTREAM_TEMPERATURE= 270.0 +% +% Reynolds number (non-dimensional, based on the free-stream values) +REYNOLDS_NUMBER= 3.28E6 +% +% Reynolds length (1 m by default) +REYNOLDS_LENGTH= 1 +REF_DIMENSIONALIZATION= FREESTREAM_VEL_EQ_MACH + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +% Reference origin for moment computation +REF_ORIGIN_MOMENT_X = -0.2473 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +% +% Reference length for pitching, rolling, and yawing non-dimensional moment +REF_LENGTH= 1 +% +% Reference area for force coefficients (0 implies automatic calculation) +% Body tube cross-area +REF_AREA= 1 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes wall boundary marker(s) (NONE = no marker) +MARKER_HEATFLUX= ( OuterWall, 0.0, InnerWall, 0.0 ) +% +% Farfield boundary marker(s) (NONE = no marker) +MARKER_FAR= ( Inlet, Outlet ) + +% +% +% Marker(s) of the surface to be plotted or designed +MARKER_PLOTTING= ( InnerWall ) +% +% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated +MARKER_MONITORING= ( InnerWall ) + + +% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% +% +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1.0e-6 +% lower memory consumption: +LINEAR_SOLVER_ITER= 15 +% +% -------------------------- MULTIGRID PARAMETERS -----------------------------% +% + +NEWTON_KRYLOV= NO +NEWTON_KRYLOV_IPARAM= (10, 5, 2) % n0, np, ft +NEWTON_KRYLOV_DPARAM= (1.0, 0.01, -6, 1e-5) % r0, tp, rf, e +CFL_ADAPT= YES +CFL_NUMBER= 1 +CFL_REDUCTION_TURB= 1.0 +% +CFL_ADAPT_PARAM= ( 0.5, 1.01, 1.0, 5, 0.0001) + +ITER= 1 + +MGLEVEL= 0 +% +MGCYCLE= V_CYCLE +MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) +MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, +% TURKEL_PREC, MSW) +CONV_NUM_METHOD_FLOW= ROE +USE_VECTORIZATION= YES +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_FLOW= NO +% +% Slope limiter (VENKATAKRISHNAN, MINMOD) +SLOPE_LIMITER_FLOW= VENKATAKRISHNAN +% +% Coefficient for the limiter (smooth regions) +VENKAT_LIMITER_COEFF= 0.03 +% +% 2nd and 4th order artificial dissipation coefficients +JST_SENSOR_COEFF= ( 0.5, 0.02 ) +% +% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT) +TIME_DISCRE_FLOW= EULER_IMPLICIT + +% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% +% +% Convective numerical method (SCALAR_UPWIND) +CONV_NUM_METHOD_TURB= SCALAR_UPWIND +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_TURB= NO +% +% Time discretization (EULER_IMPLICIT) +TIME_DISCRE_TURB= EULER_IMPLICIT + + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +CONV_FIELD= MOMENT_X +CONV_STARTITER= 10 +CONV_CAUCHY_ELEMS= 100 +CONV_CAUCHY_EPS= 1E-6 +% + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +% Mesh input file +MESH_FILENAME= mesh.cgns +% +% Mesh input file format (SU2, CGNS, NETCDF_ASCII) +MESH_FORMAT= CGNS +% +% Restart flow input file +SOLUTION_FILENAME= restart_flow +% +TABULAR_FORMAT= CSV +% +% Output file convergence history (w/o extension) +CONV_FILENAME= history_First +% +% Output file restart flow +RESTART_FILENAME= restart_flow +% +% Output file flow (w/o extension) variables +VOLUME_FILENAME= flow +% +% Output file surface flow coefficient (w/o extension) +SURFACE_FILENAME= surface_flow +% +% Writing solution file frequency +OUTPUT_WRT_FREQ= 100 +% +% +% Screen output fields +SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_DENSITY, LIFT, DRAG, MOMENT_Z) +OUTPUT_FILES= (SURFACE_CGNS) +WRT_FORCES_BREAKDOWN= NO +VOLUME_OUTPUT= (COORDINATES) +HISTORY_OUTPUT= (ITER) diff --git a/CGNSWrite/mesh.cgns b/CGNSWrite/mesh.cgns new file mode 100644 index 0000000000000000000000000000000000000000..30dca8dd289ea05bee3c5d3c1b6528d98e112b69 GIT binary patch literal 525815 zcmdpf2UrwW)b`j7HmtF`8pUp~ckjlEv4mJ+R}6xpC`3`Quf|>?_O5I1iXAIs$Bw1*`53Dnrp7JsNeVh`FWl=xpUi@op;YU?>T2?$9UAPo6aStOVZS-75shR ze+enHbMCw&_iy8nwX}Xd^Nv+TtJvw&xQ8H6ce)`WkkYp@xXcQ3C#iwWEfKEP2lYoFAgZ2Lm0lo%n zXIfe(nUYeQ?%(luAOC;M|75(OuAje;(y)QzQNDIBpP&wD^L(^@P`^NJ`(%9kM$PDd z{L6NZwq1Pwk1yQ%|4Nc1SxC+#Ns?rsan?T^lciOXxYB1x7fpYul@xUS$y`!rqJNXP z^UoV&l`z|&|KvYgo?bitOD&HE);qh<`l-?1Puf9AnUk&`z)(^dd;@xR?-*24`$%Yv zPq)jb^*&cC4y=DTe(rN+{By+_nTNjW8LSxptCRY)oL`giQyOR=f|?NSXk zHGvQP<734+2Y%A~8hkw7`Uxbs`_#(!L+Jd+YQ~Fy9qix0Q2yEdhYo`t zl%Hz7cUd!8FBQ#?RuPe>$Hmip3rHcPGGF|N3YL z<@5Nj*|C?8qKE(M9L^qmN$YoFAO8*%6!IvIR>26QJA+{wq^FQ}ivGr+G$ zP+z}ZK8D{)S1MJZN!d~^W!+0Q4(L;|Oj(1$P`W~uGG(fiD_?3CecP>nFYTX=)^6UT zS5VL1-a);4`gC%qMxc+kpRb=!r!u9>RV-JjY=v?aKRWr*|JL^F?$g7nFFX1-?(OeS zTS@<#_wwmk+sD_h2MPage|q!3wqLtY6Vr~ef93rgXxtHTe1rf_0{=+6@Q=7|$L@aq z{hH#F6uawm>g-d?r$>-a&-y+5eS)l4XZxRzKmD?{GuXh7FT9f<=kwz{eq11&Hw)(% z@;1&d;%%H?%-cA>gtu{iDR1NaGTz4d<-CpaD|j2{SMoN_ui|Z-U(MS%zlOJQel2g~ z{5syo`SrYw^P#+r^BZ^@=Qr{;&TryvoZrmbIKPFraegar#`!Sb#`*2Mjq^Kr z8|QIfaUS1QoFB=@kKo5q{D||Th4W*08|TOJHqMXZZJZy^+c-agw{iY2-p2Wfyp8iA zyp8jdcpK*@^ES>;;cc9s%G)?Ujkj@rI&b6r4Bp21nY@kjvv?clXY)4B&*5#HpUc}g zkM9-Ecjf(l{Md~jao%4z-<`K{z6WpPd;o9bd?0V*{2#oH^F4VR=X>!s&Ij=}&iCeR zobSWiINz7IaXy&0alRjK<9vVK#`yufjq?L}8|Me{HqH;`ZJZy%+c9QT-fD=D_q;Bmv>LU zz@UJh zj%|$nFGD=T+&^1d@167HZ;Ul`NPpFX`>gpa@LjZV%EE=3e_VEvc5KCu4&cuunq~b1 z=sr*WIt6quSz75B^jY9v<2W|k7N&pfXvGOSo=lik1;Fo}OY1Q5e(gICjhDi<=?(q` zRg`kSv^(Jhyurj|oJ$nZ9H1r~N=GUXMp+B88Sc9;=N|n;l>y^F~^1+=}{vm}t zv5}+{PlbJgg8HP*!>bzFjsMW{tNB-ef&<#$3jELi`^O4dqPoi=uh=i?(<}Kd=1RrS zLLMKbsN>OgKt4F9w!CwYx8kUoHE#YnUB8P+O&=`gntW@TvC)G zR=F?MUCSL6KHo`vTje5*+eM^sJ|Z2y9Y2rnFIVa7Iuw2{#WznEq~+Iv1e3`a6w2!JpwYV;y#kc10eHtYE6yMn?O754Afkjk2c-Nzm1AAuXU?BP5@u? z;R*Kn{d(2u9vIZGNKr_jC~@Q%d>;7p9r?mQ_SESaBR+eJoL50v^JyaEpLi>N*UjkrHx(3O3Vn%N^s0b15-`!yE|{J6<4v3A#_5$E zXJ>Tc9{oS_;u5DVLn*v1%Y(6u~e;xTCzc_vl`BypeG4{WV z{9XNy3`iXEFLO*yfBrP+8zKK`VGVAHMgC{>dwCwb{VeiN7kha5GZ$~u`fxwF*0*Bc zy6unri;{hE$ff@}_MyRX{2cc0{C}kNYtP7M3ko^!+nnd9+B$2_qi=-$2gMSJeab}J za4+|5N^)-VS?u3ly!ZZRuuriGN12*dMKWfMM$e8eDR$Z>vlF=2c$ZaP;$HuZ9#dSo zUx%R2^R6!sIK&+Ppj$@=yyN&e+{gWYg!|4X(k3MC)}P>r8d$gB!O!B}`GCU&9s)3G z@Ye}A)a&Wjsa8Nh&rW_lItKalvc}c^`Db-rij~mLnR%D>oNs%Lh4F8hqWn@U!X883 z9;P80iGhEMwOrY%jZu`h=ic9NZ0ZE~1)=F1;BCDGLyz9wfA{HWDAeim;Q#WVgIkHT zS_0*h%4A;W2!{@FAo1vkdye^0yJY7~v*Q-ERHV1*1i$ki-=?2@wA)10g4*BG3MVF6 zKVs`Wtlv@Vtik)VxDZCB`DoLl907__y5EItPTZo}R2}zI&z>Dg6Df_GH*9F=*|A4w z9|IMB_4X-cjf;N%7B%_efWIljpE0&?(r4<{chdnxVeYE=8Noc4bORqa?n?LM(|v0Eh#>ic7xtGr5+ zN4@fA;P#E*AG^_uCn=d!2)om*9FKP{8Gew+8HCF5PyiFuFY8rU_R zS~AzfN`YBj)X?X%XTHvuN_}^%{hXOCldHSy`wj`Xl|&76f0`no$%pX0bDMbiH+~ad z^uzJTKI;;~-NQZFUg`2Ye8s53xeE1u8Xi=;`n ztnZ^T9mZS2t1WWIlOT1*B6Z^baS}K7BH7@-m;8+6Jg|F;w^uOTaF(2z) z;p^Yx`(gjITpkOTuQ8Vw@^9hS6TiKA>d900hBy2$ZuZ_S$HI>-4Q-dd``Pfn+Kzvl zwGS4exgU97gzzn^5ksFX1!t` ze0F)=e*7iEr|F{in}&qXSGODAUr6{gCtrN98{t!%?`WeR<1ruWVSO*YANGelMlK)Z zRrsF?*Rw;zr-|d!!trV1_>AND^yK(-74R9t@u_lrdT@LO3-}D=_)P00KGSo2#&LWG z3i!M);Bzy_XI}xI+V{1P)A+o^^`{JCat>#Ao0a;?pR>r&_fC z^J#=n)2QQFHW5A}7ku~lcPl<;A2|4u@EP}Oqs3hbpOyBGs2fQ5^jP0*dUL|3N57%& z=dAdA{&zDE!e{o|VQJ=2l6S!G zIX+bZpGrzie;Rf08Nu=C=_EeWO7v%Tu0KV5LVu3t`ZHR<=LU|?egZz<+W`70J~iCt zS9@^#{+8SKYaE|l1^wAWqCbI8*mvkp89v=5`ZKZkRJnbJ{tN&E?)<{IJ0JPDs(Yx=%8N%(B}{UEg_ z;nO2)r3y0$pK2XXM~P@_Y(A{ zJGbwF+`cQ^zN_56e}c~$|MWjioBL-OP53mnac{cRiqEuv?QKc;H2M@C_<-=~-h5y0 z)`U;ba}{s;5g%HALr2C3Ftq7mm`~()k z+vxY=<1s&yuZQ)qANIG)!{vj#z$d2#@KdTA;C-moYZr^(d_Wc&u zpCUfte`@&qLDjgko2p&+r~W7Or*izC{0R62KZ5@W`#xUB|AhVw=KM&{|CH&^5Q+Z@ zeA?|h^bNnkYKk!*1`|G&$pxCsC471%@13Iw;nQ={k|P$Y|JmZn^!c`0_zZj0{?sU|eP3Jptta8LrER{Wjed;Be5{A{z4(6E zAM!vxB_)@a%P+&H=zqe#!~Zl0{-?9}bk_fr*>~vA;SzoX|I=A~LVtFX@OOWSeFr{e z{ODWxpU|J+M+Si(iTK3*H^_2@L6op zT7=KAu2WmJvf?xO;;5=t|FiY@++l=I_XZcdiV;48V`lCcMEDGIt-iRf)&I23ceK%u z@tBYGu)c}!hy5WBT%eq@sHBUdN+k)C}Q`H{%qp+B|DbyKyY zLx0Nf3H#nfz$f&l$lpc(^IPFlkH72T({yHCiq3>j_4U#5!wH|RQx=aj5}sX{gRmppPmIv#JCbZ zFC}f0$D8o^>gD@iixWOa+vYpk=x@o#V?Nfy`q&TqLmrjOr*e6LPmv$#=}(z`Pi%b2 zS^WwB6Y(YRci4B}Q;dItA8CGPL8<=<{pl~*cbWe57x=pjpWyG##y`zGJ}=@^)Sq5D z{K$Skaf4$^45>}{GzQ-N^>@N&=ua&w6}H;lFyogVcA3c=Bm-_Jd zk{&*_&!K=lz6Ab`{E_H?iuQdf=SR-k_b|@i4PO{v68%pTk1v5A+3g{}!Nwu4?v%9J z_uB3c8xTI-Gb$^x5k8H_GUuB@_;i2W>zAh$i5~^;K2?

2ap}sFZ}y(Sv5)9z^&o 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≺HzscJlcS;8V2kB0qxv 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. + +# make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 +from __future__ import print_function + +import sys +from TestCase import TestCase + +def main(): + '''This program runs SU2 and ensures that the output matches specified values. + This will be used to do checks when code is pushed to github + to make sure nothing is broken. ''' + + test_list = [] + + ####################### + ### Flamelet solver ### + ####################### + + # 2D planar laminar premixed methane flame on isothermal burner (restart) + cfd_flamelet_ch4 = TestCase('cfd_flamelet_ch4') + cfd_flamelet_ch4.cfg_dir = "flamelet/01_laminar_premixed_ch4_flame_cfd" + cfd_flamelet_ch4.cfg_file = "lam_prem_ch4_cfd.cfg" + cfd_flamelet_ch4.test_iter = 10 + cfd_flamelet_ch4.test_vals = [-15.313265, -15.180884, -15.291808, -8.488238, -15.010141, -15.920950] + cfd_flamelet_ch4.new_output = True + test_list.append(cfd_flamelet_ch4) + + # axisymmetric 2D planar laminar premixed methane flame on isothermal burner (restart) + cfd_flamelet_ch4_axi = TestCase('cfd_flamelet_ch4_axi') + cfd_flamelet_ch4_axi.cfg_dir = "flamelet/05_laminar_premixed_ch4_flame_cfd_axi" + cfd_flamelet_ch4_axi.cfg_file = "lam_prem_ch4_cfd_axi.cfg" + cfd_flamelet_ch4_axi.test_iter = 10 + cfd_flamelet_ch4_axi.test_vals = [-11.054149, -12.276393, -11.299388, -13.877670, -6.291548] + cfd_flamelet_ch4_axi.new_output = True + test_list.append(cfd_flamelet_ch4_axi) + + # 2D planar laminar partially premixed flame on isothermal burner and heat exchanger (restart) + cfd_flamelet_ch4_partial_premix = TestCase('cfd_flamelet_ch4_partial_premix') + cfd_flamelet_ch4_partial_premix.cfg_dir = "flamelet/06_laminar_partial_premixed_ch4_flame_cfd" + cfd_flamelet_ch4_partial_premix.cfg_file = "lam_partial_prem_ch4_cfd.cfg" + cfd_flamelet_ch4_partial_premix.test_iter = 10 + cfd_flamelet_ch4_partial_premix.test_vals = [-10.072805, -11.301138, -4.658971, -13.158224, -11.087511] + cfd_flamelet_ch4_partial_premix.new_output = True + test_list.append(cfd_flamelet_ch4_partial_premix) + + ######################### + ## NEMO solver ### + ######################### + + # Adiabatic thermal bath + thermalbath = TestCase('thermalbath') + thermalbath.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" + thermalbath.cfg_file = "thermalbath.cfg" + thermalbath.test_iter = 10 + thermalbath.test_vals = [0.945997, 0.945997, -12.039262, -12.171767, -32.000000, 10.013239] + test_list.append(thermalbath) + + # Adiabatic thermal bath + ionized = TestCase('ionized') + ionized.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" + ionized.cfg_file = "weakly_ionized.cfg" + ionized.test_iter = 10 + ionized.test_vals = [-29.806157, -11.130797, -11.337264, -17.235059, -17.578729, -15.190274, -25.013626, -32.000000, -5.174887, 0.000000, 0.000000] + ionized.test_vals_aarch64 = [-29.816386, -10.729986, -11.720016, -17.484469, -18.237891, -15.241605, -24.956918, -32.000000, -5.727244, 0.000000, 0.000000] + test_list.append(ionized) + + # Adiabatic frozen thermal bath + thermalbath_frozen = TestCase('thermalbath_frozen') + thermalbath_frozen.cfg_dir = "nonequilibrium/thermalbath/frozen" + thermalbath_frozen.cfg_file = "thermalbath_frozen.cfg" + thermalbath_frozen.test_iter = 10 + thermalbath_frozen.test_vals = [-32.000000, -32.000000, -11.962477, -11.962477, -32.000000, 10.013545] + test_list.append(thermalbath_frozen) + + # Inviscid single wedge, ausm, implicit + invwedge_a = TestCase('invwedge_ausm') + invwedge_a.cfg_dir = "nonequilibrium/invwedge" + invwedge_a.cfg_file = "invwedge_ausm.cfg" + invwedge_a.test_iter = 10 + invwedge_a.test_vals = [-1.042842, -1.567605, -18.301264, -18.628631, -18.574668, 2.275192, 1.879772, 5.319421, 0.873699] + invwedge_a.test_vals_aarch64 = [-1.042842, -1.567605, -18.301374, -18.628734, -18.574780, 2.275192, 1.879772, 5.319421, 0.873699] + test_list.append(invwedge_a) + + # Inviscid single wedge, ausm+-up2, implicit + invwedge_ap2 = TestCase('invwedge_ap2') + invwedge_ap2.cfg_dir = "nonequilibrium/invwedge" + invwedge_ap2.cfg_file = "invwedge_ausmplusup2.cfg" + invwedge_ap2.test_iter = 10 + invwedge_ap2.test_vals = [-0.952589, -1.477352, -16.736014, -17.064021, -17.009120, 2.387086, 1.287286, 5.403046, 0.956402] + invwedge_ap2.test_vals_aarch64 = [-0.952589, -1.477352, -16.736014, -17.064021, -17.009120, 2.387086, 1.287286, 5.403046, 0.956402] + test_list.append(invwedge_ap2) + + # Inviscid single wedge, msw, implicit + invwedge_msw = TestCase('invwedge_msw') + invwedge_msw.cfg_dir = "nonequilibrium/invwedge" + invwedge_msw.cfg_file = "invwedge_msw.cfg" + invwedge_msw.test_iter = 10 + invwedge_msw.test_vals = [-1.165957, -1.690720, -18.298756, -18.626164, -18.572159, 2.151638, 1.721236, 5.193813, 0.751584] + invwedge_msw.test_vals_aarch64 = [-1.165957, -1.690720, -18.301301, -18.628685, -18.574704, 2.151638, 1.721236, 5.193813, 0.751584] + test_list.append(invwedge_msw) + + # Inviscid single wedge, roe, implicit + invwedge_roe = TestCase('invwedge_roe') + invwedge_roe.cfg_dir = "nonequilibrium/invwedge" + invwedge_roe.cfg_file = "invwedge_roe.cfg" + invwedge_roe.test_iter = 10 + invwedge_roe.test_vals = [-1.038582, -1.563344, -18.300307, -18.627706, -18.573706, 2.278987, 1.861307, 5.323753, 0.874900] + invwedge_roe.test_vals_aarch64 = [-1.038582, -1.563344, -18.299879, -18.627263, -18.573276, 2.278987, 1.861307, 5.323753, 0.874900] + test_list.append(invwedge_roe) + + # Inviscid single wedge, lax, implicit + invwedge_lax = TestCase('invwedge_lax') + invwedge_lax.cfg_dir = "nonequilibrium/invwedge" + invwedge_lax.cfg_file = "invwedge_lax.cfg" + invwedge_lax.test_iter = 10 + invwedge_lax.test_vals = [-1.075662, -1.600425, -32.000000, -32.000000, -24.972431, 2.252952, 1.725158, 5.282140, 0.848823] + invwedge_lax.test_vals_aarch64 = [-1.075662, -1.600425, -32.000000, -32.000000, -24.972431, 2.252952, 1.725158, 5.282140, 0.848823] + test_list.append(invwedge_lax) + + # Inviscid single wedge, implicit, AUSM+M scheme + invwedge_ausm_m = TestCase('invwedge_ausm_m') + invwedge_ausm_m.cfg_dir = "nonequilibrium/invwedge" + invwedge_ausm_m.cfg_file = "invwedge_am.cfg" + invwedge_ausm_m.test_iter = 10 + invwedge_ausm_m.test_vals = [-1.055083, -1.579845, -16.739725, -17.063618, -17.012831, 2.265430, 1.797602, 5.302740, 0.856548] + invwedge_ausm_m.test_vals_aarch64 = [-1.055079, -1.579842, -16.739725, -17.063618, -17.012831, 2.265433, 1.797600, 5.302743, 0.856551] + test_list.append(invwedge_ausm_m) + + # Inviscid single wedge, implicit, NEMO supersonic inlet + invwedge_ss_inlet = TestCase('invwedge_ss_inlet') + invwedge_ss_inlet.cfg_dir = "nonequilibrium/invwedge" + invwedge_ss_inlet.cfg_file = "invwedge_ss_inlet.cfg" + invwedge_ss_inlet.test_iter = 10 + invwedge_ss_inlet.test_vals = [-1.042718, -1.567481, -18.250175, -18.579516, -18.523248, 2.275305, 1.880068, 5.319548, 0.873821] + invwedge_ss_inlet.test_vals_aarch64 = [-1.042718, -1.567481, -18.250175, -18.579516, -18.523248, 2.275305, 1.880068, 5.319548, 0.873821] + test_list.append(invwedge_ss_inlet) + + # Viscous single cone - axisymmetric + visc_cone = TestCase('visc_cone') + visc_cone.cfg_dir = "nonequilibrium/visc_wedge" + visc_cone.cfg_file = "axi_visccone.cfg" + visc_cone.test_iter = 10 + visc_cone.test_vals = [-5.222212, -5.746462, -20.559802, -20.510196, -20.439814, 1.255865, -3.208363, -0.016006, 0.093455, 32633.000000] + visc_cone.test_vals_aarch64 = [-5.222267, -5.746522, -20.559799, -20.510195, -20.440311, 1.255761, -3.208360, -0.016014, 0.093462, 32634.000000] + test_list.append(visc_cone) + + # Viscous single wedge with Mutation++ + #viscwedge_mpp = TestCase('viscwedge_mpp') + #viscwedge_mpp.cfg_dir = "nonequilibrium/viscwedge_mpp" + #viscwedge_mpp.cfg_file = "viscwedge_mpp.cfg" + #viscwedge_mpp.test_iter = 10 + #viscwedge_mpp.test_vals = [-20.608474, -20.586446,-20.707524, -5.171304,-5.696067,-1.548350,-2.071211,2.231054,-2.545494] + #test_list.append(viscwedge_mpp) + + # Viscous single wedge - super catalytic walls + super_cat = TestCase('super_cat') + super_cat.cfg_dir = "nonequilibrium/visc_wedge" + super_cat.cfg_file = "super_cat.cfg" + super_cat.test_iter = 10 + super_cat.test_vals = [-5.232590, -5.757884, -20.641547, -20.640244, -20.539243, 1.246889, -3.205235, -0.028406, 0.250857, 32459.000000] + test_list.append(super_cat) + + # Viscous single wedge - partially catalytic walls + partial_cat = TestCase('partial_cat') + partial_cat.cfg_dir = "nonequilibrium/visc_wedge" + partial_cat.cfg_file = "partial_cat.cfg" + partial_cat.test_iter = 10 + partial_cat.test_vals = [-5.210300, -5.735063, -20.880374, -20.825890, -23.475263, 1.806281, -2.813924, -0.078469, 0.496017, 29021.000000] + test_list.append(partial_cat) + + # Viscous cylinder, ionization, Gupta-Yos + ion_gy = TestCase('ion_gy') + ion_gy.cfg_dir = "nonequilibrium/visc_cylinder" + ion_gy.cfg_file = "cyl_ion_gy.cfg" + ion_gy.test_iter = 10 + ion_gy.test_vals = [-11.629873, -4.165563, -4.702662, -4.950351, -5.146155, -4.993878, -6.893332, 5.990109, 5.990004, -0.014849, 0.000000, 90090.000000] + test_list.append(ion_gy) + + ########################## + ### Compressible Euler ### + ########################## + + # Channel + channel = TestCase('channel') + channel.cfg_dir = "euler/channel" + channel.cfg_file = "inv_channel_RK.cfg" + channel.test_iter = 20 + channel.test_vals = [-2.647975, 2.818090, 0.022280, 0.004644] + test_list.append(channel) + + # NACA0012 + naca0012 = TestCase('naca0012') + naca0012.cfg_dir = "euler/naca0012" + naca0012.cfg_file = "inv_NACA0012_Roe.cfg" + naca0012.test_iter = 20 + naca0012.test_vals = [-4.014140, -3.537888, 0.333403, 0.021227] + test_list.append(naca0012) + + # Supersonic wedge + wedge = TestCase('wedge') + wedge.cfg_dir = "euler/wedge" + wedge.cfg_file = "inv_wedge_HLLC.cfg" + wedge.test_iter = 20 + wedge.test_vals = [-0.944740, 4.782451, -0.208522, 0.036742] + test_list.append(wedge) + + # ONERA M6 Wing + oneram6 = TestCase('oneram6') + oneram6.cfg_dir = "euler/oneram6" + oneram6.cfg_file = "inv_ONERAM6.cfg" + oneram6.test_iter = 10 + oneram6.test_vals = [-9.277150, -8.694005, 0.281703, 0.011821] + oneram6.timeout = 3200 + test_list.append(oneram6) + + # Fixed CL NACA0012 + fixedCL_naca0012 = TestCase('fixedcl_naca0012') + fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" + fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" + fixedCL_naca0012.test_iter = 10 + fixedCL_naca0012.test_vals = [-7.379831, -1.886302, 0.300000, 0.019471] + test_list.append(fixedCL_naca0012) + + # Polar sweep of the inviscid NACA0012 + polar_naca0012 = TestCase('polar_naca0012') + polar_naca0012.cfg_dir = "polar/naca0012" + polar_naca0012.cfg_file = "inv_NACA0012.cfg" + polar_naca0012.polar = True + polar_naca0012.test_iter = 10 + polar_naca0012.test_vals = [-1.217981, 4.256386, 0.009084, 0.016823] + polar_naca0012.test_vals_aarch64 = [-1.718925, 3.711429, 0.009217, 0.007784] + polar_naca0012.command = TestCase.Command(exec = "compute_polar.py", param = "-i 11") + # flaky test on arm64 + polar_naca0012.enabled_on_cpu_arch = ["x86_64"] + test_list.append(polar_naca0012) + + # HYPERSONIC FLOW PAST BLUNT BODY + bluntbody = TestCase('bluntbody') + bluntbody.cfg_dir = "euler/bluntbody" + bluntbody.cfg_file = "blunt.cfg" + bluntbody.test_iter = 20 + bluntbody.test_vals = [0.540009, 6.916653, 0.000000, 1.868976] + test_list.append(bluntbody) + + # Equivalent area NACA64-206 + ea_naca64206 = TestCase('ea_naca64206') + ea_naca64206.cfg_dir = "optimization_euler/equivalentarea_naca64206" + ea_naca64206.cfg_file = "NACA64206.cfg" + ea_naca64206.test_iter = 10 + ea_naca64206.test_vals = [-1.076215, -0.391987, -0.000701, 67775.000000] + test_list.append(ea_naca64206) + + # SUPERSONIC FLOW PAST A RAMP IN A CHANNEL + ramp = TestCase('ramp') + ramp.cfg_dir = "euler/ramp" + ramp.cfg_file = "inv_ramp.cfg" + ramp.test_iter = 10 + ramp.test_vals = [-13.399623, -7.788893, -0.081064, 0.056474] + ramp.test_vals_aarch64 = [-13.398422, -7.786461, -0.081064, 0.056474] + test_list.append(ramp) + + ########################## + ### Compressible N-S ### + ########################## + + # Laminar flat plate + flatplate = TestCase('flatplate') + flatplate.cfg_dir = "navierstokes/flatplate" + flatplate.cfg_file = "lam_flatplate.cfg" + flatplate.test_iter = 100 + flatplate.test_vals = [-9.336395, -3.849426, 0.001112, 0.036276, 2.361500, -2.325300, -2.279700, -2.279700] + test_list.append(flatplate) + + # Custom objective function + flatplate_udobj = TestCase('flatplate_udobj') + flatplate_udobj.cfg_dir = "user_defined_functions" + flatplate_udobj.cfg_file = "lam_flatplate.cfg" + flatplate_udobj.test_iter = 20 + flatplate_udobj.test_vals = [-6.653802, -1.181430, -0.794887, 0.000611, -0.000369, 0.000736, -0.001104, 596.690000, 299.800000, 296.890000, 21.492000, 0.563990, 37.148000, 2.278700] + test_list.append(flatplate_udobj) + + # Laminar cylinder (steady) + cylinder = TestCase('cylinder') + cylinder.cfg_dir = "navierstokes/cylinder" + cylinder.cfg_file = "lam_cylinder.cfg" + cylinder.test_iter = 25 + cylinder.test_vals = [-6.754517, -1.286785, -0.213640, 0.706519, 0.158870] + test_list.append(cylinder) + + # Laminar cylinder (low Mach correction) + cylinder_lowmach = TestCase('cylinder_lowmach') + cylinder_lowmach.cfg_dir = "navierstokes/cylinder" + cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" + cylinder_lowmach.test_iter = 25 + cylinder_lowmach.test_vals = [-6.858484, -1.396528, -1.854558, 110.033249, 0.001951] + test_list.append(cylinder_lowmach) + + # 2D Poiseuille flow (body force driven with periodic inlet / outlet) + poiseuille = TestCase('poiseuille') + poiseuille.cfg_dir = "navierstokes/poiseuille" + poiseuille.cfg_file = "lam_poiseuille.cfg" + poiseuille.test_iter = 10 + poiseuille.test_vals = [-5.050847, 0.648238, 0.000200, 13.639839, -2.047000] + poiseuille.tol = 0.001 + test_list.append(poiseuille) + + # 2D Poiseuille flow (inlet profile file) + poiseuille_profile = TestCase('poiseuille_profile') + poiseuille_profile.cfg_dir = "navierstokes/poiseuille" + poiseuille_profile.cfg_file = "profile_poiseuille.cfg" + poiseuille_profile.test_iter = 10 + poiseuille_profile.test_vals = [-12.492939, -7.672950, -0.000000, 2.085796] + poiseuille_profile.test_vals_aarch64 = [-12.492864, -7.671632, -0.000000, 2.085796] + test_list.append(poiseuille_profile) + + ########################## + ### Compressible RANS ### + ########################## + + # RAE2822 SA + rae2822_sa = TestCase('rae2822_sa') + rae2822_sa.cfg_dir = "rans/rae2822" + rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" + rae2822_sa.test_iter = 20 + rae2822_sa.test_vals = [-2.004689, -5.265782, 0.809463, 0.062016, -80576.000000] + test_list.append(rae2822_sa) + + # RAE2822 SST + rae2822_sst = TestCase('rae2822_sst') + rae2822_sst.cfg_dir = "rans/rae2822" + rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" + rae2822_sst.test_iter = 20 + rae2822_sst.test_vals = [-0.510369, 4.870643, 0.816647, 0.061833, -71779.000000] + test_list.append(rae2822_sst) + + # RAE2822 SST_SUST + rae2822_sst_sust = TestCase('rae2822_sst_sust') + rae2822_sst_sust.cfg_dir = "rans/rae2822" + rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" + rae2822_sst_sust.test_iter = 20 + rae2822_sst_sust.test_vals = [-2.537339, 4.870643, 0.816647, 0.061833] + test_list.append(rae2822_sst_sust) + + # Flat plate + turb_flatplate = TestCase('turb_flatplate') + turb_flatplate.cfg_dir = "rans/flatplate" + turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" + turb_flatplate.test_iter = 20 + turb_flatplate.test_vals = [-4.147727, -6.728308, -0.176232, 0.057717] + test_list.append(turb_flatplate) + + # Flat plate (compressible) with species inlet + turb_flatplate_species = TestCase('turb_flatplate_species') + turb_flatplate_species.cfg_dir = "rans/flatplate" + turb_flatplate_species.cfg_file = "turb_SA_flatplate_species.cfg" + turb_flatplate_species.test_iter = 20 + turb_flatplate_species.test_vals = [-4.147727, -0.634899, -1.770894, 1.334987, -3.250340, 9.000000, -6.700853, 5.000000, -6.991055, 10.000000, -6.033829, 0.996033, 0.996033] + test_list.append(turb_flatplate_species) + + # ONERA M6 Wing + turb_oneram6 = TestCase('turb_oneram6') + turb_oneram6.cfg_dir = "rans/oneram6" + turb_oneram6.cfg_file = "turb_ONERAM6.cfg" + turb_oneram6.test_iter = 10 + turb_oneram6.test_vals = [-2.388839, -6.689426, 0.230321, 0.157640, -32539.000000] + turb_oneram6.timeout = 3200 + test_list.append(turb_oneram6) + + # ONERA M6 Wing - vorticity confinement + turb_oneram6_vc = TestCase('turb_oneram6_vc') + turb_oneram6_vc.cfg_dir = "rans/oneram6" + turb_oneram6_vc.cfg_file = "turb_ONERAM6_vc.cfg" + turb_oneram6_vc.test_iter = 15 + turb_oneram6_vc.test_vals = [-2.262387, -6.626454, 0.228392, 0.140799, -27107.000000] + turb_oneram6_vc.timeout = 3200 + test_list.append(turb_oneram6_vc) + + # ONERA M6 Wing - Newton-Krylov + turb_oneram6_nk = TestCase('turb_oneram6_nk') + turb_oneram6_nk.cfg_dir = "rans/oneram6" + turb_oneram6_nk.cfg_file = "turb_ONERAM6_nk.cfg" + turb_oneram6_nk.test_iter = 20 + turb_oneram6_nk.test_vals = [-4.892252, -4.514006, -11.432306, 0.221025, 0.045570, 2.000000, -0.899460, 31.384000] + turb_oneram6_nk.timeout = 600 + turb_oneram6_nk.tol = 0.0001 + test_list.append(turb_oneram6_nk) + + # NACA0012 (SA, FUN3D finest grid results: CL=1.0983, CD=0.01242) + turb_naca0012_sa = TestCase('turb_naca0012_sa') + turb_naca0012_sa.cfg_dir = "rans/naca0012" + turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" + turb_naca0012_sa.test_iter = 5 + turb_naca0012_sa.test_vals = [-10.453509, -13.866376, 1.057622, 0.022916, 20.000000, -1.867547, 20.000000, -3.632893, -44.540000] + turb_naca0012_sa.timeout = 3200 + test_list.append(turb_naca0012_sa) + + # NACA0012 (SST, FUN3D finest grid results: CL=1.0840, CD=0.01253) + turb_naca0012_sst = TestCase('turb_naca0012_sst') + turb_naca0012_sst.cfg_dir = "rans/naca0012" + turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" + turb_naca0012_sst.test_iter = 10 + turb_naca0012_sst.test_vals = [-12.219694, -14.440925, -7.107551, 1.050109, 0.019148, -1.601287, -38.510000] + turb_naca0012_sst.test_vals_aarch64 = [-12.219735, -14.440925, -7.107550, 1.050109, 0.019148, -1.601262, -38.510000] + turb_naca0012_sst.timeout = 3200 + test_list.append(turb_naca0012_sst) + + # NACA0012 (SST_SUST, FUN3D finest grid results: CL=1.0840, CD=0.01253) + turb_naca0012_sst_sust = TestCase('turb_naca0012_sst_sust') + turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" + turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" + turb_naca0012_sst_sust.test_iter = 10 + turb_naca0012_sst_sust.test_vals = [-12.148637, -14.756583, -6.342201, 1.001189, 0.019384, -1.579100] + turb_naca0012_sst_sust.test_vals_aarch64 = [-12.148716, -14.756582, -6.342200, 1.001189, 0.019384, -1.579104] + turb_naca0012_sst_sust.timeout = 3200 + test_list.append(turb_naca0012_sst_sust) + + # NACA0012 (SST, 2003m, Vorticity) + turb_naca0012_sst_2003_Vm = TestCase('turb_naca0012_sst_2003_Vm') + turb_naca0012_sst_2003_Vm.cfg_dir = "rans/naca0012" + turb_naca0012_sst_2003_Vm.cfg_file = "turb_NACA0012_sst_2003-Vm.cfg" + turb_naca0012_sst_2003_Vm.test_iter = 10 + turb_naca0012_sst_2003_Vm.test_vals = [-7.664806, -10.014760, -3.358584, 1.048643, 0.019718, -2.067883] + turb_naca0012_sst_2003_Vm.timeout = 3200 + test_list.append(turb_naca0012_sst_2003_Vm) + + # NACA0012 (SST, 1994m Kato-Launder) + turb_naca0012_sst_1994_KLm = TestCase('turb_naca0012_sst_1994_KLm') + turb_naca0012_sst_1994_KLm.cfg_dir = "rans/naca0012" + turb_naca0012_sst_1994_KLm.cfg_file = "turb_NACA0012_sst_1994-KLm.cfg" + turb_naca0012_sst_1994_KLm.test_iter = 10 + turb_naca0012_sst_1994_KLm.test_vals = [-8.570837, -10.805211, -3.997146, 1.049397, 0.019183, -1.805750] + turb_naca0012_sst_1994_KLm.timeout = 3200 + test_list.append(turb_naca0012_sst_1994_KLm) + + + # NACA0012 (SST, fixed values for turbulence quantities) + turb_naca0012_sst_fixedvalues = TestCase('turb_naca0012_sst_fixedvalues') + turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012" + turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg" + turb_naca0012_sst_fixedvalues.test_iter = 10 + turb_naca0012_sst_fixedvalues.test_vals = [-5.216737, -10.025507, -1.615166, 1.021891, 0.040213, -3.731060] + turb_naca0012_sst_fixedvalues.timeout = 3200 + test_list.append(turb_naca0012_sst_fixedvalues) + + # NACA0012 (SST, explicit Euler for flow and turbulence equations) + turb_naca0012_sst_expliciteuler = TestCase('turb_naca0012_sst_expliciteuler') + turb_naca0012_sst_expliciteuler.cfg_dir = "rans/naca0012" + turb_naca0012_sst_expliciteuler.cfg_file = "turb_NACA0012_sst_expliciteuler.cfg" + turb_naca0012_sst_expliciteuler.test_iter = 10 + turb_naca0012_sst_expliciteuler.test_vals = [-3.532289, -3.157766, 3.364024, 1.122901, 0.500798, -float("inf")] + turb_naca0012_sst_expliciteuler.timeout = 3200 + test_list.append(turb_naca0012_sst_expliciteuler) + + # PROPELLER + propeller = TestCase('propeller') + propeller.cfg_dir = "rans/propeller" + propeller.cfg_file = "propeller.cfg" + propeller.test_iter = 10 + propeller.test_vals = [-3.389575, -8.409251, 0.000048, 0.056329] + propeller.timeout = 3200 + test_list.append(propeller) + + # Actuator disk BEM method for propeller + actuatordisk_bem = TestCase('actuatordisk_bem') + actuatordisk_bem.cfg_dir = "rans/actuatordisk_bem" + actuatordisk_bem.cfg_file = "actuatordisk_bem.cfg" + actuatordisk_bem.test_iter = 15 + actuatordisk_bem.test_vals = [-5.282249, -10.335140, 0.001383, -0.375718] + actuatordisk_bem.timeout = 3200 + actuatordisk_bem.tol = 0.001 + test_list.append(actuatordisk_bem) + + ####################################### + ### Axisymmetric Compressible RANS ### + ####################################### + + # Axisymmetric air nozzle (transonic) restart + axi_rans_air_nozzle_restart = TestCase('axi_rans_air_nozzle_restart') + axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" + axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" + axi_rans_air_nozzle_restart.test_iter = 10 + axi_rans_air_nozzle_restart.test_vals = [-12.063597, -7.006585, -8.702557, -4.039824, -2019.8] + axi_rans_air_nozzle_restart.tol = 0.0001 + test_list.append(axi_rans_air_nozzle_restart) + + ################################# + ## Compressible RANS Restart ### + ################################# + + # NACA0012 SST Multigrid restart + turb_naca0012_sst_restart_mg = TestCase('turb_naca0012_sst_restart_mg') + turb_naca0012_sst_restart_mg.cfg_dir = "rans/naca0012" + turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" + turb_naca0012_sst_restart_mg.test_iter = 20 + turb_naca0012_sst_restart_mg.ntest_vals = 5 + turb_naca0012_sst_restart_mg.test_vals = [-7.612353, -7.432347, -1.918249, -0.000013, 0.079110] + turb_naca0012_sst_restart_mg.timeout = 3200 + turb_naca0012_sst_restart_mg.tol = 0.000001 + test_list.append(turb_naca0012_sst_restart_mg) + + ############################# + ### Incompressible Euler ### + ############################# + + # NACA0012 Hydrofoil + inc_euler_naca0012 = TestCase('inc_euler_naca0012') + inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" + inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" + inc_euler_naca0012.test_iter = 20 + inc_euler_naca0012.test_vals = [-4.801273, -3.773079, 0.495236, 0.007346] + test_list.append(inc_euler_naca0012) + + # C-D nozzle with pressure inlet and mass flow outlet + inc_nozzle = TestCase('inc_nozzle') + inc_nozzle.cfg_dir = "incomp_euler/nozzle" + inc_nozzle.cfg_file = "inv_nozzle.cfg" + inc_nozzle.test_iter = 20 + inc_nozzle.test_vals = [-5.982321, -4.953536, 0.000454, 0.121390] + test_list.append(inc_nozzle) + + ############################# + ### Incompressible N-S ### + ############################# + + # Laminar cylinder + inc_lam_cylinder = TestCase('inc_lam_cylinder') + inc_lam_cylinder.cfg_dir = "incomp_navierstokes/cylinder" + inc_lam_cylinder.cfg_file = "incomp_cylinder.cfg" + inc_lam_cylinder.test_iter = 10 + inc_lam_cylinder.test_vals = [-4.004072, -3.194881, -0.076553, 7.780048] + test_list.append(inc_lam_cylinder) + + # Buoyancy-driven cavity + inc_buoyancy = TestCase('inc_buoyancy') + inc_buoyancy.cfg_dir = "incomp_navierstokes/buoyancy_cavity" + inc_buoyancy.cfg_file = "lam_buoyancy_cavity.cfg" + inc_buoyancy.test_iter = 20 + inc_buoyancy.test_vals = [-4.435827, 0.508037, 0.000000, 0.000000] + test_list.append(inc_buoyancy) + + # Laminar heated cylinder with polynomial fluid model + inc_poly_cylinder = TestCase('inc_poly_cylinder') + inc_poly_cylinder.cfg_dir = "incomp_navierstokes/cylinder" + inc_poly_cylinder.cfg_file = "poly_cylinder.cfg" + inc_poly_cylinder.test_iter = 20 + inc_poly_cylinder.test_vals = [-7.791831, -2.062292, 0.013040, 1.913997, -171.120000] + test_list.append(inc_poly_cylinder) + + # X-coarse laminar bend as a mixed element CGNS test + inc_lam_bend = TestCase('inc_lam_bend') + inc_lam_bend.cfg_dir = "incomp_navierstokes/bend" + inc_lam_bend.cfg_file = "lam_bend.cfg" + inc_lam_bend.test_iter = 10 + inc_lam_bend.test_vals = [-3.447746, -3.085237, -0.020816, 1.147373] + test_list.append(inc_lam_bend) + + # 3D laminar channnel with 1 cell in flow direction, streamwise periodic + sp_pipeSlice_3d_dp_hf_tp = TestCase('sp_pipeSlice_3d_dp_hf_tp') + sp_pipeSlice_3d_dp_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/pipeSlice_3d" + sp_pipeSlice_3d_dp_hf_tp.cfg_file = "sp_pipeSlice_3d_dp_hf_tp.cfg" + sp_pipeSlice_3d_dp_hf_tp.test_iter = 10 + sp_pipeSlice_3d_dp_hf_tp.test_vals = [-11.119796, -11.234737, -8.694310, -0.000023] + test_list.append(sp_pipeSlice_3d_dp_hf_tp) + + # 2D pin array with heat transfer BC on pin surfaces + inc_heatTransfer_BC = TestCase('inc_heatTransfer_BC') + inc_heatTransfer_BC.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" + inc_heatTransfer_BC.cfg_file = "BC_HeatTransfer.cfg" + inc_heatTransfer_BC.test_iter = 50 + inc_heatTransfer_BC.test_vals = [-8.242651, -7.341179, -7.407346, -0.152603, -1667.300000] + test_list.append(inc_heatTransfer_BC) + + ############################ + ### Incompressible RANS ### + ############################ + + # NACA0012 + inc_turb_naca0012 = TestCase('inc_turb_naca0012') + inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" + inc_turb_naca0012.cfg_file = "naca0012.cfg" + inc_turb_naca0012.test_iter = 20 + inc_turb_naca0012.test_vals = [-4.788596, -11.039529, -0.000002, 0.309504] + test_list.append(inc_turb_naca0012) + + # NACA0012, SST_SUST + inc_turb_naca0012_sst_sust = TestCase('inc_turb_naca0012_sst_sust') + inc_turb_naca0012_sst_sust.cfg_dir = "incomp_rans/naca0012" + inc_turb_naca0012_sst_sust.cfg_file = "naca0012_SST_SUST.cfg" + inc_turb_naca0012_sst_sust.test_iter = 20 + inc_turb_naca0012_sst_sust.test_vals = [-7.270578, 0.018403, -0.000001, 0.307688] + test_list.append(inc_turb_naca0012_sst_sust) + + #################### + ### DG-FEM Euler ### + #################### + + # NACA0012 + fem_euler_naca0012 = TestCase('fem_euler_naca0012') + fem_euler_naca0012.cfg_dir = "hom_euler/NACA0012_5thOrder" + fem_euler_naca0012.cfg_file = "fem_NACA0012_reg.cfg" + fem_euler_naca0012.test_iter = 10 + fem_euler_naca0012.test_vals = [-6.519946, -5.976944, 0.255551, 0.000028] + test_list.append(fem_euler_naca0012) + + ############################ + ### DG-FEM Navier-Stokes ### + ############################ + + # Flat plate + fem_ns_flatplate = TestCase('fem_ns_flatplate') + fem_ns_flatplate.cfg_dir = "hom_navierstokes/FlatPlate/nPoly4" + fem_ns_flatplate.cfg_file = "lam_flatplate_reg.cfg" + fem_ns_flatplate.test_iter = 25 + fem_ns_flatplate.test_vals = [1.383727, 3.175247, 0.058387, 0.257951] + test_list.append(fem_ns_flatplate) + + # Steady cylinder + fem_ns_cylinder = TestCase('fem_ns_cylinder') + fem_ns_cylinder.cfg_dir = "hom_navierstokes/CylinderViscous/nPoly3" + fem_ns_cylinder.cfg_file = "fem_Cylinder_reg.cfg" + fem_ns_cylinder.test_iter = 10 + fem_ns_cylinder.test_vals = [0.454960, 0.979123, -0.000028, 79.984799] + test_list.append(fem_ns_cylinder) + + # Steady sphere + fem_ns_sphere = TestCase('fem_ns_sphere') + fem_ns_sphere.cfg_dir = "hom_navierstokes/SphereViscous/nPoly3_QuadDominant" + fem_ns_sphere.cfg_file = "fem_Sphere_reg.cfg" + fem_ns_sphere.test_iter = 10 + fem_ns_sphere.test_vals = [-0.288121, 0.240324, 0.000258, 21.797363] + test_list.append(fem_ns_sphere) + + # Unsteady sphere ADER + fem_ns_sphere_ader = TestCase('fem_ns_sphere_ader') + fem_ns_sphere_ader.cfg_dir = "hom_navierstokes/SphereViscous/nPoly3_QuadDominant" + fem_ns_sphere_ader.cfg_file = "fem_Sphere_reg_ADER.cfg" + fem_ns_sphere_ader.test_iter = 10 + fem_ns_sphere_ader.test_vals = [-35.000000, -35.000000, 0.000047, 31.110911] + test_list.append(fem_ns_sphere_ader) + + # Unsteady cylinder + fem_ns_unsteady_cylinder = TestCase('fem_ns_unsteady_cylinder') + fem_ns_unsteady_cylinder.cfg_dir = "hom_navierstokes/UnsteadyCylinder/nPoly4" + fem_ns_unsteady_cylinder.cfg_file = "fem_unst_cylinder.cfg" + fem_ns_unsteady_cylinder.test_iter = 11 + fem_ns_unsteady_cylinder.test_vals = [-3.558582, -3.014464, -0.038927, 1.383983] + fem_ns_unsteady_cylinder.unsteady = True + test_list.append(fem_ns_unsteady_cylinder) + + # Unsteady cylinder ADER + fem_ns_unsteady_cylinder_ader = TestCase('fem_ns_unsteady_cylinder_ader') + fem_ns_unsteady_cylinder_ader.cfg_dir = "hom_navierstokes/UnsteadyCylinder/nPoly4" + fem_ns_unsteady_cylinder_ader.cfg_file = "fem_unst_cylinder_ADER.cfg" + fem_ns_unsteady_cylinder_ader.test_iter = 11 + fem_ns_unsteady_cylinder_ader.test_vals = [-35.000000, -35.000000, -0.041003, 1.391339] + fem_ns_unsteady_cylinder_ader.unsteady = True + test_list.append(fem_ns_unsteady_cylinder_ader) + + ########################### + ### Turbulence modeling ### + ########################### + + # SA Baseline (Identical to RANS SA RAE2822) + turbmod_sa_bsl_rae2822 = TestCase('turbmod_sa_bsl_rae2822') + turbmod_sa_bsl_rae2822.cfg_dir = "turbulence_models/sa/rae2822" + turbmod_sa_bsl_rae2822.cfg_file = "turb_SA_BSL_RAE2822.cfg" + turbmod_sa_bsl_rae2822.test_iter = 20 + turbmod_sa_bsl_rae2822.test_vals = [-2.004689, 0.742306, 0.497308, -5.265782, 0.809463, 0.062016] + test_list.append(turbmod_sa_bsl_rae2822) + + # SA Negative + turbmod_sa_neg_rae2822 = TestCase('turbmod_sa_neg_rae2822') + turbmod_sa_neg_rae2822.cfg_dir = "turbulence_models/sa/rae2822" + turbmod_sa_neg_rae2822.cfg_file = "turb_SA_NEG_RAE2822.cfg" + turbmod_sa_neg_rae2822.test_iter = 10 + turbmod_sa_neg_rae2822.test_vals = [-1.466238, 3.169232, 2.756518, 4.722767, 1.120253, 0.378675, -83444.000000] + turbmod_sa_neg_rae2822.test_vals_aarch64 = [-1.359612, 1.493629, 1.218367, -1.441703, 1.248499, 0.457987, -86467.000000] + test_list.append(turbmod_sa_neg_rae2822) + + # SA Compressibility Correction + turbmod_sa_comp_rae2822 = TestCase('turbmod_sa_comp_rae2822') + turbmod_sa_comp_rae2822.cfg_dir = "turbulence_models/sa/rae2822" + turbmod_sa_comp_rae2822.cfg_file = "turb_SA_COMP_RAE2822.cfg" + turbmod_sa_comp_rae2822.test_iter = 20 + turbmod_sa_comp_rae2822.test_vals = [-2.004687, 0.742304, 0.497309, -5.266067, 0.809467, 0.062029] + test_list.append(turbmod_sa_comp_rae2822) + + # SA Edwards + turbmod_sa_edw_rae2822 = TestCase('turbmod_sa_edw_rae2822') + turbmod_sa_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" + turbmod_sa_edw_rae2822.cfg_file = "turb_SA_EDW_RAE2822.cfg" + turbmod_sa_edw_rae2822.test_iter = 20 + turbmod_sa_edw_rae2822.test_vals = [-2.004687, 0.742306, 0.497310, -5.290769, 0.809485, 0.062036] + test_list.append(turbmod_sa_edw_rae2822) + + # SA Compressibility and Edwards + turbmod_sa_comp_edw_rae2822 = TestCase('turbmod_sa_comp_edw_rae2822') + turbmod_sa_comp_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" + turbmod_sa_comp_edw_rae2822.cfg_file = "turb_SA_COMP_EDW_RAE2822.cfg" + turbmod_sa_comp_edw_rae2822.test_iter = 20 + turbmod_sa_comp_edw_rae2822.test_vals = [-2.004685, 0.742307, 0.497311, -5.290750, 0.809487, 0.062045] + test_list.append(turbmod_sa_comp_edw_rae2822) + + # SA QCR + turbmod_sa_qcr_rae2822 = TestCase('turbmod_sa_qcr_rae2822') + turbmod_sa_qcr_rae2822.cfg_dir = "turbulence_models/sa/rae2822" + turbmod_sa_qcr_rae2822.cfg_file = "turb_SA_QCR_RAE2822.cfg" + turbmod_sa_qcr_rae2822.test_iter = 20 + turbmod_sa_qcr_rae2822.test_vals = [-2.004793, 0.742353, 0.497315, -5.265962, 0.807841, 0.062027] + test_list.append(turbmod_sa_qcr_rae2822) + + ############################ + ### Transition ### + ############################ + + # Schubauer-Klebanoff Natural Transition Case + schubauer_klebanoff_transition = TestCase('Schubauer_Klebanoff') + schubauer_klebanoff_transition.cfg_dir = "transition/Schubauer_Klebanoff" + schubauer_klebanoff_transition.cfg_file = "transitional_BC_model_ConfigFile.cfg" + schubauer_klebanoff_transition.test_iter = 10 + schubauer_klebanoff_transition.test_vals = [-7.994740, -13.240225, 0.000046, 0.007987] + test_list.append(schubauer_klebanoff_transition) + + ##################################### + ### Cont. adj. compressible Euler ### + ##################################### + + # Inviscid NACA0012 + contadj_naca0012 = TestCase('contadj_naca0012') + contadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" + contadj_naca0012.cfg_file = "inv_NACA0012.cfg" + contadj_naca0012.test_iter = 5 + contadj_naca0012.test_vals = [-9.300816, -14.587365, 0.300920, 0.019552] + test_list.append(contadj_naca0012) + + # Inviscid ONERA M6 + contadj_oneram6 = TestCase('contadj_oneram6') + contadj_oneram6.cfg_dir = "cont_adj_euler/oneram6" + contadj_oneram6.cfg_file = "inv_ONERAM6.cfg" + contadj_oneram6.test_iter = 10 + contadj_oneram6.test_vals = [-12.130993, -12.702085, 0.685900, 0.007594] + test_list.append(contadj_oneram6) + + # Inviscid WEDGE: tests averaged outflow total pressure adjoint + contadj_wedge = TestCase('contadj_wedge') + contadj_wedge.cfg_dir = "cont_adj_euler/wedge" + contadj_wedge.cfg_file = "inv_wedge_ROE.cfg" + contadj_wedge.test_iter = 10 + contadj_wedge.test_vals = [2.872691, -2.755572, 853010.000000, -0.000000] + test_list.append(contadj_wedge) + + # Inviscid fixed CL NACA0012 + contadj_fixed_CL_naca0012 = TestCase('contadj_fixedcl_naca0012') + contadj_fixed_CL_naca0012.cfg_dir = "fixed_cl/naca0012" + contadj_fixed_CL_naca0012.cfg_file = "inv_NACA0012_ContAdj.cfg" + contadj_fixed_CL_naca0012.test_iter = 100 + contadj_fixed_CL_naca0012.test_vals = [0.275856, -5.200511, 0.342710, 0.000105] + test_list.append(contadj_fixed_CL_naca0012) + + ################################### + ### Cont. adj. compressible N-S ### + ################################### + + # Adjoint laminar cylinder + contadj_ns_cylinder = TestCase('contadj_ns_cylinder') + contadj_ns_cylinder.cfg_dir = "cont_adj_navierstokes/cylinder" + contadj_ns_cylinder.cfg_file = "lam_cylinder.cfg" + contadj_ns_cylinder.test_iter = 20 + contadj_ns_cylinder.test_vals = [-3.651430, -9.113079, 2.056700, -0.000000] + test_list.append(contadj_ns_cylinder) + + # Adjoint laminar naca0012 subsonic + contadj_ns_naca0012_sub = TestCase('contadj_ns_naca0012_sub') + contadj_ns_naca0012_sub.cfg_dir = "cont_adj_navierstokes/naca0012_sub" + contadj_ns_naca0012_sub.cfg_file = "lam_NACA0012.cfg" + contadj_ns_naca0012_sub.test_iter = 20 + contadj_ns_naca0012_sub.test_vals = [-2.743268, -8.215193, 0.518810, 0.001210] + test_list.append(contadj_ns_naca0012_sub) + + # Adjoint laminar naca0012 transonic + contadj_ns_naca0012_trans = TestCase('contadj_ns_naca0012_trans') + contadj_ns_naca0012_trans.cfg_dir = "cont_adj_navierstokes/naca0012_trans" + contadj_ns_naca0012_trans.cfg_file = "lam_NACA0012.cfg" + contadj_ns_naca0012_trans.test_iter = 20 + contadj_ns_naca0012_trans.test_vals = [-1.039664, -6.575019, 1.772300, 0.012495] + test_list.append(contadj_ns_naca0012_trans) + + ####################################################### + ### Cont. adj. compressible RANS (frozen viscosity) ### + ####################################################### + + # Adjoint turbulent NACA0012 + contadj_rans_naca0012 = TestCase('contadj_rans_naca0012') + contadj_rans_naca0012.cfg_dir = "cont_adj_rans/naca0012" + contadj_rans_naca0012.cfg_file = "turb_nasa.cfg" + contadj_rans_naca0012.test_iter = 20 + contadj_rans_naca0012.test_vals = [-0.794162, -5.761722, 19.214000, -0.000000] + test_list.append(contadj_rans_naca0012) + + # Adjoint turbulent NACA0012 with binary restarts + contadj_rans_naca0012_bin = TestCase('contadj_rans_naca0012_bin') + contadj_rans_naca0012_bin.cfg_dir = "cont_adj_rans/naca0012" + contadj_rans_naca0012_bin.cfg_file = "turb_nasa_binary.cfg" + contadj_rans_naca0012_bin.test_iter = 18 + contadj_rans_naca0012_bin.test_vals = [-0.794169, -5.761671, 19.214000, -0.000000] + test_list.append(contadj_rans_naca0012_bin) + + # Adjoint turbulent RAE2822 + contadj_rans_rae2822 = TestCase('contadj_rans_rae822') + contadj_rans_rae2822.cfg_dir = "cont_adj_rans/rae2822" + contadj_rans_rae2822.cfg_file = "turb_SA_RAE2822.cfg" + contadj_rans_rae2822.test_iter = 20 + contadj_rans_rae2822.test_vals = [-5.372407, -10.874841, -0.212470, 0.005448] + test_list.append(contadj_rans_rae2822) + + ############################# + ### Compressibele RANS UQ ### + ############################# + + # NACA0012 1c + turb_naca0012_1c = TestCase('turb_naca0012_1c') + turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" + turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" + turb_naca0012_1c.test_iter = 10 + turb_naca0012_1c.test_vals = [-4.976284, 1.141136, 0.463115, -0.083307] + turb_naca0012_1c.test_vals_aarch64 = [-4.983453, 1.138491, 0.459947, -0.084114] + test_list.append(turb_naca0012_1c) + + # NACA0012 2c + turb_naca0012_2c = TestCase('turb_naca0012_2c') + turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" + turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" + turb_naca0012_2c.test_iter = 10 + turb_naca0012_2c.test_vals = [-5.483317, 0.968654, 0.307611, -0.118062] + turb_naca0012_2c.test_vals_aarch64 = [-5.483338, 0.968646, 0.308055, -0.117915] + test_list.append(turb_naca0012_2c) + + # NACA0012 3c + turb_naca0012_3c = TestCase('turb_naca0012_3c') + turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" + turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" + turb_naca0012_3c.test_iter = 10 + turb_naca0012_3c.test_vals = [-5.584309, 0.931259, 0.281831, -0.117821] + test_list.append(turb_naca0012_3c) + + # NACA0012 p1c1 + turb_naca0012_p1c1 = TestCase('turb_naca0012_p1c1') + turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" + turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" + turb_naca0012_p1c1.test_iter = 10 + turb_naca0012_p1c1.test_vals = [-5.128887, 1.076846, 0.589839, -0.051939] + turb_naca0012_p1c1.test_vals_aarch64 = [-5.128883, 1.076873, 0.590376, -0.051754] + test_list.append(turb_naca0012_p1c1) + + # NACA0012 p1c2 + turb_naca0012_p1c2 = TestCase('turb_naca0012_p1c2') + turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" + turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" + turb_naca0012_p1c2.test_iter = 10 + turb_naca0012_p1c2.test_vals = [-5.554633, 0.943626, 0.402263, -0.100275] + turb_naca0012_p1c2.test_vals_aarch64 = [-5.554636, 0.943621, 0.401650, -0.100495] + test_list.append(turb_naca0012_p1c2) + + ###################################### + ### Harmonic Balance ### + ###################################### + + # Description of the regression test + harmonic_balance = TestCase('harmonic_balance') + harmonic_balance.cfg_dir = "harmonic_balance" + harmonic_balance.cfg_file = "HB.cfg" + harmonic_balance.test_iter = 25 + harmonic_balance.test_vals = [-1.589739, 0.790169, 0.937053, 3.922579] + test_list.append(harmonic_balance) + + # Turbulent pitching NACA 64a010 airfoil + hb_rans_preconditioning = TestCase('hb_rans_preconditioning') + hb_rans_preconditioning.cfg_dir = "harmonic_balance/hb_rans_preconditioning" + hb_rans_preconditioning.cfg_file = "davis.cfg" + hb_rans_preconditioning.test_iter = 25 + hb_rans_preconditioning.tol = 0.00001 + hb_rans_preconditioning.test_vals = [-1.902098, 0.484070, 0.601481, 3.609002, -5.949360] + test_list.append(hb_rans_preconditioning) + + ###################################### + ### Moving Wall ### + ###################################### + + # Rotating NACA 0012 + rot_naca0012 = TestCase('rot_naca0012') + rot_naca0012.cfg_dir = "rotating/naca0012" + rot_naca0012.cfg_file = "rot_NACA0012.cfg" + rot_naca0012.test_iter = 25 + rot_naca0012.test_vals = [-2.698005, 2.845328, -0.079439, 0.002128] + test_list.append(rot_naca0012) + + # Lid-driven cavity + cavity = TestCase('cavity') + cavity.cfg_dir = "moving_wall/cavity" + cavity.cfg_file = "lam_cavity.cfg" + cavity.test_iter = 25 + cavity.test_vals = [-5.611007, -0.146826, 1.113206, 1.491678] + test_list.append(cavity) + + # Spinning cylinder + spinning_cylinder = TestCase('spinning_cylinder') + spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" + spinning_cylinder.cfg_file = "spinning_cylinder.cfg" + spinning_cylinder.test_iter = 25 + spinning_cylinder.test_vals = [-7.802803, -2.362844, 1.687705, 1.519676] + test_list.append(spinning_cylinder) + + ###################################### + ### Unsteady ### + ###################################### + + # Square cylinder + square_cylinder = TestCase('square_cylinder') + square_cylinder.cfg_dir = "unsteady/square_cylinder" + square_cylinder.cfg_file = "turb_square.cfg" + square_cylinder.test_iter = 3 + square_cylinder.test_vals = [-1.173603, 0.058045, 1.399795, 2.220404, 1.399749, 2.218605, -0.453330] + square_cylinder.unsteady = True + test_list.append(square_cylinder) + + # Gust + sine_gust = TestCase('sine_gust') + sine_gust.cfg_dir = "gust" + sine_gust.cfg_file = "inv_gust_NACA0012.cfg" + sine_gust.test_iter = 5 + sine_gust.test_vals = [-1.977520, 3.481804, -0.012377, -0.007389] + sine_gust.unsteady = True + test_list.append(sine_gust) + + # Aeroelastic + aeroelastic = TestCase('aeroelastic') + aeroelastic.cfg_dir = "aeroelastic" + aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" + aeroelastic.test_iter = 2 + aeroelastic.test_vals = [0.076550, 0.033042, -0.001650, -0.000127] + aeroelastic.unsteady = True + test_list.append(aeroelastic) + + # Delayed Detached Eddy Simulation + ddes_flatplate = TestCase('ddes_flatplate') + ddes_flatplate.cfg_dir = "ddes/flatplate" + ddes_flatplate.cfg_file = "ddes_flatplate.cfg" + ddes_flatplate.test_iter = 10 + ddes_flatplate.test_vals = [-2.714757, -5.882779, -0.215005, 0.023783, -618.130000] + ddes_flatplate.unsteady = True + test_list.append(ddes_flatplate) + + # unsteady pitching NACA0015, SA + unst_inc_turb_naca0015_sa = TestCase('unst_inc_turb_naca0015_sa') + unst_inc_turb_naca0015_sa.cfg_dir = "unsteady/pitching_naca0015_rans_inc" + unst_inc_turb_naca0015_sa.cfg_file = "config_incomp_turb_sa.cfg" + unst_inc_turb_naca0015_sa.test_iter = 1 + unst_inc_turb_naca0015_sa.test_vals = [-3.004012, -6.876220, 1.487882, 0.421861] + unst_inc_turb_naca0015_sa.unsteady = True + test_list.append(unst_inc_turb_naca0015_sa) + + # Flat plate + flatplate_unsteady = TestCase('flatplate_unsteady') + flatplate_unsteady.cfg_dir = "navierstokes/flatplate" + flatplate_unsteady.cfg_file = "lam_flatplate_unst.cfg" + flatplate_unsteady.test_iter = 3 + flatplate_unsteady.test_vals = [7.9509e-06, -8.868859, -8.231652, -6.283262, -5.466675, -3.391163, 0.002078, -0.343642] + flatplate_unsteady.unsteady = True + test_list.append(flatplate_unsteady) + + ###################################### + ### NICFD ### + ###################################### + + # Rarefaction shock wave edge_VW + edge_VW = TestCase('edge_VW') + edge_VW.cfg_dir = "nicf/edge" + edge_VW.cfg_file = "edge_VW.cfg" + edge_VW.test_iter = 100 + edge_VW.test_vals = [-5.048044, 1.115667, -0.000009, 0.000000] + test_list.append(edge_VW) + + # Rarefaction shock wave edge_PPR + edge_PPR = TestCase('edge_PPR') + edge_PPR.cfg_dir = "nicf/edge" + edge_PPR.cfg_file = "edge_PPR.cfg" + edge_PPR.test_iter = 100 + edge_PPR.test_vals = [-5.400790, 0.739723, -0.000035, 0.000000] + test_list.append(edge_PPR) + + # Rarefaction Q1D nozzle, include CoolProp fluid model + coolprop_fluidModel = TestCase('coolprop_fluidModel') + coolprop_fluidModel.cfg_dir = "nicf/coolprop" + coolprop_fluidModel.cfg_file = "fluidModel.cfg" + coolprop_fluidModel.test_iter = 5 + coolprop_fluidModel.test_vals = [-4.525459, -1.578697, 3.443116, 0.000000, 0.000000] + coolprop_fluidModel.enabled_on_cpu_arch = ["x86_64"] + test_list.append(coolprop_fluidModel) + + # Rarefaction Q1D nozzle, include CoolProp transport model + coolprop_transportModel = TestCase('coolprop_transportModel') + coolprop_transportModel.cfg_dir = "nicf/coolprop" + coolprop_transportModel.cfg_file = "transportModel.cfg" + coolprop_transportModel.test_iter = 5 + coolprop_transportModel.test_vals = [-4.527922, -1.308648, 4.630717, 0.000000, 0.000000] + coolprop_transportModel.enabled_on_cpu_arch = ["x86_64"] + test_list.append(coolprop_transportModel) + + # Rarefaction Q1D nozzle, include data-driven fluid model + datadriven_fluidModel = TestCase('datadriven_fluidModel') + datadriven_fluidModel.cfg_dir = "nicf/datadriven" + datadriven_fluidModel.cfg_file = "datadriven_nozzle.cfg" + datadriven_fluidModel.test_iter = 50 + datadriven_fluidModel.test_vals = [-2.623890, 0.145236, 4.688439, 0.000000, 0.000000] + test_list.append(datadriven_fluidModel) + + ###################################### + ### Turbomachinery ### + ###################################### + + # Jones APU Turbocharger restart + Jones_tc_restart = TestCase('jones_turbocharger_restart') + Jones_tc_restart.cfg_dir = "turbomachinery/APU_turbocharger" + Jones_tc_restart.cfg_file = "Jones_restart.cfg" + Jones_tc_restart.test_iter = 5 + Jones_tc_restart.test_vals = [-6.604542, -2.792281, -14.328530, -8.769313, -11.371439, -5.845632, 73273, 73273] + test_list.append(Jones_tc_restart) + + # 2D axial stage + axial_stage2D = TestCase('axial_stage2D') + axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" + axial_stage2D.cfg_file = "Axial_stage2D.cfg" + axial_stage2D.test_iter = 20 + axial_stage2D.test_vals = [0.974805, 1.534447, -2.897694, 2.599376, -2.418379, 3.087219, 106380.000000, 106380.000000] + test_list.append(axial_stage2D) + + # 2D transonic stator restart + transonic_stator_restart = TestCase('transonic_stator_restart') + transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" + transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" + transonic_stator_restart.test_iter = 20 + transonic_stator_restart.test_vals = [-5.354418, -3.509964, -3.163206, 0.744733, -3.846691, 1.805587, -471690] + test_list.append(transonic_stator_restart) + + ###################################### + ### Sliding Mesh ### + ###################################### + + # Uniform flow + uniform_flow = TestCase('uniform_flow') + uniform_flow.cfg_dir = "sliding_interface/uniform_flow" + uniform_flow.cfg_file = "uniform_NN.cfg" + uniform_flow.test_iter = 5 + uniform_flow.test_vals = [5.000000, 0.000000, -0.188747, -10.631538] + uniform_flow.unsteady = True + uniform_flow.multizone = True + test_list.append(uniform_flow) + + # Channel_2D + channel_2D = TestCase('channel_2D') + channel_2D.cfg_dir = "sliding_interface/channel_2D" + channel_2D.cfg_file = "channel_2D_WA.cfg" + channel_2D.test_iter = 2 + channel_2D.test_vals = [2.000000, 0.000000, 0.398011, 0.352778, 0.405461] + channel_2D.test_vals_aarch64 = [2.000000, 0.000000, 0.398036, 0.352783, 0.405462] + channel_2D.timeout = 100 + channel_2D.unsteady = True + channel_2D.multizone = True + test_list.append(channel_2D) + + # Channel_3D + channel_3D = TestCase('channel_3D') + channel_3D.cfg_dir = "sliding_interface/channel_3D" + channel_3D.cfg_file = "channel_3D_WA.cfg" + channel_3D.test_iter = 2 + channel_3D.test_vals = [2.000000, 0.000000, 0.620176, 0.505161, 0.415248] + channel_3D.test_vals_aarch64 = [2.000000, 0.000000, 0.620182, 0.505302, 0.415257] + channel_3D.unsteady = True + channel_3D.multizone = True + test_list.append(channel_3D) + + # Pipe + pipe = TestCase('pipe') + pipe.cfg_dir = "sliding_interface/pipe" + pipe.cfg_file = "pipe_NN.cfg" + pipe.test_iter = 2 + pipe.test_vals = [0.150024, 0.491953, 0.677755, 0.963980, 1.006936] + pipe.unsteady = True + pipe.multizone = True + test_list.append(pipe) + + # Rotating cylinders + rotating_cylinders = TestCase('rotating_cylinders') + rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders" + rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg" + rotating_cylinders.test_iter = 3 + rotating_cylinders.test_vals = [3.000000, 0.000000, 0.777572, 1.134804, 1.224137] + rotating_cylinders.unsteady = True + rotating_cylinders.multizone = True + test_list.append(rotating_cylinders) + + # Supersonic vortex shedding + supersonic_vortex_shedding = TestCase('supersonic_vortex_shedding') + supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding" + supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg" + supersonic_vortex_shedding.test_iter = 5 + supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.214350, 1.663914] + supersonic_vortex_shedding.unsteady = True + supersonic_vortex_shedding.multizone = True + test_list.append(supersonic_vortex_shedding) + + # Bars_SST_2D + bars_SST_2D = TestCase('bars_SST_2D') + bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" + bars_SST_2D.cfg_file = "bars.cfg" + bars_SST_2D.test_iter = 13 + bars_SST_2D.test_vals = [13.000000, -0.773513, -1.700012] + bars_SST_2D.multizone = True + test_list.append(bars_SST_2D) + + # Sliding mesh with incompressible flows (steady) + slinc_steady = TestCase('slinc_steady') + slinc_steady.cfg_dir = "sliding_interface/incompressible_steady" + slinc_steady.cfg_file = "config.cfg" + slinc_steady.test_iter = 19 + slinc_steady.test_vals = [19.000000, -1.778863, -2.040209] + slinc_steady.timeout = 100 + slinc_steady.tol = 0.00002 + slinc_steady.multizone = True + test_list.append(slinc_steady) + + # Sliding mesh with incompressible flows (unsteady) + # slinc_unsteady = TestCase('slinc_unsteady') + # slinc_unsteady.cfg_dir = "sliding_interface/incompressible_unsteady" + # slinc_unsteady.cfg_file = "config.cfg" + # slinc_unsteady.test_iter = 19 + # slinc_unsteady.test_vals = [-3.513701,1.931626,0.000000,0.000000] #last 4 columns + # slinc_unsteady.command = TestCase.Command(exec = "SU2_CFD") + # slinc_unsteady.timeout = 100 + # slinc_unsteady.unsteady = True + # test_list.append(slinc_unsteady) + + ########################## + ### FEA - FSI ### + ########################## + + # Static beam, 3d + statbeam3d = TestCase('statbeam3d') + statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" + statbeam3d.cfg_file = "configBeam_3d.cfg" + statbeam3d.test_iter = 0 + statbeam3d.test_vals = [-8.396797, -8.162206, -8.156102, 64095.000000] + statbeam3d.test_vals_aarch64 = [-8.396793, -8.162255, -8.156118, 64095.0] #last 4 columns + statbeam3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") + test_list.append(statbeam3d) + + # Dynamic beam, 2d + dynbeam2d = TestCase('dynbeam2d') + dynbeam2d.cfg_dir = "fea_fsi/DynBeam_2d" + dynbeam2d.cfg_file = "configBeam_2d.cfg" + dynbeam2d.test_iter = 6 + dynbeam2d.test_vals = [-3.240015, 2.895057, -0.353146, 66127.000000] + dynbeam2d.unsteady = True + test_list.append(dynbeam2d) + + # FSI, 2d + fsi2d = TestCase('fsi2d') + fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" + fsi2d.cfg_file = "configFSI.cfg" + fsi2d.test_iter = 4 + fsi2d.test_vals = [4.000000, 0.000000, -3.743210, -4.133483] + fsi2d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") + fsi2d.multizone= True + fsi2d.unsteady = True + test_list.append(fsi2d) + + # FSI, Static, 2D, new mesh solver + stat_fsi = TestCase('stat_fsi') + stat_fsi.cfg_dir = "fea_fsi/stat_fsi" + stat_fsi.cfg_file = "config.cfg" + stat_fsi.test_iter = 7 + stat_fsi.test_vals = [-3.296605, -4.934646, 0.000000, 7.000000] + stat_fsi.multizone = True + test_list.append(stat_fsi) + + # FSI, Dynamic, 2D, new mesh solver + dyn_fsi = TestCase('dyn_fsi') + dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" + dyn_fsi.cfg_file = "config.cfg" + dyn_fsi.test_iter = 4 + dyn_fsi.test_vals = [-4.355829, -4.060587, 5.3837e-08, 98] + dyn_fsi.multizone = True + dyn_fsi.unsteady = True + test_list.append(dyn_fsi) + + # FSI, Static, 2D, new mesh solver, restart + stat_fsi_restart = TestCase('stat_fsi_restart') + stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi" + stat_fsi_restart.cfg_file = "config_restart.cfg" + stat_fsi_restart.test_iter = 1 + stat_fsi_restart.test_vals = [-3.435926, -4.264912, 0.000000, 28.000000] + stat_fsi_restart.multizone = True + test_list.append(stat_fsi_restart) + + # ############################### + # ### Radiative Heat Transfer ### + # ############################### + + # Radiative heat transfer + p1rad = TestCase('p1rad') + p1rad.cfg_dir = "radiation/p1model" + p1rad.cfg_file = "configp1.cfg" + p1rad.test_iter = 100 + p1rad.test_vals = [-7.743666, -7.921411, -2.111848, 0.098302, -45.023000] + test_list.append(p1rad) + + + # ############################# + # ### Solid Heat Conduction ### + # ############################# + + # 2D pins, periodically connected + solid_periodic_pins = TestCase('solid_periodic_pins') + solid_periodic_pins.cfg_dir = "solid_heat_conduction/periodic_pins" + solid_periodic_pins.cfg_file = "configSolid.cfg" + solid_periodic_pins.test_iter = 750 + solid_periodic_pins.test_vals = [-15.878977, -14.569206, 300.900000, 425.320000, 0.000000, 5.000000, -1.672737] + solid_periodic_pins.test_vals_aarch64 = [-15.879016, -14.569206, 300.900000, 425.320000, 0.000000, 5.000000, -1.672666] + test_list.append(solid_periodic_pins) + + # ############################### + # ### Conjugate heat transfer ### + # ############################### + + # CHT incompressible + cht_incompressible = TestCase('cht_incompressible') + cht_incompressible.cfg_dir = "coupled_cht/incomp_2d" + cht_incompressible.cfg_file = "cht_2d_3cylinders.cfg" + cht_incompressible.test_iter = 10 + cht_incompressible.test_vals = [-2.128827, -0.588812, -0.588812, -0.588812] + cht_incompressible.multizone = True + test_list.append(cht_incompressible) + + # CHT compressible + cht_compressible = TestCase('cht_compressible') + cht_compressible.cfg_dir = "coupled_cht/comp_2d" + cht_compressible.cfg_file = "cht_2d_3cylinders.cfg" + cht_compressible.test_iter = 10 + cht_compressible.test_vals = [-4.256053, -0.532725, -0.532725, -0.532726] + cht_compressible.multizone = True + test_list.append(cht_compressible) + + # 2D CHT case streamwise periodicity. Also test Multizone PerSurface screen output. + sp_pinArray_cht_2d_dp_hf = TestCase('sp_pinArray_cht_2d_dp_hf') + sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" + sp_pinArray_cht_2d_dp_hf.cfg_file = "configMaster.cfg" + sp_pinArray_cht_2d_dp_hf.test_iter = 100 + sp_pinArray_cht_2d_dp_hf.test_vals = [0.104306, -1.005859, -1.028870, -0.753282, 208.023676, 353.490000, -0.000000, -0.753280, 0.753280] + sp_pinArray_cht_2d_dp_hf.multizone = True + test_list.append(sp_pinArray_cht_2d_dp_hf) + + # simple small 3D pin case massflow periodic with heatflux BC + sp_pinArray_3d_cht_mf_hf_tp = TestCase('sp_pinArray_3d_cht_mf_hf_tp') + sp_pinArray_3d_cht_mf_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_3d" + sp_pinArray_3d_cht_mf_hf_tp.cfg_file = "configMaster.cfg" + sp_pinArray_3d_cht_mf_hf_tp.test_iter = 30 + sp_pinArray_3d_cht_mf_hf_tp.test_vals = [-5.128577, -5.425081, -6.788413, -0.009675, 104.655438, 419.210000, 0.0] + sp_pinArray_3d_cht_mf_hf_tp.test_vals_aarch64 = [-5.128577, -5.425081, -6.788413, -0.009675, 104.655438, 419.210000, 0.0] + sp_pinArray_3d_cht_mf_hf_tp.multizone = True + test_list.append(sp_pinArray_3d_cht_mf_hf_tp) + + ########################## + ### Python wrapper ### + ########################## + + # NACA0012 + pywrapper_naca0012 = TestCase('pywrapper_naca0012') + pywrapper_naca0012.cfg_dir = "euler/naca0012" + pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" + pywrapper_naca0012.test_iter = 100 + pywrapper_naca0012.test_vals = [-6.747210, -6.149915, 0.333445, 0.021241] + pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") + test_list.append(pywrapper_naca0012) + + # NACA0012 (SST, FUN3D results for finest grid: CL=1.0840, CD=0.01253) + pywrapper_turb_naca0012_sst = TestCase('pywrapper_turb_naca0012_sst') + pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" + pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" + pywrapper_turb_naca0012_sst.test_iter = 10 + pywrapper_turb_naca0012_sst.test_vals = [-12.219694, -14.440925, -7.107551, 1.050109, 0.019148, -1.601287, -38.510000] + pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.219735, -14.440925, -7.107550, 1.050109, 0.019148, -1.601262, -38.510000] + pywrapper_turb_naca0012_sst.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") + pywrapper_turb_naca0012_sst.timeout = 3200 + test_list.append(pywrapper_turb_naca0012_sst) + + # Square cylinder + pywrapper_square_cylinder = TestCase('pywrapper_square_cylinder') + pywrapper_square_cylinder.cfg_dir = "unsteady/square_cylinder" + pywrapper_square_cylinder.cfg_file = "turb_square.cfg" + pywrapper_square_cylinder.test_iter = 10 + pywrapper_square_cylinder.test_vals = [-1.175619, -0.352238, 1.408450, 2.360729, 1.404693, 2.302284, -0.347980] + pywrapper_square_cylinder.test_vals_aarch64 = [-1.175617, -0.352079, 1.408450, 2.360729, 1.404693, 2.302284, -0.347980] + pywrapper_square_cylinder.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") + pywrapper_square_cylinder.unsteady = True + test_list.append(pywrapper_square_cylinder) + + # Aeroelastic + pywrapper_aeroelastic = TestCase('pywrapper_aeroelastic') + pywrapper_aeroelastic.cfg_dir = "aeroelastic" + pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" + pywrapper_aeroelastic.test_iter = 2 + pywrapper_aeroelastic.test_vals = [0.076550, 0.033042, -0.001650, -0.000127] + pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") + pywrapper_aeroelastic.unsteady = True + test_list.append(pywrapper_aeroelastic) + + # Custom FEA load + pywrapper_custom_fea_load = TestCase('pywrapper_custom_fea_load') + pywrapper_custom_fea_load.cfg_dir = "py_wrapper/custom_load_fea" + pywrapper_custom_fea_load.cfg_file = "config.cfg" + pywrapper_custom_fea_load.test_iter = 13 + pywrapper_custom_fea_load.test_vals = [-7.263559, -4.946814, -14.165142, 34.000000, -6.380144, 320.580000] + pywrapper_custom_fea_load.test_vals_aarch64 = [-7.263558, -4.946814, -14.165142, 35.000000, -6.802790, 320.580000] + pywrapper_custom_fea_load.command = TestCase.Command("mpirun -np 2", "python", "run.py") + test_list.append(pywrapper_custom_fea_load) + + # FSI, 2d + pywrapper_fsi2d = TestCase('pywrapper_fsi2d') + pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" + pywrapper_fsi2d.cfg_file = "configFSI.cfg" + pywrapper_fsi2d.test_iter = 4 + pywrapper_fsi2d.test_vals = [4.000000, 0.000000, -3.743210, -4.133483] + pywrapper_fsi2d.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--nZone 2 --fsi True --parallel -f") + pywrapper_fsi2d.unsteady = True + pywrapper_fsi2d.multizone = True + test_list.append(pywrapper_fsi2d) + + # Unsteady FSI with custom load + pywrapper_unsteadyFSI = TestCase('pywrapper_unsteadyFSI') + pywrapper_unsteadyFSI.cfg_dir = "py_wrapper/dyn_fsi" + pywrapper_unsteadyFSI.cfg_file = "config.cfg" + pywrapper_unsteadyFSI.test_iter = 4 + pywrapper_unsteadyFSI.test_vals = [0, 31, 5, 58, -1.756780, -2.828276, -7.652558, -6.863929, 1.5618e-04] + pywrapper_unsteadyFSI.command = TestCase.Command("mpirun -np 2", "python", "run.py") + pywrapper_unsteadyFSI.unsteady = True + pywrapper_unsteadyFSI.multizone = True + test_list.append(pywrapper_unsteadyFSI) + + # Unsteady CHT + pywrapper_unsteadyCHT = TestCase('pywrapper_unsteadyCHT') + pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" + pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" + pywrapper_unsteadyCHT.test_iter = 5 + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.240663, -0.001316, 0.177491] + pywrapper_unsteadyCHT.command = TestCase.Command("mpirun -np 2", "python", "launch_unsteady_CHT_FlatPlate.py --parallel -f") + pywrapper_unsteadyCHT.unsteady = True + test_list.append(pywrapper_unsteadyCHT) + + # Rigid motion + pywrapper_rigidMotion = TestCase('pywrapper_rigidMotion') + pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" + pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" + pywrapper_rigidMotion.test_iter = 5 + pywrapper_rigidMotion.test_vals = [-1.614165, 2.238591, 0.349970, 0.095593] + pywrapper_rigidMotion.command = TestCase.Command("mpirun -np 2", "python", "launch_flatPlate_rigidMotion.py --parallel -f") + pywrapper_rigidMotion.unsteady = True + test_list.append(pywrapper_rigidMotion) + + # Deforming Bump in Channel + pywrapper_deformingBump = TestCase('pywrapper_deformingBump') + pywrapper_deformingBump.cfg_dir = "py_wrapper/deforming_bump_in_channel" + pywrapper_deformingBump.cfg_file = "config.cfg" + pywrapper_deformingBump.test_iter = 1 + pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.554360, -1.084594, -0.024882, 2.907803, 8.785498, -0.363585] + pywrapper_deformingBump.command = TestCase.Command("mpirun -np 2", "python", "run.py") + pywrapper_deformingBump.unsteady = True + test_list.append(pywrapper_deformingBump) + + ############################################## + ### Method of Manufactured Solutions (MMS) ### + ############################################## + + # FVM, compressible, laminar N-S + mms_fvm_ns = TestCase('mms_fvm_ns') + mms_fvm_ns.cfg_dir = "mms/fvm_navierstokes" + mms_fvm_ns.cfg_file = "lam_mms_roe.cfg" + mms_fvm_ns.test_iter = 20 + mms_fvm_ns.test_vals = [-2.851428, 2.192348, 0.000000, 0.000000] + mms_fvm_ns.tol = 0.0001 + test_list.append(mms_fvm_ns) + + # FVM, incompressible, euler + mms_fvm_inc_euler = TestCase('mms_fvm_inc_euler') + mms_fvm_inc_euler.cfg_dir = "mms/fvm_incomp_euler" + mms_fvm_inc_euler.cfg_file = "inv_mms_jst.cfg" + mms_fvm_inc_euler.test_iter = 20 + mms_fvm_inc_euler.test_vals = [-9.128660, -9.441806, 0.000000, 0.000000] + mms_fvm_inc_euler.tol = 0.0001 + test_list.append(mms_fvm_inc_euler) + + # FVM, incompressible, laminar N-S + mms_fvm_inc_ns = TestCase('mms_fvm_inc_ns') + mms_fvm_inc_ns.cfg_dir = "mms/fvm_incomp_navierstokes" + mms_fvm_inc_ns.cfg_file = "lam_mms_fds.cfg" + mms_fvm_inc_ns.test_iter = 20 + mms_fvm_inc_ns.test_vals = [-7.414944, -7.631546, 0.000000, 0.000000] + mms_fvm_inc_ns.tol = 0.0001 + test_list.append(mms_fvm_inc_ns) + + # DG, compressible, euler + ringleb_dg_euler = TestCase('ringleb_dg_euler') + ringleb_dg_euler.cfg_dir = "mms/dg_ringleb" + ringleb_dg_euler.cfg_file = "ringleb_dg.cfg" + ringleb_dg_euler.test_iter = 100 + ringleb_dg_euler.test_vals = [-5.136652, -4.724941, 0.000000, 0.000000] + ringleb_dg_euler.tol = 0.0001 + test_list.append(ringleb_dg_euler) + + # DG, compressible, laminar N-S + mms_dg_ns = TestCase('mms_dg_ns') + mms_dg_ns.cfg_dir = "mms/dg_navierstokes" + mms_dg_ns.cfg_file = "lam_mms_dg.cfg" + mms_dg_ns.test_iter = 100 + mms_dg_ns.test_vals = [-1.845393, 3.520699, 0.000000, 0.000000] + mms_dg_ns.tol = 0.0001 + test_list.append(mms_dg_ns) + + # DG, compressible, laminar N-S 3D + mms_dg_ns_3d = TestCase('mms_dg_ns_3d') + mms_dg_ns_3d.cfg_dir = "mms/dg_navierstokes_3d" + mms_dg_ns_3d.cfg_file = "lam_mms_dg_3d.cfg" + mms_dg_ns_3d.test_iter = 100 + mms_dg_ns_3d.test_vals = [-0.146826, 5.356413, 0.000000, 0.000000] + mms_dg_ns_3d.tol = 0.0001 + test_list.append(mms_dg_ns_3d) + + ##################### + ## Species solver ### + ##################### + + # 2 species (1 eq) primitive venturi mixing using mixing model + species2_primitiveVenturi_mixingmodel = TestCase('species2_primitiveVenturi_mixingmodel') + species2_primitiveVenturi_mixingmodel.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi_mixingmodel.cfg_file = "species2_primitiveVenturi_mixingmodel.cfg" + species2_primitiveVenturi_mixingmodel.test_iter = 50 + species2_primitiveVenturi_mixingmodel.test_vals = [-5.359429, -4.504612, -4.480004, -5.629196, -0.059934, -5.596051, 5.000000, -1.870943, 5.000000, -4.915279, 5.000000, -1.183531, 0.000429, 0.000393, 0.000036, 0.000000] + test_list.append(species2_primitiveVenturi_mixingmodel) + + # 2 species (1 eq) primitive venturi mixing using mixing model and bounded scalar transport + species2_primitiveVenturi_mixingmodel_boundedscalar = TestCase('species2_primitiveVenturi_mixingmodel_boundedscalar') + species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_file = "species2_primitiveVenturi_mixingmodel_boundedscalar.cfg" + species2_primitiveVenturi_mixingmodel_boundedscalar.test_iter = 50 + species2_primitiveVenturi_mixingmodel_boundedscalar.test_vals = [-5.336209, -4.445047, -4.432074, -5.785385, -0.127631, -5.672217, 5.000000, -1.944369, 5.000000, -4.878272, 5.000000, -1.806657, 0.000272, 0.000272, 0.000000, 0.000000] + test_list.append(species2_primitiveVenturi_mixingmodel_boundedscalar) + + # 2 species (1 eq) primitive venturi mixing using mixing model including viscosity, thermal conductivity and inlet markers for SA turbulence model + species2_primitiveVenturi_mixingmodel_viscosity = TestCase('species2_primitiveVenturi_mixingmodel_viscosity') + species2_primitiveVenturi_mixingmodel_viscosity.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi_mixingmodel_viscosity.cfg_file = "species2_primitiveVenturi_mixingmodel_viscosity.cfg" + species2_primitiveVenturi_mixingmodel_viscosity.test_iter = 50 + species2_primitiveVenturi_mixingmodel_viscosity.test_vals = [-4.843481, -3.585988, -3.486593, -7.560545, -5.094245, 5.000000, -1.898097, 5.000000, -3.328995, 5.000000, -2.113241, 2.482221, 0.974142, 0.607219, 0.900860] + test_list.append(species2_primitiveVenturi_mixingmodel_viscosity) + + # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity + species2_primitiveVenturi_mixingmodel_heatcapacity_H2 = TestCase('species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg') + species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg" + species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_iter = 50 + species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_vals = [-6.118333, -4.985699, -4.918326, -7.249080, 2.445213, -5.624080, 30.000000, -5.681895, 12.000000, -8.186475, 10.000000, -8.853067, 2.083524, 1.000000, 0.600000, 0.483524] + test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2) + + # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity NonDimensional case + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND = TestCase('species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg') + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg" + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_iter = 50 + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_vals = [-5.724191, -5.290524, -5.223195, -8.252900, 2.140394, -5.229908, 30.000000, -5.681850, 12.000000, -8.186296, 10.000000, -8.852858, 2.083526, 1.000000, 0.600000, 0.483526] + test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND) + + # 2 species (1 eq) primitive venturi mixing + species2_primitiveVenturi = TestCase('species2_primitiveVenturi') + species2_primitiveVenturi.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi.cfg_file = "species2_primitiveVenturi.cfg" + species2_primitiveVenturi.test_iter = 50 + species2_primitiveVenturi.test_vals = [-5.641112, -4.724266, -4.677148, -5.470711, -1.121455, -5.713132, 5.000000, -0.830412, 5.000000, -2.668654, 5.000000, -0.454161, 0.000092, 0.000091, 0.000001, 0.000000] + test_list.append(species2_primitiveVenturi) + + # 2 species (1 eq) primitive venturi mixing with bounded scalar transport + species_primitiveVenturi_boundedscalar = TestCase('species2_primitiveVenturi_bounded_scalar') + species_primitiveVenturi_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" + species_primitiveVenturi_boundedscalar.cfg_file = "species2_primitiveVenturi_boundedscalar.cfg" + species_primitiveVenturi_boundedscalar.test_iter = 50 + species_primitiveVenturi_boundedscalar.test_vals = [-5.278467, -4.368236, -4.350556, -5.693359, -0.978845, -5.618393, 5.000000, -1.804015, 5.000000, -4.057089, 5.000000, -2.003816, 0.000415, 0.000415, 0.000000, 0.000000] + test_list.append(species_primitiveVenturi_boundedscalar) + + # 2 species (1 eq) primitive venturi mixing using mixing model including inlet markers for turbulent intensity and viscosity ratios + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS = TestCase('species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg') + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_dir = "species_transport/venturi_primitive_3species" + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_file = "species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg" + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_iter = 50 + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_vals = [-4.026294, -1.649804, -1.404882, -0.746005, 1.609256, -3.767237, 23.000000, -5.082019, 10.000000, -5.056739, 4.000000, -6.480965, 2.000000, 1.000000, 0.000000, 1.000000] + test_list.append(species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS) + + # 3 species (2 eq) primitive venturi mixing with inlet files. + # Note that the residuals are exactly the same as for the non-inlet case which should be the case for a fresh inlet file. + species3_primitiveVenturi_inletFile = TestCase('species3_primitiveVenturi_inletFile') + species3_primitiveVenturi_inletFile.cfg_dir = "species_transport/venturi_primitive_3species" + species3_primitiveVenturi_inletFile.cfg_file = "species3_primitiveVenturi_inletFile.cfg" + species3_primitiveVenturi_inletFile.test_iter = 50 + species3_primitiveVenturi_inletFile.test_vals = [-5.711734, -4.794814, -4.747694, -5.541323, -1.192017, -5.951964, -6.096677, 5.000000, -0.830172, 5.000000, -2.668819, 5.000000, -0.516308] + test_list.append(species3_primitiveVenturi_inletFile) + + # rectangle passive transport validation + species_passive_val = TestCase('species_passive_val') + species_passive_val.cfg_dir = "species_transport/passive_transport_validation" + species_passive_val.cfg_file = "passive_transport.cfg" + species_passive_val.test_iter = 50 + species_passive_val.test_vals = [-16.559189, -16.315116, -16.908670, -4.257599, 10, -4.523292, 8, -5.19335, 0.18661, 0] + species_passive_val.test_vals_aarch64 = [-16.538551, -16.312552, -16.882823, -4.257599, 10, -4.585464, 8, -5.19335, 0.18661, 0] + test_list.append(species_passive_val) + + # species transport, 3 species with multizone (2 fluid regions) + species3_multizone_restart = TestCase('species3_multizone_restart') + species3_multizone_restart.cfg_dir = "species_transport/multizone" + species3_multizone_restart.cfg_file = "configMaster.cfg" + species3_multizone_restart.test_iter = 5 + species3_multizone_restart.test_vals = [-6.175178, -5.763030] + species3_multizone_restart.multizone = True + test_list.append(species3_multizone_restart) + + ##################### + ## CGNS writer ### + ##################### + + # CGNS writer + CGNSWrite = TestCase('CGNSWrite') + CGNSWrite.cfg_dir = "CGNSWrite" + CGNSWrite.cfg_file = "config.cfg" + CGNSWrite.test_iter = 1 + CGNSWrite.test_vals = [-2.974473, 0.665204, 5.068846, -7.003873] + CGNSWrite.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + CGNSWrite.new_output = True + test_list.append(CGNSWrite) + + ###################################### + ### RUN TESTS ### + ###################################### + + # set suitable defaults unless something else has been specified + # command: "mpirun -n 2 SU2_CFD" + # timeout: 1600 + # tol: 0.00001 + for test in test_list: + if test.command.empty(): + test.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + if test.timeout == 0: + test.timeout = 1600 + if test.tol == 0.0: + test.tol = 0.00001 + + pass_list = [ test.run_test() for test in test_list ] + + ###################################### + ### RUN CHT TEST WITH FILEDIFF ### + ###################################### + + # 2D planar laminar premixed methane flame on isothermal burner with conjugate heat transfer in cooling fin (restart) + cfd_flamelet_ch4_cht = TestCase('cfd_flamelet_ch4_cht') + cfd_flamelet_ch4_cht.cfg_dir = "flamelet/03_laminar_premixed_ch4_flame_cht_cfd" + cfd_flamelet_ch4_cht.cfg_file = "lam_prem_ch4_cht_cfd_master.cfg" + cfd_flamelet_ch4_cht.test_iter = 10 + cfd_flamelet_ch4_cht.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + cfd_flamelet_ch4_cht.timeout = 1600 + cfd_flamelet_ch4_cht.reference_file = "restart_0.csv.ref" + cfd_flamelet_ch4_cht.test_file = "restart_0.csv" + cfd_flamelet_ch4_cht.multizone = True + cfd_flamelet_ch4_cht.comp_threshold = 1e-6 + cfd_flamelet_ch4_cht.tol_file_percent = 0.1 + pass_list.append(cfd_flamelet_ch4_cht.run_filediff()) + test_list.append(cfd_flamelet_ch4_cht) + + ###################################### + ### RUN SU2_SOL TESTS ### + ###################################### + + # parallel STL output using + stl_writer_test = TestCase('stl_writer_test') + stl_writer_test.cfg_dir = "rans/oneram6" + stl_writer_test.cfg_file = "turb_ONERAM6.cfg" + stl_writer_test.test_iter = 1 + stl_writer_test.command = TestCase.Command("mpirun -n 2", "SU2_SOL") + stl_writer_test.timeout = 1600 + stl_writer_test.reference_file = "surface_flow.stl.ref" + stl_writer_test.test_file = "surface_flow.stl" + pass_list.append(stl_writer_test.run_filediff()) + test_list.append(stl_writer_test) + + ###################################### + ### RUN SU2_DEF TESTS ### + ###################################### + + # Inviscid NACA0012 (triangles) + naca0012_def = TestCase('naca0012_def') + naca0012_def.cfg_dir = "deformation/naca0012" + naca0012_def.cfg_file = "def_NACA0012.cfg" + naca0012_def.test_iter = 10 + naca0012_def.test_vals = [0.00352488] #residual + naca0012_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + naca0012_def.timeout = 1600 + naca0012_def.tol = 1e-8 + + pass_list.append(naca0012_def.run_def()) + test_list.append(naca0012_def) + + # Inviscid NACA0012 based on SURFACE_FILE input (surface_bump.dat) + naca0012_def_file = TestCase('naca0012_def_file') + naca0012_def_file.cfg_dir = "deformation/naca0012" + naca0012_def_file.cfg_file = "surface_file_NACA0012.cfg" + naca0012_def_file.test_iter = 10 + naca0012_def_file.test_vals = [0.00352488] #residual + naca0012_def_file.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + naca0012_def_file.timeout = 1600 + naca0012_def_file.tol = 1e-8 + + pass_list.append(naca0012_def_file.run_def()) + test_list.append(naca0012_def_file) + + # RAE2822 (mixed tris + quads) + rae2822_def = TestCase('rae2822_def') + rae2822_def.cfg_dir = "deformation/rae2822" + rae2822_def.cfg_file = "def_RAE2822.cfg" + rae2822_def.test_iter = 10 + rae2822_def.test_vals = [8.24002e-09] #residual + rae2822_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + rae2822_def.timeout = 1600 + rae2822_def.tol = 1e-13 + + pass_list.append(rae2822_def.run_def()) + test_list.append(rae2822_def) + + # Turb NACA4412 (quads, wall distance) + naca4412_def = TestCase('naca4412_def') + naca4412_def.cfg_dir = "deformation/naca4412" + naca4412_def.cfg_file = "def_NACA4412.cfg" + naca4412_def.test_iter = 10 + naca4412_def.test_vals = [2.210380e-12] #residual + naca4412_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + naca4412_def.timeout = 1600 + naca4412_def.tol = 1e-12 + + pass_list.append(naca4412_def.run_def()) + test_list.append(naca4412_def) + + # Brick of tets (inverse volume) + brick_tets_def = TestCase('brick_tets_def') + brick_tets_def.cfg_dir = "deformation/brick_tets" + brick_tets_def.cfg_file = "def_brick_tets.cfg" + brick_tets_def.test_iter = 10 + brick_tets_def.test_vals = [0.000955394] #residual + brick_tets_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + brick_tets_def.timeout = 1600 + brick_tets_def.tol = 1e-9 + + pass_list.append(brick_tets_def.run_def()) + test_list.append(brick_tets_def) + + # Brick of isotropic hexas (inverse volume) + brick_hex_def = TestCase('brick_hex_def') + brick_hex_def.cfg_dir = "deformation/brick_hex" + brick_hex_def.cfg_file = "def_brick_hex.cfg" + brick_hex_def.test_iter = 10 + brick_hex_def.test_vals = [0.000166575] #residual + brick_hex_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + brick_hex_def.timeout = 1600 + brick_hex_def.tol = 1e-9 + + pass_list.append(brick_hex_def.run_def()) + test_list.append(brick_hex_def) + + # Brick with a pyramid layer (inverse volume) + brick_pyra_def = TestCase('brick_pyra_def') + brick_pyra_def.cfg_dir = "deformation/brick_pyra" + brick_pyra_def.cfg_file = "def_brick_pyra.cfg" + brick_pyra_def.test_iter = 10 + brick_pyra_def.test_vals = [0.00161454] #residual + brick_pyra_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + brick_pyra_def.timeout = 1600 + brick_pyra_def.tol = 1e-8 + + pass_list.append(brick_pyra_def.run_def()) + test_list.append(brick_pyra_def) + + # Brick of isotropic prisms (inverse volume) + brick_prism_def = TestCase('brick_prism_def') + brick_prism_def.cfg_dir = "deformation/brick_prism" + brick_prism_def.cfg_file = "def_brick_prism.cfg" + brick_prism_def.test_iter = 10 + brick_prism_def.test_vals = [0.00254732] #residual + brick_prism_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + brick_prism_def.timeout = 1600 + brick_prism_def.tol = 1e-8 + + pass_list.append(brick_prism_def.run_def()) + test_list.append(brick_prism_def) + + # Brick of prisms with high aspect ratio cells near the wall (wall distance) + brick_prism_rans_def = TestCase('brick_prism_rans_def') + brick_prism_rans_def.cfg_dir = "deformation/brick_prism_rans" + brick_prism_rans_def.cfg_file = "def_brick_prism_rans.cfg" + brick_prism_rans_def.test_iter = 10 + brick_prism_rans_def.test_vals = [2.99461e-07] #residual + brick_prism_rans_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + brick_prism_rans_def.timeout = 1600 + brick_prism_rans_def.tol = 1e-12 + + pass_list.append(brick_prism_rans_def.run_def()) + test_list.append(brick_prism_rans_def) + + # Brick of hexas with high aspect ratio cells near the wall (inverse volume) + brick_hex_rans_def = TestCase('brick_hex_rans_def') + brick_hex_rans_def.cfg_dir = "deformation/brick_hex_rans" + brick_hex_rans_def.cfg_file = "def_brick_hex_rans.cfg" + brick_hex_rans_def.test_iter = 10 + brick_hex_rans_def.test_vals = [3.54213e-06] #residual + brick_hex_rans_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + brick_hex_rans_def.timeout = 1600 + brick_hex_rans_def.tol = 1e-11 + + pass_list.append(brick_hex_rans_def.run_def()) + test_list.append(brick_hex_rans_def) + + # Cylindrical FFD test + cylinder_ffd_def = TestCase('cylinder_ffd_def') + cylinder_ffd_def.cfg_dir = "deformation/cylindrical_ffd" + cylinder_ffd_def.cfg_file = "def_cylindrical.cfg" + cylinder_ffd_def.test_iter = 10 + cylinder_ffd_def.test_vals = [0.000902348] #residual + cylinder_ffd_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + cylinder_ffd_def.timeout = 1600 + cylinder_ffd_def.tol = 1e-9 + + pass_list.append(cylinder_ffd_def.run_def()) + test_list.append(cylinder_ffd_def) + + # Spherical FFD test + sphere_ffd_def = TestCase('sphere_ffd_def') + sphere_ffd_def.cfg_dir = "deformation/spherical_ffd" + sphere_ffd_def.cfg_file = "def_spherical.cfg" + sphere_ffd_def.test_iter = 10 + sphere_ffd_def.test_vals = [0.00360367] #residual + sphere_ffd_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + sphere_ffd_def.timeout = 1600 + sphere_ffd_def.tol = 1e-8 + + pass_list.append(sphere_ffd_def.run_def()) + test_list.append(sphere_ffd_def) + + # Spherical FFD test using BSplines + sphere_ffd_def_bspline = TestCase('sphere_ffd_def_bspline') + sphere_ffd_def_bspline.cfg_dir = "deformation/spherical_ffd" + sphere_ffd_def_bspline.cfg_file = "def_spherical_bspline.cfg" + sphere_ffd_def_bspline.test_iter = 10 + sphere_ffd_def_bspline.test_vals = [0.00208393] #residual + sphere_ffd_def_bspline.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + sphere_ffd_def_bspline.timeout = 1600 + sphere_ffd_def_bspline.tol = 1e-8 + + pass_list.append(sphere_ffd_def_bspline.run_def()) + test_list.append(sphere_ffd_def_bspline) + + # Inviscid NACA0012 (triangles) + naca0012_cst = TestCase('naca0012_cst') + naca0012_cst.cfg_dir = "deformation/cst" + naca0012_cst.cfg_file = "naca0012.cfg" + naca0012_cst.test_iter = 10 + naca0012_cst.test_vals = [0.000385514] #residual + naca0012_cst.command = TestCase.Command("mpirun -n 2", "SU2_DEF") + naca0012_cst.timeout = 1600 + naca0012_cst.tol = 1e-8 + + pass_list.append(naca0012_cst.run_def()) + test_list.append(naca0012_cst) + + # 2D FD streamwise periodic cht, avg temp obj func + fd_sp_pinArray_cht_2d_dp_hf = TestCase('fd_sp_pinArray_cht_2d_dp_hf') + fd_sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" + fd_sp_pinArray_cht_2d_dp_hf.cfg_file = "FD_configMaster.cfg" + fd_sp_pinArray_cht_2d_dp_hf.test_iter = 100 + fd_sp_pinArray_cht_2d_dp_hf.command = TestCase.Command(exec = "finite_differences.py", param = "-z 2 -n 2 -f") + fd_sp_pinArray_cht_2d_dp_hf.timeout = 1600 + fd_sp_pinArray_cht_2d_dp_hf.reference_file = "of_grad_findiff.csv.ref" + fd_sp_pinArray_cht_2d_dp_hf.reference_file_aarch64 = "of_grad_findiff_aarch64.csv.ref" + fd_sp_pinArray_cht_2d_dp_hf.test_file = "FINDIFF/of_grad_findiff.csv" + fd_sp_pinArray_cht_2d_dp_hf.multizone = True + + pass_list.append(fd_sp_pinArray_cht_2d_dp_hf.run_filediff()) + test_list.append(fd_sp_pinArray_cht_2d_dp_hf) + + + # Tests summary + print('==================================================================') + print('Summary of the parallel tests') + print('python version:', sys.version) + for i, test in enumerate(test_list): + if (pass_list[i]): + print(' passed - %s'%test.tag) + else: + print('* FAILED - %s'%test.tag) + + if all(pass_list): + sys.exit(0) + else: + sys.exit(1) + # done + +if __name__ == '__main__': + main() From e8e7f389e4ebe4adfa5bec9b2cca95c3c6060ac0 Mon Sep 17 00:00:00 2001 From: rois1995 Date: Fri, 1 Dec 2023 12:47:51 +0100 Subject: [PATCH 2/5] - Changed mesh for regression case --- CGNSWrite/config.cfg | 4 +- CGNSWrite/mesh.cgns | Bin 525815 -> 0 bytes CGNSWrite/mesh.su2 | 19538 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 19540 insertions(+), 2 deletions(-) delete mode 100644 CGNSWrite/mesh.cgns create mode 100644 CGNSWrite/mesh.su2 diff --git a/CGNSWrite/config.cfg b/CGNSWrite/config.cfg index faeeea3f..bfad06ba 100644 --- a/CGNSWrite/config.cfg +++ b/CGNSWrite/config.cfg @@ -153,10 +153,10 @@ CONV_CAUCHY_EPS= 1E-6 % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % % Mesh input file -MESH_FILENAME= mesh.cgns +MESH_FILENAME= mesh.su2 % % Mesh input file format (SU2, CGNS, NETCDF_ASCII) -MESH_FORMAT= CGNS +MESH_FORMAT= SU2 % % Restart flow input file SOLUTION_FILENAME= restart_flow diff --git a/CGNSWrite/mesh.cgns b/CGNSWrite/mesh.cgns deleted file mode 100644 index 30dca8dd289ea05bee3c5d3c1b6528d98e112b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525815 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

2ap}sFZ}y(Sv5)9z^&o za;rq`nBwGrj;VjN8sW1@iXCr~5k5U^^Brw_KOc|zM!p`_x9^Ajxjc{$@&cds>k;s& zEYtEwz$ffG;-7l>)QiuH_(c9lV{}cKX@lW6r{wM6a zh)?h%5uc*|{8Ii7`)+oUzuWJpcA<(odHdl^R{goEd8*Qc&%nSLhm#UM<7%jG{Rp4t zEiXe)6F${TD|>!V_^g!lMaYO8dwyZT|^ACj2?3wFTdw7)M zp0@dpHu^Ds1)q=gu)fOo!~T#5@)@US@^bNY{ZHhNM10EfN22}=)Zs_6_&oBPE|U1? zFoC~|@g?X_?K=$B&W=`6H7gzEp|l-$S{57voF7C-}RO+jomB{)v1b zzrn^;sjA1PKf)|=_xHOJK8^KFj~}+9_>%X&x2*`DaWkfbuO@u9%+bLw3E?xe>Ws3N z37_sIFLY^0_a4Hl{K@{KD+>tjFcAIRl_e0F*H_e+LP_@AQwl<^}m{;6l*k$(q&hkbXK z#OFnR1p6-fpJMz|yG(g~h~}SuS|5V^ChWUjd|tHgGJMM7^NH1;V*cpg{ZGp-(~TBVw?lkjQC=l^0g;nQ{GwXLZLpP@;rO|573Kby9#c9`(lrLpUi8HCSD>o*oj zLHINm4himN)t^Q47T8Mo?BaUvKtIA~YTNt-7RcKnydUE+AM0U#?1%l`xjZH=ALQlm zq<1L(GrtM`4t&b|PiO5r_>qa%FF6~ZhkZwUDPE{w0zTn?PUrC@;1m4a+4v{)r|5rz zA35uPuHp3|@IR41LVcZxPuO?V*U9)h^e61Qs6T;EMX>Km%!KTntoSUt=fay$6DknkDd{-|7c!sq?%8%JC?{G1t|yxmrr@aYj5 zoo5)~(|yNruiAu9qiw#Ujed;Be5@D8*T;U?AM!vxBbOKWg#JW+)AW_~Az?!OlAix5 ztFM#gk6_=$_$T5^h<}RpOWO6isoK%OkCNI>e5yYYUlQ>N`;Pdhj32@OM0^SSNVM;I z_!Rw5*mvkp)Yk!@xS!f}DvCNF<$MF-Q;q!)Yb1Os^@n-bGff1h4f{b_6&SJ{fs*LVJ!Pxy??kR$o~VlP?XG5?LV2%l<`V!tFOd}{L@?O@)2 ziI2y8tQW%9$9~u!@<2Yw3;FHW!~IVYpI$rBRz2BJi}0yeYeTV)O?RzATf6D6XLL~J|qJ4Kxe_E<32Wt20LHJbe z`TQC}_%z;pu;pZ1!e{iM#dqIPd}+p!1^3DmK6BSQ_xDSxPc9KWVI=KJ#rpIvrcF4o41Puu*D+PvS)$Is;Rv0f3rehA+$lJD=yGO*Xi;1Afdhv@g>CP5&tv@^`9@f|B3n#QGWuTTLu0u z^FMJO_(Xlk-@@}9GXB1X*VjRR77^;_U-A0+FkYYBg~yj*-+|8}Jidhdk;va&1^y2G zX%gz^W%k{8=jQd-X-R*c{e5e0!e?Bv&>H;+pN0eOulo=_1Jfm}>OlBRU2)j;)r3!v zh2@migwMFs0l8KkqWDsjYqi%!37?O0rY%eOTrv7=P)tMupHKXqw=KLM<1ycpuZQ(b zd_PydKjeXYCN8h0N9bPxpQ3#i`8(qCB0gc?p+CXj;eQ4S{74p`2Y-kEiTLLefgi#D zM139jkr-cs{?v|cs&?HD|5MMt1E0{JqW?KsQeOxDF4}hypRn)XM@ zExtS9(^#Ox+ezoiz8{*mJ`>?H#IOGAxVIEvnq6|lu5!fRTfEKFi169vaJCJxsh+Xy zgMQCYf$$mpW2b;YgwIR)vdr61obs8WKC?R$K1bW;JKE^Sc+3yv>tTKDhy5Xs7ncw6 zYWKq{Sx@mKlS9N@lWVavHlbM2=S#` zLVdExk6_>Nd=K@YPuJ^J_q;0mn8gh$()H>KvhOeA^9B+=4bfpIRvo1JkV&O1_lvw_ z5eaD;WFveUZr&^zaX5j`r~DCbqaWijAM0U#?1%j!kCDq~ys62n;nNYHHwn*oAigBi zpL+RC_@9U`;rTe3{|S5|{|@~Ld?LPt=a0nt5bz@rpU|J$^}4Cr(V;)Jb^#UnO)>ut z{VC%|GX4&H!vB=v6ZT!ir?dP>kH0Hbea63aA^UFb5dH(t(o_XI?nE2)% zQ%jjnr6YWX+}QuB3E|VDL#gjBrhLX;O*U*yM)(X(xpQ^}!e{8=IrrNXOJJ26M_o@% z`1G*NceKNJKgMG|*2DUdd_U|Dc_5#O%d6cN`WNvsA%7≺HzscJlcS;8V2kB0qxv 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 Date: Mon, 4 Dec 2023 15:19:30 +0100 Subject: [PATCH 3/5] -Removed config and changes to parallel_regression --- CGNSWrite/config.cfg | 187 ----------------------------------------- parallel_regression.py | 14 --- 2 files changed, 201 deletions(-) delete mode 100644 CGNSWrite/config.cfg diff --git a/CGNSWrite/config.cfg b/CGNSWrite/config.cfg deleted file mode 100644 index bfad06ba..00000000 --- a/CGNSWrite/config.cfg +++ /dev/null @@ -1,187 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% SU2 configuration file % -% Case description: Transonic simulation RAE2822 (RANS) % -% Author: Francisco Palacios % -% Institution: Stanford University % -% Date: 5/15/2013 % -% File Version 7.4.0 "Blackbird" % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% -% -% Physical governing equations (EULER, NAVIER_STOKES, -% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, -% POISSON_EQUATION) -SOLVER= RANS -% -% Specify turbulent model (NONE, SA, SA_NEG, SST) -KIND_TURB_MODEL= SST -% -% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) -MATH_PROBLEM= DIRECT -% -% Restart solution (NO, YES) -RESTART_SOL= NO - -% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% -% -% Mach number (non-dimensional, based on the free-stream values) -MACH_NUMBER= 0.2 -% AirSpeed = 279.9663 -% Density = 1.225 -% -% Angle of attack (degrees, only for compressible flows) -AOA= 0.0 -% Free-stream temperature (288.15 K by default) -FREESTREAM_TEMPERATURE= 270.0 -% -% Reynolds number (non-dimensional, based on the free-stream values) -REYNOLDS_NUMBER= 3.28E6 -% -% Reynolds length (1 m by default) -REYNOLDS_LENGTH= 1 -REF_DIMENSIONALIZATION= FREESTREAM_VEL_EQ_MACH - -% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% -% -% Reference origin for moment computation -REF_ORIGIN_MOMENT_X = -0.2473 -REF_ORIGIN_MOMENT_Y = 0.00 -REF_ORIGIN_MOMENT_Z = 0.00 -% -% Reference length for pitching, rolling, and yawing non-dimensional moment -REF_LENGTH= 1 -% -% Reference area for force coefficients (0 implies automatic calculation) -% Body tube cross-area -REF_AREA= 1 - -% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% -% -% Navier-Stokes wall boundary marker(s) (NONE = no marker) -MARKER_HEATFLUX= ( OuterWall, 0.0, InnerWall, 0.0 ) -% -% Farfield boundary marker(s) (NONE = no marker) -MARKER_FAR= ( Inlet, Outlet ) - -% -% -% Marker(s) of the surface to be plotted or designed -MARKER_PLOTTING= ( InnerWall ) -% -% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated -MARKER_MONITORING= ( InnerWall ) - - -% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% -% -LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1.0e-6 -% lower memory consumption: -LINEAR_SOLVER_ITER= 15 -% -% -------------------------- MULTIGRID PARAMETERS -----------------------------% -% - -NEWTON_KRYLOV= NO -NEWTON_KRYLOV_IPARAM= (10, 5, 2) % n0, np, ft -NEWTON_KRYLOV_DPARAM= (1.0, 0.01, -6, 1e-5) % r0, tp, rf, e -CFL_ADAPT= YES -CFL_NUMBER= 1 -CFL_REDUCTION_TURB= 1.0 -% -CFL_ADAPT_PARAM= ( 0.5, 1.01, 1.0, 5, 0.0001) - -ITER= 1 - -MGLEVEL= 0 -% -MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) -MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) -MG_DAMP_RESTRICTION= 0.5 -MG_DAMP_PROLONGATION= 0.5 - -% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% -% -% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, -% TURKEL_PREC, MSW) -CONV_NUM_METHOD_FLOW= ROE -USE_VECTORIZATION= YES -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. -% Required for 2nd order upwind schemes (NO, YES) -MUSCL_FLOW= NO -% -% Slope limiter (VENKATAKRISHNAN, MINMOD) -SLOPE_LIMITER_FLOW= VENKATAKRISHNAN -% -% Coefficient for the limiter (smooth regions) -VENKAT_LIMITER_COEFF= 0.03 -% -% 2nd and 4th order artificial dissipation coefficients -JST_SENSOR_COEFF= ( 0.5, 0.02 ) -% -% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT) -TIME_DISCRE_FLOW= EULER_IMPLICIT - -% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% -% -% Convective numerical method (SCALAR_UPWIND) -CONV_NUM_METHOD_TURB= SCALAR_UPWIND -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. -% Required for 2nd order upwind schemes (NO, YES) -MUSCL_TURB= NO -% -% Time discretization (EULER_IMPLICIT) -TIME_DISCRE_TURB= EULER_IMPLICIT - - -% --------------------------- CONVERGENCE PARAMETERS --------------------------% -% -CONV_FIELD= MOMENT_X -CONV_STARTITER= 10 -CONV_CAUCHY_ELEMS= 100 -CONV_CAUCHY_EPS= 1E-6 -% - -% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% -% -% Mesh input file -MESH_FILENAME= mesh.su2 -% -% Mesh input file format (SU2, CGNS, NETCDF_ASCII) -MESH_FORMAT= SU2 -% -% Restart flow input file -SOLUTION_FILENAME= restart_flow -% -TABULAR_FORMAT= CSV -% -% Output file convergence history (w/o extension) -CONV_FILENAME= history_First -% -% Output file restart flow -RESTART_FILENAME= restart_flow -% -% Output file flow (w/o extension) variables -VOLUME_FILENAME= flow -% -% Output file surface flow coefficient (w/o extension) -SURFACE_FILENAME= surface_flow -% -% Writing solution file frequency -OUTPUT_WRT_FREQ= 100 -% -% -% Screen output fields -SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_DENSITY, LIFT, DRAG, MOMENT_Z) -OUTPUT_FILES= (SURFACE_CGNS) -WRT_FORCES_BREAKDOWN= NO -VOLUME_OUTPUT= (COORDINATES) -HISTORY_OUTPUT= (ITER) diff --git a/parallel_regression.py b/parallel_regression.py index 481f355e..3278b46e 100644 --- a/parallel_regression.py +++ b/parallel_regression.py @@ -1555,20 +1555,6 @@ def main(): species3_multizone_restart.multizone = True test_list.append(species3_multizone_restart) - ##################### - ## CGNS writer ### - ##################### - - # CGNS writer - CGNSWrite = TestCase('CGNSWrite') - CGNSWrite.cfg_dir = "CGNSWrite" - CGNSWrite.cfg_file = "config.cfg" - CGNSWrite.test_iter = 1 - CGNSWrite.test_vals = [-2.974473, 0.665204, 5.068846, -7.003873] - CGNSWrite.command = TestCase.Command("mpirun -n 2", "SU2_CFD") - CGNSWrite.new_output = True - test_list.append(CGNSWrite) - ###################################### ### RUN TESTS ### ###################################### From 505e437e97eb8dc4e8cfb68f40eb7b2fb1686bde Mon Sep 17 00:00:00 2001 From: rois1995 Date: Mon, 4 Dec 2023 15:25:25 +0100 Subject: [PATCH 4/5] - Changed name to folder --- {CGNSWrite => cgns_writer}/mesh.su2 | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {CGNSWrite => cgns_writer}/mesh.su2 (100%) diff --git a/CGNSWrite/mesh.su2 b/cgns_writer/mesh.su2 similarity index 100% rename from CGNSWrite/mesh.su2 rename to cgns_writer/mesh.su2 From 114d7a4d23177a9ae97306f4b2053b74346f3380 Mon Sep 17 00:00:00 2001 From: rois1995 Date: Mon, 4 Dec 2023 17:48:50 +0100 Subject: [PATCH 5/5] - Removed parallel_regression.py --- parallel_regression.py | 1830 ---------------------------------------- 1 file changed, 1830 deletions(-) delete mode 100644 parallel_regression.py diff --git a/parallel_regression.py b/parallel_regression.py deleted file mode 100644 index 3278b46e..00000000 --- a/parallel_regression.py +++ /dev/null @@ -1,1830 +0,0 @@ -#!/usr/bin/env python - -## \file parallel_regression.py -# \brief Python script for automated regression testing of SU2 examples -# \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.0.0 "Harrier" -# -# SU2 Project Website: https://su2code.github.io -# -# The SU2 Project is maintained by the SU2 Foundation -# (http://su2foundation.org) -# -# Copyright 2012-2023, SU2 Contributors (cf. AUTHORS.md) -# -# SU2 is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# SU2 is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with SU2. If not, see . - -# make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 -from __future__ import print_function - -import sys -from TestCase import TestCase - -def main(): - '''This program runs SU2 and ensures that the output matches specified values. - This will be used to do checks when code is pushed to github - to make sure nothing is broken. ''' - - test_list = [] - - ####################### - ### Flamelet solver ### - ####################### - - # 2D planar laminar premixed methane flame on isothermal burner (restart) - cfd_flamelet_ch4 = TestCase('cfd_flamelet_ch4') - cfd_flamelet_ch4.cfg_dir = "flamelet/01_laminar_premixed_ch4_flame_cfd" - cfd_flamelet_ch4.cfg_file = "lam_prem_ch4_cfd.cfg" - cfd_flamelet_ch4.test_iter = 10 - cfd_flamelet_ch4.test_vals = [-15.313265, -15.180884, -15.291808, -8.488238, -15.010141, -15.920950] - cfd_flamelet_ch4.new_output = True - test_list.append(cfd_flamelet_ch4) - - # axisymmetric 2D planar laminar premixed methane flame on isothermal burner (restart) - cfd_flamelet_ch4_axi = TestCase('cfd_flamelet_ch4_axi') - cfd_flamelet_ch4_axi.cfg_dir = "flamelet/05_laminar_premixed_ch4_flame_cfd_axi" - cfd_flamelet_ch4_axi.cfg_file = "lam_prem_ch4_cfd_axi.cfg" - cfd_flamelet_ch4_axi.test_iter = 10 - cfd_flamelet_ch4_axi.test_vals = [-11.054149, -12.276393, -11.299388, -13.877670, -6.291548] - cfd_flamelet_ch4_axi.new_output = True - test_list.append(cfd_flamelet_ch4_axi) - - # 2D planar laminar partially premixed flame on isothermal burner and heat exchanger (restart) - cfd_flamelet_ch4_partial_premix = TestCase('cfd_flamelet_ch4_partial_premix') - cfd_flamelet_ch4_partial_premix.cfg_dir = "flamelet/06_laminar_partial_premixed_ch4_flame_cfd" - cfd_flamelet_ch4_partial_premix.cfg_file = "lam_partial_prem_ch4_cfd.cfg" - cfd_flamelet_ch4_partial_premix.test_iter = 10 - cfd_flamelet_ch4_partial_premix.test_vals = [-10.072805, -11.301138, -4.658971, -13.158224, -11.087511] - cfd_flamelet_ch4_partial_premix.new_output = True - test_list.append(cfd_flamelet_ch4_partial_premix) - - ######################### - ## NEMO solver ### - ######################### - - # Adiabatic thermal bath - thermalbath = TestCase('thermalbath') - thermalbath.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" - thermalbath.cfg_file = "thermalbath.cfg" - thermalbath.test_iter = 10 - thermalbath.test_vals = [0.945997, 0.945997, -12.039262, -12.171767, -32.000000, 10.013239] - test_list.append(thermalbath) - - # Adiabatic thermal bath - ionized = TestCase('ionized') - ionized.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" - ionized.cfg_file = "weakly_ionized.cfg" - ionized.test_iter = 10 - ionized.test_vals = [-29.806157, -11.130797, -11.337264, -17.235059, -17.578729, -15.190274, -25.013626, -32.000000, -5.174887, 0.000000, 0.000000] - ionized.test_vals_aarch64 = [-29.816386, -10.729986, -11.720016, -17.484469, -18.237891, -15.241605, -24.956918, -32.000000, -5.727244, 0.000000, 0.000000] - test_list.append(ionized) - - # Adiabatic frozen thermal bath - thermalbath_frozen = TestCase('thermalbath_frozen') - thermalbath_frozen.cfg_dir = "nonequilibrium/thermalbath/frozen" - thermalbath_frozen.cfg_file = "thermalbath_frozen.cfg" - thermalbath_frozen.test_iter = 10 - thermalbath_frozen.test_vals = [-32.000000, -32.000000, -11.962477, -11.962477, -32.000000, 10.013545] - test_list.append(thermalbath_frozen) - - # Inviscid single wedge, ausm, implicit - invwedge_a = TestCase('invwedge_ausm') - invwedge_a.cfg_dir = "nonequilibrium/invwedge" - invwedge_a.cfg_file = "invwedge_ausm.cfg" - invwedge_a.test_iter = 10 - invwedge_a.test_vals = [-1.042842, -1.567605, -18.301264, -18.628631, -18.574668, 2.275192, 1.879772, 5.319421, 0.873699] - invwedge_a.test_vals_aarch64 = [-1.042842, -1.567605, -18.301374, -18.628734, -18.574780, 2.275192, 1.879772, 5.319421, 0.873699] - test_list.append(invwedge_a) - - # Inviscid single wedge, ausm+-up2, implicit - invwedge_ap2 = TestCase('invwedge_ap2') - invwedge_ap2.cfg_dir = "nonequilibrium/invwedge" - invwedge_ap2.cfg_file = "invwedge_ausmplusup2.cfg" - invwedge_ap2.test_iter = 10 - invwedge_ap2.test_vals = [-0.952589, -1.477352, -16.736014, -17.064021, -17.009120, 2.387086, 1.287286, 5.403046, 0.956402] - invwedge_ap2.test_vals_aarch64 = [-0.952589, -1.477352, -16.736014, -17.064021, -17.009120, 2.387086, 1.287286, 5.403046, 0.956402] - test_list.append(invwedge_ap2) - - # Inviscid single wedge, msw, implicit - invwedge_msw = TestCase('invwedge_msw') - invwedge_msw.cfg_dir = "nonequilibrium/invwedge" - invwedge_msw.cfg_file = "invwedge_msw.cfg" - invwedge_msw.test_iter = 10 - invwedge_msw.test_vals = [-1.165957, -1.690720, -18.298756, -18.626164, -18.572159, 2.151638, 1.721236, 5.193813, 0.751584] - invwedge_msw.test_vals_aarch64 = [-1.165957, -1.690720, -18.301301, -18.628685, -18.574704, 2.151638, 1.721236, 5.193813, 0.751584] - test_list.append(invwedge_msw) - - # Inviscid single wedge, roe, implicit - invwedge_roe = TestCase('invwedge_roe') - invwedge_roe.cfg_dir = "nonequilibrium/invwedge" - invwedge_roe.cfg_file = "invwedge_roe.cfg" - invwedge_roe.test_iter = 10 - invwedge_roe.test_vals = [-1.038582, -1.563344, -18.300307, -18.627706, -18.573706, 2.278987, 1.861307, 5.323753, 0.874900] - invwedge_roe.test_vals_aarch64 = [-1.038582, -1.563344, -18.299879, -18.627263, -18.573276, 2.278987, 1.861307, 5.323753, 0.874900] - test_list.append(invwedge_roe) - - # Inviscid single wedge, lax, implicit - invwedge_lax = TestCase('invwedge_lax') - invwedge_lax.cfg_dir = "nonequilibrium/invwedge" - invwedge_lax.cfg_file = "invwedge_lax.cfg" - invwedge_lax.test_iter = 10 - invwedge_lax.test_vals = [-1.075662, -1.600425, -32.000000, -32.000000, -24.972431, 2.252952, 1.725158, 5.282140, 0.848823] - invwedge_lax.test_vals_aarch64 = [-1.075662, -1.600425, -32.000000, -32.000000, -24.972431, 2.252952, 1.725158, 5.282140, 0.848823] - test_list.append(invwedge_lax) - - # Inviscid single wedge, implicit, AUSM+M scheme - invwedge_ausm_m = TestCase('invwedge_ausm_m') - invwedge_ausm_m.cfg_dir = "nonequilibrium/invwedge" - invwedge_ausm_m.cfg_file = "invwedge_am.cfg" - invwedge_ausm_m.test_iter = 10 - invwedge_ausm_m.test_vals = [-1.055083, -1.579845, -16.739725, -17.063618, -17.012831, 2.265430, 1.797602, 5.302740, 0.856548] - invwedge_ausm_m.test_vals_aarch64 = [-1.055079, -1.579842, -16.739725, -17.063618, -17.012831, 2.265433, 1.797600, 5.302743, 0.856551] - test_list.append(invwedge_ausm_m) - - # Inviscid single wedge, implicit, NEMO supersonic inlet - invwedge_ss_inlet = TestCase('invwedge_ss_inlet') - invwedge_ss_inlet.cfg_dir = "nonequilibrium/invwedge" - invwedge_ss_inlet.cfg_file = "invwedge_ss_inlet.cfg" - invwedge_ss_inlet.test_iter = 10 - invwedge_ss_inlet.test_vals = [-1.042718, -1.567481, -18.250175, -18.579516, -18.523248, 2.275305, 1.880068, 5.319548, 0.873821] - invwedge_ss_inlet.test_vals_aarch64 = [-1.042718, -1.567481, -18.250175, -18.579516, -18.523248, 2.275305, 1.880068, 5.319548, 0.873821] - test_list.append(invwedge_ss_inlet) - - # Viscous single cone - axisymmetric - visc_cone = TestCase('visc_cone') - visc_cone.cfg_dir = "nonequilibrium/visc_wedge" - visc_cone.cfg_file = "axi_visccone.cfg" - visc_cone.test_iter = 10 - visc_cone.test_vals = [-5.222212, -5.746462, -20.559802, -20.510196, -20.439814, 1.255865, -3.208363, -0.016006, 0.093455, 32633.000000] - visc_cone.test_vals_aarch64 = [-5.222267, -5.746522, -20.559799, -20.510195, -20.440311, 1.255761, -3.208360, -0.016014, 0.093462, 32634.000000] - test_list.append(visc_cone) - - # Viscous single wedge with Mutation++ - #viscwedge_mpp = TestCase('viscwedge_mpp') - #viscwedge_mpp.cfg_dir = "nonequilibrium/viscwedge_mpp" - #viscwedge_mpp.cfg_file = "viscwedge_mpp.cfg" - #viscwedge_mpp.test_iter = 10 - #viscwedge_mpp.test_vals = [-20.608474, -20.586446,-20.707524, -5.171304,-5.696067,-1.548350,-2.071211,2.231054,-2.545494] - #test_list.append(viscwedge_mpp) - - # Viscous single wedge - super catalytic walls - super_cat = TestCase('super_cat') - super_cat.cfg_dir = "nonequilibrium/visc_wedge" - super_cat.cfg_file = "super_cat.cfg" - super_cat.test_iter = 10 - super_cat.test_vals = [-5.232590, -5.757884, -20.641547, -20.640244, -20.539243, 1.246889, -3.205235, -0.028406, 0.250857, 32459.000000] - test_list.append(super_cat) - - # Viscous single wedge - partially catalytic walls - partial_cat = TestCase('partial_cat') - partial_cat.cfg_dir = "nonequilibrium/visc_wedge" - partial_cat.cfg_file = "partial_cat.cfg" - partial_cat.test_iter = 10 - partial_cat.test_vals = [-5.210300, -5.735063, -20.880374, -20.825890, -23.475263, 1.806281, -2.813924, -0.078469, 0.496017, 29021.000000] - test_list.append(partial_cat) - - # Viscous cylinder, ionization, Gupta-Yos - ion_gy = TestCase('ion_gy') - ion_gy.cfg_dir = "nonequilibrium/visc_cylinder" - ion_gy.cfg_file = "cyl_ion_gy.cfg" - ion_gy.test_iter = 10 - ion_gy.test_vals = [-11.629873, -4.165563, -4.702662, -4.950351, -5.146155, -4.993878, -6.893332, 5.990109, 5.990004, -0.014849, 0.000000, 90090.000000] - test_list.append(ion_gy) - - ########################## - ### Compressible Euler ### - ########################## - - # Channel - channel = TestCase('channel') - channel.cfg_dir = "euler/channel" - channel.cfg_file = "inv_channel_RK.cfg" - channel.test_iter = 20 - channel.test_vals = [-2.647975, 2.818090, 0.022280, 0.004644] - test_list.append(channel) - - # NACA0012 - naca0012 = TestCase('naca0012') - naca0012.cfg_dir = "euler/naca0012" - naca0012.cfg_file = "inv_NACA0012_Roe.cfg" - naca0012.test_iter = 20 - naca0012.test_vals = [-4.014140, -3.537888, 0.333403, 0.021227] - test_list.append(naca0012) - - # Supersonic wedge - wedge = TestCase('wedge') - wedge.cfg_dir = "euler/wedge" - wedge.cfg_file = "inv_wedge_HLLC.cfg" - wedge.test_iter = 20 - wedge.test_vals = [-0.944740, 4.782451, -0.208522, 0.036742] - test_list.append(wedge) - - # ONERA M6 Wing - oneram6 = TestCase('oneram6') - oneram6.cfg_dir = "euler/oneram6" - oneram6.cfg_file = "inv_ONERAM6.cfg" - oneram6.test_iter = 10 - oneram6.test_vals = [-9.277150, -8.694005, 0.281703, 0.011821] - oneram6.timeout = 3200 - test_list.append(oneram6) - - # Fixed CL NACA0012 - fixedCL_naca0012 = TestCase('fixedcl_naca0012') - fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" - fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" - fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-7.379831, -1.886302, 0.300000, 0.019471] - test_list.append(fixedCL_naca0012) - - # Polar sweep of the inviscid NACA0012 - polar_naca0012 = TestCase('polar_naca0012') - polar_naca0012.cfg_dir = "polar/naca0012" - polar_naca0012.cfg_file = "inv_NACA0012.cfg" - polar_naca0012.polar = True - polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.217981, 4.256386, 0.009084, 0.016823] - polar_naca0012.test_vals_aarch64 = [-1.718925, 3.711429, 0.009217, 0.007784] - polar_naca0012.command = TestCase.Command(exec = "compute_polar.py", param = "-i 11") - # flaky test on arm64 - polar_naca0012.enabled_on_cpu_arch = ["x86_64"] - test_list.append(polar_naca0012) - - # HYPERSONIC FLOW PAST BLUNT BODY - bluntbody = TestCase('bluntbody') - bluntbody.cfg_dir = "euler/bluntbody" - bluntbody.cfg_file = "blunt.cfg" - bluntbody.test_iter = 20 - bluntbody.test_vals = [0.540009, 6.916653, 0.000000, 1.868976] - test_list.append(bluntbody) - - # Equivalent area NACA64-206 - ea_naca64206 = TestCase('ea_naca64206') - ea_naca64206.cfg_dir = "optimization_euler/equivalentarea_naca64206" - ea_naca64206.cfg_file = "NACA64206.cfg" - ea_naca64206.test_iter = 10 - ea_naca64206.test_vals = [-1.076215, -0.391987, -0.000701, 67775.000000] - test_list.append(ea_naca64206) - - # SUPERSONIC FLOW PAST A RAMP IN A CHANNEL - ramp = TestCase('ramp') - ramp.cfg_dir = "euler/ramp" - ramp.cfg_file = "inv_ramp.cfg" - ramp.test_iter = 10 - ramp.test_vals = [-13.399623, -7.788893, -0.081064, 0.056474] - ramp.test_vals_aarch64 = [-13.398422, -7.786461, -0.081064, 0.056474] - test_list.append(ramp) - - ########################## - ### Compressible N-S ### - ########################## - - # Laminar flat plate - flatplate = TestCase('flatplate') - flatplate.cfg_dir = "navierstokes/flatplate" - flatplate.cfg_file = "lam_flatplate.cfg" - flatplate.test_iter = 100 - flatplate.test_vals = [-9.336395, -3.849426, 0.001112, 0.036276, 2.361500, -2.325300, -2.279700, -2.279700] - test_list.append(flatplate) - - # Custom objective function - flatplate_udobj = TestCase('flatplate_udobj') - flatplate_udobj.cfg_dir = "user_defined_functions" - flatplate_udobj.cfg_file = "lam_flatplate.cfg" - flatplate_udobj.test_iter = 20 - flatplate_udobj.test_vals = [-6.653802, -1.181430, -0.794887, 0.000611, -0.000369, 0.000736, -0.001104, 596.690000, 299.800000, 296.890000, 21.492000, 0.563990, 37.148000, 2.278700] - test_list.append(flatplate_udobj) - - # Laminar cylinder (steady) - cylinder = TestCase('cylinder') - cylinder.cfg_dir = "navierstokes/cylinder" - cylinder.cfg_file = "lam_cylinder.cfg" - cylinder.test_iter = 25 - cylinder.test_vals = [-6.754517, -1.286785, -0.213640, 0.706519, 0.158870] - test_list.append(cylinder) - - # Laminar cylinder (low Mach correction) - cylinder_lowmach = TestCase('cylinder_lowmach') - cylinder_lowmach.cfg_dir = "navierstokes/cylinder" - cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" - cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.858484, -1.396528, -1.854558, 110.033249, 0.001951] - test_list.append(cylinder_lowmach) - - # 2D Poiseuille flow (body force driven with periodic inlet / outlet) - poiseuille = TestCase('poiseuille') - poiseuille.cfg_dir = "navierstokes/poiseuille" - poiseuille.cfg_file = "lam_poiseuille.cfg" - poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.050847, 0.648238, 0.000200, 13.639839, -2.047000] - poiseuille.tol = 0.001 - test_list.append(poiseuille) - - # 2D Poiseuille flow (inlet profile file) - poiseuille_profile = TestCase('poiseuille_profile') - poiseuille_profile.cfg_dir = "navierstokes/poiseuille" - poiseuille_profile.cfg_file = "profile_poiseuille.cfg" - poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.492939, -7.672950, -0.000000, 2.085796] - poiseuille_profile.test_vals_aarch64 = [-12.492864, -7.671632, -0.000000, 2.085796] - test_list.append(poiseuille_profile) - - ########################## - ### Compressible RANS ### - ########################## - - # RAE2822 SA - rae2822_sa = TestCase('rae2822_sa') - rae2822_sa.cfg_dir = "rans/rae2822" - rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" - rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.004689, -5.265782, 0.809463, 0.062016, -80576.000000] - test_list.append(rae2822_sa) - - # RAE2822 SST - rae2822_sst = TestCase('rae2822_sst') - rae2822_sst.cfg_dir = "rans/rae2822" - rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" - rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-0.510369, 4.870643, 0.816647, 0.061833, -71779.000000] - test_list.append(rae2822_sst) - - # RAE2822 SST_SUST - rae2822_sst_sust = TestCase('rae2822_sst_sust') - rae2822_sst_sust.cfg_dir = "rans/rae2822" - rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" - rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.537339, 4.870643, 0.816647, 0.061833] - test_list.append(rae2822_sst_sust) - - # Flat plate - turb_flatplate = TestCase('turb_flatplate') - turb_flatplate.cfg_dir = "rans/flatplate" - turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" - turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.147727, -6.728308, -0.176232, 0.057717] - test_list.append(turb_flatplate) - - # Flat plate (compressible) with species inlet - turb_flatplate_species = TestCase('turb_flatplate_species') - turb_flatplate_species.cfg_dir = "rans/flatplate" - turb_flatplate_species.cfg_file = "turb_SA_flatplate_species.cfg" - turb_flatplate_species.test_iter = 20 - turb_flatplate_species.test_vals = [-4.147727, -0.634899, -1.770894, 1.334987, -3.250340, 9.000000, -6.700853, 5.000000, -6.991055, 10.000000, -6.033829, 0.996033, 0.996033] - test_list.append(turb_flatplate_species) - - # ONERA M6 Wing - turb_oneram6 = TestCase('turb_oneram6') - turb_oneram6.cfg_dir = "rans/oneram6" - turb_oneram6.cfg_file = "turb_ONERAM6.cfg" - turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.388839, -6.689426, 0.230321, 0.157640, -32539.000000] - turb_oneram6.timeout = 3200 - test_list.append(turb_oneram6) - - # ONERA M6 Wing - vorticity confinement - turb_oneram6_vc = TestCase('turb_oneram6_vc') - turb_oneram6_vc.cfg_dir = "rans/oneram6" - turb_oneram6_vc.cfg_file = "turb_ONERAM6_vc.cfg" - turb_oneram6_vc.test_iter = 15 - turb_oneram6_vc.test_vals = [-2.262387, -6.626454, 0.228392, 0.140799, -27107.000000] - turb_oneram6_vc.timeout = 3200 - test_list.append(turb_oneram6_vc) - - # ONERA M6 Wing - Newton-Krylov - turb_oneram6_nk = TestCase('turb_oneram6_nk') - turb_oneram6_nk.cfg_dir = "rans/oneram6" - turb_oneram6_nk.cfg_file = "turb_ONERAM6_nk.cfg" - turb_oneram6_nk.test_iter = 20 - turb_oneram6_nk.test_vals = [-4.892252, -4.514006, -11.432306, 0.221025, 0.045570, 2.000000, -0.899460, 31.384000] - turb_oneram6_nk.timeout = 600 - turb_oneram6_nk.tol = 0.0001 - test_list.append(turb_oneram6_nk) - - # NACA0012 (SA, FUN3D finest grid results: CL=1.0983, CD=0.01242) - turb_naca0012_sa = TestCase('turb_naca0012_sa') - turb_naca0012_sa.cfg_dir = "rans/naca0012" - turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" - turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-10.453509, -13.866376, 1.057622, 0.022916, 20.000000, -1.867547, 20.000000, -3.632893, -44.540000] - turb_naca0012_sa.timeout = 3200 - test_list.append(turb_naca0012_sa) - - # NACA0012 (SST, FUN3D finest grid results: CL=1.0840, CD=0.01253) - turb_naca0012_sst = TestCase('turb_naca0012_sst') - turb_naca0012_sst.cfg_dir = "rans/naca0012" - turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" - turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.219694, -14.440925, -7.107551, 1.050109, 0.019148, -1.601287, -38.510000] - turb_naca0012_sst.test_vals_aarch64 = [-12.219735, -14.440925, -7.107550, 1.050109, 0.019148, -1.601262, -38.510000] - turb_naca0012_sst.timeout = 3200 - test_list.append(turb_naca0012_sst) - - # NACA0012 (SST_SUST, FUN3D finest grid results: CL=1.0840, CD=0.01253) - turb_naca0012_sst_sust = TestCase('turb_naca0012_sst_sust') - turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" - turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" - turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.148637, -14.756583, -6.342201, 1.001189, 0.019384, -1.579100] - turb_naca0012_sst_sust.test_vals_aarch64 = [-12.148716, -14.756582, -6.342200, 1.001189, 0.019384, -1.579104] - turb_naca0012_sst_sust.timeout = 3200 - test_list.append(turb_naca0012_sst_sust) - - # NACA0012 (SST, 2003m, Vorticity) - turb_naca0012_sst_2003_Vm = TestCase('turb_naca0012_sst_2003_Vm') - turb_naca0012_sst_2003_Vm.cfg_dir = "rans/naca0012" - turb_naca0012_sst_2003_Vm.cfg_file = "turb_NACA0012_sst_2003-Vm.cfg" - turb_naca0012_sst_2003_Vm.test_iter = 10 - turb_naca0012_sst_2003_Vm.test_vals = [-7.664806, -10.014760, -3.358584, 1.048643, 0.019718, -2.067883] - turb_naca0012_sst_2003_Vm.timeout = 3200 - test_list.append(turb_naca0012_sst_2003_Vm) - - # NACA0012 (SST, 1994m Kato-Launder) - turb_naca0012_sst_1994_KLm = TestCase('turb_naca0012_sst_1994_KLm') - turb_naca0012_sst_1994_KLm.cfg_dir = "rans/naca0012" - turb_naca0012_sst_1994_KLm.cfg_file = "turb_NACA0012_sst_1994-KLm.cfg" - turb_naca0012_sst_1994_KLm.test_iter = 10 - turb_naca0012_sst_1994_KLm.test_vals = [-8.570837, -10.805211, -3.997146, 1.049397, 0.019183, -1.805750] - turb_naca0012_sst_1994_KLm.timeout = 3200 - test_list.append(turb_naca0012_sst_1994_KLm) - - - # NACA0012 (SST, fixed values for turbulence quantities) - turb_naca0012_sst_fixedvalues = TestCase('turb_naca0012_sst_fixedvalues') - turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012" - turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg" - turb_naca0012_sst_fixedvalues.test_iter = 10 - turb_naca0012_sst_fixedvalues.test_vals = [-5.216737, -10.025507, -1.615166, 1.021891, 0.040213, -3.731060] - turb_naca0012_sst_fixedvalues.timeout = 3200 - test_list.append(turb_naca0012_sst_fixedvalues) - - # NACA0012 (SST, explicit Euler for flow and turbulence equations) - turb_naca0012_sst_expliciteuler = TestCase('turb_naca0012_sst_expliciteuler') - turb_naca0012_sst_expliciteuler.cfg_dir = "rans/naca0012" - turb_naca0012_sst_expliciteuler.cfg_file = "turb_NACA0012_sst_expliciteuler.cfg" - turb_naca0012_sst_expliciteuler.test_iter = 10 - turb_naca0012_sst_expliciteuler.test_vals = [-3.532289, -3.157766, 3.364024, 1.122901, 0.500798, -float("inf")] - turb_naca0012_sst_expliciteuler.timeout = 3200 - test_list.append(turb_naca0012_sst_expliciteuler) - - # PROPELLER - propeller = TestCase('propeller') - propeller.cfg_dir = "rans/propeller" - propeller.cfg_file = "propeller.cfg" - propeller.test_iter = 10 - propeller.test_vals = [-3.389575, -8.409251, 0.000048, 0.056329] - propeller.timeout = 3200 - test_list.append(propeller) - - # Actuator disk BEM method for propeller - actuatordisk_bem = TestCase('actuatordisk_bem') - actuatordisk_bem.cfg_dir = "rans/actuatordisk_bem" - actuatordisk_bem.cfg_file = "actuatordisk_bem.cfg" - actuatordisk_bem.test_iter = 15 - actuatordisk_bem.test_vals = [-5.282249, -10.335140, 0.001383, -0.375718] - actuatordisk_bem.timeout = 3200 - actuatordisk_bem.tol = 0.001 - test_list.append(actuatordisk_bem) - - ####################################### - ### Axisymmetric Compressible RANS ### - ####################################### - - # Axisymmetric air nozzle (transonic) restart - axi_rans_air_nozzle_restart = TestCase('axi_rans_air_nozzle_restart') - axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" - axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" - axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.063597, -7.006585, -8.702557, -4.039824, -2019.8] - axi_rans_air_nozzle_restart.tol = 0.0001 - test_list.append(axi_rans_air_nozzle_restart) - - ################################# - ## Compressible RANS Restart ### - ################################# - - # NACA0012 SST Multigrid restart - turb_naca0012_sst_restart_mg = TestCase('turb_naca0012_sst_restart_mg') - turb_naca0012_sst_restart_mg.cfg_dir = "rans/naca0012" - turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" - turb_naca0012_sst_restart_mg.test_iter = 20 - turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-7.612353, -7.432347, -1.918249, -0.000013, 0.079110] - turb_naca0012_sst_restart_mg.timeout = 3200 - turb_naca0012_sst_restart_mg.tol = 0.000001 - test_list.append(turb_naca0012_sst_restart_mg) - - ############################# - ### Incompressible Euler ### - ############################# - - # NACA0012 Hydrofoil - inc_euler_naca0012 = TestCase('inc_euler_naca0012') - inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" - inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" - inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-4.801273, -3.773079, 0.495236, 0.007346] - test_list.append(inc_euler_naca0012) - - # C-D nozzle with pressure inlet and mass flow outlet - inc_nozzle = TestCase('inc_nozzle') - inc_nozzle.cfg_dir = "incomp_euler/nozzle" - inc_nozzle.cfg_file = "inv_nozzle.cfg" - inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-5.982321, -4.953536, 0.000454, 0.121390] - test_list.append(inc_nozzle) - - ############################# - ### Incompressible N-S ### - ############################# - - # Laminar cylinder - inc_lam_cylinder = TestCase('inc_lam_cylinder') - inc_lam_cylinder.cfg_dir = "incomp_navierstokes/cylinder" - inc_lam_cylinder.cfg_file = "incomp_cylinder.cfg" - inc_lam_cylinder.test_iter = 10 - inc_lam_cylinder.test_vals = [-4.004072, -3.194881, -0.076553, 7.780048] - test_list.append(inc_lam_cylinder) - - # Buoyancy-driven cavity - inc_buoyancy = TestCase('inc_buoyancy') - inc_buoyancy.cfg_dir = "incomp_navierstokes/buoyancy_cavity" - inc_buoyancy.cfg_file = "lam_buoyancy_cavity.cfg" - inc_buoyancy.test_iter = 20 - inc_buoyancy.test_vals = [-4.435827, 0.508037, 0.000000, 0.000000] - test_list.append(inc_buoyancy) - - # Laminar heated cylinder with polynomial fluid model - inc_poly_cylinder = TestCase('inc_poly_cylinder') - inc_poly_cylinder.cfg_dir = "incomp_navierstokes/cylinder" - inc_poly_cylinder.cfg_file = "poly_cylinder.cfg" - inc_poly_cylinder.test_iter = 20 - inc_poly_cylinder.test_vals = [-7.791831, -2.062292, 0.013040, 1.913997, -171.120000] - test_list.append(inc_poly_cylinder) - - # X-coarse laminar bend as a mixed element CGNS test - inc_lam_bend = TestCase('inc_lam_bend') - inc_lam_bend.cfg_dir = "incomp_navierstokes/bend" - inc_lam_bend.cfg_file = "lam_bend.cfg" - inc_lam_bend.test_iter = 10 - inc_lam_bend.test_vals = [-3.447746, -3.085237, -0.020816, 1.147373] - test_list.append(inc_lam_bend) - - # 3D laminar channnel with 1 cell in flow direction, streamwise periodic - sp_pipeSlice_3d_dp_hf_tp = TestCase('sp_pipeSlice_3d_dp_hf_tp') - sp_pipeSlice_3d_dp_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/pipeSlice_3d" - sp_pipeSlice_3d_dp_hf_tp.cfg_file = "sp_pipeSlice_3d_dp_hf_tp.cfg" - sp_pipeSlice_3d_dp_hf_tp.test_iter = 10 - sp_pipeSlice_3d_dp_hf_tp.test_vals = [-11.119796, -11.234737, -8.694310, -0.000023] - test_list.append(sp_pipeSlice_3d_dp_hf_tp) - - # 2D pin array with heat transfer BC on pin surfaces - inc_heatTransfer_BC = TestCase('inc_heatTransfer_BC') - inc_heatTransfer_BC.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" - inc_heatTransfer_BC.cfg_file = "BC_HeatTransfer.cfg" - inc_heatTransfer_BC.test_iter = 50 - inc_heatTransfer_BC.test_vals = [-8.242651, -7.341179, -7.407346, -0.152603, -1667.300000] - test_list.append(inc_heatTransfer_BC) - - ############################ - ### Incompressible RANS ### - ############################ - - # NACA0012 - inc_turb_naca0012 = TestCase('inc_turb_naca0012') - inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" - inc_turb_naca0012.cfg_file = "naca0012.cfg" - inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788596, -11.039529, -0.000002, 0.309504] - test_list.append(inc_turb_naca0012) - - # NACA0012, SST_SUST - inc_turb_naca0012_sst_sust = TestCase('inc_turb_naca0012_sst_sust') - inc_turb_naca0012_sst_sust.cfg_dir = "incomp_rans/naca0012" - inc_turb_naca0012_sst_sust.cfg_file = "naca0012_SST_SUST.cfg" - inc_turb_naca0012_sst_sust.test_iter = 20 - inc_turb_naca0012_sst_sust.test_vals = [-7.270578, 0.018403, -0.000001, 0.307688] - test_list.append(inc_turb_naca0012_sst_sust) - - #################### - ### DG-FEM Euler ### - #################### - - # NACA0012 - fem_euler_naca0012 = TestCase('fem_euler_naca0012') - fem_euler_naca0012.cfg_dir = "hom_euler/NACA0012_5thOrder" - fem_euler_naca0012.cfg_file = "fem_NACA0012_reg.cfg" - fem_euler_naca0012.test_iter = 10 - fem_euler_naca0012.test_vals = [-6.519946, -5.976944, 0.255551, 0.000028] - test_list.append(fem_euler_naca0012) - - ############################ - ### DG-FEM Navier-Stokes ### - ############################ - - # Flat plate - fem_ns_flatplate = TestCase('fem_ns_flatplate') - fem_ns_flatplate.cfg_dir = "hom_navierstokes/FlatPlate/nPoly4" - fem_ns_flatplate.cfg_file = "lam_flatplate_reg.cfg" - fem_ns_flatplate.test_iter = 25 - fem_ns_flatplate.test_vals = [1.383727, 3.175247, 0.058387, 0.257951] - test_list.append(fem_ns_flatplate) - - # Steady cylinder - fem_ns_cylinder = TestCase('fem_ns_cylinder') - fem_ns_cylinder.cfg_dir = "hom_navierstokes/CylinderViscous/nPoly3" - fem_ns_cylinder.cfg_file = "fem_Cylinder_reg.cfg" - fem_ns_cylinder.test_iter = 10 - fem_ns_cylinder.test_vals = [0.454960, 0.979123, -0.000028, 79.984799] - test_list.append(fem_ns_cylinder) - - # Steady sphere - fem_ns_sphere = TestCase('fem_ns_sphere') - fem_ns_sphere.cfg_dir = "hom_navierstokes/SphereViscous/nPoly3_QuadDominant" - fem_ns_sphere.cfg_file = "fem_Sphere_reg.cfg" - fem_ns_sphere.test_iter = 10 - fem_ns_sphere.test_vals = [-0.288121, 0.240324, 0.000258, 21.797363] - test_list.append(fem_ns_sphere) - - # Unsteady sphere ADER - fem_ns_sphere_ader = TestCase('fem_ns_sphere_ader') - fem_ns_sphere_ader.cfg_dir = "hom_navierstokes/SphereViscous/nPoly3_QuadDominant" - fem_ns_sphere_ader.cfg_file = "fem_Sphere_reg_ADER.cfg" - fem_ns_sphere_ader.test_iter = 10 - fem_ns_sphere_ader.test_vals = [-35.000000, -35.000000, 0.000047, 31.110911] - test_list.append(fem_ns_sphere_ader) - - # Unsteady cylinder - fem_ns_unsteady_cylinder = TestCase('fem_ns_unsteady_cylinder') - fem_ns_unsteady_cylinder.cfg_dir = "hom_navierstokes/UnsteadyCylinder/nPoly4" - fem_ns_unsteady_cylinder.cfg_file = "fem_unst_cylinder.cfg" - fem_ns_unsteady_cylinder.test_iter = 11 - fem_ns_unsteady_cylinder.test_vals = [-3.558582, -3.014464, -0.038927, 1.383983] - fem_ns_unsteady_cylinder.unsteady = True - test_list.append(fem_ns_unsteady_cylinder) - - # Unsteady cylinder ADER - fem_ns_unsteady_cylinder_ader = TestCase('fem_ns_unsteady_cylinder_ader') - fem_ns_unsteady_cylinder_ader.cfg_dir = "hom_navierstokes/UnsteadyCylinder/nPoly4" - fem_ns_unsteady_cylinder_ader.cfg_file = "fem_unst_cylinder_ADER.cfg" - fem_ns_unsteady_cylinder_ader.test_iter = 11 - fem_ns_unsteady_cylinder_ader.test_vals = [-35.000000, -35.000000, -0.041003, 1.391339] - fem_ns_unsteady_cylinder_ader.unsteady = True - test_list.append(fem_ns_unsteady_cylinder_ader) - - ########################### - ### Turbulence modeling ### - ########################### - - # SA Baseline (Identical to RANS SA RAE2822) - turbmod_sa_bsl_rae2822 = TestCase('turbmod_sa_bsl_rae2822') - turbmod_sa_bsl_rae2822.cfg_dir = "turbulence_models/sa/rae2822" - turbmod_sa_bsl_rae2822.cfg_file = "turb_SA_BSL_RAE2822.cfg" - turbmod_sa_bsl_rae2822.test_iter = 20 - turbmod_sa_bsl_rae2822.test_vals = [-2.004689, 0.742306, 0.497308, -5.265782, 0.809463, 0.062016] - test_list.append(turbmod_sa_bsl_rae2822) - - # SA Negative - turbmod_sa_neg_rae2822 = TestCase('turbmod_sa_neg_rae2822') - turbmod_sa_neg_rae2822.cfg_dir = "turbulence_models/sa/rae2822" - turbmod_sa_neg_rae2822.cfg_file = "turb_SA_NEG_RAE2822.cfg" - turbmod_sa_neg_rae2822.test_iter = 10 - turbmod_sa_neg_rae2822.test_vals = [-1.466238, 3.169232, 2.756518, 4.722767, 1.120253, 0.378675, -83444.000000] - turbmod_sa_neg_rae2822.test_vals_aarch64 = [-1.359612, 1.493629, 1.218367, -1.441703, 1.248499, 0.457987, -86467.000000] - test_list.append(turbmod_sa_neg_rae2822) - - # SA Compressibility Correction - turbmod_sa_comp_rae2822 = TestCase('turbmod_sa_comp_rae2822') - turbmod_sa_comp_rae2822.cfg_dir = "turbulence_models/sa/rae2822" - turbmod_sa_comp_rae2822.cfg_file = "turb_SA_COMP_RAE2822.cfg" - turbmod_sa_comp_rae2822.test_iter = 20 - turbmod_sa_comp_rae2822.test_vals = [-2.004687, 0.742304, 0.497309, -5.266067, 0.809467, 0.062029] - test_list.append(turbmod_sa_comp_rae2822) - - # SA Edwards - turbmod_sa_edw_rae2822 = TestCase('turbmod_sa_edw_rae2822') - turbmod_sa_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" - turbmod_sa_edw_rae2822.cfg_file = "turb_SA_EDW_RAE2822.cfg" - turbmod_sa_edw_rae2822.test_iter = 20 - turbmod_sa_edw_rae2822.test_vals = [-2.004687, 0.742306, 0.497310, -5.290769, 0.809485, 0.062036] - test_list.append(turbmod_sa_edw_rae2822) - - # SA Compressibility and Edwards - turbmod_sa_comp_edw_rae2822 = TestCase('turbmod_sa_comp_edw_rae2822') - turbmod_sa_comp_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" - turbmod_sa_comp_edw_rae2822.cfg_file = "turb_SA_COMP_EDW_RAE2822.cfg" - turbmod_sa_comp_edw_rae2822.test_iter = 20 - turbmod_sa_comp_edw_rae2822.test_vals = [-2.004685, 0.742307, 0.497311, -5.290750, 0.809487, 0.062045] - test_list.append(turbmod_sa_comp_edw_rae2822) - - # SA QCR - turbmod_sa_qcr_rae2822 = TestCase('turbmod_sa_qcr_rae2822') - turbmod_sa_qcr_rae2822.cfg_dir = "turbulence_models/sa/rae2822" - turbmod_sa_qcr_rae2822.cfg_file = "turb_SA_QCR_RAE2822.cfg" - turbmod_sa_qcr_rae2822.test_iter = 20 - turbmod_sa_qcr_rae2822.test_vals = [-2.004793, 0.742353, 0.497315, -5.265962, 0.807841, 0.062027] - test_list.append(turbmod_sa_qcr_rae2822) - - ############################ - ### Transition ### - ############################ - - # Schubauer-Klebanoff Natural Transition Case - schubauer_klebanoff_transition = TestCase('Schubauer_Klebanoff') - schubauer_klebanoff_transition.cfg_dir = "transition/Schubauer_Klebanoff" - schubauer_klebanoff_transition.cfg_file = "transitional_BC_model_ConfigFile.cfg" - schubauer_klebanoff_transition.test_iter = 10 - schubauer_klebanoff_transition.test_vals = [-7.994740, -13.240225, 0.000046, 0.007987] - test_list.append(schubauer_klebanoff_transition) - - ##################################### - ### Cont. adj. compressible Euler ### - ##################################### - - # Inviscid NACA0012 - contadj_naca0012 = TestCase('contadj_naca0012') - contadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" - contadj_naca0012.cfg_file = "inv_NACA0012.cfg" - contadj_naca0012.test_iter = 5 - contadj_naca0012.test_vals = [-9.300816, -14.587365, 0.300920, 0.019552] - test_list.append(contadj_naca0012) - - # Inviscid ONERA M6 - contadj_oneram6 = TestCase('contadj_oneram6') - contadj_oneram6.cfg_dir = "cont_adj_euler/oneram6" - contadj_oneram6.cfg_file = "inv_ONERAM6.cfg" - contadj_oneram6.test_iter = 10 - contadj_oneram6.test_vals = [-12.130993, -12.702085, 0.685900, 0.007594] - test_list.append(contadj_oneram6) - - # Inviscid WEDGE: tests averaged outflow total pressure adjoint - contadj_wedge = TestCase('contadj_wedge') - contadj_wedge.cfg_dir = "cont_adj_euler/wedge" - contadj_wedge.cfg_file = "inv_wedge_ROE.cfg" - contadj_wedge.test_iter = 10 - contadj_wedge.test_vals = [2.872691, -2.755572, 853010.000000, -0.000000] - test_list.append(contadj_wedge) - - # Inviscid fixed CL NACA0012 - contadj_fixed_CL_naca0012 = TestCase('contadj_fixedcl_naca0012') - contadj_fixed_CL_naca0012.cfg_dir = "fixed_cl/naca0012" - contadj_fixed_CL_naca0012.cfg_file = "inv_NACA0012_ContAdj.cfg" - contadj_fixed_CL_naca0012.test_iter = 100 - contadj_fixed_CL_naca0012.test_vals = [0.275856, -5.200511, 0.342710, 0.000105] - test_list.append(contadj_fixed_CL_naca0012) - - ################################### - ### Cont. adj. compressible N-S ### - ################################### - - # Adjoint laminar cylinder - contadj_ns_cylinder = TestCase('contadj_ns_cylinder') - contadj_ns_cylinder.cfg_dir = "cont_adj_navierstokes/cylinder" - contadj_ns_cylinder.cfg_file = "lam_cylinder.cfg" - contadj_ns_cylinder.test_iter = 20 - contadj_ns_cylinder.test_vals = [-3.651430, -9.113079, 2.056700, -0.000000] - test_list.append(contadj_ns_cylinder) - - # Adjoint laminar naca0012 subsonic - contadj_ns_naca0012_sub = TestCase('contadj_ns_naca0012_sub') - contadj_ns_naca0012_sub.cfg_dir = "cont_adj_navierstokes/naca0012_sub" - contadj_ns_naca0012_sub.cfg_file = "lam_NACA0012.cfg" - contadj_ns_naca0012_sub.test_iter = 20 - contadj_ns_naca0012_sub.test_vals = [-2.743268, -8.215193, 0.518810, 0.001210] - test_list.append(contadj_ns_naca0012_sub) - - # Adjoint laminar naca0012 transonic - contadj_ns_naca0012_trans = TestCase('contadj_ns_naca0012_trans') - contadj_ns_naca0012_trans.cfg_dir = "cont_adj_navierstokes/naca0012_trans" - contadj_ns_naca0012_trans.cfg_file = "lam_NACA0012.cfg" - contadj_ns_naca0012_trans.test_iter = 20 - contadj_ns_naca0012_trans.test_vals = [-1.039664, -6.575019, 1.772300, 0.012495] - test_list.append(contadj_ns_naca0012_trans) - - ####################################################### - ### Cont. adj. compressible RANS (frozen viscosity) ### - ####################################################### - - # Adjoint turbulent NACA0012 - contadj_rans_naca0012 = TestCase('contadj_rans_naca0012') - contadj_rans_naca0012.cfg_dir = "cont_adj_rans/naca0012" - contadj_rans_naca0012.cfg_file = "turb_nasa.cfg" - contadj_rans_naca0012.test_iter = 20 - contadj_rans_naca0012.test_vals = [-0.794162, -5.761722, 19.214000, -0.000000] - test_list.append(contadj_rans_naca0012) - - # Adjoint turbulent NACA0012 with binary restarts - contadj_rans_naca0012_bin = TestCase('contadj_rans_naca0012_bin') - contadj_rans_naca0012_bin.cfg_dir = "cont_adj_rans/naca0012" - contadj_rans_naca0012_bin.cfg_file = "turb_nasa_binary.cfg" - contadj_rans_naca0012_bin.test_iter = 18 - contadj_rans_naca0012_bin.test_vals = [-0.794169, -5.761671, 19.214000, -0.000000] - test_list.append(contadj_rans_naca0012_bin) - - # Adjoint turbulent RAE2822 - contadj_rans_rae2822 = TestCase('contadj_rans_rae822') - contadj_rans_rae2822.cfg_dir = "cont_adj_rans/rae2822" - contadj_rans_rae2822.cfg_file = "turb_SA_RAE2822.cfg" - contadj_rans_rae2822.test_iter = 20 - contadj_rans_rae2822.test_vals = [-5.372407, -10.874841, -0.212470, 0.005448] - test_list.append(contadj_rans_rae2822) - - ############################# - ### Compressibele RANS UQ ### - ############################# - - # NACA0012 1c - turb_naca0012_1c = TestCase('turb_naca0012_1c') - turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" - turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" - turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.976284, 1.141136, 0.463115, -0.083307] - turb_naca0012_1c.test_vals_aarch64 = [-4.983453, 1.138491, 0.459947, -0.084114] - test_list.append(turb_naca0012_1c) - - # NACA0012 2c - turb_naca0012_2c = TestCase('turb_naca0012_2c') - turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" - turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" - turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.483317, 0.968654, 0.307611, -0.118062] - turb_naca0012_2c.test_vals_aarch64 = [-5.483338, 0.968646, 0.308055, -0.117915] - test_list.append(turb_naca0012_2c) - - # NACA0012 3c - turb_naca0012_3c = TestCase('turb_naca0012_3c') - turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" - turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" - turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.584309, 0.931259, 0.281831, -0.117821] - test_list.append(turb_naca0012_3c) - - # NACA0012 p1c1 - turb_naca0012_p1c1 = TestCase('turb_naca0012_p1c1') - turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" - turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" - turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.128887, 1.076846, 0.589839, -0.051939] - turb_naca0012_p1c1.test_vals_aarch64 = [-5.128883, 1.076873, 0.590376, -0.051754] - test_list.append(turb_naca0012_p1c1) - - # NACA0012 p1c2 - turb_naca0012_p1c2 = TestCase('turb_naca0012_p1c2') - turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" - turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" - turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.554633, 0.943626, 0.402263, -0.100275] - turb_naca0012_p1c2.test_vals_aarch64 = [-5.554636, 0.943621, 0.401650, -0.100495] - test_list.append(turb_naca0012_p1c2) - - ###################################### - ### Harmonic Balance ### - ###################################### - - # Description of the regression test - harmonic_balance = TestCase('harmonic_balance') - harmonic_balance.cfg_dir = "harmonic_balance" - harmonic_balance.cfg_file = "HB.cfg" - harmonic_balance.test_iter = 25 - harmonic_balance.test_vals = [-1.589739, 0.790169, 0.937053, 3.922579] - test_list.append(harmonic_balance) - - # Turbulent pitching NACA 64a010 airfoil - hb_rans_preconditioning = TestCase('hb_rans_preconditioning') - hb_rans_preconditioning.cfg_dir = "harmonic_balance/hb_rans_preconditioning" - hb_rans_preconditioning.cfg_file = "davis.cfg" - hb_rans_preconditioning.test_iter = 25 - hb_rans_preconditioning.tol = 0.00001 - hb_rans_preconditioning.test_vals = [-1.902098, 0.484070, 0.601481, 3.609002, -5.949360] - test_list.append(hb_rans_preconditioning) - - ###################################### - ### Moving Wall ### - ###################################### - - # Rotating NACA 0012 - rot_naca0012 = TestCase('rot_naca0012') - rot_naca0012.cfg_dir = "rotating/naca0012" - rot_naca0012.cfg_file = "rot_NACA0012.cfg" - rot_naca0012.test_iter = 25 - rot_naca0012.test_vals = [-2.698005, 2.845328, -0.079439, 0.002128] - test_list.append(rot_naca0012) - - # Lid-driven cavity - cavity = TestCase('cavity') - cavity.cfg_dir = "moving_wall/cavity" - cavity.cfg_file = "lam_cavity.cfg" - cavity.test_iter = 25 - cavity.test_vals = [-5.611007, -0.146826, 1.113206, 1.491678] - test_list.append(cavity) - - # Spinning cylinder - spinning_cylinder = TestCase('spinning_cylinder') - spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" - spinning_cylinder.cfg_file = "spinning_cylinder.cfg" - spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-7.802803, -2.362844, 1.687705, 1.519676] - test_list.append(spinning_cylinder) - - ###################################### - ### Unsteady ### - ###################################### - - # Square cylinder - square_cylinder = TestCase('square_cylinder') - square_cylinder.cfg_dir = "unsteady/square_cylinder" - square_cylinder.cfg_file = "turb_square.cfg" - square_cylinder.test_iter = 3 - square_cylinder.test_vals = [-1.173603, 0.058045, 1.399795, 2.220404, 1.399749, 2.218605, -0.453330] - square_cylinder.unsteady = True - test_list.append(square_cylinder) - - # Gust - sine_gust = TestCase('sine_gust') - sine_gust.cfg_dir = "gust" - sine_gust.cfg_file = "inv_gust_NACA0012.cfg" - sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977520, 3.481804, -0.012377, -0.007389] - sine_gust.unsteady = True - test_list.append(sine_gust) - - # Aeroelastic - aeroelastic = TestCase('aeroelastic') - aeroelastic.cfg_dir = "aeroelastic" - aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" - aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.076550, 0.033042, -0.001650, -0.000127] - aeroelastic.unsteady = True - test_list.append(aeroelastic) - - # Delayed Detached Eddy Simulation - ddes_flatplate = TestCase('ddes_flatplate') - ddes_flatplate.cfg_dir = "ddes/flatplate" - ddes_flatplate.cfg_file = "ddes_flatplate.cfg" - ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714757, -5.882779, -0.215005, 0.023783, -618.130000] - ddes_flatplate.unsteady = True - test_list.append(ddes_flatplate) - - # unsteady pitching NACA0015, SA - unst_inc_turb_naca0015_sa = TestCase('unst_inc_turb_naca0015_sa') - unst_inc_turb_naca0015_sa.cfg_dir = "unsteady/pitching_naca0015_rans_inc" - unst_inc_turb_naca0015_sa.cfg_file = "config_incomp_turb_sa.cfg" - unst_inc_turb_naca0015_sa.test_iter = 1 - unst_inc_turb_naca0015_sa.test_vals = [-3.004012, -6.876220, 1.487882, 0.421861] - unst_inc_turb_naca0015_sa.unsteady = True - test_list.append(unst_inc_turb_naca0015_sa) - - # Flat plate - flatplate_unsteady = TestCase('flatplate_unsteady') - flatplate_unsteady.cfg_dir = "navierstokes/flatplate" - flatplate_unsteady.cfg_file = "lam_flatplate_unst.cfg" - flatplate_unsteady.test_iter = 3 - flatplate_unsteady.test_vals = [7.9509e-06, -8.868859, -8.231652, -6.283262, -5.466675, -3.391163, 0.002078, -0.343642] - flatplate_unsteady.unsteady = True - test_list.append(flatplate_unsteady) - - ###################################### - ### NICFD ### - ###################################### - - # Rarefaction shock wave edge_VW - edge_VW = TestCase('edge_VW') - edge_VW.cfg_dir = "nicf/edge" - edge_VW.cfg_file = "edge_VW.cfg" - edge_VW.test_iter = 100 - edge_VW.test_vals = [-5.048044, 1.115667, -0.000009, 0.000000] - test_list.append(edge_VW) - - # Rarefaction shock wave edge_PPR - edge_PPR = TestCase('edge_PPR') - edge_PPR.cfg_dir = "nicf/edge" - edge_PPR.cfg_file = "edge_PPR.cfg" - edge_PPR.test_iter = 100 - edge_PPR.test_vals = [-5.400790, 0.739723, -0.000035, 0.000000] - test_list.append(edge_PPR) - - # Rarefaction Q1D nozzle, include CoolProp fluid model - coolprop_fluidModel = TestCase('coolprop_fluidModel') - coolprop_fluidModel.cfg_dir = "nicf/coolprop" - coolprop_fluidModel.cfg_file = "fluidModel.cfg" - coolprop_fluidModel.test_iter = 5 - coolprop_fluidModel.test_vals = [-4.525459, -1.578697, 3.443116, 0.000000, 0.000000] - coolprop_fluidModel.enabled_on_cpu_arch = ["x86_64"] - test_list.append(coolprop_fluidModel) - - # Rarefaction Q1D nozzle, include CoolProp transport model - coolprop_transportModel = TestCase('coolprop_transportModel') - coolprop_transportModel.cfg_dir = "nicf/coolprop" - coolprop_transportModel.cfg_file = "transportModel.cfg" - coolprop_transportModel.test_iter = 5 - coolprop_transportModel.test_vals = [-4.527922, -1.308648, 4.630717, 0.000000, 0.000000] - coolprop_transportModel.enabled_on_cpu_arch = ["x86_64"] - test_list.append(coolprop_transportModel) - - # Rarefaction Q1D nozzle, include data-driven fluid model - datadriven_fluidModel = TestCase('datadriven_fluidModel') - datadriven_fluidModel.cfg_dir = "nicf/datadriven" - datadriven_fluidModel.cfg_file = "datadriven_nozzle.cfg" - datadriven_fluidModel.test_iter = 50 - datadriven_fluidModel.test_vals = [-2.623890, 0.145236, 4.688439, 0.000000, 0.000000] - test_list.append(datadriven_fluidModel) - - ###################################### - ### Turbomachinery ### - ###################################### - - # Jones APU Turbocharger restart - Jones_tc_restart = TestCase('jones_turbocharger_restart') - Jones_tc_restart.cfg_dir = "turbomachinery/APU_turbocharger" - Jones_tc_restart.cfg_file = "Jones_restart.cfg" - Jones_tc_restart.test_iter = 5 - Jones_tc_restart.test_vals = [-6.604542, -2.792281, -14.328530, -8.769313, -11.371439, -5.845632, 73273, 73273] - test_list.append(Jones_tc_restart) - - # 2D axial stage - axial_stage2D = TestCase('axial_stage2D') - axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" - axial_stage2D.cfg_file = "Axial_stage2D.cfg" - axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [0.974805, 1.534447, -2.897694, 2.599376, -2.418379, 3.087219, 106380.000000, 106380.000000] - test_list.append(axial_stage2D) - - # 2D transonic stator restart - transonic_stator_restart = TestCase('transonic_stator_restart') - transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" - transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" - transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-5.354418, -3.509964, -3.163206, 0.744733, -3.846691, 1.805587, -471690] - test_list.append(transonic_stator_restart) - - ###################################### - ### Sliding Mesh ### - ###################################### - - # Uniform flow - uniform_flow = TestCase('uniform_flow') - uniform_flow.cfg_dir = "sliding_interface/uniform_flow" - uniform_flow.cfg_file = "uniform_NN.cfg" - uniform_flow.test_iter = 5 - uniform_flow.test_vals = [5.000000, 0.000000, -0.188747, -10.631538] - uniform_flow.unsteady = True - uniform_flow.multizone = True - test_list.append(uniform_flow) - - # Channel_2D - channel_2D = TestCase('channel_2D') - channel_2D.cfg_dir = "sliding_interface/channel_2D" - channel_2D.cfg_file = "channel_2D_WA.cfg" - channel_2D.test_iter = 2 - channel_2D.test_vals = [2.000000, 0.000000, 0.398011, 0.352778, 0.405461] - channel_2D.test_vals_aarch64 = [2.000000, 0.000000, 0.398036, 0.352783, 0.405462] - channel_2D.timeout = 100 - channel_2D.unsteady = True - channel_2D.multizone = True - test_list.append(channel_2D) - - # Channel_3D - channel_3D = TestCase('channel_3D') - channel_3D.cfg_dir = "sliding_interface/channel_3D" - channel_3D.cfg_file = "channel_3D_WA.cfg" - channel_3D.test_iter = 2 - channel_3D.test_vals = [2.000000, 0.000000, 0.620176, 0.505161, 0.415248] - channel_3D.test_vals_aarch64 = [2.000000, 0.000000, 0.620182, 0.505302, 0.415257] - channel_3D.unsteady = True - channel_3D.multizone = True - test_list.append(channel_3D) - - # Pipe - pipe = TestCase('pipe') - pipe.cfg_dir = "sliding_interface/pipe" - pipe.cfg_file = "pipe_NN.cfg" - pipe.test_iter = 2 - pipe.test_vals = [0.150024, 0.491953, 0.677755, 0.963980, 1.006936] - pipe.unsteady = True - pipe.multizone = True - test_list.append(pipe) - - # Rotating cylinders - rotating_cylinders = TestCase('rotating_cylinders') - rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders" - rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg" - rotating_cylinders.test_iter = 3 - rotating_cylinders.test_vals = [3.000000, 0.000000, 0.777572, 1.134804, 1.224137] - rotating_cylinders.unsteady = True - rotating_cylinders.multizone = True - test_list.append(rotating_cylinders) - - # Supersonic vortex shedding - supersonic_vortex_shedding = TestCase('supersonic_vortex_shedding') - supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding" - supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg" - supersonic_vortex_shedding.test_iter = 5 - supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.214350, 1.663914] - supersonic_vortex_shedding.unsteady = True - supersonic_vortex_shedding.multizone = True - test_list.append(supersonic_vortex_shedding) - - # Bars_SST_2D - bars_SST_2D = TestCase('bars_SST_2D') - bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" - bars_SST_2D.cfg_file = "bars.cfg" - bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.773513, -1.700012] - bars_SST_2D.multizone = True - test_list.append(bars_SST_2D) - - # Sliding mesh with incompressible flows (steady) - slinc_steady = TestCase('slinc_steady') - slinc_steady.cfg_dir = "sliding_interface/incompressible_steady" - slinc_steady.cfg_file = "config.cfg" - slinc_steady.test_iter = 19 - slinc_steady.test_vals = [19.000000, -1.778863, -2.040209] - slinc_steady.timeout = 100 - slinc_steady.tol = 0.00002 - slinc_steady.multizone = True - test_list.append(slinc_steady) - - # Sliding mesh with incompressible flows (unsteady) - # slinc_unsteady = TestCase('slinc_unsteady') - # slinc_unsteady.cfg_dir = "sliding_interface/incompressible_unsteady" - # slinc_unsteady.cfg_file = "config.cfg" - # slinc_unsteady.test_iter = 19 - # slinc_unsteady.test_vals = [-3.513701,1.931626,0.000000,0.000000] #last 4 columns - # slinc_unsteady.command = TestCase.Command(exec = "SU2_CFD") - # slinc_unsteady.timeout = 100 - # slinc_unsteady.unsteady = True - # test_list.append(slinc_unsteady) - - ########################## - ### FEA - FSI ### - ########################## - - # Static beam, 3d - statbeam3d = TestCase('statbeam3d') - statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" - statbeam3d.cfg_file = "configBeam_3d.cfg" - statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-8.396797, -8.162206, -8.156102, 64095.000000] - statbeam3d.test_vals_aarch64 = [-8.396793, -8.162255, -8.156118, 64095.0] #last 4 columns - statbeam3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") - test_list.append(statbeam3d) - - # Dynamic beam, 2d - dynbeam2d = TestCase('dynbeam2d') - dynbeam2d.cfg_dir = "fea_fsi/DynBeam_2d" - dynbeam2d.cfg_file = "configBeam_2d.cfg" - dynbeam2d.test_iter = 6 - dynbeam2d.test_vals = [-3.240015, 2.895057, -0.353146, 66127.000000] - dynbeam2d.unsteady = True - test_list.append(dynbeam2d) - - # FSI, 2d - fsi2d = TestCase('fsi2d') - fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" - fsi2d.cfg_file = "configFSI.cfg" - fsi2d.test_iter = 4 - fsi2d.test_vals = [4.000000, 0.000000, -3.743210, -4.133483] - fsi2d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") - fsi2d.multizone= True - fsi2d.unsteady = True - test_list.append(fsi2d) - - # FSI, Static, 2D, new mesh solver - stat_fsi = TestCase('stat_fsi') - stat_fsi.cfg_dir = "fea_fsi/stat_fsi" - stat_fsi.cfg_file = "config.cfg" - stat_fsi.test_iter = 7 - stat_fsi.test_vals = [-3.296605, -4.934646, 0.000000, 7.000000] - stat_fsi.multizone = True - test_list.append(stat_fsi) - - # FSI, Dynamic, 2D, new mesh solver - dyn_fsi = TestCase('dyn_fsi') - dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" - dyn_fsi.cfg_file = "config.cfg" - dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.355829, -4.060587, 5.3837e-08, 98] - dyn_fsi.multizone = True - dyn_fsi.unsteady = True - test_list.append(dyn_fsi) - - # FSI, Static, 2D, new mesh solver, restart - stat_fsi_restart = TestCase('stat_fsi_restart') - stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi" - stat_fsi_restart.cfg_file = "config_restart.cfg" - stat_fsi_restart.test_iter = 1 - stat_fsi_restart.test_vals = [-3.435926, -4.264912, 0.000000, 28.000000] - stat_fsi_restart.multizone = True - test_list.append(stat_fsi_restart) - - # ############################### - # ### Radiative Heat Transfer ### - # ############################### - - # Radiative heat transfer - p1rad = TestCase('p1rad') - p1rad.cfg_dir = "radiation/p1model" - p1rad.cfg_file = "configp1.cfg" - p1rad.test_iter = 100 - p1rad.test_vals = [-7.743666, -7.921411, -2.111848, 0.098302, -45.023000] - test_list.append(p1rad) - - - # ############################# - # ### Solid Heat Conduction ### - # ############################# - - # 2D pins, periodically connected - solid_periodic_pins = TestCase('solid_periodic_pins') - solid_periodic_pins.cfg_dir = "solid_heat_conduction/periodic_pins" - solid_periodic_pins.cfg_file = "configSolid.cfg" - solid_periodic_pins.test_iter = 750 - solid_periodic_pins.test_vals = [-15.878977, -14.569206, 300.900000, 425.320000, 0.000000, 5.000000, -1.672737] - solid_periodic_pins.test_vals_aarch64 = [-15.879016, -14.569206, 300.900000, 425.320000, 0.000000, 5.000000, -1.672666] - test_list.append(solid_periodic_pins) - - # ############################### - # ### Conjugate heat transfer ### - # ############################### - - # CHT incompressible - cht_incompressible = TestCase('cht_incompressible') - cht_incompressible.cfg_dir = "coupled_cht/incomp_2d" - cht_incompressible.cfg_file = "cht_2d_3cylinders.cfg" - cht_incompressible.test_iter = 10 - cht_incompressible.test_vals = [-2.128827, -0.588812, -0.588812, -0.588812] - cht_incompressible.multizone = True - test_list.append(cht_incompressible) - - # CHT compressible - cht_compressible = TestCase('cht_compressible') - cht_compressible.cfg_dir = "coupled_cht/comp_2d" - cht_compressible.cfg_file = "cht_2d_3cylinders.cfg" - cht_compressible.test_iter = 10 - cht_compressible.test_vals = [-4.256053, -0.532725, -0.532725, -0.532726] - cht_compressible.multizone = True - test_list.append(cht_compressible) - - # 2D CHT case streamwise periodicity. Also test Multizone PerSurface screen output. - sp_pinArray_cht_2d_dp_hf = TestCase('sp_pinArray_cht_2d_dp_hf') - sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" - sp_pinArray_cht_2d_dp_hf.cfg_file = "configMaster.cfg" - sp_pinArray_cht_2d_dp_hf.test_iter = 100 - sp_pinArray_cht_2d_dp_hf.test_vals = [0.104306, -1.005859, -1.028870, -0.753282, 208.023676, 353.490000, -0.000000, -0.753280, 0.753280] - sp_pinArray_cht_2d_dp_hf.multizone = True - test_list.append(sp_pinArray_cht_2d_dp_hf) - - # simple small 3D pin case massflow periodic with heatflux BC - sp_pinArray_3d_cht_mf_hf_tp = TestCase('sp_pinArray_3d_cht_mf_hf_tp') - sp_pinArray_3d_cht_mf_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_3d" - sp_pinArray_3d_cht_mf_hf_tp.cfg_file = "configMaster.cfg" - sp_pinArray_3d_cht_mf_hf_tp.test_iter = 30 - sp_pinArray_3d_cht_mf_hf_tp.test_vals = [-5.128577, -5.425081, -6.788413, -0.009675, 104.655438, 419.210000, 0.0] - sp_pinArray_3d_cht_mf_hf_tp.test_vals_aarch64 = [-5.128577, -5.425081, -6.788413, -0.009675, 104.655438, 419.210000, 0.0] - sp_pinArray_3d_cht_mf_hf_tp.multizone = True - test_list.append(sp_pinArray_3d_cht_mf_hf_tp) - - ########################## - ### Python wrapper ### - ########################## - - # NACA0012 - pywrapper_naca0012 = TestCase('pywrapper_naca0012') - pywrapper_naca0012.cfg_dir = "euler/naca0012" - pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" - pywrapper_naca0012.test_iter = 100 - pywrapper_naca0012.test_vals = [-6.747210, -6.149915, 0.333445, 0.021241] - pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") - test_list.append(pywrapper_naca0012) - - # NACA0012 (SST, FUN3D results for finest grid: CL=1.0840, CD=0.01253) - pywrapper_turb_naca0012_sst = TestCase('pywrapper_turb_naca0012_sst') - pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" - pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" - pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.219694, -14.440925, -7.107551, 1.050109, 0.019148, -1.601287, -38.510000] - pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.219735, -14.440925, -7.107550, 1.050109, 0.019148, -1.601262, -38.510000] - pywrapper_turb_naca0012_sst.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") - pywrapper_turb_naca0012_sst.timeout = 3200 - test_list.append(pywrapper_turb_naca0012_sst) - - # Square cylinder - pywrapper_square_cylinder = TestCase('pywrapper_square_cylinder') - pywrapper_square_cylinder.cfg_dir = "unsteady/square_cylinder" - pywrapper_square_cylinder.cfg_file = "turb_square.cfg" - pywrapper_square_cylinder.test_iter = 10 - pywrapper_square_cylinder.test_vals = [-1.175619, -0.352238, 1.408450, 2.360729, 1.404693, 2.302284, -0.347980] - pywrapper_square_cylinder.test_vals_aarch64 = [-1.175617, -0.352079, 1.408450, 2.360729, 1.404693, 2.302284, -0.347980] - pywrapper_square_cylinder.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") - pywrapper_square_cylinder.unsteady = True - test_list.append(pywrapper_square_cylinder) - - # Aeroelastic - pywrapper_aeroelastic = TestCase('pywrapper_aeroelastic') - pywrapper_aeroelastic.cfg_dir = "aeroelastic" - pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" - pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.076550, 0.033042, -0.001650, -0.000127] - pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") - pywrapper_aeroelastic.unsteady = True - test_list.append(pywrapper_aeroelastic) - - # Custom FEA load - pywrapper_custom_fea_load = TestCase('pywrapper_custom_fea_load') - pywrapper_custom_fea_load.cfg_dir = "py_wrapper/custom_load_fea" - pywrapper_custom_fea_load.cfg_file = "config.cfg" - pywrapper_custom_fea_load.test_iter = 13 - pywrapper_custom_fea_load.test_vals = [-7.263559, -4.946814, -14.165142, 34.000000, -6.380144, 320.580000] - pywrapper_custom_fea_load.test_vals_aarch64 = [-7.263558, -4.946814, -14.165142, 35.000000, -6.802790, 320.580000] - pywrapper_custom_fea_load.command = TestCase.Command("mpirun -np 2", "python", "run.py") - test_list.append(pywrapper_custom_fea_load) - - # FSI, 2d - pywrapper_fsi2d = TestCase('pywrapper_fsi2d') - pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" - pywrapper_fsi2d.cfg_file = "configFSI.cfg" - pywrapper_fsi2d.test_iter = 4 - pywrapper_fsi2d.test_vals = [4.000000, 0.000000, -3.743210, -4.133483] - pywrapper_fsi2d.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--nZone 2 --fsi True --parallel -f") - pywrapper_fsi2d.unsteady = True - pywrapper_fsi2d.multizone = True - test_list.append(pywrapper_fsi2d) - - # Unsteady FSI with custom load - pywrapper_unsteadyFSI = TestCase('pywrapper_unsteadyFSI') - pywrapper_unsteadyFSI.cfg_dir = "py_wrapper/dyn_fsi" - pywrapper_unsteadyFSI.cfg_file = "config.cfg" - pywrapper_unsteadyFSI.test_iter = 4 - pywrapper_unsteadyFSI.test_vals = [0, 31, 5, 58, -1.756780, -2.828276, -7.652558, -6.863929, 1.5618e-04] - pywrapper_unsteadyFSI.command = TestCase.Command("mpirun -np 2", "python", "run.py") - pywrapper_unsteadyFSI.unsteady = True - pywrapper_unsteadyFSI.multizone = True - test_list.append(pywrapper_unsteadyFSI) - - # Unsteady CHT - pywrapper_unsteadyCHT = TestCase('pywrapper_unsteadyCHT') - pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" - pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" - pywrapper_unsteadyCHT.test_iter = 5 - pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.240663, -0.001316, 0.177491] - pywrapper_unsteadyCHT.command = TestCase.Command("mpirun -np 2", "python", "launch_unsteady_CHT_FlatPlate.py --parallel -f") - pywrapper_unsteadyCHT.unsteady = True - test_list.append(pywrapper_unsteadyCHT) - - # Rigid motion - pywrapper_rigidMotion = TestCase('pywrapper_rigidMotion') - pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" - pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" - pywrapper_rigidMotion.test_iter = 5 - pywrapper_rigidMotion.test_vals = [-1.614165, 2.238591, 0.349970, 0.095593] - pywrapper_rigidMotion.command = TestCase.Command("mpirun -np 2", "python", "launch_flatPlate_rigidMotion.py --parallel -f") - pywrapper_rigidMotion.unsteady = True - test_list.append(pywrapper_rigidMotion) - - # Deforming Bump in Channel - pywrapper_deformingBump = TestCase('pywrapper_deformingBump') - pywrapper_deformingBump.cfg_dir = "py_wrapper/deforming_bump_in_channel" - pywrapper_deformingBump.cfg_file = "config.cfg" - pywrapper_deformingBump.test_iter = 1 - pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.554360, -1.084594, -0.024882, 2.907803, 8.785498, -0.363585] - pywrapper_deformingBump.command = TestCase.Command("mpirun -np 2", "python", "run.py") - pywrapper_deformingBump.unsteady = True - test_list.append(pywrapper_deformingBump) - - ############################################## - ### Method of Manufactured Solutions (MMS) ### - ############################################## - - # FVM, compressible, laminar N-S - mms_fvm_ns = TestCase('mms_fvm_ns') - mms_fvm_ns.cfg_dir = "mms/fvm_navierstokes" - mms_fvm_ns.cfg_file = "lam_mms_roe.cfg" - mms_fvm_ns.test_iter = 20 - mms_fvm_ns.test_vals = [-2.851428, 2.192348, 0.000000, 0.000000] - mms_fvm_ns.tol = 0.0001 - test_list.append(mms_fvm_ns) - - # FVM, incompressible, euler - mms_fvm_inc_euler = TestCase('mms_fvm_inc_euler') - mms_fvm_inc_euler.cfg_dir = "mms/fvm_incomp_euler" - mms_fvm_inc_euler.cfg_file = "inv_mms_jst.cfg" - mms_fvm_inc_euler.test_iter = 20 - mms_fvm_inc_euler.test_vals = [-9.128660, -9.441806, 0.000000, 0.000000] - mms_fvm_inc_euler.tol = 0.0001 - test_list.append(mms_fvm_inc_euler) - - # FVM, incompressible, laminar N-S - mms_fvm_inc_ns = TestCase('mms_fvm_inc_ns') - mms_fvm_inc_ns.cfg_dir = "mms/fvm_incomp_navierstokes" - mms_fvm_inc_ns.cfg_file = "lam_mms_fds.cfg" - mms_fvm_inc_ns.test_iter = 20 - mms_fvm_inc_ns.test_vals = [-7.414944, -7.631546, 0.000000, 0.000000] - mms_fvm_inc_ns.tol = 0.0001 - test_list.append(mms_fvm_inc_ns) - - # DG, compressible, euler - ringleb_dg_euler = TestCase('ringleb_dg_euler') - ringleb_dg_euler.cfg_dir = "mms/dg_ringleb" - ringleb_dg_euler.cfg_file = "ringleb_dg.cfg" - ringleb_dg_euler.test_iter = 100 - ringleb_dg_euler.test_vals = [-5.136652, -4.724941, 0.000000, 0.000000] - ringleb_dg_euler.tol = 0.0001 - test_list.append(ringleb_dg_euler) - - # DG, compressible, laminar N-S - mms_dg_ns = TestCase('mms_dg_ns') - mms_dg_ns.cfg_dir = "mms/dg_navierstokes" - mms_dg_ns.cfg_file = "lam_mms_dg.cfg" - mms_dg_ns.test_iter = 100 - mms_dg_ns.test_vals = [-1.845393, 3.520699, 0.000000, 0.000000] - mms_dg_ns.tol = 0.0001 - test_list.append(mms_dg_ns) - - # DG, compressible, laminar N-S 3D - mms_dg_ns_3d = TestCase('mms_dg_ns_3d') - mms_dg_ns_3d.cfg_dir = "mms/dg_navierstokes_3d" - mms_dg_ns_3d.cfg_file = "lam_mms_dg_3d.cfg" - mms_dg_ns_3d.test_iter = 100 - mms_dg_ns_3d.test_vals = [-0.146826, 5.356413, 0.000000, 0.000000] - mms_dg_ns_3d.tol = 0.0001 - test_list.append(mms_dg_ns_3d) - - ##################### - ## Species solver ### - ##################### - - # 2 species (1 eq) primitive venturi mixing using mixing model - species2_primitiveVenturi_mixingmodel = TestCase('species2_primitiveVenturi_mixingmodel') - species2_primitiveVenturi_mixingmodel.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi_mixingmodel.cfg_file = "species2_primitiveVenturi_mixingmodel.cfg" - species2_primitiveVenturi_mixingmodel.test_iter = 50 - species2_primitiveVenturi_mixingmodel.test_vals = [-5.359429, -4.504612, -4.480004, -5.629196, -0.059934, -5.596051, 5.000000, -1.870943, 5.000000, -4.915279, 5.000000, -1.183531, 0.000429, 0.000393, 0.000036, 0.000000] - test_list.append(species2_primitiveVenturi_mixingmodel) - - # 2 species (1 eq) primitive venturi mixing using mixing model and bounded scalar transport - species2_primitiveVenturi_mixingmodel_boundedscalar = TestCase('species2_primitiveVenturi_mixingmodel_boundedscalar') - species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_file = "species2_primitiveVenturi_mixingmodel_boundedscalar.cfg" - species2_primitiveVenturi_mixingmodel_boundedscalar.test_iter = 50 - species2_primitiveVenturi_mixingmodel_boundedscalar.test_vals = [-5.336209, -4.445047, -4.432074, -5.785385, -0.127631, -5.672217, 5.000000, -1.944369, 5.000000, -4.878272, 5.000000, -1.806657, 0.000272, 0.000272, 0.000000, 0.000000] - test_list.append(species2_primitiveVenturi_mixingmodel_boundedscalar) - - # 2 species (1 eq) primitive venturi mixing using mixing model including viscosity, thermal conductivity and inlet markers for SA turbulence model - species2_primitiveVenturi_mixingmodel_viscosity = TestCase('species2_primitiveVenturi_mixingmodel_viscosity') - species2_primitiveVenturi_mixingmodel_viscosity.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi_mixingmodel_viscosity.cfg_file = "species2_primitiveVenturi_mixingmodel_viscosity.cfg" - species2_primitiveVenturi_mixingmodel_viscosity.test_iter = 50 - species2_primitiveVenturi_mixingmodel_viscosity.test_vals = [-4.843481, -3.585988, -3.486593, -7.560545, -5.094245, 5.000000, -1.898097, 5.000000, -3.328995, 5.000000, -2.113241, 2.482221, 0.974142, 0.607219, 0.900860] - test_list.append(species2_primitiveVenturi_mixingmodel_viscosity) - - # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity - species2_primitiveVenturi_mixingmodel_heatcapacity_H2 = TestCase('species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg') - species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg" - species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_iter = 50 - species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_vals = [-6.118333, -4.985699, -4.918326, -7.249080, 2.445213, -5.624080, 30.000000, -5.681895, 12.000000, -8.186475, 10.000000, -8.853067, 2.083524, 1.000000, 0.600000, 0.483524] - test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2) - - # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity NonDimensional case - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND = TestCase('species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg') - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg" - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_iter = 50 - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_vals = [-5.724191, -5.290524, -5.223195, -8.252900, 2.140394, -5.229908, 30.000000, -5.681850, 12.000000, -8.186296, 10.000000, -8.852858, 2.083526, 1.000000, 0.600000, 0.483526] - test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND) - - # 2 species (1 eq) primitive venturi mixing - species2_primitiveVenturi = TestCase('species2_primitiveVenturi') - species2_primitiveVenturi.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi.cfg_file = "species2_primitiveVenturi.cfg" - species2_primitiveVenturi.test_iter = 50 - species2_primitiveVenturi.test_vals = [-5.641112, -4.724266, -4.677148, -5.470711, -1.121455, -5.713132, 5.000000, -0.830412, 5.000000, -2.668654, 5.000000, -0.454161, 0.000092, 0.000091, 0.000001, 0.000000] - test_list.append(species2_primitiveVenturi) - - # 2 species (1 eq) primitive venturi mixing with bounded scalar transport - species_primitiveVenturi_boundedscalar = TestCase('species2_primitiveVenturi_bounded_scalar') - species_primitiveVenturi_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" - species_primitiveVenturi_boundedscalar.cfg_file = "species2_primitiveVenturi_boundedscalar.cfg" - species_primitiveVenturi_boundedscalar.test_iter = 50 - species_primitiveVenturi_boundedscalar.test_vals = [-5.278467, -4.368236, -4.350556, -5.693359, -0.978845, -5.618393, 5.000000, -1.804015, 5.000000, -4.057089, 5.000000, -2.003816, 0.000415, 0.000415, 0.000000, 0.000000] - test_list.append(species_primitiveVenturi_boundedscalar) - - # 2 species (1 eq) primitive venturi mixing using mixing model including inlet markers for turbulent intensity and viscosity ratios - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS = TestCase('species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg') - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_dir = "species_transport/venturi_primitive_3species" - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_file = "species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg" - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_iter = 50 - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_vals = [-4.026294, -1.649804, -1.404882, -0.746005, 1.609256, -3.767237, 23.000000, -5.082019, 10.000000, -5.056739, 4.000000, -6.480965, 2.000000, 1.000000, 0.000000, 1.000000] - test_list.append(species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS) - - # 3 species (2 eq) primitive venturi mixing with inlet files. - # Note that the residuals are exactly the same as for the non-inlet case which should be the case for a fresh inlet file. - species3_primitiveVenturi_inletFile = TestCase('species3_primitiveVenturi_inletFile') - species3_primitiveVenturi_inletFile.cfg_dir = "species_transport/venturi_primitive_3species" - species3_primitiveVenturi_inletFile.cfg_file = "species3_primitiveVenturi_inletFile.cfg" - species3_primitiveVenturi_inletFile.test_iter = 50 - species3_primitiveVenturi_inletFile.test_vals = [-5.711734, -4.794814, -4.747694, -5.541323, -1.192017, -5.951964, -6.096677, 5.000000, -0.830172, 5.000000, -2.668819, 5.000000, -0.516308] - test_list.append(species3_primitiveVenturi_inletFile) - - # rectangle passive transport validation - species_passive_val = TestCase('species_passive_val') - species_passive_val.cfg_dir = "species_transport/passive_transport_validation" - species_passive_val.cfg_file = "passive_transport.cfg" - species_passive_val.test_iter = 50 - species_passive_val.test_vals = [-16.559189, -16.315116, -16.908670, -4.257599, 10, -4.523292, 8, -5.19335, 0.18661, 0] - species_passive_val.test_vals_aarch64 = [-16.538551, -16.312552, -16.882823, -4.257599, 10, -4.585464, 8, -5.19335, 0.18661, 0] - test_list.append(species_passive_val) - - # species transport, 3 species with multizone (2 fluid regions) - species3_multizone_restart = TestCase('species3_multizone_restart') - species3_multizone_restart.cfg_dir = "species_transport/multizone" - species3_multizone_restart.cfg_file = "configMaster.cfg" - species3_multizone_restart.test_iter = 5 - species3_multizone_restart.test_vals = [-6.175178, -5.763030] - species3_multizone_restart.multizone = True - test_list.append(species3_multizone_restart) - - ###################################### - ### RUN TESTS ### - ###################################### - - # set suitable defaults unless something else has been specified - # command: "mpirun -n 2 SU2_CFD" - # timeout: 1600 - # tol: 0.00001 - for test in test_list: - if test.command.empty(): - test.command = TestCase.Command("mpirun -n 2", "SU2_CFD") - if test.timeout == 0: - test.timeout = 1600 - if test.tol == 0.0: - test.tol = 0.00001 - - pass_list = [ test.run_test() for test in test_list ] - - ###################################### - ### RUN CHT TEST WITH FILEDIFF ### - ###################################### - - # 2D planar laminar premixed methane flame on isothermal burner with conjugate heat transfer in cooling fin (restart) - cfd_flamelet_ch4_cht = TestCase('cfd_flamelet_ch4_cht') - cfd_flamelet_ch4_cht.cfg_dir = "flamelet/03_laminar_premixed_ch4_flame_cht_cfd" - cfd_flamelet_ch4_cht.cfg_file = "lam_prem_ch4_cht_cfd_master.cfg" - cfd_flamelet_ch4_cht.test_iter = 10 - cfd_flamelet_ch4_cht.command = TestCase.Command("mpirun -n 2", "SU2_CFD") - cfd_flamelet_ch4_cht.timeout = 1600 - cfd_flamelet_ch4_cht.reference_file = "restart_0.csv.ref" - cfd_flamelet_ch4_cht.test_file = "restart_0.csv" - cfd_flamelet_ch4_cht.multizone = True - cfd_flamelet_ch4_cht.comp_threshold = 1e-6 - cfd_flamelet_ch4_cht.tol_file_percent = 0.1 - pass_list.append(cfd_flamelet_ch4_cht.run_filediff()) - test_list.append(cfd_flamelet_ch4_cht) - - ###################################### - ### RUN SU2_SOL TESTS ### - ###################################### - - # parallel STL output using - stl_writer_test = TestCase('stl_writer_test') - stl_writer_test.cfg_dir = "rans/oneram6" - stl_writer_test.cfg_file = "turb_ONERAM6.cfg" - stl_writer_test.test_iter = 1 - stl_writer_test.command = TestCase.Command("mpirun -n 2", "SU2_SOL") - stl_writer_test.timeout = 1600 - stl_writer_test.reference_file = "surface_flow.stl.ref" - stl_writer_test.test_file = "surface_flow.stl" - pass_list.append(stl_writer_test.run_filediff()) - test_list.append(stl_writer_test) - - ###################################### - ### RUN SU2_DEF TESTS ### - ###################################### - - # Inviscid NACA0012 (triangles) - naca0012_def = TestCase('naca0012_def') - naca0012_def.cfg_dir = "deformation/naca0012" - naca0012_def.cfg_file = "def_NACA0012.cfg" - naca0012_def.test_iter = 10 - naca0012_def.test_vals = [0.00352488] #residual - naca0012_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - naca0012_def.timeout = 1600 - naca0012_def.tol = 1e-8 - - pass_list.append(naca0012_def.run_def()) - test_list.append(naca0012_def) - - # Inviscid NACA0012 based on SURFACE_FILE input (surface_bump.dat) - naca0012_def_file = TestCase('naca0012_def_file') - naca0012_def_file.cfg_dir = "deformation/naca0012" - naca0012_def_file.cfg_file = "surface_file_NACA0012.cfg" - naca0012_def_file.test_iter = 10 - naca0012_def_file.test_vals = [0.00352488] #residual - naca0012_def_file.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - naca0012_def_file.timeout = 1600 - naca0012_def_file.tol = 1e-8 - - pass_list.append(naca0012_def_file.run_def()) - test_list.append(naca0012_def_file) - - # RAE2822 (mixed tris + quads) - rae2822_def = TestCase('rae2822_def') - rae2822_def.cfg_dir = "deformation/rae2822" - rae2822_def.cfg_file = "def_RAE2822.cfg" - rae2822_def.test_iter = 10 - rae2822_def.test_vals = [8.24002e-09] #residual - rae2822_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - rae2822_def.timeout = 1600 - rae2822_def.tol = 1e-13 - - pass_list.append(rae2822_def.run_def()) - test_list.append(rae2822_def) - - # Turb NACA4412 (quads, wall distance) - naca4412_def = TestCase('naca4412_def') - naca4412_def.cfg_dir = "deformation/naca4412" - naca4412_def.cfg_file = "def_NACA4412.cfg" - naca4412_def.test_iter = 10 - naca4412_def.test_vals = [2.210380e-12] #residual - naca4412_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - naca4412_def.timeout = 1600 - naca4412_def.tol = 1e-12 - - pass_list.append(naca4412_def.run_def()) - test_list.append(naca4412_def) - - # Brick of tets (inverse volume) - brick_tets_def = TestCase('brick_tets_def') - brick_tets_def.cfg_dir = "deformation/brick_tets" - brick_tets_def.cfg_file = "def_brick_tets.cfg" - brick_tets_def.test_iter = 10 - brick_tets_def.test_vals = [0.000955394] #residual - brick_tets_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - brick_tets_def.timeout = 1600 - brick_tets_def.tol = 1e-9 - - pass_list.append(brick_tets_def.run_def()) - test_list.append(brick_tets_def) - - # Brick of isotropic hexas (inverse volume) - brick_hex_def = TestCase('brick_hex_def') - brick_hex_def.cfg_dir = "deformation/brick_hex" - brick_hex_def.cfg_file = "def_brick_hex.cfg" - brick_hex_def.test_iter = 10 - brick_hex_def.test_vals = [0.000166575] #residual - brick_hex_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - brick_hex_def.timeout = 1600 - brick_hex_def.tol = 1e-9 - - pass_list.append(brick_hex_def.run_def()) - test_list.append(brick_hex_def) - - # Brick with a pyramid layer (inverse volume) - brick_pyra_def = TestCase('brick_pyra_def') - brick_pyra_def.cfg_dir = "deformation/brick_pyra" - brick_pyra_def.cfg_file = "def_brick_pyra.cfg" - brick_pyra_def.test_iter = 10 - brick_pyra_def.test_vals = [0.00161454] #residual - brick_pyra_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - brick_pyra_def.timeout = 1600 - brick_pyra_def.tol = 1e-8 - - pass_list.append(brick_pyra_def.run_def()) - test_list.append(brick_pyra_def) - - # Brick of isotropic prisms (inverse volume) - brick_prism_def = TestCase('brick_prism_def') - brick_prism_def.cfg_dir = "deformation/brick_prism" - brick_prism_def.cfg_file = "def_brick_prism.cfg" - brick_prism_def.test_iter = 10 - brick_prism_def.test_vals = [0.00254732] #residual - brick_prism_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - brick_prism_def.timeout = 1600 - brick_prism_def.tol = 1e-8 - - pass_list.append(brick_prism_def.run_def()) - test_list.append(brick_prism_def) - - # Brick of prisms with high aspect ratio cells near the wall (wall distance) - brick_prism_rans_def = TestCase('brick_prism_rans_def') - brick_prism_rans_def.cfg_dir = "deformation/brick_prism_rans" - brick_prism_rans_def.cfg_file = "def_brick_prism_rans.cfg" - brick_prism_rans_def.test_iter = 10 - brick_prism_rans_def.test_vals = [2.99461e-07] #residual - brick_prism_rans_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - brick_prism_rans_def.timeout = 1600 - brick_prism_rans_def.tol = 1e-12 - - pass_list.append(brick_prism_rans_def.run_def()) - test_list.append(brick_prism_rans_def) - - # Brick of hexas with high aspect ratio cells near the wall (inverse volume) - brick_hex_rans_def = TestCase('brick_hex_rans_def') - brick_hex_rans_def.cfg_dir = "deformation/brick_hex_rans" - brick_hex_rans_def.cfg_file = "def_brick_hex_rans.cfg" - brick_hex_rans_def.test_iter = 10 - brick_hex_rans_def.test_vals = [3.54213e-06] #residual - brick_hex_rans_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - brick_hex_rans_def.timeout = 1600 - brick_hex_rans_def.tol = 1e-11 - - pass_list.append(brick_hex_rans_def.run_def()) - test_list.append(brick_hex_rans_def) - - # Cylindrical FFD test - cylinder_ffd_def = TestCase('cylinder_ffd_def') - cylinder_ffd_def.cfg_dir = "deformation/cylindrical_ffd" - cylinder_ffd_def.cfg_file = "def_cylindrical.cfg" - cylinder_ffd_def.test_iter = 10 - cylinder_ffd_def.test_vals = [0.000902348] #residual - cylinder_ffd_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - cylinder_ffd_def.timeout = 1600 - cylinder_ffd_def.tol = 1e-9 - - pass_list.append(cylinder_ffd_def.run_def()) - test_list.append(cylinder_ffd_def) - - # Spherical FFD test - sphere_ffd_def = TestCase('sphere_ffd_def') - sphere_ffd_def.cfg_dir = "deformation/spherical_ffd" - sphere_ffd_def.cfg_file = "def_spherical.cfg" - sphere_ffd_def.test_iter = 10 - sphere_ffd_def.test_vals = [0.00360367] #residual - sphere_ffd_def.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - sphere_ffd_def.timeout = 1600 - sphere_ffd_def.tol = 1e-8 - - pass_list.append(sphere_ffd_def.run_def()) - test_list.append(sphere_ffd_def) - - # Spherical FFD test using BSplines - sphere_ffd_def_bspline = TestCase('sphere_ffd_def_bspline') - sphere_ffd_def_bspline.cfg_dir = "deformation/spherical_ffd" - sphere_ffd_def_bspline.cfg_file = "def_spherical_bspline.cfg" - sphere_ffd_def_bspline.test_iter = 10 - sphere_ffd_def_bspline.test_vals = [0.00208393] #residual - sphere_ffd_def_bspline.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - sphere_ffd_def_bspline.timeout = 1600 - sphere_ffd_def_bspline.tol = 1e-8 - - pass_list.append(sphere_ffd_def_bspline.run_def()) - test_list.append(sphere_ffd_def_bspline) - - # Inviscid NACA0012 (triangles) - naca0012_cst = TestCase('naca0012_cst') - naca0012_cst.cfg_dir = "deformation/cst" - naca0012_cst.cfg_file = "naca0012.cfg" - naca0012_cst.test_iter = 10 - naca0012_cst.test_vals = [0.000385514] #residual - naca0012_cst.command = TestCase.Command("mpirun -n 2", "SU2_DEF") - naca0012_cst.timeout = 1600 - naca0012_cst.tol = 1e-8 - - pass_list.append(naca0012_cst.run_def()) - test_list.append(naca0012_cst) - - # 2D FD streamwise periodic cht, avg temp obj func - fd_sp_pinArray_cht_2d_dp_hf = TestCase('fd_sp_pinArray_cht_2d_dp_hf') - fd_sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" - fd_sp_pinArray_cht_2d_dp_hf.cfg_file = "FD_configMaster.cfg" - fd_sp_pinArray_cht_2d_dp_hf.test_iter = 100 - fd_sp_pinArray_cht_2d_dp_hf.command = TestCase.Command(exec = "finite_differences.py", param = "-z 2 -n 2 -f") - fd_sp_pinArray_cht_2d_dp_hf.timeout = 1600 - fd_sp_pinArray_cht_2d_dp_hf.reference_file = "of_grad_findiff.csv.ref" - fd_sp_pinArray_cht_2d_dp_hf.reference_file_aarch64 = "of_grad_findiff_aarch64.csv.ref" - fd_sp_pinArray_cht_2d_dp_hf.test_file = "FINDIFF/of_grad_findiff.csv" - fd_sp_pinArray_cht_2d_dp_hf.multizone = True - - pass_list.append(fd_sp_pinArray_cht_2d_dp_hf.run_filediff()) - test_list.append(fd_sp_pinArray_cht_2d_dp_hf) - - - # Tests summary - print('==================================================================') - print('Summary of the parallel tests') - print('python version:', sys.version) - for i, test in enumerate(test_list): - if (pass_list[i]): - print(' passed - %s'%test.tag) - else: - print('* FAILED - %s'%test.tag) - - if all(pass_list): - sys.exit(0) - else: - sys.exit(1) - # done - -if __name__ == '__main__': - main()