From 6eff6a7e0223de57980f3311f3011152158ac5d5 Mon Sep 17 00:00:00 2001 From: hechao <490956681@qq.com> Date: Mon, 19 Jun 2023 11:06:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ELBM=E7=AE=97=E4=BE=8B6?= =?UTF-8?q?=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../30p30n结构重叠网格说明文档.pdf | Bin 456222 -> 0 bytes .../bin/boundary_condition.hypara | 60 - .../bin/cfd_para.hypara | 1220 ----------- .../bin/overset.txt | 17 - .../补充说明.txt | 2 - .../bin/boundary_condition_ref.hypara | 61 - .../bin/cfd_para_incompressible.hypara | 215 -- .../bin/grid_para.hypara | 30 - .../bin/key.hypara | 52 - .../grid/网格地址.txt | 5 - .../bin/boundary_condition_ref.hypara | 73 - .../bin/cfd_para_incompressible.hypara | 214 -- .../bin/grid_para.hypara | 30 - .../grid/网格地址.txt | 5 - .../bin/boundary_condition_ref.hypara | 68 - .../bin/cfd_para_incompressible.hypara | 197 -- .../bin/grid_para.hypara | 30 - .../grid/网格地址.txt | 5 - .../bin/boundary_condition_ref.hypara | 71 - .../bin/cfd_para_incompressible.hypara | 202 -- .../bin/grid_para.hypara | 30 - .../grid/网格地址.txt | 5 - .../bin/boundary_condition_ref.hypara | 63 - .../bin/cfd_para_incompressible.hypara | 212 -- .../bin/grid_para.hypara | 30 - .../grid/网格地址.txt | 5 - .../bin/cfd_para.hypara | 1055 ++++----- L01_TwoD_Cavity_BGK_MPI_1CPU/bin/input.txt | 35 + .../bin/key.hypara | 7 +- .../bin/cfd_para.hypara | 1055 ++++----- .../bin/input.txt | 35 + .../bin/key.hypara | 7 +- .../bin/cfd_para.hypara | 1055 ++++----- .../bin/input.txt | 35 + .../bin/key.hypara | 7 +- .../bin/cfd_para.hypara | 1055 ++++----- L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/input.txt | 35 + .../bin/key.hypara | 55 + L04_ThreeD_Spoiler_BGK_MPI_8CPU/mesh_3d.dat | 1937 +++++++++++++++++ .../bin/cfd_para.hypara | 1467 +++++++++++++ L05_TwoD_Cavity_BGK_OMP_1CPU/bin/input.txt | 33 + L05_TwoD_Cavity_BGK_OMP_1CPU/bin/key.hypara | 58 + .../bin/cfd_para.hypara | 1467 +++++++++++++ L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/input.txt | 33 + .../bin/key.hypara | 7 +- L06_TwoD_Spoiler_BGK_OMP_4CPU/mesh_2d.dat | 303 +++ 46 files changed, 7765 insertions(+), 4878 deletions(-) delete mode 100644 F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/30p30n结构重叠网格说明文档.pdf delete mode 100644 F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/boundary_condition.hypara delete mode 100644 F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/cfd_para.hypara delete mode 100644 F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/overset.txt delete mode 100644 F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/补充说明.txt delete mode 100644 H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/boundary_condition_ref.hypara delete mode 100644 H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/cfd_para_incompressible.hypara delete mode 100644 H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/grid_para.hypara delete mode 100644 H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/key.hypara delete mode 100644 H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/grid/网格地址.txt delete mode 100644 H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/boundary_condition_ref.hypara delete mode 100644 H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para_incompressible.hypara delete mode 100644 H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/grid_para.hypara delete mode 100644 H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/grid/网格地址.txt delete mode 100644 H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/boundary_condition_ref.hypara delete mode 100644 H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para_incompressible.hypara delete mode 100644 H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/grid_para.hypara delete mode 100644 H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/grid/网格地址.txt delete mode 100644 H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/boundary_condition_ref.hypara delete mode 100644 H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para_incompressible.hypara delete mode 100644 H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/grid_para.hypara delete mode 100644 H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/grid/网格地址.txt delete mode 100644 H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/boundary_condition_ref.hypara delete mode 100644 H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para_incompressible.hypara delete mode 100644 H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/grid_para.hypara delete mode 100644 H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/grid/网格地址.txt rename {H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU => L01_TwoD_Cavity_BGK_MPI_1CPU}/bin/cfd_para.hypara (60%) create mode 100644 L01_TwoD_Cavity_BGK_MPI_1CPU/bin/input.txt rename {H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU => L01_TwoD_Cavity_BGK_MPI_1CPU}/bin/key.hypara (91%) rename {H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU => L02_ThreeD_Channel_Turb_BGK_MPI_32CPU}/bin/cfd_para.hypara (60%) create mode 100644 L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/input.txt rename {H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU => L02_ThreeD_Channel_Turb_BGK_MPI_32CPU}/bin/key.hypara (91%) rename {H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU => L03_ThreeD_Poiseuille_MRT_MPI_4CPU}/bin/cfd_para.hypara (60%) create mode 100644 L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/input.txt rename {H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU => L03_ThreeD_Poiseuille_MRT_MPI_4CPU}/bin/key.hypara (91%) rename {H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU => L04_ThreeD_Spoiler_BGK_MPI_8CPU}/bin/cfd_para.hypara (60%) create mode 100644 L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/input.txt create mode 100644 L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/key.hypara create mode 100644 L04_ThreeD_Spoiler_BGK_MPI_8CPU/mesh_3d.dat create mode 100644 L05_TwoD_Cavity_BGK_OMP_1CPU/bin/cfd_para.hypara create mode 100644 L05_TwoD_Cavity_BGK_OMP_1CPU/bin/input.txt create mode 100644 L05_TwoD_Cavity_BGK_OMP_1CPU/bin/key.hypara create mode 100644 L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/cfd_para.hypara create mode 100644 L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/input.txt rename {H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU => L06_TwoD_Spoiler_BGK_OMP_4CPU}/bin/key.hypara (91%) create mode 100644 L06_TwoD_Spoiler_BGK_OMP_4CPU/mesh_2d.dat diff --git a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/30p30n结构重叠网格说明文档.pdf b/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/30p30n结构重叠网格说明文档.pdf deleted file mode 100644 index 5c21965d0b532199af8d3ff473ee4d4db6badc26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456222 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�`$( zzaiHPN3j+#H^$zLxM_NyAlhPZjQDXQe%y!`H{!*OcyS|MtcX!JV#AG?v6f44pO))6 z-`imbz6>TV+b98XF4{(;{vDL#hU>o!wk#m;@8Bx}V6m-?j!7@V2eNKl7pzlFSeKW+ zaa&u7?=r?jiS`w8-PQj*>S9QC7$Ldt8%zw`V&Y~oY%}-kaQ{Ql@m>NQTXVk@bRPYn z6yI|#>UQ~;x@x-D`|Diw-5dR@T-NTbe!FXR_YS|))zST=--G(6QD5J^$M0Rz-2I&2 z?^@fv-@nb((|ypt)3v#~-~W_rd-oClZr9`8ulVg|3XJkNH2de|^awuf~7c zb<}J0zwJ8ijrYIfdISCXU1z+h{tsN|yk`H$t_$9Y{>!cpy}ACYu1nqm{|&ij(0ea> zx#pdPnls2xBQHm*Gv4{gZ+aK{huqA&G@x{=y>$UCLEq~5?newa1 zH+pZ7wBdX!<@>!ufg<-@@9w}jS3PNa(5DQPz-mb78t1zfIPRY3-3uG5$WqCo6TZ=b z3fG`-T%gk3@6*B?#jw!}PR^6~Lhczp%K}!4 z=hg7ic7L5`sqgWC)>Fs5>RClG&`R-1QQ@(}lP|lka8G)i+^ZfB(O%!KK!?Zg>kX{+ zZ1X)E=<)0%KRm_#;MvW+1pn7VtG%4|JWuoi8vXUYedr~dXct9tHO-OrL|^w+@ZM=G ziizIJX};RDo%bB_y@>i|U!ULW8SowUe{8Ao9c@_ZdD)lPuv3a6!~-3yS1RYrJZ6@!^1SXl?%(D)?Rx_&16HlTX1+c+Q$26{&NR>p7T7Lv@)a!bIA1HA zsq$(DIC?k2|Vk$O#Z*h{qMQqI~UmJ8S-5Syhw9o zl{D|Vlo7Oc*#CSzY&*|ao}GoNIu*(+BX*9${ zCE85%#K=|~HwO}3^}d@}Y0va9XxrO!1oZKqSI{G3c*`~(!&`RBGo4l^DSFrCdgHe| zwXVSX{FdGFS|rWrtu&_O=XLjn{M@#myti%LtnRH__VP7$%k%P#rikU%p`NTmU&q2$ zW3}IMKweiPbe2~YX@w!(FoXEYSvx%L>l26NuOH22t{=x`S}J?gfj7F&^<3ZVa_{fa z2a39~dg20Sy7E>g2F`UA^(3PvuO}mLPCi@GlNl)KD(lG(T9+q)`z zN&}a`IhR_^1LvZis=%OS5g*yEnx5*wwf{rj_eVvQTnX2EuYdAu7;G7aFbp9~4>7C* z90uE#7}mh+9|(b_F^uCNF@_jEhhZ3K8n)?fo5nT9_!-tQ#u$$wtTDtG)-|qijWNb` zSw4?z9LKnZ^$^AoKI8GYhPWPwgWtXPz1O^Mbu^QF`DdwfZ{2sR>ej8QTep7D-S4fF zzLgv9bu{=IL#$)1uPLPKX!flSCA5wC+JZMaT7BM73h3isy`sb83$NbN;qz?{rFDdS z+d`Qgn|wP$IZ#(qXhFwT-|h{ivgX@;1EKtmUB3OH;*Pz(gP{^Adl-Bd__5G3Z*JFx z@Lp-P>e%Ny6S8+4@SP1+bsYMev5>pb1={ZGIO@Bw;Q-R1l^rL1mxF6S@>P(0+IKC~ z*fHw69%_s13CW@AEDUrLtbm3Bz)9c z8dw%S;S~e+@M-VzKvj6u>k7ET=e_m7zvOKQtPGDyYqWQ5pfNn*Z4NZS$|CI|XubBf z{*4%(@@CWAU*O*t+~W2455VdSyM^8%$$ns_YysOC=$`By^!mE)gih8~b$9m~ydj*$ z-c5n^;hWyAfi}=;d%zo>Mww_2DAT*E>-vWC-n{{T_#W7B#G^`UlXoB4lC(}qD>C^g z?*X)P$UhXZd6hp=+r0PCoCi>QX75q-#@-X;jmb-UPa`dR+BWjEd8%2j^3vYXK)8>2 z&j&X5>C}GDdnvH3FTpz&*wL5L;R)>CP=sUGmxg24mkB!%oE?MRBYinIb9?W~>rOGv zjxcC-MLnB3#(Xm{vJ*Xg$P3s27_F;F<`aHve^1he(vGPf6Yyysb=>Sp-!R=V-IEpa z%lKZ8ITZG=p1jazkFKW>W&z}oAiN*~>jCFm%{s@7WkS=Beu05<2N|_Y{WCcvklG19tc944w5f_Us8=h~UA{WlvMj zQ0S^>ea~>{8sHe zw&NPH!9#1raA%nxb`h{{^1+Lp&Mt575!{*g_T$;1_c+m~I;(Ln)VYFo>AtRT%bw0v z-ATP8xG(CZ-FxrF&NV<^L3+dX&UHYKL)oO>NwVG>oh`8L+*Vt1dy9W-u)VY0zdac2 z(D-+ORS(E}2ACtA-8e_^Yyy4*P655MGC%0wEAe4f1%6nAbU2Pq3gha%LFY#FKb>31 z|G?e=bnfpi+;E8KA*92}xI+l1%4^(C|DkYd=N|vjS2hwq1Nq@>qH~E}*g5Dw5!~51 zw?4vR?lUL<P^^XSI z-`edz9~_51L3#k`&NB2fog?UHa5vJj2X`Z37tupR*LR-tU&5V49{zwlm444Yj z52Qi=@1{KltpeWUK<0)MeP{YE^quWm;7RD)fjD^kt^I)k@Lj&Z{*b$4YvAC9Qtw3I zaNh#YjNjAS-O2lXy+Q9(;8ug{KP8lS}lM>`ZGhJyxLthik*-2?8V!eIq<H+awFY zRRcKrK~vvu`F4VC47!TD+WH2h+lj7{U^>{CbQeLV{;p-gtiJtS_MjPRl1v~*tqrTPwbRR!~2Z|ZUf3)kQ5S{bzTrgt?4m-ZdTUmT!se=*g! zzj*rgm&UNnP|vjVjjs&)#@9#b8(%pFkHN=YG6W1?Va4=qu20jqxvJwo9-q(L@&7me zcWf1X18p^Z-|X{HM^M>`nGtc7t`YJM2E|;dpKV`&(`^w}lOJJGgh*KXU)cU1Pu3 zG;3aG?`sA%-(~kT$2C9W1kG8^JDgE7rTHEAwC0Xh;O1*{v@dWU({0ur=U&jA)cuUB z*Zo}gb8e+>ME48sRoyT3I_?X4qy8E0ZT)llOm0yBQGI~hXABrO@>=7Ujs1M0@$1H2 z{4>UH84vIuG5*jv%74Q6j`0d_GybRX4*wbB`*9}zOZcA@zBfK8{wY2jpA!EJzcK!5 z{BQX!32!8Pi{FtjoyhV3l9-;D&cBnGk(kY2O#FD_$N66+<|XFwV~m4-X{MXfO#IGF z6HzYYb%>8TPr=4zRFPLrpm3A+beff?ycNcd7$!8<#_?9(%6R@${HK_}FXKPW zH1wGv9bd^;GCg0%*D(YCS$-um@~ipPERkQsf1V}Lr-hRF*ZJ4k(|iZt0Wv%JZZ?lT zGxQAfcMeO_{X+K(_AIpNGP_DGqhBkrkFquPdk*H%IT9Qxjx+n0mj?MN_$2P|f$8P(1$ADwMMV0Qoh{C4=L-9na~0%V<6MW|ank=i^k!<5o#Xe|i&!gIt(A3w%`YQ6uK@cV zW|d&!KW0^6-|w=|u2OFFS0uQC-k3SEA)S*U&ubI&)4U(SM6B5lMLwqS*%1% z7E{FxF%|7(uN9lcR?!2gJ~1S2f_z(n-Y)JE_lo<(1L7g^ zsCYs=Esl!k#Y^ItI3Z4nH^pi3o{iabwgg*>EzOo`%dsu6*=@^!w?N!w%eNKVO7Qz& zhBplz^sT?RsNU*=P{jTn!prPE2*oh#f5R5BDF_yQwZ57y*4OFlm{q@4zm_dw9Lys6 zMH9Aw=^3kb0#q}u)(r6qfK`kuZ39>@6jqnjCRICYO$10+*QQsmsLdi8VO6cUdQEL! zByC-7VI)n-hh>q*bS15&))JwS-(I`4y1TY4Dn{8zBLr)m1PZ;ewmOogfTD|%4*}&X zG|Jop&s$`juwLaE0n?up6n)fsJt-)CggPiZwH`{kqCfKbWnD2w*a>Y_gSxyLP&aHR z#(Q84uz&jH{#NSPBF8vJ>SyfF6>=HW70V3Dv7(zIN9o(4+7(e_+OLWgU50B{QGBF! zO{A{a80*3Ml~~bTX$#6bUc2sra{V#&o~muB9;t1wK3Cfv(Q`1SEf3RGX^&dAy1y=} zo>4#4Nr`vHJS#S-wne2K3hzp7uzI|9W7N1~?0iJ~AEuM~S(#r7AIi8ENW9oMs_bO# zmYSm4D>c^I@u+cqOzg^kvh=8YvHkr7F_l-IWBWO_FFq)~81oG6eq>yxidAx4#Zo^# zF8)Bh)a`hfy(x3;Ms0uf?b@A0E3x92l{t8~c26X2wssJ0rAAXbr1sY}akaxW$+btQ z&lJ6&?wZuv<24zzr_}aWlU+MflUsYPW?}8ch<}j%K}~7xB+Xy7f5H01+8b1MdF}0p zor8WguG+f@)NfVp^ELIgvqZbyms~5|V`#6gM)!oP$vx#-@4o43b5G+l`FSYsS_VE* zS%V%nma${wg}P)v?efpn5lIib@3}VDu?NQDQMS1=W^O;uU&W@&edO9!r*rM7OHlO2 zzIE-cOHub#M2G4}_#y1i2Db(wvaTt1qNJ~N$JI2ulL=bgsWl#VhI&1%@wv03)?3v& zTN85U#;$KQo7@X&EEG`WY;_k=yxncB+2t;++3Oamo<~5F>H3`bPN@RO|SU%NyO8HcCnd}wk9gMdU)7}K*$F=i=d@aU%+O^3E2l@+%Gh=FQTvbB@s#IQq(1a%(BE&I zeq;23y)D)^P?zS)bf0$RxJO<4>oQ#j>vE#@j3^fY+l;af*DZ+5VeBvU{#coR%05Ka z$91eOAJ+-j$-3gmyhr|-x)Pj!>hi9$b;~09#mWY`t_yW`DtlQqzf}H7@kNonGwOV` zt}4 z|C_P+0{R7^8}T<7{;H<=FMGeD71({cM_EnxD4)}v)cu^>PB$n!=>}zhZcr}J4a%?S z2IW0tAkM@uqkECdbT9HBbT9HNx)=F1-HZGV??r@kycZF2@m@suINpm0`FJlP6u^mg zkPXe<9#~75-Rickv^H9stn009RbHiio2}cdJFL5{CDs9e{nmrl!&bZXnDwM( z5^|iep0!@EUbbGfUb9}e-m>1Y&Me`V7?vb0F)c~AE?bhd#JnVLN#PQUwQ9-IC1p#T zOR5*2wl1Sk1)+q3odP~BBS0DeZvqUj;O8e}&bHk!B0Vesr`m%M7SlP`%6`Evz)AKZ zgimt+#*MP2n)8}>SSj9DK}n9)vxd3$=1;S1rKQl$CWxDW!uBEu+l;LqfEEwPt%f#3 zdk3J!XCU|?m)AN#I<5sBpP}!vF|Zyp@NyyWaF$-c1eOOu!xplan3ff=LO5T)%q+|Z zI+d|RCPGMJb_h=~Cxm3S9KzGAihTw&tzj-^0-LL6sq{;S>C6M+Bg_vWg9RZx$Ie2? zgtouKp68OdB=%AIwJrZ#TMJT!!tzt)BjxAHFP2})x0H{UPv-aM_m|%&zg>P8QfBil zqDG7>C>4{-XYnqh{M6iSMnP$TwV+-sEgxAtD2nAHc(YMHQqVxR8`9lIYW{7}lYbZQ zH$d7caZ~vflnSyI&V`pwf*cBq2Nw?(6p7nWiV~n!C2WOqy9yd?IVcOH+!YUiVrhOq-m;XR6RijZrJ&MOT`J4tJFdg z6#yL_g;K`KCg|KdT=YdOYv-vhK*egkiP3dEPLmY=fe#0gsh)-UN`OQHIc^Mgv= z2zWOnW{4hYZ6Q$#07ohfIZxTnkZupa!}zu{wzIYiQTnR@(@U?m0z*ti$w&*wi4*!i?(GpySUI+WpmqB z+8WEpZB4fIwl=bCuv44Y<_Ae2!4|e{UVKBWw{62d1UWlwyRj#21GfFPgSG`wD~zG- zuMY^~*|87MVO0b=^S5pb>pXBl@ z4y#z?D0PUA;nE?$G(CF#{tJ7$5F=#2&WyRj`QML$0f&@W5O|I%K=F@9n*`CIPQt5;FfgG1ZRpf zL2P!WIWwI(&K$=jCya^XX!)!&-&yP|aV~S(9Uf;@*-A`tx}7VXjm{?L`utgEo73y` z=TCy~L2Da<(VMYdu=93{Uv~RR;A?Ua7wC}N{fERH^fX2pl-9Bg^ zvJcyj#9AtNjd}!Wd~8<{?8oh=(01%2_H!63H2MPjMf(-|xP8)o!+sm}x8JqTQahA! z1^?*KIO1?tI+AVI%1`CrMWE3HyK|&EG91~CTzio2iGAWi$HK-e^tKh|ioA-#3X3!B z++4A=q6{=YSC{~PD!Ia0QC+b@1dmrxU$F{$wH|bpym3e@tyojBuA&7bw2Ji=?M_zF zT@kF<2>f8hmWuw0oxt5wF<3EFF^rUEc*UuTk&1H_7YnQvS1QIUCM#~dbgbew z`akr!XuF`z-HKW26VQ8kvg9qHpW?umwl3E!kE6Bl3;%<5Q0rJL-I?R>g0sSni~}$g zh9GQ$uoc2~2)iKcg|H980SJd69EETK!s)_$g`*J8L%0NC48jD2DF`1Q!#K-&#)^4}+l0cG z?^v2%o{<6QVjjRC(e#`IU{a-}tJ0KwGZKyIk+duojpfV$c`OP9}6)(3{1?uuqvI^z= zh4L7f=K5P*2kBvmc}|)uL%N#h;z&MoOuRH^Ox3ZXOPL%yAJicd&&chXiPj@ZPW40D z5L@pGfK>o%RC>m?Cydp7Ecesn;t#CX{22Y^xmMf_5R~cQ zoNYvG8S`#b<=GX01ESZ+Md5`=YY5u9pTNbGFiE%_>*G9T6cN%2MIIUOv;bLp0n zIsa~1rs_9YXNx_?PUL>HtdALE!`xh?a#a9sOA~(XiGJ;#{m(gTa@+9N&{+bP#7Y@6 z?*Q1%Sk4{^%mWY)LcAZ~Ai!aOV*n=s&M=la0`XZHF35bymw9{+o()O)DDPz{FY?V- z0j|mX>j1X^?tBQCk>n_#$a|5O^ncMH%LaHcDLQXVxl(hAInA7D&M_}A=bMYoCFW%i z?B*(Xc0;H#uLNErg(mZQbDP;~_5)pI4x2Zdx0!dmF!92Kc{gH=CCWTNc>hOQp3QwW z*L)DMvd&$E9%6r)H0_PcZgEJ!8+D zk>G^}fVBY4bG%2v3#|a2C&=dm0Q-Aklk}Wph)Li2co{N$B4;w^MohTN$xoMBzGdcyCaR>*O5VQ>UfUc(UC>(;>f1AaG2@M z8@cqhjgQlNHWvJUlgqJ#?C{+GfS%vZDzl5`&q^WN1z?Rlm1c`FMLDFD?BzCGW&04ef2IX)UGuYvO52l;*cF{b5@gRFEagYRcdB`o)cX_|4S zn^f*wi1Dp5%)*wca$I03^UuvMG+mxwn3ZC>Y`SW?I-j4WP(@C1h1Nz`w(cAVBUI&o8`EbahdpTs(MzL(m2n6;puzN-JI7V z(U~ckDbGzjH=Qz*Qj(Geoc4L`DVOINQrsz*0o>1xJvWBsQgo2(CIonvWJu*xa^$!X zB&?@6b6yL`YMcYCAu|)|$|SiEqSxKK|D3LuMz5kVU(&eoMWa)8a>G5Fc9+pUwunmmbprtmvKy~B$ zhEQ{_*H^GRBB%r5gjjAoB(>%;Zt*bceBr8oZO5HBR_eNx3c zC-=8H-!WP5R+)#t`t_&S3|dRtBU_*&NsJ_MB#9?U0!cEE41CM4_CXz}mUxn%^Z{eI zgB?|kp~O4J2358v@ml2GQ1klb-cWdduD*DZ*8C~G^{~F+*b#P?b_MD9yVXgVj3pc= zs7$z=Xi7>=JdTiXHYpWjc*;mPn3M`>$EEb7?4<0(;iL>m9fmj?^FXd#!V8lYA{Rr# zWem|06?t+BNQ#nUO3FwyVQ#DqYNDD^61K(oIpgP`&8YlLVFcCcyZ% z_?h@S34DS9=$V8h026W2;nZG|kPh(-@RT?UQp^;1d?wy_LKXr^y91@?Bu3;x=@La! zL{4G+$plNnWP%y!tb{xQ#1N>3UofuwBi0Wd_Wzg2OG)$4jK93j6>=7K3Z8dHadWwa z3f!?QC!C9m>ZrKsJJ}4L;Gw~gf};OkDuWw z`~d$Q$np35KJfD2jV4&C^^gzL*E?bk1{><&Ci&DKMg%(_`}!9~g;# z6{NidaNJz*CuoT6m?>svW*Rdy#mpEpGuvZkW@e0;9WztR3^Bya%rxik`@`*S?Oko% z)kvdOcfWq`{aVsUs_AafWw?G(A)ac{JqO17BFs^%n&+l^imwjEt*x3K+IvqSy-;C& z*XkXt5?_)G!&J_1#OkD}#&Bft*dN*}+{5B+O5L(pW^x9jw65eybv@aG|5W8_)%g<3k;B~A|gBe;xUpbj80I;11txKPs1<1 zNq;?&@aHKLwJ$mw$z9-8bf{Pmd9$IP7lCii0&f97i$C4~gLLXNC`BH3NZ*mMMd_F5 z5791bfeM5=Vm-&qk6*6cfW1>VC-l$hU9BJpP9}j1QMH2)7Uup!lMNy5jK<(pLp+v9 zF6|UZUVs1)y<(R`({7UV=cyt1h<`n&;@6^dv^(kItivsZ>M4xKg7nIb1kV7e=EA|5 z)`8JOQA0Y2bWd=5oZzQaFBFT6&RBrGvX9}uMWNRSwMlixQ)(ntk73qWM6zeG!-Kb2 zwOH>78i|d=dR9A0rHDcs8wHco-Y5&J(~eR@^zx}EgZ=v60-Y;1$+#y>Z}ng`D7e0P zD|+7r_8BO*jsMlpKifh`0ElkUf$(|fg%ht2J3~DiA?h5js`w`3qrraE60rqkXUf~H z7Q8jiB~(t8i=;l{i-P-9Bmx1Hl0s1qW*-kR`jy?7D@YQi=k)omKeY|RVxk$|#C8X{ z57%4jN5In;>E5Oyp`2~W5V@Tgh?If2kCNBi%~~(T=B!>`kpY`ioBlIp2sq&2c;F#- ztOUC6&8V;Jpd{O*9rkI_BdQ{rU9YMg-rQL((v}$^cIY03={xedafT!E=Qavy(`KG4Rbn+>! z{wA`$VOVo?0T~Yz76Zitkvrd*I+p`Mvv=R2~0#RM~<+L3X4Q*%V^(NlRPUwzvz*z{M+q~XQ& zoTfbgX<^_7Om`?EKl~71Kxg5Scj2E63cf{w=bN=nZV$V1+`%tV<#h}Uenj6?c%$vF z4ler|2CJf%Y0{r1wNB@>WtLcNM;4vO)>Vd#Rzvk$7%9o(oMFdsO1gof!LzPOeZk;# z2(=HVZ}<)XgN#mC)DQ+6r?ff{?%9|s0b_b&mXpQ2$suPo<`j?27J^EdS=A-nkxHL! zkqqm@_199yG}(&$1#>q2q)1sn<{ouR^4Ygo8mF`$!AYe{Og6D%fu<0z_zf5SSk9B3 z-FXZ$TO^YJT4(!-X%ob>?Q{7-Xv1_rZPfpx@kuanAegFtB>yoqLO+Bp*6e~N^RD?gKIR-HqlM2Hvr50WiBOcBtfsOVf)M^L)FvxhYXHBm1XtwzGD~ zGr8E4NHWhy743!b!Flq_wjc@!)3ebtlXn4f^cgbM7|Vr;bZLiwwYK@lmyN@q_gRWR zNp?jnT^jop?uZFxDM7C!Aw~`5(6_Kh;*Ps;*J246ePy)(H(mTlg}q+}a%9>2THVgq z0NP+L72Ev^SG__NN`D5k!8xdn`u@|5>);z2iZ#6jo=Bj{UqHhe!)VxZ$lce6EF-w* zc3TVCOxOmT;Y*S?g26u&h10u#_BJ8kd;tYcZ=RZsLaej)X!>$bfSbR6VA)$^uK*yj zyLN~jg}tvjG>6`Af`&AEK~12b#0dT9X84LX)H`fV^>pyOk!$x~1OOuLI!r+9JK2nR z+ZM{Zz+7jHm6&zL!B(&SBE8V`#NW0wCxTH_As}NANFzR@?>%u`Ml-Q7?8-YG{rQi& z4R7{WdlV4si?aZf&Ln|YCZ0G`pJ1G=7_O6X1rMS5q?v9|zFtpZ!xm)5^o{w9WWeD; zFe$igx4b`w%#nn)1)5tS3}!ci2beP)O!#dl=8~y=`Umfa`;uS}VIEbF>dd+SR7O=-{Wz^0`# zDE@mj?a?A%J$T>BjS@X@&vur$E7y-auxWHF@SdON;Aitz;CZ1rcvL>h9*EkH1mJG) zB8^w_`90-`{=r;O34m}erOGU*vm|@CC@@g9|2qiPi0%qVp6~0Y_{6zH;REjw17@y1 z`7L$MFW2ibsvkKZkE{yvE%OS!_Z2F=@ePRH9f9p;U4A&<&(_OL=8pl(L~_8_?=CHx z{A_z>KB>~LK|HO}uShaY3*MCh+f`^La%<17Zz#Cd+GGIH9wc$@$q*}*1YITWjHY0h zZKmuT`~ssemZ^JQ$;&QGDDkb)0zkFvJ0wM(s00%#flIx>5Qt#MF5|@T=hPvo{ETN=ujEiOcfc zH%>j0r?5w{A}V5D==26>e9QtPe;qtmi7?d1E$GIk&R<#w*{iWuwe z6_6*>WU${yTHwaKtch$p4U2jhAS+`f_^QAMqV0EY)q*tn*d7^{@od-BC{ej zGcpuuj@YcE*izktGm@vLh>?V5ofxmjnO^P~3(Zn4fpLTJHB+eIpiYU0H(To9Am^Cn$9^=^ktK+nn zm0|&3wBLCjTs3Vq)uONJeSP_t*$^FiBqOaVZu6hb)h9Xa@Uwc*rTK0{h zqUJY5s+_biz3Qj657FP*uCP(q%C6$oelHjba1^f^cgre)AK8xK4{nA5AaJ{(_0W!j z)W?H*;BH!jGuc9ng01c-NW`<-<20Zo_eItJi0t4O0Y@ZKpy#amilw`cVt>)*KNpb; zXO-Y~mZd@Ud^z&#y&PrR``gdlF>V<0JA%>b2N80PCP}#Gm8bhmlz);xmjAlHImtYl z3;2;rFKw?$RoKS&c9iUl{QB0!8L|<7XVmbr`fu=X_FzE&Xrw!%7L65jjQxQ;Q~#lQ zN^`l5h)6%tW6_D>E&6UQKqLt6l&2YD#95g`5mp}Q{43AgxO~*Ippv6+Z_Nc(AxwcE zBp~qnZ_>Se*mKG$2$*uV(O^`W{I5cmU!FRIkfDJXd%~w>eOi%oW!vnb(DpO%!ocvk z_ic;qg+K+~r{&%ZIPVuxJPT9=KWeKC-?1+s)Thb5V+6!^p=HquBn5j1&VXF-385&C zUJ!mZR=himM1bIzH=k|ZZSufPNT07h(7|E%7BdxfFq`r5$z|WI9(eFxf_g8(KE7=O zh$RB@AoadK5t!M#0i zt3sFYGsCzheL@+JB^mI$Hy|3R{fK9>wa}M+3)^OQqkubiin=M+YD>DDR1dza4HM=l zSnQ5?!5&N!#Y!uXsYoA0met%$4lBHP%sIc{ALa z&}o_cWV``f#wRoqbes8DfgdO(uYI$<6;P9ISG56b7@Uuibot`UPX*0lo7I81BFn`+`_i?Lj~;18Pv?IFQPoA$Cr01Esbj!^pP+2l2J%_F zvjb$6UcO}y&uk-lksKi_wG-hZW^2z_!hmoADn^Px3rL2*K4fu*My8ByL5Lo1Ku$pc z(UBMRV&5_16y*$?KaNE`^iy8YEyT@5FZETJe;%?AOt#nz;C&l8VA}txju4Rt0y(B;f8UK)}LIa_=?8b(1( z?@4`H99UMM*LW{PrLB1>LbxLKQjdsEn5d51;|l4Jv4eT#pqBrF?d6u<3|(*)xm7h?!>auH${($#AI*fo)Aa3byeA>BO#^Y z{9v;^nwnF-_viy+t01~b7gE9FeoXS=f4~N-1uiMHFjc5lmrH-Jo^ieV=cGYzt>MO- zbwjWU#K-l0SU_oWb!|ZS@xpJZgCG95{esb=2Uf;N?`~L()VF3Z;fpU*FMu`Aj0ri@ zLDm~1uJrR;y*;n!`AJOvUp{SocwYNnkqK$U^Bc#z*t|_NPJm;>BSjrDJu=AxPhbrq zUvSQv^Ne0S>%^DMAT!7}hLw4WAYkVAje^4;Fqv@As+v+ajqu0?j0KR{4C2eMvlpJ* z4#^UzPG>*AD10Vwm1bKuw8dQ`h`t>QuyE&XI*0T{Oq{8G?#m0YdY9c5FS*VCi@!Dw z-nCdLy$(IvX)k~nFr`s92(yBiNOR?;mH$hH5!U;xd>zlrxc3s#2MHfaHv;FCO~Ql} zFxDIA9~RJI^sF1LAugp4dDylu8UmrnFQz!y!S&*SP-2nrF(qmQ(L^%6@*t{%_OjU9 z-h<+c_r@5XZMFu>f6oG$VBc)t+n4m2Q*rOwM*K@biY+x_<67Xfa2(VFM2%#%^g%Zo zYezo#wBw+JSQ9!cFUe(`z*3mmQ;dPI4#vz@P~A@ga<-~+km|lZUx#CrXfYqyl>f*4 zOi+g52s(bmYI%=8#YS)6JW=x!c@7@RtR1zjP(9_Vc7{xI;bd?2ufW;MusW9;`?L+1kp-n0hx`so?FB|lIXG>O!duTJWM1PV1D(sAAKa78srDDrcnh&*}v9(B#s$xL0L(w zYq|!l0FW6tx{EdlHTSt!j~tjCM@Swn+E^>4xXX>b!M=_Qat3!nI$?$^2^wR}@UhK%jDIr`QEhJ#=ouY&rea5v8pem)UjmFRFBAUk3;xl-u` z=FLZ3O`VI@-vc$r?ID82l@&7P5ellp_1tiX^&&UwC*<4)RvGGHC5;adJT?P za2{EC^!_~3^QHB(*2BINY1?T6Rzp?d8D_72Ns8YAdFq7-U(Hg)bcK< zI|u=Z(*pKNwa)L=i0NJ3cb$pTA^fv-WrAlcLa*_h7%51DOsvrK(k#13W%KC%EGq;C z!W$v+OvUDEKdaqQvcd_tGcFv%s|05X3Dg}2WfdE?Si%7hh=ZtUUriZ3mAyzKbBVz{#+su!EoGbE&T@HG88^iUAM=_ zekZo^kRLW4R^Cu3PZ3{>e3;eZ%9DM>?c%@U z+Gg2CGej0q0te)M-(VRbo{LZ+Vl{;|B>`x)Id4FG-cjn#EGzM#rz==oe)Xc3dCcHB zF3ws1du}FniiS%Y0EEYuFF7F;yIEA?f&IY_U7{C|GF$jgEWwQ@P61iJhZZ3VRpw8P3(HZP>=MOMpsCj3EsV;NBhxPx^e-ER3cZ4_@hll?o@*u z3z_g^ur64;9&~be3RF!z7rvzNPul6-cvP0TSAzFE5eJy*^d5(Xz@F}ns(!2rTr~h!x^U~fhpBco~d&9r` zX5~Ix)t1NYpx(hK>2VX>skK9%sQm?{^1+r@?R&ma#J@FW90bK4ig{s-CI?T@7=9^8 zEqUPK+|032!9?Sa`fe{-?uA-$MXFU9f+|@(LwcMXeU`j^h1EM*EZ=tPqxQo4cA)s7 zluH7-6W^de@`Rh{SNWjmtnT+|Og>vk&0jY1Vs%NRur2_yFYW}DyOV~0zmKAu5}h~W zBeJ(7eO9>-+@p&3>jK{}zqhEAbcs!X6WByg3Ytyh?=8Iog{7CQUaiY_#qL-atKD^6eTQzB$ zr%7FyO*90>TyP7>ke|5`JkT(`;){8mnt$qGx{gupqSBzF`ZhDe*afh~`H%M4y05&U0+%fb*!O z&Krimb20238o@*D?OkJlviR46~2{=7=i4 ztFGuVu$XDH78^1a^3Jx>H8HN9J^sKU+wFp7+K@!W;^NOF7e&4&2FkSgv*~Zn{YP_}+kW}nIzNkQj&<%bMa#~SEjl1RGow;pbrjjr z=cWjPb^G%hKoDgWA&jB*Hk;9vyCSy1yrp^Qkij&0CgOvQ{Y+;#?AwZL+#$M_h#8c= zj8lzT4t&#HL0G>tnQ=Aj5tNy{Zijr~e==cnKvXEigoJ1A&WIm_EJMlmPDL0q*S@92 zx(W8Um0XWSSAaoTvg+wSfS8#VCaU}V8gfmnI}N(aiR(RWrN(Nb)_LY~=LG~Y?+h5ld46=l zaHcD5!_y;<9f})}#W4uiyyEhgBq>HWR}&maBY0^L;lAWALmwR4HtBrjgPef=KtS*h zg(~mBdqUS9oLJxy*1^0^@#VlM%gdDv*W!}7EO+3_HM^|z-6#N=v@^ewpWK!px{Cc`-E^T>L_3QoDlUF!56#MT&?nQN zT!sCv%-0;Jstipx)tSz9tJ-rs=|OA6I4-eeQ*RL?JuGeix^g6QXN#45s-9s;v0@Di zE2_Nu+B?>p(fizM+B-3rya#S03fe1hw4u8S+bb9&TNT(Y*h3vqUUA&Up}-ztgs3e; zkd-oO^?wW{r=V=4>cz7BxiakUkvjAtf)uGAT_g|=8hnmwVCjq~>Ab~i2O$yw2aJKD z*#tUXd>^5qArx9_n7tyJ=$J!mjhahY6b;`v6XkoCu@34f&SWW%n@u<|2wPS=C+I#* zzw%g?*^5GeGAkaR{_H7RvQTIz^2kv<=q>weS6Z5S!8&@}^C&vdX`Yg=mT zfl<~izH~L#=j#r7<{$;VW$F`e-Q|_m-Avo9fK%;PKNOx@G9sAO(E=|*>5!pEx9-hp_GXmgH(44(oNhgz)8fr2hsR#~ega;q3)Kb$6o4w zf&oL^H%-D{ww`;j`w1POAjyM9(=+ST_bsoz-2H^tR7pZjLQf0Ny@dUQk*iVk-(-r_ zIJa5*8Rn_xxjMPe1Z)Q(`*~@pKz%L0=Ybp9g8c;2c{1ABUNWStW7IG+ufe`CGNg^W zaM5%^N2z%-q>fMSz+L#j`PS8_fLri>L(~)erQ}(NwqZN(ANe={pIjUOVV*43xKt89 z_j4T@Ba21*+){kXIzMGH8HA1=S%i+A5`>OVpEi>@`FE~3%%h8+hi89=IaZz{7lvK%KBMTz@q~E?h zt`1vi#C}F;I?E*eGr>ouJfO%tbmunlMt zYWAn8oW&8ssD`^3vf5Xt$FB5Guv*wOH~pxbw5iuNFlnqlE6yC5w!Mq_N~A-fW2+Nh zox!li8L4hZ=$#&FPk2P=t+&uENON9Zh#AOpQ0V8RG@`cv`@M;Wy(vk|n(Nz?? zYE2XmVq~Sh2dn)#f>k_4BYVS+%4qg`R&<;M=j8GOTMhZ4wO|K(j#Vq* zlTw=A0tS{VM)LRF%j$zp!ODt?*Txpr=8}u)HC9*teDYK)7!1bwnqMb+tuMCAX4cLN z*rpZ+bkB0O9L~!P%{J<~I%U=7pRws{lm{iYv)w8$-0DS}(Mt}fn${_G-H~m&7*%uX zG&xzxe9LYYybCXKF)f_PzykTL&Z2sa3_@!y_ZLE}cSHbPEyHYT9h}UFf;uYDaRVRd zDE|`nQ|Z~8oUX$YujCe|+yZNHNqnfS+%5l0ck5B*1FD+REvgm2M9k+c7~I$vb&^G# zDq?8ufg`uL!jgq~FL(Ro#xLIUytV*8YS@oT`f1D5brW%|jFVNb273?i+Cl3ZFv8K( zTWG!<#hs*QRe_x81Lr3`fjp*z-%oHK9Me0Mo}30FTvrTlydRKT1I|w*e$jb*=1-n} z83u=3DK)%rguq^+h)hx;c8p1JcvKqg2+qQ43o4!nyB*hA**gqaV}ES=&Idrx``s;)z%?XUWNGRikCpmhIyr}&hy6YHCvZbiW9i8i(6-KwuzYFIB zNMoatNHwxCu!htUsO%zmcLF>}bE7m8rS*7FY~2tftS}`#_TQ-qxgf+2QzO7;R6*EjhDq+%V_EZ!qoi zY}TET@^}4-Q$6)^n^%*&JL}TS&qr`;di<8?Ij#yqa6GOd^6iUYAMN%08++x%^tJOu zp21F(fePC#)(3p$FmS)8;pC08XVU7byVc zyfDI||0L3^5C{GnDrw*%I)k|E!8aw+NT`UVLXJwNLUDF@Ocv76knq?-GI$I zy=z8m;Vp6_2Jv<&^919>^ufYG6PAo-G?gLMC2cvZc`dw`2G}Uf#vz*}^$ApG&FCjF zpU--7p2mdMOb1cVRgk{3!LHw;hK!e_=}~1h&Fkgpf9Q#YjvDG6M^RQ~jeg6ZSFggX z)N-#^sQSS_NLe4z#n=+gP*s-sYpaoKP@z8Q9?g45e@O=)1!hHOrw%aj5}r4xSXKKO zKv?IulMEQzS?Cn_y)y*m7(fwDw*x2pjcX7wmHb9r;FQTOYTd@ajp?E>V5i<=B5{cA zIvNp;X-Jk+^IHUID(SC1oA4%CUOZaZ~Co4R}RxzD6 zx|@b07+sD@G@yDLg#LEmRN_pU)NGHAM?HgFRc~HlxYd9Y+8)x75z71}%d`#0&Zb3af_hkhRR))06@Qmwm*b&c zX_$IIfMpzSe^s}rK`CRB?I+ISN|^*=5pi{?4#h)#jb!&E(Z^!%@$}ePV`}vz-AtsRCDq_ti)Pjj8N^@4_4)a~C5Sv?bzO za5$`S$dk57giXEhWO;RA%L<8G)ccO4V{)GI^88MA8+lEH!C>u9jR$pZLTywCR!gB9<3g&4&`mhZ4y*gW{QwdLx8=BLuh+`mq;4ISMJC z0Fz0A%q~e7E<|V%z&C^DN&LCMdFEr>2wCq1aE?OGjzZcdz!=BFtdSr$NfI9U^Ua`o z=A+*TnKz4+kG2yRc6;YaDICG+zpHQN%J=#EG~4@p0dN%w_kS%+a+ z$6{GWX2A- z$b(;>QF?GHpE~~TX?w9p@&=nXCioZr87;T3XD`DCeQUh+R?mk>a5U~}moE)8!E{r} z7q_KcnZZlTnODA2Rb<>4bVS-7#Wkoysz4rL!Xk!%Wgk_)LvS6UNuwUoY+STLc@j=E zNSHu|6!C*kLvK3#cBi3@(Jm6gQIQX=CjzVRyOpwx`|+541kzmCtE^xKDPDQo86El_ zSX_0e9ROi~+QFh{2*9)Gg8dKOi zsQj(9C~=1c`x-mY!^YpkCfvg&*aJb7FO-ZBkBl&jm@tc!FpGpRi;R#AC63{9L5)iY zAE6%nK{xordhiF{;1BkldWIbq=<5}v>lMQ574Yj7)aw=4>lK{q6{v(2jD!`$1nelO zvsmo20Bj!umKAiCCurj<`9VXbK|}k&ZJqEwf$+ZW@IJrrKER+MpD{ByOL{oAoCv~$ zBm$BU0+JX4B^fjf2{a5DvPN9 zB;-6$U;KSG$d!(lzgrl~gQ5mWXi}ks)&CIK;gKFKvd0U284}-kOG+$~elfV{oiw-O zDA}Hr-3);*t93ju9-?w(NBHCY?*cL zca3_L+@u-&jYGS%(nylEDU|cD^drybyQVojD^C8Rti~v|ZF~G442;dkAM#fQRG8Be z<;Pk5i7Qg~AhWx?#+$9=4ly*QDF5h_7hh9oCb`E9XUtweo;C$ts8YPHVp6dF-y z*>;1r!S6eVIYy(TAE-%kBXLfGf{L7b-u46dSSQb%YezTrZA(wKb#>+MyElG{%E<*H zs;&DwTBgS8<;Ga`!=(Erlb^TwJ6C0#?Z+u;UKCSV*Sq-qyL6Owo{oOa!#0sMy-rS( zp-vcL?(ypij3CgbYj`}qgO_&CYZ5-9-F0(U!^m1==DqBgWsA{9^EK@4&A2i1qx)te zA*3ac+kjEKP9<-a>!(_6kUhRWH($eE{u3QnAbMC3=PTajMq>vSFYdMMYh7s2UMd%(9&&b)?#0>B zv|vZNUags!F|_O(8SjsyM_Yr3dl%k<*Yo$k+kakzkQVW=JNKeG;@r)k6m%yp@7bO3 zS}t^4j|T2XF0Jo`cbMjE?Z(Oawe){Ab(UQed2`)s2{Lt9csazB4J>bM0%$5FigeDI z!^SmceRBjZy)|Gx{c5aFRUbQ0nIyaZXqs`gnu$zgLA>z{0!>@3O3kdd2g$t`TvVM;Mc*}&r$&s9K zW^Hcb>_&gwwyI?P8MHFIJDLSm1r#>{3p|S(zpd)Xb7fxuf9}Nsze*`I4yN*6?$3Pkm%OU#%`o}%4ciY+CD?D z!%xcUxx|s zDCEIZMQozGqta<75d7a*HLr<3WRA-QLtlLLJ|cA4=nFP#kYqaxYy8-_M|K|?4_yn9 z;$Cb(ka;kEan`Z=ji(kVZ_>99!Hng1Q`O6aHSOx2#fn+i*QZlNjQnk42V5GjT$N8| zc0;@vTxqr5ET(fKv@sh>mh_Lc>}Jl$*jc`AXHT`qEy9YUAd;AvcLQlmwd|D1e5TjO zo55n4jYJp(HEocL$rSWde10g&y{HIH0*6EBFFzhCzbjzED81vyRyZgw;y6iT0M`c? zV_)f6dLMz|xaGU}Vj8H}*t@l!&F64<5g>kA>F()0@=P{V;y%WtGETp~*eZI~)QOY> z%yo6~{G(AM%kZG%*}5`nPUjunrFN^;nshosq3g?I-`DCs)$Ex&cjwq#f!Eq`xvVjj zdu4P--P5+DW%>{kl~?brXtDG=ci@4_W5V_{Ths0><&n~5ZNW@xi^b2nl`qTS=jppG z6;JRx>yDGl2<4_0d}Ihg#_VSv2lN=C3BvE&XOHq>Txk*)ZQu7h^oFKe=;~dh!(jB( z<;KT#8XAr>m@YbACCs}ux2`Kga?jlau0G;U&e*CdOzgot(9mRrzK|BUmspNUi|9ot zi*opz2opyJZ<0U+Mv8n(uK611F9m}k_C-Ti2y-Z<^qZ0<3*I$71YPJA@q#+w=(Xz44ktLyB5w#@4}SHPhwb z#x@zJo?e%4_^2n3n6&el)uc=DZA!=Hm;8D9?RUf^JW*Q;;;78)76+k0`g`$UIX%^Mi4|p!g?V91}7?@c4p)il10}ssh24~sbvzoNrPa=q< zEWfx|_{gCd2S%d^x)*JEVl1W5i7YMg)0;5QSO?|`5ODbhbOb0RH)gvJxCtCvY>cg) zs8rOT8%Jj%Pa8wVSlkk<2lGyN>g#a>N>nLOvI-oz(KDii%lJv3>tkIfT@P@nRXo~& zX0-efpAUIDZd%XsX=^=sRN?U)LmoHkqW-3dkFczZa0Q-46g2$oIb&u+4np6-l`MXS z#puJGe8T_*Yo}+gIJf zeqjNr9L#l1x*fg%XCtIWkzlaHWoA0Er#DH?zs?0_t>Ru>PORFU1eipn#kTP^j)2qp zn?b-3Qh{B)mn5E_c5XBGUQ9Edy&d!m+uNhSI27vU=$@ay;SX`Vzw34$*Z2u%rGxv^ zf`^UlE_}t)!ugmc^(%TJ%XwD}+$hmef&vS(N=Po++0oX3oZx?e?YgnEdSgE6P7OXd zIe#9ztlIXqf%fxxKPO{oSdir@mK{UGnRU?lV`#Tla^cw_vxY@|MD9X z`xalRb17Mqb&Hh*cUkVw*V4A|6}rw2>uQHy$L?VaX*PJlDiv*6nihw>bkL^m0uZdeLt2#nb{vxtP$NNS zyBds|W>w1=C^vx*t>S|KZj}!V`jsP!zUIr~)0%|%keimau8GNJA?LMO0z|FUl{Dm; zcoio1W#cUOVjI8L(wH=wdR>dxk!^=-LauX}2niRQI(+H<;%75^+L35uNYOxm1VhG* zzinjp>TKN)A40~-3q8M8>slA1udd^`hc%ZF;X5Yzh`HT)yFkaw;@`VWbnf5BEtY`d z94^?FGaG90F~mA0GOUCMpHb}I@ty9*SL#-*vJb!auF(|QpD;hGAg2JQ8(42u3 z`T#AQ6{*xhU5e~aZLcJE-y^-pi5dNHs1I6X!v1Dl(sCKiUg0sJQ}hKmZ5xe#s%BWn zY<4PW)QL4;pf}jP1PJUimF37`l}Abd=t>RZf-=<%6F9e3l=L5Hj&i|$jkd}UGC~EA z1eS;Yuscqmby!vpu}%0J>6A==?`xqi)s5P`ks|w@Ay(al+^CWS`PVq|WFM1e{y^F2 zh8yAU?{`>wQnvR!#n}wRf$~4Hdprd#0I$N%TJxXVRDUgRHKybfPgN7lwPw{=-Gj~; zTpA{F8DdR{8jch~j!z725B0a~%(uJLozRqme$d z$z+Fy`<>nEv`SKRvQ4qYwA0k#vxG~$K+?U4a|_!XlZGcm(0--2qQ>8hTSg^!GkU^K zJW(OuNGAz5=PuXuTR#OWU>_HnDm;^SeP@{@J!==rujs^CYFyp34#!Z{J}1@b>vHJl z*d>5xAv0z-;&u?A7vJtht_)fb>b%0t-JYY7joM!js$w}APSI+$B z;JNKW({a`MUq*B8Kg<~57bppI;%rArM6>4Z0&O#A>iJ;^uBSuV}79eLDCx9fk#%0 zfh};p4clVE_DWoj*gk@iHkaA>WxU$&cJ~#3(S5yByGQ2xWkqSKebIrQ_&a1+WGhFTNg;mUrwLr5bKjQ=1noVhWOplKh zz>^k>FWxHoNUMR^jY)TPP(9o@Z?rrG>*^>>C_oj2*a zj5?=rj&491$nq-e1L*c#D4X#=GgvZ7p0BMF)t{~1M%g#l2RQj z$FWY`EKUmS(2dqPHe6-0auA3Z0kNuh)I?4&=If^fW49;B*+?nIb)r#5 zf91_E2bO)%_}~_!*9D=~w)O;tld{HTQdCR?7^NzyBE2G6N>}qf%Xlp@`nCcHee8+L zdKD|O-v%`zC3*by-VK{-Ii$TMO)ZaeAg5fHo0mib$wlTo!OM&oa>)W+j}y@t*2p>} zX%FtQ9-7>DM59ag@7>q5Dj1m7JS?pZoAQ5nfU+--`&#xntTSy6P zBGz1U&4Qn43t>m)Wu7vN zJ6)LBG~TESO)}l6bG|srWga|z0ge5>dhx#>Vk}Y;lsp?Xj=jp;oA`cjY ziC|N*jG*|Igyvjowq_h>U)xevT+~KSHU2wxxo7x@ztFW*=}z6Qb=LkI+#AT{t1Q4$ zN&Ut9`QT-DIAzN?vj*i)`bfv05#+ih4*?+J^@oHWC0_I@C6#8QUTGtf?tXR zZ&}ND^&-7#~J)m1Qh%7O%Lm2t`In`Z}m>9cK)Tfj2-`#`3x1+>HQpt zPOp@D$5(^KlG35oc#MHOupW1|D_0fKv9!<`d0cz1?X!ZFCDXa7MO1`RN}?v%V=ULG zdL2F|TOaGJb>~E*Y@j6T!Q$&IMe&DIFp%?0XXkS&MoX!(&pVW;o{BtRbXjWcsSq1f zpk@~{ufP5{gA29GR1w$DZ&o=Rw0>2+NJvTc1r*YlR`qlcajSgWQ+eOf^s?f>mmSL& zKs>`k41$~`y_`mbGqp2uc5yN_vi+B|H?~5AV_{kxBs0rZH8*>s3m zIha2Q4jp24=6^UWEIPz&Y;6Cm|Ln2r5OZ*{|D*IT_n$2*7l4?9nfd=@{ig@ke=Yn& zaens7%1X@1$@TC0FU`V2%)!C=FaMwY|LB#SONW^AQvv{R|F`5*>(d6u=Yaod|4*BL zG(Ow>!v*LNbF;Jmx9&fZ|FFdQIsX5oK70Qh^`|!Hr#Abi_CIs@AGe=+|2?PAIeuz# zeQN%r_0Nny@%nG+f6e}%7Hpqm{2vkdXBPh@|Fr&Tg@x;LI-jh6N$&sX`(KG3@&Du> z?*H3A|G@k?IOcy`_FtcWJNxYL6Zrq{4*5@O|5*4ByZ<`j|J@<~YW{EB@yY*RT=B{I z-?-tE`_I__we*|G!}WAE9OcXRiMq`h0v$5|%bDrcO)}HbyR{ zVx~XrO-z~OOzq5FEQr~-*aZX-;r{E?@yOPjn~V%%MgiOIP)yjpD6n9+`hxlf@3BJE z(t&K~x`xrBRLFmK?rx^tUI!i$H$k2x_ttLB!)x0Qbib_&lgFpx<<;4%X+%#&7L8JcS{ zureN_#h|m4uCDm5z04vr7E0=>CX))QsYxumA?8U7dn~qw&66PG8a!TXCB@SQ3tvpv zy+xtN*%cv46&B^ZBIXD9!+)}F^7pzW)w6*9#Sa{mUF-h;aP?wm`9E?YI|mobXW_el z{mDYi!p+Rg%KSh3bi!As%5TJVnWts?`N0?1>ioL(*7}1tB55U-U_}0uQ(lBo-gu5( zURGA=$NrquV2tJbLd8$Y&VYECa4~~6RbMcYYaum^Zx!LcA<>Axm-LG!1V)OX+KQLJ zRfve#PEKf_a`kY$zJBz969RNzeO_79IINedv|2M5s7M>+L4@%gz>^TIGJ#)c!e<^w! z$8z=sJ@4flzZ31fbf=$q-=S~xq$O>wm)!srS!)z7Un_w(tp=WNl81+&?=Npcdqh2# zMZk0*=$Q(5;#~W2UD-oZD>FPo{21}RZ?ffak9RW~(fKlR{G!I4aB}%UG@&Q};&^@z zCfM^(-b`oIPd2D0ze!1|9j{=&NpT@Rd%o0A=D(D|=H|AZR=C;H_(b!?w&$Y}#Mad@ ziUWKK+k7Q_w(~ryeb)&RzIpZ+y;8aP{j0<&(a!$=0#iV&zv+{&l=G={-c9FeI>&UL z`T6E_e!E|v`g!iZ`*c2#&J5+H|90uT-=DYX?9;jOXHWatc>c!gI`#K`$TMkMdH;;3 z?ZflV%O3qV=FjJS={#{*0MFB&e(*ZP+a1eA*}ebfbZ_%E&gp#C%bPqc^4&=1+F`-F z6aQ`e**iRcE@w*paGuT&rt_WYd?=l-Pv_^-`IP5rLVNPLP3N1u&LO8?yl?Q%`=>wh z9_?Sgi)WY0{%AUXAf2B~=Zoq5@pL}p=L_k4YdYVN&S(96DxF{S>*u{KxX$n1?f38U zGQK^XPy4%P{P#Ux_WK+!KjioM`3Lf_ak$>&zaR1U-{Uy^UQd^w{b?`%U0zqN(Ad4>U)RheRnA91+VM7{W zx8-Sn_WgeTaA@Dh{5n7XK2P_8pYQN?03R90&-t@l-;bp8@vHv(UFp0!u^A)x{A7q@p$&p9j~_VWop zGmSmzZMyB}>%)1=%Xq!F?Utu`#II3b?(gn3p3VQ`^W)zCxsN~K?fa1Teg1vHaq#-r zaAq8epLu-0{2K1R7_Q^{nC@G7zdV=e|9?C)9sP{|etz-pTYdgo&Mz&lPr~_sLrdrW z`yWnhyyr91L>|u%o*2#N_gO;9bJFP7OZX-~^Ek<4?*o2+*YjlFkjK>xFFTKmwbyam z>zurf2N&nV{+r9X6V8YHU9SI8zt3af^?rSs&M$l2`FG>LPln&0bGY)my+414<2bkd zYyR#F-lohG9`|z-&YKP+=Elq;u02oYL*M4GKJW0{@_bKtS>NG!d)WKnOKd z-tD-$^7h>fZGF`7^MpTp#>;y6g!~rsIAoEBPsrOI_3|=3JQnhvhx3-#ed*WpiP6H7 zp7ySn{T6?A$KlAo-|212ZG5j^-*J2*4f+{v%5&Q###Mx$EtCo8Q0XgnaQK$JJxrmWRCDjHh>cpFQU7$o={06O*GbZ@k&_ z9o3H`OcK%ZAmA&n@amB`5SUuo=DfPlZVpz zLQ3(Oq<1}&exFG#%Kx8A#}g@4PVrc(`x$-q)>OiCNwa!3)%sle|6I~ao=wl~d`{Cm znY59o^!_i)^C|yF6TE+4-YwrF?@ds>SH3?%^g@E+`_kPjskRTLXZhX7)BpGD)iVk9 zeD!7dQqqA3c|5^l_knkEZ7rT9U!hYuT5cV%B;lrJ_Oe zjp_GJ!p1&5%V{=RLWXjmdMDR0CLByD)h(r#S>em{m#OnQ<>|FG){5MoOmFK1NiQEx zWew@+)^qd<&5*7$E;cFUphv4%8WmDIcd49Nb2jN3C9Kn#%WKp9Ivt&2BbP9xbh$m3 zT7#7_DyDjceekiO#p)sb`hWO}KBAZkol>hZJpGZ$-LkwTR%;p{o(|u4X zI+l7_*HB8~NIHhm)oa4|VQRGaFn?Q8W~z?ZzyBVkvYpHN?+wYl-yc3Z-n)SD0WpeN z1=<1hXkX^OnMOiwPHTW(X{bCo!3 zwwkn#S$n(l`@M3s8);@3)BjuP|4rq>*V+qL>B*fm^WRqfzg9^4RDOoJ^YR9tNe1Qd ztHl3}iU;ROtA#K8&T-p0y$q!c_DlZ1aa`x?EFt#bNigGO>IO^57LynKn+6~#~aPD3S1L&21_<> zW7k`)rO|!|$DE`o?IT=Mb!Vk<9L^=*M(-yfPq5Ty{uX)11^u>#K9`)Y@s>3{BllYR z}| zw0&K*)URIsV>wB`CrOI#RT}CN1)V2qI#=n>elumACrZlWZI>u(r}F1jda_k1a;N_< zR64qyMpsUopX94Nw&p@L8~@Ftxp#`|^zA04-T3HjlBC}12z;IP!L>@ho&J7TlFvJr zex~#^w_>Z*)i_UqBoXP-Xzc#d?rDKdV&%R-X??n@dEs*2Y&8XYz4xBa$40qITlhfE zIXGmK@{7^s!B($LYHw1T)|#Rz65ks%?}g%Wo1Pgz+o>M5b1J#5GWACLZl^fk>i<#o zvR=96PD{+3;nHWiP0F`bn!clbxzV1>X)|1xT1Td$y-LC7N&)Bk{@l6btYdzy?=O@` z@3mjHnm70FZPhWh+V+jk0h3b4MtLgwaaPH9PCdL$Wpqjx8>P9OO4yll&YkDaiZ8=% zuQd(I`#Yt}t4Uu;xjAGHk`v*(VDo$5gw9VHh&KW((eS;x?zT7vQYNpUzUq_g+V zR$&{x#*LP}({eIg7pfg)++FH_!@xH6*Q9;8Q=T!XW@9r<@0wSqvyN#*vqH2{Y^}AG zleS=|u#Vc6N!z;jKG1~AOlz%S<9)SO9z1KAqxQLRy9=e%R-YM8HwxESAegoPXQuG2Q@=Z>ocs~|h8+!lfIkrW|ojeyyLpjJfITXB`912UZ@$rVUD`l^Rc859S8@)EX z>B2SAbxwzbvJdUIR2#n=d?fIk!V`lY*F!09^gHAjm6GusZSEXuq_elZ=NOc;O+F^k zTQy$6kI)A2{kmqe@m%XXcb)k3O_g2q-Hl=ay7s4*E~mN*@ALCZJuTmr|G!GPa7BC4 zrQgxMbWto$`B|rYsZ|V6XEb@$xI-_Hy;`?p)G|qwH+q+Ap<{I}>2+RG=kx2NQjp0l zyCCPVw5~{PoR>{GF zLm2HHl!cdC0c#s8oE@fJmA7pBaSa2~=Gt+-E`2u@oY;A)&nTJD^3fHHux#S9D=FKe zqm30#07ECRELv`(n$hvu`Ze&kEhU&8V0OICC0FaXg?($5S%}Nd`8IM{$<`NZr!zo0 zIgJeklby~zy-Q}DQw4jn*ZNxL3^tdvrFE#uVA%xBPCk*F!RNW&`>FGOF-v2#iVTjO(eZ0`&|dWmtNT)*efMSlMlbaR+kkoP zaNGaEHDuGDtgnVblhpb8KuM-I&pz|CffAv)4FZi1JO}tPh<09XSH>CiENISiHLf^H zTc=7JiGz=FXe(o&wnznN4XJ!AN?YV)hi$dI zv%tEysoo#U75kto=UCANs3t;N_ZoYI)*N7jymBi20Z&-(INW$iW1)({M{8ej+?L*I zTmoFS1CWf4=dpT2c);0MLKk=&Xs;=4X-gS%C~c_VVeP$A*eI}Np|r@4+rkCwV=BLM z((x};TF&zI;I!I%>rAIM@6gt{^B|;SvuI&{Fp13Q-1zFKy3V!A+JkFI=oOR8I+f;k zsxfTUim`H!&qn)YBj!14U8>96=GwWi`E)wfAJ4r{ZOja+AM|2+(Z)5A!P_>gPS&|J z+NqtzY%heYamf}O*L+ls&uYDM7vsQ#YZrs-Ovu-`ra^y;ani|0!Co;0FO-#;rNnH5 zIxiHpb*yrpZj+paYjRYhct~`8p+ZOwHgkfW0R7_LAC8$yv~@&Sg@KdiHuu z=H9sUZq}tN%U>xCtcw?|Gr#fZkP%ML853K zkC0qAGhq(tL;a9KdVw{zcTRThoWpEChO@2936Pswecu)S+@yY9m-0rzOliHc(=l!% z4nAROmb;=sqRhtWz~(~JU9CsfiWlgzlh-k;4sKp?XqlFOtDbbTh1jULa2|bEdDYsb zy4wZ+uD>jU&0CDb7) zlSKQ&)_K_E8i8RHIC>=A-4%<57?cZ`70dYNtUWNx?4!_dyLL{u71)+w;n{diW=DnP zWcK-N@Y0PV-BCErW7Rvn>(H0IyuoEq8wayQIdt&Z<8^^MKnEHYSnDKeMy>Nj@)uAC zdot!BH-k2Sp6E*XO{qWj8fK5qXE<0+MnUujq`1C#5ONDO0Is@OcS(GUSQL(@vq?&`=C&)Jh&*W5eVZOWHy`k=Jlur6$&dQA4Psf0q`nHncB#vtSM56X@E2iqc>& z4+uFQ-kIbJy&Ae8v?kQjm7LMSHMzdQQYni@&Iw%za3OEwc%k-2&L3@FD7W*ufRc0X zbLLcFMEl23e^cNXuQHrNlxFoxKJ9(C!C6c5V-ZpLlY+ z5oYSGr|k<*0Y;413<7PR6hglzd2=U_s$)MHl(W2DrK`qiBFg{34@W=gzAdsRM#$(X zp;<9C{Hm~l^aT^7-M&y!FR*DuOA4;cI@6b$No$5#J}373lG|*yRtIcUn6IOas15iW zg?5GB)6yav$A7n|mpXlvdcdjUsA|IhzQ7;*0Je(A2}x(!h45wC^-d(DejKIuPVIm&dfl&vM=05%cgZj`R{0X0_g0?z!DF<}*K3N>+Fp)42s zjD66T`kMeJXoK7`{>C0e&9x;zaw$L#dXLzSR<1}@H-#)5;MmpYk{TAMg+A?a3^vh@*x~Hs^^38LQMAoW1Kx}DDR?#Fi6A-YmBlIFq-i)7n=e2I%o)T3*xgT=gymA7ojB1KFWFE?d^P2M?Zo2gv^3q zkXy?kJ&gXQ^AWJGdafyXOrxg7bzABOSKtg!xvY`eLy5zpQ?gFe+DnatU5WY9?s&vbuJ^V_`mDwL(QA*Xu(`)Zm-)JS$FZ&N*t@o{ zRiDf3TH)jxeCuAWPJ3hRdfw#rkHORTjw7>sT)9oev_`B6XdF`0WG1&NKvy%18h!2N zg}QJ~vv*B(_HnZ-9BA+Td+9o?#XDNMjpEf>W7>kn|5%*M)}u()nr7{NJ$U+!Q{P%< z*VWF8y=d*wPSUsquu;1dW5ZxCo;^Zxtxxuj=T>VrnQUA5g^jj8^<$3r%CS8+9AD;9 zoYV7bg(}WSjmmx;Y2;@{|CedxS-dW!TBE@%y_^Va{*Z?tKVwAKehM28)6wURmqnj9 z={??=XMSC-ajZ(*E40SL($Dn$SaM*TFKdiPSJJMJJdfqXXXE0xRS&|tN*$xmSD}@? z!#E#}D33>tMfgw9n)&G4i0hn|s~y_v3OsLcC|0FRraQKJVj0KI)ScMclfHVhDYE1` zluK#wuI{?2ESGX9_E8VkC#9 zW!tC4oUp2>9{q^i%XfgFRnFh|+MngRhr^kCb+k23XdB!8&Bog1prm{l zR|Q0o0@_7+yP!cJ?<%C6O8Qlmuf_-4&^leVvV49817_PfO6 zRJEjA{7#xKax3CvEa~d9yFlfr=~(;P>g{2__DAv=Ol;9%uK4!YjF$bgvDXj##iVvb z%7g23JPpjXT(0BloZ0mci=Lz3*SL}S4{b!QoNgJ-Q}^D=^&&_H zc0GF>?kHFX*bDs1u|2IyJY5<4u&T9-Iu7yu&5mWyFQ2b8LK`hXbQ3joL`pISY7oS~ zA~x~TrR1CL4>W82H=g=EVz4G}KVp2rZ{dj< zyuIKyh-PG55LauVwQK3T6GZ zSR!cqt)HdMASmPxBt^a9ite%PoQZ*TMyM4K%*UbMG0RXMQUjb3wY zdu|KloPF5iW2p)B9kGD8jA*IqJRj(p9IcVo?K;F?ZHYu_(bFE=5@*LK%aA(2f7q&M zIf_XoI`=y>WIqEQ98r+amVnhSIesw$A09ju_ z!#T0$P~_Kufl< z9OvX{j39_3A!4&B`JyL|GF0q|Xt}EUpHTzoU+#nh-cq-2S;DHM!~O}JQ>bZjo{ii* zMx3yQ=qolH#rYO~4n{~(wkCdir`kAsn*LI2?Muw8glhuvEJi$-o|Jpo)(->6y|8V> zS=56LIT^=7Z5fR4;K}LHx8xXy_GH#JEbfi-HwAmk`Z!0Uk5HSfQC`vjEhBMcn3sra zo}%>&5Rn&<2KI8J(VHmLmwmNi@duv1GRB4#b0d9WFu z0$GnMmzE=N$wlH7^c#*qN^-zajJ#m9$*STioT(VG#L?3@B}MMLD%6Ku_1MMUUaLZR zo!fGweAal5mFs0)sihTCH%B$~vo6#H%SuyWgS3sdF@}e8T~|Q@+M~ozUc8*aR*U=C zKV3*;Bjhplu-_50*IlU(AFJ{k_x;;$8(5Pu38PsoI$`oL!(IGZx6Ka1ed?kGfYx|g zj9}M-H5byKS+jvlwkOhtLBgot7#~&>y{?8cTm2NELd4eKHDK?Nb&2)p#iB|O zE6&|e22X=^GOb|8L`K(J>;?ABFzSOnep6Bo!u>Q%F1FmZiUg}B5JNgTf87b<+OhXT zU;bMOfCiMZk;d0P7#w}E>LQZ1FRenXY?M?xAD^3I^)>oFD=DHr#W4%6aWAfhv2`Yq z*F;-V7fL@XBN6puwAJz-EM)bpNO}EG0*{b&75r`S6LECG8i2XI=FqEBhrKt>N3EXw zIz-utwmIxsM_fkPv@7*?rM#}>jIFAD(s&y^{(KLsf8@(1F@i&Yn_yQ9P zam@HwdtiKy9zd=pf(|_UY_NBnY<$l$>{o)w#6}Ry%sv@QDV?v-YP^Mz0mq}gkCi{* zW3fzHFWYcu5M!nPN@%-;9!@)9AM#;LP&#S7XIMVvm*_{L=5O$xNwmr$=TxW;w$mj) zjdKawZfV=XFRUlm0$zw5Xi2>e3%iw20t1!Cb%ZDtP*7TndH^6a&5M4wIn)+q?Ybqg zwnpG5#&NiogY_*(95fxu;7o;U+M~HX4bT%3qlR9v$7vnY&X{uYXS0j0%lv6`UB75& z&0#rTunnU`tibk)r~%XuPrl79CadLK4+wa<=|Y{prF63@^{mQiaid&!2dZJDQeS42 zR?JpHo9jgdrApCa!*^L?~2KU)slt&(;G+pWS@?Zd|#XBK#( zpaVAo8#cHQtOG_1xjf@mnS)+>NmygJFa6#)t)hRSg*8S0u$)*w2AV|Pq0nNl*w_kI z_k+tJmbrB*k5$z9T8i>ejJ_eRcw1KZ3d5^6K$za}DDBv9Fm)=&eLQ ze2f*(TmZ8aqZ)g+u8a;DqxWG~noB=HRvQGnz95#)>@NES%^W)ptqFCGNw9i1YL%FE zsG;ImSF;ARq**9Q<^Sh`eHMvd!(<${=Fg!=%1Xj_KzdJO_{)89tJHc?xQ^lPjavGn z3w%&3>3m%9&FJMUcNn)726sw156OcrA>03zm%?vT9NUjN*4*ljvV4d5?r4uW6U4aX zXWN2Ln}zKu_Vk0Ck9l|~J<=6=0~9NXehNT#Dp-e;j|cSX)Ki`LN|TjdtyI!k($lG2 zrKe+wH-?pi5y-rQC5o{Fr~dz}!XgjOA*kcb%gMhxZ^4zPI&(-Hg%x-`4ZUDe8==6r zivZoJmT{_gh=hiG8KZM)bw3`3Oj}W0-T9EN@!B|teB5_twfNU_X?$n2(dVr^(r+tQ z-0E)Jw#PDd7c>5`_Z@r3LLsQneD6Dz{Wxle!fm1^3F(N^6=fL4Va5F%dzZ4iQtpzM zK;m1jZmA`;eE)F5gmEuW)jAIPu@GT=O27u_0jFemSYs`gk`H92kk*v2=IL*^Gnzo$jQ_7 zf;Ew59fuc@-!S0(f!U+;7=BwlIe9satOa|tbyZ*6nojKQR?GP&l|jy(Lk>vWT$jt} zS?lSkXcMM`gDNSr58AJza1Sr+{1W4LOuAebx{R7}BjkhB8DU|t2y^;Pj85&!dK|rN z)WTh;?VAI0fgL+{kAii5o6^fMK6@ir4cg08!G_&r*n&|#snGIF^UZX;6L53*MfvR{ z^n+Qiq6H5cnYE`AM5tr`EBKCQ-Ju;e0;4zELDA9-KF?;$+NmIJdMZ-D#wiaPC!}(W zZhYlx5_s7LUyIua=4!~ugRd!QgGmX^KS;cpbdo5Ic+geIUU^TQhdYf&HDfE!bi>%fo|7s}nslF@J1p zSJHFsLiGPbJ3@3MUjKlR}>O_$OVS8>pK#dROMk`B8@ofaNX+nbHYp_JGO zbU9eAxT_;DhZI=90j!g1Kr1M>4dsslS-y_J;*Pq}VjXoC(jB9{u?7PcKT6y1y}^En z`miV4RN$tC81zBC2Ocg`{8(so^74mL0_i!*7|6{}k$0ujkXiaH_Ukuz7x@{#!mBtoC3wP{W z+THuoa{NN4gbR_d)n zDf!uHX#uq#8|TD6qPU};h|*SK@*v)9yzY8bMFThYt8Jrwz^Njpg1#b!CA^6M_i7=e1s8+9%^8(DR6NAl^t1jD7=b_|BMV+r}ekLx(1e?`_hD zJ(hgbOfW-^0p#FY)-hvk`B2)4h(4oZ>}}Vnt_aG6JZEzPtOl@` zU>5)$SapVP2mm8!A?0S!ag<+ZcY*dF<3zE00&V|Y)i$$_bH2kHO48I(vCn#xNFmR_ zK2vM3oWt$g3`l4G66(WPK@1HL6c=S@q-FdD_E2wK|ALIeNCVF4QL3XBfRdtYawvJ^ zxb|BjL>d?uO?B-A?E{JXc40|qP{l;nF%|=!*b5p532=o zDlB^@Ic%gU@@iXQgP86L#IyrJM(YI9R##wX1kx`h9BAg8B|)=17)8SoKNhat3)YAc zD#m#dE?UQyW%Z>do3lxA9OI-eScBQ_xllGDE+}uX{%%pD(G+cdIL-<@tu!)(+>~Q# z_@fmb$AhjhT$NRil-bGUGWNFusmoxwEVZm;EMv>46%iS%HOAxFmkP4|ZY6!0qX&Wa zt#itPHiCTxTlaKg4v6|a@YNO$2G5d7xrn(y%OL+TevsZ5QW45SFWD;6NbM`(F7KUy zciM=9OlHIg>hFCs}<t~-P`%4RX=64rXpjVK}27>v?f zq=i-ZjdnEq%`K1XV^(quw|pDh3!c}9JX|9bd!_UEnJ$#uS2?2X?+}Ag+G|Qaq+OM3 z!vm>+<<{w_W!4z3M+Woq2_T`obcicF>lfwK_&hcWW67(kwv&TBHfU1}uuPQNt|2ro44g|19LcWmc)yeqBi!oRRO zI}~e;>b}tE#tU!zTI;*=_KX_Ac&>Z;vMZHPgoI+oA9rL))^5KYoA9cIw@`CONtO z#HbR}R?Z!JT=9h%@LZ1VCO-Rjkzu8V*Vf(*O7mA@F*UUXo3;asuZlX(7$_X^>V~bA zKpwG3GVHxQmcE2#l55~uCL*=iPkEeJbaae~z0n9yoUYK4?V{M_58f!(PYfmN@| z_-4}0;kP>0-z5F!GfKLLFjBW^6w?+PLaS)~ zpY+$s;aAN!Rk?@v^)VmhYfE3$eR5u|j`NfD;C~ZJ?C$Y~R;{M|Ka_@}-n)c;bC4Q$ z>ncaIC4Muxy%o@P&AX3buhki@l`hNx%QW1loL;6_=1@@ybcLOdpkCq{s@OKf5twaf zSA6}0@5N&yYb&rcZ3N%lo_sEXooTsR7OAmI0KTWa0=MLZ2ziYIu;*rcdeBswMMwtpe zl9lvQf6Jz({(2m|R^Eja$F!gLY*?hIZ51(3yLiv_jmIo$Tpw&{>m45u72JgR$__-f zMeQF^9MOixD9Xbz%+W_%+#!7T(hK3=`VEx9jXK8$`eSu9%M>$cOQc2TbA_nXSN zrd>DsqVe5q(jC5rFqYDZfi9HKy785OMrHU>;NO5hy_e__vKhR#B3r%e3rJ?sUPO=3 zEcA;;FVmqvyme{;|BJTAPL_RN=U_=jnP?ZiHTdOxU}Lp+47L^AO(+-If!(1$;tJBX zyn~-$U0`A_i~^4|c1MXE3-K_BF&_OHzW;0EVJy9f(tCl{fwgN`xrP3OPc2(E_JY-= z)Qaeb?i_c$&PRc_t^=0LC>9QHr7HZ_I!b#9BW9>6NPt4glKUWIuV zl$$yldbuIDb*1br>D5}6TXv;SO@V#zj%{=v$+z4e-R{(aF)#m~;u?%i%^={9OR+Pck@zh+CkohX0f_ggK+ z-Yky?<&O5trQ0oco(d3dimh>5?nbrUZgo^ysawbKRw3FJE9gesFuB#zQr+}gZmaza z7SoN}D8~ZnR=?)DQA@VjLSYk~y-iy!88$mx8*Elf+spLIkL&U~c^!z^MXZ29fiGhj zhZx;n+n4lxiHqQhEQ^0IP6GP3`5gN|%w?ouZz7Xl*Q!g*PWd)xox6?8tidXN#^-z_DXk{B{b;9NY`-FUW(3F`AKNk4v*0Ew~Os@D}?0tKbT~~SEKIfjtKJWLrckaD2bLXL% zku)P|G@2R74{TYIZ49=IWm~pvh=nzl1h!;k93BSaPy#fL3r?G+r4SbB>cfj|>NIrr?n&whUU+u#27 z`AlSKbM7l9X(P8-PUZ;xw)Lpq*ilfs-M*8ap~h?#Pc@K|yOcdi zBKx9Lu1AizYbL3j%G!$wuCa*{Fv%iTamIKpiIEt78GL*0J%TzU_TIQ}bSr4%TgVuc+g`FqFnV5nrcvWt$aJJSFPg7jfE^NBl-Z7cplIy?v=~2x*#0 zlh8&pqRzWcxTz~8e@bw_FP?;t=a-6gzp%L!lGd+SsT6M_<*@CxuGT|C|kmJPktXxAg^jPLeYqqrX$&$hskbX${CZ&`V=eXI9+ z)Qpw8MFSLbF5R^T2{aW0$q%Bn~579HEY>TceHRebec z>=Y=tY{8uZ6|bvl!q)eFzGBVVUcvjxuJm7VDOK`5Nv!i%QVY&`znXDbfcj}6r7G_B zK)o5Ch<>Xlwf;g%__Eb!6$IDe#V@`I)oxL&jAJdWh!R|V39ev6U+r0R{LV@HdA?=t z(&Kf#eJ>}TthIGr{PNSv@@;nIXX`m-;uOB(3clOvws!@I7Uh!mZi%gHsXkHb@8Zo_ z!HrHU*Fs)y4Wr7cD1|vwdyg_XXSH2p6lc|-YuxCESL*v5*+K%@YBPfK=VJe{BWuqi z>f{cbD-mBaZfpA|2W`vNEM9#~kvhPVH;%1bT zz61nBypfCcu!$p(T2$J4mdLn;pSDfR*r1(mi9aQ&Y(s7Tn2yS)*x~QD!ui``Q9E>E z-gAZWX()3eo;pN~u-YNxZRMtvZf|#MpwP9n-KNhc|ycFP99MwGK5kS$MG;FYNyT^&r2m+37#t;q$KwGIKzv3 zXI!G@iN(9-E=gtDVy4e;<+5t}UtIl(nx0c|Yeew8Od+Z5R!=NW<(eg_>>+bry13ze z)MuD3({J_13Y6emGWf1cPH;E2fOwbRYkau!ENQWJjN{IN;7Qi5Y;jjgO{IvsL)+c` zw*EznO|B3Rt`A&3N9D*qC6M_RqY~EViP?I=W#TJNLc`DHcqWqL+LZUTelz|`<@hS* z8XV4;2>#3@)$u)ad=E;z@gdf&)fZXRw{Y;?f0y7H4j~cy0s>BdF(*T1dqBNWjp$Lj z#Zva+H*4^_IZQVZyNm?qP(C6K`FtqLvnw^LRGtiyOMb)eU$NfA<$hBsTTv1O1i!vB zkaK5Z1j}Zw#vAz{-0H@JU&2YQSZm*ZY~{1jp94Ev3sOF%Yqp4xx1RT z&XVhO0oT}aPG48HO0kOCej@?rVG_w};w<7sa%3W973&ZCd_;@;U2|?K`3?!OLl$@4 zR@_bb6j~(iQC0hWMI1N>TX3z3*@vw;ST-)e9T{6u$`FW3wks81(Tev}|0r zJt>supsKf>0? z5j>Z;4Lm8rZT%|!Z|mwUy5R^GPoqFtsiY=yefxAj6$`#OjAKA`&Yjwgq0auh(k$rq zQ%<(eZEg>x*3{akuPK?YN`NyIwH#})(Z1L_E_R&9+*~&^=qUM19;PPZe2tpVLb8@6 z<}VXD8^&fL1*b;b6;BetbwvE)mM@=(o+FaF2I`6t!P$i?>3ZR1+T4}wQ4>09G$qv5 z+IrO1aOi^jti|qLzbOey7?dXhRNlSDt?gTc5c`1J;l&vn$z|?I}lkt_Uv)kk|=_+@jG_RZ`$&w z{NkIT?b*4uS0il`C{Zo(LOlQq1Ct)`|XO*@Dzp z%WyVPeZ8^Z{!6)9SrW0cAR&>I$nEbI;_0UW!850~*EiNHzQ?SzWIUNb?DxXfm~b7V zy*?^TVx1}Gdas!K60>uOT%&LsDPPKQGP9SQ&l7nsInU+IOqtMsLb=8f^JgLFaQu z*SR!_H$IepCq{BU!S}szB_x*l6nzcmj!9cAd&%<`%C)Ubjwp~$ar3N{Tu{gr770KZ39QhG%hak9yNY%pt{mpK#r@*^1zM`C|Wt zkQ`~NN5GxaxJHvppIiG3g;Giy>_fT)dkYbQm9tHovuOMdEvg$oJ~2GfI!a6YA9YD@ub$ zPMIRx^{0}Tq$XmW4*8e)shjc!a;70AxZWvfqk1_UWxNzzz7OMSNLyw+83pyNc6w@D zg1i3I$wz2boR4#zY6s3%Ex>Ql2m9gn+DzQ=NJx|vQKKfDVfPy;-qv4m=3SkTvsDkn zU4aT&i#L(GwgO#qnK%4`vGSo-P=m%lo@}UePbDkby0XXv?lw{FC2Y*?meY1oZLRGW zS7Vhcu6MAq*F?ORDB32D8iZUH>m7MRYaxXqxkfHzAFjZvub;F}Zc>_kTa#DXT+(ns z+SCW;QgKN@wsK4)bv|7E-aZCL?!@z$l-`W8wmtKudOF;T84xiqiX(lr`EpE&<9oF? z1A9?%mQB)11ye*l6McCE`wq3&nB@e&^NQ;^f(~py+xHri96i2kR=u%b%lFm``QCdi z-)AqRud4BNC6vu`j8UBnAhaNSkHY7AshATLr%$_$j8Sivh`OkV*kjZuZ2ZyXyNzn8 z$KviAwxfv2);0#zG~37&k5=fC292;9qxJ_Fe!3a-Z8&q2feTl+SlJ*ydYd`nx6D#RWsN|c@v z$Pt^+v;(QZ;X4&##OV_8eUFT5vFdGab#{^%E8$6UxFU?Tf=wE4Uh_X)lWDNeO$(_G0_tWB>O6=BV}#FdnDrP*z$ zCPJ%r9yTKmoYxSgz;}4I&f<0@XM{xPkRlI?lhwW<%rVZcw6)BwVh7vObbsFyZ141fslG&o)2vfiiOw?mJuE_CO9?j4 zRl6-G-QOrv>|IUA0Cw8uS+@Na$xWu65fDS3J|$d#D0;(&+#sXk7%7JLl))(me#YFQ z^S6rP1j4oFg+;S<$K#tO(f5`Kg;1m8y`Xhy6--zC{f6JctJy2a*yu_fxB)yp{AqpsMq5pO zPMjJS|7zMJ6ZMCsTO{sbI&^sAS4@Ej?{b#$`C9}Z`?^)TrS03Jvndq&g|b&kn9Juq zBG~zq1UgOvnyLOXVoaBw9xd{T&YXw1Y^0pjoF}!Rue`uR?$5$cjo$LXaTSxMM`}~m z_t%CuYI1ry4-z(;n|J%SkISSbWnmo$JD*AcqGqIemCq#J?Z4~kK6JsMnjv!Vz5ia9 z(DGu*hKA^cFB<8?TiL=(12S$Y=`DtJ z{oG7JlaAVKr40>9T#{gBd575SbJK;~p`p2dDiPi;III`RUUOp$KR0JCuDNsTj@nvZ zP}aM~dSOKL&sS?QU;c`4XrJu8keOSJOv3e5`Et6cm8U~|3MNnFDu*FQBViptUN<&*s9>(JFz&ka{%?8Hzn&(-u0 z8oE4+P`bbIOw7_hGpAZz+r3J#fmouhmQFF`YX*SrkgW9XUEf9KAz?uc!k`-XC4ZW! z1lV!$AtA*teD=D`vgd10{z$8iQWxZfS2#uv_x5k-*A@`q2-;SE`iTBl%{bj5eMk4s z#T9kn(jsS{@VoPuqB4celTxPCLId5DJ$y31DIY5Tfd1fyxr}wApt+V50k<9g%+8HM zAHB4&-6A2XeC~|t@O;LIzvOZ+!Mabu+84Y`*oRO;YQEkcf1#IoCE%Q2Ypyy zywFx$%Pz>QiD@dh?JxePjgwZS#N`ky-#~Bw^{?j? z=&{l{gCzLNKavx0d;E#wk~ExCTAm1{@zgZH&#n1#=lrw170yu#TGMMnqqebTh2*MU zfE&G(^I^S{%`ahPVeS@Wts764z}7kkgn>!-^5f(V(r6yCRX6&KC`)%2Yksa2Aavx8 z6gK<$vkA5ka=J!-(CXd6P3o*$n>=S>_J~Q}rS}q{>AWjxU#KmG(hprl97V_qMM0(h z&=y2xj$6ElOS|eAQIOxTh; zZVx^Wb`P|}BCX$Z@Zl^+h^FhkVyBG2taLE?f)HViWQWev!z;2 zP*fsNOIf|va$3~HYYaJNIF!jrySWn?Ru)XH5+{(IA4%VOEwUUy{tIoDnvT=B{u+z`nw%A z*^|L(D_%7m5A2%TMl*}?Py?$4qZUlm=QsR7cXS9V;?{#|^jVs%gF*EZc=(;JOJaY7 z(~0PKkIIADBe*@rxnXPj$E=&;51%O2PFiOTqBOpf$4;_|I6yrS`_xAQ` z6&}p{)~{aeRdncv(J)Zw9EDN&ya-l1`NYPA(*c>!m7ES6hAP02v-Q*E#2-t*x@kv~ zsTy>5r1c8JDeIpPx64{uT4b&_4CCHYZpRd4cUGp_ed(T!9y7$mu;D+3O6t0ik(ch7 z7G+?{Zhq=V`8x_nF$?Z{Y80XMc$Thh=)M%$c3lP@n1H|J&+2SKZ8S>AV?$D4@mZ0TW}+}j)7m#DwALbZ090rX4!y2+K) zZHWy}smbkj{mjDV^}6^d0N)e@QX^#{?u#_5_{5(P@icij1!=(LIx=3AF`|=nMfLP# z#~6HNcE$>hU%fGQXbw&-LLG{#7JDDstNJ+r;Fv~91#1UoT#3~An*59zi1bFjzQ zB-fY+@QD8IuFUl(e6Gs8mn$%y{ z)wO<)xi5YI9CwVe=KVt8Fz3#sOVIy})AK<`@6gk6>8kf%{}wkVH}l0R|FXT;O(gd7 z{Kunh_2`sjjf}mPE1*FQpD@mTS6Z?vQWOf&sw@Ew&L`<(+N2agjrKAZ!6^krI;&*G z?^2?eL7?J$qoFX>wMppGf}1Cfh?p@-Il@Oug z7)A#25c|M&ZYZIVG@4YZ<=%T2!81>`q+y{`Y86I=^eLmOy+bd~^6P=8om~=7LTYNu z9c&r%O>LKV8QdrTtPwue)xb6zf+eCsMZOxScQP7k@l^rr5247x&oPUc1We?X00OTH zl{D^1y|vuRgRh#J1Z;@o47JXduH@($(FeNRC^lT8D`##?wrlrw)4>1?ntb$tr%dhG z?@D`1TH6YhzLu0>Cd&U}QMIYLwtV@~MVZI$4)QogE>=9<`t7?v5=bU+qVBHga3FH<4^7zb4n930)mJU++|Q6_+Ot5_Axf-=j$d+ z*eYV_C^yi$7QFBtR2CG^i_1OSNIAqNn+bl1^Fj>%8Lf%Fu~J?>>*3tP0l03;Xki%p z`u0`+1jp?V!Dr8FhR{MYwkQW3AyYA?)gPhM7Gq7Rx(i_`(jvHzD#RG*51J*y5oSi} zmV5Q)&$SMDUuwnMcv<3|<7uJL;Cxo1EZ)TQ*>{W|w zq4VG|SA_Quli+67>hbUH2v`bvj{V?m+1Slp$+UfJ{X^win_33Ba6zT~o&9{FC}Tr& z?S)%t)R7A&zIygKVgg^Zr&L;VG*27$zrbPs9B~)AIz@#3cVlo3f;OMUXg7}D^*xuo zd@wlI4MN-~u^f&#TvsLL+kj|dO*dsAZ7}szM2IjSU+U=fV(+i7O;LarUAgfnW^ zsRrl%i?bgag5YO3498i^GExD&LvM@X$16V1E2DuhN__)F#BHquhb~zDIHafY{*MtH zv!&F>=Q^Kct=Dobq7I~rBqS`r)5q<@YAY1nc0hYKH#4{U)7#q-gCR6ka?dBCK{a1F zfV|uxoIS1{jo`WZfZTT_NWBqj*#heau7xvcJCR%Fjot#YM{&Ef_w6LNWh9tkjaYbt z^TAwV4|N=R?q(h*35tka1TqexNJo?7!VQDNr|e@8cY_ds8}%Xx%(k1YSk`u=NC0ZB z>#$y~vDjq_GQJxc9E+Yq#lxDO9-=o^=3r{21`4fgZq%67q;5}C1>oH{48yD_Ee`WQ za3OTDCrv$w@ponNUYMV8yXXJHj-|eQ>o03O^S=->5&Eo_~a~N zs$7+vnm4uMOQ@oqeUJ4<-k#f>SHQL2m~pW1Lpf{`VT>7HuO-Zz!}y>v9kHG>8;S@9 z$JN?yGr1%}&g;ut9qzk{$-DOrGsHJ;O2Uea%7N~JqQJnRS<9RRVW8N}W$%yJ{dsvM zlQyus4XlF0uS<{c34564{LA2=t!OIo>>l^nY<~1my~k85E93R;U*UT$1nzN1!9x#o zAo6n|jRFcY``0-D637cIk5y&ZEW2}#L@kPJj8QjZQb*~ca!IZboGb+2kXcY^;;D_L zy!tV7aachae8y1ElC#nc#6E7z9KHWeK-=Gk#7-h6ReaEr^-{v(*`EN))< zE7m#6Za;Y7uRqqbWlH2Y@Q?#pdr2hpN0I2Q=JTsdWo z+(|uEc!cz;)hMG?671%W0CNc2iF9pG!vCV-L=VA|)KU*Pp0PyFL(;U-Z4l)2-5VYM zEX{(o|3;sGG!5Jh5?m*I{wW7io@6p{bNsrojW$Ib8Tez78H6o`W)Vfxl;J|41ArSu zg@#qi*ZH5UTP{)JG~O4@1$btD;f_dfOq}!5q!wbiw-~6*m4Ds-PA;{2YpFx>8JRt_ zmE*MF7U$QH=aIYFkurep#boouRZN34&TNy{hLUz}{F$5KdtvqG%AnlPxlFKzL9Q+5 zf{SAElYhPNp4yWoeuJBmbX^ke{EZK3QH<%Jv6}YwADeZ%PiCfRT|d7W3`JQN6X^`7 zKofeH*Egk7X3KxAqf&!WC%~UO(t4L8QTtol;IDeN8Jy2-Yfx@Jo)H9J9C(00h@U>6 zF#NJ~BA>rH%O5#D2kFVi_iyL>;WW!ta%c3!uW0m@MZ%~DZ zU&Tde-d5yfHnmfs%AburoudLV_+7>NipL<<0sM)yT?x(63Y4*qDo7bu7%TFaEK4_u zsHbkr_0DbKgSZz!5|~V(B_1igHKd*J#oL!}!tIPH-;;=D@+`-sy)K1~cra=vbQM6H zaXJ-6e2?$Y-huLi0PeX7>;p<8`xP&81kT3zVQqZe?Z47aqz?oER~Y_EJ(VB|ayhe{ zZx9{~MLxI*ZOe)1FYou1whriNBhr@<$0&Wjyn*}@+! zTNZ23vslV=y7bOL#)d5qhJS3$Y32WAw&2X`4bPH9u4v)h{i*qVo<@{I{EXgz$w$^h zt{dOqfyy=g;v;&w1q^xs5qp1=_z!kNU<~IUw}00t?b7bRq5e0bF6hT~4FG~A!T%Qq z(K+9~N=WR6;4eymv7u8JX!n^!zLegw61!FK8C^xW|0k~c(19`kS!U3X$^aS>koD+4 z(B;{3d2ji@08Q%gU7Y@hN3npei?+efFg@k}v%|rMkD_I{SAn6`P@Cun>;EjxV(|6ZX$TmHR5!`331Cd3LXGi#KUIgd3j+B=WObwU;=)Iiul8gX8? z4HTdy-!>0vdxzm`TYpVyNp-q$aI8b%>_~@paud^Vlf{}R^bcxVo!75dB(Knk?8;iX z>7289^kY0->3V$DY8_l^5wL9;8n<<87BD+XgX6>hIXS^-&!+pvoaJj&se5iBe2UD6 z{)e3Kz z;@R<~%DnDb!Jwnt)TkjvL(kpA9cr*Z9QDDZAwR0Edz>CsOxzqq#mT=N)wYV>fs3kE zZ1cl?Rd-=lHibj*3!D?Y4|^O}Cc5jJ#{pNSVctW?j3KI@A@tzvKHk z{L&nTQ((#!mIt+Pn+(}gRw4xP_s`rlHFFnX@bY`CD#%2h)z&tbtEisGh*h_$*1o1P z1T3-j!kw71m$oozbm@pR>fs;cxdpkxCXNyH-X7V*-VpM6i!PK77fPONQK|&|I=B+` zKHNFU7HE4Ye*j*1Pvp~g-d$dhy(7GgXTSDdVS|I=i~N#@C_8j>#;e-pQrBoV<+!#y z-)PB7?NJo}f|P3=DEb=E%>N|ozG{T}EF=@FzjgraoOZKs9UU{Ojw`sl#roHG6)iIC0@;H=s6F)T#q zuh|z=P2_q!enid*4Dv%agci~)7Kv~nibmqe7YC3X(}6K?}jY2VaVg(RqX(QntWNtcfXwO zvQtAPeL6_luDo1**RnfNyWdcv!Svbi3g`M1<}n}k4sm;Q1_+eRk&k=mKQ@2+05x&t z{hWC0cpggG;3&iOv5W8z%w?+I3;)jmiH#8DgWukv-jVI_k6u`_KT8Bi5}-^UK$l~B ze^RfEKd$5SIrQrz$3k`?3$cBw)A05PiXvzNE$K^k_*<~(niwIl-ViZlygx5neg4pa zb!qY}^d2Z;3!V=U7C!cd$f@5QL?%c2wV2W1956&FG_wTf~X0mA_mDu^U30-w3} zAuFo+1jA{5_a`*5$5kZp2}LFyp?fG0<3tq#e=W!{CFUU|OeWP}_3Mt}423~g%#*WO zZ92;~l;=Z}_Tlus#LB(+5h34{SV%LnnKrzK0GdErP-}6|04zyx5tnikT)z{u@XE)l z^WfVezXt=ce>?`N1a|q@eK<=;iJZPK{ik98^56D%yapy9nQe1}h!^*b8a#fOrF6kneW)NIrb;zS7;Awamd(Hvd_bf3wOc->PbQ7jvuImdqq2>BV@ zU@04Y;H3Xr=28851R~agl>@uWMQ)3!%-~nV)js&+m;6@KCvwWialhz~>k_e?j7HQ6 z*#YsQaEVV81=l7Nlox?7&R>Jj#YZ-g<|P#0v7TZeUB6s!sWinjat;1u7?Jc@o2Isr z&?rgBx5BM1yKZ%o&&LX|<DE~Fi5GHAFt{Y!S;0}Kqh@Rp)4#oM2{%e42 zxW`Y`P4b)f=K{48F`6A_}3O6L)caO@0oYlO$jAOJGniCed5r#JTizuS!wihXw6+;4H93F zO(&^SePf1ttaDI$qGcB!FEV4OI?oZ@NOuv972T!m2aXd%l=!h zRCI6!MxGCj^keM-T47r?!feziG{QSLez87Rk;VkobkvC1VtG@1gi+Zq-i%@h4jO`!r~ z99jT!)_3N3=#jj~mV9{V>|^b|u(o(t7~j55d|skuzCXm&wgqrt&os8f18r!iF#6n= zmR~z>H0M^#lFzP+Z2H#wSE+wJAJR>ft02duuCxlHP2TyvB@@4ETcFFVsFo!>LTxjU z&VIE&lw`MoLELN&g(x9h?6;CGKpknCY?#D|ShL>foc30QQO5Fbi=-acFu%pOc+YZ+ z%a%>TU$PhSCFH*hWDEK&Dq^hg2&+u~2C20#<+QWnY+;QV)YE$)=!))jNW`3EVahzk zK1i6XZw9U3QYOcqu);kW>+qfE4|+txR@xy))sDTuV1^$xix>nuhEnc0rQQYcD8Y0aB*>0>J7oCqr*X zZ&PSSCYXuRn@rAQGUPPju%SjKIWbpcx1G&609$_vn76&zd(0}zf`@&P4qtso*9zzN z=Ld(So@kpYwliO!j`t$@?GYZXt6J85OD9%Y5yH-MQP0*zk$O-0%m=A;{dV&!&IsTX zWlOlP(5EV`OqgUQOuVA-fiB&4gv*}E!W%7%a`Y9>enlN)(J&x-5_JT2@+0>GNU-0B zz{COV?X)12vXZDg#s@++4@k@7i=PQ>nygHI6ABTYex3xd6(Bh|qD4tQ$lGu1l*pHN z`Xp#@JU_Dl$YszUt-?g6CCQ&-r6k59bi{TbdMsCDSqnNapkGMtgJL|IMdfW5Q721X zZ8qX<@3lgEhWa;x++S4I_E*=)@OIw{51?m2z1Pu`rI!KMl7W}n$F>CviwDAG&^|qR zzRQOw)z--!C=9Ce-3z+@?M2lEz}t`n3O({Nsr+$Ic5{zn{d(4RQnZ%GejpZ-vy+UF{+(BZe<^64T>e7U*IC$L-0GGvm9__@1Hgd5fiE*<7>NcSuOZ?k6HOIk;r@PY*=_3506=Pxf z^#zYEGDWe~7>U!sm6nqYm97b|AOoJqNclj_A^^iLHzZ!c4e;xeC`c_cM%v2^31oM9 zaj}R%KcnaNwn1Gmd&pfjBP;+$+G!A;+R5PA31U){>x_Z(?loNQ!o zyntyT%Xr*1@V=cwOX(8#;lNEj-PrrG8Ib_h^O~-Ux3LYN%GClHQHRYHcyPM0l9RVV z*gg9}E3Aj{1@C0==0Y8|?YTT#KRx!Gy zZHi8CN(44BMBM4zMQ*fyrGf{))OIwG5lyj5bq)bC#e2&PiAHYZHAoX5Q{G=)SQWqQ zA2}V732A`=(D%)E0FFsxG-W!mB%NK1V$xxbMKqg3QLwMB)ZvB?>^-wLRsBe+vl{a3zH0- zUe>ZU2AZDa@*uM6&G4+|OS$Ktx`L_7r-vP^^Ya*9A_|Pwz0aV zT&0{0W5kf^>AXSLsR$qcNM!wmUzIaIg|Iay4Ppay*p@&rvJbynLo)3wtETNIcHQSUJ(lz!)uL(hrewA~NA$yx| zv8G(g2}q|MTo+ohnVA9jv^}1<`-b`Id)s#)gw51(wf!xue8SC2SCS@j&=^^wddO); zpf1V08>-&UxejEGXLh4uxNMDs&v%2=x8sR#_KSm05k`^jVb+7YFM7S%%}HZ5<9RgG z)Mnts<(Xe0sn+<;l09!o^61-2Usfs;JqF*Qgd9~N53F;Jpv1V|IpEC7eU8Z4`7^W8 z?aDu{S#ZVd5=aoP*aVhb-Vp?QX&owRCV zI?|`u4#jAw&>p5}C}L&w*SVy{sa>RjA|-XuJ@Vc+Y!ehcTE*7qOsl9cgo6E%=9yQo zKG+Dlw2HikZ6HgJSR7Iqn@Q7MO_x+3@u$jG!sa_I+BpmolybxgH(rh_+HML+p4L_zjJ+L=u$(*b;ax~NJzC{VRpp{EVo<Z0bVGOYZv zDQjAZlNZCl8_ZP7X0}cksNmAdWXBsfhU`63 z_K`}7=g=WeEAg8T%U;jS-=m1n-4)v|UYXf5-K5pr)f%3#>apM8XJ$y;)R~f2fs#9Z z-%uJZYSU^Wmb+xWDF?OGgzRrAcs?%(tn;`ryyFlrAQ;L&$D6{T_MU(BJwH)bJrgUz ziDc)dCTP_XIbtGg=U~M>)k=**DHSG`SZOI&KKI3s`{q+U+UlrwkC%P`o)j#l zgf7uWuY7tdx{E%Um2yo#%Dn0$$w?LoOI+l(;6*vxk1V!Bo((nIpq#r)A$Z^g^C7zE zWgE)_efS^4SM4CCrgluunO*Hq@jpJ6;DTFqhbnTE5g)B9OR|iLMK7(69$q~oV+6fF zZRA~gy^$cZYyG&(Smu}ToU#g>KzZ~DOZh{ij&1N5V(_;I?2{=%*%Cj|-wUbMz6lRB z)*bfqlPL z@=k7x%9_>$SIWjj0Df$E07B0g7&jB|m2Q-PK7m}&@kOh|B^?k(GRMh`FORx|b@ul@ z&7G{3WqxoqEbmr+5=n~z^EYihjN6^1dv|!Iog+iYolJDPJIW$e{?{E@gx*ou3ng;3 zunjmKxons|{Z0|itM?38H_7u(2vsBxYhq`o{0Pqg{bS>~3E$t1vCjVBZkRx6&N=4} znByS>c|f=Gzmqvo(xIxs%2xlr|AZDwPFSYr#^ffZ>D8h&7=q?%t9rJib+JcJxW%Z=~P>^~udAS-((E_Ly>_E?b|5knAS+$w5xv5Ytze zOh?qJk^RtBjADP&vE#QVuW?KK8ksHYz#;CEyOPv15x1HBicXl8weNzv(lRfTcCpm) zJ4d?$ju?8+{bh&%bgthrJqu$@UFj(Dd|Axa~ zR4wa4R2}>rO0f!?&+?|(*mKaKTK?OsSs(+4~dG;iyBz{CO;Jy+21Oh3Mhg5wz8ye6xi6wNW&{i)8GgDl&fc`2*) zcX_Rca2PzIY9gO{+I>gvJY{@&rCYKLUnDub$k5yYoa~yxcFYhsd(Hv-S*10<0i@;a3fV}XtgkR;>W=R zHT3Co8`dW78!48~r6RherCO!zTW9*zd417Zf8eib?3Hxknq}X$(d0Y}% ziycFYs@*)_77DJmP_E|FH3^-TRLV}F>IRtcz+Xi zL=x0B?)qG4F~ojH=JsyueD*T0$H#q9V^0rzGqgjSrT3!im`S^jo6S~NW>Z6oOFjA8 z&r{#XAfWF&KB8vf7Ebub7{TJSC96Tpu!X=mY9WP$y(8d&H*AJ5@PJh;=%*&(ZWaU8 zQ~-UvJjZj|L=sJb6xPyW|LRRn+(8qy0m6o#cwzrNz z2Hhqo;qMM%&1FYw66DUMM(_#G9#)%eB%z!&b2t5 z;kpf=<=4>!iG=^$G{(QHJgBOX=UozpzewE)nK5Y$-CfWtp|_FADxfe9pzBKL5LffM z+N|g?)aZ+#)VuZHs!fn1@;3Fj}}60 zQUgz}eoy>RqU$xjV`A&~+0|}cwf;#SW{3wHNaNJ@m~|%6X&S8zzI?gO8BWVaop(XY zWV=bgKKn$A<%&hkGYB}8m?H^vGrKCBN)fv1ZiLD_`kf~?6-PXc%M|v<>ePq+aaJzC z!b#GcfpziYbQwRDd?pDsOxp$QC~51)qFY4{ALhyx_4kMU%h-|05T=eVkc>}iBL=`+ zVLEzfhh*k1xJ;n<#cw|mFojsXd{_-7$3H`ACmcxzU_%^ByyZQ1D2zbMkL4~>+|go; z;q3TWi3A7MtVAh~v^X<-Hp}Ku{{NCdv``(;LsiUMXuqHcDwv{buTvQJheB=&$8K}E z%=*O!5#oF!hw}b~q*)g0;jEG~x%&S$$MN(8w>BGdb2IP7o6`u_@ep~;ttt@0Wz_Im zB1&8;abte@78;(S0oInfEl*k+kxrYzQ&y4Mp+i%Q=5`a9F&d~|4I7Y9inIGD?yr%o z^Bu{aODmn!;5gF44sJhlfjmHNUZ`B?UXm(BeuL|1PT_mufFz%MBJI@)uSFN1agx09 zEP+nUAbR#mk3qcyOf_=-Hoj@cFHZlwU+C6<>?W3DvE|9U0?~ENdHtAKlbbn) zs~2zHJ$N6KeaXdB4%0*`vmAKmFNRlTs=i-uf6JIF^0=3UkOeC3?h;sotqSitzt-ig z&F7lS&l{9UZhZJvOY6ptRVDcx$8|(G<(_kkfh}9Q0yy{3DmyFU9YQlcvyx2nwh(x} zX~(6`_KoHYgBbygB*}CMcSbalmb2%owK&Xbs>7s@HxJfmk3lpe*-Y+*B$SdGB>$2v z>z!Qb^yVGfR@!ZApV*a(^zDq{jybxy@?0v4Q_K1$B$-1c7VZ{8Dz5zm%=s-cEs6|3 zakrwsnp!{q?xGX;%vIRvF}bD3P?Fr>=TtQ9Dc4}wuynATWb+FPN?u6i#Hd@s5nG?? zh1Lqv_RQqMF1w3um>)&Km-ofyVtbOMk-r{UcYM5C&8TU#bI)0Hv0N?uLVN~k-Q2u) z5!e8FZ>DoPB&4&l8CaJc7L;-9;NCwqll}-Fyo_5*iWall)lpdX z(*JgMH*xh={Ul0-{Z@no6wSJ7VuZh%vkT5PIujOQf9|WB47xJd08&ooo({BG+;+9+ zCE3nX%iUN&Sje+|TMS^u8-qnpkMy?Y&>V)3J#vN!q5-mbrPm|pgk2%7PePt9!-Bck zfiJKza_-9K%sRsR#{@k@S^WaSc3ao^F>(v&rcIOE3)u0V=nzvEa@7M(^810ZReyA9 zUq3n8a5zvi!sUKv_lR#xFsS5ewC@>3NLlC|GwuDjE3w+zcjylerR@4sU-81n9cDvJ zOl9ZCL~bo0RB;X#R7Q%|Q7W47&ti2Us-CC1v(hGEw@@v2BzERF%tJD(V;P)uF|_ ze@^S-Tr8QIDiKTv(_bCIWsCfm{FJZgWIbTCV}Z{1HBFM#Jlv4y28lqL?8JV4C z@fx!2D}n&#UhLw!zqZ{KPDLBP!(v&N+m<+~{Syz|WoFY2MTBsXJCQ zNQbN*2bwoWGW+DA;czSwY+ctEdDC7xR*GXCC~5Wk2mX9$K&{_*5)2&@y0LWY5iT7uYJC*s_8Wa1&7 z&uT9rid0B1=nh_dd-V^UMTG2&TsjYWL#spf&}~g@O4w*km|SLqnqxxDg$~u%u#4%cZ1B%oXO!pG{kxNVWNc7@=_Z>S7MCmV!U z$fgEx`>7si#6MbWQpkIe;7y`ij#Jmj`%?USNxP+WStrx1pjj$9NE(t@%H+BTht-;P zjEEr=k2$~0nyJZ~2Avc!c8fj@FhMZy0uNF$?wMJ)Y6f?kkVCX(jTPIZ|2TGfzl4jzm|RmQbsA!^zjNBi+B*M@{_F z{ffbKYmKpW-R_=3Q#cK4&-;uPr1kGo2!tRG9^hWq4iY}`@#_W9;-B17Hj&><-lnDA z^2~`y_B!OkIs3%z?}KQ^w*=qk{cF)p;3iy4o`ug-XT-H^Y0>mGbtk*8`|->3fpgF6 z+*?lO16lncwqA>5^~|T}GEG=blQY%cpP4(jo28ktspy5*f>v+K&_}f&PO{l1Y{NCO zP~o#MUS5$Wm?>3n@>Ip%y5I8*r3#(4xih9n-!+JkvZ*I6(XuAbzoQ7ZlrUg_YW;oD zq~;5$h&HX)s8d|mORPXdS@^B4plwBH((k}PWy6`*BbX19_bjE6l1CEuVHi^a{hOCd z4ZQsFV;SZXZ49nR?@%Sn3T->S?m|ODZOC6|^qBnG+fdK5sM2Q00p^N26&f7)fkcyO z6wfe(X)ivkbucn9l=*|hhlR{z+uLLV&z+KyxA{LfnqM2Vp15&Z#Px8JEaWn|W?(z{ zJe-HyG~a(y6c*{esSMmB1yZtojuwUQ5H`tb3w=F}{B9~-8i+}mt{wI5j&aesvPR9O zAI(lm7$?pm0dr1Tt#QX}59ketCg09f-!QkLBO*l`>9WH4}y^F!5VQpM(501sZ&q~y8v-i*@ z?|8K`{|DMM$mw6URK-BklszI}3>b9@Khc1d~Xfu*vccJ*p^KFA({xxdj5y|T* z?8^peorZ|)(a0!yuHx&-bNm&Q9#Xv8EL)oVI+~xgig39O@{z&*guvLl}Ql^BtG1 z_Zrp)eN%_;#X6}D;*sMf^k%C={Y}&14UO16jQk0FpE_+jJIBl?SCQPsJrjLRXh#h< zrvCzRi7>F?UeIHjSeyV`@tzxrGS`V?LZ#1M(5v(=jrzF(naAkJFGrjH*?+wUS%pdD z)xIVtrhs?07sO*;pN04vpcKF&)E)1Kt?g@GinFGzH*2d0!snw5iyORTekAj-R876- zG3l$?{NTQ~yLSiao#$cZXO2?F@y$i+hn%+sHAC~;$i_f~uE^tI-3&(O`d7{J=c1*t z^FFZ4X}@9P?`#v`>hsy_56M$-4ZGoAY>NWaQo+%Es5|e@@NhNs(&Oba)jbG74r+f} z_YLRmmJeTq}vT41UhC&QyWdua6yM-Z#3@fs_Y@JZwVDYhaZ z?UKaFw_#lSPdXs}ic%HlNe+DMuA>Xk%ujyEh^h$xL@J{U=wO(wWJ=piuW zVKqs+emQPnRd5hUV!Gi@5fp`RMi;f1N@?@dqSa^(ttOQG_~eoNO)RS<9rIo5qu<3IA2qwauW|LB~%l)_Ab7 z@wb-j8ZaIv^90Z%$To!wutZFs6m|D}z7`4bvaX;J)Ji)UwDeE=yOPXu$@PW5Q{Q>8 zx@LB&tc2-fOWuWvT}}1mr1P{ua>YfmV0eFC*VNJr?nSYlabNs7h>P!H%G?gCZET}Q zZ~r^KjmXEnTPWVzcM=uwBGBU8xb)NR{{Mst zMM}pabrW@5Fgp2UC+mv;d{DByzB-aV>V#d$0lcFOkWjaye`KdWvS=AeRb&8t9Q4Pj zgy}ryNILS1WN4>RsM6!X`>9&0H<2SEq=yKQ&s!n1@?US+gr$@I`6EoUmMi5UU1xPx zB4b+6Qhh7t$d9XXMfWdc_+kKUlibdYkWUg|jF5Z0<-T83O*UB6IG1gFOUc~Be+~AT zeJQ1{O17ChXL~xk{atuno~#)zr`wX%R^f0i;#^ANHM+k0&U!u!njwTzFj7kQlhgoT z_E!jvP}zIwIkZRrkzvUd)_%p8Se4z~(e3z=>zwWAI_z>>CYf$Ba+iT~rZx|dQOKfn zHM^jvYc|V)hq<$o5Q>rr}lDNV##4^g|SQEJyZ=Z*osGqT`6WI9B9V>wUHv(X) z#;sHYSSriPpgCowZK#LP@F z$IR}S*&Q>p+thCNX6DcA)}P(K^`1()($SNiR3)h--Fr?}%8OX`>xH*YF(RrpK}wdw z7r*|QeOnAynn@u<@`{ked>$7g`7=~_Z_;#RB+o1F7=20#C^L}1v8#AuOOSOi)nJ6W z*9MfgMASKauzF)1e2UMmqKd6O8Bw;6SF+CBwq%G>gFkJ-;suCr1iPJ_$TTVX-} zCkUG?R>>%ZS*kr$US7B7p~$E7p8Tfk8hQGi)0@>vmm+_U#YG-pxOGS3S1{g2P$H@hydi#pmt$Ece%c zz=1J`>`RM=z)~mV#Lpfr_`Cf~m15t?kH{{0%Rlx{3ZYiVn9ty_*2J=4u=S58 zhUV7S2e`xx8roQxe+ zkHt+Yq`EBj*>g!Af5uLs-x8uT>xHiFb@CeRaLPVQY0t{wq;gZAkx1aUZTlJNl%|oi_8)dks%x{{(-s60ycs&teSiMcJ>FK#^WCNrz5cI!&gMb=}w@-EBjH zWv$BFVcM4S8cQ*{yS~c`Vl!4S9NC)9=5K56t4h_WL-ig!cXV*`PjN0;FYG-HpG=bm zFT&sB8_29%1}`>|_uz44scYkJLWrtk&El8&t?7S+>fq&GtDLj?>vOb#m4b_tY|tue zo!aU{u4Jv`_*ALR8VC?NqU=Aoc+kN1||& zA4|Skv#rB&z{SVACd;>S;qF!CS)X!_4cNJG9|*kd?DP(9cI>{}ggPd4uiZ<)rf-=c zsl~JdE;`cqu3Tzon_4RBzj4T_clqmpl3!n0#@oj`%(c~p z;iJ-ww@z^ZMHQjzbR@xpDF2=RgTxlB3VYuEEoZrqZW+CLxcH)|w-;ty=`hnXCx7&( zX1X9*_qSuHS0Xl=EdkW{M3ZZ=rLQ9$0%wT%eBsOQWYAA_o?Zfn+E3xe;#9ic()I3j z1B4Q6vR>v0!~eEYP1NhzD;ym!R!wCdBPQ8mffl_PtM&7R0 zHXj6)N}HK~2|l*&tV)s#>V@7fM()uCCo8a3S;LtxE@42XQ!{_c>q=?a`)jV5YgOBS zhroL3Fml>&q4(Bjv~4901Rir7UWtdyk;^#70*ifCsA-QjwJ-wpNg;+uCLT`zyTOhk z+M)u91oebL^W2?F%_Mo8)zLh4cy5q2m$k`}6{jw%h#=J^-QAC_^L~AsL#^uNPmlYpIXc$I zB;2R%6%q7gck}k@kT5}4b@vDn>%IDVkfiG2n|k;7(LpcD(u$YCjx~Okb;6?ZAA7Ivi*S}5jTQN+S97qnSL8e*eZoKYt zY65JZCyV5n0@18I?^ZwFShoSpMbbzZA;Q zD{xh1m7(>#DOG#O{DB2sVRf{_vh&Qb2E1^8RS<$C_o(#d<;$CpJiXOk4DI}@t`kP- z&^EW1>){<}_Hv8!aq2h2VPq%p>A|<$WM9#)HAa(J8Kj#>dz}=aycc%c z{y?#w?R8{QU0~ZDNBbm{jz5!P^gYOeFazb!DGP1U-{$_f$H#d+w(Nwe0W#GFg_`t& zpMo#wbDYoM-lKY6{{6|3a1m$NzOwqds#sRtKQqz7-MhvzY ze@Z!X+`dD9!}G1EtPFhE$k(}4E6+x4}7Vd=6$!aqXr-ETi#j?c5!c* zspvtFQdJot@pKH#Iyxd+qz!m<$!EuXk7{==w(Am&iyatgGtpbpM&}RG#n;> zDj#M^f(J!_zA6^0W!AimNR-aZ3hoE0Gk;n0)`joz%SZU=`UVyR zXbOyKUABvSK^~t>;z&>X_>amq1=TP3-bjQl30O7rwy0^by5TQpxdY?*TEQVI;+sov zGEmx*L{q_2>SAL=w@!SO-xHx&rnX?x%0hRJbi2`jbUB`>QAZv5*O?C*XPI}o%CZfV zBdBkzE|YM=WkpDSx#>avjPWlIk1fdXZr>H~mfO)OG$CW!u?mMDzG#{49oouS9w2{L zLH)L9?;`DN+txzeg8WlP#J*Hg_8lefYw?_Z<6X4fOV?>%@#%mFcyCZBPO_T}*+66c%9mS9ig>0S%gV(`ztTDVW3NgiU6SH0VsZE_g18*w${Zp@S z8f!sNz5hc|X5b2H3~auwYTgQxD;A^f*d9(;$%1Al-Q@EapYk$xBL~)b~Z zCTZhkaj>1o8L#V*RX+Mcw{?pvt@?uk?cctbkY_`1bjz4Jm4InB$Z z)zFNP^hogX*>FfY7W(OPaIm;44BkLf;f0O%dGvMC_V!p*!ETgy#7j{2(~Gmt6Uj+O z{wOIhe33rK(+!&Bxl8YC_Nv8rVKEsTWO{uJdFPeCyz@}8RI;NVW8B+ieNLe{3lh1N z(j=T0ULIvJp>s)a0`pgFli*tTuylu+)lSe#*;>(1yxdVP?P}~l4SHR~GF@%2)Gt8@ zbek^YWnE_n$T!S<3)d%STyGx^iNDp<$2il7>sZKgzcd;3lT~u9ML2E6RY~T$M#{Z8 z$rVPZG0rccXQr?EmC1D;SbEVoQJNZ`i<~Thbn@`=oq*jGd^=S@GL)8RCAqZ z9TW8@PH*>D=8o$fo?I9pIO+1*JdF{!uvG#K7O@t!G9Rh<*c_S~B-!D?>xH=A71Zrs zE7_y;Qa^EAHNo&KuA!sr8xTIFWRjw-dNCqgC!RDU{*Wu4V%y2r(F?dbr@jAS?n_4&>xp1XfuDVPf(U!Y&!XM+ z&Hdqdp|pDfu@0GYJda23nHAo(;7qZEXp)aJ?7ILEe=odU|LK0(@A=|u)%T$%k3L7| z-P^N`Y5{eA49y|_$E<^>W(m9;{b^^T*GSG$h$TNyQH1@Lbr6-jHVT%sPyMufApt+^(|{tuWq)(D46 zEkTt+0q^L~j`fJpQGQ-lZ`sZPrT+)CkF#A%0 zr$R;K1Df&Q6Occ$R&|O#}V$+$vNqHC6JOH`<>y5gvfDo_p0`L5^Lb z)mb3s_7}8hXgz3IY^CiuWS6P+u3k-FNs3sWZ${sb%-WatGQ&DUoN_Xii=$_@5 z>m9OiCde)RvrE*|4t@Kg5RipzWguSfsJ=8yOclnDQUBJZVW? zQ&co<^a8m9%P2zn2hOsZO<{Uv?vsO}QCD5hft+jzYDr$7arBwmN%k?~0nG>NugU^+ z`G3bG;SCX`lo`)zs93^eejht&#VKp|Q6JSH9WfMBXEdf!$9rr2S2a!M>(3sy_8)&> zoKkg~zkb)#`%1YDx%+5LX}KT1f>Tgt5R$R%*Zo|n(uaA>VCFfr@X`kKa{`ev;g&CZ zp3MK%xwE(_qU^dL*`*|B&B4I<6buvgnI~-q2>SP~66JV`6@Adz?@ahb{}r7P-s8%o zv37XSb46OobTvEv)&cN$0gnt$(wAE(W570B>hQCFWk@<@KSp!E_ z$4yt~lLY|+^?TaSML#Fsv3!ZI_{*ZG@{4hb_%~a$g|{INfv>DeCLQvNxT)#=}dCbkWq*R96t(so!B{^=8C7tO5PdoT@@O;Da7cL_du$9s1ij=c6~NFp`OS zT#uHd2V87wFh>4b?y*+p#0RhRO%W<^@>Q=d_4{KsoFY?46J7Dz>B7t1in`Cwglpwg z$6x@s0TUl}8)G`9=-?GUcCp4|!{q%k};T1GjfbrELn7j5q6k=_=-%7nO$9!Ds~e06R~0n-Bv38J57g#CYyQWKIF{?KaxFV$px1H%h2BQ z8(HW=v7hS-nY0!V&DUM3;}fd?$eV!pPnWXqAJ*tYX?n!=$hYIYO2U?Cdm>ie*gqx( zjvtLXu5CK5*%~7ENeUvTG(%Lv z{RgWM{ZITmp%F=m#L@R_?Vm4EwLng0ez06#l@rF zo+YZO0>j+;I_3XuHh?8t`iuvU?@rgnFIUK>)q2i@sGP6i%j_OH;%9!GY_b6aB6^HB zGv%ceV<^Qh*1mEb-*>5n2e2e$#~YxsR7v zmdxL(2v>huUdIyk9Lno3 zdd{Ee>vKVULZ+5vF3Bi0F82-d+LK$bJf#*@AANm^EI$l}2%L!j$fW{QSh7F}WaQZn zwf)G}cK-AV95J8+L>}>H!c9stjXXafTrv5h40lVtwu`(uZ~C^X^2G^3V*Fdo+k)@t zNlNl8$Xo&61wLq>>Z#P?T2X{L7v}OvDFMqc69MlOeYqsC$qh4iaW0s@X!{`YO^D!I zOBILG`{hUT6vB{#su0~vPm*?$(vnaTRk0_0PTKG&2*PD&+m4AN{w$;4yKj~mW zCG(H+Wa?xsx+0!Jczf&nQ;ftdy_5w5qyC!!%Kk0J7R|9fPdc9qenav0fPHPsTsZ~<~a2tBdgqNTQx$ggB?MM?HdU-IFA@0MR= zlzJ$xUmnDkk4Qu3g+rjz0c+)PC@WRC`6rU<5DvbP6RBY8J7q;fqlg8z<98BiKtzxC zj3ri8sjk%fvW@$gOs{VP(vCHGZDp?CaXCiJ*-nRMi*s}wV2=9~vdxqWF@>Vbq++1j zS5gYsC;H+fHe)nrdwvTUNC6K_MxNY+JY!*q@DfIUiaqOmH{l^;Y%%M?AE}Mxup;+f zgAy4ZGfjSc^2))BstM>ZzD1XBi1t$sRVhs@gvahk!|#oMYk$(0l!v2aPr9-z;RTZ0 z@%D^F1Ed`sl5x}VvFhz0GL1~lggX)LH!T1%EnJe2tTd~=+&QS76@4r<^Sd4YLbO0B z`?<)e`T;sPSrR~Z$45GZ=PhY6c^Xy+A@vf`TRV20_{1h}fCGJ6F*}_VUr8T+1s0Pk zjaY~q?uIY|9oNm`0qOwxkUDKh(ejDL9Q)cR3al%1p*vcnTX3PV`c`fXh0rjG`mRVt zZ_MbEt!SY?Zg$sSjpf@)_hhZW?LV{r5zq&$Zzs@G1P}2K7u4pcr3&K75fS&u!tPfJ z;?;?BrYzuog~fL_J~+w5ni1L9!u+^SAwd&AUAZ%Mh!%R}6J2udnV+)3Qu!!HA1VOF zu!TE8_S(6=Z8K`Gk+R+=hg(cr?EQ-Q^1Gx&UwJ5C(cgg{RN-lDzWbFOt-z;c~4{5Cd6m?a`T7B~I2nUs=c_?vxq zZ3$!S-+7mA5UBzKW`Fh)E|FBpDjEh58grlo%J0}Cx7?u+`E9T4vRNVX5>i#GZ<-H@ z#n|2=sFeirm_9gr74ymzpP=eRt1@D^IjIiTdqVx2md|f&F27&B^QL-cA*U%6`j|(=Uzfee85fCN7sRGb8>`nhX;7 z?;?B9kh8`y5q0HXcO*CUL|R%{FRG(>g-^@@Y1AwGRjuFs#C0P6Ce<2oUy)x+zi&H+ zy*=S!qWaSiqo5&Wg;&8 zM6;TrUO&M{20X35I7e9JDlY%e^2tx$#(7OqJB9EiSFDgEgkk(TJdMi=Ea=z|+_kxF zq2@&|96Oy^HCC))?xM8lJsO&yrNl>yb<%T6H1^iI>BT`l9%$fy{GJ?i`ZWR!Y0{?n zJyh6+zi3*dz(@h**e$JelG@&=$|%%*I)zmjt#m~~*d>AAf_dL?MPj2EypjJMi4he? zI}ydhNoB5Ggdg-IwZyA6fS3FQ^Qk{F;pPvr3K!~%1+7Xf$ybl5_q-$Y7^30ggWoJ- z6uC`Ru;)iHxU#C25Kq5neYMFHULt7z-D#0-;5&tO`pwW%Ad}rDV$~9hIG&kHehSrd z#3a&og*y`?wy^(?l^u5r33)iXQ^9J+asS;{EGw+9ST+H?fK2I3N$v=q2yQ?YT_#;t zab|E0*f7u_&=AD{#W2F4+|btG(D1?_US?;Ncrv4$M)go zeZ6d_Q}Tjb-=J{9W+7t^x@fN~jPUO<&HVgMUIr@Cm?05%9!`8wSTJd2ESAw$3f?8O zJr&qqtw|Xgt;-y?;>wb`v}}4QlMVjSv&BF1ctt?w)>~DLfmx(&h(4y)Bxjk8dtjg* z#=)VPZ>Q|{Z97VF8?~{_jOKb9jhRD_&{6RhLJFRg^jGboGF5c__mNAHTJbWx)I9Y3 z%qAAGlW9mMQTT+J0XWq(EVL|a^voVS3wA$FWXV#I7pV$#v$Ag3`K3QS)DOP=JLhybcTIIq1a^V5 z#8o@w8OzjlSDMk9=yQ5hIazR@zWI3b=H}fDBklZXr=w_V+Ypxk7DA$sY&vk{ZBUR# z7^pnK4q2kTdKIT;e21E!FhAZ~K`RSfC>C&Q1qv3AW?|9eu}ieW9YpL0O(Q93TV`S5 zcrmK!0_uLZUQ03NEK(%OTNsC1y-pG~p23^<-Kpp5*w^O#*se^k#D?9bYvnxcWzplb zgu#Y-bot&CzDo;?djE{C5&rmQxSjqBNo15n7&%E%@w$hCd}jc6_Z*e)Lz+Tt7r?*- zqr)eb0b_(ng>0F=HxnZykY%#-OOLx?_rG)PMoTQUP0Dnx+QCgMx7rF$0#5b79TtyL zQr|&8Ar#2>(zsJ5bfgJe3q(XaTygptS>i?>!7(>LORpiWSxDc<#y=Zp_&ywJ=AV&R zSUeke0@>=wlzO( zpn(S*4+=XkpF6VSBK56$4gRJZKmF}@_!De@$6_8M+2-}23htF0x=n)&Lk~$AH>#Sl zP8)qUx5E1n`p7puS$3xxww@2G*PZL`uTv&BJNr%_@ZJuZUpXBB(Bhx4o%7ARw&*~= zHGhZ~axq*w3ca>}lCyOi+Fa=8z5+gJplo1CEZoRr>n??TeEC4{o6vI8;mywji0}U$ zxpz(S5gR|uF!=Zsvd)&2)3AOt6ux(%SpdM!MmFDXA(*T!h^4e7^w=zEd}`3X%d%~s zFc~D8)W5oa%0UE0yJb~y12qDpT~mNI_UXr+=l=brYnK<>&g#>q5tx5XoJ2PFtzbtH zhOqnRv{e`Dl0LT0&au*-3hNi0xT4-!--OyKmp-n_S~#F~=UYOv+;F;a--e*M9mHx} zb$TZ^DU265cd$FsIsloyq(pWeZM)-KafW<}+7fu^dUcns@2puT6I}h}k>;!mhT11s z&aK}Wu>rx?HNSyC;Q9-Kz43belkT0uKO+0J$r7(Bvq_LHVbb#FvJ5Uk-t2edMq;N^ za2$GnmPD(aH@@G0+r=2~>J6t46AB-I5k^XeWV#wY;J(}`Txknjb5d(GKLe4z&6rF7 z^ho!#9RgoLEHmS~QhYebB%hvsIxQwy{~b!|?3}Ont^?YWnVsWD$EfuvCYu`v2ky9* zC7U)QQ&1QRLW9d*&r~<{Rgy4X4FbQ!eLNjl)7<4FeCZUvNDC_276YDSjs1mK~`J?zj{XHy#&b z?+b9c`#IsCH5$;4TywYi>aQK3l6;Bv1HF1h&xYFVxP)oBs_-lO1Go7IVBX62ruY6qpESoW!;nftH&A8y7qg2 z{B8K~zndo2e--0pPdg69`O^2dgHK<}2rBmg5W$0Q#XU2x_v zH^OS$`E53}*iMY;V+)KHIVdeY=)#VhmQ803=5Z3FY%f+=L>+h6rZ4RLqWppdKO3xe zy(t!G_JnlSzqAbp2s;2~mViLl3BK2gc6qbMJYkQ2mN>?B`e%4&E-i#!)GckEVx~lE z#COduJG}+2>>m?(gWp2$8)}Bk)0ZTd&63@}Kq}Gn*AMOvrYn85qx<(OVGgfH!tnTV zzvfAurvOEij_zmMPksH~a>arpg3*D8bqXA7ckL=_r?@WkP!HE^}%dD$T~3Hh;2a8vwMuT%KJ=={wH1`x+b^GG(7EiK6LSBZa^i`UqKdsB1Z1ID;qh#59Q+p7Zl1wc%a7NB!Yn4= zWqtO(6TI>4Y1AI=yM$E~?7}OC{L;zXBs?gl)wf^1|IrrX?v{gu+jc9uby3?!;wx~< z0(R5(rL$|gERvrn`|P#Rf)p(mFaZ7)bBc znr+*2L#mA+G0t)q;e71D3tKbp@p9j-F1^t^ zzfSYapfn-YvG$^YJG?6Wy9@3D95)uVI7&?FVGGQeKroSn;nsBR45=0mgQQbJ%btTq}64qBrK_Du`VP&OQd z?YC9jneq$d_{e!NgOjQ$dW<~2*n-~S#qmTL8$tv&b`w|4A4k?S8fW8w%RZQu#9*nq z9d`5@Xf}(1h{&pOf)2D`>EV4qLxE!GsCeVPGGE?zAJqmz)GH^r-8*Ai?@g*+oy|WDw)S+3HQ=XG$HQd^!_XtG2+k`^*>+r@UeF;jWQjJ;7o@w+eXrN)c2n9=j zG%km0ww`UauG?XT`c*2+Wy1fQER1Z|n+n4R(k)rMt>?cgGbyt4b{PBvwAo;^h>zcT6L2%K+`~MpOmWqfAVV+s73*NVi0wSuI_Om9DR zyhgQNDxihZEzoOnZs1*(C(C3BtLb!AR#t)?1jPzHe<*^JQ8!8R_q%E_&FKCSrjsoW zi3RrE>@MyO0(~nU`9pw%?qFyo`%8jNcqQe2(sAGo?*U5RorrLt^CPD}o&5AfdT&H1gN=8mngg%8A+%& z4_%30Xo1iHdzQ9?7vJPcApyF230imkHDP>=6}IwI+0r z90+GYQYN9{o zK(jEA^IISKkcE9dUA2&Q37v{?=;G+GhD*iBPVu@YB~NK-gKU`nPO?3VPVY$c3x8BE zpX`_(lW`-xZ6^Y_f-0;Ms5Zm+Z97}^=!`xz(2`*5c7>I{{|$?-j_6x@+`ipUZ0;BD&fa3-Go)t`f=wqC?XTUnaiw$+s?^wZ($K)CQ>L=NFj z7g55q?a)oTuI??!)k8^w4@kjfbXx(}m}Sgw)ZIExmqbBg$HI+kQN0oGa|x`1ZukH*-Mch?wq zEl6%_(G>IXd*-gR0kh*wK;M9XU>V8zBRjjE7KLBpwr!@PzoLn*Irm^|x#{y15@t6A zUA%D46d`6-xov^BPS9Y<>GlZopwiOS3yYG;^IZ>-PfO73cnUVqFldk?jMw!lBA;Ou zkt}ukQ2~@#Mw>IMgfFhaamWlOWH=DiDHl_9UU|#-O*a}ig1N9vnjx^y6n-#G6l@AV@xNrs)b6cdx%CJ6rg%!_ zE)mGcO#eS478}!(rdB<*uOm_EKRCWzk89t9T>1_VC~n;R?Tc?Ma6cCI9+q%X-RFew zR^vbD@dbWl5Fa;kPQ7&i2XyG)G&~9oZs=yA*dh}lnLcc22^>uPe!q@{;>@0M?l1zY z>8KONT^Hgt*ezE@M!nX09@d3qb(7wBw46>OUzw1+!a{Z=d z9f?!Q0)Nw^vcA~M+{*6dHzKI2q0d46Agk>{#>r^v=q)a*r>)6AL~!rCTh=Ly`JS`u zKLu5R{hGgOS0Kj&Bl@)1M4yfzmnY3>hvujb0mXsk&3ko$sb5+i%gemhhDSrc_Xgnz zhKUOMm}u56R-RrS))vnH8Fc;XfQiP<%f~~_Mg5;)V`?sAYHltrE>mh#>i-SG`~N_A z___WG|MTJJ;-cmk{9m#E3-O;Z{}KED;r?gt|CR-Lc&PuwaZw9!bN|1}_;1wz$^Va% z{;NEG0ct)zK5G8|@_BiA|5rW!$vlEW|AG1!`cL#f|37Q^pYng?;T005{!jdWrTpK2 z@IRV_?_d7^YPEl#{2z(@|D7l%#wlm-1t)osbcM7>t#pH&BrS! zA%ThZ-+khj3&-I4G84c6n>U+ETqHlv` zWGF)yq(d!lyIy-xoKqii;`h)k3Wwb_^ljz)w)>6_+6M+a2CTVufz~s+cC&oC1~*@y z(jI+*z*|2b2}biiF>%)i{n7P^=9rkxCo0RUja>-mf1YJX(u(8H^N6Zpu;tIY4c@+nbN4HK2Cz)FN*9(__@GJZBZx>H4GZ zEetGJZc(dBW@BS`S4{$kOO`XPA1_$RvkX2YsLhL(Gs<(5HKGt;S9&M&r#O+xel}(L zyoAO-#+jJzzx7_X@I478QX}7Kgsf1S4UU?1O^$zctiOKPJW|(%ErxBXMmX)Nm$Cqs zp%XR*i@`lpx-MIa!4g`nMe_2(IvM2oCrU@*a>)mqCN)EZQVf3->q4dlbUv%sif6kr zgk@2|T1s z71+8A;^~oBhtc?Hn#|Y<3}s~<G3HtPT-i9 zu^U!K_iGGWGd`m_Pp}Y>C6QbJ&#lk*Kej`qS6R6Az6z=FFAFcGHmg-gI~3{ z$zCmH*|B0fquLJ+<=KU4X$C|$d|_hEAHVa;jD1G6reR$OCABgv&8_J7cNk-ZbbJB` zr$uKFgt+E%lR`k0oRS#h9hzmwm1>bK9=^uAxzuQaGAS^1HsCuNX)~cRT zo^mWQ%*_V;k(^dex@pV|`iwvt1-o-a(l9?&etez%t z1k?&)2jw63qo_f6!iXhzTGj;Bq=OE1jlEbMP6S-u*rc6MhvAmWGHK|vqD3p&`9!sC zeC%~Eup31fX^$?oJs%ucI}O#?{ViQ__R~EJl|Qms^RR+O6lp08f|(Cl)J2ErJ4j8P zZjkKu=4EAtHA~XZ1UDOuEXj`CybB{>Ay8_z9F3<9D7%eKZe+6**)2uvK9agiw(+uz zjlG`WYMUXza$eLJZ6aXXO#bOWU0I=-MABaP!BBJolfrv?Ln|fs`^tV{^JJW$)n*`0 zHqK7d2O44oh(9n(p}T_K%)~Zd6Xj+KP1(57sYW`s=7;@8Ah*Y5)>CG-j!j?Yj3{H- zQ+!7Q`sK2FlYJyqnDN54+K+W;%D8`qo^hX%-g3i6?^(!3WX@q+B&Bt6qxr|dv*BPR z32XVmPqeU(uS;`CyQ(~p7MIeZi)kX4OVomX{=)a}@+%`)3P}`Spx>?8=I7WeQuTB^lo_5oXO3osY45J5p10Yu z!2-8;%uH7bxdqsFd*kY4-e&dE`Imf&bs3 zUYLiMi|@b2eQs(VK5kxKf&YEzp9(Up;a~M$lJIsA;xDM;#r8def~3`5eA_KYT@swz zbJTWL7#TkZQlk2F;&qAognmV*K~$HKL&L^-haUPVs2bY{?tA`}Bk3q8m*H;FCu!fuDFJ=r z47P_&OG3+QE*0PRJ%|fX#3o86doXEa;!+!!f#f_sb8Bup=@sI z$l$PqhpM=TiE^{2g!}b;;GvJ33B#=UGb`}5#~j{qUkevc4W1Gfj_8gKy=`E{}Lzs zF9RWBeK_!l7n2U!F`8FTIRRiT*TZFPP1D)0OKU$8(X_wYG>)njN@WEQ>5X(27&F&e zbshpXb$VpLt#zYSqAm7Z%P4(R`kOZsFe$+DbMM-gvXwQx0kR*ZHcZJ9aT@B-Ck-y` z?b)KswshP_g)CQG{Bd!#W-$o2r30vYUD~%k1d|#^gr#8{_!p${vI^F`D6%FP_+P>c zgH|Ru4gB?nPbGazyB{VXAM0BJ?2%Zw6wJ4RjurMt(wg+C1o_%~PX4h;5`&hz9%&}`;O;iPq32$*b z0|cvrf`f;|edQar2x@948ovasM?xo_PWiXDNAIA$`I27NSn8#%Gba7g%7i?MDZA!^oA7=(PXeAD*?)O1E~+9_?0e#hDkd`i8I- zsNi^&`o#=2BN%2jJ$!im*)-66<`T@dQeU~TOdNk%Z|o0>3>e`ZfDRfxJXD;gkUnVs zTc!m39#mfhQ%e#KoQI9Ldc*53rWe}u`<9XBbwD|@2zj=N6dZ5~-Xb=MzVGVwKy9vb zKKX*aQ$jVO2R^lrzrta@X_C+tkp0X9(zU{|V|14BlT|=bQP7x3RpjoP8<>=u=!qxL76y ztpoIgUNrZd3a=^BYnMD~d6o?Vx2+joI?e6`YhN%~f%^M7dcmguy4`;H8n$-UAU~Kh zjhvaaC5dWlVJRR(=wst+%8PD6K)5|t6RK;Fv-v0MJjHk#8S+uDxdD`N6|=2u;qlaI zdT7JkVgo4k$vY0jy~uRlv9^RggGXMaA4{)3*6b_a!{i5v2I|9!2J{Eijr=)Y{2oJA z<6N;X(Lvz}*`-f-HgpmW0*A(fpfJHKRS$=r9^BwT>Mqyiz#q?SVy^rW&OXb#_b|U- z5g_@g@Gi$z%BI6*=d)4wOU=`5#parPF7#VPXb{gv14v#cUnVaClQ-e-gL#W470)k> zgzda-*tR(GV&H%}nGA>wL(;mh*Q!|D_TgnU;`|oyD`4ZxLv?*9=ekLi+xi!YHnU)c z?sX%!K~O{=;cNPK8r%`ac?Mr$TMUbn#0DeE!9PD*cRi~@;ogHmmVlO}B1|fD_;fI& zjinX>UK6uja&=hlfmO|(Zs|GM^jQ0FHWM&8t7f$2W3Sq}z|pH`4SMnnTk%^=-oWtRjuYmnXr!BedO7Vngt;^a1ai75zIgqpJKWd5s86RJ(9-Hu_u?wqv(MHzMU^FU4l8xdt zaxtzX2my(=pR3`R6MmpWK^Wvb)A5gwlRDnQc zT)crr=zH~1pV6hM6UK^^HQU&7yeYcYZ}#myWl)T_3o|rS8TO%@xsu&g}+mu z3b-#ymROqp>0m3(`hL%PR0xw8{aM-AkYYiZv`Jz?KQ$^r(f2w9gg(9%isWv7zswvA zI`jPw9dZqIyvN^FM0{`gh4W2#E=3YfhBq%zW6IsbULit0)vqnF*-10XmYJ7;U z75FV^P^zf1I19RS~uAXO%7LdEoYTVNQ9g=Dlv`HirO(?x_TZ{OUw+T^|%V$uQhq1Zzbdg$R4!c`r-cV{Zy-?llR?&)eRKpK0}!;^Rf40 z?zgZVMqO7^zKPART({`;Cvt8w^J9aqU)=e?bq5M*AK5?rGc~3*`i?Di-wG;W9xi!5 z)hI8( zbHEJi@;I>Mdt?f1kk3x7uT!j12@LesZ*F}h8qp_owaVUD=X}s9ILT2 zeAV_WMPGZ!=+>||hMrPG56H1nwcU59Q^<&|^+>twdPD=d?7>Utz+nz8^c)z@F`h%S zz;4cQ?efG|XKql8q1!azWaJ7pIE`yS6(n^EDw<&*&!HRmcpEFR-FN)@414V70&vg3 z8A|9yPRSRB%gB103NK4=gE{8VfL0Tm{|V+h7S%7YBHp)CQj7JzIRD&DsduUp-7qX^et&JdMxt;ylK0FF*Up|1Nr zh7q?0=Uvn7d}rJ;+PRBz-G1G(78m$^+gjbVUR?vcXSJ^5iGSa+8Q!qEcWsB=wi9vwDturr4w85I! zwr;KAtGC+DJxc3)4_-C5HE2Lzt=S^ZNA6mgLSL<{1u?#orZ@-GTf5)cDy6W|ysr*3 zeFXH=N_x-0*=uOSYdo(dDQzd2L}_8|<$z}n3&qEsfc_g;cn#_=L5;*|4k|w}7&=JM zDfUYadUqP}9_|3@TKi^-8T8Kc@6MXq3s;}u+q+RD%zp%1^QTE-$lTb_q7z4uP`R%zr%Dx94!W{4QA-|YG^Py zX5MRl752y+GtRLtHK3`1%Uf9K8rpe{(Fimb8$8QYws7 zVuqhoV?HIuTwtG+;Mil#t;ZS`m`Qce)+U=!G)J>2`uvJ76RMq&e`LVg@PtX|dxP{N@a~dn>FB zsdXmJd4~H9G^YmZI?zZ7o|Ebx_ao_S;En}aG`L$F)~CbO6u4-$$2yJX<4*uVhnj(@%i01lVb`$5PNN_5T9bULsgNjcnBn z7@R`>rqHTttdeV>Ysg1Z-`HgODJYM6@hy9vKrcvu-x8lwKvKYWSYY38z!5UkjzA%_ zT@z?EDfVIuOU3Iopv)A0%nI^xh80Yq4fKFDkv-9X%H2|RDN z!S0BG!3lJ*R4Y(JCtIUm_Mc)UW7!BPG?iYmjuK)(td3Yew!2)jDMcs*BC7w<`a3KGWY{Z>7FTUs{-0v3QknnygTfZt>kQOGjc!V z7CPoR_?xf&b=ch{G=mtra*y@dz;C~{k(RdSYS`%3+vO#Ez7Eeh?2ZEco`LtBKq5{t z?=7gRktVbU6|StcQ$&0DIygXs{@e;31BNMRw!>a>-&2JVT1bHfIQJHJd+3wCS}UxU zbB-CLI%QP_Tax(Lf{)}{qZF%<3a74r7NE32XQ$sWk;kimA7k)c&`Sc(8*o3-u4asa zUYJ;)nO1S2ZC*{(L#1AONNjooGtgopi)8T6<-kZTT_pi!(l1)elM-uY6O=?yPC%Q4 zBZCy76(vt)sIS10U}uufI$>y{J(I~M%H*lbfwx$`&`KV#1Z$RrM7~~noF?Ic*OcC4 zJ{x#EJy$*WbSA9E@=(%?Jb3qNz&4gQken|8)+fRV{f2`#I}>-JABihXPhARWFgf65 zqMb>vCUqoww#fxr+#jq%_Df#Xp|=TqF2sH&3L_M)@W?(VAra?Ip{r!#B*aXP^~%8Q za?#7c#TS5(8e9d~Q)r;6 zaHkZ#xhKGN9D015SDwHUbl;?N*HhU3z4Y31M7WN@^$KXBb4BH7$F*pZoNdL0t!gQ+MfgBHHTcYyCYghXCyj|+5xKJLbzwct`MWL*L2mOx*mj#Gh7 z$FQ`A*i;_qTO2&-m1(<6zbId?Uz*6LRv@g zJ7=(T9+8FUdNOVLDZCd;+3O2f*k|zE_VDq}12uSGvn^UrLx6>M(?&jl$E^mXk;2`= zcwF-MF~Hc$a_9j&wOfyxJqj*DT9~5FU5rzyZVO$B-oXraZee{o>^N`XRQXsaFp~;U zK4dn+6fJ0<`JC>RyI6@!FE6`~p?m$n;9G>ZWz|ai+MDqM}uw#8*C!*R4 z`e2Q3>?w_{4ufZp^1Eo!2 z72ZK~nBKh@v-WuOWA^masLiG89D8CWuhY#yAKMae^xy$2>v1NX?`gX_24A}^Pf8Ap zW(5v5H(rs0?&(FDVplQVaS9Ew)N0kR?HX|wdh{B3-#X}X9zSw@o+c@9$0b%JPF6c{n2 zY#*X^)OjPwF?!0J>LWm#fY(xPBO+kDt&j(X{>4_-9sT<8*~Zd96UBnajcFY-?i&FXQgaPXx4=9KaK>DGaE?8`hut*_Z-K{P zZItDHaEF)&rw0P3V+dIaJwD{FyJv!w3 zEU|Jk;C(8d&k?tx(-OO9hF0h3(fdBe_Zj*p&#rK{5a#FdnXLs;1CD+q`Fn&O=cu*B z{$V_?6IC_x@NEFELpA{>yzMdOvDAF0(4CwXJce3>YG&AZE#ztkIzF>m?$Le*Og-Qy zThQYI5!I<;!c#!95*8Qmsm>u+PVl{g<~PO6T&^5pAGE;50@1#e#+YJd&wx?3y@o#L zkO~cOwZ=NSra8rm`@NksxLSEuUjvD{$wn_8jSF4sB@x43y9t=F&|%;mW1$O8j988rwlcjS{UYaMI%p%oWe(Gt4Z8K}00CgnK30S$BoEiDBG=)1`e{tA;`$X%gT$$07< z6hJ@dF}OA@z$NB8g^uaAT8#eo!WsSVQ`M)n=NO4($LHYH^tIC4o`ps}b9w`=bfW(W)RHN?EmqY}z5)%`KD^IX`1y zgZ|)Hen`%THZQ#)W8GPzXXYAC0y88lXxWUul;~;5hhj9BPbkspGoAx)5ir*R(jbeS z9u3BjM%ay={2R>iD-qSCm&G-t0H~eo(04&?fiMidnDN20KKMc|prcHHpG5u_$NWe> znPD~3!1xTk0~6U65unYX<76RKgr2@_`h_ZdN7B@|di3GYKFqP2^p!-Q0p{~jmPhgq zC1_n~ggw@(#;3318Y2{8@XxYW=00WE1>?X-CjE(oKLg$62Z$$vGYW}z2JK_l4_5MM z6<9Z}XnOGO#fSBZrLAQ0yTsB5=~v37kp|$)A-N$R9r2%P2gRBveOA@Ma~45!8UqtC z{A}sLZ%Gf=L^L_M;U820s+>UP5cjgriinNj-p+oXI1a!T%oQZ%Q1N7l73pQTQ0vNVc;I4uiBwII_#nZ-hXB?kRPS;(Pi5I z9y4)VOhAi-h7^>_pEh_SNjJpzSZg?Vfk}^~xfE73J%DWWfV*X3@Uya)Q+fUh;jIqz zcdvo(5%iK9&>k}Q)>?2fpD#56?(|H%fWFF9d$Bf)XndfGOj)iANTLEORO-nR(AAiA zk2&_h>q6d%IXJ@v`Uvy5T8uN1%pM}{Q_Qdd&L~xxGsFzVRJj1>qB#1vXgf1=i_!5d zc6A47MvJ!qZ86Jch>YjpG!uBS#@HRyx;uC$8sWNv_MVIKN=Op!l?wWyYfbO4x+mcY zP{O%M>>T-lE6~S@T|bOi$PV77B{aMH(1|yuV#{5Xv6z^7`oUVn)n*F&IESI27PrH#eK5w zoAkUkYMe*V2anP2NcoF1=zuPup4Q=3;0)#foaG3UV3_GS9|52ZlvMv zVP9^6p(EvNPGQS#p~v!Uz#1nb=J>t<476QxV7ixewS?9~UtJe+d3W5?zC*lh0o!8< z&9y^@R0J%oaeb;aIth&4^}tmFOsuh58$_DdvYr>9z!PZQ8$fyl%-=;+-{YiP_&nTV zyRfI{W)q*mi{5JAl%TmK*0Bzim_L3En)gilVuiXf zb`hTZJ`O9?R{GG14^dliZb8i^QU-L4vjVMT7|$Ruvx~ei z11>8>_*3wTAzDi*nreLd1tMT+jNLYpZ+plOC+8kcDo~#tg(2&Fda(B+(D?}bqsH$7 zYwoCH>nY;%jbg&iT{oMcXT|l-*ipf#BO%;)eBzZE(jFn`` zO1eTRpHnK|dyuxd$1IpR7J*CRGy~3;G?0olutkk12Y%JsbRzHV!6lrXp zb%_zrUjtk7z}%DuKE;XR0kjiR_%X)%&yc+^62+#rb9t&J!Yy!-*O0kX^QNhe7U^zS%a%eP63X&e~I+lC=4 zvkXHN8QI!CQ|Sy5=)6a(QfFhvusM0AiQ4Eq@H|C&z^7`~C+y?t_CwpY8lh!eO^=o7nECtB|y&gk9pCZF!0~o01GmmwL?2%*i zyGI0KiGH>i&#eT;SZ2Zn?Sn1$6Mg7CX1h~a0e@>*IxEEHma-#`U|sFPkXyb{%xD8> zxA5@qFfQ{2c$X2O72v z9@#B(#h)03VYKfU>$+FuU<<0Coy7UAM-L5p(Ws4 zz=LqA*uYK^ke%>76D70hs*m<4e(u`#-0PO<rL z+W%a0A1qKtqK?p-8IC|jJ5z>uYlD(b_A(wgZNgB5tbUi2bPCe zkgsQrQRn*aG1^jg`4)3q2gdqlko-Mhq{UAT&;y(E!&-L-xCaig1fL?8S|8|(=V};% zY{V%#z_LIraRVE5rMc4QG1GsC5h_T&1>&~zz=$l*ZZ3uU1uX9#*zAFaQ&7NC@u&r; zwAUV4!S~Q$T{f66X(R^M*@@Q4(K=E0GB87fajL1}Q>5`;Yq<`?$=8{<6yt^~)ZGbl zEmopEz|G7J?%)ns+$eIm0%uvHKT>tB=qq*&`}%^lo}SGvS&2(b3mp zcjtjwha>4ynRvtsmWo?MjjThD^%ThLpr%OwI3e)=d3Z>?}&ooj95FuX&cgeKG@i*vBvOK3`wH0B6;@d$p62l21Q ztfbdqIgSn%rr$Ar*#J?qDCMSd|2p&O#QfWAz9bs4;wz zPLIju>#(9Cc-MQ>8!MhrVeHox&p(64?Y4zkKz4U0zdQBftvrEl>7Bs>AHfRGkhO}p zs@T;A_H+kJpT4v%44L<^XW`|n0?*Fnkj7(W6ZNpCMmXu<)_Vp#ZUeKBE)@N5z&mn9 z#s@Fc2o~HJyP>0BOjba3d1)BqcgtJPVdu5LVlD_$z0;x98#(-! z+r_>bo||?F|7*aRj(~pSa6jiTPq*@M@zjL-QRty%#E+iyS~H_}pbEp=a_FDt`*C{A zX|8=e4m{aQUNgKshyDz{eTLRCv#$eMkA&56;Jd%*$soTP_;Y5ob17&ud7)D9nMA&k zkz!;cc()Q^tJ03ZT+uJj#L&yeb>Zm@df9S$TvA2HIXYwb`_LV{1%s680dpPr{)s90 ze+zk62ENTDhS!H@MtO#qXL5Nel39uqja0+8=Oe5EWeq7doKvd;vwky0bNN=7Ht^jW z!+8~+Se*o(YNnsA0DLLRkT zg(WyKp<^AMFP|#bSqTektjcgos6w2fh7Y!e_Q!XUFw5h174znY^S~2vg$FTk`fK)q zae2PKD+$apV+^Rlez*WXqUJs}EDtrNVzgFf&&FbklAE>vRl0(Izda4r5RcnZ#tId(hTG@gBqcV67VsxteH@9yB) z_M6IHa!hkx8F$^LxyyiLdNvLO`y~sKJnZ!ZThGGz-RX zN$>RE=aOxVf-oavdSy;1yw1!p0cQfoE6M42~25T-u8=l8tE^UKYB)QvEurYh51(bY02;t&N)!-#v z7*10UkVk>3>R~%nu(6H;&l%HC>GJ&yynm(q z2JYuIb~`!83O*0l_!og^=Z+8lx4Xa_%+3Y9q_`U#oeDc6-iBkI4C=8jBe3u*F zxaaz4Fim}=c*Gd*d!s&(JY z;28Nq9#U)UvBMdk8utJ2Cd^1OB4%&Vyuz<*#qrn58esNi44H^5YSbKQ-q zOY{?yfP3hz7xw%NZ>^r1j(HEh(j)NfbA0Y0$JXHC1+w5Spv&ioTHQupF7@yDIY^to zN83&j%c&)4Jx1=icZJT2r-;zE>Ks8^XmA#g`KpYO^UM{aCH|Jd3+U&Jp~k@55`2{BW&8}6iJB6wS9z&l0N_TVH-<%V8h z*Sc=tt*>GJy=wD)Pe-O%xy9qBY@m3XEEMvU_OO_)V|AQQ zpTkm}1-@B|C-OEpv*fxK-w(sLKhn3d1Ly5!z4L8^xAOdE&D$yjwT}JPXWWCeI4(pJkx;zm$isP=w+^)@`Z$aK60?erkC80%kD6 ze8tQ)-LKtMeW|YL-h1|3HhX4sF%pd;i5LYB1U3F4f#k$XNYF%0L=qCzKQMww2pEK* zCrA)Pt^$7uDrzK1f=WOIC$qN~awZ}M6*Xs=v)g{3-?OUsk@E+pGJCqKtG>(oz3+OT zwbrwq6;xnS>$Y~ZJ9C?b&9e$LD%SQf(CnH!xA=yv33`eH$G2d1rdq;0P_vxJ*coUl z)am6P|=ZAkm+?o3G%xRDOl+ceub6^ov{NYugT7VZ) z#^%+au9Q6NTw}k{$m8uSod-OXKR6B4LkErn4RmaBt@vO|&4bJ~PVG(ioHK^uU1s8q zuB5WRMinwy&#AsQ)!djn>qz}k2iWcJKZPM#&8_ao2WEjXNq>sWPw@pT|eV>kndVKGQ14b z8#5Y(ax9wMR3TS7Mo(7*uMYcJ`RA1)+$bkbyc*MvG4{Pcfu^S`7zP~EQ$?7vN(^P@ zRlx5o8i$YX=H*H#ZmikZvESXj+q(vOX4`m6cCTq4dLcAWViK=;m*3s(QCIrb&a1Cz zxRjk^A0xecrkT5SJfmmk)m(OSp`2B@hEpA{7OpMUykrYc6vZpn{91cvrdY)>8 zUpIGq6P5iO;+ODEQ`2}AsoXl$DlMz07;*W{rE7d zZz<hIrpFMSS^1j}?FKofpj~)AaHMZLIvPw7oHmWI7rw~*) z(1>^KBX1mqUC5eK4>8laSV-}uR{VG$$?BZyX+PC>euq4cslBSc&s9ZoyPM_&P|wf} zw9;2c&#Em{TRw4R&!($>GejJSz04Fl97WH*WF4t(NDPyBL01{;q9Zx5t{$~|#5Y@t z0kwl(7<9jQ5?STfm5M^fBFi&86IQ@)J+s$L9-lzWBer0cwh%EV$ z%JG6!PRkq)Ppci-xuKE=OTI`2D|OK)zDe9bIFPP@s0T1Z;QEDR!Tv(pCv!)T)TWI?B(vrd9qI8^<3>Z$bBv)4Y8H`B4V-f=98I9S_}qxLbzhlUqjB#8LK zj;=lKWXT$iG{HPT=dWolM=MgJrRn@}GcpF5-A&?nv?{19|1EcWLb>uc<%htln8`m_ zXbeuZ!&A+-F+XmqxD=@6)ENLO_h4q8=--L<>64(waHhRB0==Vg(C=X9Bal~F`+E~% zzr!_p-EL@YI|8J)Gt>0Tt_3c6lalM1?O5TTh&d%i#rt> z-f3Su)mo{ATuzjeLzQ9S>db|#^NAu&OGm#lmJS~cg}RYZf5ACp~WM4aVvkQDU^0>cf2%GxPdKQm(zwOgz^dyVUg%6*vv_O;3V)-mzv_NB&Vy zYqX_KN*2F@wn6_+TnT;(W$6b*B1s#s{ovm{(=migb1u(W} z8ij?hM4+Wr-_23(!x;h@GfSTTgbS3_ux&y|6FJng`9d3#oct zCrS9YhCM^?D|Mg zV`-0O5vb2s@_%cM4!O6Ep6f)O+Lp!1w6M>uiJ z70+$$C@-s$3ipwGj>>t`mBwqTRn(T1y$X~FGow7v^-}7|@j6Xa6RA{DWe2gkgM_r7roIyO(5$fpM|KO;#&nASd+GZ4cvih*6l|t@h8L8wv zbNmdR5}Xb?i(sY4x<<5J=qLhfV-}S&C1lxlk)6v18X>q%@U$lKTN0V|>^p(C*f-I@ z?rC4DjZ{&+!*glqS+>o_qW-m`Czfi}Esc98s6?#&e!sp_DdX??uXeyEt!@0txMg*Mt>i^?$Ogpq{zr%*@x^(w)FR zKLmXa+TLYa#@(yPyd$W6>P*}N9b+oQI@StU+X_=FOSXR-O|LFy9J!B{a|&HWJ@A@V zLFT?0bYh`eKb4&-k4I0eg4A2U7a*@&9oOw78h5z583V^Yvx`sPyC+`qz&YZ6!0#Q& zkDf%=D5kDIcdb&MP*A~%70 zWk+7j(ovbV^VluVGcYR*4g9V~!2jU>QZ;5Eel}~gEA)u^{nF7U6i(?TnM_*ho#89= z1O9brWE)Z0Ha2~oMC=B~t5d%q=>&8XCmz|4?ARwn$7!N>>qxEq@c6(A6-T1Ht7{K& zE*ka(w0v09C=q$5L8;ubiw3f=t!kHTd%;~h< zaOL4yJ~~EaI*yJKF(bk-@_u&D6sC6yo&@^>Y(#oMp=6&?gH$HV2oYI1) zVZ|?spbJrQ(y;)ebjYwyEEOs<0NHY1etSk+C|)M}r4_06&WNV+Uv?8s)dbkgRnWx>Y|;rjT2o)& zbo8_!PrCC}{sz%nv|G@TF0*kf3(PZP_T%j|y&JW(u3;f`^cO~Vs+C&XPNT*{u9`KK zdlK4zbp0x7S+G8N8dMCx|4PP3-%q!S>`e$VL+6ZRrbZjFzU(}~oTig@{*Llw?I)Qk zH>q{Z7^1>3ax`~jFSt7HGH`6s3F-S=og?yK_pH5|Vd7O@(Zu2hj^7T98`g?RO*CK5 zg&xQvEj;IXLbcon?5PW5!_?9)$UbX+vQB1e6xO@*PSF)+v^ermQHGA6ek0JLug!tz zMD`h^CsHNPzjm*zN3zAQ8Ck%Vp<69^x1B8fIA8-jk|hqYNXofhcl3*ySbXsZ-UXLt zqG5p-su{^n(Ir377hY?~dX?^8eOu67)Q$xYV&#>K?nc2I8zV%z;S{g@I>twg+Sb*A zYZA$nwf@kkkJUF1bR{0e+v)*2*6V?74AvHwH0t;R#j{Y!YuxR(H-2{_k9p}iwql;T zb1~fjyQ)P*KP)@EVBbe#b!?8iH9e<@WDOO+njCkNGta%gFfLh#?5dsig_wJ)g0_8! zwXsMinlE7o`m@7G40|Nm1N>g`wemY=&ISG7DtYNGuQ%J@yKissQqVQW#-s$=H6nix4ZBWr(B6B8Y)6Yok* z^P|a(;i=SdpT8jAlohe5XO+3xWh4(bb0L1TcPlt{EK6AdG8l>!bISjgh)VCiuV~i zflUVc&?_NPTV>=ph>72y3OiuG+mY(2sd3aXa)7s-9tu&KzIUjx=SF2LN^}gH*7w-Z zDHUAT)TqwA+fzYAFG2VlXvtBlPoA!+dt|iPBVJXkxm2!gqjt1+to?_d@Q`{sb6=5U zzB|h?wWGhtR-?yC>j#w<>ljN_YGn`YOtWxo+u7AREfL=AqGJOL#x<&`O4Ie%t|8flAg^){8mZQhacwT+`B7I#9I6sq$P35l)O{=0{sUjqI2P%dh-&t|$uCh0I_&5XsKSpR>Yn=y^}?50tCv*3*m1N5&#?bnWGymhgcY0ndY)}?#Q7-o4`Xut z9{vv3H;TSr%tIpRa1UxdvHEBkQ&YTq^mhiHjno!%6;uC??nX1R@&?8H>Uf4KvP&ct ziz{CRo=nGn$5>B=Zcx!e}=w36I+9<@2H(A=pU_Qb({lz@8k4vWn{WWL^;AEUGu;Z;M6xK zW|+02=$TG@#Z_bS^eeadL*EP1sm+Fgkm#eaAkGl{+ik$pcqk!rs@&FpbOJusdJc>$2=eXpZ-+$;WP zU(D=+G<38DJV`ZL$EXy)X<~n~{5Cgt2i1OEV2*UhtM9X=t zmQfV`Rcp=9JW9qUkXk zMbDU>$Xxam5E3;{t`n$3*GBbWo0k3v=V{xwy2B{aZ)V}FB<9()%X0N zek$+rm)G2p{WW)9e@*{BzWc^wMPE!-E3JnMKRNt$1 z=%82mO!@ip?sd?&ALw7I-mVojD%pZp#1}ace{ie%x`Vh~XJT;C6|3a@%Uzs_m2f3p z&b_Lc&(srjD?ZqnKYcEJpRH6P&!j(kCf3Y}zHup5+L>5p=TaZN6fWbm@ZG9J~$`LJfJ!M9edag?=p*|E>;ZpZ? zD$WQzunTcVcB*$j(f3Pl?3K<)eeP+{&r_ODK}-Z@Xf6L}tk~Dqc6J^ai-ljAowG`1 z+d-?g_?{Q?G%8)og|2?5D}$Yfwqi@n_j6rm?G6rwW$;Md(Wc_#6{gLFcs#{+ooZ%{ zRMmw_#{-SQL$OFM#Xu@`X3VCGpgR4aYOaaq#!z>EBV2wX&DdI>@2P5{a9K*t&^ji@ z{)N|c(7SXJMNPJ0TQ$($!JgI%6hK<4+pJ~dr?Ra?2_|0iE!(q}ZBFHAUe=~Ik5(wv zC{Twg-=bH0Ge*bVc`63P(0*yg_qxiUhj)aT_p;O+>N&DF(bW?7X+_q&vPU+24OrNX zcb}f}Tm$bwvWU_H>uF3zk&Fv4+>NkW&$}o}g;eLv>}}#_war?Yt4G&~*|2zu1Y1JeLQQvb;i={n^I#N}v7Z=9%AdD9)9{su4u)f=wfE+pF?~e#(CTXD zQ5Qf25KP33Z~6{u^G^oS-k(_)o?N?p0AYqsj3f0WIuS>U*EAC8+Lr*`4kA?x$h8fu zmq3ng=Id(~kYqlBm zxueSm`8m`HMvfGt{MFPm=n93LN97m>zTwDR*FhwM^CpO#WF~G9)Sf~8&1Cl~=bR_UXU8fV8ZB=FKFwLQ?JwLjxYC1cdmOu7WfvNiO_0$?$DfQce}~IR zo$5>$gN$(HnRxG2!)l=Bi)=3u5T5HS;8Ik_I0H8HN;~n)))^i@okq)yLuUrXm{Fju zOts^A&_xp!R&>Xs>>MAf0=;EaysJQq7pyc%@5u7e0*Q4A;}-|);V_q>c`Q?xxoEqlhqI8je4uZ?oVBk7Y72dtcV zCq6k3bSG;ekP@ZMD!#cRjm*>RfXv)3uZy6HVy^Kf>q{*MT$-uhr{iuj(7CU54VN+U zQ=GcO0HzN2G6^d9Cf;Mo>a!o#FJ%pgVqM0-^MuX@b90UP#5m|EJ@tB~yBTMr(sihL zIQ9IYll3Svu8^8yR9V9{Af}c2nH`;@sacH<33)wwQr0@xJd)Wua^!SkYdSVwEze;Q zbT^&_%B|DLPATXpj-}3)N2KG)h1M$;ftVP1jDalBIA9|aom~b|$omWhNP+!)qo5-$`N1@;P$Z^6FNjle@AvXh4ujM_y9q5ftgL>J5i{Muu^d4+;D*mQk z`$J!6v9cMBEEc1o2+HIbF&b*@iAlm}LB**n);BS-sbjjt@9H2MfIeYY^#Hp_b|gDf zu_srt@Se*R!wp!>lYvI1$PiIVPP?<@)Z3TdjR!kX0z+C7RL`oaj)#3rGg_o{ZzX0DA4#D%PVe0at>O;hW(&#Jo77=dH9VPe@(4ikb*Rt1HCGg`%=HVwvSZn zQyEPr%1qD7{_nL_ z91cM}SE+1zQ&?-L5iIekw=~n|L2pWQN-lMdE8SJueJ(ZXD7b#|#Ww()bozewfWsdMi1RzbCgs^v1Gdq)E2M(R|(E&>gaSK)08H!q2s4L$c|I$Ky~< zHa~9O-z&k)AyC3L6b%Rbz@FhlfS6CUL zRzW_$a8k=YwUxSSU*o&g^;JeQYvF>G*8N(D83h=)otHt)7rZFcV}{;&CPvU>du222 zWOzOc@7FWi^I6o#9Sf#8y!MgUIrMnudZwNSJS*6$wfFzjyy6P*!^^HZ)mTq_ZTRN* z+P(PrRQ;iAUHNIiIvxh>1@^x>lGTbATOVz0Mht45ljni|M;!+oWLOlnZF5gpp>JQV zTnXBK7nDz;nY2nNb(^u6yh%Xa$oTxZ_}%t>C^ zExc>|-Vgd(CnGIu1+$)k-F|%ZQDO0;<24O>(5MI0oh`eR&3Y6o;|r_^(Tj1=uc;rY zHif#>#H$@0v$PAv*6srZERg@T?z!nBjTQGmBk@wR>P&V8Z7OunP?<_yskwI-bo5qt zBRe)an(Nz%ONK&P*<%TWN(=!NiIL_E{>Vg6n3-8-M?XG85#|yN%)UkJY%|-VqGgRL z`pTAZuF<>KYRb-CQ^&AV>1z`3i^tvrr!n`ZE(0Bfix?U!WV8=o`d-8T<=5coYk%T< zpX@dE{3U{#7QEaqQ7gKWEdre^;#c&NT-fG<6p7oQOUIfUeZKnFN`y`>s$^DN#(d2H79j`8KM5W?vaw z#S6W#^h)WRl-T#w7ORe#cLplDvrEKO-gMfni8b&Bu`-V7t78tnf3gNETj;T^8a*n; z%9$=b#*;u%f*2d>j(r^)CS59&m8-o7_<0i_4UXS5Qrmwaj~;&3D(D6?(VU*z>aP4v zb`+Ri?3WA8saOjca2=n-crSGx|_?|t)EsKsH{kG!{G<=I`w$32DkFFt19 z_P*!+EA`mUBlY8lUQ1)2H(A7q2GDfq`J^o;5nI{l1<8 zwTt(j0g7eRS)vwF1=`8<;cYvz-*%3Rs3I(+W=!lAkmH3r!c(h--q-r;*w@+@Hl8?U z3Fk2Lm)Ys3wio|I9x7Z+EW$kKJx8ZUY~F=-O`^L+TWRLqXlE2TFoqp#yywOp*ipK| zb+nUCWr?Rg_D(y?M01(7GWNQd+McI2MRtT>rS8=?b*h*F~Z8u;N<9MjQg8G}eZ;av5h8D3kla1Io zyv}t_x_xf7zUgLo>a)QpqJt)#BbGWFU4M7V=b;+4)^X_QvGHfKv*SWPuXIu z+P!`;$nnIU;8kQk6CEbHaEygpriwu<0zN{l;)&dQ` zybZ0|rQ%p4tz#UaZ)YLzZlYPgk|&gV&z1GJ>6H!IoEY_^99+(V zlF%g3bR9-ke}h5jdk@_XXEC=waQ|9FDpk)l0(1L+OUI7bUFUw{Q%7a!Tt2mLwseeY z9&`H{b9FjDvG1{n?4L^Xcj2QGcPg0>=GfUW#xylq@!!snoWL1w|=;D8;Vd>ImCJ zR%WEg(8RcgN}p3l>(){R8%bxm<&Cq z2OzXF3WqFn>O)(i)CkE~d;WX!l8=j);S+Vh+}h&pY`0$#FOtX%j7|DyU+DikS>(0; zav>(^xw*0zW_NC^(YDr}a&|XUc2;A&l2u#F=D=!Q>n!kc*WQON^zW5?{WHCPAsY=F zm*3BWE(UO9x3=3?`Xt=ha?Eodb0_P*_Bx$wAHXKmjs#}?C0r=9c$P6SvLkks*|35U z%c!5)YM$DEgRPaF4XG+kwp`~EUKxubwg&%c8zbY7g79|2q40RRj-_qorBX@i4wC`@ zZV)j1(Gly(2O39hKNG)kX`gd=ocrurLwjoE_V`39LvMTpa6DNq;?0Ag25snA$w=5d zyNnKwaSC)IcOJR5_spzh?nYK<_dKqk)}cqcb&O1=E>PwbTed!_AdyPGy~tXWWx(}^ zd4f_*)~mKXqLuvYGBX}Yfv&LPSMDmfi`VY%vGCuEH@*|ExY8^yYJqRw-D%-26pnqF z&xQGZqHb-)Z$HGT_kq*9V{L<2G0NmKN4`dm8xWV<%0s=-F}6Z}*V<1(cpXI|9Ud?C!mVx$`&j@OH8l508~Il8;#u)~ zjm^tQfNl_%k@cVDyBGRz;wLtZ%m$D@VLj0Ia;vde+oIDq;ZnO9h!zyS(@1W_!QW|a zoa(=g?)So0c&(VuiLCMN&K~!4%oE$;Q`IMIgRX8{;bLsu#(u+@j&klQ1D?b#=$3bO z^Z*{}NSmWYFDu|x`6t6b^>pL9h7+H4XZHTNj>wg-Wo_3-j7#n4Mi`WQd9B?)BdeMJ zm}_;_y3>ohHS=~n)ww5k|Nj*2<2S0&C`Y(a-N%hB7TUY)!EnpQ#*9N@Y}9SaUr%Ji z&@wx*oun^!Wj_>qGElDPKB_d(%--34)yFv8!10T&c*V72MkC){?!wt0wQKJ=wTfW= z6ck$6HE%~oS?AF)-pH6VjF#-N2)B7?OjA7PhWP&IVb$KrdX8cgTy+(hJ8B%QJGQ+# zV!l?S-Y>ZwxHb{+!6rgMBYOa3K#HYZ`>Kha4#kxyXMZ!OPloZF8Yt!eSMsx`>i&v4 zaTS@Rp2$v)yml7CIRo!+Ct9KGM^k$^sN|&Y1zH~*Jpk&Hc~aa3ePVf{)Kn8)9@_p+ zG)vF4{?2UYX0}8d;iZY}<5JZ~g~POpjq@Zc+1)Fnib{D6GPPHJ)mkefTf?qy+q&b8Jlyv2?=Zu>!4P#A$*1E3G*wf&g-C8;6c&FNsw8&kToDyxei#P z9q~Sr5sLcl&TGCEQ?Kly*VZ_aBh8sEV(4|Bnn2hjIt`c1bW3P<81TiZa_Ju95U86~ zLD$u`SNFp}#j|qXqm|>VYq27VN7T?NTIueo{c+!fBQkBuTS`<+)iHK4H7`+h+XnS2 z;NE7W+D{$HKT96$)V6I9*%Q2ByETpMPCh*TH_>rdLDoMzVULcH$jQ(%4)x^WC~?K)qngpS9Y>LQZ2LJfMjIWi#wf6?8gTMMi>QF(gYG+z)pZulz~CrAQ<;6&vYFS>dVh)==v6<#is^f6!y9 ztc9IoWqo^5527Z^a6%) zazfznpuj(KWNqXp-_K1wzK0LAda`N=R@3Z?)xH=M|J%;hGrrVqp2LV0*RdZ3eI8@*&(mY zq0RBGvyP{B%x3D?A!vYpa|5r0iDO=)<0_x{_xx${(%*mMtLGR`j?>sUu|$4LmGMnb z|1!5d90xi%<<4If-vzH{s60ij9U8B89`rEp$lphO5zl09+yVB0$B|vu$hXh+teHpj zHy9tE8MT(_?@&bvZ}+~}+ER7}MI`0Q0=WOo?T zW8^!#RcAbTZrjxr2AF%M@Qh(l%oJ(snKLqu`SE!yj7nG+y||CDbfk&`1F50UwKQ6f ze^aj~pX9wa{NKy3H~p74@Ah9R*002}J*ehr{|P_k@0UW9dwJi5`BeVB_HS3m>i5I3 zGQPZCxqI#Hv+rf~&SPS~i~V@(T{5c;z)dKA6#uS_#a3Oa7CJ*;o@e166}DuV1DCR* z<*7W>UmgaU{##{z={r7De&|FM{H*`AkXDHuPUSteg@5S>G4?zgIa7cdO!BQq$Lwdm zNAy26^vDtSH7iHXuaBJBM}emA_-1m|Gov@KeN9GhFOtyG%f(^j>kj3sBE0t(> zE2y^U`bt;6H`FvzA27R5^FUkqysJxHo)|ZN>MQDkn3PS3*S?bzaE}%Sb6U zDivmXM#K~2k~;d{hX+U8S{-ph&xmJe95V9!q%%cUQRRDkqu9hQLwOPGi}Xd>2EBAn zog-a2!@AL$Tq<)paZG3 zt%E+1*Vf+VPR@?_9)9gYvuqPt`2hnOTmtU|hU3b6IG83;3A~na7h~`9<#}8v);9Ls z2g5A9J6#7E)?#m7jhU^|+;KYirA;4uVl+HayfE1-ss74OBY$dW)JZSWWEpNEtLW&{ zHxXi{XEDCwsXU8iP@g!KSHBT9O)lMaP#-u@MM|wa99W@58;A%WbQf*KcWc#W%ruWt zVp|zcUj}`4P;kuNvzI|1+zZ?Ff+#L@zDs*5Q{%jOz%YdEGttpYOt}{`Uq>Zh7PK)n z8sLc*Jkbj{kXWOO$V$vBf&F9(ovy$oySqTd#uZR?z6e zb9`=uQSR+5VABokn@uJL-~vm2k&_}s>qHh!k@uNptw__@ZvY5cp!FE-w3e60ET%`a*G zWb>z+ztH+f>$_S%(fX-&qy78apTD2(*Zb4``ToKF$^Pm7)Apaa|DLPXRp)AOwZ6K# z`qHZ}zxsx&Z$9)7lf&$=I&2U7!z+iI!|R8~htD|tw!`Nfe&68>4qtNkV~0O^_{PIG zAHL)8k6xKy|B35wx%s^}fBNR@Zocv6BR4;E^W!%^dGpgZ|MKRS9&{fJ9{i36pY`~w z9{;7sU;X%N9{=^n-}(5vAAj%TAA0p=|6k=Gf#i^>Cb=e5C6^Y_~Ey+82Yhd=hl$G-ey-}teQe(b-$KY4%l{__2k_pjc+e*e*nw_beqi!XTb zhhF^A7hih&MYq4C9t``t5&h2ievRn!crX5I{Exd4{n-Df{Z^0Yzkd4jpBkSRAN|_95nXFUUw`i{jp!GC!iWy~xc&3DUw->%Z$EtdM{Ymw_S0{l-hRsM{Kfab_`Vn4`{M7t_?{Pk_r-U=_^uaU z`{L7IJpA}S`S?$K{O^D8@ee-u;D3GaYajgh2jBO>_dfsC=l|{buRQ8^1DW>sGOK%L zB{{+o_J5{grmC_!GwZ$Yec$hRFRSXAhn{)qoex`n={Po}b^^e{7=QqCd#&_KK z_8Z@Dy z9Z&t>Q}27~d!G7=r{4b5+n#!2`pgfnnxAOCzPYoxqq*E%Z1$V2X4u&NiMmbxq5P

?6n`~qc=CzhCBac}Tkz9xzB_|;a1AQwYVgd-e+*t4yZ}_yxc&c4@Ru)x7XIzv zOIz>XZ`Vu2W=_U`7t`S6zX03*bnC-{YJPmg=f%-)e)z-UgCDfN#D5C*I1lgrqToaA z^|Ha5&zB`zELPgRNr@){Mjci{;Vg@ivUY z2VDRbikXYy1Q>RX|TKNkE{J695{O6F^D%&_&Rs!jiaaWO4(A`@%-lHQ)<2=p6)T&#b z`?gO{J{i0+xTAHn!HTij;<9h;V!`tAl`Jk(Ra6vZNj4~STEs$53#cYPbM~H-zX*Oi z_{A1^Dpr*hU#u_xs=gAUV|^|BMSE_2ytMoGtbLS+u2@ z`aSD=_U-a`ea`xQ2Pe-!?)tUvpqedCy9hm$0*5ALqKJ(Sn39sjy(*OcI*9#~{~0_C zIO=D#pcnq2yuE+8h*6rhcMnUQN%^Yw-uL`{!B@hledv~+FV1@YF&gDDl6gT;8mIp( zQ*jn?F)pOe+o*YF_`Tp|-TQeo1gL<-JD&gE_ybRUyN@n{07A6G_JrcU38yG5=aWv2KL2DdZw4<9 zwa})%#{$NduDIjw%Ol+D^{y-%_qiceGEyPsto!7S@BP1Q=Y9afR^9FF*i~CZzKZPwmc}};b6Pc+SWo8NfA;)SeP+JB;{Wjg`9?p zF?^>%jA)8OKc>~m??QZjA(#dS{{7*-U<5W%f}WSqmqlA@D|pU$TX%pHup|G5bIJ6w zA?*IjMH;CA?WehA>5Eco05@VM==@+i1;V*=kxBjT*eJ!ap_WV~TNmo2WTd!1G%7O( z^B7A#{Q_vLRfdyY^36BwMQ+AA_3qNPt!NRD>w&e~G?hCw5%?;4D@hFfmXx4o_X z?OAPT;y6(}3(uj?#}Ibk1n7LZT3_xOu=c^>tXM!2!VXU+E_OOvY!eY?4Z@U2&6u5M zHcurg`WUgYLeIrnv+dq3g;rB|;|Is#?mdVoh{m~u5WJg0Eat}~Ed|Dd90UfrNc?BY z&O_^dCHQ5~Shojv1^0sjy4k|w*0vt|ww|_h^Bl%;y*O($9I$Efs(XMJp(8o}9%G&3 zqMmF=i3I^MS`z67SW3gV+)8v!q*O*%1yZS{sFx9xOs|qAPA57nqcXp@!Z^;+_j9V0 zPxF#0p;V<2IX6RFON3oEi800{!cj4>2#2^y2$#hd!#1K@I>F&A#H$#G101F#l_A#c zbwMY86#P2m={z`hHa0g?bmd3Kqb0o1j!N58f4^M%`^EAHqQpr;<31bo6Dx3WknCRE zo7!0tH~T`cI5rlEq2bbAA5j^xcS^2QvvpYJg$SFyeI)iS6_bN0ClTW1PC|5i{>YFt z5$=sqAyex!$bxqLbI`60XpuX*dg73~&_Y(W>AUd5;9FENRup+#S;v=`r)gbv^a=Y` z-ygfWkbMX<5B2`8%}Y}?LYO?_`c8_3WQf?T?iG>1iB?WO9;2kO|48si^>r^vSmJi6B)u{cYp_5M_1a((#;_NFASlYanA6`> zM;2$}rZ*eL{rPy3aVf?3_+g@~iI5U8Qbt)hdo4+fGQN#_0SP`H{9xP0OKlrj*T5D% zecr=!4oxfa7SVhMI-FQ_jl7Xz?rffK57B&4aE3{am~)RYlgLVkoIGYXl&AP zM3myn9p`!0%kFYIk4EE*8CPQ4d9Dag{utQmBM|ckJTLN=sXYFjQI-cC4=621K)2go zL4tQ2)^@Cg?6ZXTuYVsyvvDS~tsEu2lq8W`3?*o`L2}L&LN1Gtq#(n2VO(uqDgZ?- zCzyz$u8KsGkulLfc4NvN1vnWs7%Pq_#S-H+$BvM)!HmX*U`*Rk)4nKX)4pr6i(5pO zaWeu6$VFNE)l&*R{PW;v+AH)ATb%V8=~+eE4M*9Hq1OiM)7QFO^DmTbAS%{o=JNR% zamxY6@}l3*iM2dR-Ze>Rmfm(gR?T@1b}H5dpiP`!sI93oBYL2c%~qIFX2`4RJ4U^H zm}Sgns@b_5Q_UvR`&o>s3Kf#}d`y(sieD{Y@IoH4E3r!x{2149oV33z488gvfJ)bb zM}p4@UcKRY&QD1LhQ^~5w7u)&+AAI)hMUxJ+;yy@J*ca*QM?(DHG~Mx>3PL7$`9so z)lgLGSX(f&4hpPXF7vHoU`B)9fY*5>YZ6)!N+Gq3qlB6$o|*(`0~K#omi`1mH7!>E(I}MZI2c%H%YII?3pF{GK7nCYMEwGHx!U;o4O(&UhBuRk;0LP#20~n6^0W;(yc-6II>Qp<_je& z5^df9$t3%_XK9$tBWoBI;u1(rAeU4RW+97Zc^H8(#E}A-%5g*!wUBv|+%AjqV9u&) zGHlY6IXa0RNKKTYu>D@|KMQ^bP(2H_f;%A}Uh!;nI3-7Tt!#VinbETj&o?@??Bsme z;`_0mEohna6j?U(-)4(H?jeGpq(f3I7HLJDwbl1hM2O{8p+anod;^R+4jGhv%uS?2 z2AD_4V8;Pdu(Drd5(yIn8s5(kmjFYWzq$GxTh%*h#z+0#@%e;leXuh9#}t%cQE+tI zD-%Rt()9CeHnfN!3g#hR8yzLlaFoz5OtP$qDit?7iwF~aA$^hDD_lNxVf!0_Cw~z9 zb?|fGCawmb6?`^$?8kz)`Y4^o=5XU@J_T-;o~t*sx4KCVEsu9PudSTL#+E?rR?Dsm zJ-JkiQ*q)mt@5w6HsS@318H!Cr z0gb*<51P6+m<^G6Tswjg)sSe9NjqzrnIoZ+O|7E}X)*RfM>5(k!I%TAP>-mfovJ5Ve-+LHxz1QjZoFylyj7aT(TU)(*lv|UWQ-@N1tcwW+zRBt8{hoT*iz%-+J7? z0#^U=mead=lFm!})GAx`x|y(ooT)Y$2Hig6^M{JOx7Z(Y;fCj8Ma=D$M2JUsjU`Zv z7hAd-4N$MHX5+Z2`&sTDqc-G<8^Bw8TOX+`?tZ99iZu?~ z83Y5Y^8@XC*J(Zj3@m)}%2NaUcmzB#8D}Ommhn0Yo2}_|If=*d7Z1xpT+c@HSb_1R ziN3Ux8iMQ97|y*9-tj+xsy{k)PURUqEjT*`A&=W$m9}W*rvulk&NF^@oI8OSPsL~q zjivDd(H$kLJl-2;xL1V~Y$28oMtq6D8Uh@D8`vj%--Ui!rVQnejxh7XuLtqG9_WYXFRgeR~xknUKJjEVlO`ft$2Vf zylV0C?6{Tx>o$q~lwoH9R-HEc_Q>|enKKO(xiw0FPj>)zC5)yUfa+2JpbS7Yt+T>W z94oF9iE=1wl}CnxM~Kn&T^G5LT@Pb$C~ssv!V>oPL&hX$U@W=9A(*gG8xW?LfVRL% z7-A9*k|v+u%SuLXDGR5XJgrVp;nl;lBAsjTW_AhF&`4S7T&*XB?xV2p(r^e z7^*D1aH;12k#s648Rh3=NOxygh~$p#fr&uN=$$!Jve$Elkn=SS%S3QBbING&(n6)O zuHeKOWKDRVw5he$VPPUjr`wC1f{WQ=KKu2FzqaC+g6D4f1A}wis?J5{5;huiQMPVr zgJ$JfRuro?9Uwan*FUV2h+{5y?gVYO6Ga`dbT($u039T#a_I7mUv0HTdQA=<-K%ig1w}jEu zDq4-oq+f?JmSQj&M)AJen(Ze0s+Yu?hjKjZ8`JM&Olf7vOO0O6Y+f+BJ$8sO z^{(}^kI)^Z9;+6Rw4vJq)C=jug9PhpJ62Nrt0$wA-wu8ixV#UzxrRJzJ>N|s)8&-U zC(pKC$#q?6L8W46orNT;P93e+!d>}YMG_J!WL8YHgQhD1Dvy1m;RxYW7qtvStG*QQ zOOGeh3i#~v2{k|(mOTF6Cj ze8j}wrLoGl4x`8-D|)?QlI`Reze3ugN+YjvXuI6`{?`!%`l(;AKDH$gqd^p_vWl7sD@tjN znOM5DC<|MR!mklnI9_HTyuy%xD+ZMss!X$QQK?s~BozfNXWPA4$KyQiC%ku%P{9Sm zeWuG46u+bZNBz~{LT<~1*z4Cy$6hOClvLX(;U@PzuE5*;M(|2$85duaRBfkz9YJ{s%O6`oe^p3=#!e#Z~|>%qGvBhcFhNzgBv(9F~p$tAzGrIo1X zklJxh6UV}$KswUNrP!v;I|O(-YE-Y!y~5zz0xS5Jyjx}v0Fek6Dac!{B19F#u?Pi= z9TN`8Dg;YR3&TKph=K7)s;LyDG*|A}sa;(O)#?no=p!iDhhh)zBpd<^jP zg~8_sUvjGJJsp;(khw9z9iiNuu36m*MEvFyPfN0!a%e?;*{xES{%mcKPNP&-uLA)J z#x3>=2Qw{taha#(psztqYDf=kLH1biyP0B;NdibUbH&JU10aNqh+`UpMip;|xRG2( z2)qDQ8J|!Ta!q8!Zaa!t)ms7;^>Y(z6JbPqP&$AG6zE7(+e84F4no&h!rhb-E@(!m zBCsEWKgGQ~Rft3pyw#URcU?Ff^`nrY`ta}ooYb*ysw|H4JP!S;hCBIPP+T7k_JZd? zL|-1f27ExUs(f&|<%Lt)ZYQbRXl*>R4;R>?Rr|tOMfrkSbo;ehzb(L)B|1Q=+AQ@J zfwk~*H`JKS0Zgb9u>r@#ITnNnWrPLA6^T3s?HY2P{$0mFNJlJ(z9K}VcyPYG$h57N zFBwO*QiI|?0a1iFfC!b1(^&-qOFTNJJfp9GR8usx8V)3=9u%&+1PDYZ0oxTHkBSI~ zlSxBoK!DjnohNxpi>q5P2m&gx0~sJ0frlxV(~P?)k6rk=isxxnnJ`r`P`+R9N`Y5? zIrz81{N}v(#!RjjpJCqneLA&Tqz$cmS{lgzbJ^B!H4!n@M@2D#K zCbW~?X{ZjaOtw}#gv24whAG&>x&H+UP#GTwTs#N3cyrF3we`@xJq#85v=+2eM61UgR1T{Q^UcI1QbvyN>r>3;Cr8kSbJPUi9q0b6>yF+U`Thsa04D=&V_PF0475nK9 zc%E{)zZW^3jHUw;8DWMt)`EjIm9}r0E%kVJG~xzg(g&HW87_IMbmHeh{srdP@W^IH zfFesqCXc~SbZ7X7d-Uo>nIC$%XoSNa5kVDdg$VFYST}LwW9*I{D?@kraDS646jm5M3z^> zovlf%K@e(icp^0%lb0&6RD|RfL~=5bOF~Muzw>tT zr@@~EKO1ZZSA5?$eQSH(;m=~-^}Yk?vRy_fKW(z}TN|*frl|of4-z4!S4x6Jo<=1Y zLX}1gqpR?Ox5q5r9yO9Ur<{1xJYf+ZS1^1yTIN}4!+aWXh!?oyB&|~-&H2I(p0hK| zmiu8nm|q&k)XHJhUi0+H;J1UH2nNBb^Y{z)ECg)6pr{p3@}d^hFDwbm3T-8U^ToP)LqQM+wZ=g6 zF7Mv^tO8n|MWv3KgoEvlxE!aDjbr~!KM_>f9|XS=Tn_FE9tJlTtj^|6mm7v$Y?doG zfPOq{C!81El_>30DQE2hWhXqK3>Rlk5KeKl(JSxkSK7r=g174TFBCGrJSMUNQETkE zZIggGr6SUljx{$par(1yC7q2-Si~=uB2HnvlqNu{@*$E&NVuPz5Wpy@Cy@$!7(^&A z!?|5jJs0G@^Zv{gb7#QBAw9^XmY+LTeK1G1$3zk- zZ22yLEC_lNtH!F>3JN0NIoKc!ML2ee14iQ!cs2{<9)Dq#g27D&;D2>by@vKG;i$tr za$Jmx($!ao4hWD6!HpgF?ew*1KEFPI*QDlJmebVbpg-z3F^n!aaWjosgJFNv`no>~ z{sMemw;EcuQ=X@}S>6gKYqnWF+St_AowAJ%<==OdvSF_WgixerK2W?@NL$IY_o59WE1N4>JPi}TAFFXAZQh72{@B_U9^DdN3I_II|n zkFX)yWTU)TV9ivV_lidSlmzPv`HThQLVz6WWsdWB)Fb_!tXU*D1ot7qHi4#5MAZPn z#HJy8C#f2d?Z=!JB*|I4zmnME@y)*+olY!& zXb{u+)q`=C8Z#`AFk%M7E(p3q^kkLE%Ji~JyiSiS1+$r6yJ9j|BT_gw|6 z_Bx^tY&TJ59h{Wa&nC%jHHFCQR9_xOQJuN#YdG81r4S#GFo_PAIh++*mn2sJlrD41 z=llM%p(p<>__g3igQ)$kt=(=0WYJxS(!PaX9Q5+3yMCZLog#oi{PF#ZOmQbfbdO8o z#Jv!7GkBu@xz|@}+?02!Y(7m!HICWqLmqF>Q>vAY)Kr50vtx+Bt4Gs=ZG~k%RJuP+ zMEl*3C;u7P{@(y+9t3OO8sK>E$~%|Q0#DcZHaEL)v~8_U+uEk>zoKEH2SWvxi7dCK zWp(g*%Nz}d#ju=)?Zs8p^lWSlJ3y%onTx(%_v%Yo)~jYk8YoH93xO(CA5F=_eeHiwg2=rKKcFNzXP&Qf{TEW_kKnl{V6KCi}C8TJDYUy zlI7;2&0DfaMRCSv&7f}%`?Jx}-o<^;R?%=iz=@Lbdb7exDQ$o394bGxYR+cxmS@TA_c`lXH+{1Hf$0$xE!Bw{^i1V4 zQ4X5%e0ON4nd$B9Z144m7ye5$YA_Iae>aPxa+38a!p;r~fN>yH<#h3Fy`ExK#i(S3$3V^!MNAHEvh0e+jhiad7R^l>TC~hTBSxo5rpDOce|J zJ~@aSSSg;;9_YMKFJBGf2l5zd)T*q=KsVWV^hh-&5ID~Dz(mf{izrP)lowwsrBm0Z zMOyX+9lgl0XnLV2i*yAl0^|M??3zlpUKmmvZyU@NQ=-NeQ&ZyhbKNJu8~kPPbdU$< zK}$XuyyWbPz-M2TRONos`0^PCb(Ib;bk)6FE^baYc(~iFz*gM_IUqUSdwwRji^VYM zP0#H&xyG@9+UHCtU4nwt*zp2NT9t#W2ab}4;44JrGsv>K6-fz3hl$-5!sg z*(T!@VgvoI*sEpPb7;pdQRA2f(Mc6rpXIb<;KGUng=zfm^>tot*yV|8c4 ze!iY9t66Gqot^L1!~?TEA=0OeywT+i5tvBjTH}BzzTo#*P~|9{!fvPR9a-=MXh;h5 zH#1(mpn^0=O2~h@v}x+-TU?7!t6t0yCZ$6kLurkW&E6lIK0JK$Ba;;8>Qhmj!8k1> z6~r}q+F?7X01xtDF(i_YA_SQ~6h{dCKKMqf3LTgcsjlg38_#^Dx zN=1|phyTX`Z&B|Erm!wbNM`<;N7TBADutt%09!{IU_q>Kor72YyW|%DMI9gdi*};{ zj~Kr{yj|@6jbdT^G?sOChd@8*vi;H410R1G2dWDI(V7pXrB|`vC2;1S+VLlLm4&bL zGuH{*6?KMf?l>|NT$H-}b#z+o3zP?iK&b`=|@=S9LjxeEd+QzLyxr z+Vq2K6=e?^>gHvc=61Gvg|3_e_faXYPLIR+c9+IJg*1J>Li9ChYCX5>DHcovxx=_h zT~=Dcy;a1QX||@=13TX!lx>?Fn^n1Z) z$d9|Y6aD$dV&+xu{En$}kTrX>3mdnOy{%Qb|4T2TOacjDcJoSDqachaDxcdImLY6c zZ)HzfdJD19O;SUR$k#bnLcUGeB1_*0&u9rvAB(lX ze)fRD?tCrzmA-qXXTPv7<5F+OMAOs0p(k(_#adS_&60=CPjzS+L_- zppIwO=iS7!spc$9s&Kq@PXV^?&}@@;>z5a~yXcB?0wBBQ=m)xojwW4o-Az=OwcIPQ zjKqk-)NWy4e&8UiIsb|d0eB@pO-sZjJIT#nDTV!cEC`tMSWCJQb&dA!x02t0eb@og zi2bfTe&*G%BfEhf)+4PyEDe4fYim~qe&BS6um5zV^rA!4Nd^8p+dS0GvfSUAS848C zgOm$!Jag80-!-wNQZoGxPYSJkH=B^ilAmWn5K@)|!nVcHvl)i4O!nZxK+0}BTVUay zyndTO?kWBBX7p&4bK6ut&HVgkCZsO=8+8Dazm)tlh}Ykhyes*>^$DsRVD$^G{8@(f+SkU5tLXf`f~Dhu%7G5Ym#>)?@KDo~S!O(jqF+VNx&C>IX>#k_#U?VaI*6=3FgF+DV%7sov)=F=SKmfJ! zH`W2eQxt_TY04lpS4&&PNe2W+=h)37O)~d+Abu>{8#^^f@iZ@Fq3z;)vs~1+o|x+Z zVL+b01&*^L*~%d5>R7b0i@I zB8oqNfB^OHKXmu2$!{nBJUNHV{Ql&l$qxZ$j5W>!je(uo?|aE*u;hCrt>NI4o;HmVU|F8+0BBRaCt<4}07*xY{UdvpSo)x)- zq%{lJR;1Hg!GiZ<8zh{{H9j%$7q8#&8W;Nr4yiCpm2VV10qh9)iYe9ADF!$BZU`jo zn&HCFAc}??L_yMD1^^r<8&v>2l}i`wu|Gdw~T2MLo`n?XDv1RcN`d zH>SQfZEz^$!zsZT4js$9p9vb9xPcN?m!m*4eE6t$;N_GT0uF?8RA&?b7x5V&TL~$H z&5e<%JfCFE5-nzw`4l%Hd-)BSk#M#sT+z;Otiz%^QdWg6Ly+cc8e*Y9Zve1+BcJLB)^<&lFJ_1JRpNS2<8qnyZ3;qJWQta z39}xX$;G>!0o11I*^Qgwk#1XLn{BuDrAvMAIrpiM>eCI?3kPIFQjB!~RR00^4N5D; z)gMWTQj0pPDj@`9g9`G*yeYAh&H5q(!!8@-3O>``-l_Y3CK2s*Kt*72V^OE) z--7@I*1vxfBb28^%8S$ip2d#q`6l(oxeywFtSU8A>y+{CXfc_D+WA%6bVs|@ev#%Z zk^lr;*-~ug9HTDIU2CdJ)VDubZ2&Qt+^v=hVOG8$RCMQao-I<|V3kMh6x<`LWInAZ#45($3Bi?R zbttj%snbNmVW;3V6I1OorfL74BX|EVAo*YH-+lXO$SKK)+wW8D`^7%k70~Of2lebq zT^dRQv3U`IQ1d}YXw8@rnGjwT^R`^LOi{AViuOi~LBL7a=Zm@n$_vp$AM4zDeFtSz zOpEq5FAZ1bBSbr!)(e{!p-V%GW$rQ_CmVAtm&cXRdSAXA0*ND&qnc6$G|#Py8D>+Z z7$Mz~k_NU#L|;&Me=GTQVC-91>kEMN-_>_0{tj#Ho#9SBNVWGVP7jvP2V4Wcb&v{o zyjM}g2Wb?>Wy*!+vR*cgv;xuEhw_NUIV~-8{Ug>sMByknS5<8@Yn8L@6jEsZh*df* zn0KnO{-KuNyWw#C=)ojPvXX_C6M_LFB~@ zo;|H!%tdH{R;DtO_K}hrby^|u$_3(m9GyZ!$d;s^6v^-Y$K)%3lpg}5{Dz_5XAswi zcu*f&$@@?5#IBvVa6Upa*t5QX4Lf<~GPX>PP62pi*tkE%@?~C%roE0atJOL-|E>0= zG1lEUX1;|KMYkqz*3PFkHFzooMOoOV1QNteZ`go$`ZnGW1eBWORH3S7Kj1t0=uAHiMKQ}GHS)m-LC^1{H5e9 zc`A8TU*8?^)j^BAxah;37&|O_gBfwsp(1uDlJ%AlllMXP*?*Q&Qk|46%4O|hUSO6Q zB3Lz>SCbA!nqNFK4Pmu+rRyd_y0=vras{U-oRcc+jxz;0yv&(@UQQc_^IC6>hCT54 zJU$a7$VtIXvDO454Y(0v+3#XD!@(7R@yoiZ8YPh0#4!qpn6HpTHvP{~YUDg?->URkT1f2m3B2w4WVjg(0%K%3TX2p{PaVBEt zQQ@+@LMc+3>XL++7UmMkin_QadG|MyZzlgTSwM7q)fF2VS=z;+5paONyyExAfnhAR zC-{e>7lT^8|J5R!PZ5!hPg>yCO(^PFja}s#e!CL6bn|IDG0ucpN#kHom50efI|CS= zE=q7VC;lV@wDQbZVXH>gZvZA@0U>2)h2&}1JeTLQv}|-SDKndAxjKPFrIC&pHD9F} zm(Jum#xw$)>;ELbniRmgVz2%8^g3kUbuo0T4$L;{E?3TbF`&mGyzTlWAJW&YgQpHT zYf!6p`%$Ccn~5>)3}9R71dDRoPn5nqg8-AUS(o0d^6KSCc}LOpOgX+DEykgp1JAYF%U!HlIA#$rNeV#$~e@4JYsp!w# zJO*h|=gYa23}83_B>sqV?S@b(sS3_H{(^?wnTmMw?CyVpo%tupyOZCY{J_u$+IQ6t zGp%v;V~_onI(a3#k5)2R{eHI}C7;1q_E#By1oA^lxE!9HN8uAb`&*(sZlx?M26;Pb z-4lX*N>~F(S!pqWJWzWyIhj^wN~^l7cKd9T1CO-QYKoCxs8!mlL@Af;tf{QP5a!oi z<{{uK6fO|DSym}Q78vQDCqPxNb%=Hd8EjL@6~VbR0(iY5gtU}NNIk3&jmm`10_0(! zFr5>ywQZ@qn)%#Zq=@ipTTb`acH0aCf|6Wo%^lIH)%?vkb(px=5tKoM{LjF8u7gj# zA$j}3uO8gVQQH=MG94ws;luF2s@x3(e(Wk7suujJxjeRLd?94Zj$xYCepM2>*oOMJ z^XF&lV?PH>u>xkGZIfdZLN=StC|az-djEJ{uCL=PpKL=~H7B;KyhUEUlTD15f03n( z0!bus^fZOkYYC={^HA?*3|SPVP6TX4_$Y$VPuh$`0zxsT4$*boPYy7He1TWCD5Gp_ zs0EhEV}Iv)k|e*D{KLLtK4`r|+8BkQUPkY&ZnUM|bUuTQu3=W)*sdbdyK(E*MiN9C zL9Pc*%*y8Ltq!5|pWs4HHxT=kJxeoRz~N>4hs!)juUR{RRA=Lqp~^N87gl%wTk>Uy z3y&smOWvFOp1}k9zaRH|6zT651`ZA4Lrx#sK_jgkh5j+H4@oUf>Ro9De1LxOaeVCD z?epC0qo&JKu?1`fCZY7&^3=wyN{yon)pCSNQpS5Bv?>s%1fjx+=T||s-J%fdw@VJT zDkQb%B$g(Yc$uQS5%05;DtFj_KW@0R+jW^|o)8E@NTdbO0ZJJ#IzZAG#a?=0jhp4Z z;J9<-(e2R%A^3f8pe^zpgOd(T;S3jyA>LFD3}bu4P%MQ2;{QsLnNVn!n;6WK-tzxL z@|$4!XUQXnEP1auH{1^}YKB+C^rD|10KjlLb{yU5e~bPFL#|ubWcq#T2D_ zc57*h!qe5<(}@Fu2e8pD&*>_%*GX}f&YBep;=`TdC3|)^O(!P}!FWwzmF5-_s7EF%7*nFYk_)#y-3!Q#6gQ{J?uGt{QX;mkq_JI=Rk7m>Q)@_56qGPA zZ`#rT(#GqZfMX^Ym)DAXc6MzY2x9_>6mY?^&I6>a7pt@teXjWT$^T0JDX{+M$6nf= z@Q!2h@TC~Emngmr+RK&v+sl+=Y3B+c^(Mf#BMkc6&Xzmnd?wNqP+Z~c@yV=QZz@Gj zmVk2Cs~lst37DKZx^8Xyr0Lq)0%`tn8ZS60F%A|2z9$f&fZhPI z#rSf5bHk(uBHJ*nO&p&PnC5YCQO|E5HJjV7j{>j8kQ=T8jne&livxQ2b;yzNz1(iX z>Yuv5BlU{zMTj?2+@YzlKjN`wc{zO8jRE`T*TL2|9`~ip9-9QLOQq`iS=a1WjbcU} zU1V9fee9KT7rS_+Du ztFp4pqjgpJ;}E7>3uLO$aEN*;cm}A?SY^~J zvvyT=kpDGboJ_s$F3Wdkp>C=g$vI&>17HbJF;zee2muVjxjupb zrwMr%(Ye;(=5zPHXR4>_J0)|g1P56Mf-?ryr3sK03?ER ztBxPdLVoQ@a2vmAs@XO?`^H{^llfx*&ZbZG3R%q$;^?3S@IxM~ccTG`d#te@ z(RBa#=6>||FFLYYE+5{lgE%V|Ye?U5)@Rc=arBNVFK;6nSl(U>Dpc=`lR=DO+jP4w zjU&I!Mz2?EcmV&Qu3VLy&>qiG>XGn;DE#a6j8Lu-6JT;{1MnFMa3M0Ao*#E^assgG zXw|0RMALW4jo?frdD5-R4#g+a3vHU)ck5Ua?C+H zx{L@a?%U;^pRa8Z+hyt$&2w1xHArV6oH+1jlLb*3Qw0E}7Wjn7N~CNq-j-np@E?Fr zR6BSpt^wUh75)Pfa^wn-A~5ZY5(yiG1+kcs6^59wihVF9pNEu534uqfW;vGOCJG-}l&E2mhUrBx?aec?qclT4>FZL65_f_S36xc_P-gHMM zdbvMHY~$e%k7#aP4qXt@p9i`cpQ-5`b+~m0KDjgaZ9RVTQvhB>);?pcRlyLa+|5-c z^00aC7%(0`i~W&#s~}MVwOKt9LY+TaPR&Wc>PSb$=20oz^35b8S4zf07zb%T?;jjHjjy>&$fz1+kbGx~#%c1y6ns zAskr9D(I{PJ&ki|9r z;4j0Sg*zVSwM758ag?K%LE{J#v+sRYYe_ z{1|7!9PK)M>t;!Gn4fGht!m;*tBMYo;jEILvBJjSNyEBywkn)9n-u=-r**0HDi1cJ zxHyiLd^ImU<;5!Qhr9dL-lsRoYlb^@htZfr+Yor??&|FNu+w zE>4fVt=nTvx)X1kQ%(`zcV4QKT4hNmu3qF z$bmaRlv^@b90atDrr-}igJr507f*7L?l-f_651_7Au>|CHG|y2t4)!HGYX)U%;LS> z{cKH~zDrSUtQ;(gWBdv&zSgPPp;b&R>Sj#Fj3!_9gF#)Bt#ubpZw zQxtC;o$#$FUAFSRXgY|#M>VX~bkvEl*TueE`@eoDF4x7c+V%#!*P;z!dnF=;JX4t+SH_YvPPEvxT(r2y#65zNxmM4TV2o=bB7duBo z#n8?a(%!UXy=t&ZbMf??)P7YVeKZBivACTBJ!33z3^7xaY?n^N(sJzlIk+3=R=JC= zhHw0+5Cj;I%=GDU-gp27ejatS)f8yE6!pp>5%!_6CCj);k=ZO@ry-C!uDegfF|VeX zVA?^z7C25U>AU|k`5N%Leezs?@7>V5HN?wthlWeqMmM|I+}A!)54zT{M+Y4)8r&my zBAgaig_?sLcG>TLj8;A9xIB!vT-Wn;221t2oiavx{>Yh!LC$lCCEZlyg9=>@i9U4d(L@7q$>~CV0reT0TeM zrA>hw-kvwwI<{|{*uG)>ibx{BtpV&E-4T|Wyv>=|+9Ec00y3TeGn4>~U%?R$sY$26 zrZ~j$3^Uc?oA7w6p9vE7oG8jI3jt#m5q*01>%gCXIeE0d@9X1N9S}pNy^_VhttEZv z_r2WSf0=^l)uO}QY2Vp)$Ih6`p=!#TVc<^u{nQFms3J~w3P`l8+iHIb(xbTu=ghuw6UJ)6b}mC`YB@0s;d9dsIS(riI-Gyk`uY0il){i20Im zwx)z2ff$4$EiuM4rE_QO`gBs3{J5CdKoy)Lf_zu30o9t*Yqh=`-3L11HIi2#mZBNHXTu`CQ~>Tlo^A^9Q7=QYEa{x-JdG zQ8GhVV538x@w~E_&f*od%6b&`FgpT+Nx7J_Y_k_sgSbt639cY*ZBgY$hEf$G8#$^5FU#3 zq--Z9&4T{4QYwYOI+=tZIkmG)A?4gr261@`7R1r)S^z?_@dXjO>eAqjvl76iMVPZH zN5)`?8q&?7+U_j&B|uBubdd#moNyKlelof&3^8D$GjbbLM+>{ zvB6OiLL6a**a{+v6;P5tB#|7;e?X}nXzV%EuMU(Ai*?OkSQmQy3L?}t63w1SR>eA#6Ez9vOZf!M_Hm%*< z#KlKT<%!jGm3d8MF-~HgoBbrO%nInEV7j`NGiCR@G8-xKR;d`<14jXiX<=xeclg%! zsops7rfqe?pFGX8;V`d0)^M8JKtO+`E`~90hFDv;ExjrF$E$pk2~8c#XG_0lN2ck3 zvnGi#u>fQW$i%~aAaSf>Lmp>X8>Qi16x0`5YbWip8`YjvX*IgDv zh(l9`aIIN7L$pm=3l7&TLOo7wXR9S3CDFAk0Vqef67#vwON-M3joX8`nI2g#GB|1j z-_|oz*?{-z`+oqe;)~H~^cuj(KM=jI_mkUGAEdKdKA`O1DImagSIvA?UzF%=19d>D z%09}_d)2#l&UQn^x0#J!nUx!OBm(w%F;BD1R<<6Mr76M)ed7AoQUGJds}Pg3R9|CM zS=G*~Dh!6UL<%eIW`2kBxID|0dc@fYHU$c2H!&&(g54;QkUy8Igh;81+?Sf^d147L zxm7?WX&WYb0I)vTFSz0hS-sIo;dE`&GL;#ZG!3=4ta!Ur3dL~n7`r$Zaw0=z?^BAT zTC*o4Nt7kgHskaEqJJN)K(Zf&|`wndv^1op}{v#gqe;DoAMzn?3wd{w4EQ^4e>k6~otQ3cpC zr_%Ab8X2n?9wo(SO=v~gTuWbODa#dA1T_bB%VLvOGr)m55QBQUW z0#7@;ZI!ca#S#OcsTgGd_(9xpqb+x-vYAG*vRp~7OUrbg3af#x8gLaFE)IC?#Bg;F z3r-|9X$j~xv2vFCk!Ij^`Ce&|ve#cKXbL{G*4PZP z-`0Cxajru(|CS7np1?XW(;H#_Y9(>; zh^0*W`EtTA0_XM_-3Yk9h>&7ldsokA86`1dOO3;bbt~v=)9W7PSzP1^II?)uOkzR< zR~y~`M)WPXqbcaaBSWv_P(-tf)oji}VclTgwy3t+;aPEZJB-v^Z}&v>TC{mQ#i4OG z>0}%9lar4&`C>}Fs%%Qpy6}DpBtH}A6PcrYEE3`E6H^6mSdeN|y|v<$8&$k*!m^iH zhREjGc~ilEji2E(fk(Vu5s@FhKvZ@*Gx8RJ2PeR^T-fL~2c-V>=wI}8tFgO%D#2{%8UJz2Me+a2id1DMfo@2Znh4`neLq2Up8GF)_s(@aWRm+ z%uGfh3x!FtcuN|_sVKOldC1~~cob@#u7H@BLSnZ3L>LB%(!3wLvbkmb=Jvg?1BozZ z%p3mHbeyxeeajNj_h29^PXcTXYzJu5*(ldHfgx4_Tu;kV@MVOe{QlRYKZ?E*-Py&A zb|J|1X0WgYzhr@z!$Et;7AlKBQbv8StUXF9HKIp)eNpfrwM^=D{HMKc_s~2;cPlSEHGbvW& zmyH!*NCcc}nASF*cwxtN4DZ7Z9EhaFdl=|vaidK$dRT%telo4`h$|g(nYpueauxIyyu-*VT?KU$!Lt?X>|=kEr&nsbgUIwkxG+ zt2~q~idgP*lR3-a{)Ngx6t{KVsyNL@6Qt8bp*QhLF~Rpd3u9PQEv1gDzakk^?(`Mo zIL|qrz7`HMw2+OCDqwqZ7GuS!r#g+*{CKgL+^R>e*#Hz0RMu(Q zGsbo9F&X*}z6LinWZ9n``t7$>SC>hH%j3OzzPt}OT!}br0}kgylwez>csV~@{55y2 zN$~Z(dc9YyinMAZXv1hU^WAB(EP(Z_CK8yrRK~{F7cO_kRH1({PYeqR-ZFGUIe?ec z#*WzHM@hrE22(4lk>y~!%Jw#3%cdRAnvD5tjo>k34Ywq-jqi?Yax7y*90bZqypm>tiV{TGEDX@%zyuU~gfb-fLf)K0o)Y{jqQUuJXtc!e7 z*Awr~fZb+oq2EPu3Z~#^`>Fm|rADq!$2Q59i*_vA<19!(j>i@Yd%PcyMwNHD2M&3- z$0>Ct%+MuIO3A6Fl>Ql?p<>Ee?&_|{;(njYR{^E{8hGXBqjyB_x-#dvPaE~PqMtgx zzR03&Z${OFpAe@TL|6?n+}Vp=Gi)EA9*oA&yB+N3Kfp*OG6TS4#eNma)c7j((~Sjk z)lhBYc0c#?Hxi?H&azt&#bN5Fr*% zTSmD;7~kj$kv#*r28l339VDH z_ReII7nNpZY~qac(fzR5_xC|+d(ms*cD?i+x^$^ZSH#dW?%TJwCS|K>VJ2QL*BxcN zpded&wI0yU+Z;I8Tv7wn%n5?@eAINx37%FXWOFc0-)~i>8c%`Bw)OtF+p}F3mxXru z{(KyYmhO1kly){B&8H|RAueQ082KSz*10QHGCuT5apynRvj;U)H~p9BKHR;BqVMmg z^F(LckzM@;!3X<5#V#JdbJT#CZeQsQ7+$*YPT%du1`H22YF%$zN57K$y>Jh~*u=Au zQ3W+AAI_;Jf;G2JEuSQVBTL0F%gFtln>h%#qA-5n2Z@N+#84Ec4PX8mv7? z{5?3?M;NZX*OF&agt+vok)d^(Z(`tn}b0pMI%v>@G~C3Pp>2fhE*%iIG1J}gT-?~~M` zuTTC`TrI#2asVE*9EHS<=)i|DB)hJh=+cA#&Wc5S@jS+*=~ zmlpF3uD32UCIrAS)}cq92fxE6R3uX02BXy^>v_6AUT@k^=BvwfLS%aKu-eSL74HYG zlLH6T-mBBMCydm2XUEXX6j~Q2G79nF2cy#?sPG8emV(_ zP+XpBP-i)+EGUkTXOEOj%Slyq^W~JxlZULz<5-5-*?h#Cj3rObeJ5R$<~PXzTxsemOeXRfO*bq3|8f9+K^sgRzG^(=U#*!yLDJSt89t&pvF*INoQ9 zb6~C|o%`;g(ywOVX5VYzIxcHM5VaxTjAORi7#2T)@jG(~9@287nMh~b`1k*c{&_U* zdk!ua@ojBPm|eQt2h!V{&1FBw@J$~OQ~meKM4QnFvtkqIXgiyN!nh*l6rJX75~Iwc zvRtcDDNCp>EC)?zDoq9YK+CvvI7wHX!P(vcP@?s6vw>q%i$e>D33n3-oW|5DXU#kT z8XLn^eEnexD!Lc-(;R<0`b}Uur_p1(X#QqbB`T_2&)VI7>ENzcs~7XGf@Bvp2r&VE z)?f2amuZ)w>!qcm(d*QJbA7H3rG5x$y z5;cZXslZGTz&uGIlPpOrpbzF4$b-2Gll8(Pp~`3Z@p>%$>|h0+Hbql_cxvc4`v#oR zZ$#(O3(*hk;??!VUvOqaIp21J=mnL#_-iJBq3 z&Gkn@yLo$X4J;P;0t3c5M}9+dRUYO~|w&!kbkpV_{$NI-U*NHoguR>MKzj z-R}3O^jfykGGCo6Y|Pe+Ebm4}`?gICs+GEB z#`83vi4Te9Xp-n9utnJ}P7PPgVW|Wqk6A6it0^l|?*n74H6Udo`t6S0{rl0kqA&H+ zF`pVvWt$}K4GJGBXR94Z?FTwAd779USKeE9l;%Z(ln0XZ9u}su&2uWUl(+-d!r^=pY$I85%EFvd!?SP`Q z%at+KFIXVd~9ewau@OuTw8NQC+u2QQ>3uH4e`ICj7YLlyS#Mqh|F(RFyjV75inju}QqCyMn9A2IuXrSj^>s8)V z`0cb(@iKivYE$FvV`L=(s%(hU4TDHivvnfh+j%% z#;Xj;gnf)Pu1&Of4A9~%&4qA$pM{l-GG;Hb(ox4dUI8d%KP(FePUz$CD;yxmJWf2A zo}{LENwDQIG`i3yc{`D8vjW9Ql4O<=dOn}?>yvevh-s@#vF9+w=D3KnJdX)^$x@vO ze$7&oaQ+5I!rY=klK(yW2C$U`?(0L*6WhIO?;LLKFe- zs_Wo_FRsJc@M{0r{`S{bFUU7SiJ7j_3o6JV%stw3tU`CQw&Tg{y`aXe{Pg`wry$s_W5MU&zHr1s9V$b2e42*N9pJuO|D zN0Ew}`~MgG^%ua#9fS5g1u}cS_uTK@*1fHF@M%5NU=4Jm51L%WnF8GEUHqorO~~2` zSM(XUAni(os-k|BaG-|ko^=f3`wy{ZYkSo z#!;M%)ha=5!2~zU>Q;$s8_)RrglagJ*#zD|FsZ9BY8)F-5;jNTgaWs-EihgJFESD% zeHca!h_FO?|BbXhNf@FWsBv;VLm1u7aA+W{5XHqD5&XX6Q78OupPCguG6>~$g3<*e z#}*+VlIU%TQzNpnaCJ;1Ko5Vjk14_|%hCIK?%dnrv)&vB;ncec^F#8iPgQPq znTTx!^K6@lxE%D&`&smZTzd|FCPKr>g+YTq&jXYERqKD;Ck z{{1kJ-rOMQ!wp-T1lqbR%1r9hFPVxLIub6_}wn?O2Hw-&VdrGWvjS- zACt*nrLM&BNO6~ry@y{y>((L4loVQJ)l&ouj%yrN*5oUIXD2BRxic>Hwbq(8F9oVz zsR(_VNB}1}Jv7*UQnagOcU*oZF&V$%h|XYw0F@j|?=5LSLxgJ9N}!()pKP_m%O+<`iglP(27 zUEM1QD?DLO7Ik@`_0gh8a#H{`<}xg>^Jy_e#lH#O?U$l?^s2sYew)<3l58Cwk`F!A zclj1WT`U&)PFL8srLH$Wx4&7<63pQA@WL0}^>JoZIZ1Mz0mywc7q`Y(vVluu3IC-7`0v1P9fZuae zg%zj(f<+1NSl}`rrMa_qWWua~qGxo!vFmB%yIA*b&g6C)+}YVKaQ(o(vcC9d=ndfI z-^pE8gjzBOEV^m;3XxBJ_UgII)&ZwI7BB&u=DHWnnhnx-D$h)$jxz@VNg7jQpvgZ)ZCi?5r9_ z)Sd6z;I<+6!7KMuy|?Gs?*$82JNR!deoh#;I5kJ96W()+dd*j$N z2RA?^B__nH>533rjs7m&LHNoY92aNpbu>D`01c-^5ZV+Nzvk$qT|8MG<}utmri}Gn zcUH~DnXJ?7#Td~LmBRPGics`#;AY*79tThG*1+J-d(61qjvemHMdfXuR=d6F=b#N% zZC9&N?p8trs#~?#kPq;Y=12>;WMPEx!V%Gz z-cF~$8x-bMC&Mln2IP>D*Q;z(m1Wg+p3;|b(}Z4ZP5{RIQnv)SDmTCzJ}g$PPP;`4 zkRxn({r%{-z!r6Yy6^S9Tieud5R~A%xu<8_J?U2yT-CM|=z$2+S?CBnI~(LVlwxh} z#fcR(tYPM&r3zcdl*&coU7G#nI5V1(c!X=95mdT@i)=CuWt~uZ4Yp zE^q(5%+%^}gcYEAICh8lz0LqM^EQl1? z$orVZ&YPC6S4Fyr2_=c8oa;BjT~tN`iE$>>m0J!J5D_UHA!l^#rBb8Ra0289oIK^y zzf5DJ`Y8<@EXVIf{}MFnvFO!cYr__ZtHxDStAMk&8U9`l52mLE-5Js^;r;cU-ejEf z9mVHEhx{+VcVsN7YLO)wb8gZ-78Zm7Iz(Zeyhaj)isW=Ln(Hd5CQEQRY3DKU`trwU zvgB1;9~X2Sw{B6V6U(2xUYW2khpMF0ls&5~a2-KsNW?--Zq%*c8z=k4_@ouW0*eQE z;gFtD#BM+s{5oSJUym1nvBx%9trn}EB zpS-%Pm%1#C-^HhQdtT3a=hf5YdeFCi2>&}NDwNGIh$gW_hYd&Vt?7!b;?mkl4eD=O zN8+q4?xj50D~uh3v<%$A9JP!5V0~127av(0`vTo4RzUm{c)r9HxoLwL+C%u$3QR6# z9oCsOuU~e4vsf;=lh_JS*HU1VSVJ9Cufq(BFrF6-D@JfJJHm598N4>ZNMqvc5u)+U zm;hE+rliDq44@sfX?FkHfEm9Sjr+YWPxMpXw(e%g5nKt+_tCd)eq+sdT%!)P6JdDC za18-$4wvr}3?GzvZ0;N!kIH(}GN07##L2Q7y(VkQc?bC9=pLiF2>mK=Fx{xtuZ*p3 zmVmARkda(omm{EEHq-=$@lj+9)Jle8QTV`%MkWPH^RU_xxl!YCRm?3*;y44#Y}hz! zTk#xLmD2&COz(dUJk6KD-#!Pd>Q4{dEtTNg+PLlGZ8MQQY1+Uk_pK8BBG&Ngtq0Pz zyRzsZ(*tU?S_gSl7oBiHMyqPbHSnz|+XPIs`Ad%mGy(8fx(t~tP1D&@yTSxM^-Kb& ze-9KuO0iHJsHJk54PiVS^SrBaO##&?up7YL8AIe1po5Iz#Va<>7n50)JabbooYHww zkU}&u@bxYhK2(Ec#aT+I&O>Acygz3|Ww*m(EBib?+6O_lHw_H~x+qKFW(FR{oUkdd zUn(tF_Lvq@@*|P^OoW-~)D$S5_PG|JBm>FwJAkhWHx>Yy!-VGsc9r-^no8UV z_EHva(q!aQ>@?@svI)w%$|F?f00z;XN)w{rMiVgWkGfd#6lf5&n&8ko3^Gjt7!(44 zm{whyryPhe;@!!pY!2(O&S%Akq~)YZe3@GfPZJnMo|atweu$wJWl^ds$L8oJ5%TRE022e^fs?rho=PmGv#-oa6w=LHiJ1 zO;XZoH4oE+(J3A8cO~5~{Pa3A2BUm(Set3E1ZGr%HKbwnk6ctp)j9*tyvU5iv1as5 zW3zUuP6a_V5nOjvzQ8@x_Xym9eTP+O%04V~7*9dq?6pAnhV;yhCcNlW+GJt(FxL{; znZWdE3Ai6L8@@0~F-Ow|zP+XogR{ffmp;uHXMm~UZ3c*57MAM@sz*-e@L+t%WsQM} z|55a1VBv2bs*cX8Rc}OkLUbwSU=?bhI-9FSY5kg_i*Bu9^$@T5^hx9G zVY1)d0)pODdUJfOV@FNh9M>4A4?&nwWV=~cX`dy|t&l6MLRA&dNAm_SGDZj<8$IEx zJToMJJNJg0S22>{y;fnoH(ri;Hm}3(mIL8a2@Jal7SR%Oi;9L>f;Yo{>vSJTHo)@o439i!P5v{g0RG(HQQT#q;|`YAx$0oM=3>%+4h%9s5^Z4a$1i5BzvqTc`TS2(^Ie7U&*26_bg zC!NizE|1IX1wcQ=EM|A6D&Q22?i9 z|4sXEHE9CZVVN-n9$i?m20X5wsH`xv3Zsh>D3-=Cp^UU?@&Al|V>BN<=+AT5d$dOl ziSJ!&LOz5nzAqJ|TvTcmJ0DQgJ~h|x>F6Crf*OaJvinKUf5$Yy*3Hqbn3r8xR&EBL zL`a#J)C4WQHC0S|iji1_lFG7FaDu4aMk0-Uicp~d-F<)!;k<6&arYFmsqK0BAD`aC@FsC9`#r zac*zg%5x=7B!GVttTuAq4^3bfQEGknT|oOHI8W+m-lgqCz-Y3EUmpEWV0f>G2>t`t zW{h1^kSMT{9ox2T+r}N+wr%r{ZQHhO+qP}&eY>^$ygC=dm-rC;y4Z0s+ghJr zA>pC8Lku%gmq4^Km7Y%s7!*S1l#;aqQPzFCD!p-`3MDgk2;GXqMz5S-y;0g6xaSAo zgIY9Ol0ch0SK001Jh;_iLeDA=JA_DDf{+VfJU$i>6j#w}S|4qsop?l10hAPpSuhIy zrAUO~LpsG%0t+VhGuroPNKn>Ry0 z1Fu&kymsSjbycMy6D=V#xDk7~Zn|Mg3uLGxLm^bum<~9#eia`+g7NUT zY@vB%QNw#`tP9)g1RIaky&60b8N%tk!nX#C`S793`Y2H1r;vvTK!jO=!`2)VAS}OO zN|w4W&-){ZY)B{x$k88y%!L1)7q`kXNN@+5c!p!bnKY)1V$6Yb-{$c&QVJTLafG!Q z70yD5Hidff9k!mEf(Hd)8thq&ha- z%I@=}vRk&EWf~A_e#Nx#uFKQ`|6TM{Mwe>6<#0S%ghWZlX@UTbzSCvEuvz%{#V#=$ z6$j4XbCBu@K(g;JLm}yxPfY;)b<5LIABB<5>{QV+53`FbIi&x98VMje-_C>e7Gwb` zV;AZ8;i|ya&%Vx?VLDorlRtz5`b{Hv zP|5whhlfs2tCCTh&wv1gWziT(3Kas07PB?R|7pcr&5oi2`0eV>WqtaWU1YU!`NS^X z%iz8NyW5I>4Lsutp(BJK*Iu^*LCsWE!LP{Snu( z!FKxkxuk**11`5??`yyJ$)fig)ZusOxQc(Z8@n;DmPp2&|;M%q|j={k8cK)y-E-q3=wBNLmp; zeHz7fDU8FaV}h613|et2{->rYNwECFf~9`1CnTqgTr}qT5oC*7_Pdz_(Ra_t{s76K zX5occc29y58f0gLd;xn{q!E66vm!=B%Uz->g|I?-Mu=#;>dkf_e$+gX4JhH30WC&} zpLU;q@s3#XZj?!l{q8qzLVnru$D@#<58KjNVpFXy@ReXGQaPH{{>Gy4coS~h=(Q%* z3TzWQZmh7lYQI8N?k=ZoB(n81H4+R==WTp%6!V~hN*%_)r!?ZITof}>B?teOWYD{& zKfS0jqe(~Dc+m+wYl}fM%i50Cc01FoWu4X;Oxc!(xvo>MAR`{qmK^Y4OA<>m*5U?{ zqq0c=ud?Y~_9T(uaUi@P|4$HS(HHNG7Q2P42o~b-83+fE4hRG(?p_P$UPNt_FL={$ zbDE5UHKvm_bA<{=$p{zt zlwDSF4+-zT&_6yf8o{w9GmZ8%de4-NN_QGrv_2+)Is%W?<_BLF!oI5Y=!{D9u&75O zg0psLsAkTby*7>s-0*p|_WDVX#UM~wC8=XO+s2Aq64{i5f@!);wt-@!y{2(bCE#K7 z2i=Wb^bZEZ@b$d-kDk(>xA$fP{7xVC6$S;JyULW%N5R({e1OM3R^*VjJ+)_lz8ToR z*7wltI>4(m?_J6s)kc7M>Yfahdr84-16>ET{SsX6G|H+D%=K7X6&hhQ zuNZA<6xapX>4Al5Cj{2;Q9-8V+g4xW`T}Od3OCRKUcMK+usduib&9wCQKmvJhbGD$ zmCI4!QSEu4docc_it0tCe@d%S_7(vH%Ax_6L58Y08Jd}p_9ZsfsupEVHsSsJo{r~x zuOGi_dpFel(*1BdY(F;-y`DBIFNTk+L;IVQ3OfHG{}5H9p)XGsyQwx45a_8&g}Bv? zJ9XdeBnp#k zsVf=7dCxqoa1gDt<(Wla0SHl34t6%vV*sqE*3B6N%86MP?PK;Fb`hZR%c;i)%Ab_W_Imx3T=|o4LNRUd*k|^BhR3wW4 zE6HH50g_hnl4XE!|7aW}FPEnR?&k?U0hLxnk_nJPfEfoe(+zNfun{wm?_H zM18v^C0oSVF^b)_LK!H<~XE^IX)OPH@^P z^{p9cxB-5tW2|I9*9@OzQ;9o$_Xnl(4FP~K$l=;1mG7Z-)GDKA>r4E1dAAN!C+uNXlu{*6p`A(z6TL{y`^znJx^a*{W3b{X!)JZ9ATM&*?JkR~? z_!rHkMVkY@&T;>WX!=>$-N)5w%isylG9K)LoPrwZqma&g;Lpb0xH=$V+@h2{@C3+P zto(i-Q}qN1h|WM=rVMYH4PG#=_+W%leT2>U_2fERtxdm&ZD*p%Rxe`6~JAH8gB;yo>K9$UKhzuR}7&@62FzZ2jvuAcr;Tn z_PQX!bh4V3>0tBg&}znpw2;G|w4=VJP7m2+I+{LZb8D^v2zYPU5(7zqYjZ{;(QlY4 z&K!CJmYMuLr}^iX_`axJzrF1n54s7^Ob+uLbD z5B~V4y%U)7yR36ym8r9?m;`1dqRI<@QoWl&`D@O(TdX$7YED3!?e^&|;vw?> zH03hrv?8o_0@Lp1vCRPtlEl!6$amIUz5z{f`rLAy>KfQLskJFl6V%}Z>wUzmddfVF*i5!^f;62#8yk0!s55@ ze1ptSaAbV*-jwu_n`<$Z1yx!_k5hTAs-`!Jtl-H#Wu@8yu#Ho5CFXph{lC2@F6Q5g z8<8RB_g%(Z++KOlMV8LpP}=4NNPAN^zOtuuqkFMWgS*1!PxN9|;g`b4g?xW9yoNv0 zq)`zzyG^gZRpEITPkC>N{d~%Tw0~rF{kpqxWNAASvtsHyNMUSTq%3{9_N11;81DVNJH9mY$pdO}4@ZozYe= zNrI7`MzBQX=a`;Y35z@NV}@{+WOZN{e9H0I2=B5Hy15w50@^R4o}IneP#(k^-UXg| zloKm0G=tBM$+Su@tMppA8#eW+hUfn7prS9fZ`s9ePaUX5HMpMZnpXF6Y`%@!}b|T9bdm6An*rVVrgvES`*z)l@y`V%vrOvS*Xo5UY!WOT4Gk$D2j;_ym$< z;Gu1IZR9c~2WXGbfGeum;Hq6zMU%;mkEWwPwf1&kx&8MrwYn_U>B%we>18wdrx(K9 zo>$FN^EKAPVJ58U57OZCH1jh9Fly7=EoUDO&n>{U5y`(lL@6FuBg#}G(uBIwt>u^r zgvxJeE+t@8M>$1jBc_BI4xs?67Qpfw@7Du$fBf18{3Cyas7Re#Q^;L;S4!PhXh=s( z8vmHO^&rbI6Q~atfJ*8E<_u&@^p95DC8JyHYJkcDl;x7p1N*ITg^!?7ECX@YE%W1i zgJr!l+n-nn9m`)(Pn7qs3Z;C1BR9v?SKJEK`Y;d+7N$Z?9wjiN&;yUWs)-Pze@c%1lnJP z=mLJkq;u&9n_JUZF(F%w zu4!%@&FEV%S`~Dc>z8X>4Q1ocu)49}FKsKqujC-W$UT>x`tg%DcvLd^CEh{eIehO0 zin&0Hp2{omJ<`p0>t=ICE6`_&a812^F#O(QrH`=XAlbOszPvmI3VszDBNvA-wRG%V zFsUxHg2E0|N(augyoHt*!dd5y1mjP*&jY}WhIVElFyWxRvO*yyj~9t$eSMsynaLHk z129A!i~mPvIM@}jA6QdG@o$JuS3F zXI#Rlr#G~>K6d|kl@uk5N*5ZD;gYp?ZW91G+6sUINB9d}==ul1;lvk-ABeK}RD>OOlkHruqtz%d*p3xtd4Q5yl=>cpWUcj~C zXb)=S5A*FZ!ykdbt-sok@PeLMFP!^Zn(!F5fV(8hp&nF#YW`dR8dXf^K!WR)r28Mn z>9qKL;;;(b$YdTA+UqipX=ESqVY?z2>UWFXYHf5wlOx;tPrchZDNPxV-5~U-B+tU4 zm*Plar#_8+{j~$PeAdqUanGJ)6hd3;Q-#BakK<1#j;^P=zC6?tu>Roskn8CsS#AQg zGU1kFbK;M%^NUaeMHxGwO(5_B7OG->9XlM~oG`YvQbF2_#&RH8Sgbp71Tw7IERiNT zC4qGf`^g(e9y)Amyr9^Z$a`?)k4E`3Hj-m%872chaTyZwFoHPTG_q zpTMHZBI?;%D1fj#Oe&E22;QI-n0s)A(?Y`P2D>%cjw8mSk2CFSA@|NH+$P2}#KSX| z?{CgBBoOMk6v(`r(S%Pi(0}?$iO?K{dNVai6)r~Oa)Baw?V7)~=Wl~X-Lbxg^T{P)JkI$9>$^|jXI|k9^vJq&t)%s=!G-2$ zvpZ9Qt6zDuKV1jKR|Lt>CWiR|8X5Zmd)CGr__ZlY8TVn*WOVX^RQjWP|LOL#8Nq*dLVKPm$9L8-p;|0x3nY@@k8t%^_{ik z(F>3gr+sud1^kybu+;IgoF=*9P8ZmkG~29@OKz{)=r5VBD(s$BA*qw$J#?e0!k8jr zyym7Xs=^6Uun{;k{Z%|;uDwJ^Z@l9o>!8sqRg$g*Fx>uUbK+73IL{Beqql>*P5UupsKkcqv#5J4w?2(%8lIK48YJBGaw9EifqImMi)Rl zQD91C*dnIa8#9 z7OwW11Uz6cXFpOIf14vf)bM}@Wvs{~!0AUtS5=jm=ZW-r$!hl40dEpe-`LtcnbXwa zXwd(`B~N&&K>E}7S*sm#0sNE;r6E6*lqe3xbh_r8E@tYNDEG`~pjZ%4&$w1um^aHU1L@76Wo{~KyW6QW<<=TGfwm6ibrV3r1v)CuCm+%JxPdh4m(k_`P?vsE z3&^R70H)U^bz0pk+UOxMJv&6iHM-YBhG?$(Y#|Hr#t6YA1gQLAlX-FtBwI!OYa<-l|Va(5ea19Lb~Lm1vMi}0-5 zo(tc!$u9I5#EX05{WvKNMbQ4?U8|_YSGJK`SL1X0Y)0(Or3=BeA``kb5sMDx)X`$` zd>xG`GzLh9(txpvAd|!DX5B#yyN~ai1?|GpS--<}Aj_y#JArgyUB;bt2Yv?#eNTWO zv$3IH>6dWAO#Tfv1*u+2QqDzwR5a|U`No1s9?H}Yb0TzYlU0hyA%R~09uxv;f;AxZ z*8j91q6{F35|j#9hOAAP-Zw7G+c(^s6?y<__>oEU>+!@Ip8Gg|-2;`?z;=u6I#=@a zRwKv!bbotA#hp5FR@=AcrRL+H4&R?iC|duEDsZEl)b;zy@0ll9U1CJ<9n{AU&O1Mo zeB3yUsIUd#*T7XoYGC=ZrCsjWT12zGscWQWfI~)3cGOAaYQhJIV>`hGIu1{p+Ai3X zAqO?2$IahN{#5_ELq`D-hTZK=&f}GhrV2!%K*b}@BAb{JFrz`QqDggk0f0h=^rIlK z$)w`eA|YOWV?lpC*Z2kg?R)xs##)&AF)fkmcBELgTm7EjUMMTN>$5@Ce6%vCV#CLA z5!v4|i&tz7Y*y(dw7&!`&sXxG$XZ1AVlw>(gUlZ@0L77|wu65^r4CWyl%-`)$u? z&T6dlvNleJ<;Tzy>t9{6mCz^oUK|Kt7Y(&dUBjcNmrkty*Tt(UdG&9I**AbD}jY9!<3ZP+7C~6#mirI4o^yLfs;2 z85E)3u*X7o97A9*@Rrn-eq?A4JmfH?MnAEI`*J4vgGzSDMH4(NU9~>Vh$vv-BDSDk zMjQtay+OYQYP$gH15wNdk13ivsw-^!1O+2$L5|%s3BMMVmOu(}vA-Cx@n2__2wSQkl&^ zreKKKSwLB^DK4pWV=hiftbE6r3!Z%O8BN!b1$sp+bOpem=p#d z_!+n0_@#wuR<--Wz^Q3zuR*XjqaIEr{lw`#uo3Tn{2zif zaZDBuhXO$CC*7?MNFLyG7PZxlIhbEq>2XwKB(Jdyyul_IBysC!-@IP!@YHUrDJmo9 z7yxsuptPUh#d>$_ZgF|gIj&C*ChlPr9Mzy4G$zj54@fuHVNq+lE9DT;Y3}Q`T_rAc zicAMkG{Cif+W!EvgSm*uw`+DxMLO0J@ZB)w?-mq16YtvEdl} z`^Et=)XsydO+LX_msdd&V}dZ>3xfsg3OpZ6IZnJRa1Fq}+hC>BSDB`R5yo9w>XH!* zDTOr}EniTjId#k18u{prcw#^UDy8;athofsu-xMupL@IarWp`T(CzK`YfbBN zFd%(R#49fnPwlXY>)+cj_ZwhaCsf!y0f8k*)MXd?=kHYh7FJUExeT)keN#yHRD#N1 zdM`aZ>v50m=j~>@Td&vcf7s_tkET1=(@`u5v>FM`Ly;s_jjRcz(JaIkNAqJ*##&_h zoOkelqumHX0M#le6xl-k^N|dZfGG1|L@U%2DmYBAtramSv>iA@Bn1OFPTgj@A4#IC z=G{rA7jD&FdwP62dylV9z4dxWvG?9$DVlA#G1;-3U2#M@PqVF;teYb>tN9_nZF`$G z2fI;9uP<4I9*Cz;?3LvX9ebuWGJU*iZnmww6t=tjaapptwb?7yKi!S&+7!to3)dfc zn1&|vn_E@kKbm{=DrrY`QBIE}glgheal@hjLO5r&;Qrck+YAlW%DTzZi)CvndTOi` z$d?H76>L{O1#4w95$^y|Dy09(z8X8sq}wG!s1Og$NNt`obNJ>>^A zSj~K<-{{fNs&V1zte5y3DJMDbv(x6atuKeBM8d&2ACp-Pn&H~bTX%7^cfern%GJ8l zbW*Gk;WN$8=4akxyCPv(GZ>R`KB29ptkeJ$-1{K6>hhTrVk`|hK{VM7-)ST1SmM_R zeyesM`L`DVHPTC%-)U2Z-kdcs^Ajbib$c!wUW+A&A>yS}FwLg6)24HOn)~SGmbg;! z0WGeZmHf)M=g{pyKj&ba=u6a0#I+l>voN}6vGl7n=NLP&V8=Rzky0@lrTV6&I+i_a z7l<((PlK#a zDsWpdB;)m9VtrR9F~r-40Mc&@D#?oaby8!d!>@QK#NJKqiaMUX>PI+}4Ee6-H- zOM^Py6*QQxyq&d6jRurgA?PY}hA=s01jC;f&gifX-dg-e-|H9X-$bHhKhu7gW=fG5=l4HS+adJC<~MQCb2 z73f|^YFWD7+z#B$D|`B>tGE}c)~(l?ZS$52woR4c+%NVho=2(G9I(~JnO^Jm-;9$j zxOQF$rQ3b$!j9I>S4HVDL{Mt0@Az|G--ssANfyo&gX;J-N;rRB_{*Bdd%?n`eFtGE zKe#M&*mD_st$*;2>pRGkX`60-4i(wM&`1W=&Zqy_%ocCePoqZprhlj+G+Q=zckQy+uWD0gmu_vqdFZSZ zpR)(Lj#jv3$Wk{ofRVCw8RsNRrbU+rbu2@80OpJJYdQ@cv-ZTev@JHi)rLBIbGr>N z4eTP{B>H^fm#y_|ca8FhFb#Gxwta;10!2;@Qy<5|C4swLNmY@wF!sKNNUS?P^V%dw6ggeF zaS82f<5RyW6?RA((X?X%n>9z}`uXhIuqU6zq46Ad6gANOfz&uO zCs(D;+}cIQ;kfcv^q%qVI=vB~V1wIM{h}~X3aOX5??#>FCtuf7D-^;G(W+KvpT4L5 zZ5Gh`gnUPh&f(5CZMiEfj+JGv(2z<}3Bp%Z|Ns zx=Zkd|NCt=#LtfnqSg!b(=Qvmde!%;3tf=g>wixVde646=1R2g1bK*j3hC!gCz1O> zdG`$sy}qdz?B{ed)(hqBMILdC$yf5WttRZzcwpCqqVtI~TuP-}W^a-I`eYJn*X{a* zul%+5Wn@3Av6pEUyI*Yw^>cL4cSemm13pr^!!xz*Cb-v%nMiCF;^${!@UsF9w_78h zKOkLy*M}Xt>t{lHS4ICL;(Y+r53gru&7-={v-gQgM|$-k6f%k3nYfCX%S-+Bc2)PzI2=o-clAEh zZgl$~H^ff=$J*y$YK`wH^dNSY|KmGq<0Zpv-u z_r26va{oxMP^pyLlY?A)9f*r zpTn>18`x~<_uIl@be9u(=W*_RG@JSqQ;$b&%cX6AdjG~tFW64CZOeXkR;|t3{`SNq zie9Dc-#Qfszvlca|Dzinr}ydBU5^nu^-UzT_Q~5qx`X@uvVE`0zg~9G*KFn==)(Z7 z8KmFy(*Dm}-e~YtYUQ?~dvUW7;aNRh_qUCIBBa049F7)G!DD%x@b16WMhf9`Nqz4w zI6l7G_t$oy&>4S*ivveP7a4JITa2+cgNMqyX{DH z{5Hw^S}J7@uPhG7_`O`!f0og{Tl&I|Obq*vnf^y<-Hthd4{9n)ir=klp$glOB zDKkAb`}~w}m|-zb&RK&!`KQ+6ieq=nVT&opqZO~!Evt13^@OjZa>ZJnJLjDwM#~u| zy*KobZN?9E6m9007{|^23l?W{X(5-nw|12Ea0%|xVH>2m&~t0ep{M<@&7`AQ$#ZMR zVTUPp*%xqhCZ@i9%kDai<~g8Df+Ym;9MArV)4b6r&dhoqOih{uV6; z+&j93bHibJE9Q_?+mAMe-QkOl?}nwnbI?^_Rj`G2Ny7enTP5Hxl3VIC|S2z2$j%3zNm+bh)ip zn#J+^I6CUfslM)%!{zk6Dkm=GWAON>SGzqNA&<%BF|=it%Tzj{bQ;QHAfFaLUnD*$ zWZlJKmRmUe6{}s`-8IQ6-X)(_@Z>j%Vf(Q>yk+-oyw`gAcph2B)??LULv{k*_Q<;7 zm0jhP&4te-F9YT4`FA`{$t=wKuIECByS!ei|M%n|I z)s}wB&fO|Gj~*_aG`3x$G(W?1%cjFGekwf5Vy!zkv3K7T&BkWJ&-3!EcsWcnJLi06 z$!B_%9ouv~p!oPD_4q)o`uO*FZSc72o;VP1_q*K|F)H1^T|K%9J{r*<^w*;+U^?5z zWNuEovDsPlB=5k_FN>SE@K~NqKRXXoW}Hg)T>iZ7_^#H&^Lai9Z@MM7`aHKxk1lMo z<<{{z@BMJw{@x7A@ju*;zVg}r9&_(F9n|o9JnioM3|D{L$8Pzq%H{PNI90Z1e{_bN zd@7eFQMTytQ(^0rbQjDXl!;tUPZkPC}*$NSIzfUB6<9gJ^shyq4`BAO;3HOM(Lo7I$i@N^+kkpoKKtz&ilt3|!`pZXM>rZ?3tNX|h zg8{#I3hF5;V%4v*v{2v>Zrd8)x zAciKL?`D&rqZ@~MX#+`&`4^e68g~8$C#KW=_AoQwcbByCPVj6v-S^hJdnFfM*p83m z^IOv|XXH|DQF=%3y(884Qvv9A$=@!+&-$msBd2O9TBLmjvtM(bcw!0}ALnoZGne7p zAcq#QxZ}wS0#9Njb;ca3H7a?Lr1S}4!s=_{ z)$}|D+gY=$W{=2eiaxpHMcAi1y-!E7m_ynOJ~8|qpMx^eYV0|8&Ldz4J^A%|-sS4q1mV0z;#u9Q zw(yHhknt_tL+R>VI%`9j9rJCT>Z_8KTH=n5u#vm}iDU4MT={KUk6v*hrzJa)RFz>9 zF&6xz0g$x%LOKF7#aRStN0>{qzc$0HSkd=4bDngeckqo@V4WDVpA_vm6G@DhX5I_a zLmc$d0$Vg;{v+{$x5R^aB2DPigoQREE~+yf+51`^o-kIf%qcO}U*Xl-zJ()aJ_0P! zP~!JlL>b?dw|mTs`&09m+rnMH_>Xs(=O44bt4fl;Deu6KybDXEXD;aPcfdo~EzH)n zDFR-6PL1yv77MgRMt1p+pW(vPb#uU;dZp;GCW&IdE)Q?LVuc!E=-V>4UT2=1z7cg{ z#_sUOi8kA0I~pe~Zu;~yc0E^LZ0F_zwOKrtVmMnRX@<}{PdT`&I38Hk}KXIG2SUB&m`S^a>Q?sCtMF$nM97nyg z{09d-a%&quEz^fNAizm^PR#QoOUr67E^Y-bkIT30h(5*vuzm7SZQB zfUt1o_T0wp)SFNtdPEtpr~P2M*9ACi)MagPYi)=3M4lfnoB|L(8|2ymoknC?b^OCM z-IzYtYzg7vz6q*!g_0d*VUDedf+XfTHJZWH(GW^x_I!8F%AZAGPIkg}=AG4S8>oI3 zkj&8moStRu#dw9+CvrSvhhS_i#eYgONSjw>6&Bk1eq zO9w_53?uWtiomH3*WrFdzNLC-OWUtUM^5z|hSSwzRNATV(`e(JeGNgxQCuqs3U$9% zJ)q8*VrYCa2DP*j(2iLfnGm*j2>5lXhw)y@8^}+}t`pbls1C1vxYtzQFb30EVKNR= zLLe8ZDPi|Z-nEYX1n6_fAt49Gfpx@6ScM5G2Qkje*#*Xzx1ZR~_K&6d3b1n<{NH^(*>mI(hh%zRT zH$IoPeiGaacOI#9c405@T@t6sB4%_Kv(R%ZRjqrglmk$P#q$$xhe#=s-XxTkwk3OtF63# zj5mxE&A%*!I1~KtDM4wnx}HCch~~HgQo>ItgJ8o)zhrSWjL#n7H(H|};67k+9QaJL zD^nUZ~b^plwnILZCVWe&(ULH4c0oql|6#1 z4YG9lIJj?d0G^qN$qoWOE3qzT5u&+kjdiz%)wyBO`_vtCNdUJz%y@-C=3%VVDit>4Akqv8C~pHW zt0pk%b#aZ{H6$cml0A@88rKGt91o){k%u0?VX;!T9nROT2XE6c5e;AzD}k?8_8ROs z1@SW$)(bzk$mFcaWCrgWSBP{n=R(EmGl90MfPX<4sgZ|97S08f(KwX(Sr&`v;DjE1 zCnX^f^;0W~N)SN*a5g5|EB%xqj>aoU(#Plj-iqFUO?-MCZ*wo7y9tVkNd$(`r{$cF zh-p6B;}Y1`lDA9fJq4jAwM2te zp45PYw~l}~0if9^C0-R-z|HwKvpmDsMteV`em%=lL)kY-C^lF6jv7uhd;?S73OYps zek*=A30UL~WQAL<+gSCAC^+Vxl8-O_hBIGEd!P)T6uYeI#K#=SLyL$zGy!tg$UDat z7$eq}`_30IBk|M`%u_9Q3rG|3Hi44EE^IxR6)tF}`+U$wFOYO-n6e;+j$$qx#6f&c z7&$AiF=jwMywE8U1klZ$cY^cf9XQKJ;|QOD+~4ug20pimRQMRrnNl~!XYBxRQC}M^ zU;^)$&{t{_ZVYtx6?dblaM@YK7F9eF0tc2S3!q2a3;~~jY_vt``M^qt8K{OUvCC2d zv8O}Q5U-xj89x}o6~~)SJXsM!!5VsvBuBYHEY3((L8tkU|GWVF*!UMuX=^lxKd{&( zZ!z7{79u0u2Y&e{Brn-mi}a%JYETPn78EPnV{U}7N-A8}C>m<05$%rbzzjL#H_)^P z?#djFYu0Ef{-lhpCz8Mq&pT)+pE#O{RH%;71kw;x{NMi8HC#(Va1*=GSSNBJc!xW9 zf~*p%;1td@?PIRLpCLxq%OKu(o{tH72RoY#T|&cJJ~o&1#x(mv>zUSvCEm*1V~u{Z z*-G|@9>5g8eKutrWQmmAlP0M(Sa%?>K|EMNa!App=93&5cVtuezRVLv&zTIXPQs}P zsst7(VdB5nq~l->P0kkIu9p6KR+z@NpwsJ9LfxAKBk6_SPQhqi>gvfd*#`BXli|_(imOU%ZR}G(6Bmr?i%H zoF_)C&ea+dt!agDN9BT;@+uk@n>!d*eISizdVs_;Q+&B2Y|Pp}+#-0wtlZ%jhfs_! zaX-U?W;5s;X0LHIPsu4GQUX=Vk$+qTJS`f&6S;zY%-%L?miR0UR3qCQjn#kpB0x;( zk_xYC2t#|w8?C99AhYiwCTL?g-t*jbOfi27enZv zB%MLe=(1G(FcX0%C#Yw7zlX8G$2R%dPM5c#bb~HA7SdZDkWWs(*U6q?AUOdNEKi!V zauzgByuO!sx<>@LGko6B+%^11WP!$;j-glHXcMU8S{VGZtWva&AFjai@3o$0_73)0ED)AfciR!^IgUQv|J+Sy^)Vw%Rn~QI2;&zIZ@u=YS>55kOW>3hu z1kH&OjctmRQp9KdJl4Vi>F_LEl;Pu#Aky(iH<8!o5yd82 zHr1?>2fKebjKwT{A}a*1R8CmvGxrv|F7zNG!1Lna@j%6>ggH0T*z03DL9*2| zN2&UG->PwZiums>Pj>cfYOf_kz_2mqwHinZ^Oq)TAk}Cb2&X_~N z6Fu`qlxe4dc0zY?OC8Nh*oaOPoCqF zoj}@)eCOCgR`l1%qL#THwYBFQA(`Tdsq6cE{`La9)8B*hJy9%1Bn^G@Hf=0>MkqHU zMWY(2C-5Cimlr=Ti%WDX(>RwsH%d6c|2;+`UUsSXIXERrO{z$OhbL^Ik(cADX8**h zgpM_uTHf4e)Lu5h&SieOEKt)(eAc%+k^3U!c+qfuUnbox&Z2=IMod+Io`_(%0?hHWE?;C z8OoT9ONL2l4uUWN>}uLqpPVP3h;9d&I+cZS()(9#d-PtBaz7)@p{*Y1`YgUnGM~1>*do%V2LPJ^+wt9dq(r|SgTj~8qUliXGP9k&S0&PuxUH78&%Q}m_OS^Am_G#`mDHziF%R-&dXINN^#Q$Vc0 zInxX-QE$W%ZHa8$0~Z2}Awpa-fVB&ZteN#dy`Bj)Vvt(1WQ2+403j^B3yySQWjshw zg1O{spHr1jvC5(PdihSO7;?R=R;4o!A}iezJ{^h~=E{ej#uFZ_bq5i| zBIHD}+W~6mW7rEDu}`ViErfkq&^*|O?O8^~ENhw5ddk>H^(!;ewZjmj*oRy{hh=os z4)e^L(Bcl(%Mv5|8$zv;NvF^hnmyo8cj+??P`-@-;4Oj6j6-q8Q}g~8VmZ6 zF{#%`4&I&R_BnRt^|a*}FPog1n9*<=+nc+eEmW<$PH=x+~IQI2CLuu6QV3vHCR zLG}`O(6kiS7V!67@TGv%wvg$hXvZ?L9+w(f?U(hS44J=&vAIU}LWHnqzSfpGz9)?6Y=shp;o zkII_ow0@UE8bo4CSdN~NT`fK6oTV91h!J)XBPJM6uGWpI&vy)vCx@TR;1<~LaJp?N(y?UMru*AvxzC$QI4dr z8xpCzMs}6RsEarxIfy@=?j5nfDXG;+))B)OI4b+4kzH=nT}H9S3o>%a zr)0-i4t*$$?DQ#Ni@O+aANrNTmj@WPtUvVCGG-WY0!hyCovbw^x=+o6eG%J|XN*Dh?Br#$x5YDPxZMx=7?YkglVm&8OF zWL$O(W~yhB$H_{>K(#xS7Geb&c#l3zes0EqjpQOludXcZJAao5aZeu-M4XqEfy3z{nmtp+|=HWreek z2tHIPOEu0&aj#Thdm3$|#?k0kBE8gf&2;C;SnE!*+b>4+>B6qbj<#6qA3o?Q8rwDb zjI%jLGf^8Zd(wKUuL0&28QI4f!8hiZgKK1GWFOp+-7LLXc9la$5>y!dnM|iDsX453 zp`KML>#@qUP$-5y@w9K*`Pc`ILX~RK81cQrPpLDxMk*_|+Fz-(NW3Py2uJGeGtAEe zcXN|zRNPZbI#Am?-62$frvtUrqAdk1j%{R@W&+OH$lBO~4Ir()+78*r=|a{W*Z^N+ zY_V;U1IXT}j>Zwb$uw4xI#xNOn`30>VXWROQ|b0pUP2>#+me}7$a<(`w=rU@6uDtx zq-KXMxDW?bTzUaLGPyiRPy8$Qsf%hK@+I29B3>sgd|Gr)CafcjjRYpX1a=*f>yca zr9;f8z@GCQzf+BxBww|)>RG^>3^ZoTz)z|6O1)b4A54tw{mhKiQf22;0tu3wQC3^T zH!o>zHq+cJ!1`IKIfD=GP4{JaMrw&6^h{!Z54Ee@$i9QIN>Udi?Lh{G7X>6uEQjQx zg^6c6U#c~b9fy+DN!@t~>j5kJEL@Cua6c@nhi7SIJ#4IdZn-kFo4#AZdUL5(s*iP> zX)G-JbyiUi8fZjr!wMD1+&t_k_Oa6>(o99Xyj0F5yB({??i$&z-q(05H`CqSyz^rM z{pWVqjO-EWf#NyMX9y_|%`WwQeYGVy_B*(ctLfgid8{%g8XL->$;lzB-lqJtGKCJJqOoLD+Kb4Knl6-tEGyxQji(hzc2e65{=(_piZbf?ig8T z??F3yxWdzQ%Mdb+*E|VB3h8-_7UXt2SVPpkvy6-lD45u2&NhF?_1K3RyAdYfP zqP4lMneKs=*umA_eN;u}P@$F8su*>Hc_XWUY)95jq|u43+9H0LYpoI^%09|mbEb4= zQF4udGDwN+1dpMWDIy1d=7&>gUbY*a(v08`*O&JLI}1RD10h zc~V4H)n($*mEu}Q=s5kagou#G&) zFo1QJOfP|bPEh?6k3Z1pMyye(($t5xiyV|{iKbb!t67t*QF%u8O7v!#jl^S~N_L3R zyDGJ@k#+eHBa@vrg_-U{chw_H9d@A6Nv3vHqFjk4GEj7Y?}R%e_0?hvVt7S~q)W|P zhu~jq>J+jf>prT1qtbl>NGLt%vHRSW$VZMV{u6%9Cy6`47oxO6c%3dJ2_SUFD+W68Mxh3 z`I8j{+1EDR0TG+7W=^@u)aUh#?3x~_CzW_D(|Fy5b|tFWJ&o-P*z7{Rp{!gLnmI&> z7Gh{XqP-k zneLjDcuZz*!$QVte-jfcy$8y-#5fuYPwRpyc+i98iHz*cNHrSlLiVH@QNn+8jXcRD z7SUImD|3-mi2}MMIcAC&RCWVM4MF0>$i$k<<=Ug{vhAsE$P8ug&U9atWGc3L&IDdx zB0guvA*ruq8g+>5NZoy!J14kWs`-)yOI0y8QupMTx&v92=a3|e8)^=pYlImi{?2v% zBhc(ytPRV7JY^wNF7+fvk#quu?mUg~(=Ea;W}f>f=NL zVw3B4QfZXhjt$D%pjx0(n;KckE>-5_Nu*GvTVz*ubMQPnu*y>12{1;;oq*nbx;sFeJXw?vd+nyw)`;HNuy zhySV`v#cx{dG@KKYeu*)(yD2O%wR=#v$BjW;#u?pBW0e<(LE8KTv$>4S;m-3Jn_yl zy98OBGqU2jhWy-M8!Mg}gUkAu^<}pgCm&ubVOGcjTO|f5<^@C|LLRFvVxS%yo*{xA(3|YXo$&<$O zM)qS2)Zgo6g7s6?EQBi2X}8On2l8Kj}7RGn54+0M+vh6Kn)Q|P2bei7y}h90q` zw;=fgjm%@LktZsF3%Fz1qnZ>kZf|+ zDi5+^Sj za?&;71@{4dMWvWdjI}H%w&kpdk~pyXv=Ud@S2)#`P^k2a7sunRbK$MO4g4HrchcV{ zJ?mQ0)G_Grr$!2woNDdtyZ{bOt6l!4{9+?7$2Aw+Kf9DK@}Rds#o`py8Q~3eI%#C; zgFgFaOEwruS?N^V6e(sjh7a92M+5?45rcwC7)gK6E9=g579US+Qr`4du!BquUKMX4290#D&SOtvsQ|J_VItr za@)z1P$M~Mjqn8E*f&|ulb#PTE1DDF_k;0=N#14e(@>%mc!w~d;b>oFSthe)VQ0-k zMF!bd>Mb{)nXEC=S#=c8a<6^b`MIHKvC_HOd5_YIzYX-6w(@O*u4Cg!ZLfQSBiy;_ zunjW(MsWl^vFF%1|2+qp_7w1gds_}Lle3WFbAZR6wWs&mcPFiGq6jA;#l52Zlk*Si zkaN(Dle-_*`p)|d6^^Cs(Mfl3*DgNmc~Fl5S>Nj_4gn5ERxv4_8iU^WtO{@KsWSM4p zzfqsm*oqBCdupH8rOzVlD9(MYvro73?4Qt2v(}Zud8ov!oRss@VZ9ExX1(~0htJ=> z#>V;6q;xchGKjwQ- zADA6`X2)k^+^Z4tmX&$1nZdbkBTgZTYCKR zWP%XDbYE*nZM-|nvwsUJzX$Dtl|BXa9r_8t=|Imm(ug9uI{K_+g}rsh2mI>2agISb zz(Kx-di`2#+18xLQBP{Ad%^xxL7f>@pGM!r)lu_b1`0x#$ZE`}T0Zuh=mblPz36o= zC+EQbE)}s7$^ZRxcYR1XtW!RCk;dlMeTAbe;}qzr6~=b4s(-0VdRG5gBh@<4)xzt$ z>C_)pcPn1iEJhRX`z`^d`=aP)qqDjdhOm_Vpc8oK$OhbxeUi1hlRj@J6y{a=HIdomUZN^c zLK$_ZV3RQ6dLs;|1yLQKlk;E{hHAvlR;bmkX%&z1ZMCnd*9slYfGj!iO4gxq{53l= zLXBzTJ4mk8O0P^*sdvt?*Q;RRK06CYcEKE@PsJ>ZerYu8Am87ZTf2T>TqU<#>h8ce z-*uN=(B()BM*nA{PasBzn+`W-quAwSYXbkA&Vyby{bE$$CR@lZHv0GGGrB&> zYhQ&4l#}zJoV4^2thMI+Q#$+JwKC*4+s~c*6d^r`eh&6e8P>`U0IaP+&N$~wrp6c6zcjWdOXa0Q}4GN;zwWpD;Nc&GOM zU1#4p`e%cqa-u5q$WR5@28c2WGazRhe>Nyb9a$G@{F{yAYLJ+fR}Owx=L|PHkk;Pe z*;$B{&KP9~@Q^mBk$~)WMjJZc3%qu+gW54fc@>qXRvjh86HR1q(%M#+sw)*B7>e-x z>S%4ZVVrCp-$UJc3efr5QBeDM&oW?E)B!3@M-)geD@5P^;QL!Sa_SuWQ0GN6XjBJK z?ObXS6P_OPjTn+oI-^grTjfdpaMniORM{_hdT@nCJFC&_lSj(aO^yp3S9(VevP@O{ zZ|Auu*(sv9jcS=Z@tw2YbM%h8EBi5+sRu=jqb$@)c@bJ0&+_@NLP^iE@GI@=R9)N3 z3w2hGIDC3Ku93I{6yPovz(1AkY!!9=)LNf}6oDF4io=UvD7{fdllm^ib|b%fQcebv z0V$Or`_C8Wul1do&a+A9GMkqI*G{t{v|DJ^# zjq-8eX!Ianven15#ZeCq4u^92@sRlg+}(gKG=7knW6QpbtjR zKe57A&lx|o)OkGxJt%9RfzCFUcnVx~?RXd#2f1mjxDOu&`vXOcHj-5j3yoakRi6k) zejnM7zmT`M1+_Z(P$kB_2O2f>eZdI-5IzFCtK>a*t-y3pl6> zvA4+hJl;_JdZf z(-rRZe_O?Gy{;5Id#l)cul-n_&p}b~&bbr)68L{=be;bkv?^pKC_?R3S=som@f?x`a8H5h0Z8@Z10G5bUY2_+^NS0BxRH}2BBUAYImq;;KP!k zOz$Er{yx4~)Z7_fqV!YlBdh)}8OR}%gS!dzh8v%d?8wWwD%CB)lj)S_HOUD@QEF*# zw)X2XcG=h?P{ZFw_Ec;FJd~>hdnoUC`Lu7XGt850(k6C}ATQdZm6S}%ntV8};`7P( z!8l4p`$OM2%kR#Pb9a#lE0tiXSCykc)-ZcnFk9D8~v-G~i6OKX$sfNL0J87MFk@_$vy%$~$YGUy8 z#>jqyQP&2R#~#BAp(Rdj4yF*O7}?{K_a${3o+*kPoiR+*xH@~_(MVzPHhX*R&KV`V zsKFWMsH_BT?Q_7Ir7lGm!$#jvml)Ody-{_TFr&OD7H2IS=_u@yKBc74#A z-(6EB_Rp?27-BDhO37I}cdB{>Zr6+U9e1!c1_7@M)h2L>OHeD{ z>4~BKN^A-;eAN1Hw6cX=1n29gxJhSaQ%7fgutM(olyYxHFK?$ctb%^nvz`--Wojnq zSXH|It4`8vH2AEjuogQEWQyMUos@0K&Q89Az3v^A|C6$3c+NXL#j95Qq^z#h4nz&> zAkQ;8qkx?}Ibz&7-h>m2st>(=eW1mNdQiFVqfXC3r~9Zop~5o-dTM>Fok^F|co&ms zt2H|XO5UThrP<$FPU|9Irj_UZ^swI9cQCsK0oxnf*gWiX^6AmHKywc5%1U;CuDCCb zz_WHGEC7&z*{JS9*b4~LbAWn3>!g!2tQ3*ZiSsj1(>QC_5<7qBgxmvNN0|MS>>oMl zMJrjZeD9~#i52!HG=q2a;tuYmBV6wDroBx^GhSp2CU;PiU)ui@yP}KzXHb7nW`6s? zBw@_ci86W3(A=S_UfItqqc`TUk##TqJWo3DKh(2y462#zBkCEyR3|xzb2X`kG7G~d znmy^9ueF*Nt>UxpZ>KW|cNA}gM#8(U?OAcdWS?F|>Pz>5?lM_NEBvf}T;DH8-Y80z z)qD?h#0v8LQ)llFRXfgsGSOY!oJRTNq?22A>rGd5)w=%~^tceKT!Y@7tuy$oaB{fZ zWON7R(7&`=bi~ph{w_;be8?}I#J}mpCsSZ254@D_QR8(fUhG|as5f&GHSAe<#;DT) z=c=sR($}>O>Y&@8X3O-kQTgFt&ST!BNW|5GOjfeoy^ugST&0>&P^0^!W>lt?9Q+hO z0+}^Z*5*y$LT~Y#;{Qtwwj7O+kx5h{m{8hhs3p#%OQrt$?(MN6Tg^tXefL)6u(?NHDq5P0_15=y5drqTKI}9t;O*8zAEVIT0HPL zdQ0JHGMS)w|0iP=EA4{Xd01=DRR`4?SPSSGGe>AG4JNvU%esA2ZH)XLo#U-*D}!q- z-}R1K>p~9rtm+7g6bsu;yf&JYBZ!X7cdf~HV<@O!eUCD?m$h01 zIs(s;id(3!u5{hsqD=LzbS(?Lf2ntW*Zn>DOs(_^vOjXuC(mJeQZBvFb$@py=SkO9 zzUy01u_{;cZ_!9AtkSc4ij`Mmqil5PJ=17?&_P?o>Y=4nJCCjXWZGboRi#K_;rnd$ zuJ2m;rJ1+fZ|l!3um7gcs~#&+88Kn9%-2uIn^#_krE~k0u5J**UK#aXJLg{N8=jmu zSN?bHOqwkH`GJuvopVzeZd-t(;ex%6r+eOH{qwO`w6$1lD5yz<%a z>Wtkiw5rQkTG4xxhe}KVasjEN>aqV?q_!<}b#MNWH*oO;$_R{x)HC}l~ zt-Yt8Weam+-efO}ayG2_d#@$BD#REd=83F(f>w8 z8P*_r-;HW{^dO^Kzfv7H>zmKI4=~}aKBW?WfsAvn(_au}A_;KiR`^wUKBs^WMdfj& zRbi?t9okI)ne<9J+V=8v<(^BNb_{qibWvx|-pYtU&gEGDW+A{6yMQCGRSu9n98_+Z zySE8?ec=c*uVpqig`UOI-W3brQ&KYnpJ}A z=V~-@3a!{@UH3&Eq}Y`=F=9^g5C=WASyxa6y7gtRl)j&1Py^d}7jMN1#h1HO?JiK|ZF zI#9?t`x^EEvv?`b!u*xJaBS)!?Dk1WZh1BLa*I^kIR%Oc%!;dnzV26j$5NOsECvw$ zy>`)BpH0oD)u}rAD$ep|ccE^xPQuZ(2GlazpzmbwpVCJ|ry6yn5~m&I7taB@S8IP2 zYh9k~O?&_1YSs{q`94RTBD&3MfBGeu_5-_i5`OnB&}7)jQeAAj_c|%F{1v+Q@I8jl z*I!+!L4yjF2%6qnXjWg2opV@jG>cF zrRMNPyEHX)T4gfX+shiCgGw2Ffcy@|4#Ku{`<&jMewx?@7jc56DGOI~X zu~Oy$L;I-cav$g`b0!BPhkd}j22n5l=cQ(GS5Ls*X#YjKx0X#QGpv8QR`es7k@PCW zl9@qg$E804rVoAGqtU^fv~m-=jMDJRwa|k;W71sERh+#hr$CQ(6_a`D$r%FMO(h+; z>wD*r^y8s2xDTe=f%b3Yw?W5F0n2(Dsp^D62kH>1CRl5S-GxFQHH&YS#p(3jd#(5> z{%}+Rj&uyP*0Ag4PJg)ed{-ZTc^ZG{TK~`*t{hF$^Z6dIMc$>e2higS=cLjzfd{r!HpEoG)29#MZsD4*91Es8 z@Q3jGN*Ttx{n8LQ-=pB#wRZPKPvjV>ze=?n9!#Z3dLc`4kVlxbvsaGvbM6=ui=KTR z=;j@wvK2t*8eajAq>r3O*(g%0Bh@m8V0v$fBUiF-iVXK(bT)BES=s{N(48|88C zTG#GT9VTY~Dcg9}G>I<$p>uQoeD6iQ;8b;pxzGfGbFzxR2R(sjaedFO0^Dr1&$4~* znu&q-7V-5~KBTPe#ZRd7-D5+4>1rFDLV9xWu(SLo)tm8w(4)M>`d%aFLthnT-ks4h zXSo+In11DxEEIY}$4GUZPCIWAaH_B3k!O8`?xMA-YILo@Q@8~BdgTiL3V41zGn8)k zu9##m@hp3Y_8(dYIn}*$C8Vt5Qs-)KWCcCiE>JY0OS`dcZJfX5{7X0|>5o$#C>ea9 z8jILH-c9F5D!tB+-)y|fbbofX<7geA6NS}8dyXnCabRkeu4D3Az?kbI)v2-vX>{EH z+XLr+bnHog5?L`%`w+1Bh&|v*5#z!F-91hx)u7f9P48EuriWJD=$wMzwvJ+{OLX!H zjc}@k{XbD{PFt89$Iuys4gh?bR8*u_haJ;Do&s}4=75)y$Ov%~{{;!C9i5c@faYNx z$yk7`I7O-xGmV?5Aj5dhj*R(o7SqJ6R*;|f${mSh|7sc4waMe%O`7)Us**mIf>d)VS^pjDl3Ak!`w4?O?&ycowM8_ z4n8@ZpXEm!ZS87B>3ioYw}1!S#?HHNWuACytmAb?UwJQX8I|W=Rsi&oy43fei*Gib zg>F;j95I#RiKi#|B6_SB&KYNW3~I_Ha6aS13L91>B`UF6s>F>HLKVeGe z$r&OT>|POI)}EHZOaQ*O652t(KT!$mx^yf652jXh^4*mobeIpy2f%?~GamJ zH^PH=W@2wSZBNRzJEIQ0?Rj}3f5pbx>&6*ut^HScId|<1tn5uTebmJ4Dd4n~-~LpN z1gmr@1nI{kYFc?eGhu4f%I_V)p$&d`WOS*V3A5r9@GaNMR#D8mm;*EGzenfHFTu1u zc$@i}{Ow&aA6W@19L(pqYA+s)HJ>6Uw@>acxak}-BLW8GLC@mo6Tf+2G`;rC(L4O0 z%>U@!z6~b79OdQjx}%G*4s^J{lP`hx>p4&|IxDNW>wC*}yvpX>byrtez*>3KOE7cs z<~$Tkq{m3rWO!4z$TnzK&h& z9o=soxe_T?0l)65=iK;Q+~s|@fsSV?#}nDF0+ro9(BG(a6_caJeK6CJm8fhjh;JvY zSI!!N35asR=vaggdKi8%?3mfoMyh#ioiCns|I9;aWr=r2q$*jrmG)Gp zPpyq>%w~rXLr>mMZ-H9#)t-uHNWb?^8BnUyqg=(*zp_JKBD=Uyai4-tnq3V3l&mbE zMGan3EG$|GoaVjb{k^V~=?1;?nKlOB;Z9zxb3YJB*-_t#64514Sb;IaX}UP_rZP7= zzh><^XGAE#Hbx_e6L+yPu0p&-2MBexLr|x}M;si3tpipAC^zb4$>T;B>Jm)QXdH#3 z3<}F0jvhS9>>BD~=XeJG&FuJ)nh%O_yFllIZ^{`w=(1;z35xq`I&zZF z!Jm5YQ$o2PB=h8agkGB_Qfoi;h&bnP#x_2O$u&!T{MmUA&vNIegLs$8J~_*ld>A~7 zd7qum#}p_K5L42pMn_$(EDV(m?)n@sXzzi>&(5Cp5L@p>6lPHH&;QGr99!o^^x~s8 z{}l9CG?Ch8%zf;=Lt35ORV2R-UT70&=PsRNz+#`GabB@k-hEWn6pS5>*#pnxA6D(`o2c&fMmT^k31B;VS2g2*Ws1J zEF!}x-sj)sqtWi`6fqBhe()*i!<~X^=rZU(`EImmVLvoeMXPjhRc+J6}M_ zmnpFDL{T~@*ZgX$Lf1g5Q)~ha7(OX=-qB})*`17^%-m6*fG2;}jwe4&ybZOSjXlmH zD&w{}SC?zeENSgerv_X_&YfC2GH)Ll5L2t@18jVkbcmpQJv&cZJ1Z?r$d_Oi_b*-3 z%4favX~_w3U<9?XmbFh!-g6UQ8W_E8C%TVc{d^z~eD>No3{mh#td`E7un6W(O%Tj~!hJ1anKx|6^oN5B>J{pl^~M zsMK{Np4>`z`4Xvj^%AHOz~iAeVz2#&CS*>G+{*K}KIPyMvwdi*T&Gf8F{!G0Q4V=i zedeqTft;xHB7C@tdkH#$8b`A4zT#f*f6+g)<6&k!P=ljmi+k9cYt$>7IVlT)D{@hW zbPr}woMZ_vfp)<;_C}-8ySyhgyiT89vil#3q7H#dUlm8=U6sz=i|xf${DV;^ ze=biq07ai% z9cVIOkvVB#a$9@U%jcQIj&JOTQeA$OZG1+%Yg9~v{xQ$2Sb$%wAZI8F96 zTv520jr|HVmKkd1Q1XqRM0RXw8B&e_USAIN}(@{M+H|is&Ayetw*f;GQyMUk{0@f_m$Ha@7E}mTzs4-JJquUUrgetPHCu5qN z5!QL#IlJhco&%1_b1+||to=ft2{M;G;5?r;n0!4%PTwT9p$8RodmD6i9fN*bRDiR} z&^sDKB^|$2JJ#QL5AK{r@0^?D?9Jw}P+6{w=|>cY!e$KY>a8qXM&?{MV`z)~tw z-yBz>@CvV+lV7<<2%Z?4&eRLCt7RS8y|Qw3Z{;YMP6Kq==p&_9pn6!0#_!I~mHg@E z!O_nu!q;oQzCX31>DnN>{~pW%Z=6M}eND`9S^3`jhmE42WBD)L6QEWb$JL!b5hWwo zl3(2~yn_D7#xY47Ih7rTZtuvxc3(mE54C1jti5)%*A+hAlYh2&WGlUMr_3u_+Zm=Q zjAh`S=p~-FCDXQ&<&|0yK?HtzPI!yopY{**E*jo%zv~ovWDLUa}LPd&=2qY z8)%LK7-jU^>=#f z;cTN1y9?$3)jn%i?}FBO0)7=9(>_p^%o9O>CphgksKCwk8;PUs%siaE>XRa~qcV(z z_fcvhZM>3|_d)AtKs0fVubDz{SjgsH10^pew8Eo1D6W3h6GovMg@9X7D`RHj#t7S0 z_Wnh&+SwJNThMiXivDrpOE=fuNKj)doY>p!h~~q3S&cYopuI-QG0cuM@SGVRWSjy^ z3SFkHp58S;Nzp2Wa|4r{dFy*yIk@i3W2TnR+H`)7pq5m2;My>)ee|xIT=U4uW`n+M zE6u_WWfA4HzuPX%+A+IGjlEX67TDK+em>1V;-67;H&BAU$Dgtm3tcBHovn7~Kb04u zV#XgZX8s(b@!wLt6yywM4RLPvK~g(d#TW9_Ju(w8^}>xkyBq7E=X?$nyKc(!%T+Ox z02{DU7V<3I;cC`%{y8e9K)Y-dqw+aMMwso?K{>LBV{y|f&N7;ds3Ozxnw zZKJ(j*_OOX&9CgMpU#Xf!R!$FZabahTfi6^o!=kh>{pjOe;G{FxEojK&FStHMKWuq z@jG)eGWG1nc9(g(;0H|8z1YL<^-bh^{HF1VLk$t$Tm8AB?ZaXn_5SR8N4to5piRIY zz5VtFjcs%$itT*)T>DW^u>6g=b% zWQL$Shi;gwu#=lu3um7JG-qH>@4O39(Phf;DNvD|wUX#T-kpn`wQJ}c1N}+s-;zm6LcXqJq5ic#vkBs($xzjZWHKjJasH+*Je zZ#~59v$A#+bBn!EjKYp87NzWpWJ+Bk`|IEu4FBcN>`XTGs!xI9-%WO4^fTz~LCJlt z!E~}l$~M##US)@`!c)O+UjkJW=6=KYSld>wWf?%Yzz6%F(oN;|i;V>CHu?O{+UvK- zzT2xkHS-AUK2`-so&lx_UOEKKw0|Vp5pi~&-4HP zXZ_#)rcDF+;j;IA z60f2jbdJWc@90mN?KAl|9WRYzcT~OUyrbqY$7r9lbL<5=n>eH9f#jI(jH<#i8y|iz5mNY=J4gLwC`07L8oKT~U&U57WM>K#nC)<{ zGp+@7p!bO$e(Z9kwMJiY9ZY=2LQ-E%EO_H*aD41^_&%+D9eXmhmB^BxV|JdISS|C{ zCgsMXxrHz$nfjSk?XB&=XuFmQp?oWx!kke%OW0_dLw?Iw(rnup%s~m;<)JA2?z25Z{PP(pB(9sVs873N&jPBwTU3LEH zqTU3We{^MXma#pclD~A;%jx?g=I_XoXF^>Aqm9m_# zIRQ6C39mti61*&Q4FZLc}7(^K>=Z_nsiGwSdU?jwrt>YQ;=~PyR`L?zlphiiz%r>ZFPLUJAm*)3DQ+BnlOb+8N=wk)Z**oSw#PrB@ zT4$2%@1;%#s4cY_=Jr&^{7~E-Tm>ehqfcoqOy{ql6YLnEquXGzLLE67k(wJ=QqF6o zn~}O9Y$!B2h!-*r;#rKg_pS5DHWDo!BV+O2u@I3C+4NwGu?-ZL8|T!_d0Yn?I%u5E zLGL=qBL15Bm7_Vo@T91@QqiDK4uytIfWOT4_^{a9n4Q}*J@0RUYH!(xe~XR!oF?aN zrLXCa_(%L*816rVetVQNsP&f>e~Fxu`TDu?lk5EDT7JaF-H5Pldwcmy&_{*>35qM! zO=_PiYOWh+kfW`>=O=%dL@^ zlb8*OlFY`q=v^LTaLkbt(k@!fU$P=#`XK6f7$zlRJ&1#Q?-s02a!QFMe#F{4m^h$w z#+pbdrzB@Nt^KF|FMr$k?^*3(wKAvd9R(z_HUHf`ezyFV-{$MVkdh($-{q#M&i?x! zCTiX7Sa4*KS6z?XeheJ0tqST2~Qi_d*tkkY{jR%cs`-@61oN2oT}`sO)O zD=4dj_uuyLHQ<%!oV4syWnL7TJM>FXd7wjbFv@()O^^920G91ht8i{rD+z zDk;qSQ!oXQJPS7S)_DxvM|3gZI%RBl4ftNX6ZKT|xcUbk0=__%2wOTjkK5Qrkd4p* z%-Ud~IrmK@cHDW_4XU5ex%&ROALzIGBU+#9onF6nw$|By5{HbDJrK#e$={^CS^NLH z$P6@XPd>Svst4z|_B*&2YW?+Z7BE#b>xcEEE1I9Jz30-aeIBuf1jsN|{ zzgQa|OeI9F1RFf~yi|Tq_nS3OE<^2W$>^JF+W0xt0qduI*t9WHc|E%>fByrIYK)x4 z2XA!J_sm{X7=M$`9cUE3@TfC|UO(JJp2j&Qd$qzhtnK6Y2Na#it_vm&pLA9Sc|$5C za24ozI_hk7#u=$#X2;@Dt9BL^eGU4zwmL}%ow=Q^@?wunJXRTHxI|8ft8Jm{0G)@+ z0N%}vlyfj^W(u@fvOA=*m7)KV4xFp3XYXq)nnW*=^8wm8dUtDPLDM$6W81d9W81cq z9a}rLZQHhO+qP{x`SR$zSnE6M{5xxYOtY%Gr+eZbPWMvzP2PWwsMwt)IpieP@5hG!>GD3ORZSTNg)xi6LPOk(r{W} z>3TM78(8D-LzPtRBO_6<*hR@~c{TsC9a$C9SGIV8XfBq~a%W0=U|gR%2IuP`_N0wB zho&D-7bS1xGxbLK(f8}*^|j2E%#JXzv<*(5V)}FTW?(Ns<*RN}jg8;)LqoYpO>#cX|?#w9*$2Zt56Rm-R zW}}Z;rnS$Q6tn|F zS$NWzdkc0?8anUju9vcdf^w}2!C6ov+2e(|3Bl{G4a>N2#}+`}KVU^S3T(D~jM94*1^m2bF=3GyPv$S{>)6 z`e8$Z97G|HVA1A@a7CnkY(MN3PJ>=-zgm-+x+~@eQfHZvJ=z=@p3S0K)F45x;4I-Z zz#lB-&OshnG{EnO_>@IwsD8Im+!!8TT9fRd<2jC~2)fAQS_12>OjQVolJ$Z%7YGNpd>> zfnf??08U6zsP^L^J_BgU84xBKqm7bR$9GQEI~Pvimth)|Vt}AW*|S35yWIn?$c0XVoKKcQE+HZ@KYTw+(8%A#c$38->ejLq zOVIh8KA&Hg^U5CLAH2o`=!P1B5RcLed|#Zy9ZysO3F#^aefmf*yi-Zn`x_)X3nv65 zMlVVuWEuEL1Yya6PuRW2gYQ#l1!MB(g=$i4wjSN`paI@Pz$6yXLLat80SRx z$th*&)nJ zZlfpAs-zB$S|d^*O~#68&lL`XtiC0VPu5T+W|LdQES1&zgWucA`+ zS4m7A0uNAXaRVvIECVbwJ@5oeZ7VYzo+U|zb08}-4hSBCRtTnyhYgOLMw6?CAB%CdVfF&@K0WWFi#Z5)Lc?FZE}!7&lTxEg3+b!R=Bh zzrLBuqfci-NpxO7>Y)VQfYW2%rW==u6dy?-Qc)xeOcKl>e|ETz=YpBg14l_@-+=bl zZ^l#os0DETLr#>+nLdnJ0y@C_{j8gcwEPir^g3+EkQV#=1<}X3tB89atMk6?A%1a%0L9i#CX2Z0m%Ft40z%- zlMr_SCxkNtr}Hg&q4?f)1b$=7@OZQX=O#Y*0$|i#h`^0wQl@T%xvhHkYdU%|*Om%v zWt92PqC;dWKDba9WHGU7AqAIS2Qh(oe@p$rP=45ndJ{m*%>`iNV5i|1JuS_~z`Z1j zm`vcF+&!g;NFK~nXFUKE;pTx;^|Yy!rde{PeVS13C{qc!D`XM%xswp|E4*;p0T)^U zK7r$7{iAC&z!>D?+SEjjh)ByqLs9m24Mar2vThXGj)-Q=OCW3_(6tK~wm9*}w$K?+ zh6&bLg=E8Tzd+qXeq9sr&G(>f{kld6yBqbY%#R8Tk)@53rfFP;9Kyg0Y!9>MLU4p^lrsJ6 zt>1;fcbH^99c~RI#CT??duh0hhSZzNG;YUy$A~0F^pla~V4sK~3+)B2(Xp4OB>0sf zrwk|61fU6{92)5!wo6$mpfE=}8vvy`qLzs|R}YXp9-KkPS*swJofhH<<_`*f6L0~d zwq+~503bA7&gSeeJ!xM#ZLcl{bCtc7tPa0_0DZrp53 zUNCxjI71Rjpc)xCi_HksuY7-#;8!0F(4YobsUZCRcG#o3L8fY84vHFA|3KUdCOJWz z4-I7tfB5hpc#B(hA{9e1DP-aK5__I5FUoGmg(Z>Z`nbM*q})I+qy^2#IU!3X2zGct z0WowW1p$#1c)}#0@z}$GIlZvK?efM&?+I; zzNi{9Y;e)OP<#lGU8xrMssOCTV4(0xLN#-0$0Sh6_(7x9{?FCURUJz_C-0|UPkc}K zO?2+`@0?HYPjXFo?riJX+tO(1k@(|0oXyk)11#$L%Zk))rE7UBSHZu(Q89^ifK%QI6vd@Q9EO8%C zxpfOA{Dmg-{s+KFXM|7aHi0R~rLauG9rC*np}V&Xf3ss+Yy){Hlrop#&7QL{@GueM zk(sSDS_G2YupE=96yU<3#buyXQ(_brA*^C~GGgB4X5di}P*CI0QLysqiKLY#v15T* z!GxuY-5^qN(NGwLulA+WFmJ@s0vS&w=DZD{UmzEA!|TH};hJ#`MtWrYVPKWeWAsmS zO$=Q;l>RIvpu4~Bq|l27;;f=@)cwIcsXFkL()HcF6_?lBg(#Crqz<2|?^6)OCXqyw zKW?=o2@jO8aI&f3rrYk#OmC#IKPvC^qJdd#8!igKrpTgh*M7|%DzpShW#+K5^L*I6 z!g7e#w$6IwaJAQ{IId0PdfR(px;@_xDrB{dYOlDmLUz`26|kLwZ4Z8!1Swxj7~^s-EOpjLHPV=oo#3lvKp| z=>alU68y1PtZxah`4&#Ue(`*b0ik~F8o0DV=G&io_|r-b6OjjE?vX2yDv&7*;w~;~ zueIzdCqT7RXiA=~sD)}%G3HuQ7vf|L5YhMr`OF37M`1bi9GS=%4pew#Lu)2N81$E; z5Ep*mE#w?mHgfC@t*$;u88?nM+PD7s+3tsAiaLd*wL@G*YlFqnpsejyQwJ%3ZhHSyJxqvCX@SXLL@g?jT}?xY}FKuTg!w zEDEF6eJ&H;`p;);lT}bKnTrji2P8Bfn9<)fDYvQ)#M~VD`z7ABiez&D9F4EVGRjuF zx8EUg?Vnbj*E*3>+J9Df^^aZ}kihQxE!W)MKe$A9a!qhDY%PqFOQyZR4)?46@*<11 zbHm}9;r^X(_}bM=KAESxMr{wKORPG$gkr*BCF`@wTgwB`jr+g^JVq%TUrwgORxNn_ zLU`Q`41AyQ+JJ&7o{(7p;T6ADM3A%WPE34jGd)LarhARtFD^TLj`FglZa$N|EP(S& zXM%j=mBd4+FI_+P41ci9rfbjFiP_C&edmZ+iq;P!lR3~y!U`d z=R7D|{|UMrC3XLMN#)L3$d#V;#y@9T?>Ri)===V@c8o2y`gW+nr@lPU;5ErD6<#EP z*2XrT&=L51c$ zIBrFyw0mLf)^Q=u4E37If|z~UHB>ovv^lF1X0k%&<@C8?Kxw>gkGWp;+O50dJVGyu zv9N2aSy%bykl%3>q&!hiKD&{Y){VJd!D6!#&hJlp2mEn<=|yHeV-zaRbW=^X<0{SR zO;~^(9xMwiiam`5o=)r08Cy&BilVbZ*gTfc0(y{nAfTtvxPb}$^_ z=7clKB|Yq8Lwlox1#9FgE6j65`se!F4+;oZeN()IfLN?gG#{XYJoDJogBE$q#UpJ+ zYp%^P1`#@^T1HQj+IPW?{5sJ2C#u4(y>kxQjwt{QIevP5kWX-gH(uHQA3($*GyWPu(T7(axg?at+l6%Q*XoL$7#6 z9ZN|LEQj~U`fNtS@jEo33wDf5OmlUUJy+S}#yz{MPy<*5SJzk;3%bV!-l1}ID@E>_ z(DTDs3tjW|`~ugT4=*^>6O|)rDA?7a3`Mq40@suHMt8F3vHN5SrpkwV$@HXk43;My zq#|Ck1`U_4PA}kWaH`3poVu8ujgxt|my4_vYZ+EzseJH=J@tNAX0|Z@(Ts?$A2KQIy^b!D+K+Z|E+E-?h%G`o z!227xBoLobHPl~~Uc=fr(LTM(`7~M8ZX(hNj_1LFZ@R4$RatXc+@_i~J_lRDqkd%l zP5-DTe&=5R=wN1^eMYs3w)u>j)FPcIQ|bKvm=@up_S=VzacGdpI3)tFEnBnUvyUVd@LY5YfHWWA|Ztee(afO^p*g*o*)sv$KAt9 z%IL&M%Qog}Gwyuq*#lj)nRr^i0lKqwDz*$G9;Nj_HY((ScOkI{3dw8%#ptcZYg|8! zmChHPf_JO2(I@SxpX>UoHPNTJ*H-n$WzwFHOoFKn9A~@td^_3VqGLPiF{+uz!e%k_ zhTl| zgCouZX`9E+IxR#I>hT*!YSao^jC12l+)09bHpbb!?s3X<_R6*E;%a03Ay}FAH~HB% zn|pKUyzk`m7BWi(tLE#xOr+q7|d=> zJAIXJAO668G{Z_QRc50n#Y$O>jMnR=shfs%#M+{!-d$GCrrN4#*s}dHEv?kRL?~GqNn*z^Cp)oGD`-_UT zFb}?lH|+Kjhp$JHx*#ELJPK~P_KYO%>!9-c`s|^>&#E!s$jPd1e-XfHZxI*FuMt;LpNbZR*KF?nt*G9M(2-Yc^z zSSGl~Iyg#`%e5RXA&J&d00|~_x!cfGQK?ot5si??a(>g-KCRR}rp;bFoZm{39$(NF zxlWsr&XJ^C)FM|P1^GP$gVC~!O$aZr>pd&?(Hs*2ySCiFIM~=Oq4Brah3ITX+EI-3 zOEU|o*}iM`E1G)t^+7B8&Q7?x9P3J(a$H^ExOI#A{pAIE__o?x_!LQbJNjI)iL7_f*xuAlOhWG@JtdGmS^p|) zs=LlE0H5MOZX@rePfL6$>Gm}FO_Zw)@8>6G63;oV0{cDwM1FH)mEG?=UpfpAZkeb3 zMn+zHXU&XRkJ+O5s4|7#A!Vm_ezDeoObVJ@#&$)i_0KQw+E}*JjHAnrNxQw_{4PDx=LTab@r{^{m4o4vMcH&x*pkj|Hh*t+=*o;r zwR$D@>XVTyNjeS83Ec!4NY~w~`FFM&A&DhObCIMkVW(4kP&#Yjt*uG`m&Sg+X=k@1}@ z!bMk;;+jlXjnkp8=Y7Yt4|oisrQc3oeUW+j`{pZlXqH77*swF(3CfM%dU{s76OZF2 z4@oMKLPS(vx_|85{l<$q&KDqDn_0cx?$_2`G;ew?yPT8ULqsfKtj&}S({MsuE(r@gXI!0wU&g6GGw8-TBA zAGoo-m}VZAR)^2@0^Tanzgf1&9A!O+43}(A-#qRgJf4vQufb_%Gl{vg8XU2bnXo#Zy0Y5*o9(Q*N<>Oi&Ba+|MMM3qZlrcaE$lPI@u zB%ggI#jUpO%UBJv)HC?fz&Z*7Hff?zQjm&`zAe=9oI#S5r*b^1flMfV(NIow%V*pz zFzfxY3@bwRki~QgV!DJCgbfF5ctT|ktTK02jhU*Nnu45@W(dk_%KRlQc5*5q@w^n- zE{{v+NP!h=Q*&U$_opH$hI119)tb{zp7ZJM`dWuK4Lz-vhsM46xk?9wH3HUVjSSOK zImPZRsdMXo7|jz@l$Fl5Ly>o8f9dA$e&N;M=B@H7oT z7k18OPOo@-T$_>_&Wv)WA7aEe+uVKznqubk#wlsXT3I|ck^Pwp?nx{(jqcg?-yd&} z708vG;(Oy*R6O?}G`qd*KO49Cah%tL6>CMqR9G6Bq_8@$l#9kV$F=&aKB(1y&uVHS>*r_u;wfPC!!u2iH1VNb> zCptCB-Sjk)pRnFU<#y~dzb?7q^DKPk`ED($7j^UXZ~k`h5etYf9F_#|EHXl?Z20^{j2=nt=L%q(~A8+ z?X~g$hfcQt()pw2C-eXJ@eeEhWy$}v=fBGTRsUbL|CRb@&Hox8`+o+=#YHD#X8Gek zLMLLW=U^mcWME@xL?>lrZQ@{x&&0^U!vh2PpNry>p*=TVwoVTZy3?60Fg`!n8|N7O zC&m(^?j-Q&0RUT59468V*(A2P+8A3VHwc*L2v0MaBHh3}qc}2wckXw_o(SzcSCNY@ zu35+dcJ;g#y~L2&ica76?ozdIYP#(7JF3m_YaMbh5QX>Ao~NYj-ODx-lNYwV=UUcv>#^?MeyfN=?rK+x z9>%`sWpK*dD`q&*q^vZow$~Zq)V{almpP|y(6;B8U9VtNIG-TQT|2ad3glv`wpTKk zqk@UJ<|*|MHF2S8jG>>n92W7I9*t>**_IK72xp8LK`CYMs0w?`5iAPwn1QYw%*YLB zVXZOn0wpEJh%)p+;pkl5@0=khxhP{h34&6qaXD{gr1_6j* zeOtsn=9q@QE7i9)&K9kd-sw>cT#CcoUj9KdU-s0a7xwY@aW8e>B9E_Vz!-f=MWPlx!Y9jk9Jw|+nxFR*4j}$=QHyN9b;cAx8ais6B zDZx=TSYpCEsfi?Zw;Qnd_zY*{&TExs!_*kGDM`{Sh-Wh8<+(-WXRl{Xn?|Dm1OWmU zf|3Tq-Mw&Ya;-GJxyo-JIS13xK9ul@!ZigUNPGBg?{oHYTAdfXlVt2T&}u>OYVFpt zmDO+m3+@_jXjOIlOKDX&4}HgVID{_8Uj$c!7OYkiVv`^3;M=e^_OjlVJ3;AFpJ!-W z0xptt*!0#dZ$|(LB9MDs_b@BXHZ6Ad!wVBX)D|DSumlYr(`)C|U002f+ctjZ^Y_P9 zfk4fIOGTITR zyuqiYJ?_rZtGxG@4W99@G_AlxRbeXHUH1>z=61iF=byn?w0Q9&s<;3zH38n+S$aQj zx@o^rJ7nLNYap(iG5R?FcqeSZ$*)4pHG_FS7MiGNc7FRZx&6xZgrnIIS)Rt#(#ran zJdoWzA;0MJltXb_J2@aX?=ih&?WGkdw!MNoiS?zLkrvDP5<+0^A6k4l-2sno+WjGv zdS8d{OxM=5@qf<%LF^^mV+hRBY+-$g5Yw${@famk5=ni>Eo}mr4P4NuLEsi9@x5{I zZ<3~~|6?a>cEn;T?6?UN&a&SE0cDk{xW23>-lyNA-e%6HB z;eE$l{o{=21pU3`#DESB>fif^{-39pe89mL$F}tzHqV}y^x}4yh;5jN=sUfr|IzB- zjsMr_gP|83DT?AvXqCvQBD2A^BwZ&~X7=3kw1ya%omy8o1Vn++b`_}^^*U*`Nv^FIoQ zvcb>^KK~`02hyioI{S*{ztwsx^IU8vyk5h;JHJ7L?&pKLgWi6F#bfMZ15P`(p3^naT3c4qqO=Y&ID` z)_ifjOlSGOmV87S{%3yvrG7|!#n}qu|H~-=Z*Dl*^-4@3aOoA45yi)L37WuML>73^-ERPU-%YsMqK+ zx_V5l?R0gAa`KV*iKf*8sqHaZn4C*Bquglx$ph}`J3pl}VaLL~84f($j|OVPq+~{k z{33uAlYM5DD2b}d?oLqysOHuih?YB|IGcH9m08{Clj&+ zCUHl`q$d+K7o|6|%7;@slE;_j!|sad^&algepv1l?zQxEDLWuDu;~y@r^(QcFuk(_ z=V?030BpSk38f}dI>rn@v#~J>#(||Ga;*#E-Rtq?svhdo1zmRQkv(B!6#{LemB#gz z9yPflFnME7PwE6US5u&-(GbRRR@>SwIlrB2^YDaL)_L}!J>*KiE&PObie{)%89vR> zqkw-K5RUm5RO-*&2mK;kOoVbSHq`RKFFML6Ye*hPVwR};-ji)#aDxhjm(C}5p%;$z z70Q8u?UZqbxA$?Z1Zxs({8TtUzB*U3ciD^_hg#Ri+1ej+j=6fOft^!S<~I$Vv*=a`?5;IN^2p7$X7W!Q5MOSW}I+WYGXAMfsXp9Q)@XRzTGpAI=sfV zjyMD{*0u(0oKRWX0jn-gLWH$pO8D6i?vv-Y93XRIB31%cUq*4-2R)Ag`Oym~V&vWl zg8M_G{K7Kl8fSR`)h3kfBQ7dxdRv=`C2h}T#)u?*Xc~ie7e44YFd2_z$b>!Mh2Gc1 zX{C$+{D2y+h8^b{>>1#;7w*znvd)@-&yDEla zE1BWFra_$YH5Es#b%vd-4LiwWzURw(R@&{^+Wh;etIP50^Dm8O-?tm1-&1tio1$y6 z@n?t94CU0Xv`_M!Lt+AyPvgewr>aZjKw~UMLI{ceDL_W2y|vn*rcb|6;iDJtFpgl4 zFLkV0*DgO8-%Nr%5Pl*XG2hYzPYTP?R5X#hdo@yYM!4&54g(FKw$<5M<Ic)c7v96kr$V4hCoS=SUxmBNrpu5GV{Y;-}AAi!WbW^uJr zl?4*{X6OqlTP&KA%h5=XBq?G(Hm*uS?H{FIcThk(+JR)@I5T45L{G$V&}B}t=7F;x z`eIK2J+koO`N`q=2Reww((uK&cA=$bj7H@rO7w097O6L#h}-8`gcD5(#1lAx)n~wG z7do(+LHL0)S_;T>G(byY35Nw$q?C!uu$&w@NdxEfiK#(vo;Wh`I1EULrbAW=62E~{VlQ-qj)B`sjrTo!s%@3Li9Pak=$O{0b^l%D(QLhE5^+NhT(N! zvWe&g+Lz7LfXXo|E4Jl2=@MP>Wb`P9J@DOWTB?7+xbTNO7cg=&^k%2aIL^DL$A5!1 zX~U^pU8|28;8rMaScOnh;$m<|you<+w-*N&y0NRq84fmul&v8UV#S??<5P&ooIV;l zup9nf_TdiriCZ+Vwd{3vQ3CEy_mT8P966^|MP{4#Eku9G-q=F8Z5iQvigep5;aSW*kqBJqO!# zKN9`#KW3u-P7Z=tM|wBuGcm6%=4OA`$CZS&i%P=qTf(ekwc(VxPmOD^+0iM0u6TbT zQsuml2R37Gn6n1(^lnaV_IswjhuzeCT3y*4b53>L@UrtdL~$l>FOKlJL+reTkLHO5QP>aP7^;OPD>}yKI1n9Gm&hq0zvPP9BgtF z1(2hR?Qh6*%b9I=UdE@D}-hN(#`0)aS+jz({z5;j`Ejn z3b!zPFWZB6g0<>Uv5>9#ba5ihva+^kj*Egz4(-v95h3J&f)*<>Trjm}9RvU?qH|xD zk?6&g+;2-Ch}#_=Vfb*YSb?Zh@j5A&o2WXJu+${75j)Ixl$iusUyr_+z?`epwWRa2 ztV>_rY03KbsyGs(TvEyKq|(rUd3$4}JROxWNGu!FWi7iw3YN8?E|sijb8y~Ou83#b zccS<7?%;2-=Zq))`a57RKlcfj-*-a%==7i&?Ga$NKtc4$>6&VNm3vi(0jLLlw1dxQ zZRf>zCKUK~c!twpX%sosO=F;o;$`79oCr8bmMsEgE7DfrrAe$o<~cs}u$F^Y z(bW8ONf~f92^@W2K)$*3;Y6wjvVkO|?fxl>KWv&mx;;1n;ksqml_|#`7lvTXQwDFy zK6t?E87CR&@gy_Hbq@F-imA;z#;o@#tklEXytTB+Roe>2%BKucqXz5uHxq{(Ee$KL z(Pd4RY^OeU{T8teRyRxHc%)`zdnB0RHhoa!b*e%ywOXa)N3^h5T-*kI)FmS{W8_2| zu$X(a)hamH6?bNtWRc72@7#iIB9VTsgJqro3k>rt%Vfv!M~ie;sc}*>n?}~7TLWC3 z(@iMNc--5AJ&TxF-!j2o287E?PH1!80A$zTRR+707~7MXC|G;HDzh|fVkCC)jHe1u zZ0Lmr8HD44RkQ{w?ARBPtPnOEW;?=N&Cn5hvx`P*YXv4-(!KsZ)g9%8f_4>y@0O4K=`MJ_k5|EE+5`FXm~O8~=}~oSJp`gB(!Q7($5kzf-vpJ%_~lURI!xG&`S6{HT9WRH#XYxHTI3t@+bf7L zw>p4sB*3>P6d`104TW0U{_PL$H#l!kC--a7{nambsMg_6gEwfO!yTfZ$J`KelqHFB zIKy4~+&?|m=E$U7GSmhRlQ)IM3zO6nV`gB8?rY-UUx8C?r z5eP0D_LyOWP{*e{=qfayjI`IHr2{bhLjI^P1s0;jxJvuf!CS znJa~#HuTrPn`nE*)Rw?j;491B$`UJvedbjd^PDY48gVL-zjWRJl~z4IhDPiJ{|Uc> z+1G*Czj!WmMWLIC@RkS>Hvu=%sqd*>E>LFtxRa01*Q3ORlJQWG@li4EVVkCO)m{=2 z#ivCD?H~jIa7+ax0VRY|<(-bjmgT^~NEl^`xUGviCIon?7R0hE1ay3I{nit3d1`We z!b~koea_bCC@zR*6)X@8D+@l$bVW4c9nu{#7^=fSAy!Sr05dPLyM1PBO)QcZHG$uZ z`ohdAJOvU)XzFZ)2!Xaw@qBsiv7F!crPobMx6!ji;v(%4@ARD8gFHkQKeY5G2sAyL z0V`&}mocV@6u|f;q`pFpJP!kXu0Uqwl0AzD3m%4DIXNd&M#k$IYV#BcX?h}*aZIzHq zbejvpL;$q-U{e=MRpc2T?!?4OpjhmgPdf*B&+rT}IA;q_A4~HJACOh@NPouob2##gGJ$k%!GJC49rkr# z--+@{f=L_SWY@+AW`>XPrYZQb{Q+1sq1KgMd7^9*)rzr4$noe#8IRZmKJ+d zZJj1udfRe4Y2#m9>p&O;=;+gN;F;HmIo!aA?)h3|r~Y60Uke`jC(rE`8vxETo2QU5 ziXPp+HOeEygUQUzSrx6jl_})uIwQcp0(lV5xJu$qIuOCqj8=3jn;!0CQ((hL`O)`W zwn9~o*~+pwe80*pnL^tW`^Oj#rG-O+{LKfT(j@1(IK)NAau@GXCL%}KUNRHdSHrM> zMe^s+B^4`phOWl!Myh>;1nxTbU^Y1QU9~6u65oC+>jSPb`V1=DuN29-+I}jX*N}%7 z>w|{!`zyE@k6g%yBJ(!Ab~1l)TAf3O!=^}!GMT5`Ao==NXM_nA$|5uRnAgCYPhld^+NUDX4U4{+vscVZ`xf9=OqhPI%Lfj5W7-W=n?=6Fm`8#EwREL5Pq9Vb1m+o;!ThS0n|6XInqs@$eed;`|$B#nVfbA`Nn_K*u!^4E;# zE6`v|N0TJ(&qIN6B}JgsaH-p_m0LjD6k`(_VegGFtwgjIrAs>A68<8+g?HwCRoKgI zB0GO-=Ed_2d`J7Xx^n!!Y|?#A+8gAyj`F7MLe$0EJh6UYW$oS~7B%Yu%nr&EXBe?X zxt||HLxxpY2in<&d>A?Ytvh9#I;8a%T|tW(6E0sxhjq#f2lUf%{&vx>iZ?2Hm~3Aw zW15+7uKc?Gb#B2P8uPrwlqJF@FC8E41ti%Ey^p6ufU6*}nkG%ztg>1Pt+BYMclJ*i zDmD^K!0T0+V%q#dI{0v2nWT#^kso56KvC>NXG%2(ARVH5f_~F}0PXB%Ok#}7+=OdV zu|-hs5Oy;xlQ$|FRG=Vbq>sbb5$X&nl!KX!zhjeQp+jw>`kEm(K9?mIt;ak%;uF?1 zBps$`peoF}KEyV~CYh)98WB!Xlmr=Z=+Bp^7&DFaO0bIIN`iCt^OVOR67>ch!0i%o zCUf+ZDZQBz0>62C>QQ9rylUk4K>#~BV*T2`E)TYjb#RCQw?uyo_EAQQ4)M0+POIK( zugc(!B_$(c$jvQi$1&te&sBAbIAEuEjn%b24QBGEM(rNN9}wAAwu%Y-{k1^;wxFMU zVjQBQQu9orz4CaGAd{cFgeDcn(;L6n`VH*8yusu%ImnX)1w>5gIC|FA*FTdShTJih zxx;F`ccdXq61TB!?e|})qfs9} z_6-W!-kwR$h z!bNBf~u~RAA_n8MKUgo7}-S#*NX2QU(-y;Ie9&K*B+~?N0mt{ zTO)lntBvy>zg5;H0y;MT<#=VI!b-+geNGs3#7F95#y3Yqpxv=xA-m8wz-1zzgRSI` zZxLI}A*K;C&7LD6sx&g^FL~;S&P`5f%eez?a`&F^*;A?+-4g5auj>Owp*44kWoGWz ztI3qG*uMfoj~zm4jzWQM{K9e|<9})T7qn~hFh<+j3W(2iL3zbS(3m(;?+uDLx#>C~ z?($`m&#xhP54`4a;-gEiN63`SLLF)!MsJpG>gO1~rB7jWWx~Py=90F-Fa}tlG~WPD z%)q%c!$23E`Ml_Ec@MvF78+@-_8G8}FBsD6&5U^sg==tn5pG@=3BTkH8zD0d%PNAC zOZAFXS`atW`AUONbwLr z)h7gwQ66d>8XrQuOW(N(MV+$UK%0Z+QImR!n>Hn^lxC;;}pYwVP2%DjMzgbgLfQ@ z#Ea7@HPa(Lax)+_GRZ&wOU76TDca<9J-0j7xdk?^v>ioe{v4% zcrs4CE=;#sHx6kvwI|i5$R}2yclPtsTr*v4mgcS2_cQGm!dL7K(kaHamG1<8JWf%nMR2_fUT3zq*n7#$Unn;etE&&4ZLq~Ljsj?q5u0VC-Jdo{z;^vdp@!@D1q@XqXB^d2DVlFOrL0osz>CMiiN z+G(TNsq+B~%mgHpD&8XVJM}|Cx|W_KjK;gPcOL?x@!sCwTGhdS-Y)CyrBhzifh__R ziW~`06i74jH!$}#NFxkJULkE%%7_VP9<-Y-qx8tmFMUH?Dbk?;xNF6&y8|y1&E^8< zp72fYJ){pYl=D>DEX7q2UD!WsFDr=4Aw-~eyk025v0cEpNZRau$-m9K6}*joxqWH3 zqp-GMT2~<)pb!Qn#16=jKY5MKPc-jj@In@VpIk6@crb)(H|9w^C-5t#Yyxgfa;_rd z;~)^sHhOhCVV335xtu17gU3#iS-O3fBjeDyGUvl+=1G9qj>etC6WyM9&O4r=dZT(} zjh!`~U`0Kq8><#RkEk577ki2f80GIRpKszs-<2`kFxk881tzwc``ZHHfCU-4BBzMk z&~Nch80KesUkU2fY~bB=vB0l2T$x52uVrKN8HR$|ASVedy}<(5s7)a_O6#{gpSB zN2=q~23V%TgHuHTHL256(}D_%R4e=oN`oQ#hH%6=DVa@u3ZbqMM<%d8M1~mA0Z5G9 zkCv9qIZn_p0Gli(&5FqXKwdziKD(V^NZGsyVgN`H7xbxkGsG+Zf?+D&gsxN>J_zU4}ZumjDR9b2@YSzmuhu6Gt?Q-T#4a-Xl5-LsA z<|>QLH8-1cqDt9Do_UVdvW7Xhq!RFkzmneLX{cR+UR+w111bh>b|ysIEhSvt-aim4 zA0PgJ;W$;v>mF|X=!Wf86Z8AwZ>6Q6M1>X)rcNmbgM&6Mxoxx}%-RUjvLhO1e^}?P zGc>0v!)(%uS32BSYsxD*t2=ut{ekpW&9e9^}1d>YQ`E&{Yq~mfl>;8 zSA4mC-n#CFi~i>SO5ZmUm+SFvFJnCHR#pbEQFz==_918EDJ!eeOyAZnz-nVT>^^;_ zV*z!QM7E-x-a_nR@3SIIKbSn5JVMoU!TA>8)cZ)k?-tybzeU<0!w2h@`9$!9w*HuT zRX=GgIRm**hpb9^5hx$Lo-FG}z zef&6nEiI#IBvdM7Ui-St7D5q1D2m9IJu;dqvm&Et*c7rQqarf0M`lG#GzICp3*k0zb_eavm!@}=_;SV{_Tw2B$w(Q8M5=C{X z9bMOU-^CmIN(|iWJ~q0ERqbx%J)?`pZ}pXx9;VxMhsKAR_SmvBlw4>q;0rSsRnPjA(PEymalDy|U=I__DBS%-i{e#-mmzjk&E?Vil3K5=JaAhbRXq?DQ_?uOchxi4a%C{di2rffXJaADit#4 zO0&)C&iJa#3QEWAlylm(srT5BuEd_AE>@<|ZepZ*)P>AuD#e$OvAZJpiMRbF-M$TT zRWrSdrCv?DIZs(s*h(Y{Q$qEI@D_GMj5+7JZnxuS{JU%>yo#ph=BLUUYl3;S7ZnCA zzRHFaM$2f|N3XJdq<%s~dwZkzhpj#GgCddB&PtKJDXJ|=i$Nai`!cBO?pnBKEAlt_ zuUgpf-g~+2p~lyymz={2u6NeRR5Zq%&REdPky&`ta@c;u=Hl5^&-SQV&v%UNk@Xz2 zcc@M-dgEx}(KpJaJzZ^kIk2>FLX3CLTg-Q7N>YqfSp$=Z(SX)oyY1WFsu$?ZwBvG?YN%ztHKM)!zIEKW#GtuCGjs2lKPv|k_X0a*Hf@#SD-6zzKkp^{= zVu5$flWR@l-mZ$At(^J!C4ro9NVK+;pWV8&M=S7Rmz_=Yw1{f!0QcC)7|+<2RE1Mq z16$agl=2&kCMAOiiv~9>42Yxg_@4%P>P25kPP6wa%vSi#5@iLyaypA|>~POBLi9=2njw37Z+6j+pe!Zm*9 zaF%t8b&CzbCd0b2Q@^0h<;G8*9_j0>9J~VV@{74Y6R&)1ej!?voxZ0?S=p-l!S2K) z&8q5ZbK?_Sq%w&XQ;Vt==WnE`FVhYW-@Wh(b`_sHqoe=MyZCc`Qave_J2pC2HBIB& ziKl~UT4c5q=2T|q8z0S^>{xfFrhJh-Tl!-4z^BJ=Z5spzymee3SD;5mY}P&Bds*~h z{#dm7Qx*N6b#H}ac`55wNk7{BvBA}wB`K#pJL|}4O_#{oyf*=F>fXF;{3w>M?QwWM zbN0%t*ZP1beNB=lUeua7BnoyVwdv^jSP9iC&0dm8v8lJI|K7k`uR18})-=JGxW6Q$xutrE8x^W3!oFrgYn|ZqmCM=Yd*9{V59}#mUh5+}z9` zY4!Hf`3eqEJyuq+($&KOUj(f3kEI@7ac{IDuHx9e;(Lu6TSv5AV(VY3$;Nz)MUMvQ zQ3;H33Q>~F+2ZU}_a%zJd2XQmvZ%_L?y-CK9VD{ybTf~f3RlrDjLwVl5bZkPJ`@#m zKf8I~&3(p0clRjIe3@ek(l+ppJ7z7laMyXeaF0<#(mws2#&6Z6R5cwErF&cNb9f9A zMSF>_%-LIZ_0`?J7pk?lNbz=?ipK>dEs~;&>nxjXNxXV@MPDNC^ZtSDQFw{e+VQep zCo4|gThgK-q}iAkcgeckmGx}FgN>gGiWQ5Bvl(5UDVIe~@RsKcKG``Keko_%viuAG z00)Od{n&%`mt&nI20h#BB+Kf3jN;To9mBG(i*cZ?&8Ioqh=K=A3sav}E8#PhA= z--J%wMGu%MZaP_cRQl8wi)g;dctuaeOY7uchIy~0!Y-v#v!%-Kp%!=KM?JH&%mb3AEN^JLwOv`2o|a3y+g-TV zH{cs}3rn^Dl+2uCJHZ_G&p|I#}$f^*#TMS}u2TqHsZ#c7EX=tGl9ImY*VLW#%}u zGPg{=7`9}V)>yAC)YR6WE1^}Lmw%8y$;FhI$lSJ4vofHWYqeF=$pViPcTrUw@l7Hb zF)n#U&jo%a6&#zA6;>=%JWuqr&<%XQg9BgusVm=W&v4X=j(s+9sS3&aZ7K%adOe+- ztJ)vFJNHXnrPAb=-IPgU>yw_{de0?&A8zXZc4Sui`UA~Y@l#m>TqY%_15NOrPM6Q0 z)Ebjq7w>tjcUJg)mU&qX=e-XTGGgPU_YVA`N)L-DZy(~*@B6$X#Q(-y8>63!k}f_W zN4IG{PphiE`GGr=3!lZfUoy&RyNbn|#x3$e(rFjJZKItp582pY#Oo9L&Xn7>zOus8 zNjmE)&hcs{zDdrxQ&Ohz=#;yv&@gYPzf6l}!l2(=>sHsST=QN0?Aq@fCI*D5lNwWE zjf`yxnk)?)Gb55sw4Z-e{Hl0Do~H6OrtoakCpKq#@b&tUC4|>S-3t70 zZ(nrxw0on{a7GAGl*Ch^F4yo%BeF*51|g}dCuX%2;nWvn8D+g+d-e1`4<_x@F;nhPKOp2CPcze~ zcH?ZlX;qx=`bjyjr%1m=#IZ2e$AC7dVvIi)epJkc<(%}l$9z&1g6Tu&eN}vo6U`pj z%W}JPuzjzoPfYQAt)f0OY<$%+BO$pCXI`KqAsY1c3EP9MHNc*-U%S4q|7-&Qas12{%*pglFw!f&^VM_b4-I_un0i zsrTNRSNbubQ%=udf5CI3Rh``G*U#(PSwG0MR}Fseq^V)Pv+bNqVs%2e2_Y}ElJUN7 zfK6pt<82M=r|}ZzFYd`N;HFpaDG;$SJFQjQzpu{ma$jxNoo`v5`v#vDR(h5fRw!8} z3fLb`wn;J#7jU%*OgN&QuY5tU1s#_xqRt1OII$qTzE^)_l9RahxyHKqpsiMi_fiig zHwh_;=vUYFk3Q?ueVuDmferOpgHlF3#9$Q~)Yw_~8Mxw4?~jj zikr8_Chbig>rHw#+Z-G4MI=^7jbr?wit2cV-O~qk8g0)%a~?Q(@>6WZ`#~x0izD~E zzqc1D8y%1hc@X*RiSy`(4fn!rkG1Gh$#D)@31+HRdL{!(CvQDif2WaV63%N$-SA-yk(~P!C+w-Q?&mNaeD119!udus7Ay0FQiJ8KI zuX<$7u>8+&<@EBoD-v4H5hn8_Kk#HfN}K86;(QygS{Ib%k!Mg>ZJL(F^U{eYzB-TW z7xwLSP@nMZ;LZ`UVzP;FKv9HQ>sjY-x&g&DvFrT4UAX;nShR*;Azr_`<8-Qq_Lq#LxWP zk(v1_uI}Kz&}K{R`p$PJij9tO(;}xjZ^yO;e2=+`9@lamJ?QcAPO4*%iLL=>+1pbA zQ(?!9ZrNn;C+-P0&1{kLu&bZ7D88OJ{v|yzV4o0+gPMBUrs3c_7qy(WcHC<`scmXZ z8@Br{;~!_8)|h_2L&sINUudED-Mh$5&fcX~R%&Nsc4YzWtKgesO5np1CPf|>ZUWj!v`HbFOirlQzdtLFlKQ^bZ#s6p?#Z+c4y&fHNF~d zr?_tKNj9SeTFhT9n~P_OEZ=*$vOAP3ks7bpFL_Y4p7~LAcED%hC(Y*`)Je6yw_qkH z8{n<%vcoEl^KlBfc3l{7u{B*iPm}QEsS|1OyDI1X$ZBeJK(=n%_llJG)U?d0os?Ks z>-Xj>goNJPd0s0`U%w^gNcQHj#@pN`g9>*GKRzy8)c*E8tny%UP0Eu^^Cr{Dk*%bo zT$a8ylbf<0x#maeSk{H6QchicseLNVBCuCXM0ep$5_g9vtsZ3>w zlT25c@x9BWUObqb{v=h?`gFv`9+EB7&5h;SI^MdA+nlzxtMvNwv$}*fJTHjwYj<_; zJ8GKryumu~@U(dS8;h&Mxy>6&_wx2le7mZpAJP;dBYCoq^S)?el5y+`!K&og&C?0o zmWA~!g*&{X4cjL6N^p@|Umt90ve#MM(23vX<`bLuQi{)bUt%!t0G_#tul3Fikwqb% zc$L>vmaPFtDRy5Rrj=|(iNnu#Oer5AYw12r{_6C>qAe+25Z~gKU?9H2zt3$|=Qp>@T~u;dK3P0I@gXm}NX7Yfn`vybXHpQK zF79yZ_cb^JT0u}*oV9;rLr&M5*j3{%`X}=~YdUmsG`g+NKY60xS8-3I#^8?rE|H|v z&KCw>R%%{tGnzXT9=x;C?TmNIxi2iv#<&F@=T-8%^?5n-uI`KurMIyMEFF_Fo;v4I>Q26E zbl7%%b;@w%<>>hO`!Dds-3^&h5yAEz25}kjcU4;P!!?Ts`A&bY$=ctqdPQlGv)&my$k-HW@$OJ2I1 z`pW95V&rtMcR&g!?&!fsa4dh~8TsT<+2o-;1jlFm>?^H33b<c{z?zuj- z>PfTy?JH4zqf{Z|B$NG;O|vVHrO67kzAPc#(z~yovJfn!*^vIRpy$$^&O75@sxDM3 z$BOWAMlb9LpVl0(OuKSgD4=~%d!IRax7;eN`4DqigDU?7!GYzD*&Z5?V!)SkL>cu* zT3KRo_TIhIheJM!W$DDRD_-AAd(;~>HyE#YwQioh zqD{MZ#9ii2QAXA9ZH~tZqLO182D1eyVti%A-05{fT->EiI`bcr-753QkpVjQ5Br_C z&-B)GMA!Yo?ta==-RLG;dqIUN+rfx=smKgDt6EF#qiguG?nbb@jfj#u@pOX~s#(|e zHt@^CeKm|BMw+qdBZ8|A#SX`hzh!&aa53_S63>sFHQ9b*6+{cXo@}G&wANcwc!eS^lFxFh48PtElXGfS%I+G`T~X4&3G-O@I|mnm=a z(&6%DRLC&&YUmJ^^r)&6nPYK2QM7B0vs2?mw4Qt@+kNE@aVrC_NS^!paUV91+MVs% zC8Ph&RIum1rEZIz=evt8*~0gPM{42^eOA6ZDB(2zD7*4(Mo-eLe`7E0{>ROI`;rFZ z^X?nUsf0Tfo(^pgN!B!bb=38)?1wJyil5ac+VP^q@Ur>c;q1nT6@%_(9{I|-dUWEl z3BEH`tl>nYkFZ2m8*fX(@bw1%_o;Gu{VqExojX2?XlMM~Z@n&3!7XvCv541!auzY? z$-NES6*gkm^YhI-zZ}lANxv_=T3&MaUgg2}vsa!vDVQg#UbYtm;?D_}D}% zt4LYY>^|N3Pj{0hFIKdL+mAKauf(N1l-MctIpAVShh=?Z=}Gfz2O9Nihj9kqwPMZV z8=E8A*dEv=6;Ej&et%-7cI@Iy7fR%Ge|d;xs-m-l9!XB9HZZeKD$%(_@h7Lyd%gOA zJig=$8FOEsR4y0f(MPBFoMw`z*fP8~h4O@!#_`up)ITg`QbCzu{lYH9wbKaF*CTAL>|YvbWdO z_5H@VS1sQyo;ci8-F(VsSn~#BV;q-JLymE4Rk`<_xbSFm-L}I0_V=b0?+@i2n{K`Q zY@eWlt(_E^yC!dMD__>rZ68%r>U}-xa5^=I;``^aJ}Y~yKALSDs5+Uf(NYi};62+Y zZnk4F?Y&hzO+nKCcw0iFH5YS78&P#J>VFY+|w#E*sHSElaxMx zc`-Aren{fJ!l6wCdBNK(vvkB9PVQr_&y@7BdpoVsmtg5Y3n6;lOP-Aj3fM0BExmZq z>!1za%OdZhNcU@tM{e&*)N4B|BQU>TMxZDmGpH=MOnpvMx!^04SL#ARw*18tk7|p| zElHl1)r9YRWz%H@KN#IwBt>R4(^Pm;Y|A=TFBWw1&!>AiU)UY|#^ZCL1FnFQCo$V! zl~l!!H+VO7zG&lgSzu{kp9=c3xRQZ^p)V$tlD+(8$tgmw>N526pI_AtiVT-pYaKWl z_8)3np89Dg14CGNpA19T9aehKtJbZtjE>9Wq!u6OTCcoB>vR3xk%1w1B1@l9e6{o% z28Ihb!8Dx<%g;DvhO?*1u3%uewEoHI)qjOvQm!R2Fn`(2P$k{_?WvO(!zm7KCWdVl z+~O-fO3Ft55w@*a_MZv=e|%R(-dq2M6<=+hSg&9ePPkY2R7ClxQNg6KYuj)|X784a z)(ajwkxnm5-9Av~w`eoXTCZp~FzCx%Q2koD$-Z?lQLM7TT02f8{$#+=q_Jb$@V53h z%9F+lvm1&E3csbd2o4+SXb-r4)V-*$+jmqgpeZ!|VQ5INS&mRcNc=->_E>3;xyJGO z^y(17oR(03vr0C-1ox;yOW$7B5G@`F_p&<$FQ>N)oi4KO@y=>V7EA6bvY$)iyTLNj zsp33!k8w34n`PI^vYS%iodZqT^lxj*~;VOXZ`YFvJqF}-sbe74{o!bq~QmV zmXe*$*P3OHSXienp5yi4KDXlBGW#&s;w&!8cd7jOPot|I^e`_v9{Qd#;oT+OHhPDP zZ1rpE*bQsX%8`Z6Qm-zD$%Xfe+4G71-??vpFmZdfV&W%N`s>gD&8eZ@Gu!`RKl4QA zMyKEr_L`H1d=sZuSl&E+D974Ja-eHPxm!-H$Bhpu;~iglbaf9*j~LGl^z4xS?&vUQ zo2M!Dm3v~6Dm|?->*hCAuCFUvXMaP6WK&)GWX#-X^wvS~q{vnSKf%L!T}cU$fWbD#Ryky07gbVoojS-9+OzhuO>2CMR( zmWsTq*0ejpzmC^;>8I?ml#Fh6-kW8gu<$}Fscp=5cI3j?i(t!Pt4ZC5?%UJ)Jav0| z+m0L9`T3OTRLz#(I&6@xki#$X+0;(zCh4sz&tt~`wOfbRI`bP#9Syv&x>G{OCz_IP z(bE^Yow?hzEvQ2*z^|a6dOtvgTlM_MILUaPo&dK3?#Q-%qmw%(-4#{lZ@U#`D8vj zBZqoUwcBU+W=NMQ=L}mK-!HeX`BE4fvi`t^m4E$rd;RA7Hy#abTUXEUWLC9iioBzr zr74gW)c$t__>Jd-*K=Dp(kEgT^J)6&pE29`iBlGl!&dwIoW#BM|Jml*{(5M9&6OSR zYzPkewk8+3{yn+dFSb^P;o93Toyz@`CHTcM+)Vb;)YTm*Jk?5^tnlwp?Dw~o`66&$ z**U0Qe$2*$^T{MM9eP*#e|BkcY71IS_ZsL+vti|n+pjGT-yh*SM_wo;ETjGad(nVT>Z1AL zDPjH`4^?5`$F_apSDV^XJ8-{8zX-<(PJWt>lq!TkJ4<}SQ%bz9~bziAMq0Z zvcAWtFT<&$yB*nrmzk8$$XN=}f8OA{{I9rIdj<|%VjROUgk3HCl{CMSL6oU=`6ciA zRfOlWQk_gFs`mMa;ZYs3?Oj|PA>6j~OHQ3#+G~-*l2ek#*^6Gre@zFWcyWP&;f$91 zN`}WfrI)3C(m_p}qAOnc1=B-5Z4V(Q44tjGmEnS*4O95X*T>7G){3v5r^guXO3Zl7 zB(7X4W~he(K3#DkEe?@?&*9WJo|UFMcvoDa4OFJKsWN?C*A>#hfl?l5%@kNMG-@&poTd(k;7p8y!85 z@9_(-X|U6~%2iZi`2gR(ScLy$BJ{tiq*+&>4PUm5VOxF9=U!Vh2a^OQ215Ee`m5Dv z&tJ{sipyUVUSLCORA;fs?VpwUDT{xQ!TvY}ou9}V8?t>{6}IPl{!I@K)KBzg>jH27 z@6bE!GPgax{Efct z3$=%F47vLsGG6i?vv4t18gkX8CsX^}i4Z6JfLhMc5MD(!8uZWXX#LcD+K}bw&qKeb z!f@HjPfO&F@N6=>(R>>cA_2S6Z7xL)ay+Q%;$I+st!ySmnkdR3Xq&q_iT8>n38ojn3%{2y)d?HOAX%AfU$ zpr*`JJ-pmIVp(%Px`*W_)jhh-tlq|QjUZ9Bm-pt^xD$KKX0K-+D@tnHwXZkFQg=7`Q^uT$iHGxv&eO8* zzqx&EpYC$+n#-459~)sEcRM7Yr9k<~*4g*Vb^Uqvv$|>5Qs0@_Y&TO=x^g7r+PZ;_ z6YI8(t~;Wfm>9f1a_Y*-9VdtuN;+q=2VAZMtYuPk>Pgw};bA&>jOxg znZYju&L`eHD-RjzZ*Dk;5keJ8&cFibW1$z zG<->A)oyp}sMAe|nDibL@7!-Nb#7PX9TCwcbqSM=%p@x(jV-mJX$4NpMy#~1NW0sY z*w>2GY}6}R_C4xC$+j7ps6h2CeEMn~4DI~)U$$O1SyuktxoOsI>q=uSll9Yh$$BOs ze1Oc9N^Sq3?Y3OU9F-yBW5?v(-S-9FeAauedP}5hRc>fh@YVMg`y_dlGB;bv;Z2@A zsP-7R zy@!}@s&BRqW7>KsYQ5xkFA5i9_;t-KK_h!}^w%4)ZD9O){)6t*I^D^`f|P@|)OYYU zG8p|(+hU=nHqr7XjFuOuTV*J6pk(FTzQ`Dj0n0U#`=S z)*rcI+{a{(%QvtF*G;T2CeH8Y{PV}@xaa|X)=i4CTX8;~>#hjQni;R0561g=KK6@y zGarNud!>&*Az6f2tKEf`DyDqpUIx}3Gk^COFTVk0MsqFq5mbUl1ug==2 z+CD+=T9RY0g&Vf^I-7pk@`r(X;-t@Zq57OL zZ+W$2{NMMAKk|vR7GgsMlraLWfcs(qCdG@1sf5m>?&?{aIcWr{s z{~G>sMa)9&(hlcdP42QQR|Mq@CS_Q5HJ_hNt3K0Fr1+5E(Jo@8zgx6Q%*q&jjb$5- zH3)|0(j=5cB=Qz`Y&KgRk2<_+CdTXDmh#)Y`}sZCW}ocUpVSO5mbiKG>RPue91Q7) z84euVaN*S!>0LzX_U-ZGTW>3CUB49QAUjg&;C{d)NjBwS;z2uq!Ubss(Tx{yTgh#= z#Ri!&SfkncX*_+?XaJ9E3R&}|_yxJ?!~qGpxOG;S zPE|@KtURq2^RzXABWbe#<$D#DO}-m)dMixkeDoao-|co?5y^BgZv)3AVwgDp5xvQt zb$u(6*vbd>4{C5}b_g?kS*vsGL9n||(rH$%`Q_q9w;q|FvbdCYc4*$8w!*c0^4r2E zQ)92#HFiP*S_1YT1f*(WY$dovNSH*XJxz<6-I+OqKfcU)CLO)w*gq4{Pu&FQNahrvGq9$XLaWfH8S5 za==(pUAI6gQ?~#s<7jXwV_I;_d!9qCa-q};|MQy-x8DdmSzd@EMK_TU1;P zxMFEd;Rp{paO42zd&!p9OlNOyQN{&rI{3cN(D(#Vq~S_Ld^=O-Q>l{Y1ATk#zt%)~ z;yd%CTT`@q(F2DBe(81HO;jGt>=g})WzY+&Jb9*m%TVS<-QLYnp_linZ+;;!I%J{x z&Rj=Oh$P8Cd(xXMSz%GBy}dH+X7AD9^$IWLYi-!VuV;mH9OGf6$vum>cU9G7$I6Z3 zk7RN)EiW_i=8GM5-l(V4(&v@UVZql*+Wovr@7ybH81}ZPvt)VP1R6dROFtq9zxQT zqLKWv+r&S*3q;4@jLxA6N8^>Y5$w4)Q2uCUXhSg+#W!JhIMFo1)!u|%cE4Nd$8=BJ zSfkdZO%FQ_er~!RpU|M@mfxRt`el}U@`)qbn?L;8mGooymtf%y z+2ZLjk6&iL)=J$RccCrr^$M0PbskL}?ff-lKYR7p2HC3k8I{6Eyq{{uZANXzgYsXi zjVLETs}Bv8P5ra?|4{Cfg#Tw1(^tzsfByW5{`c?p-{1fD6>RH25k3d+sReza>;jgnw2Vok`$H#QN|Fmp5Bfg_N}V%n&p?+)S){OKKH>NYkG z=m+r~>SBu4CN?`r^!cIh59>)$DF+XVQz?{#WE?^60Fj1%Akc7!i3bnL6UB*#2{Qlt z2sDHLxy~(~EWV`Btw@`5e#kg)+32_ow@&NsZNc@=?}k4*{H`ng(3ItU!B)MUo33wY zeZY42*bxErj&C|1KiAnmmtVu%|18SQXw;l> zKc3K;UmL?N&))nY`MJsYiPFgHal^IT_Uqr1MTrKy25h=j`=0dS2j|R$uNtSFxPIT7#H`ktuGTy5%_rS;0^Edt?n6-XZ|6k*BxuOSv?nRi{fsJ zUeR1U`+z&VT5Ph?Osq{tehW^j)r!GCcz$sd~ zCwGf>x814BpE_-NIexfzCx(Va4H%4SwR>L$1ci2c}8_@-rs z(O#T={D(+kvAcVq?2i?mC8{%=MQ3(;zO|X*_Dx&k)h+hR-|L6if>6nF-b#;a0#O|E zzT4z?X{>+iyCAnK`ng(#xl^=P(+Y`AoVThfju#&}w;O+Oi<;kp95dgWJMRVz8pY8o ze%*45yOKA)70{m$iwe`)YMvuH3dGnu$Hj?cbK@?6pW^dIvMaPdj26|ZqvDM61X%YWT<)wXZr zYrn?WyrD+%xr1M${MFF%1PeuR-16HdkEWtloNzYa3jJFzwfqF9Msafv9iIiXXpVQ@ zC7cb$tA{SoGl&sw;~@DRmJiwGbLZWW)7Qkhxvi>JZ74i)u2Ec_{j;yS{87Hcb)^Fa zF`{{#^uVvX-05>F5t(Jb<>y16)5fTqh7)3M*thy`lkbUgq0hKcygH-%+|E2sGt|b| zQzAUQe;1$n#<%o9bF_qqSCOZed|jYVL6xyd zLXqAt{Q5m7X>zKidaK>q#wTpdwQDM)c7~LwpWIgYm=;pD?&K;VBe`eSn(8>78j^^I zG>EUao!rb7y{h>jS7vFO=`HgY%?B=K7U!Az27Fk<{hX({jPb*U_9vUkuh~9qe_%-X z#j1B!*`YLhz$dwGRr?tOhvKOZoRVi(f4e#If&1lI_HRBO&nZ){9)4KAI(jwBtIO0i z(za_@-kzoM+~`@e{gys;ok9=CcHf>0TfeT*qLnA`oagV}9pR^OVV_$x>ueP7tPz7s z@gQ}@`EKC||I5_XSH(H{4cAl`|IB4z@7{IF4}Bt5w755SxwhfTl+xo&#iU%emb289 zGUnVB6vN%tZ{BlUughJP(@pk!J=~k4&eFE7Df*XS$1U4jE+boZo{|;0tEanVIsz3& z*YLb4cG;x*2`3exjpGTzt=%lXQR9d3!%~9FvYH;+(YHb_oMPR3@&j9bNOZk<5avz! z!D4boqN`N63VjlZ^<(#ns#5+L4&H7)cmLEMf-=SZGs_JOdHTA!s$R<`WGCsy^NRC+ zG+M^i&Hn4!qtVr#WvMgFUOi&MZysGgv0_SWVLYZZR=46UPvTjkXcPx0+V>gx9Phk- zcjlb9u4Z5EIy@RD-J0xA-<`Q8=EENA$MnZOSn=-6guo`wR{v7D(Oo|DUF$Fok9sqq z-dFFuPSCi9c3ApALO<5!4j8PIh~lvIZKMxNwTc0?XWKRw()VI|mr^ul-fVpP`$sLg znJDkNTmk)HJpQCf*1B}G|DK`m&Nz03UC}Oe@9F!v5;_e0Yajn}mk+5pp?!dvzVDhE zp(lT%!9}Kz?|%*h68|3k^kdF{Uj5gxp?cGMZ*_n(tpf zuH55;hR`{=nO%44x{sW06rV+X1<(L@Pw-sF25>SkzvhjDjaEw$`X+EK-lnPR}&eyH>sAD~UhCViPx12ZH zQT_Hz#MJ}24E;uEZ0^bBKx5Od)R@EPsVyz#)xF$xEuVGK*yOm(CBD7IXp42JKgX>H zKek)H=1x$t{$p@n&E;}76drj~z_FTruwuLRXEY`iUAC}(J}Y&Ff0To#Y;)MncyXT1 z;;U*5@qdg-u^zenYb`&Nb~a^=Xu98Q!7I+lNZ(1nZegQe^3#jsmCF1$@g-j}A% ztl{n1?Cw+ZgI4$|bY`7F4;qoDs)}=FSjN@-8<+pO#5=k<>CWt`rX%wvtXdZ*Bo|)o z`gN=52W8=P(G06^!O6+&;KyvtkG<-0iO(!0i#oD2UY==k`)Xd{FYOqvV_KVbJmm_-XiM|J ziBqUc*E5bRj)_ATdxWLy6i*e$Eu9CRil;1H2Y4!xv~<76Qz_!uHY#Q5@}Vt>oi7c$ z-3SzM%=RTv2!y5cAd+dcrOQl2Lje;Gq&fam1zTg@(sbmn;ifU?O$NJaA+x+L%lCU2$=;IQH0t#u4UtMaBbd1fY!w zw2^=|GSEf=+NeMqa6F{|c~F2n&_0RDjRNF>#t}9S$b$mpK>_kWZ;@c92jqdqASR9q z{CSvA61M)z}Vr(3c2Mx#r9q+MyfjnqH9yA~i zH1@I6!{&jGsF*l(L2jqd= z!uAF7zyW!n;~KUvkOy)f8wccp&Nnb|cpwivkOz9365AKZ16hHM1M|<`4DD$L?91zPKb>I@*o0v z5P>|<^Ww161M)zIV&c#_7q$(^1D)?;&vAg~ zIKXopIzPqCgAC+B2J%4XIoQ5H9_aiY8wcb8c#Z=+#{r(>0MBuN=QwmNgjp8Aa~$9~ z4)7d@&RH?j13bq8p5p+|ap;^MJ3U}~pmRNJ9I!nA&vAg~IKXop;5iQP97hAj2jDpl z@Ek`2@&G)?0iNRk&vEG5W$Ajs1D@jn&++2eJn(?$cya9ZK#$J@=8N4Pc))W!x`x0m zGmr=1IUevF4|tA8*NvEY0G{Ik&*|?+VEbanIl3qT;($B=&+&lgc))W!9>@dm9FMNC zG0O~ijt4x)1D@jn&+&lgc))W!;5i=f91nPoNADnE@&G)?1D@jv!1e$<#{-_z-&?}W z7w{Ypc#cQEG{*J?@&G)?1D@m2dl}g20s9r;Ii3XM0eFr_zu(8q1MnPA0`dSn$D{W= zu+szb0Ny7=zn;eS1w6+Cp5p<}@qp)ez;is{IUcPc6xy4=p8X24%n}N>vQzZ8PFHV1MnOV zcus$>6tfNh&+&lgc))W!;5i=f91nPo2Rz3Ep3~psUb@T#z;goNIeOC#=!@MR1i*6w zaD7eyJSPC26M*Y;0^m6T@SFg6P5?Y70G<;7&k2C%1mOCd0C-LSuFna8=LEoW0^m6T z@SFg6P5?Y70G<;7&k2C%1i*6w;5h;CoB()^KEH+CuK>>pfae6jbNYMNn0*}ZoB()E z06ZrEo)ZAi34rGWz;gm{eNF&8r$5gflLz2A0k}RV0G<;7&k2C%1i*6w;5h;C9DPs? zyUc*+1mOCd0C-LSJSPC269CWYzdypPKfrSW;5h;CoB()E06ZrEo}=HgV3!5(oB()^ zej5Yy1&+Ib=LEoW0^m6T@SFf#pA!Jj34rGWz;goNIRWsT09>CF0M7}4=LF#Toc@tZ z%zglPjy@*|#9_}%2!Q7Vz;goNIRWsT0C-LSJg5H-a%mn!z;hztIT7%j2zZV@BMQs| zdwxX(JSPI4(|^Z@U1lH;z;hztIT7%j2zX8eJSPI469LbOfagTOb0Xk55%8P{cuoX7 zCjy?+fA@}Ae}Lyiz;hztIT7%j2zX8eJSPI469LbOfagTOb0Xk55%8P{cuoX7Cjy=m z0ndqm=S0ABBH%gwL*1C|0eDUXJSPI469LbOfagTOb0Xk55%8P{cuxNu045K>b0Xk5 z{WA&JzQ8yKJSPI469LbOfagTOb0Xk55%8P{cuoX7r+=OXlN;bU5%3&+8UouF@SF&E zjy??m^aYN)fagTOb0Xk55%3&+x&k|2z;hztIT7%j2zXBaYz1bW0-h5A&xwHNM8I<* z;5iZSoCsW>69LbOfagTOb0Xk55%8P{cuoX7r{7GnbX}1E&q;viB*1eL;5iAnJ|_X5 zlK{_2fafIO`kVxKP69k90iKfp&q;viB*1eL;5iBKoCJ7I0z4-Ho|6F2Nr2}hz;hDd zIsG$jm~9StP69k90iKfp&(SBQu=4;sCjp+50MAK)=k!l(V)6hyCjp+50MAK)=On;$ z65u%r@SFsAP69k90iKfp&q;viB*1eL;5iBKoCJ7I0z5|_jm55Kz;hDdISKHb1b9vY zuFpw;=On;$65u%r@SFsAP69k90iM%8(~H^H0MAK)=On;$65u%r@SFsAP69k90iKh9 z>vIy|ISKHb1b9vYJSPF3lK{_2fafH@a}wY=3Gkc*cuoR5Cjp+50MAK)=On;$65u%r z@SFsAP69k90iKfp&q;viB*1er;5oX360`4;0nf>R=VZWhGT=EG@SF^IP6j-uf9`eZ z*dha-lL61kfamB=RA748^IiJq$FcLpj&m~LIT`Sr40uikJSPL5lL61kfamB&0_-va zo|6I3$$;l%z;iO-Il5T^J72(aGT=EG@SF^IP6j+D1D=xs&&h!2WWaMW;5ixaoD6tQ z20SMNo|6I3$$;l%z;iO-IT`Sre$NGF-vvA;1D=xs&&h!2X!^iBfbju%P6j+D1D=xs z&&h!2WWaMW;5ixaoD6tQ|J*-j{Q;hn0nf>R=VZWhGT=EG@SF^Ij_we^E+61I8StD8 zcuod9Cj*|70nf>R=VZWhGT=EG@SF^Ij_!WI<_maE20W+V^Ml!zfaheub28vL8StD8 zcuod9Cj*|70nf>R=jetPOdb@#a|+-&x~T@}i*=9!cuoO4rvRSQ?*m%8o+*Im6u@%| z;5h~GoC0`GzyA$0U*P(j0(g#Y4g&fDc>tbM0M99a=jcW`>^uO^DS+n`z;g=VIR)^X z0(edVJf{GjQvlB?faeszb9A#7HebMV3g9^f@SFm8P60fp0G^|py0FUvcuoO4rvRQ) z0M99a=jcXAV7|b91$a&YJg47Nh}p*h&nbZC6u@%|;5h~GoB~{*QvlB?faesza|+-& z1@N2#cuoO4rvRR#8&0w73hKtNDS+n` zz;g=VIR)^X0(edVJg46?x^#P>8%}{XtmjnV`kV@QP6a$iH(vwuz#gxtfag@eb1L9D z74V!2cuoa8M>o!5mk;oq3V2QhuFt7}=k)vIG3y@ioCKwOsetEHz;kp% zHn4oy-w&dj=CN^r=k)u)G5G?XQvuJZfag@eb1L9D74V!2c#aB%VV4i^oCKwO(M|5ae1Y)+T%S_`&(Sk-u+sxPrvjc+0ne#`=TyLRD&RR4@SF;GP6a%t0-mFr z(y_S#o>KwOsetEHz;i0#ITi4n3V4nRJ^;%HY!AS5D&RR4@SF;GP6a%t0-jR=&r!8J z>@owM(`zhX#xLMGsyYC~0e%3UQ-SMqD&RR4@SF;GP6a%t0-jR=dtRKRm8;5ohC z2xeUYo>KwOsetEHz;i0#ISuff26#>buFq+J=QO}`8sIq%@SFx*pVI)(X@KW6z;je2 z1+z|Rfaml&Crj5o4e*=>cuoU6rvaYR0MBWF=QO}`RDlD#e1PXPz;hblISuff26#>b zJf{KI=QO}`8sIq%@SFyCP6Irr0iM$U&ruN^?79LxrvaYR0MBWF=k$6!nEeItoCbJK z13X7XW`OAdc>tc%0MBWF=QO}`8sIs--V!D^z;hblISuff26#>bJf{Jk(*VzDfaf&8 za~j||4e*=>cuoU6rvaYR0MBWF=QQB@oCbJK13aezp3?x&X@KXb&=YoB0-nbJf{Jk(*VzD zfaf&8b9yZ)%(%pQj>^ek&UaB8=6HqLFykDxVH`wlnDY|UhS{%B8|HY0+A!yds11_` zYQvl-q7pbj9$3#&9FParb9#}orRxv10eN6OM{z(NSkF-$kO$UtoH*8V)CS~%^&G_k zd0;(9alrP#dXD0N?Sb_il^O!J2i9{G2jqeE9K`{7U_D21Kpt4nQ5=v5)^nUV)^pSb zj1R2mC=M7OSkF-$uwP-{Z%1*!euecM#R2;j)^k+m3CIKMIf?`Fzp6-8^1ynI6UTav+JJG6^&G_k;~eWbiUY z95xQ{90zz#uWP#GJO_mVc>tc{0MBuN=QzM~9N;+)@EiwtjsrZ$0iNRk&vAg~^g6wm zbpUvd13bq8p5p+|ae(La`lp!r0-oal&vAg~s7Ns|Jz&2AJjVf^;{eZbfaf^Ca~$9~ zy=E{bU%+!5;5iQP90zz#uZ@eH2QWSW&vAg~IKXop;5iQP90z!g13bq8p5p+|ae(Kj zqAxaIz;mEJ92%;?_5eJ`0iNRk&*^n_G3y@i90z!g13U-n!=Xb7aJ&LM2kOJ2zQFhZ zJO}E-p}xR=1$d4FJO}E-p~D}L2jDrq7BFU=0-oal&vAg~Kz%s0EWr2xJO}E-p+h#1 z2jDqS9}e{ewg=!jP#+HU1-1v^IZz)Ck%B$$0`=ig9CmyF_2Ez)HV-^-eGb%zLw&J% z-~rF^fagGcI7B0MdjR#}P#ku@0_ww|IIJJ^I`2#ONuWL)>Wkg4@POw)eK^E9kO$y7 z9`GEf4~M1)fv@EoWQhx!8h6>xnH)Q3ZTf&B{b9HTg2W$_(b3EWVP#+FW57@5& z&+&lgc))X@J{%4Ycn;KuLvg_I3h*4L4~O~!c>tc{0ndT@aOhMSdtL(6heL6|_5eHw z>cgSF!1w?>2kOJ2zQBG3c#fWgfIZd$*XKZeICN-5x-FI24E7uYme+C=QzkP#+G( zVaEqh9}dM~w+B!k4qf^Ic>vevKz%sW7rS2p_2Ez)c6DcER38rW`y+Ic zO|S3spJ&pbHu~q9|I>y5pr02nZKL1IxU`M_JKQC0sASxdXTG4F6!UB%dKUC&c4-@W&h4wJe84QUT5!c z*3RM22U4LbN$AE1=5>4a$f?RRulxO!Dskp@|8Evg?6{q=(~duv>W|05YB*S-AJNUv Qw53aqZpbH4|620@1tVn|vH$=8 diff --git a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/boundary_condition.hypara b/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/boundary_condition.hypara deleted file mode 100644 index b20c191..0000000 --- a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/boundary_condition.hypara +++ /dev/null @@ -1,60 +0,0 @@ -# nBoundaryConditons : number of global boundary conditions. -# bcName : Boundary Condition Name. -# bcType(in PHengLEI): Boundary Condition Type. - -# Account of how to set boundaryconditon. -# string bcName = "Farfield"; -# { -# int bcType = 4; -# int inflowParaType = 1; -# double attackd = 0; -# double refReNumber = 6.5e6; -# double refMachNumber = 3.5; -# double angleSlide = 0; -# } - -int nBoundaryConditons = 7; -string bcName = "SOLID_SURFACE"; -{ - int bcType = 2; -} -string bcName = "Wall_16"; -{ - int bcType = 16; -} -string bcName = "Wall_17"; -{ - int bcType = 17; -} -string bcName = "Wall_18"; -{ - int bcType = 18; -} -string bcName = "SYMMETRY"; -{ - int bcType = 3; -} -string bcName = "FARFIELD"; -{ - int bcType = 4; -} -string bcName = "POLE1"; -{ - int bcType = 71; -} - -# 'bcType' is defined as following: -# 99: PERIODIC -# -2: WAKE -# -1: INTERFACE -# 0 : NO_BOUNDARY_CONDITION -# 1 : EXTRAPOLATION -# 2 : SOLID_SURFACE -# 3 : SYMMETRY -# 4 : FARFIELD -# 5 : INFLOW -# 6 : OUTFLOW -# 52: PRESSURE_INLET -# 62: PRESSURE_OUTLET -# 61: OUTFLOW_CONFINED -# 7 : POLE diff --git a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/cfd_para.hypara b/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/cfd_para.hypara deleted file mode 100644 index b17970c..0000000 --- a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/cfd_para.hypara +++ /dev/null @@ -1,1220 +0,0 @@ -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// PPPPP H H EEEEE N N GGGGG L EEEEE III + -// P P H H E NN N G L E I + -// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + -// P H H E N N N G G L E I + -// P H H EEEEE N N GGGGG LLLLL EEEEE III + -//------------------------------------------------------------------------+ -// Platform for Hybrid Engineering Simulation of Flows + -// China Aerodynamics Research and Development Center + -// (C) Copyright, Since 2010 + -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -########################################################################### -# Default parameters for Grid conversion # -########################################################################### -// gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// multiblock: Multi-block grid or not, only for structured grid conversion. -// 0 -- Not. -// 1 -- Yes. -// iadapt: Adaptation number for unstructure grid. -// SymmetryFaceVector: The vector of symmetry face. -// 0 -- X axis. -// 1 -- Y axis. -// 2 -- Z axis. -int gridtype = 0; -int gridobj = 1; -int multiblock = 0; -int iadapt = 0; -int SymmetryFaceVector = 1; - -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; - -// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". -// 0 -- Interface. (default) -// 1 -- Physical boundary condition, used in Hybrid solver. -int omit_no_bound_bc = 0; - -//----------------------------------------------------------------------- -# Grid data type # -//----------------------------------------------------------------------- -// from_gtype/to_gtype: Type of grid data type in grid conversion process. -// -1 -- MULTI_TYPE. -// 1 -- PHengLEI, *.fts. -// 2 -- CGNS, *.cgns. -// 3 -- Plot3D type of structured grid, *.dat/*.grd. -// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. -// 5 -- Fluent, *.cas/*.msh. -// 6 -- Ustar, mgrid.in. -// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. -// 8 -- GMSH, *.msh. -// dumpOldGrid: If dump out the old grid file. -// 0 -- Not. (default) -// 1 -- Yes. -int from_gtype = 2; -int to_gtype = 1; -int dumpOldGrid = 0; - -//----------------------------------------------------------------------- -# File path # -//----------------------------------------------------------------------- -// from_gfile: path of original data file for unstructure grid convert from. -// out_gfile: path of target file for grid convert to, *.fts type of file usually. -int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; - -// ----------------- some advanced choices ------------------------------ -// iunsteady: The Grid is for unsteady simulation or not. -int iunsteady = 0; -int codeOfAleModel = 0; - -// fileformat: Ustar Grid file format. -// 0 -- BINARY. -// 1 -- ASCII. -int fileformat = 0; - -// Parameters for hybrid solver. -// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; - -// Some parameters for structured overlapping grid. -int codeOfDigHoles = 1; -string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; -string holeFullFileName = "./oversetGridView/holeFullFile.dat"; -string linkFileName = "./oversetGridView/topology.dat"; -string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; - -// ----------------- Adaptive Mesh Refine ------------------------------- -// In this file, the original_grid_file is used of the partition part. -// If use it dependently, abstract it here. -string adapt_grid_file = "./grid/sphere_mixed_adapt1.fts"; -string geometryFileName = "./grid/jsm.igs"; - -// geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. -// exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. -// projectOrgPoint: If the original wall points need to be projected or not. -int geometryUnit = 1; -int anisoRefine = 0; -int isProject = 0; -int readDist = 0; -int isDeform = 0; -int exclusiveCase = 0; // 0: NON case; 1: JSM-C2-NPOFF case; 2: CHNT. -int projectOrgPoint = 0; // if project original wall points. - - -// ----------------- Grid Deform Parameters ----------------------------- -// deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. -// stationalGridFile: Original grid file. -// visualFileName : The visualization file path of deform grid. -// nDeformStep : The max deform step. -// flapAngle : The max flap angle. -// rotatePostionZ : Rotate postion. -// rotatePostionY : Rotate postion. -// gridSlice : If dump slice grid. -// sliceAxis : Grid slice axis. -// slicePosition : Grid slice position. -int nDeformStep = 40; -double flapAngle = 10.0; -double rotatePostionZ = 4.00003; -double rotatePostionY = 3.05; - -int deformationMethod = 2; -string stationalGridFile = "./grid/Segment2Brid.fts"; -string visualFileName = "./results/deformedGrid.dat" - -int gridSlice = 1; -int sliceAxis = 1; -double slicePosition = 13; - -// ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. -int numberOfReferenceCP = 40; -double influencePara = 25.0; - -// ----------------- Periodic Parameters -------------------------------- -// Notice: Rotational periodicity only support rotation along the X axis! -// periodicType: Which periodic boundary is used. -// 0 -- without Periodic Boundary. -// 1 -- Translational periodicity. -// 2 -- Rotational periodicity. -// translationLength[]: The relative distance between two periodic face - which only support one direction. -// rotationAngle: The relative angle between two periodic face. - which is recorded in degrees. - -int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; -double rotationAngle = 0.0; - -######################################################################### -# Default parameters for Partition # -######################################################################### -// pgridtype: The grid type. -// 0 -- unstruct grid. -// 1 -- struct grid. -// 2 -- refine structured grid. -// maxproc: The number of partition zones that want to be divided into. -int pgridtype = 0; -int maxproc = 4; - -// traceMark: Trace mark or not, only for structured grid partition. -// 0 -- Not. -// 1 -- Yes. -// blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. -int traceMark = 0; -int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; - -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; - -//----------------------------------------------------------------------- -# File path # -//----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). -// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). -string original_grid_file = "./grid/sphere_mixed.fts"; -string partition_grid_file = "./grid/sphere_mixed__4.fts"; - -// ------------------ Sompe advanced parameters ------------------------- -// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". -// 0 -- Interface. (default) -// 1 -- Physical boundary condition, used in Hybrid solver. -// npartmethod: Method of interface reconstruction, default is 1. -// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. -// 1 -- Using ParMetis for homogeneous MPI. -// 2 -- Using Metis for homogeneous MPI. -// 3 -- using METIS partition for homogeneous OpenMP. -// parmetisBalance: Used to specify the imbalance tolerance. -// 1 -- perfect balance. -// maxproc -- perfect imbalance. -// 1.05 -- recommended. - -int omit_no_bound_bc = 0; -int npartmethod = 1; -int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; - -// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. -// 1 -- single level. -// 2 -- 2 level. -// N -- N level, ..., et al. -int numberOfMultigrid = 1; - -######################################################################### -# Default parameters for CFD simulation # -######################################################################### -// maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. -// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; -int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; - -// compressible: -// 0 -- incompressible flow. -// 1 -- compressible flow. (default) -int compressible = 1; - -//----------------------------------------------------------------------- -# CFD Control Parameter # -//----------------------------------------------------------------------- -// refMachNumber: Mach number. -// attackd: Angle of attack. -// angleSlide: Angle of sideslip. -// inflowParaType: The type of inflow parameters. -// 0 -- the nondimensional conditions. -// 1 -- the flight conditions. -// 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. -// 4 -- the condition that the velocity, temperature and density are given. -// 5 -- the condition that the velocity, temperature and pressure are given. -// refReNumber: Reynolds number, which is based unit length, unit of 1/m. -// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. -// freestream_vibration_temperature: Dimensional freestream vibration temperature. -// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. -// height: Fly height, unit of km. -// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. -// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. -// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. -// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary -// condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. -// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -double refMachNumber = 0.73; -double attackd = 2.79; -double angleSlide = 0.00; - -int inflowParaType = 0; -double refReNumber = 6.5e6; -double refDimensionalTemperature = 288.15; -double freestream_vibration_temperature = 300.00; - -//int inflowParaType = 1; -//double height = 0.001; - -//int inflowParaType = 2; -//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). -//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). - -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. -//int inflowParaType = 4; -//double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; - -//The velocity, temperature and pressure are fixed. -//int inflowParaType = 5; -//double refDimensionalVelocity = 1000.0; -//double refDimensionalPressure = 1.0e5; - -//The MachNumber, temperature and pressure are fixed. -//int inflowParaType = 6; -//double refDimensionalTemperature = 293; -//double refDimensionalPressure = 8886.06; - -double wallTemperature = -1.0; - -double radiationCoef = 0.8; -double gridScaleFactor = 1.0; - -int numberOfAerodynamicForceComponents = 1; -double forceReferenceLengthSpanWise = 1.0; // unit of meter. -double forceReferenceLength = 1.0; // unit of meter. -double forceReferenceArea = 1.0; // unit of meter^2. -double TorqueRefX = 0.0; // unit of meter. -double TorqueRefY = 0.0; // unit of meter. -double TorqueRefZ = 0.0; // unit of meter. -double refMolecularWeight = 28.9644; // unit of g/mol. - -//----------------------------------------------------------------------- -# Spatial Discretisation # -//----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* -// inviscidSchemeName: Spatial discretisation scheme of struct grid. -// Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". -// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". -// str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -string inviscidSchemeName = "roe"; -string str_limiter_name = "vanalbada"; - -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* -// viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. -// viscousName: Laminar or tubulent model. -// -- "0eq-bl". -// -- "1eq-sa". -// -- "2eq-kw-menter-sst". -// -- "2eq-kw-menter-bsl". -// -- "2eq-kw-wilcox-1988". -// -- "2eq-kw-wilcox-1998". -// -- "2eq-kw-kok-tnt". -// -- "2eq-kw-wilcox-2006". -// -- "easm-kw-2003". -// -- "easm-kw-2005". -// DESType: Type of DES. -// 0 -- RANS. (default) -// 1 -- DES. -// 2 -- DDES. -// 3 -- IDDES. -// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. -// Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". -// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". -// uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". -// -- "nolim", no limiter. -// uns_vis_name: Discretisation method of viscous term. -// -- "std", "test", "aver", "new1", "new2". -// gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". -// ivencat: Variation of vencat limiter. -// 0 -- org method, it is independent of grid scale. -// 1 -- new method, it is dependent of grid scale. -// 4 -- Ustar limiter model, without grid size unitary. -// 7 -- default used. -// venkatCoeff: Cofficient of vencat, when using vencat limter. -// limitVariables: Limit model (It is useful only if limitVector is 0). -// 0 -- limit only for pressure and denstiny, then get the min value. -// 1 -- limit for every variables, then get the min value. -// limitVector: -// 0 -- Each variable use the same limiter coefficient. -// 1 -- Each variable use the respective limiter coefficients. -// reconmeth: -// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. -// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. -// skewnessAngle: The skewness angle of grid cells. -// roeEntropyFixMethod: Entropy fix (correction) method. -// 1 -- direct fix, which limits the minimum eigenvalue directly. -// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. -// 3 -- Harten type, which is default used. -// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. -// It is used to scale the default Roe entropy fix coefficients. - -//int viscousType = 0; -//string viscousName = "Euler"; - -//int viscousType = 1; -//string viscousName = "laminar"; - -int viscousType = 3; -string viscousName = "1eq-sa"; - -//int viscousType = 4; -//string viscousName = "2eq-kw-menter-sst"; - -int DESType = 0; - -string uns_scheme_name = "roe"; -string uns_limiter_name = "vencat"; -string uns_vis_name = "test"; -string gradientName = "ggnode"; - -int ivencat = 7; -double venkatCoeff = 5.0; -int reconmeth = 1; -int limitVariables = 0; -int limitVector = 0; -double skewnessAngle = 60.0; - -int roeEntropyFixMethod = 3; -double roeEntropyScale = 1.0; - -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- -// iunsteady: Steady or unsteady. -// 0 -- steady. -// 1 -- unsteay. -// physicalTimeStep: The nondimensional physical time step. -// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. -// ifStaticsFlowField: Statistical variables for unsteady simulation. -// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. -// startStatisticStep: Outer step when start statistics. -// when the value is larger than "maxSimuStep", it is useless. -// statisticalTimePeriod: Used as time period of statistic analysis. -// when the value is negative, time period is treated as infinite. -// statisticMethod: Statistic reynolds stress method. - 0 --tau = - ^2 - 1 --tau = -// min_sub_iter: The min sub iteration of unsteady simulation. -// max_sub_iter: The max sub iteration of unsteady simulation. -// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. -// tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Lower G-S iteration. -// 8 -- Upper G-S iteration. -// 9 -- Lower/Upper G-S iteration. -// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. -// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. -// CFLStart: Started cfl number. -// CFLEnd: End cfl number. -// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. -// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) -// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. -// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. -// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. -// ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. -// visl_min: Minimum value of laminar viscosity coefficient. -// turbCFLScale: Turbulence model cfl number factor. -// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. -// wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. -// RKStage: The number of Runge-Kutta step. -// lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; -double physicalTimeStep = 0.01; -int ifStartFromSteadyResults = 0; -int ifStaticsFlowField = 0; -int ifStaticsReynoldsStress = 0; -int startStatisticStep = 800000; -double statisticalTimePeriod = -1.0; -int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; - -int methodOfDualTime = 3; -int min_sub_iter = 50; -int max_sub_iter = 50; -double tol_sub_iter = 0.01; - -int tscheme = 4; -int iSimplifyViscousTerm = 1; -int ifLocalTimeStep = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - -double ktmax = 1.0e10; - -int swapDq = 1; - -int nLUSGSSweeps = 1; -double LUSGSTolerance = 0.01; -int order = 2; - -double visl_min = 0.01; -double turbCFLScale = 1.0; -double csrv = 2.0; -double timemax = 1.0e10; -double dtsave = -1.0; -int maxale = 10; -double dtau = 0.001; - -int wallFunctionType = 0; - -int RKStage = 2; -double lamda[] = 0.5, 1.0; - -//int RKStage = 1; -//double lamda[] = 1.0; - -//int RKStage = 4; -//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- -// numberOfGridGroups: The number of grid groups. -// gridfile: The partitioned Grid file path, using relative path, -// which is relative to the working directory. -// IMPORTANT WARNING: The file index should be ignored, -// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, -// please use 'rae2822_hybrid2d__4.fts' here! -// plotFieldType: If dump out the field results to visulization. -// walldistMethod: The method to compute wall distance. -// 0 -- accurate but not fast enough. -// 1 -- fast but not accurate enough. -// 2 -- super fast but more non-accurate! -// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. -// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. -// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. -// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. -// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. -// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. -// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. -// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; - -int walldistMethod = 1; - -string resSaveFile = "results/res.dat"; -string turbresfile = "results/turbres.dat"; -string aircoeffile = "results/aircoef.dat"; - -string restartNSFile = "results/flow.dat"; -string turbfile = "results/turb.dat"; - -string visualfile = "results/tecflow.plt"; -string wall_aircoefile = "results/wall_aircoef.dat"; -string samplefile = "results/sample.dat"; - -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; - -string jetDefineFile = "bin/jet.hypara"; - -string sixDofFileName = "results/sixDofInfo.dat"; -string derivativeFileName = "results/identify.dat"; -string hysteresisFileName = "results/force_beta.plt"; - -int plotFieldType = 0; - -// visualfileType: The file type of visualfile. -// 0 -- Tecplot binary. -// 1 -- Tecplot ASCII. - -int visualfileType = 1; - -// samplefileMode: The dump mode of sample file. -// 0 -- dump out every probe/line/surface data for all step intervals. -// 1 -- dump out all probe/line/surface data for every step intervals. -int samplefileMode = 0; - -// visualSlice: The slice of tecflow. -// 0 -- Do not save slice data. -// 1 -- comput and save it to sliceFile. -// sliceAxis: Normal vector of slice. -// 1 -- X_DIR. -// 2 -- Y_DIR. -// 3 -- Z_DIR. -// slicePostion: Coordinate of slice. - -int visualSlice = 0; -int sliceAxis = 1; -double slicePostion = -0.5; -string sliceFile = "results/Slice.plt"; -int dumpWallFaceCenter = 0; - -// min-max box of the visual block. -double lowerPlotFieldBox[] = [0.0 0.0 0.0]; -double upperPlotFieldBox[] = [1.0 1.0 1.0]; - -//-----------the optional parameters list for the flow field output---------------- -// nVisualVariables: Number of variables want to be dumped for tecplot visualization. -// visualVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), -// -- viscosityLaminar(7), viscosityTurbulent(8), -// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), -// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), -// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), -// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), -// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), -// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), iblank(81). -// -- specific heat ratio(gama, 56) -// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! -// Variables order must from small to big. -//-----------the optional parameters list for the wall boundary condition---------------- -// nVisualWallVariables: The number of visual variables on wall. -// visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -transition gamaeff(gamaeff, 48), -// -transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -overlap iblank(iblank, 81) - -int nVisualVariables = 8; -int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; - -int nVisualWallVariables = 9; -int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; - -// dumpStandardModel: Dump many standard model data. -// 1 -- Turbulent flat plate. -int dumpStandardModel = 0; - -// ifSetDataMonitor: Whether to set the data monitor. -// 0 -- No. -// 1 -- Yes. -// dataMonitorType: The type of data Monitor. -// 0 -- Probes data monitor. -// 1 -- Lines data monitor. -// 2 -- Surfaces data monitor. -// probesDefineFile: Probes location information file. -// nLines: The number of lines need to be monitored. -// linesDefineFile: Lines location information file. -// nSurfaces: The number of surfaces need to be monitored. -// surfacesDefineFile: Surfaces location information file. -// searchCellsMethod: method to search the cell of each probe. -// 0 -- Nearest cell to the probe. -// 1 -- Real cell where the probe is located. -// nProbeVariables: Number of variables want to be dumped for probes monitered. -// probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5). -// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! -// probeVariables order must from small to big. -// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. -int ifSetDataMonitor = 0; - -int dataMonitorType = 0; -string probesDefineFile = "bin/probes_XYZ.dat"; - -//int dataMonitorType = 1; -//int nLines = 1; -//string linesDefineFile = "bin/lines_XYZ.dat"; - -//int dataMonitorType = 2; -//int nSurfaces = 4; -//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; - -int searchCellsMethod = 0; - -int nProbeVariables = 6; -int probeVariables[] = [0, 1, 2, 3, 4, 5]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- -// turbInterval: Iteration number of turbulence. -// kindOfTurbSource: Kinds of turbulent source. -// 0 -- Original. -// 1 -- Edwards. -// 2 -- new. -// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. - -int turbInterval = 1; -int turbOrderStruct = 2; -int kindOfTurbSource = 0; -int mod_turb_res = 0; -double turb_relax = 1.0; -double freeStreamViscosity = 1.0e-3; -double muoo = 3.0; -double kwoo = 5.0; -int transitionType = 0; -double turbIntensity = -1.0; -int freeturbIntensitySRModify = 0; -double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int transitionMaFix = 1; - -# maximum eddy viscosity (myt/my) max. -double eddyViscosityLimit = 1.0e10; -int monitor_vistmax = 0; - -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- -// iLES: Create LESSolver or not. -// == 1 - Create LESSolver; -// != 1 - not. -// amplitudeofDisturb: Amplitude of adding disturb. -// disturbstep: Unsteady time step or steady iteration of adding random disturb. -// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. -// ipraddisturb: Add density and pressure disturb or not. -// ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. -// bodyforce: Body force in source flux of NS equations or not. -// utau: friction velocity, using in DNSDisturb. -// sgsmodel: subgrid scale model. -// = "smagorinsky"; -// = "dsmCom"; -// = "wale"; -// = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. -// turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. -// smagConstant: constant of smagorinsky model. -// waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. -// averageDirection[3]: average variables in i, j, k direction or not. -// isotropicConstant: constant of isotropic part of SGS stress. - -int iLES = 0; -string sgsmodel = "smagorinsky"; -int deltaFunctionType = 2; -int wallDampingFunctionType = 1; -int turbViscousCutType = 2; -double smagConstant = 0.1; -double isotropicConstant = 0.0; -double waleConstant = 0.6; -double sigmaConstant = 1.35; -int filterDirection[] = [1, 1, 0]; -int averageDirection[] = [0, 0, 0]; -double testFilterScale = 2.0; -int averageWidth = 1; -int monitorNegativeConstant = 0; - -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- -// dg_high_order: -// 0 -- generic order accuracy. -// 1 -- high order accuracy. -// iapplication: -// 0 -- gas model is fixed in the codes. -// 1 -- gas model is imported from library files. -// iCodeBranch: -// 0 -- The old code version is used for Navier-Stokes. -// 1 -- A new code version is active for Navier-Stokes solver. -// nm: Equation number of the physics, but is out of commision now. -// 4 -- for 2D. -// 5 -- for 3D. -// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. -// Otherwise, the pure gas with one component is used for perfect gas. -// 0 -- Earth gas. -// 1 -- Mars gas. -// 2 -- Argon. -// 3 -- Nitrogen. -// nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . -// 1 -- used. -// nDensityModify: The type of densitymodify. - -// 0 -- not used. -// 1 -- used. -// nchem: -// 0 -- without chemical reaction flow. -// 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. -// 0 -- perfect gas. -// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). -// nchemsrc: -// 0 -- the source terms are not computed. -// 1 -- the source terms are computed. -// nchemrad: -// 0 -- compute the spectrum radius without considering chemical reaction flow. -// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. -// ntmodel: The thermodynamic temperature model. -// 1 -- One-temperature model. -// 2 -- Two-temperature model. -// 3 -- Three-temperature model. -// nTEnergyModel: the method to computing temperature energy model. -// 0 -- the energy term is computed using the conventional method. -// 1 -- the energy term is computed using the curve fitting method. -// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. -// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. -// catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. -// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. -// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. -// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// chemicalSpectrumRadiusCoef: The value is in range of [1.0, 3.0]. -// viscousSpectrumRadiusCoef : The value is in range of [1.0, 3.0]. -// inviscidSpectrumRadiusCoef: The value is in range of [1.0, 3.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. -// nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. -// isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. -// nViscosityModel: - -// 0 -- Blottner fitting method. -// 1 -- Gupta fitting method. -// nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. -// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing two species without reacting. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. -// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. -// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. -// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. - -int dg_high_order = 0; -int iapplication = 0; -int iCodeBranch = 0; -int nm = 5; -int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; - -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; - -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; - -int nEnergyRecycle = 0; -int nSlipBCModel = 0; -int nDensityModify = 1; -int nTEnergyModel = 0; -int nMeanFreePathType = 0; -int nIsChemicalFreeze = 0; -int nIsSuperCatalytic = 1; -int nTemperatureJump = 0; - -double parkVDPower = 0.6; -double catalyticCoef = 0.0; -double sigmaVelocity = 1.0; -double sigmaTemperature = 1.0; -double sigmaMassFraction = 1.0; -double velocitySlipCorrectConstant = 1.0; - -double chemicalRelaxCorf = 1.0; -double chemicalSpectrumRadiusCoef = 1.0; -double viscousSpectrumRadiusCoef = 1.0; -double inviscidSpectrumRadiusCoef = 1.0; -double staticPressureRelaxCorf = 1.0; - -double veTemperatureMin = 30.0; -int nDebug = 0; -int nSpeciesLimit = 0; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 0 ; -int nChemcalSourceModified = 0; - -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; -string speciesName = "O, O2, NO, N, N2"; -string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; - -//string speciesName = "O, O2, NO, N, NO+, N2, e-"; -//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; - -//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; -//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; - -//string gasfile = "Mars-Pa8"; -//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; -//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; - -//string gasfile = "DK7"; -//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; -//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; - -//string gasfile = "Combustion-12"; -//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; -//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; - -//string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; -//string initMassFraction = "1.0, 0.0"; -int nSutherland = 0; -double gamaSpeciesA = 1.4; -double gamaSpeciesB = 1.3; -double molecularWeightSpeciesA = 29.0; -double molecularWeightSpeciesB = 30.0; - -int nChemicalFlowStep = 0; -int ifStartFromPerfectGasResults = 0; - -######################################################################### -// Multi-Grid parameters. -// nMGLevel: The number of level of Multi-Grid. -// <= 1 -- Single-level. -// > 1 -- multi-level. -// MGPreIteration: For each grid, the number of pre-smoothing steps. -// n_post: For each grid, the number of post-smoothing steps. -// MGCoarsestIteration: For the coarest grid the number of smoothing steps. -// MGFasType: V-multi cycle or W-multi cycle. -// 1 -- V-multi cycle. -// 2 -- W-multi cycle. -// flowInitStep: Flow initialization step, 0 - 500 is suggested. -// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. -// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. -// mgCFLScale: CFL number enlarge times for coarse grid. -// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. -// 1 -- zero order. -// 2 -- first-order. (default) -// mgCorrectionLimit: Multi-grid correction limit. - -int nMGLevel = 1; -int MGCoarsestIteration = 1; -int MGPreIteration = 1; -int MGFasType = 1; -int n_post = 0; -int flowInitStep = 100; -int mprol = 2; -double mgCFLScale = 1.0; -double mgCorrectionLimit = 0.01; - -//--------------- Some parameter for turbulent model -------------------- -// neasm: The variation of kw turbulent model. -// ismooth_turb: Residual smooth for turb or not. -// SSTProductType: The type of product term based on vorticity for SST. -// SAProductType: The type of product term based on vorticity for SA. -int neasm = -3; -int SSTProductType = 0; -int ismooth_turb = 0; -int SAProductType = 2; - -// ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; - -######################################################################### -# High Order Struct Solver # -######################################################################### -// isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. -// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. -// <= 2 -- finite volume method. -// >= 3 -- finite difference order. (to be completed) -// 0 -- default. -// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, -// smaller epsilon, robuster for shock-detecting. -// str_highorder_interpolation_type: -// -- "classical", "test". -// str_highorder_flux_name: -// -- "roe", "steger". -// structhighordergradient: -// -- "conservation", "chain_rule". -int isFVMOrFDM = 0; -string str_highorder_solver = "WCNS"; -int SolverStructOrder = 0; -double str_highorder_interpolation_epsilon = 1.0e-6; -string str_highorder_interpolation_type = "test"; -string str_highorder_flux_name = "steger"; -string structhighordergradient = "conservation"; -double coefofstrflux = 0.5; -double limitcoefofinterface = 0.0; - -// ----------------- Advanced choices ----------------------------------- -// outtimesc: Time stepping scheme for the outer loop. -// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. -// -1 -- seconde-order fully-upwind differencing. -// 0 -- seconde-order upwind-biased differencing. -// 0.333333 -- third-order upwind-biased differencing. -// 1 -- seconde-order central differencing. -// MUSCLCoefXb: The limiter parameter. -// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. -// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. -string outtimesc = "impbd2"; -double MUSCLCoefXk = -1; -double MUSCLCoefXb = 1.0; -int allReduceStep = 1; - -// ----------------- overlap configuration ------------------------------ -// codeOfOversetGrid: Overlapping(overset) grid or not. -// 0 -- NON-overlapping grid. -// 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation -// 0 -- set the acceptor cell value by donor cell value. -// 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 1; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; - -int numberOfMovingBodies = 2; - -// ----------------- ALE configuration ------------------------------ -int codeOfAleModel = 1; -int aleStartStrategy = -1; - -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; - -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton -int methodForKineticEquation = 0; -double relaxParameterOfKinetic = 1.0; - -######################################################################### -# motive information # -######################################################################### -int numberOfMovingBodies = 1; - -############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. -// -1 given motion partten. -// 0 still. -// 1 six DOF motion. -// 2 three DOF motion. -// 11 X-axis forced motion. -// 12 Y-axis forced motion. -// 13 Z-axis forced motion. -// 14 forced pitch motion. -// 15 forced yaw motion. -// 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; - - -// ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; -//@double refReNumber = 6.5e6; -//@double refDimensionalTemperature = 288.15; -//@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; -//@double refDimensionalVelocity = 0; -//@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### -int isPlotVolumeField = 0; - diff --git a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/overset.txt b/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/overset.txt deleted file mode 100644 index 33cf929..0000000 --- a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/bin/overset.txt +++ /dev/null @@ -1,17 +0,0 @@ -int taskSelector = 1; - -int codeOfLargeScale = 0; -int numberOfMultigrid = 1; -int numberOfProcessors = 4; - -string originalGridFile = "./grid/30p30n_str_3D.grd"; -string originalBoundaryFile = "./grid/30p30n_str_3D.inp"; - -int numberOfGridGroups = 4; -int zoneSpan[numberOfGridGroups] = 3,4,4,5; - -int solidBcSize = 2; -int solidColorList[solidBcSize] = 2,4; - -int outerBcSize = 3; -int outerColorList[outerBcSize] = 16,17,18; diff --git a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/补充说明.txt b/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/补充说明.txt deleted file mode 100644 index 24b3bee..0000000 --- a/F01_ThreeD_30p30n_OversetGrid_SA_Struct_4CPU/补充说明.txt +++ /dev/null @@ -1,2 +0,0 @@ -针对本算例,风雷代码cmake构建的时候需要勾选USE_OVERSET选项!!! -该算例当前只支持2171版本 \ No newline at end of file diff --git a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/boundary_condition_ref.hypara b/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/boundary_condition_ref.hypara deleted file mode 100644 index 7ab6817..0000000 --- a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/boundary_condition_ref.hypara +++ /dev/null @@ -1,61 +0,0 @@ -# nBoundaryConditions: Number of global boundary conditions. -# bcName : Boundary condition name. -# bcType(in PHengLEI): Boundary condition type. - -# How to set boundary condition, for example: -# string bcName = "Wall"; -# { -# int bcType = 2; -# int viscousType = 1; -# double wallTemperature = -1.0; -# double uWall = 0.0; -# double vWall = 0.0; -# double wWall = 0.0; -# } -# string bcName = "Inflow"; -# { -# int bcType = 5; -# int inflowParaType = 0; -# double refMachNumber = 0.73; -# double attackd = 2.79; -# double angleSlide = 0.0; -# double refReNumber = 6.5e6; -# double refDimensionalTemperature = 288.15; -# } - -# For more information, see examples/bin/boundary_condition.hypara file!!! - -int nBoundaryConditions = 3; -string bcName = "wall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "inlet"; -{ - int bcType = 5; - string flowType = "FLOW_VELOCITY_INLET"; - double flowU =0.9191874; -} -string bcName = "outlet"; -{ - int bcType = 6; - string flowType = "FLOW_PRESSURE_OUTLET"; - double flowP =0; -} - -# 'bcType' is defined as following: -# -2: WAKE -# -1: INTERFACE -# 0 : NO_BOUNDARY_CONDITION -# 1 : EXTRAPOLATION -# 2 : SOLID_SURFACE -# 3 : SYMMETRY -# 4 : FARFIELD -# 5 : INFLOW -# 6 : OUTFLOW -# 52: PRESSURE_INLET -# 62: PRESSURE_OUTLET -# 61: OUTFLOW_CONFINED -# 7 : POLE diff --git a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/cfd_para_incompressible.hypara b/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/cfd_para_incompressible.hypara deleted file mode 100644 index a2026d7..0000000 --- a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/cfd_para_incompressible.hypara +++ /dev/null @@ -1,215 +0,0 @@ -######################################################################### -# General Control Parameter # -######################################################################### -// nIsComputeWallDist: Whether to compute the wall distance. -// 0 -- Compute wall distance. -// 1 -- Not compute. -// gridfile: The partitioned Grid file path, using relative path, -// which is relative to the working directory. -// maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. -// intervalStepRes: The step intervals for residual 'res.dat' saved. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. -// compressible: An indicator that distinguishes density base from pressure base. 0-incompressible, 1-compressible -// isUnsteady: An indicator that distinguishes unsteady problem from steady problem. 0-steady, 1-unsteady -// startTime: The initial time of the unsteady simulation. -// endTime: The end time of the unsteady simulation. -// dt: The time interval of the unsteady simulation. -// innerIter: The number of step for current time. -// OutputTimeStep: The interval step of output for unsteady simulation. - -int nIsComputeWallDist = 1; -string gridfile = "./grid/back.fts"; -int maxSimuStep = 2000; -int intervalStepFlow = 2000; -int intervalStepPlot = 1000; -int intervalStepRes = 10; - -double gridScaleFactor = 1.0; - -int compressible = 0; -int iunsteady = 0; -double startTime = 0.0; -double endTime = 30; -double dt = 0.1; -int innerIter = 10; -int OutputTimeStep = 5; - -######################################################################### -# Post-Processing # -######################################################################### -// nVisualVariables: Number of variables want to be dumped for tecplot visualization. -// visualVariables : Variable types dumped, listed as following: -// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70) -// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! -// Variables order must from small to big. - -int nVisualVariables = 4; -int visualVariables[] = [22, 23, 24, 25]; - -######################################################################### -# Flow Parameter # -######################################################################### -string FLOW[] = "FLOW"; - -// Initial value of variables or constant -double initRho = 1.0; -double initMu = 0.0001; -double initU = 0.9191874; -double initV = 0; -double initW = 0; -double initP = 0; - -// Relaxing factor -double urfU = 0.4; -double urfV = 0.4; -double urfW = 0.4; -double urfP = 0.3; -double urfFlux = 0.4; - -// Tolerance for governing equations -double resU = 1e-6; -double resV = 1e-6; -double resW = 1e-5; -double resP = 1e-5; - -// Solver for solving linear system -// : CGS/GMRES/BiCGSTAB/AMG -string iterSolvU = "BiCGSTAB"; -string iterSolvV = "BiCGSTAB"; -string iterSolvW = "BiCGSTAB"; -string iterSolvP = "AMG"; - -// Max Iter for solving linear system -int maxSweepU = 30; -int maxSweepV = 30; -int maxSweepW = 30; -int maxSweepP = 30; - -// Tolerance for solving linear system -double iterSolvTolU = 1e-3; -double iterSolvTolV = 1e-3; -double iterSolvTolW = 1e-3; -double iterSolvTolP = 1e-2; - -// Gradient Calculation -// : GAUSS/LSQ -string UGradCalc = "GAUSS"; -string VGradCalc = "GAUSS"; -string WGradCalc = "GAUSS"; -string PGradCalc = "GAUSS"; - -// Convection scheme -// : UPWIND/CDS/QUICK/SUDS -string flowConvCalc = "UPWIND"; - -// Diffusion scheme(central difference) -// : NON_ORTHOGONAL -string flowDiffCalc = "NON_ORTHOGONAL"; - -// Transient scheme -// : CRANK_NICOLSON/IMPLICIT_2ND_ORDER/IMPLICIT_EULER -string flowTranCalc = "IMPLICIT_EULER"; - -// Source for flow -// : FLOW_DEFAULT/FLOW_GRAVITY -string flowSourceCalc[] = "FLOW_DEFAULT"; - -//string flowSourceCalc[] = "FLOW_DEFAULT FLOW_GRAVITY"; -int bodyForceFlag = 0; -//double gravityX = 0.0; -//double gravityY = -9.81; -//double gravityZ = 0.0; -int isBoussinesq = 0; -######################################################################### -# Turbulence Parameter # -######################################################################### -// turb SA -//int viscousType = 11; //SPALART_ALLMARAS = 11, KEPSILON = 13 -string TURB_SA[] = ["TURB_SA"]; -string TURB_SA_SCALAR_NAME[] = ["kinetic"]; -double urfMu = 1.0; - -double kineticInitValue = 1.0; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_SA_DEFAULT"; -double kineticUrf = 1.0; -double kineticRes = 1e-6; - -string turbIterSolv = "BiCGSTAB"; -int turbMaxSweep = 30; -double turbIterSolvTol = 1e-12; - - -// turb K-EPSILON -//int viscousType = 13; //SPALART_ALLMARAS = 11, KEPSILON = 13 -string TURB_K_EPSILON[] = ["TURB_K","TURB_EPSILON"]; -string TURB_K_EPSILON_SCALAR_NAME[] = ["kinetic", "epsilon - -string turbIterSolv = "BiCGSTAB"; -int turbMaxSweep = 30; -double turbIterSolvTol = 1e-12; - -string TURB_K[] = ["TURB_K"]; -string TURB_K_SCALAR_NAME[] = ["kinetic"]; -string TURB_EPSILON[] = ["TURB_EPSILON"]; -string TURB_EPSILON_SCALAR_NAME[] = ["epsilon"]; -double urfMu = 1.0; - -// turb k -double kineticInitValue = 15.48; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_K_DEFAULT"; -double kineticUrf = 0.6; -double kineticRes = 1e-6; - -// turb epsilon -double epsilonInitValue = 200.3; -string epsilonConvCalc = "UPWIND"; -string epsilonDiffCalc = "NON_ORTHOGONAL"; -string epsilonSourceCalc[] = "TURB_EPSILON_DEFAULT"; -double epsilonUrf = 0.6; -double epsilonRes = 1e-6; - -######################################################################### -# Energy Parameter # -######################################################################### -// energyType: The energy solver switch. 0-off, 1-on -// ENERGY[]: Solver binding for factory mode. -// ENERGY_SCALAR_NAME[]: The name of variable to be solved in energy equation. -// energyPrintName[]: The output on the screen during the solution. - -int energyType = 0; -string ENERGY[] = ["ENERGY"]; -string ENERGY_SCALAR_NAME[] = "enthalpy"; -string energyPrintName[] = ["H"]; - -// Initial value of variables or constant -double initT = 273.0; -double initK = 0.026; -double initCPg = 1007.0; -double urfT = 0.8; -double urfH = 0.7; -double enthalpyInitValue = 0.21; - -// Discrete schemes -string energyConvCalc = "UPWIND"; -string energyDiffCalc = "NON_ORTHOGONAL"; -string energySourceCalc[] = ["EMPTY"]; -string energyGradCalc = "GAUSS"; -string energyTranCalc = "IMPLICIT_EULER"; - -// Set for solving linear equations -string enthalpyIterSolv = "BiCGSTAB"; -int enthalpyMaxSweep = 30; -double enthalpyIterSolvTol = 1e-12; -double enthalpyRes = 1e-6; \ No newline at end of file diff --git a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/grid_para.hypara b/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/grid_para.hypara deleted file mode 100644 index 8a3018f..0000000 --- a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/grid_para.hypara +++ /dev/null @@ -1,30 +0,0 @@ -######################################################################### -# Grid data type # -######################################################################### -// gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -// from_gtype: Type of grid data type in grid conversion process. -// -1 -- MULTI_TYPE. -// 1 -- PHengLEI, *.fts. -// 2 -- CGNS, *.cgns. -// 3 -- Plot3D type of structured grid, *.dat/*.grd. -// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. -// 5 -- Fluent, *.cas/*.msh. -// 6 -- Ustar, mgrid.in. -// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. -// 8 -- GMSH, *.msh. -int gridtype = 0; -int axisup = 1; -int from_gtype = 5; - -######################################################################### -# File path # -######################################################################### -// from_gfile: path of original data file for unstructure grid convert from. -// out_gfile: path of target file for grid convert to, *.fts type of file usually. -string from_gfile = "./grid/back.cas"; -string out_gfile = "./grid/back.fts"; diff --git a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/key.hypara b/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/key.hypara deleted file mode 100644 index dc4eed2..0000000 --- a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/bin/key.hypara +++ /dev/null @@ -1,52 +0,0 @@ -string title = "PHengLEI Main Parameter Control File"; - -// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. -string defaultParaFile = "./bin/cfd_para.hypara"; - -// ndim: Dimensional of the grid, 2 or 3. -// nparafile: the number of parameter files. -// nsimutask: simulation task type. -// 0 -- CFD Solver of NS or Turbulation. -// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. -// Grid conversion: from other format to PHengLEI format (.fts). -// Grid reconstruction: such as grid adaptation. -// Grid merging: merge two blocks into one block. -// Grid repairing: repair the original grid in order to remove the negative volume cells. -// 2 -- Wall distance computation for turb-solver. -// 3 -- Grid partition. -int ndim = 2; -int nparafile = 1; - -int nsimutask = 0; -string parafilename = "./bin/cfd_para_incompressible.hypara" -//string parafilename = "./bin/cfd_para_subsonic.hypara"; -//string parafilename = "./bin/cfd_para_transonic.hypara"; -//string parafilename = "./bin/cfd_para_supersonic.hypara"; -//string parafilename = "./bin/cfd_para_hypersonic.hypara"; - -//int nsimutask = 1; -//string parafilename = "./bin/grid_para.hypara"; - -//int nsimutask = 2; -//string parafilename = "./bin/cfd_para.hypara"; - -//int nsimutask = 3; -//string parafilename = "./bin/partition.hypara"; - -//int nsimutask = 1; -//string parafilename = "./bin/grid_deform_para.hypara"; - -//int nsimutask = 1; -//string parafilename = "./bin/grid_refine_para.hypara"; - -//int nsimutask = 14; -//string parafilename = "./bin/integrative_solver.hypara"; - -//int nsimutask = 99; -//string parafilename = "./bin/post_processing.hypara"; - -// ---------------- Advanced Parameters, DO NOT care it ---------------- -int numberOfGridProcessor = 0; -// ATP read -//@string parafilename1 = "" -//@string parafilename2 = ""; \ No newline at end of file diff --git a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/grid/网格地址.txt b/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/grid/网格地址.txt deleted file mode 100644 index 899f977..0000000 --- a/H01_PBSolver_TwoD_Backstep_Laminar_Re95_Unstruct_1CPU/grid/网格地址.txt +++ /dev/null @@ -1,5 +0,0 @@ -红山开源风雷算例库原始网格获取百度网盘链接: -链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA -提取码:w47m - -注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/boundary_condition_ref.hypara b/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/boundary_condition_ref.hypara deleted file mode 100644 index ab8c3f3..0000000 --- a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/boundary_condition_ref.hypara +++ /dev/null @@ -1,73 +0,0 @@ -# nBoundaryConditions: Number of global boundary conditions. -# bcName : Boundary condition name. -# bcType(in PHengLEI): Boundary condition type. - -# How to set boundary condition, for example: -# string bcName = "Wall"; -# { -# int bcType = 2; -# int viscousType = 1; -# double wallTemperature = -1.0; -# double uWall = 0.0; -# double vWall = 0.0; -# double wWall = 0.0; -# } -# string bcName = "Inflow"; -# { -# int bcType = 5; -# int inflowParaType = 0; -# double refMachNumber = 0.73; -# double attackd = 2.79; -# double angleSlide = 0.0; -# double refReNumber = 6.5e6; -# double refDimensionalTemperature = 288.15; -# } - -# For more information, see examples/bin/boundary_condition.hypara file!!! - -int nBoundaryConditions = 4; -string bcName = "bottomwall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; - string energyBoundaryType = "ENERGY_WALL"; -} -string bcName = "coldwall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; - string energyBoundaryType = "ENERGY_WALL"; - double T = 290.0; -} -string bcName = "hotwall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; - string energyBoundaryType = "ENERGY_WALL"; - double T = 305.0; -} -string bcName = "topwall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; - string energyBoundaryType = "ENERGY_WALL"; -} - -# 'bcType' is defined as following: -# -2: WAKE -# -1: INTERFACE -# 0 : NO_BOUNDARY_CONDITION -# 1 : EXTRAPOLATION -# 2 : SOLID_SURFACE -# 3 : SYMMETRY -# 4 : FARFIELD -# 5 : INFLOW -# 6 : OUTFLOW -# 52: PRESSURE_INLET -# 62: PRESSURE_OUTLET -# 61: OUTFLOW_CONFINED -# 7 : POLE diff --git a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para_incompressible.hypara b/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para_incompressible.hypara deleted file mode 100644 index e51c789..0000000 --- a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para_incompressible.hypara +++ /dev/null @@ -1,214 +0,0 @@ -######################################################################### -# General Control Parameter # -######################################################################### -// nIsComputeWallDist: Whether to compute the wall distance. -// 0 -- Compute wall distance. -// 1 -- Not compute. -// gridfile: The partitioned Grid file path, using relative path, -// which is relative to the working directory. -// maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. -// intervalStepRes: The step intervals for residual 'res.dat' saved. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. -// compressible: An indicator that distinguishes density base from pressure base. 0-incompressible, 1-compressible -// isUnsteady: An indicator that distinguishes unsteady problem from steady problem. 0-steady, 1-unsteady -// startTime: The initial time of the unsteady simulation. -// endTime: The end time of the unsteady simulation. -// dt: The time interval of the unsteady simulation. -// innerIter: The number of step for current time. -// OutputTimeStep: The interval step of output for unsteady simulation. - -int nIsComputeWallDist = 1; -string gridfile = "./grid/run.fts"; -int maxSimuStep = 10000; -int intervalStepFlow = 2000; -int intervalStepPlot = 1000; -int intervalStepRes = 10; - -double gridScaleFactor = 1.0; - -int compressible = 0; -int iunsteady = 0; -double startTime = 0.0; -double endTime = 20.0; -double dt = 0.1; -int innerIter = 10; -int OutputTimeStep = 5; - -######################################################################### -# Post-Processing # -######################################################################### -// nVisualVariables: Number of variables want to be dumped for tecplot visualization. -// visualVariables : Variable types dumped, listed as following: -// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70) -// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! -// Variables order must from small to big. - -int nVisualVariables = 6; -int visualVariables[] = [22, 23, 24, 25, 27, 70]; - -######################################################################### -# Flow Parameter # -######################################################################### -string FLOW[] = "FLOW"; - -// Initial value of variables or constant -double initRho = 1.1405; -double initMu = 1.7894e-5; -double initU = 0; -double initV = 0; -double initW = 0; -double initP = 0; - -// Relaxing factor -double urfU = 0.7; -double urfV = 0.7; -double urfW = 0.7; -double urfP = 0.3; -double urfFlux = 0.0; - -// Tolerance for governing equations -double resU = 1e-6; -double resV = 1e-6; -double resW = 1e-5; -double resP = 1e-5; - -// Solver for solving linear system -// : CGS/GMRES/BiCGSTAB/AMG -string iterSolvU = "BiCGSTAB"; -string iterSolvV = "BiCGSTAB"; -string iterSolvW = "BiCGSTAB"; -string iterSolvP = "GMRES"; - -// Max Iter for solving linear system -int maxSweepU = 30; -int maxSweepV = 30; -int maxSweepW = 30; -int maxSweepP = 30; - -// Tolerance for solving linear system -double iterSolvTolU = 1e-3; -double iterSolvTolV = 1e-3; -double iterSolvTolW = 1e-3; -double iterSolvTolP = 1e-2; - -// Gradient Calculation -// : GAUSS/LSQ -string UGradCalc = "GAUSS"; -string VGradCalc = "GAUSS"; -string WGradCalc = "GAUSS"; -string PGradCalc = "GAUSS"; - -// Convection scheme -// : UPWIND/CDS/QUICK/SUDS -string flowConvCalc = "UPWIND"; - -// Diffusion scheme(central difference) -// : NON_ORTHOGONAL -string flowDiffCalc = "NON_ORTHOGONAL"; - -// Transient scheme -// : CRANK_NICOLSON/IMPLICIT_2ND_ORDER/IMPLICIT_EULER -string flowTranCalc = "IMPLICIT_EULER"; - -// Source for flow -// : FLOW_DEFAULT/FLOW_GRAVITY -//string flowSourceCalc[] = "FLOW_DEFAULT"; - -string flowSourceCalc[] = "FLOW_DEFAULT FLOW_GRAVITY"; -int bodyForceFlag = 1; -double gravityX = 0.0; -double gravityY = -9.81; -double gravityZ = 0.0; -int isBoussinesq = 1; -double thermalExpansion = 3.44827e-3; -double refT = 290; - -######################################################################### -# Turbulence Parameter # -######################################################################### -//int viscousType = 13; //SPALART_ALLMARAS = 11, KEPSILON = 13 - -//turb SA -string TURB_SA[] = ["TURB_SA"]; -string TURB_SA_SCALAR_NAME[] = ["kinetic"]; -double urfMu = 1.0; - -double kineticInitValue = 1.0; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_SA_DEFAULT"; -double kineticUrf = 1.0; -double kineticRes = 1e-6; - -string turbIterSolv = "BiCGSTAB"; -int turbMaxSweep = 30; -double turbIterSolvTol = 1e-12; - - -//turb KEPSILON -string TURB_K_EPSILON[] = ["TURB_K","TURB_EPSILON"]; -string TURB_K_EPSILON_SCALAR_NAME[] = ["kinetic", "epsilon"]; - -string TURB_K[] = ["TURB_K"]; -string TURB_K_SCALAR_NAME[] = ["kinetic"]; -string TURB_EPSILON[] = ["TURB_EPSILON"]; -string TURB_EPSILON_SCALAR_NAME[] = ["epsilon"]; -double urfMu = 1.0; - -// turb k -double kineticInitValue = 1.0; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_K_DEFAULT"; -double kineticUrf = 1.0; -double kineticRes = 1e-6; - -// turb epsilon -double epsilonInitValue = 1.0; -string epsilonConvCalc = "UPWIND"; -string epsilonDiffCalc = "NON_ORTHOGONAL"; -string epsilonSourceCalc[] = "TURB_EPSILON_DEFAULT"; -double epsilonUrf = 1.0; -double epsilonRes = 1e-6; - -######################################################################### -# Energy Parameter # -######################################################################### -// energyType: The energy solver switch. 0-off, 1-on -// ENERGY[]: Solver binding for factory mode. -// ENERGY_SCALAR_NAME[]: The name of variable to be solved in energy equation. -// energyPrintName[]: The output on the screen during the solution. - -int energyType = 1; -string ENERGY[] = ["ENERGY"]; -string ENERGY_SCALAR_NAME[] = "enthalpy"; -string energyPrintName[] = ["H"]; - -// Initial value of variables or constant -double initT = 295; -double initK = 0.0242; -double initCPg = 1006.43; -double urfT = 0.2; -double urfH = 0.2; -double enthalpyInitValue = 0.21; - -// Discrete schemes -string energyConvCalc = "UPWIND"; -string energyDiffCalc = "NON_ORTHOGONAL"; -string energySourceCalc[] = ["EMPTY"]; -string energyGradCalc = "GAUSS"; -string energyTranCalc = "IMPLICIT_EULER"; - -// Set for solving linear equations -string enthalpyIterSolv = "BiCGSTAB"; -int enthalpyMaxSweep = 30; -double enthalpyIterSolvTol = 1e-12; -double enthalpyRes = 1e-6; \ No newline at end of file diff --git a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/grid_para.hypara b/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/grid_para.hypara deleted file mode 100644 index b66d187..0000000 --- a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/grid_para.hypara +++ /dev/null @@ -1,30 +0,0 @@ -######################################################################### -# Grid data type # -######################################################################### -// gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -// from_gtype: Type of grid data type in grid conversion process. -// -1 -- MULTI_TYPE. -// 1 -- PHengLEI, *.fts. -// 2 -- CGNS, *.cgns. -// 3 -- Plot3D type of structured grid, *.dat/*.grd. -// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. -// 5 -- Fluent, *.cas/*.msh. -// 6 -- Ustar, mgrid.in. -// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. -// 8 -- GMSH, *.msh. -int gridtype = 0; -int axisup = 1; -int from_gtype = 5; - -######################################################################### -# File path # -######################################################################### -// from_gfile: path of original data file for unstructure grid convert from. -// out_gfile: path of target file for grid convert to, *.fts type of file usually. -string from_gfile = "./grid/run.cas"; -string out_gfile = "./grid/run.fts"; diff --git a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/grid/网格地址.txt b/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/grid/网格地址.txt deleted file mode 100644 index 899f977..0000000 --- a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/grid/网格地址.txt +++ /dev/null @@ -1,5 +0,0 @@ -红山开源风雷算例库原始网格获取百度网盘链接: -链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA -提取码:w47m - -注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/boundary_condition_ref.hypara b/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/boundary_condition_ref.hypara deleted file mode 100644 index 5666545..0000000 --- a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/boundary_condition_ref.hypara +++ /dev/null @@ -1,68 +0,0 @@ -# nBoundaryConditions: Number of global boundary conditions. -# bcName : Boundary condition name. -# bcType(in PHengLEI): Boundary condition type. - -# How to set boundary condition, for example: -# string bcName = "Wall"; -# { -# int bcType = 2; -# int viscousType = 1; -# double wallTemperature = -1.0; -# double uWall = 0.0; -# double vWall = 0.0; -# double wWall = 0.0; -# } -# string bcName = "Inflow"; -# { -# int bcType = 5; -# int inflowParaType = 0; -# double refMachNumber = 0.73; -# double attackd = 2.79; -# double angleSlide = 0.0; -# double refReNumber = 6.5e6; -# double refDimensionalTemperature = 288.15; -# } - -# For more information, see examples/bin/boundary_condition.hypara file!!! - -int nBoundaryConditions = 4; -string bcName = "bottom"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "left"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "right"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "top"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; - double flowU = 1.0; -} - -# 'bcType' is defined as following: -# -2: WAKE -# -1: INTERFACE -# 0 : NO_BOUNDARY_CONDITION -# 1 : EXTRAPOLATION -# 2 : SOLID_SURFACE -# 3 : SYMMETRY -# 4 : FARFIELD -# 5 : INFLOW -# 6 : OUTFLOW -# 52: PRESSURE_INLET -# 62: PRESSURE_OUTLET -# 61: OUTFLOW_CONFINED -# 7 : POLE diff --git a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para_incompressible.hypara b/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para_incompressible.hypara deleted file mode 100644 index 5f04ee5..0000000 --- a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para_incompressible.hypara +++ /dev/null @@ -1,197 +0,0 @@ -######################################################################### -# General Control Parameter # -######################################################################### -// nIsComputeWallDist: Whether to compute the wall distance. -// 0 -- Compute wall distance. -// 1 -- Not compute. -// gridfile: The partitioned Grid file path, using relative path, -// which is relative to the working directory. -// maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. -// intervalStepRes: The step intervals for residual 'res.dat' saved. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. -// compressible: An indicator that distinguishes density base from pressure base. 0-incompressible, 1-compressible -// isUnsteady: An indicator that distinguishes unsteady problem from steady problem. 0-steady, 1-unsteady -// startTime: The initial time of the unsteady simulation. -// endTime: The end time of the unsteady simulation. -// dt: The time interval of the unsteady simulation. -// innerIter: The number of step for current time. -// OutputTimeStep: The interval step of output for unsteady simulation. - -int nIsComputeWallDist = 1; -string gridfile = "./grid/cavity.fts"; -int maxSimuStep = 10000; -int intervalStepFlow = 2000; -int intervalStepPlot = 2000; -int intervalStepRes = 10; - -double gridScaleFactor = 1.0; - -int compressible = 0; -int iunsteady = 0; -double startTime = 0.0; -double endTime = 30; -double dt = 0.1; -int innerIter = 10; -int OutputTimeStep = 5; - -######################################################################### -# Post-Processing # -######################################################################### -// nVisualVariables: Number of variables want to be dumped for tecplot visualization. -// visualVariables : Variable types dumped, listed as following: -// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70) -// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! -// Variables order must from small to big. - -int nVisualVariables = 4; -int visualVariables[] = [22, 23, 24, 25]; -######################################################################### -# Flow Parameter # -######################################################################### -string FLOW[] = "FLOW"; - -// Initial value of variables or constant -double initRho = 1.0; -double initMu = 0.001; -double initU = 0; -double initV = 0; -double initW = 0; -double initP = 0; - -// Relaxing factor -double urfU = 0.4; -double urfV = 0.4; -double urfW = 0.4; -double urfP = 0.7; -double urfFlux = 0.4; - -// Tolerance for governing equations -double resU = 1e-6; -double resV = 1e-6; -double resW = 1e-5; -double resP = 1e-5; - -// Solver for solving linear system -// : CGS/GMRES/BiCGSTAB/AMG -string iterSolvU = "BiCGSTAB"; -string iterSolvV = "BiCGSTAB"; -string iterSolvW = "BiCGSTAB"; -string iterSolvP = "GMRES"; - -// Max Iter for solving linear system -int maxSweepU = 30; -int maxSweepV = 30; -int maxSweepW = 30; -int maxSweepP = 30; - -// Tolerance for solving linear system -double iterSolvTolU = 1e-3; -double iterSolvTolV = 1e-3; -double iterSolvTolW = 1e-3; -double iterSolvTolP = 1e-2; - -// Gradient Calculation -// : GAUSS/LSQ -string UGradCalc = "GAUSS"; -string VGradCalc = "GAUSS"; -string WGradCalc = "GAUSS"; -string PGradCalc = "GAUSS"; - -// Convection scheme -// : UPWIND/CDS/QUICK/SUDS -string flowConvCalc = "UPWIND"; - -// Diffusion scheme(central difference) -// : NON_ORTHOGONAL -string flowDiffCalc = "NON_ORTHOGONAL"; - -// Transient scheme -// : CRANK_NICOLSON/IMPLICIT_2ND_ORDER/IMPLICIT_EULER -string flowTranCalc = "IMPLICIT_EULER"; - -// Source for flow -// : FLOW_DEFAULT/FLOW_GRAVITY -string flowSourceCalc[] = "FLOW_DEFAULT"; - -// string flowSourceCalc[] = "FLOW_DEFAULT FLOW_GRAVITY"; -int bodyForceFlag = 0; -int isBoussinesq = 0; -//double gravityX = 0.0; -//double gravityY = -9.81; -//double gravityZ = 0.0; - -######################################################################### -# Turbulence Parameter # -######################################################################### -// turb K-EPSILON -//int viscousType = 13; //SPALART_ALLMARAS = 11, KEPSILON = 13 -string TURB_K_EPSILON[] = ["TURB_K","TURB_EPSILON"]; -string TURB_K_EPSILON_SCALAR_NAME[] = ["kinetic", "epsilon"]; - -string turbIterSolv = "BiCGSTAB"; -int turbMaxSweep = 30; -double turbIterSolvTol = 1e-12; - -string TURB_K[] = ["TURB_K"]; -string TURB_K_SCALAR_NAME[] = ["kinetic"]; -string TURB_EPSILON[] = ["TURB_EPSILON"]; -string TURB_EPSILON_SCALAR_NAME[] = ["epsilon"]; -double urfMu = 1.0; - -// turb k -double kineticInitValue = 1.0; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_K_DEFAULT"; -double kineticUrf = 1.0; -double kineticRes = 1e-6; - -// turb epsilon -double epsilonInitValue = 1.0; -string epsilonConvCalc = "UPWIND"; -string epsilonDiffCalc = "NON_ORTHOGONAL"; -string epsilonSourceCalc[] = "TURB_EPSILON_DEFAULT"; -double epsilonUrf = 1.0; -double epsilonRes = 1e-6; - -######################################################################### -# Energy Parameter # -######################################################################### -// energyType: The energy solver switch. 0-off, 1-on -// ENERGY[]: Solver binding for factory mode. -// ENERGY_SCALAR_NAME[]: The name of variable to be solved in energy equation. -// energyPrintName[]: The output on the screen during the solution. - -int energyType = 0; -string ENERGY[] = ["ENERGY"]; -string ENERGY_SCALAR_NAME[] = "enthalpy"; -string energyPrintName[] = ["H"]; - -// Initial value of variables or constant -double initT = 273.0; -double initK = 0.026; -double initCPg = 1007.0; -double urfT = 0.8; -double urfH = 0.7; -double enthalpyInitValue = 0.21; - -// Discrete schemes -string energyConvCalc = "UPWIND"; -string energyDiffCalc = "NON_ORTHOGONAL"; -string energySourceCalc[] = ["EMPTY"]; -string energyGradCalc = "GAUSS"; -string energyTranCalc = "IMPLICIT_EULER"; - -// Set for solving linear equations -string enthalpyIterSolv = "BiCGSTAB"; -int enthalpyMaxSweep = 30; -double enthalpyIterSolvTol = 1e-12; -double enthalpyRes = 1e-6; \ No newline at end of file diff --git a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/grid_para.hypara b/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/grid_para.hypara deleted file mode 100644 index b90c53e..0000000 --- a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/grid_para.hypara +++ /dev/null @@ -1,30 +0,0 @@ -######################################################################### -# Grid data type # -######################################################################### -// gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -// from_gtype: Type of grid data type in grid conversion process. -// -1 -- MULTI_TYPE. -// 1 -- PHengLEI, *.fts. -// 2 -- CGNS, *.cgns. -// 3 -- Plot3D type of structured grid, *.dat/*.grd. -// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. -// 5 -- Fluent, *.cas/*.msh. -// 6 -- Ustar, mgrid.in. -// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. -// 8 -- GMSH, *.msh. -int gridtype = 0; -int axisup = 1; -int from_gtype = 5; - -######################################################################### -# File path # -######################################################################### -// from_gfile: path of original data file for unstructure grid convert from. -// out_gfile: path of target file for grid convert to, *.fts type of file usually. -string from_gfile = "./grid/cavity.cas"; -string out_gfile = "./grid/cavity.fts"; diff --git a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/grid/网格地址.txt b/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/grid/网格地址.txt deleted file mode 100644 index 899f977..0000000 --- a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/grid/网格地址.txt +++ /dev/null @@ -1,5 +0,0 @@ -红山开源风雷算例库原始网格获取百度网盘链接: -链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA -提取码:w47m - -注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/boundary_condition_ref.hypara b/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/boundary_condition_ref.hypara deleted file mode 100644 index 9cf8c2f..0000000 --- a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/boundary_condition_ref.hypara +++ /dev/null @@ -1,71 +0,0 @@ -# nBoundaryConditions: Number of global boundary conditions. -# bcName : Boundary condition name. -# bcType(in PHengLEI): Boundary condition type. - -# How to set boundary condition, for example: -# string bcName = "Wall"; -# { -# int bcType = 2; -# int viscousType = 1; -# double wallTemperature = -1.0; -# double uWall = 0.0; -# double vWall = 0.0; -# double wWall = 0.0; -# } -# string bcName = "Inflow"; -# { -# int bcType = 5; -# int inflowParaType = 0; -# double refMachNumber = 0.73; -# double attackd = 2.79; -# double angleSlide = 0.0; -# double refReNumber = 6.5e6; -# double refDimensionalTemperature = 288.15; -# } - -# For more information, see examples/bin/boundary_condition.hypara file!!! - -int nBoundaryConditions = 3; -string bcName = "in"; -{ - int bcType = 5; - string flowType = "FLOW_VELOCITY_INLET"; - string kineticBoundaryType = "TURB_K_INLET"; - string epsilonBoundaryType = "TURB_EPSILON_INLET"; - double flowW = 50; - double kinetic = 9.375004; - double epsilon = 54151.86; -} -string bcName = "out"; -{ - int bcType = 6; - string flowType = "FLOW_PRESSURE_OUTLET"; - string kineticBoundaryType = "TURB_K_PRESSUREOUTLET"; - string epsilonBoundaryType = "TURB_EPSILON_PRESSUREOUTLET"; - double flowP = 0; - double kinetic = 9.375004; - double epsilon = 54151.86; -} -string bcName = "wall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; - string kineticBoundaryType = "TURB_K_WALL"; - string epsilonBoundaryType = "TURB_EPSILON_WALL"; -} - -# 'bcType' is defined as following: -# -2: WAKE -# -1: INTERFACE -# 0 : NO_BOUNDARY_CONDITION -# 1 : EXTRAPOLATION -# 2 : SOLID_SURFACE -# 3 : SYMMETRY -# 4 : FARFIELD -# 5 : INFLOW -# 6 : OUTFLOW -# 52: PRESSURE_INLET -# 62: PRESSURE_OUTLET -# 61: OUTFLOW_CONFINED -# 7 : POLE diff --git a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para_incompressible.hypara b/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para_incompressible.hypara deleted file mode 100644 index 3048a1c..0000000 --- a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para_incompressible.hypara +++ /dev/null @@ -1,202 +0,0 @@ -######################################################################### -# General Control Parameter # -######################################################################### -// nIsComputeWallDist: Whether to compute the wall distance. -// 0 -- Compute wall distance. -// 1 -- Not compute. -// gridfile: The partitioned Grid file path, using relative path, -// which is relative to the working directory. -// maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. -// intervalStepRes: The step intervals for residual 'res.dat' saved. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. -// compressible: An indicator that distinguishes density base from pressure base. 0-incompressible, 1-compressible -// isUnsteady: An indicator that distinguishes unsteady problem from steady problem. 0-steady, 1-unsteady -// startTime: The initial time of the unsteady simulation. -// endTime: The end time of the unsteady simulation. -// dt: The time interval of the unsteady simulation. -// innerIter: The number of step for current time. -// OutputTimeStep: The interval step of output for unsteady simulation. - -int nIsComputeWallDist = 1; -string gridfile = "./grid/pipe.fts"; -int maxSimuStep = 10000; -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; -int intervalStepRes = 1000; - -double gridScaleFactor = 1; - -int compressible = 0; -int iunsteady = 0; -double startTime = 0.0; -double endTime = 5; -double dt = 0.1; -int innerIter = 10; -int OutputTimeStep = 5; - -######################################################################### -# Post-Processing # -######################################################################### -// nVisualVariables: Number of variables want to be dumped for tecplot visualization. -// visualVariables : Variable types dumped, listed as following: -// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(57) -// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! -// Variables order must from small to big. -// plotFieldType: If dump out the field results to visulization. - -int plotFieldType = 1; -//int nVisualVariables = 4; -//int visualVariables[] = [22, 23, 24, 25]; - -int nVisualVariables = 7; -int visualVariables[] = [22, 23, 24, 25, 29,31,32]; -######################################################################### -# Flow Parameter # -######################################################################### -string FLOW[] = "FLOW"; - -// Initial value of variables or constant -double initRho = 1.225; -double initMu = 1.7894e-05; -double initU = 0; -double initV = 0; -double initW = 50; -double initP = 0; - -// Relaxing factor -double urfU = 0.4; -double urfV = 0.4; -double urfW = 0.4; -double urfP = 0.3; -double urfFlux = 0.4; - -// Tolerance for governing equations -double resU = 1e-6; -double resV = 1e-6; -double resW = 1e-5; -double resP = 1e-5; - -// Solver for solving linear system -// : CGS/GMRES/BiCGSTAB/AMG -string iterSolvU = "BiCGSTAB"; -string iterSolvV = "BiCGSTAB"; -string iterSolvW = "BiCGSTAB"; -string iterSolvP = "AMG"; - -// Max Iter for solving linear system -int maxSweepU = 30; -int maxSweepV = 30; -int maxSweepW = 30; -int maxSweepP = 30; - -// Tolerance for solving linear system -double iterSolvTolU = 1e-4; -double iterSolvTolV = 1e-4; -double iterSolvTolW = 1e-4; -double iterSolvTolP = 1e-3; - -// Gradient Calculation -// : GAUSS/LSQ -string UGradCalc = "GAUSS"; -string VGradCalc = "GAUSS"; -string WGradCalc = "GAUSS"; -string PGradCalc = "GAUSS"; - -// Convection scheme -// : UPWIND/CDS/QUICK/SUDS -string flowConvCalc = "UPWIND"; - -// Diffusion scheme(central difference) -// : NON_ORTHOGONAL -string flowDiffCalc = "NON_ORTHOGONAL"; - -// Transient scheme -// : CRANK_NICOLSON/IMPLICIT_2ND_ORDER/IMPLICIT_EULER -string flowTranCalc = "IMPLICIT_EULER"; - -// Source for flow -// : FLOW_DEFAULT/FLOW_GRAVITY -string flowSourceCalc[] = "FLOW_DEFAULT"; - -//string flowSourceCalc[] = "FLOW_DEFAULT FLOW_GRAVITY"; -int bodyForceFlag = 0; -double gravityX = 0.0; -double gravityY = -9.81; -double gravityZ = 0.0; - -######################################################################### -# Turbulence Parameter # -######################################################################### -int viscousType = 13; //SPALART_ALLMARAS = 11, KEPSILON = 13 - -//turb K-EPSILON -string TURB_K_EPSILON[] = ["TURB_K","TURB_EPSILON"]; -string TURB_K_EPSILON_SCALAR_NAME[] = ["kinetic", "epsilon"]; - -string TURB_K[] = ["TURB_K"]; -string TURB_K_SCALAR_NAME[] = ["kinetic"]; -string TURB_EPSILON[] = ["TURB_EPSILON"]; -string TURB_EPSILON_SCALAR_NAME[] = ["epsilon"]; -double urfMu = 0.6; - -string turbIterSolv = "BiCGSTAB"; -int turbMaxSweep = 30; -double turbIterSolvTol = 1e-12; - -// turb k -double kineticInitValue = 9.375001; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_K_DEFAULT"; -double kineticUrf = 0.6; -double kineticRes = 1e-6; - - -// turb epsilon -double epsilonInitValue = 54151.86; -string epsilonConvCalc = "UPWIND"; -string epsilonDiffCalc = "NON_ORTHOGONAL"; -string epsilonSourceCalc[] = "TURB_EPSILON_DEFAULT"; -double epsilonUrf = 0.6; -double epsilonRes = 1e-6; - -######################################################################### -# Energy Parameter # -######################################################################### -// energyType: The energy solver switch. 0-off, 1-on -// ENERGY[]: Solver binding for factory mode. -// ENERGY_SCALAR_NAME[]: The name of variable to be solved in energy equation. -// energyPrintName[]: The output on the screen during the solution. -int energyType = 0; -string ENERGY[] = ["ENERGY"]; -string ENERGY_SCALAR_NAME[] = "enthalpy"; -string energyPrintName[] = ["H"]; - -// Initial value of variables or constant -double initT = 273.0; -double initK = 0.026; -double initCPg = 1007.0; -double urfT = 0.8; -double urfH = 0.7; -double enthalpyInitValue = 0.21; - -// Discrete schemes -string energyConvCalc = "UPWIND"; -string energyDiffCalc = "NON_ORTHOGONAL"; -string energySourceCalc[] = ["EMPTY"]; -string energyGradCalc = "GAUSS"; -string energyTranCalc = "IMPLICIT_EULER"; - -// Set for solving linear equations -string enthalpyIterSolv = "BiCGSTAB"; -int enthalpyMaxSweep = 30; -double enthalpyIterSolvTol = 1e-12; -double enthalpyRes = 1e-6; \ No newline at end of file diff --git a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/grid_para.hypara b/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/grid_para.hypara deleted file mode 100644 index fc56698..0000000 --- a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/grid_para.hypara +++ /dev/null @@ -1,30 +0,0 @@ -######################################################################### -# Grid data type # -######################################################################### -// gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -// from_gtype: Type of grid data type in grid conversion process. -// -1 -- MULTI_TYPE. -// 1 -- PHengLEI, *.fts. -// 2 -- CGNS, *.cgns. -// 3 -- Plot3D type of structured grid, *.dat/*.grd. -// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. -// 5 -- Fluent, *.cas/*.msh. -// 6 -- Ustar, mgrid.in. -// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. -// 8 -- GMSH, *.msh. -int gridtype = 0; -int axisup = 1; -int from_gtype = 5; - -######################################################################### -# File path # -######################################################################### -// from_gfile: path of original data file for unstructure grid convert from. -// out_gfile: path of target file for grid convert to, *.fts type of file usually. -string from_gfile = "./grid/pipe.cas"; -string out_gfile = "./grid/pipe.fts"; diff --git a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/grid/网格地址.txt b/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/grid/网格地址.txt deleted file mode 100644 index 899f977..0000000 --- a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/grid/网格地址.txt +++ /dev/null @@ -1,5 +0,0 @@ -红山开源风雷算例库原始网格获取百度网盘链接: -链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA -提取码:w47m - -注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/boundary_condition_ref.hypara b/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/boundary_condition_ref.hypara deleted file mode 100644 index 5bd1dce..0000000 --- a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/boundary_condition_ref.hypara +++ /dev/null @@ -1,63 +0,0 @@ -# nBoundaryConditons : number of global boundary conditions. -# bcName : Boundary Condition Name. -# bcType(in PHengLEI): Boundary Condition Type. - -# Account of how to set boundaryconditon. -# string bcName = "Farfield"; -# { -# int bcType = 4; -# int inflowParaType = 1; -# double attackd = 0; -# double refReNumber = 6.5e6; -# double refMachNumber = 3.5; -# double angleSlide = 0; -# } - -int nBoundaryConditions = 5; -string bcName = "sym"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "symf"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "wall"; -{ - string bodyName = "body"; - int bcType = 2; - string flowType = "FLOW_SOLID_SURFACE"; -} -string bcName = "in"; -{ - int bcType = 5; - string flowType = "FLOW_VELOCITY_INLET"; - double flowU =0.1; -} -string bcName = "out"; -{ - int bcType = 6; - string flowType = "FLOW_PRESSURE_OUTLET"; - double flowU =0.1; - double flowP =0; -} - -# 'bcType' is defined as following: -# 99: PERIODIC -# -2: WAKE -# -1: INTERFACE -# 0 : NO_BOUNDARY_CONDITION -# 1 : EXTRAPOLATION -# 2 : SOLID_SURFACE -# 3 : SYMMETRY -# 4 : FARFIELD -# 5 : INFLOW -# 6 : OUTFLOW -# 52: PRESSURE_INLET -# 62: PRESSURE_OUTLET -# 61: OUTFLOW_CONFINED -# 7 : POLE diff --git a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para_incompressible.hypara b/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para_incompressible.hypara deleted file mode 100644 index 3be1cac..0000000 --- a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para_incompressible.hypara +++ /dev/null @@ -1,212 +0,0 @@ -######################################################################### -# General Control Parameter # -######################################################################### -// nIsComputeWallDist: Whether to compute the wall distance. -// 0 -- Compute wall distance. -// 1 -- Not compute. -// gridfile: The partitioned Grid file path, using relative path, -// which is relative to the working directory. -// maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. -// intervalStepRes: The step intervals for residual 'res.dat' saved. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. -// compressible: An indicator that distinguishes density base from pressure base. 0-incompressible, 1-compressible -// isUnsteady: An indicator that distinguishes unsteady problem from steady problem. 0-steady, 1-unsteady -// startTime: The initial time of the unsteady simulation. -// endTime: The end time of the unsteady simulation. -// dt: The time interval of the unsteady simulation. -// innerIter: The number of step for current time. -// OutputTimeStep: The interval step of output for unsteady simulation. - -int nIsComputeWallDist = 1; -string gridfile = "./grid/suboff.fts"; -iint maxSimuStep = 10000; -int intervalStepFlow = 2000; -int intervalStepPlot = 2000; -int intervalStepRes = 2000; - -double gridScaleFactor = 1.0; - -int compressible = 0; -int iunsteady = 0; -double startTime = 0.0; -double endTime = 5; -double dt = 0.1; -int innerIter = 10; -int OutputTimeStep = 5; - -######################################################################### -# Post-Processing # -######################################################################### -// nVisualVariables: Number of variables want to be dumped for tecplot visualization. -// visualVariables : Variable types dumped, listed as following: -// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(57) -// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! -// Variables order must from small to big. -// plotFieldType: If dump out the field results to visulization. - -int plotFieldType = 1; -int nVisualVariables = 4; -int visualVariables[] = [22, 23, 24, 25]; - -######################################################################### -# Flow Parameter # -######################################################################### -string FLOW[] = "FLOW"; - -// Initial value of variables or constant -double initRho = 998.3; -double initMu = 1.93345725; -double initU = 0.1; -double initV = 0; -double initW = 0; -double initP = 0; - -// Relaxing factor -double urfU = 0.4; -double urfV = 0.4; -double urfW = 0.4; -double urfP = 0.3; -double urfFlux = 0.4; - -// Tolerance for governing equations -double resU = 1e-6; -double resV = 1e-6; -double resW = 1e-5; -double resP = 1e-5; - -// Solver for solving linear system -// : CGS/GMRES/BiCGSTAB/AMG -string iterSolvU = "BiCGSTAB"; -string iterSolvV = "BiCGSTAB"; -string iterSolvW = "BiCGSTAB"; -string iterSolvP = "GMRES"; - -// Max Iter for solving linear system -int maxSweepU = 30; -int maxSweepV = 30; -int maxSweepW = 30; -int maxSweepP = 30; - -// Tolerance for solving linear system -double iterSolvTolU = 1e-4; -double iterSolvTolV = 1e-4; -double iterSolvTolW = 1e-4; -double iterSolvTolP = 1e-3; - -// Gradient Calculation -// : GAUSS/LSQ -string UGradCalc = "GAUSS"; -string VGradCalc = "GAUSS"; -string WGradCalc = "GAUSS"; -string PGradCalc = "GAUSS"; - -// Convection scheme -// : UPWIND/CDS/QUICK/SUDS -string flowConvCalc = "QUICK"; - -// Diffusion scheme(central difference) -// : NON_ORTHOGONAL -string flowDiffCalc = "NON_ORTHOGONAL"; - -// Transient scheme -// : CRANK_NICOLSON/IMPLICIT_2ND_ORDER/IMPLICIT_EULER -string flowTranCalc = "IMPLICIT_EULER"; - -// Source for flow -// : FLOW_DEFAULT/FLOW_GRAVITY -string flowSourceCalc[] = "FLOW_DEFAULT"; - -//string flowSourceCalc[] = "FLOW_DEFAULT FLOW_GRAVITY"; -int bodyForceFlag = 0; -//double gravityX = 0.0; -//double gravityY = -9.81; -//double gravityZ = 0.0; - -######################################################################### -# Turbulence Parameter # -######################################################################### -//int viscousType = 13; //SPALART_ALLMARAS = 11, KEPSILON = 13 - -//turb SA -//string TURB_SA[] = ["TURB_SA"]; -//string TURB_SA_SCALAR_NAME[] = ["kinetic"]; -//double urfMu = 1.0; - -//double kineticInitValue = 1.0; -//string kineticConvCalc = "UPWIND"; -//string kineticDiffCalc = "NON_ORTHOGONAL"; -//string kineticSourceCalc[] = "TURB_SA_DEFAULT"; -//double kineticUrf = 1.0 -//double kineticRes = 1e-6; - -//string turbIterSolv = "BiCGSTAB"; -//int turbMaxSweep = 30; -//double turbIterSolvTol = 1e-12; - - -//turb K-EPSILON -string TURB_K_EPSILON[] = ["TURB_K","TURB_EPSILON"]; -string TURB_K_EPSILON_SCALAR_NAME[] = ["kinetic", "epsilon"]; - -string TURB_K[] = ["TURB_K"]; -string TURB_K_SCALAR_NAME[] = ["kinetic"]; -string TURB_EPSILON[] = ["TURB_EPSILON"]; -string TURB_EPSILON_SCALAR_NAME[] = ["epsilon"]; -double urfMu = 0.4; - -// turb k -double kineticInitValue = 3.750003e-05; -string kineticConvCalc = "UPWIND"; -string kineticDiffCalc = "NON_ORTHOGONAL"; -string kineticSourceCalc[] = "TURB_K_DEFAULT"; -double kineticUrf = 0.4; -double kineticRes = 1e-6; - -// turb epsilon -double epsilonInitValue = 8.664311e-07; -string epsilonConvCalc = "UPWIND"; -string epsilonDiffCalc = "NON_ORTHOGONAL"; -string epsilonSourceCalc[] = "TURB_EPSILON_DEFAULT"; -double epsilonUrf = 0.4; -double epsilonRes = 1e-6; - -######################################################################### -# Energy Parameter # -######################################################################### -// energyType: The energy solver switch. 0-off, 1-on -// ENERGY[]: Solver binding for factory mode. -// ENERGY_SCALAR_NAME[]: The name of variable to be solved in energy equation. -// energyPrintName[]: The output on the screen during the solution. -int energyType = 0; -string ENERGY[] = ["ENERGY"]; -string ENERGY_SCALAR_NAME[] = "enthalpy"; -string energyPrintName[] = ["H"]; - -// Initial value of variables or constant -double initT = 273.0; -double initK = 0.026; -double initCPg = 1007.0; -double urfT = 0.8; -double urfH = 0.7; -double enthalpyInitValue = 0.21; - -// Discrete schemes -string energyConvCalc = "UPWIND"; -string energyDiffCalc = "NON_ORTHOGONAL"; -string energySourceCalc[] = ["EMPTY"]; -string energyGradCalc = "GAUSS"; -string energyTranCalc = "IMPLICIT_EULER"; - -// Set for solving linear equations -string enthalpyIterSolv = "BiCGSTAB"; -int enthalpyMaxSweep = 30; -double enthalpyIterSolvTol = 1e-12; -double enthalpyRes = 1e-6; \ No newline at end of file diff --git a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/grid_para.hypara b/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/grid_para.hypara deleted file mode 100644 index 43b3aa9..0000000 --- a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/grid_para.hypara +++ /dev/null @@ -1,30 +0,0 @@ -######################################################################### -# Grid data type # -######################################################################### -// gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -// from_gtype: Type of grid data type in grid conversion process. -// -1 -- MULTI_TYPE. -// 1 -- PHengLEI, *.fts. -// 2 -- CGNS, *.cgns. -// 3 -- Plot3D type of structured grid, *.dat/*.grd. -// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. -// 5 -- Fluent, *.cas/*.msh. -// 6 -- Ustar, mgrid.in. -// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. -// 8 -- GMSH, *.msh. -int gridtype = 0; -int axisup = 1; -int from_gtype = 5; - -######################################################################### -# File path # -######################################################################### -// from_gfile: path of original data file for unstructure grid convert from. -// out_gfile: path of target file for grid convert to, *.fts type of file usually. -string from_gfile = "./grid/suboff.cas"; -string out_gfile = "./grid/suboff.fts"; diff --git a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/grid/网格地址.txt b/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/grid/网格地址.txt deleted file mode 100644 index 899f977..0000000 --- a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/grid/网格地址.txt +++ /dev/null @@ -1,5 +0,0 @@ -红山开源风雷算例库原始网格获取百度网盘链接: -链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA -提取码:w47m - -注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para.hypara b/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/cfd_para.hypara similarity index 60% rename from H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para.hypara rename to L01_TwoD_Cavity_BGK_MPI_1CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/cfd_para.hypara +++ b/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/input.txt b/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/input.txt new file mode 100644 index 0000000..c49c94a --- /dev/null +++ b/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/input.txt @@ -0,0 +1,35 @@ +0 !MRT set 1, BGK set 0 +0 continue.plt !CONTI, resume :1 , new 0 //follows input datafile name //use ASCII文件 continue.plt +0 !LES yes: 1 , no: 0 +0 mesh_3d.dat !GEO read complex geo? yes:1, no:0 //follows input datafile name +0 ! MB multiblock LBM? yes:1, no:0 +1 2e-3 !CONV using converge criterion? yes:1, no:0 +201 !NX +201 ! NY +1 ! NZ +1 ! NX2 +1 ! NY2 +1 ! NZ2 +0 ! LowX +0 ! LowY +0 ! LowZ +1 ! x_np +1 ! y_np +1 ! z_np +500 ! framerate +50000 !total steps to terminate +1.0 ! density +0.6 ! tau +(0.0, 0.0, 0.0000000) ! Volumetric force vector (gx, gy, gz) +D2Q9 ! velocity set +Cavity ! boundary condition +! note: in the following, boundary types: periodic,velocity, pressure +! are allowed. if "velocity" is applied, please strictly follow the format "velocity (%lf, %lf, %lf)". +nonslip !xmin face +nonslip !xmax face +nonslip !ymin face +velocity (0.1, 0.0, 0.0) !ymax face, +periodic !zmin face +periodic !zmax face +-------------------! initial velocity field +(0.0, 0.00, 0.0) \ No newline at end of file diff --git a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/key.hypara b/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/key.hypara similarity index 91% rename from H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/key.hypara rename to L01_TwoD_Cavity_BGK_MPI_1CPU/bin/key.hypara index 9c32184..98d46f2 100644 --- a/H02_PBSolver_TwoD_Cavity_Boussinesq_Laminar_Unstruct_1CPU/bin/key.hypara +++ b/L01_TwoD_Cavity_BGK_MPI_1CPU/bin/key.hypara @@ -17,12 +17,12 @@ string defaultParaFile = "./bin/cfd_para.hypara"; int ndim = 2; int nparafile = 1; -int nsimutask = 0; -string parafilename = "./bin/cfd_para_incompressible.hypara" +//int nsimutask = 0; //string parafilename = "./bin/cfd_para_subsonic.hypara"; //string parafilename = "./bin/cfd_para_transonic.hypara"; //string parafilename = "./bin/cfd_para_supersonic.hypara"; //string parafilename = "./bin/cfd_para_hypersonic.hypara"; +//string parafilename = "./bin/cfd_para_incompressible.hypara"; //int nsimutask = 1; //string parafilename = "./bin/grid_para.hypara"; @@ -39,6 +39,9 @@ string parafilename = "./bin/cfd_para_incompressible.hypara" //int nsimutask = 1; //string parafilename = "./bin/grid_refine_para.hypara"; +int nsimutask = 13; +string parafilename = "./bin/cfd_para.hypara"; + //int nsimutask = 14; //string parafilename = "./bin/integrative_solver.hypara"; diff --git a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para.hypara b/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/cfd_para.hypara similarity index 60% rename from H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para.hypara rename to L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/cfd_para.hypara +++ b/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/input.txt b/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/input.txt new file mode 100644 index 0000000..4c52feb --- /dev/null +++ b/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/input.txt @@ -0,0 +1,35 @@ +0 !MRT set 1, BGK set 0 +1 continue.plt !CONTI, resume :1 , new 0 //follows input datafile name //use ASCII文件 continue.plt +1 !LES yes: 1 , no: 0 +0 mesh_3d.dat !GEO read complex geo? yes:1, no:0 //follows input datafile name +0 ! MB multiblock LBM? yes:1, no:0 +0 2e-3 !CONV using converge criterion? yes:1, no:0 +128 !NX +128 ! NY +256 ! NZ +1 ! NX2 +1 ! NY2 +1 ! NZ2 +0 ! LowX +0 ! LowY +0 ! LowZ +4 ! x_np +4 ! y_np +2 ! z_np +5000 ! framerate +20000 !total steps to terminate +1.0 ! density +0.506 ! tau +(9.2e-8,0.0,0.0) ! Volumetric force +D3Q19 ! velocity set +ChannelTurb ! boundary condition +! note: in the following, boundary types: periodic,velocity, pressure +! are allowed. if "velocity" is applied, please strictly follow the format "velocity (%lf, %lf, %lf)". +periodic !xmin face +periodic !xmax face +periodic !ymin face +periodic !ymax face, +nonslip !zmin face +nonslip !zmax face +-------------------! initial velocity field +(0.0, 0.00, 0.0) diff --git a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/key.hypara b/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/key.hypara similarity index 91% rename from H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/key.hypara rename to L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/key.hypara index 80060fd..1a572c7 100644 --- a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/key.hypara +++ b/L02_ThreeD_Channel_Turb_BGK_MPI_32CPU/bin/key.hypara @@ -17,12 +17,12 @@ string defaultParaFile = "./bin/cfd_para.hypara"; int ndim = 3; int nparafile = 1; -int nsimutask = 0; -string parafilename = "./bin/cfd_para_incompressible.hypara" +//int nsimutask = 0; //string parafilename = "./bin/cfd_para_subsonic.hypara"; //string parafilename = "./bin/cfd_para_transonic.hypara"; //string parafilename = "./bin/cfd_para_supersonic.hypara"; //string parafilename = "./bin/cfd_para_hypersonic.hypara"; +//string parafilename = "./bin/cfd_para_incompressible.hypara"; //int nsimutask = 1; //string parafilename = "./bin/grid_para.hypara"; @@ -39,6 +39,9 @@ string parafilename = "./bin/cfd_para_incompressible.hypara" //int nsimutask = 1; //string parafilename = "./bin/grid_refine_para.hypara"; +int nsimutask = 13; +string parafilename = "./bin/cfd_para.hypara"; + //int nsimutask = 14; //string parafilename = "./bin/integrative_solver.hypara"; diff --git a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para.hypara b/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/cfd_para.hypara similarity index 60% rename from H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para.hypara rename to L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/cfd_para.hypara +++ b/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/input.txt b/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/input.txt new file mode 100644 index 0000000..ec63d5b --- /dev/null +++ b/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/input.txt @@ -0,0 +1,35 @@ +1 !MRT set 1, BGK set 0 +0 continue.plt !CONTI, resume :1 , new 0 //follows input datafile name //use ASCII文件 continue.plt +0 !LES yes: 1 , no: 0 +0 mesh_3d.dat !GEO read complex geo? yes:1, no:0 //follows input datafile name +0 ! MB multiblock LBM? yes:1, no:0 +1 2e-3 !CONV using converge criterion? yes:1, no:0 +100 !NX +100 ! NY +100 ! NZ +1 ! NX2 +1 ! NY2 +1 ! NZ2 +0 ! LowX +0 ! LowY +0 ! LowZ +2 ! x_np +2 ! y_np +1 ! z_np +500 ! framerate +50000 !total steps to terminate +1.0 ! density +0.6 ! tau +(2.2e-7,0.0,0.0) ! Volumetric force +D3Q19 ! velocity set +Poiseuille ! boundary condition +! note: in the following, boundary types: periodic,velocity, pressure +! are allowed. if "velocity" is applied, please strictly follow the format "velocity (%lf, %lf, %lf)". +periodic !xmin face +periodic !xmax face +periodic !ymin face +periodic !ymax face, +nonslip !zmin face +nonslip !zmax face +-------------------! initial velocity field +(0.0, 0.00, 0.0) \ No newline at end of file diff --git a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/key.hypara b/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/key.hypara similarity index 91% rename from H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/key.hypara rename to L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/key.hypara index 80060fd..1a572c7 100644 --- a/H05_PBSolver_ThreeD_Suboff_Laminar_Re225_1CPU/bin/key.hypara +++ b/L03_ThreeD_Poiseuille_MRT_MPI_4CPU/bin/key.hypara @@ -17,12 +17,12 @@ string defaultParaFile = "./bin/cfd_para.hypara"; int ndim = 3; int nparafile = 1; -int nsimutask = 0; -string parafilename = "./bin/cfd_para_incompressible.hypara" +//int nsimutask = 0; //string parafilename = "./bin/cfd_para_subsonic.hypara"; //string parafilename = "./bin/cfd_para_transonic.hypara"; //string parafilename = "./bin/cfd_para_supersonic.hypara"; //string parafilename = "./bin/cfd_para_hypersonic.hypara"; +//string parafilename = "./bin/cfd_para_incompressible.hypara"; //int nsimutask = 1; //string parafilename = "./bin/grid_para.hypara"; @@ -39,6 +39,9 @@ string parafilename = "./bin/cfd_para_incompressible.hypara" //int nsimutask = 1; //string parafilename = "./bin/grid_refine_para.hypara"; +int nsimutask = 13; +string parafilename = "./bin/cfd_para.hypara"; + //int nsimutask = 14; //string parafilename = "./bin/integrative_solver.hypara"; diff --git a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para.hypara b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/cfd_para.hypara similarity index 60% rename from H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para.hypara rename to L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/H04_PBSolver_ThreeD_Pipe_Turb_Unstruct_1CPU/bin/cfd_para.hypara +++ b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/input.txt b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/input.txt new file mode 100644 index 0000000..b6ed269 --- /dev/null +++ b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/input.txt @@ -0,0 +1,35 @@ +0 !MRT set 1, BGK set 0 +0 continue.plt !CONTI, resume :1 , new 0 //follows input datafile name //use ASCII文件 continue.plt +0 !LES yes: 1 , no: 0 +1 mesh_3d.dat !GEO read complex geo? yes:1, no:0 //follows input datafile name +0 ! MB multiblock LBM? yes:1, no:0 +0 2e-3 !CONV using converge criterion? yes:1, no:0 +100 !NX +300 ! NY +100 ! NZ +1 ! NX2 +1 ! NY2 +1 ! NZ2 +0 ! LowX +0 ! LowY +0 ! LowZ +2 ! x_np +2 ! y_np +2 ! z_np +400 ! framerate +2000 !total steps to terminate +1.0 ! density +0.56 ! tau +(0.0,0.0,0.0) ! Volumetric force +D3Q19 ! velocity set +3Dspoiler ! boundary condition +! note: in the following, boundary types: periodic,velocity, pressure +! are allowed. if "velocity" is applied, please strictly follow the format "velocity (%lf, %lf, %lf)". +velocity (0.00, 0.1, 0.0) !xmin face +velocity (0.00, 0.1, 0.0) !xmax face +velocity (0.00, 0.1, 0.0) !ymin face +pressure 1.0 !ymax face, +velocity (0.00, 0.1, 0.0) !zmin face +velocity (0.00, 0.1, 0.0) !zmax face +-------------------! initial velocity field +(0.0, 0.1, 0.0) \ No newline at end of file diff --git a/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/key.hypara b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/key.hypara new file mode 100644 index 0000000..1a572c7 --- /dev/null +++ b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/bin/key.hypara @@ -0,0 +1,55 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 3; +int nparafile = 1; + +//int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +//string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +int nsimutask = 13; +string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/L04_ThreeD_Spoiler_BGK_MPI_8CPU/mesh_3d.dat b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/mesh_3d.dat new file mode 100644 index 0000000..d1ce06f --- /dev/null +++ b/L04_ThreeD_Spoiler_BGK_MPI_8CPU/mesh_3d.dat @@ -0,0 +1,1937 @@ + TITLE = "3D FE-SURFACE ZONES" + VARIABLES = "X", "Y", "Z" +ZONE T="TRIANGLES", N= 646 ,E= 1288, DATAPACKING=POINT, ZONETYPE=FETRIANGLE + 46.173165675999996 50.000000000000000 40.761204675000002 + 46.232179848000001 51.510759295000000 40.861010030999999 + 44.932443067999998 50.710878776000001 41.408462413000002 + 48.251382738000004 50.150051954999995 59.844786542999998 + 47.146359803999999 51.867895842999999 59.400409711999998 + 45.041987949000003 52.249442897000002 41.612025086000003 + 46.385309511999999 53.022693801000003 41.179720250000003 + 47.621705492000004 52.249116819999998 40.550915982999996 + 47.528806834000001 50.717467016000001 40.336747678999998 + 44.942039102000003 49.162758787000001 41.414194346999999 + 46.243516908000004 48.390864151000002 40.873143114999998 + 47.530868276000000 49.179877235999996 40.344390895000004 + 48.912146120999999 51.453944105000005 40.166250945000002 + 48.872004980000000 49.921942833999999 40.064128910000001 + 43.836236573000001 51.447597971999997 42.259684727000000 + 43.786089756999999 49.895405232000002 42.165692153999998 + 45.268188721000001 53.745803288000005 42.026360947000001 + 44.006812721000003 52.965755353999995 42.564544302999998 + 47.802943772999996 53.734695966000004 40.987509224999997 + 46.643240734000003 54.467160972999999 41.706831723000001 + 49.050218567999998 52.954220085000003 40.493660067000000 + 44.293378269999998 54.405286739000005 43.069782314000001 + 45.582099483999997 55.148070955000001 42.652924358999996 + 48.077967710999999 55.119129537999996 41.627407531000003 + 46.969467975000001 55.806622716000000 42.443611426000004 + 42.875066826999998 52.137828916000004 43.316811029999997 + 43.113368432999998 53.612446777999999 43.713145943000001 + 42.761545788999996 50.612052280000000 43.127578837000001 + 43.868053160999999 48.334212706999999 42.278317498999996 + 42.780605881000000 49.082324853000003 43.141558422000003 + 45.079228020999999 47.590585521999998 41.634551715000001 + 47.641171378999999 47.625966477999995 40.576630518999998 + 46.430018274999995 46.836842951999998 41.210820972999997 + 48.926948306000000 48.389856999999999 40.188985803000001 + 50.258695795000001 50.640356839999995 40.023877526999996 + 50.276109547000004 49.151253355999998 40.039910008000000 + 50.341653159000003 52.135211495000000 40.236591527999998 + 49.283526664999997 54.373901231000005 41.035868475999997 + 50.371354534000005 47.664714115999999 40.283594510000000 + 49.075116710000003 46.891486486000005 40.540521439999999 + 47.848161055999995 46.124376713000004 41.036232193000004 + 45.358766848999998 46.064229557000004 42.064720178000002 + 46.734326359999997 45.364782101999999 41.762880921000004 + 44.092781764000001 46.790376146000000 42.597089260000004 + 42.946606267999996 47.542368897999999 43.350963512000000 + 44.672717046999999 55.750548515999995 43.791034861000000 + 46.001191366000000 56.428406273999997 43.466614792000001 + 43.465012932000000 54.992644459000005 44.310760565999999 + 48.429725148000003 56.371402031999999 42.454175126000003 + 47.395653271000000 56.992442097000001 43.342438012000002 + 42.099967704000001 52.780950337999997 44.535953427000003 + 42.397712317000000 54.168969828000002 45.017539507999999 + 41.922462447000001 51.306177816999998 44.251323057999997 + 41.876772629999998 49.788470525999998 44.171755634999997 + 51.602575763000004 49.868554720999995 40.130122946000000 + 51.621271743999998 51.323779584999997 40.221498808999996 + 41.976429273999997 48.271540470000005 44.287317578000000 + 50.517009815000002 53.579500057000004 40.676916808999998 + 51.752835144000002 52.739915823000004 40.543762362999999 + 49.570068501000002 55.683733309000004 41.783532719000000 + 51.675815495999998 48.418026472999998 40.269172585000000 + 41.155555382000003 50.466813809000001 45.356953126999997 + 41.182906639999999 48.982334621000000 45.393133184999996 + 41.265921972000001 51.932646501000001 45.530015827000000 + 41.507205122000002 53.335304781000005 45.907546312000001 + 52.892749972000004 50.545322014000000 40.443085146999998 + 52.957850205000000 49.167547278000001 40.483795682000000 + 49.313048086999999 45.475712594000001 41.108491661999999 + 50.536677496999999 46.238551705999996 40.749946811000001 + 48.164971784000002 44.732662202000000 41.700131087000003 + 45.749939495999996 44.640915976999999 42.704987721000002 + 47.129222435000003 44.024597614999998 42.513131328000000 + 44.458667931999997 45.318030161999999 43.117210061000002 + 43.266874080999997 46.045570134000002 43.752800643000000 + 46.510680770000000 57.542715717999997 44.438337396999998 + 45.184816136000002 56.958613090000000 44.671612981999999 + 43.943354298000003 56.257800740999997 45.085025664000000 + 42.824542680000000 55.468933871000004 45.686813872999998 + 48.816350561999997 57.445848940000005 43.430501726000003 + 49.917495701999997 56.841335982000004 42.706899491999998 + 42.231499708000001 46.785436666999999 44.585483789000001 + 41.364566240999999 47.532748495999996 45.602051181999997 + 41.879712226000002 54.638581916999996 46.458180655000000 + 51.805873771000002 47.006799149000003 40.630924880999999 + 53.072453484000000 47.781106952999998 40.745998528999998 + 50.776157499999997 54.922660090999997 41.330225079999998 + 51.992977678999999 54.095033399000002 41.097262137999998 + 51.086984024000003 56.143876053000000 42.185190163999998 + 52.946469660000005 51.919394698000005 40.638683825000001 + 47.880024216999999 57.986144119000002 44.367309276000000 + 40.604608810000002 49.687391195000004 46.589882680999999 + 40.707711936999999 48.262748481000003 46.738813143000002 + 40.649506618000004 51.110040122000001 46.633089777999999 + 40.817873333000001 52.479852309000002 46.911491882000000 + 43.716343924000000 44.651947081000003 44.350752589999999 + 42.641979073999998 45.372608000000000 45.055632361999997 + 44.930298945000004 43.970091648999997 43.840589598000001 + 46.259431698000000 43.358640417000004 43.526941088000001 + 48.571011510000005 43.487473401000003 42.547148921000002 + 47.646452374999996 42.842587155000004 43.424876050999998 + 49.619103539000001 44.190275679999999 41.869685048000001 + 50.769780501000000 44.929541884999999 41.415252334000002 + 54.137289721000002 49.880133764999997 40.896788158000000 + 54.261036924999999 48.553012060000000 41.069726195999998 + 44.528638973000000 57.361940396000001 46.016779931000002 + 45.805817005000002 57.992697878000001 45.695861336000000 + 43.380345487000000 56.628241506999998 46.500487370000002 + 50.247224736000000 57.816144508999997 43.767282700000003 + 51.383908083999998 57.206594555999999 43.206636082000003 + 52.280563596999997 55.343006047999999 41.860508858000003 + 52.573798619000002 56.473117000000002 42.825439598000003 + 41.712990259000001 46.123276957000002 45.963109117000002 + 51.986370894000004 45.689413485000003 41.198115283000000 + 53.213629554999997 46.456188206999997 41.218543226999998 + 54.396910168000005 47.233774576999998 41.455108082000002 + 42.386665117000000 55.817198822000002 47.136902059000001 + 41.120894487000001 53.780449726000001 47.378991577000001 + 53.149709368000003 53.236053585000001 41.077708360999999 + 40.982520987000001 46.867032178000002 47.021815169999996 + 47.148134888000001 58.463882058999999 45.502271030999999 + 54.059790566000004 51.157842388999995 40.934819275999999 + 49.220261203999996 58.300461427000002 44.477831268000003 + 55.347938577999997 49.356908645000004 41.574681816999998 + 55.497482783999999 48.062733279000000 41.874442744999996 + 40.242114174000001 50.342920511000003 47.839891268999999 + 40.260085715999999 48.997840889999999 47.967822136999999 + 40.347615552000001 51.654021608000001 47.976219628999999 + 51.627766010999999 58.108373211000000 44.378197647000000 + 52.814015499999996 57.445057591000001 43.945874610000004 + 43.171443338000003 44.082005750999997 45.716525011000002 + 44.305360577999998 43.381618584999998 45.124745208000000 + 45.556207940999997 42.762906286000003 44.720114897000002 + 46.879089319999999 42.254910907999999 44.497863006999999 + 49.052336908000001 42.412414878999996 43.555584844000002 + 48.236138232999998 41.871792189000004 44.448330931000001 + 50.010902642000005 43.058386259000002 42.801814131000000 + 51.067173056000001 43.757229697000000 42.261204188999997 + 44.055185573999999 57.622460583999995 47.439282116000001 + 43.007529335999997 56.854837356000004 47.971069534999998 + 45.242206510000003 58.290105912000001 47.061029929000000 + 41.570651097999999 54.981888832999999 47.968532367999998 + 52.187306434000000 44.493919683999998 41.944022709000002 + 40.568396907999997 52.913698029999999 48.401492286000000 + 53.429974591000004 54.467142815000003 41.736834180000002 + 53.732260902999997 55.615271910000004 42.614950919000002 + 53.978526260999999 56.643525294000000 43.672686157999998 + 53.341707997000000 45.234128591000001 41.868612826000003 + 54.522332986999999 45.988982616999998 42.033806183999999 + 55.638063372000005 46.796574491000001 42.387490137000000 + 46.564741788999996 58.831946844000001 46.806926877999999 + 42.149968229000002 56.035141750999998 48.602121162000003 + 40.453978208999999 47.631251054000003 48.193761811000002 + 55.200178988000005 50.584722599999999 41.478483822000001 + 48.453812176000000 58.768404496999999 45.447595602999996 + 54.188368290000000 52.382237574000001 41.237436721000002 + 50.522527695000001 58.600923848999997 44.925448418000002 + 42.206393535000004 44.818462789000002 46.477022509000001 + 41.417326920000001 45.565641450000001 47.416555196000004 + 40.094600313000001 50.915489037000000 48.977778463999996 + 40.215969426000001 51.976587339999995 49.395146131000004 + 40.033067627999998 49.794167376000004 49.213938919000000 + 50.438222139000004 42.108634330000001 43.873474946999998 + 49.606358485000001 41.530402324999997 44.698022860999998 + 51.395562968000000 42.761224268999996 43.243334408999999 + 56.429902665000000 48.924973600000001 42.417080380000002 + 56.294581801999996 50.200399263999998 42.232240986999997 + 52.961316783000001 58.268038148000002 45.217725637000001 + 51.744355571000000 58.848667008999996 45.680472733000002 + 44.826114736000001 58.422718398000001 48.487146385999999 + 46.092546518999995 59.026732475000003 48.197249843000002 + 43.720065325999997 57.706488438000001 48.917199718999996 + 43.849013130000003 42.921570031999998 46.527077640000002 + 42.829765682000001 43.636949448999999 47.154068252999998 + 45.025316122999996 42.274267506000001 46.054676469000000 + 46.309181730999995 41.744209187999999 45.731536742000003 + 47.635531630999999 41.367561667000004 45.540145994000000 + 40.829830602999998 46.292399594000003 48.529730481000001 + 48.841396740999997 41.169881316000001 45.451742914999997 + 54.506560335000003 53.542484467999998 41.805995011999997 + 40.141079820000002 48.435085944999997 49.406083445000000 + 47.925987253000002 59.187204562000005 46.639383469999999 + 54.822393898000001 54.665121784999997 42.585072095999998 + 55.097895151000003 55.708582729000000 43.563887178000002 + 52.440749515000000 43.442902449000002 42.855266729000000 + 53.471199452000000 44.157381470000004 42.664157642999996 + 54.568084868000000 44.850970216000000 42.746029161999999 + 55.682234248000000 45.579574039000001 43.059391362000000 + 40.950394971999998 54.122169233999998 48.945310641999995 + 41.497448214000002 55.238743642999999 49.487966623999995 + 40.527571162000001 53.204805833999998 49.951922155999995 + 47.470142374999995 59.462251898000005 47.983664359000002 + 41.986455874000001 44.390538378000002 47.922248607000000 + 56.626043254999999 47.699007461999997 42.872519089999997 + 42.798215745999997 56.915726378999999 49.445895129999997 + 54.154502237999999 57.525014075000001 44.889787251999998 + 55.022629930999997 51.631860091000000 41.508226262000001 + 56.060654846999995 51.416105432999998 42.172924670000000 + 49.597308931000001 58.904807535000003 45.467644909000001 + 50.549984019999997 59.222190495000000 46.172635364000001 + 40.044526078000004 50.836946142000002 50.433659007000003 + 51.755466976999998 41.960340627999997 44.318256175999998 + 50.902722468000000 41.350245874999999 45.063721470000004 + 44.511025559000004 58.358184284000004 49.890843898000000 + 45.692661810000004 59.016503103000005 49.613335397000000 + 57.138067012999997 49.760768542999998 43.000659486000004 + 57.432755317000002 48.680706826000005 43.441523505999996 + 52.981398943999999 58.919798732000004 46.601698819999996 + 54.221541770999998 58.236129168000005 46.212552125000002 + 44.646538194999998 41.943302863000000 47.464240165000000 + 43.549735576000003 42.623825615000001 48.003467931000003 + 45.890081070000001 41.364323855999999 47.078756440999996 + 47.229582573999998 40.938636764000002 46.803676551999999 + 42.115103102999996 56.149578374000001 49.894706378999999 + 50.092559585000004 40.776149305000004 46.138392680999999 + 55.422880296000002 52.546307634000001 41.993209960999998 + 55.797711281000005 53.608260975999997 42.694728162000004 + 56.738963572999999 46.453217449999997 43.518742136000000 + 49.256704775999999 59.336253076999995 46.495447149000000 + 47.028165536000003 59.528753339000005 49.390853288999999 + 48.891953139000002 59.686561490999999 47.776768425000000 + 48.621172649999998 40.707694906000000 46.571895396000002 + 56.100303237999995 54.668977787000003 43.597895125000001 + 57.638505354999999 47.476167525999998 44.060007947000003 + 40.443467222999999 47.073561491999996 49.670395783000004 + 41.032551749000000 54.388615537999996 50.570022393000002 + 57.242891161000003 51.042992365000003 43.184378637999998 + 51.679851409000001 59.416321963000001 47.082641616000004 + 41.363769642000001 45.070332074999996 48.944585696000004 + 42.645067323999996 43.365956171000001 48.623617851999995 + 55.278989754000001 56.633554382000000 44.696395240999998 + 55.370292304000003 57.401171777000002 45.952455448000002 + 40.270798159000002 52.202942243999999 50.699769246999999 + 52.705882963999997 42.584991178999999 43.860306069000004 + 53.708346796000001 43.245068943999996 43.626690775000000 + 54.508892391000003 43.904365356000000 43.479790823999998 + 55.560408596999999 44.401283991000000 43.857017395000000 + 40.043667923999998 49.329361742000003 50.649381176999995 + 43.516016446000002 57.601410792999999 50.420132393999999 + 57.956279772000002 49.846367547000000 43.944093027000001 + 44.389262170999999 41.790424193999996 48.940525553000001 + 45.559542207000000 41.166249995000001 48.500935143000000 + 46.856620884999998 40.680436720000003 48.193094357000000 + 54.181182571000001 58.774181893000005 47.648097702000001 + 52.882382526000001 59.381087182000002 48.079824419000005 + 52.096601257000003 41.411433088000003 45.326587801999999 + 53.044051503999995 41.904001321999999 44.981179834999999 + 45.344276172000001 58.793357956000001 51.000545598000002 + 46.606369295999997 59.370243862999999 50.825712170000003 + 40.933263232000002 45.782307645000003 50.073181805000004 + 41.960708650000001 44.102781999999998 49.230185438999996 + 53.842847997000000 42.533028592000001 44.570740634000003 + 56.677448616999996 45.221923021999999 44.291965279999999 + 57.676704379000000 46.235227393999999 44.813990253000000 + 41.776950581000001 55.604170174000004 50.987286644000001 + 42.643350761999997 56.705515855000002 50.956958259000004 + 51.645786940999997 40.882076760000004 46.237705336000005 + 44.310081953000001 58.142562357000003 51.150439429999999 + 58.320235762999999 48.613095987999998 44.628764191000002 + 55.011123104999996 43.198774821000001 44.649113970999998 + 48.470334829999999 59.847925762000003 49.176299419000003 + 48.007300204000003 59.779728270999996 50.621339247999998 + 48.263384005999995 40.371458834999999 47.932305650000004 + 40.254494899000001 47.925847091000001 50.850305848000005 + 40.695450553000001 53.250581811000004 51.690880683000003 + 55.363958307000004 58.003057428000005 47.320630096999999 + 56.310385220000001 55.621419618000004 44.654096909000003 + 56.429450399000004 56.437666770999996 45.850468206999999 + 56.605530780999999 52.415068165999998 42.891244212000004 + 56.960910079000001 53.513581289000001 43.738971538000001 + 50.319384083999999 59.676674179000003 47.498006668000002 + 51.474705834000005 59.787013673000004 48.571852222000004 + 43.388297546000004 42.514060053999998 49.503921603999999 + 53.058997062000003 41.294172160999999 46.146287684000001 + 40.188037940000001 50.160530710000003 51.923442340000001 + 40.316016142999999 51.639659221999999 51.879354753000001 + 46.196404908000005 58.980348231999997 52.210432085999997 + 44.896401060000002 58.295167227999997 52.267923836000001 + 54.057299584999996 59.099573922000005 49.142052144000004 + 55.285387131000000 58.398672103999999 48.764285732000005 + 58.269337508999996 51.037648563000005 44.473577773999999 + 57.668237843000000 52.260313711999999 43.992578731000002 + 45.319316782000001 41.163585077000000 49.905258625999998 + 44.258426540000002 41.824892964000000 50.449398654999996 + 46.548691102999996 40.622363636999999 49.614768722000001 + 42.514380426000002 43.370184672999997 50.105111022000003 + 47.899972778999995 40.242981721999996 49.375116009999999 + 43.346149029999999 42.603692156999998 51.010394759000000 + 56.434141761999996 57.093870291000002 47.122705422999999 + 43.580809164999998 57.391535871999999 52.039408361000000 + 56.363144642000002 57.562479353000001 48.477076397000005 + 54.430205078000000 42.065975508000001 45.825729006000003 + 41.668239297000000 44.494361595000001 50.519335472000002 + 58.489278399000000 47.384743853000003 45.407333285000000 + 41.453671506999996 54.743134163000001 52.112568957000001 + 49.997336558000001 59.944848864999997 48.951203566000004 + 49.510426062999997 59.979807950000001 50.404661153999996 + 47.563784034999998 59.480035753999999 52.047870572999997 + 57.208157455999995 54.510735314000001 44.737326439000000 + 57.366076790999998 55.358925814000003 45.874127143999999 + 40.651905993000000 46.630543111999998 51.122452097999997 + 40.287584187000000 48.748553532999999 52.025551977999996 + 52.699950595000004 59.621104248999998 49.619710886999997 + 58.773372985999998 49.826086513999996 45.204410303000003 + 56.372267894000004 44.014898703000000 45.144820873000000 + 57.504969269000000 44.999971197999997 45.678524760000002 + 49.730187510999997 40.281814218999997 47.658191650999996 + 51.188337257000001 40.397598545999998 47.473789225000004 + 52.657213464000002 40.727279957999997 47.362599834000001 + 45.157193168999996 41.330137526000001 51.175034756999999 + 46.240707033999996 40.789659026000002 51.018496706000001 + 40.577499525000000 50.887383720000003 53.229401636999995 + 40.575705233000001 49.449097703999996 53.298359411999996 + 58.521394035000000 52.125315764999996 45.217858575999998 + 57.945126232000000 53.318591064000003 44.914538121999996 + 45.802347902000001 58.365806864000000 53.520368216999998 + 47.173185376999996 58.954066752000003 53.440030187000005 + 55.109830716000005 58.592785055000000 50.231678772999999 + 53.878288454000000 59.194620665000002 50.646397320999995 + 57.390485686000005 56.067712548000003 47.073639502999995 + 57.302988177000003 56.616677893000002 48.301195317999998 + 47.550640775000005 40.340255088999996 50.830642905000005 + 56.241891035999998 57.812054971999999 49.897075700000002 + 58.431739077000003 46.142727856999997 46.254705919000003 + 41.239378344999999 45.442039569000002 51.573691496999999 + 44.406837123999999 41.978742406000002 52.091878500999997 + 58.149677194999995 54.195438297999999 46.002368313000005 + 40.594714390000000 47.442860146000001 52.236434294999995 + 40.707053932999997 48.194263781000004 53.221873696000003 + 59.012860297000003 50.989641478999999 45.782304064000002 + 58.732447979000000 53.018265057000001 46.174502864000004 + 59.062778326000000 48.609977475000001 46.008272757000000 + 49.349629078999996 40.057960745000003 49.143919914999998 + 50.817561361000003 40.091975536999996 48.921739979999998 + 52.254345606000001 40.342880991999998 48.712374920000002 + 42.504821843000002 43.564961159999996 51.553248054000001 + 51.186979640000004 59.926302050000004 50.244145357999997 + 52.605097774000001 59.588856586999995 51.125741951999998 + 48.962331096000000 59.775818477000001 51.832107077000003 + 48.558188713999996 59.346885467999996 53.249140233999995 + 55.889310576000000 42.907876877000000 46.124718004000002 + 57.131979639000001 43.858728726999999 46.620702206000004 + 42.481354784000004 56.103976967000001 52.492275929000002 + 40.810306918000002 52.366375660000003 53.154331513000002 + 41.303456417999996 53.737297439999999 53.225327515000004 + 54.054141756999996 41.289973588000002 47.225225322000000 + 44.517874216999999 57.623518731000004 53.439223612999996 + 45.797491712999999 41.227359372999999 52.319418145000000 + 54.852206991999999 58.581707601000005 51.676419385000003 + 56.013919916999996 57.879845299999999 51.319395802000003 + 41.076439926999996 50.135207115000000 54.511296340000001 + 41.216031524000002 48.508063687000003 54.540487182000000 + 46.810168179000001 58.208619106000000 54.737461908000000 + 45.454717047000003 57.549445832000004 54.727184206000004 + 41.913209932999997 44.487123873000002 52.052321425000002 + 41.022186681999997 46.316829185000003 52.415185455000000 + 58.231445678000000 54.929739830000003 47.182027810000001 + 58.151714847999997 55.556754497000000 48.365367167999999 + 59.092352708999996 51.959477735000000 46.327185110000002 + 41.214247817000000 46.960294484999999 53.683849746999996 + 41.158567576999999 51.576859791000004 54.398020680000002 + 41.511422604000003 52.907105555000001 54.415064108999999 + 47.147993718999999 40.678961309999998 52.232554121999996 + 57.211933564999995 56.916968183999998 49.621099759000003 + 57.078372397999999 56.991018621999999 51.011089920000003 + 43.487710641000000 56.815181804000005 53.338170798999997 + 48.981641789999998 40.071560629000004 50.623729276999995 + 48.242696828999996 58.704006186000001 54.599147950999999 + 55.377684076999998 42.016695458999997 47.289398117000005 + 50.457481827999999 40.018888289000003 50.410023633000002 + 51.921557906000004 40.187966842000002 50.177821621000000 + 53.592150837999995 40.787861313000001 48.505693078999997 + 43.352294974000003 42.895427480000002 52.309343455000004 + 58.900978206000005 53.702780830999998 47.342557415999998 + 56.626377868999995 42.885587154999996 47.659861927000001 + 59.134438321000005 47.394708649999998 46.873581356999999 + 58.161420344000000 44.957134111000002 47.178524926000001 + 50.381357494000000 59.856120019000002 51.646652551999999 + 51.584375989999998 59.731853279999996 51.667568424999999 + 49.899929573000001 59.544164193000000 52.983105053999999 + 44.206380397000004 56.755488428000000 54.560410945000001 + 53.644795052999996 59.062978611999995 52.139599891000003 + 59.403909025000004 49.880453101000001 46.601146725999996 + 42.092848494999998 54.962143869000002 53.585259168000000 + 45.331875949999997 41.905850868000002 53.562775279000000 + 44.038469430999996 42.778200265999999 53.507956938999996 + 41.806463246000000 49.559137828000004 55.715907276999999 + 41.768755624000001 50.971507275999997 55.594889598999998 + 46.483800520999999 57.265469346000003 55.903329264999996 + 47.928555888000005 57.849613716000000 55.838894056000001 + 55.651542496000005 57.813158498000000 52.648513111000000 + 54.511251770000001 58.382198271999997 53.063879827999997 + 57.926021559999995 56.062906808999998 49.352432813999997 + 59.511636863000000 51.145431240999997 47.133512347999996 + 41.850952016000001 52.183513159000000 55.368918628000003 + 43.062190252000001 55.900566214000001 54.129178398999997 + 59.345435159000004 52.426980182999998 47.397576344000001 + 52.441786528000002 59.340978389000000 52.604573150999997 + 53.301403261000004 58.710984732000000 53.635860489999999 + 41.749273451999997 45.344276874999998 53.201523640000005 + 41.977063135999998 53.981404682000004 54.447572465000000 + 51.190656055000005 59.516948831000001 52.830198421999995 + 56.730135331000000 56.996413954000005 52.399056107999996 + 57.990167327999998 55.979617001000001 50.633566568999996 + 48.590030248000005 40.320474216999997 52.078164071000003 + 42.770674354000001 43.881924640000001 53.210296653000000 + 58.889021862999996 54.364763625999998 48.609270406000000 + 53.277315013999996 40.552788114000002 49.903077996000000 + 57.711088173999997 43.898542218000003 48.180293399999996 + 49.656441900000004 59.002884840999997 54.339358521000001 + 49.435648737000001 58.253449619000001 55.618013619999999 + 59.600921067000002 48.703095016999995 47.522026608000004 + 50.079386271000004 40.177503268999999 51.874101327999995 + 51.562459590000003 40.260907498000002 51.645842418000001 + 46.734817378999999 41.248790740000004 53.571402937000002 + 54.841822135000001 41.383095972999996 48.481539132999998 + 56.023996769999997 42.115732106999999 48.755097309000000 + 45.131897090999999 56.527638498999998 55.804438791999999 + 58.977059130000001 46.183486271000000 47.798493170000000 + 55.206642105000000 57.661815140000002 53.766625379000004 + 56.163316383000002 56.953393069000001 53.696465336999999 + 42.038906177000001 48.295584949000002 55.806544107999997 + 41.926527284000002 47.175421573000001 55.180810266000002 + 45.011510784999999 42.795121125999998 54.817125259999997 + 46.369778292999996 42.034495849999999 54.834483839000001 + 42.607802655000000 50.463248284999999 56.718691794999998 + 42.724054727000002 48.969248176000001 56.782195150000000 + 47.622043871999999 56.797319880000003 56.938426847000002 + 46.215349682999999 56.138278577000001 56.928055866000001 + 59.458168755000003 52.999273647999999 48.756054109000004 + 58.613956622000003 55.075909522000003 49.813201051000000 + 42.503472062000000 53.361041145000002 55.701356969999999 + 57.755551824999998 55.963775044999998 52.069976596000004 + 57.174350142999998 56.015392974000001 53.513366959999999 + 42.801535416000000 54.771324004999997 55.041485383000001 + 43.886208318999998 55.674357026999999 55.515725121000003 + 50.769709417000001 59.163381446000002 53.929374999000004 + 57.115887420999996 43.019323677999999 49.203567772000000 + 51.033484923000003 58.486817156000001 55.187084294000002 + 42.593123863999999 51.935924851999999 56.433535642999999 + 54.223082289000004 57.906052164999998 54.433950287000002 + 59.816468057000002 50.086133472000000 48.094865905999995 + 41.981883154000002 46.034124442000000 54.470082024000000 + 51.988344075000001 58.955402589000002 53.980860749000001 + 54.332455105000001 40.998226754000001 49.555127905999996 + 53.024829023999999 40.566477851999998 51.363476899999995 + 55.337924740999995 41.545936431999998 49.811934444000002 + 49.072505719999995 57.286755901999996 56.785495028000000 + 48.181442840000003 40.796479243999997 53.462377152999998 + 47.801717320000002 41.490765074000002 54.770793879999999 + 44.875576504000001 55.325280708000001 56.736591810000000 + 59.558597063999997 47.507606637999999 48.443980236000002 + 58.600497746000002 45.052328885000001 48.754211472999998 + 43.763744553000002 43.746373788000000 54.690551909000000 + 49.673411091999995 40.558533066000003 53.279030622000001 + 51.162712631000005 40.552198279000002 53.063844313000004 + 42.901870170999999 47.398624583000000 56.545945224000000 + 55.293080509999996 56.994541177999999 54.802050856999998 + 43.637024107000002 49.877385595999996 57.713462484000004 + 43.606115043999999 51.451807780999999 57.550529077000000 + 47.398375995999999 55.561488122000000 57.893123742000000 + 48.790900358000002 56.178199618999997 57.769680014999999 + 46.115395294999999 42.996605717999998 55.988515242999995 + 44.827442595000001 43.828645897000001 55.929505749000000 + 52.649578887000004 40.776412233999999 52.811611716000002 + 56.358134997000001 56.030472291999999 54.817418736999997 + 52.822933512999995 58.087695726999996 55.159479063999996 + 58.049480529000000 44.072056079999996 49.744375087999998 + 59.278912040000002 53.725356026000000 50.153342187999996 + 54.452497281999996 41.095954646999999 50.945116025000004 + 47.497557243000003 42.368330803999996 55.957802072000000 + 56.395324345999995 42.314479722000002 50.180567346000004 + 42.702208710999997 44.881692846999997 54.532678478000001 + 50.536885088999995 57.589946730000001 56.488795191999998 + 50.242003104999995 56.531089690999998 57.568771495999997 + 42.757979372000001 46.027333534999997 55.636582153999996 + 49.255003266999999 41.158311257000001 54.611888989000001 + 43.690108017000000 44.849846487000001 55.801825743999999 + 59.898518095000000 48.899462409000002 49.101024729000002 + 50.734318293000001 41.051244292000000 54.402334370999995 + 59.777478178999999 51.539815012999995 48.575257851000003 + 43.636008117000003 54.387314168000003 56.344374020000004 + 46.016502040999995 54.881002226999996 57.765794311000001 + 58.706828082000001 54.674266211999999 51.530483629999999 + 58.106909391000002 54.901962654999998 53.201371934000001 + 43.782749698000003 48.360361290000000 57.658810846999998 + 43.582962565000003 52.975352991000001 57.068868731999999 + 54.150263370000005 57.097609102999996 55.692034696000000 + 59.277819577999999 46.323375279000004 49.364001150000000 + 45.974386089999996 44.102174755999997 57.000720680000001 + 47.268557104999999 43.409175116000000 57.007156846000001 + 44.716386684000000 50.763919510999997 58.455758825000004 + 44.801487731999998 49.207710867999999 58.505747946000000 + 48.690953694000001 54.936116951000002 58.597740819999999 + 47.257749001999997 54.131265498000005 58.684048873999998 + 57.330624212000004 43.238754495999999 50.739937759000000 + 54.065968075000001 41.209493987000002 52.488957141000000 + 59.789725083999997 52.024579838000001 50.249718354999999 + 51.818028339999998 57.672485055999999 56.150426491000005 + 52.957302315999996 56.996972002000000 56.503594837999998 + 51.641049733000003 56.730232600999997 57.211860016999999 + 58.789207845999996 45.241619686999996 50.328088762999997 + 59.985191419000003 50.389560856999999 49.620270274999996 + 55.625864069999999 41.789228772999998 50.965861957000001 + 49.891126201999995 55.478685538999997 58.364935819999999 + 44.716401005999998 53.985849707000000 57.496438073000000 + 57.342060611000001 54.969042271999996 54.626312233000000 + 45.817552456000001 53.674400575000000 58.306979772999995 + 52.212806233999999 41.184381459000001 54.169935049999999 + 48.911792282000000 41.955310140999998 55.839415127999999 + 50.341552825000001 41.749238238000004 55.639882268999997 + 48.632612515999995 42.913720584000004 56.922058618000001 + 44.862535780000002 52.455694558000005 58.220463832999997 + 44.785381125000001 44.993176505999998 56.909375404999999 + 59.727548894000002 47.682189429000005 50.050464453000004 + 55.329173339999997 56.058167065999996 55.907497212999999 + 59.388783813000003 53.020415485000001 51.651614000999999 + 58.826350188999996 53.633978020000001 52.981567725000005 + 43.749081222000001 46.053160149000000 56.734127235000003 + 44.012262573999998 47.122172234000004 57.474296480000000 + 45.045123384999997 47.652908296000000 58.363035230999998 + 47.142141269000000 44.559126434000000 57.888570106000003 + 45.923437956000001 45.288926465999999 57.822239324999998 + 48.738882751999995 53.766893373999999 59.177150843000000 + 50.224266981000000 54.181955645000002 59.080801248000000 + 45.946391863000002 50.010670472000001 59.141561531000001 + 45.943080506000001 51.459003890999995 59.022899304999996 + 46.432646261999999 52.787389743999995 58.916526550000000 + 55.339692190999997 41.823958654000002 52.154074096999999 + 47.928361828999996 52.823161948999996 59.366860301000003 + 44.869167296000001 46.227319773000005 57.709827473000004 + 58.132363694999995 44.331575831000002 51.316673144999996 + 53.644242622000000 41.549708547999998 53.913064028000001 + 51.365829396999999 55.438083668000004 58.280202658999997 + 46.128193531000001 48.595700819000001 59.112467199999998 + 58.147657189000000 53.818781242000000 54.362635918999999 + 59.929970189999999 49.136781462000002 50.806564186000003 + 54.136670314000000 56.031257933999996 56.819962349999997 + 51.730278706000000 41.751933507000004 55.382892783999999 + 50.034960592000004 42.627122086000000 56.755697522999995 + 56.445534918000000 42.524200145999998 51.602340835999996 + 48.437670744000002 44.011241526999996 57.854546405999997 + 59.325326744000002 46.498069111000000 50.880205183000001 + 56.390540693999995 54.952312371000005 55.885201084999998 + 59.699881392000002 51.485675712000003 51.924855491999999 + 59.935892828000000 50.618828640000004 50.946089225000001 + 59.246081998999998 52.207144220000004 53.104590481000002 + 49.560128020000001 52.589605583000001 59.648857734000003 + 47.116687044000003 50.708139289999998 59.549086088999999 + 47.305967039999999 49.340752174999999 59.607683316999996 + 47.064301588999996 45.742867971000003 58.559118045999995 + 48.284028684999996 45.201474156000003 58.604045104999997 + 58.701449197000002 52.755727460999999 54.085431192000001 + 52.837695425999996 55.881589620000000 57.573267999999999 + 58.761426913999998 45.538916428000000 51.826508087000001 + 51.383157134000001 42.519315483000000 56.490472670999999 + 57.280459387999997 43.526750739999997 52.256536089000001 + 53.146936749999995 42.045864557000002 55.179625318999996 + 54.995607202000002 42.098376356000003 53.550810114000001 + 47.025490966000000 46.810285766999996 58.998778756999997 + 45.971705194999998 46.501555397000004 58.457761306999998 + 46.317842084999995 47.506685087999998 58.956846198999997 + 47.605856629000002 47.886199730000001 59.476282284999996 + 49.751194448999996 43.621144172999998 57.697291350000000 + 49.601838685000004 44.764713870000001 58.510772392000000 + 57.317612428000004 53.773957463999999 55.675367249000004 + 55.249616861999996 54.932455243000000 56.936310841000001 + 59.608647961999999 47.730796580000003 51.588899049999995 + 48.408959987000003 51.471929232999997 59.762275145000004 + 51.918973699999995 54.008077415000002 58.958395803999998 + 51.176006340000001 52.783291452000000 59.532591347000000 + 59.763498803000005 49.996038186000000 52.161961015000003 + 59.383898076000001 50.748316758000001 53.373792958999999 + 48.106032948999996 46.479038524000003 59.166008896999998 + 48.973858190000001 48.907296415000005 59.887013292999995 + 49.557224275999999 51.455114598999998 59.883652724000001 + 56.850080482999999 47.177628210000002 56.716443615999999 + 52.566588885000002 42.535995557999996 56.140135111999996 + 58.091559269000001 52.551410836999999 55.293106019999996 + 58.795339986000002 51.532551400999999 54.504806403000003 + 59.653529950999996 48.724843617000005 52.276694026000001 + 51.145233048000001 43.477601239999998 57.493113883999996 + 50.763400520000005 44.396409625000004 58.247241633000002 + 56.232866930000000 42.780931037000002 53.006062729999996 + 58.010884359000002 44.733322620999999 52.843913004000001 + 52.745957470000000 54.802194017000005 58.330585225000000 + 54.518486154000001 42.549367867999997 54.906257608000004 + 59.174214880000001 46.684636835999996 52.200488226000004 + 49.452430034999999 50.404676608999999 59.976793270999998 + 50.754265255999996 51.227545667000001 59.895666504000005 + 49.405538645000000 45.980105324999997 59.137125505000000 + 49.113011323999999 47.362321248000001 59.604993590999996 + 53.990058476000002 54.870077852999998 57.769284076999995 + 59.339807936000000 49.250025356999998 53.493640757999998 + 56.249728965999999 53.702557210999998 56.872551051000002 + 52.526134941999999 52.871198301000000 59.239851868999999 + 53.538792346000001 53.619817994999998 58.624028432999999 + 58.805403935000001 50.039885139999996 54.739543303000005 + 52.284451300000001 51.612853330000000 59.601040902000001 + 59.157829355000004 47.646388532000003 53.254946168000004 + 53.826229034000001 43.193516281000001 56.247539576999998 + 52.505788089999996 43.420769487000001 57.101742877999996 + 52.174584991000003 44.660204827999998 58.170542677000000 + 58.607516415999996 46.084585802999996 53.252720832000001 + 57.167873595000003 52.456165525999999 56.526012491000003 + 50.915022464000003 45.605288735999999 58.935840576000004 + 55.846571279999999 43.188039044000000 54.406221985999998 + 57.033518121000000 43.945946890999998 53.725327340999996 + 54.998401104999999 53.714685470999996 57.824135623000004 + 50.648105068000000 49.523369794000004 59.967586642000001 + 50.455642041000004 48.033801335999996 59.794205079999998 + 53.595254185999998 52.128038017999998 59.085460996999998 + 54.621549911999999 52.640197283999996 58.465851092000001 + 52.129535063999995 50.089941639999999 59.770209358999999 + 55.908485321000001 52.291453527000002 57.735569916999999 + 50.319022841999995 46.763101043999995 59.456252407000001 + 51.982870861999999 48.483346960999995 59.683387151000005 + 55.289349313999999 43.699814861000000 55.685987253000000 + 57.704057071999998 45.298716259000003 54.306441202000002 + 53.558916605999997 50.662567451000001 59.321755037000003 + 57.965155155000005 51.023042423999996 55.959000549999999 + 58.687085611000001 48.413649968000001 54.692338133000000 + 53.609748535000001 44.380070900000000 57.442184654000002 + 58.290268619000003 46.804581943000002 54.589199239999999 + 54.712938875999996 44.277076903000001 56.710913379000004 + 51.607851994000001 47.022569411999996 59.410086027999995 + 53.465179629000005 49.064500731999999 59.333668692000003 + 52.341741581999997 46.025447295999996 58.872382834999996 + 53.529984400000004 45.715937531000002 58.317813348000001 + 56.575220299999998 44.484258404000002 55.132550307999999 + 56.895696552000004 51.299773255000005 57.124602342999999 + 54.810533337999999 51.366845659999996 58.659705649999999 + 58.011826729999996 49.280021527000002 55.940729200999996 + 55.982553889999998 50.652605417000004 57.986435696000001 + 55.852990360000000 44.989477747000002 56.374729060999996 + 57.097599321000004 49.972622221000002 57.044383177000000 + 54.788777240999998 45.370794613999998 57.459093111000001 + 57.119851206000000 46.029085914999996 55.791334918000004 + 53.281807807999996 47.324016620999998 59.059185971000005 + 54.807265547000000 49.844048733000001 58.767318697999997 + 57.782507440000003 47.663639361999998 55.828721723000001 + 54.739683627000005 48.263516879999997 58.632498217999995 + 54.748151634999999 46.734283348999995 58.172524139000004 + 57.044065015000001 48.485917241999999 56.934601752999995 + 55.954012359000004 46.276117649000000 57.119159855999996 + 56.005827683000000 49.144036372999999 57.949676730000000 + 55.938433912000001 47.665867777999999 57.699794116999996 + 3 2 1 + 6 2 3 + 7 2 6 + 8 2 7 + 9 2 8 + 1 2 9 + 10 3 1 + 11 10 1 + 12 11 1 + 9 12 1 + 13 9 8 + 14 9 13 + 12 9 14 + 15 6 3 + 16 15 3 + 10 16 3 + 17 7 6 + 18 17 6 + 15 18 6 + 19 8 7 + 20 19 7 + 17 20 7 + 21 13 8 + 19 21 8 + 22 17 18 + 23 17 22 + 20 17 23 + 24 19 20 + 25 24 20 + 23 25 20 + 26 18 15 + 27 18 26 + 22 18 27 + 28 15 16 + 26 15 28 + 29 16 10 + 30 16 29 + 28 16 30 + 31 10 11 + 29 10 31 + 32 11 12 + 33 11 32 + 31 11 33 + 34 12 14 + 32 12 34 + 35 14 13 + 36 14 35 + 34 14 36 + 37 13 21 + 35 13 37 + 38 19 24 + 21 19 38 + 39 34 36 + 40 34 39 + 32 34 40 + 41 33 32 + 40 41 32 + 42 31 33 + 43 42 33 + 41 43 33 + 44 29 31 + 42 44 31 + 45 30 29 + 44 45 29 + 46 23 22 + 47 23 46 + 25 23 47 + 48 22 27 + 46 22 48 + 49 24 25 + 50 49 25 + 47 50 25 + 51 27 26 + 52 27 51 + 48 27 52 + 53 26 28 + 51 26 53 + 54 28 30 + 53 28 54 + 55 36 35 + 56 55 35 + 37 56 35 + 57 54 30 + 45 57 30 + 58 21 38 + 37 21 58 + 59 56 37 + 58 59 37 + 60 24 49 + 38 24 60 + 61 36 55 + 39 36 61 + 62 53 54 + 63 62 54 + 57 63 54 + 64 51 53 + 62 64 53 + 65 52 51 + 64 65 51 + 66 55 56 + 67 55 66 + 61 55 67 + 68 41 40 + 69 68 40 + 39 69 40 + 70 43 41 + 68 70 41 + 71 42 43 + 72 71 43 + 70 72 43 + 73 44 42 + 71 73 42 + 74 45 44 + 73 74 44 + 75 50 47 + 76 75 47 + 46 76 47 + 77 46 48 + 76 46 77 + 78 48 52 + 77 48 78 + 79 49 50 + 80 49 79 + 60 49 80 + 81 57 45 + 74 81 45 + 82 63 57 + 81 82 57 + 83 52 65 + 78 52 83 + 84 69 39 + 61 84 39 + 85 61 67 + 84 61 85 + 86 38 60 + 58 38 86 + 87 59 58 + 86 87 58 + 88 60 80 + 86 60 88 + 89 56 59 + 66 56 89 + 90 79 50 + 75 90 50 + 91 62 63 + 92 91 63 + 82 92 63 + 93 64 62 + 91 93 62 + 94 65 64 + 93 94 64 + 95 74 73 + 96 74 95 + 81 74 96 + 97 73 71 + 95 73 97 + 98 71 72 + 97 71 98 + 99 72 70 + 100 72 99 + 98 72 100 + 101 70 68 + 99 70 101 + 102 68 69 + 101 68 102 + 103 67 66 + 104 67 103 + 85 67 104 + 105 76 77 + 106 76 105 + 75 76 106 + 107 77 78 + 105 77 107 + 108 80 79 + 109 80 108 + 88 80 109 + 110 86 88 + 87 86 110 + 111 88 109 + 110 88 111 + 112 81 96 + 82 81 112 + 113 69 84 + 102 69 113 + 114 84 85 + 113 84 114 + 115 85 104 + 114 85 115 + 116 107 78 + 83 116 78 + 117 83 65 + 94 117 65 + 118 59 87 + 89 59 118 + 119 92 82 + 112 119 82 + 120 75 106 + 90 75 120 + 121 66 89 + 103 66 121 + 122 108 79 + 90 122 79 + 123 104 103 + 124 104 123 + 115 104 124 + 125 93 91 + 126 125 91 + 92 126 91 + 127 94 93 + 125 127 93 + 128 109 108 + 129 109 128 + 111 109 129 + 130 96 95 + 131 130 95 + 97 131 95 + 132 97 98 + 131 97 132 + 133 98 100 + 132 98 133 + 134 100 99 + 135 100 134 + 133 100 135 + 136 99 101 + 134 99 136 + 137 101 102 + 136 101 137 + 138 105 107 + 139 138 107 + 116 139 107 + 140 106 105 + 138 140 105 + 141 83 117 + 116 83 141 + 142 137 102 + 113 142 102 + 143 117 94 + 127 143 94 + 144 87 110 + 118 87 144 + 145 110 111 + 144 110 145 + 146 111 129 + 145 111 146 + 147 113 114 + 142 113 147 + 148 114 115 + 147 114 148 + 149 115 124 + 148 115 149 + 150 106 140 + 120 106 150 + 151 139 116 + 141 151 116 + 152 92 119 + 126 92 152 + 153 103 121 + 123 103 153 + 154 90 120 + 122 90 154 + 155 121 89 + 118 155 89 + 156 108 122 + 128 108 156 + 157 96 130 + 112 96 157 + 158 119 112 + 157 158 112 + 159 127 125 + 160 127 159 + 143 127 160 + 161 125 126 + 159 125 161 + 162 134 136 + 163 134 162 + 135 134 163 + 164 136 137 + 162 136 164 + 165 124 123 + 166 165 123 + 153 166 123 + 167 129 128 + 168 167 128 + 156 168 128 + 169 140 138 + 170 140 169 + 150 140 170 + 171 138 139 + 169 138 171 + 172 130 131 + 173 130 172 + 157 130 173 + 174 131 132 + 172 131 174 + 175 132 133 + 174 132 175 + 176 133 135 + 175 133 176 + 177 152 119 + 158 177 119 + 178 135 163 + 176 135 178 + 179 155 118 + 144 179 118 + 180 161 126 + 152 180 126 + 181 120 150 + 154 120 181 + 182 144 145 + 179 144 182 + 183 145 146 + 182 145 183 + 184 164 137 + 142 184 137 + 185 142 147 + 184 142 185 + 186 147 148 + 185 147 186 + 187 148 149 + 186 148 187 + 188 141 117 + 143 188 117 + 189 151 141 + 188 189 141 + 190 143 160 + 188 143 190 + 191 150 170 + 181 150 191 + 192 157 173 + 158 157 192 + 193 124 165 + 149 124 193 + 194 171 139 + 151 194 139 + 195 146 129 + 167 195 129 + 196 153 121 + 155 196 121 + 197 166 153 + 196 197 153 + 198 122 154 + 156 122 198 + 199 168 156 + 198 199 156 + 200 160 159 + 161 200 159 + 201 162 164 + 202 162 201 + 163 162 202 + 203 169 171 + 204 169 203 + 170 169 204 + 205 165 166 + 206 165 205 + 193 165 206 + 207 167 168 + 208 167 207 + 195 167 208 + 209 172 174 + 210 172 209 + 173 172 210 + 211 174 175 + 209 174 211 + 212 175 176 + 211 175 212 + 213 151 189 + 194 151 213 + 214 163 202 + 178 163 214 + 215 196 155 + 179 215 155 + 215 197 196 + 216 179 182 + 215 179 216 + 217 149 193 + 187 149 217 + 218 198 154 + 181 218 154 + 218 199 198 + 219 191 170 + 204 219 170 + 220 181 191 + 218 181 220 + 221 176 178 + 212 176 221 + 222 182 183 + 216 182 222 + 223 193 206 + 217 193 223 + 224 180 152 + 177 224 152 + 225 189 188 + 190 225 188 + 226 166 197 + 205 166 226 + 227 168 199 + 207 168 227 + 228 158 192 + 177 158 228 + 229 173 210 + 192 173 229 + 230 183 146 + 195 230 146 + 231 195 208 + 230 195 231 + 232 160 200 + 190 160 232 + 233 201 164 + 184 233 164 + 234 184 185 + 233 184 234 + 235 185 186 + 234 185 235 + 236 186 187 + 235 186 236 + 237 161 180 + 200 161 237 + 238 203 171 + 194 238 171 + 239 206 205 + 226 239 205 + 240 210 209 + 241 240 209 + 211 241 209 + 242 211 212 + 241 211 242 + 243 208 207 + 244 243 207 + 227 244 207 + 245 202 201 + 246 245 201 + 233 246 201 + 247 204 203 + 248 204 247 + 219 204 248 + 214 221 178 + 249 224 177 + 228 249 177 + 250 228 192 + 229 250 192 + 251 233 234 + 246 233 251 + 252 187 217 + 236 187 252 + 253 217 223 + 252 217 253 + 254 189 225 + 213 189 254 + 255 238 194 + 213 255 194 + 256 202 245 + 214 202 256 + 257 203 238 + 247 203 257 + 258 223 206 + 239 258 206 + 259 234 235 + 251 234 259 + 259 235 236 + 260 191 219 + 220 191 260 + 261 219 248 + 260 219 261 + 262 212 221 + 242 212 262 + 263 180 224 + 237 180 263 + 264 190 232 + 225 190 264 + 265 231 208 + 243 265 208 + 266 183 230 + 222 183 266 + 267 230 231 + 266 230 267 + 268 215 216 + 197 215 268 + 268 226 197 + 269 216 222 + 268 216 269 + 270 199 218 + 220 270 218 + 270 227 199 + 271 244 227 + 270 271 227 + 272 210 240 + 229 210 272 + 273 245 246 + 256 245 273 + 274 200 237 + 275 200 274 + 232 200 275 + 276 248 247 + 277 276 247 + 257 277 247 + 278 243 244 + 279 243 278 + 265 243 279 + 280 239 226 + 281 280 226 + 268 281 226 + 282 240 241 + 283 240 282 + 272 240 283 + 284 241 242 + 282 241 284 + 269 281 268 + 264 232 275 + 254 255 213 + 285 229 272 + 250 229 285 + 286 242 262 + 284 242 286 + 287 272 283 + 285 272 287 + 288 231 265 + 267 231 288 + 289 257 238 + 255 289 238 + 289 277 257 + 290 265 279 + 288 265 290 + 291 246 251 + 273 246 291 + 291 251 259 + 292 249 228 + 250 292 228 + 293 223 258 + 253 223 293 + 294 254 225 + 264 294 225 + 295 270 220 + 260 295 220 + 295 271 270 + 296 260 261 + 295 260 296 + 297 261 248 + 276 297 248 + 298 222 266 + 269 222 298 + 299 266 267 + 298 266 299 + 300 224 249 + 263 224 300 + 301 274 237 + 263 301 237 + 302 244 271 + 278 244 302 + 303 258 239 + 280 303 239 + 304 236 252 + 259 236 304 + 305 252 253 + 304 252 305 + 306 262 221 + 214 306 221 + 307 214 256 + 306 214 307 + 308 256 273 + 307 256 308 + 309 283 282 + 310 309 282 + 284 310 282 + 311 275 274 + 312 311 274 + 301 312 274 + 313 280 281 + 314 313 281 + 269 314 281 + 315 276 277 + 316 276 315 + 297 276 316 + 317 279 278 + 318 317 278 + 302 318 278 + 298 314 269 + 292 250 285 + 319 267 288 + 299 267 319 + 320 288 290 + 319 288 320 + 321 284 286 + 310 284 321 + 322 279 317 + 290 279 322 + 323 253 293 + 305 253 323 + 324 249 292 + 300 249 324 + 325 287 283 + 309 325 283 + 326 298 299 + 314 298 326 + 327 263 300 + 301 263 327 + 328 312 301 + 327 328 301 + 329 303 280 + 313 329 280 + 330 313 314 + 326 330 314 + 331 293 258 + 303 331 258 + 332 262 306 + 286 262 332 + 333 306 307 + 332 306 333 + 334 307 308 + 333 307 334 + 335 285 287 + 292 285 335 + 336 271 295 + 296 336 295 + 336 302 271 + 337 318 302 + 336 337 302 + 338 296 261 + 297 338 261 + 339 297 316 + 338 297 339 + 340 259 304 + 291 259 340 + 341 304 305 + 340 304 341 + 342 255 254 + 289 255 342 + 342 254 294 + 343 275 311 + 264 275 343 + 344 294 264 + 343 344 264 + 345 308 273 + 291 345 273 + 346 315 277 + 289 346 277 + 347 309 310 + 325 309 347 + 348 317 318 + 349 317 348 + 322 317 349 + 350 311 312 + 351 350 312 + 328 351 312 + 352 316 315 + 353 352 315 + 346 353 315 + 354 324 292 + 335 354 292 + 355 327 300 + 324 355 300 + 356 326 299 + 319 356 299 + 357 319 320 + 356 319 357 + 358 313 330 + 329 313 358 + 359 328 327 + 355 359 327 + 359 351 328 + 360 343 311 + 350 360 311 + 361 344 343 + 360 361 343 + 362 347 310 + 321 362 310 + 363 320 290 + 322 363 290 + 364 322 349 + 363 322 364 + 365 289 342 + 346 289 365 + 366 321 286 + 332 366 286 + 367 339 316 + 352 367 316 + 368 291 340 + 345 291 368 + 369 332 333 + 366 332 369 + 370 333 334 + 369 333 370 + 371 308 345 + 334 308 371 + 372 287 325 + 335 287 372 + 373 330 326 + 356 373 326 + 374 340 341 + 368 340 374 + 375 323 293 + 331 375 293 + 376 341 305 + 323 376 305 + 377 296 338 + 336 296 377 + 378 337 336 + 377 378 336 + 379 338 339 + 377 338 379 + 380 353 346 + 365 380 346 + 381 318 337 + 348 318 381 + 382 303 329 + 331 303 382 + 383 294 344 + 342 294 383 + 384 325 347 + 385 325 384 + 372 325 385 + 386 350 351 + 387 350 386 + 360 350 387 + 388 352 353 + 389 352 388 + 367 352 389 + 390 349 348 + 391 390 348 + 381 391 348 + 392 357 320 + 363 392 320 + 393 329 358 + 382 329 393 + 394 361 360 + 387 394 360 + 395 365 342 + 383 395 342 + 395 380 365 + 396 358 330 + 373 396 330 + 397 337 378 + 381 337 397 + 398 391 381 + 397 398 381 + 399 355 324 + 354 399 324 + 399 359 355 + 400 383 344 + 361 400 344 + 401 378 377 + 379 401 377 + 402 364 349 + 390 402 349 + 403 363 364 + 392 363 403 + 404 321 366 + 362 321 404 + 405 335 372 + 354 335 405 + 405 372 385 + 406 373 356 + 357 406 356 + 407 370 334 + 371 407 334 + 408 374 341 + 376 408 341 + 409 379 339 + 367 409 339 + 410 367 389 + 409 367 410 + 411 375 331 + 382 411 331 + 412 366 369 + 404 366 412 + 413 369 370 + 412 369 413 + 414 384 347 + 362 414 347 + 415 345 368 + 371 345 415 + 416 368 374 + 415 368 416 + 417 353 380 + 388 353 417 + 418 376 323 + 375 418 323 + 419 390 391 + 420 390 419 + 402 390 420 + 421 386 351 + 422 421 351 + 359 422 351 + 423 385 384 + 424 423 384 + 414 424 384 + 425 387 386 + 426 425 386 + 421 426 386 + 427 389 388 + 428 427 388 + 417 428 388 + 397 378 401 + 405 399 354 + 393 358 396 + 429 396 373 + 406 429 373 + 430 406 357 + 392 430 357 + 430 392 403 + 431 400 361 + 394 431 361 + 432 364 402 + 403 364 432 + 433 402 420 + 432 402 433 + 434 395 383 + 400 434 383 + 435 380 395 + 434 435 395 + 435 417 380 + 436 401 379 + 409 436 379 + 437 374 408 + 416 374 437 + 438 409 410 + 436 409 438 + 439 394 387 + 425 439 387 + 440 419 391 + 398 440 391 + 441 411 382 + 393 441 382 + 442 359 399 + 422 359 442 + 443 398 397 + 401 443 397 + 444 371 415 + 407 371 444 + 445 413 370 + 407 445 370 + 446 415 416 + 444 415 446 + 447 410 389 + 427 447 389 + 448 362 404 + 414 362 448 + 449 424 414 + 448 449 414 + 450 428 417 + 435 450 417 + 451 375 411 + 418 375 451 + 452 408 376 + 418 452 376 + 453 405 385 + 423 453 385 + 454 404 412 + 448 404 454 + 455 412 413 + 454 412 455 + 456 421 422 + 426 421 456 + 457 420 419 + 440 457 419 + 458 425 426 + 459 425 458 + 439 425 459 + 460 427 428 + 461 427 460 + 447 427 461 + 462 423 424 + 463 423 462 + 453 423 463 + 436 443 401 + 431 394 439 + 434 400 431 + 464 413 445 + 455 413 464 + 465 433 420 + 457 465 420 + 466 440 398 + 443 466 398 + 467 437 408 + 452 467 408 + 443 436 438 + 468 429 406 + 430 468 406 + 469 445 407 + 444 469 407 + 469 444 446 + 470 424 449 + 462 424 470 + 471 446 416 + 437 471 416 + 472 399 405 + 442 399 472 + 472 405 453 + 473 410 447 + 438 410 473 + 474 447 461 + 473 447 474 + 475 456 422 + 442 475 422 + 476 449 448 + 454 476 448 + 477 453 463 + 472 453 477 + 478 451 411 + 441 478 411 + 479 454 455 + 476 454 479 + 480 396 429 + 393 396 480 + 480 441 393 + 481 435 434 + 431 481 434 + 481 450 435 + 482 428 450 + 460 428 482 + 483 430 403 + 468 430 483 + 483 403 432 + 484 432 433 + 483 432 484 + 485 458 426 + 456 485 426 + 486 439 459 + 431 439 486 + 487 457 440 + 466 487 440 + 488 418 451 + 452 418 488 + 489 463 462 + 490 489 462 + 470 490 462 + 491 459 458 + 492 491 458 + 485 492 458 + 493 461 460 + 494 493 460 + 482 494 460 + 481 431 486 + 438 466 443 + 475 442 472 + 475 472 477 + 495 437 467 + 471 437 495 + 496 464 445 + 469 496 445 + 497 480 429 + 468 497 429 + 498 438 473 + 466 438 498 + 499 487 466 + 498 499 466 + 500 473 474 + 498 473 500 + 501 452 488 + 467 452 501 + 502 441 480 + 478 441 502 + 503 446 471 + 469 446 503 + 504 461 493 + 474 461 504 + 505 450 481 + 486 505 481 + 505 482 450 + 506 484 433 + 465 506 433 + 507 494 482 + 505 507 482 + 508 479 455 + 464 508 455 + 509 470 449 + 476 509 449 + 510 476 479 + 509 476 510 + 511 490 470 + 509 511 470 + 512 486 459 + 491 512 459 + 513 477 463 + 489 513 463 + 514 488 451 + 478 514 451 + 515 457 487 + 465 457 515 + 516 468 483 + 497 468 516 + 517 483 484 + 516 483 517 + 518 456 475 + 477 518 475 + 519 485 456 + 518 519 456 + 520 492 485 + 519 520 485 + 521 489 490 + 522 489 521 + 513 489 522 + 523 493 494 + 524 493 523 + 504 493 524 + 525 491 492 + 526 491 525 + 512 491 526 + 513 518 477 + 502 480 497 + 500 499 498 + 505 486 512 + 512 507 505 + 527 512 526 + 507 512 527 + 528 469 503 + 496 469 528 + 527 494 507 + 529 523 494 + 527 529 494 + 530 513 522 + 518 513 530 + 530 519 518 + 530 520 519 + 531 495 467 + 501 531 467 + 532 508 464 + 496 532 464 + 533 474 504 + 500 474 533 + 533 504 524 + 534 492 520 + 525 492 534 + 535 517 484 + 506 535 484 + 536 514 478 + 502 536 478 + 537 487 499 + 515 487 537 + 538 479 508 + 510 479 538 + 539 511 509 + 510 539 509 + 540 503 471 + 495 540 471 + 541 521 490 + 511 541 490 + 542 488 514 + 501 488 542 + 543 465 515 + 506 465 543 + 544 497 516 + 545 497 544 + 502 497 545 + 546 516 517 + 544 516 546 + 547 524 523 + 529 547 523 + 548 526 525 + 549 548 525 + 534 549 525 + 550 522 521 + 551 550 521 + 541 551 521 + 545 536 502 + 540 528 503 + 552 517 535 + 546 517 552 + 553 499 500 + 537 499 553 + 553 500 533 + 554 501 542 + 531 501 554 + 555 510 538 + 539 510 555 + 556 495 531 + 540 495 556 + 557 538 508 + 532 557 508 + 5 526 548 + 527 526 5 + 5 529 527 + 558 532 496 + 528 558 496 + 560 530 522 + 550 560 522 + 560 520 530 + 561 534 520 + 560 561 520 + 562 549 534 + 561 562 534 + 563 541 511 + 539 563 511 + 564 551 541 + 563 564 541 + 565 535 506 + 543 565 506 + 566 543 515 + 537 566 515 + 567 514 536 + 542 514 567 + 568 547 529 + 5 568 529 + 569 533 524 + 570 569 524 + 547 570 524 + 571 545 544 + 572 571 544 + 546 572 544 + 573 550 551 + 559 550 573 + 560 550 559 + 4 548 549 + 574 4 549 + 562 574 549 + 561 560 559 + 548 568 5 + 568 548 4 + 577 555 538 + 557 577 538 + 559 562 561 + 562 559 573 + 578 552 535 + 565 578 535 + 579 572 546 + 552 579 546 + 571 536 545 + 580 567 536 + 571 580 536 + 581 539 555 + 563 539 581 + 582 564 563 + 581 582 563 + 583 558 528 + 540 583 528 + 583 540 556 + 584 556 531 + 554 584 531 + 585 533 569 + 553 533 585 + 586 557 532 + 558 586 532 + 587 542 567 + 554 542 587 + 588 4 574 + 568 4 588 + 575 547 568 + 588 575 568 + 589 570 547 + 575 589 547 + 590 573 551 + 564 590 551 + 591 574 562 + 573 591 562 + 592 566 537 + 553 592 537 + 593 571 572 + 580 571 593 + 594 543 566 + 565 543 594 + 595 569 570 + 596 569 595 + 585 569 596 + 585 592 553 + 590 591 573 + 578 579 552 + 592 585 596 + 589 575 588 + 597 593 572 + 579 597 572 + 598 595 570 + 589 598 570 + 599 567 580 + 587 567 599 + 599 580 593 + 600 557 586 + 577 557 600 + 601 581 555 + 577 601 555 + 602 582 581 + 601 602 581 + 603 584 554 + 587 603 554 + 604 565 594 + 578 565 604 + 605 564 582 + 590 564 605 + 606 586 558 + 583 606 558 + 607 583 556 + 584 607 556 + 608 566 592 + 594 566 608 + 609 588 574 + 589 588 609 + 610 574 591 + 609 574 610 + 611 596 595 + 598 611 595 + 608 592 596 + 607 606 583 + 600 601 577 + 599 603 587 + 605 582 602 + 612 596 611 + 608 596 612 + 613 598 589 + 609 613 589 + 614 594 608 + 612 614 608 + 614 604 594 + 615 591 590 + 610 591 615 + 615 590 605 + 616 609 610 + 613 609 616 + 617 600 586 + 606 617 586 + 618 584 603 + 607 584 618 + 619 611 598 + 613 619 598 + 620 579 578 + 597 579 620 + 620 578 604 + 621 593 597 + 599 593 621 + 622 602 601 + 600 622 601 + 623 599 621 + 603 599 623 + 623 618 603 + 624 600 617 + 622 600 624 + 625 610 615 + 616 610 625 + 625 615 605 + 626 613 616 + 619 613 626 + 627 605 602 + 625 605 627 + 628 602 622 + 627 602 628 + 629 606 607 + 617 606 629 + 629 607 618 + 630 604 614 + 620 604 630 + 631 612 611 + 619 631 611 + 631 614 612 + 632 597 620 + 621 597 632 + 633 630 614 + 631 633 614 + 634 624 617 + 629 634 617 + 635 632 620 + 630 635 620 + 636 622 624 + 628 622 636 + 637 629 618 + 634 629 637 + 637 618 623 + 638 626 616 + 625 638 616 + 638 625 627 + 638 627 628 + 639 631 619 + 626 639 619 + 640 623 621 + 632 640 621 + 640 637 623 + 636 624 634 + 639 633 631 + 635 630 633 + 641 626 638 + 639 626 641 + 642 638 628 + 641 638 642 + 642 628 636 + 643 632 635 + 640 632 643 + 644 634 637 + 636 634 644 + 644 642 636 + 576 644 637 + 640 576 637 + 576 640 643 + 645 639 641 + 633 639 645 + 645 635 633 + 645 643 635 + 646 641 642 + 645 641 646 + 646 642 644 + 643 645 646 + 646 576 643 + 646 644 576 diff --git a/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/cfd_para.hypara b/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/input.txt b/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/input.txt new file mode 100644 index 0000000..f567ed4 --- /dev/null +++ b/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/input.txt @@ -0,0 +1,33 @@ +0 !MRT set 1, BGK set 0 +1 ic.plt !CONTI, resume :1 , new 0 //follows input datafile name +0 !LES yes: 1 , no: 0 +0 mesh_3d.dat !GEO read complex geo? yes:1, no:0 //follows input datafile name +0 ! MB multiblock LBM? yes:1, no:0 +0 2.e-3 !CONV using converge criterion? yes:1, no:0 +201 !NX +201 ! NY +1 ! NZ +240 ! NX2 +160 ! NY2 +1 ! NZ2 +500 ! LowX +160 ! LowY +0 ! LowZ +200 ! framerate +50000 !total steps to terminate +1.0 ! density +0.8 ! tau +(0.0, 0.0, 0.0000000) ! Volumetric force vector (gx, gy, gz) +D2Q9 ! velocity set +Cavity ! boundary condition +! note: in the following, boundary types: periodic,velocity, pressure +! are allowed. if "velocity" is applied, please strictly follow the format "velocity (%lf, %lf, %lf)". +nonslip !xmin face +nonslip !xmax face +nonslip !ymin face +velocity (0.1, 0.00, 0.0) !ymax face, +nonslip !zmin face +nonslip !zmax face +-------------------! initial velocity field +(0.0, 0.00, 0.0) + diff --git a/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/key.hypara b/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/key.hypara new file mode 100644 index 0000000..9470ea6 --- /dev/null +++ b/L05_TwoD_Cavity_BGK_OMP_1CPU/bin/key.hypara @@ -0,0 +1,58 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +//int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +//string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +int nsimutask = 17; +string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/cfd_para.hypara b/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/input.txt b/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/input.txt new file mode 100644 index 0000000..ba067cb --- /dev/null +++ b/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/input.txt @@ -0,0 +1,33 @@ +0 !MRT set 1, BGK set 0 +0 ic.plt !CONTI, resume :1 , new 0 //follows input datafile name +0 !LES yes: 1 , no: 0 +1 mesh_2d.dat !GEO read complex geo? yes:1, no:0 //follows input datafile name +1 ! MB multiblock LBM? yes:1, no:0 +0 2.e-3 !CONV using converge criterion? yes:1, no:0 +600 !NX +400 ! NY +1 ! NZ +240 ! NX2 +160 ! NY2 +1 ! NZ2 +200 ! LowX +160 ! LowY +0 ! LowZ +200 ! framerate +50000 !total steps to terminate +1.0 ! density +0.54 ! tau +(0.0, 0.0, 0.0000000) ! Volumetric force vector (gx, gy, gz) +D2Q9 ! velocity set +Poiseuille ! boundary condition +! note: in the following, boundary types: periodic,velocity, pressure +! are allowed. if "velocity" is applied, please strictly follow the format "velocity (%lf, %lf, %lf)". +velocity (0.1, 0.00, 0.0) !xmin face +pressure 1.0 !xmax face +velocity (0.1, 0.00, 0.0) !ymin face +velocity (0.1, 0.00, 0.0) !ymax face, +nonslip !zmin face +nonslip !zmax face +-------------------! initial velocity field +(0.1, 0.00, 0.0) + diff --git a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/key.hypara b/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/key.hypara similarity index 91% rename from H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/key.hypara rename to L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/key.hypara index 9c32184..c267e0a 100644 --- a/H03_PBSolver_TwoD_Cavity_Laminar_Re1000_Unstruct_1CPU/bin/key.hypara +++ b/L06_TwoD_Spoiler_BGK_OMP_4CPU/bin/key.hypara @@ -17,12 +17,12 @@ string defaultParaFile = "./bin/cfd_para.hypara"; int ndim = 2; int nparafile = 1; -int nsimutask = 0; -string parafilename = "./bin/cfd_para_incompressible.hypara" +//int nsimutask = 0; //string parafilename = "./bin/cfd_para_subsonic.hypara"; //string parafilename = "./bin/cfd_para_transonic.hypara"; //string parafilename = "./bin/cfd_para_supersonic.hypara"; //string parafilename = "./bin/cfd_para_hypersonic.hypara"; +//string parafilename = "./bin/cfd_para_incompressible.hypara"; //int nsimutask = 1; //string parafilename = "./bin/grid_para.hypara"; @@ -39,6 +39,9 @@ string parafilename = "./bin/cfd_para_incompressible.hypara" //int nsimutask = 1; //string parafilename = "./bin/grid_refine_para.hypara"; +int nsimutask = 17; +string parafilename = "./bin/cfd_para.hypara"; + //int nsimutask = 14; //string parafilename = "./bin/integrative_solver.hypara"; diff --git a/L06_TwoD_Spoiler_BGK_OMP_4CPU/mesh_2d.dat b/L06_TwoD_Spoiler_BGK_OMP_4CPU/mesh_2d.dat new file mode 100644 index 0000000..0f2d10d --- /dev/null +++ b/L06_TwoD_Spoiler_BGK_OMP_4CPU/mesh_2d.dat @@ -0,0 +1,303 @@ +Title = "finite-element data" +variables = x, y, z +zone n= 150, E= 150,f=FEpoint,et = triangle +100 80 0 +99.9825 80.8375 0 +99.9299 81.6736 0 +99.8423 82.5067 0 +99.7199 83.3354 0 +99.563 84.1582 0 +99.3717 84.9738 0 +99.1464 85.7806 0 +98.8875 86.5773 0 +98.5955 87.3625 0 +98.2709 88.1347 0 +97.9142 88.8927 0 +97.5261 89.6351 0 +97.1073 90.3605 0 +96.6584 91.0678 0 +96.1803 91.7557 0 +95.6739 92.423 0 +95.1399 93.0684 0 +94.5794 93.6909 0 +93.9933 94.2895 0 +93.3826 94.8629 0 +92.7485 95.4103 0 +92.092 95.9306 0 +91.4143 96.423 0 +90.7165 96.8866 0 +90 97.3205 0 +89.2659 97.7241 0 +88.5156 98.0965 0 +87.7503 98.4373 0 +86.9714 98.7456 0 +86.1803 99.0211 0 +85.3784 99.2633 0 +84.567 99.4716 0 +83.7476 99.6457 0 +82.9217 99.7854 0 +82.0906 99.8904 0 +81.2558 99.9605 0 +80.4188 99.9956 0 +79.5812 99.9956 0 +78.7442 99.9605 0 +77.9094 99.8904 0 +77.0783 99.7854 0 +76.2524 99.6457 0 +75.433 99.4716 0 +74.6216 99.2633 0 +73.8197 99.0211 0 +73.0286 98.7456 0 +72.2497 98.4373 0 +71.4844 98.0965 0 +70.7341 97.7241 0 +70 97.3205 0 +69.2835 96.8866 0 +68.5857 96.423 0 +67.908 95.9306 0 +67.2515 95.4103 0 +66.6174 94.8629 0 +66.0067 94.2895 0 +65.4206 93.6909 0 +64.8601 93.0684 0 +64.3261 92.423 0 +63.8197 91.7557 0 +63.3416 91.0678 0 +62.8927 90.3605 0 +62.4739 89.6351 0 +62.0858 88.8927 0 +61.7291 88.1347 0 +61.4045 87.3625 0 +61.1125 86.5773 0 +60.8536 85.7806 0 +60.6283 84.9738 0 +60.437 84.1582 0 +60.2801 83.3354 0 +60.1577 82.5067 0 +60.0701 81.6736 0 +60.0175 80.8375 0 +60 80 0 +60.0175 79.1625 0 +60.0701 78.3264 0 +60.1577 77.4933 0 +60.2801 76.6646 0 +60.437 75.8418 0 +60.6283 75.0262 0 +60.8536 74.2194 0 +61.1125 73.4227 0 +61.4045 72.6375 0 +61.7291 71.8653 0 +62.0858 71.1073 0 +62.4739 70.3649 0 +62.8927 69.6395 0 +63.3416 68.9322 0 +63.8197 68.2443 0 +64.3261 67.577 0 +64.8601 66.9316 0 +65.4206 66.3091 0 +66.0067 65.7105 0 +66.6174 65.1371 0 +67.2515 64.5897 0 +67.908 64.0694 0 +68.5857 63.577 0 +69.2835 63.1134 0 +70 62.6795 0 +70.7341 62.2759 0 +71.4844 61.9035 0 +72.2497 61.5627 0 +73.0286 61.2544 0 +73.8197 60.9789 0 +74.6216 60.7367 0 +75.433 60.5284 0 +76.2524 60.3543 0 +77.0783 60.2146 0 +77.9094 60.1096 0 +78.7442 60.0395 0 +79.5812 60.0044 0 +80.4188 60.0044 0 +81.2558 60.0395 0 +82.0906 60.1096 0 +82.9217 60.2146 0 +83.7476 60.3543 0 +84.567 60.5284 0 +85.3784 60.7367 0 +86.1803 60.9789 0 +86.9714 61.2544 0 +87.7503 61.5627 0 +88.5156 61.9035 0 +89.2659 62.2759 0 +90 62.6795 0 +90.7165 63.1134 0 +91.4143 63.577 0 +92.092 64.0694 0 +92.7485 64.5897 0 +93.3826 65.1371 0 +93.9933 65.7105 0 +94.5794 66.3091 0 +95.1399 66.9316 0 +95.6739 67.577 0 +96.1803 68.2443 0 +96.6584 68.9322 0 +97.1073 69.6395 0 +97.5261 70.3649 0 +97.9142 71.1073 0 +98.2709 71.8653 0 +98.5955 72.6375 0 +98.8875 73.4227 0 +99.1464 74.2194 0 +99.3717 75.0262 0 +99.563 75.8418 0 +99.7199 76.6646 0 +99.8423 77.4933 0 +99.9299 78.3264 0 +99.9825 79.1625 0 +1 2 1 +2 3 2 +3 4 3 +4 5 4 +5 6 5 +6 7 6 +7 8 7 +8 9 8 +9 10 9 +10 11 10 +11 12 11 +12 13 12 +13 14 13 +14 15 14 +15 16 15 +16 17 16 +17 18 17 +18 19 18 +19 20 19 +20 21 20 +21 22 21 +22 23 22 +23 24 23 +24 25 24 +25 26 25 +26 27 26 +27 28 27 +28 29 28 +29 30 29 +30 31 30 +31 32 31 +32 33 32 +33 34 33 +34 35 34 +35 36 35 +36 37 36 +37 38 37 +38 39 38 +39 40 39 +40 41 40 +41 42 41 +42 43 42 +43 44 43 +44 45 44 +45 46 45 +46 47 46 +47 48 47 +48 49 48 +49 50 49 +50 51 50 +51 52 51 +52 53 52 +53 54 53 +54 55 54 +55 56 55 +56 57 56 +57 58 57 +58 59 58 +59 60 59 +60 61 60 +61 62 61 +62 63 62 +63 64 63 +64 65 64 +65 66 65 +66 67 66 +67 68 67 +68 69 68 +69 70 69 +70 71 70 +71 72 71 +72 73 72 +73 74 73 +74 75 74 +75 76 75 +76 77 76 +77 78 77 +78 79 78 +79 80 79 +80 81 80 +81 82 81 +82 83 82 +83 84 83 +84 85 84 +85 86 85 +86 87 86 +87 88 87 +88 89 88 +89 90 89 +90 91 90 +91 92 91 +92 93 92 +93 94 93 +94 95 94 +95 96 95 +96 97 96 +97 98 97 +98 99 98 +99 100 99 +100 101 100 +101 102 101 +102 103 102 +103 104 103 +104 105 104 +105 106 105 +106 107 106 +107 108 107 +108 109 108 +109 110 109 +110 111 110 +111 112 111 +112 113 112 +113 114 113 +114 115 114 +115 116 115 +116 117 116 +117 118 117 +118 119 118 +119 120 119 +120 121 120 +121 122 121 +122 123 122 +123 124 123 +124 125 124 +125 126 125 +126 127 126 +127 128 127 +128 129 128 +129 130 129 +130 131 130 +131 132 131 +132 133 132 +133 134 133 +134 135 134 +135 136 135 +136 137 136 +137 138 137 +138 139 138 +139 140 139 +140 141 140 +141 142 141 +142 143 142 +143 144 143 +144 145 144 +145 146 145 +146 147 146 +147 148 147 +148 149 148 +149 150 149 +150 1 150