From 27ec54b3816194f54f424a6a790a2ba5285ee1eb Mon Sep 17 00:00:00 2001 From: Lauri Tuppi Date: Tue, 10 Dec 2024 14:07:34 +0200 Subject: [PATCH] Converting SYNOP into container-compatible form. --- .../fortran-programs/plots_for_one_station | Bin 0 -> 46168 bytes .../plots_for_one_station.f95 | 19 ++-- .../rank_histogram_summary_statistics | Bin 0 -> 29424 bytes .../rank_histograms_one_station | Bin 0 -> 33760 bytes .../produce_rank_histograms_all_stations.sh | 55 ++++----- .../produce_standard_plots_all_stations.sh | 105 +++++++++++------- SYNOP/STATS/python/plot_p_values_map_synop.py | 15 ++- .../plot_rankhist_sum_all_stations_synop.py | 7 +- .../summary_rank_histograms_all_stations.sh | 22 ++-- SYNOP/graph_mod_obs.py | 11 +- SYNOP/gsv_mod_data.sh | 3 +- SYNOP/main_synop.sh | 31 ++++-- SYNOP/synop_mod.sh | 39 +++---- SYNOP/synop_obs.sh | 25 +++-- compile_programs.sh | 24 ++++ load_modules.sh | 6 +- quick_test_as_batchjob.bash | 7 +- run_obsall.sh | 37 +++--- 18 files changed, 252 insertions(+), 154 deletions(-) create mode 100755 SYNOP/STATS/fortran-programs/plots_for_one_station create mode 100755 SYNOP/STATS/fortran-programs/rank_histogram_summary_statistics create mode 100755 SYNOP/STATS/fortran-programs/rank_histograms_one_station create mode 100644 compile_programs.sh diff --git a/SYNOP/STATS/fortran-programs/plots_for_one_station b/SYNOP/STATS/fortran-programs/plots_for_one_station new file mode 100755 index 0000000000000000000000000000000000000000..ed3054838289d9c49461f9cd550f6b8849089333 GIT binary patch literal 46168 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 J3R|+u{{tQ5vcv!Y literal 0 HcmV?d00001 diff --git a/SYNOP/STATS/fortran-programs/plots_for_one_station.f95 b/SYNOP/STATS/fortran-programs/plots_for_one_station.f95 index b74cb22e5..b8212593e 100644 --- a/SYNOP/STATS/fortran-programs/plots_for_one_station.f95 +++ b/SYNOP/STATS/fortran-programs/plots_for_one_station.f95 @@ -167,6 +167,7 @@ program plots_for_one_station character*160 :: txt_data_time_series ! see above character*160 :: txt_data_quantiles ! see above character*160 :: txt_data_rank_histogram ! see above + character*160 :: out_dir integer :: year1,year2 ! first and last year of simulation integer :: month1,month2 ! first and last month of simulation integer :: nyear ! number of years = year2-year1+1 @@ -227,7 +228,7 @@ program plots_for_one_station grads_data_time_series,grads_data_rank_histogram,& year1,year2,month1,month2,& txt_data_time_series,txt_data_rank_histogram,txt_data_quantiles,& - include_rank_histograms,l_code_in_char,l_round_6h,miss + include_rank_histograms,l_code_in_char,l_round_6h,out_dir,miss data color/9,14,4,11,5,13,3,10,7,12,8,2,6/ ! @@ -345,7 +346,7 @@ program plots_for_one_station ! ! Write the commands to the auxiliary script files for Grads ! - open(unit=1,form='formatted',file='vrange_commands') + open(unit=1,form='formatted',file=trim(out_dir)//'vrange_commands') write(1,'(A11,2F10.3)')'set vrange ',fmin_down(1),fmax_up(1) write(1,'(A11,2F10.3)')'set vrange ',fmin_down(2),fmax_up(2) write(1,'(A11,2F10.3)')'set vrange ',fmin_down(3),fmax_up(3) @@ -357,7 +358,7 @@ program plots_for_one_station write(1,'(A13,F7.3)')'set vrange 0 ',1.1*(nquant+1)*freqmax(5) ! conversion to relative frequencies close(1) - open(unit=1,form='formatted',file='time_series_commands') + open(unit=1,form='formatted',file=trim(out_dir)//'time_series_commands') do i=1,nyear write(1,'(A12)')'set cthick 4' write(1,'(A12)')'set cstyle 0' @@ -376,37 +377,37 @@ program plots_for_one_station enddo close(1) - open(unit=1,form='formatted',file='coordinates') + open(unit=1,form='formatted',file=trim(out_dir)//'coordinates') write(1,'(F8.3)')lon write(1,'(F8.3)')lat close(1) if(include_rank_histograms)then - open(unit=1,form='formatted',file='msd_and_p-value_00') + open(unit=1,form='formatted',file=trim(out_dir)//'msd_and_p-value_00') write(1,'(A15)')'set strsiz 0.17' write(1,'(A18)')'set string 1 l 4 0' write(1,'(A25,F5.3)')'draw string 1.3 &0 MSD=',msd(1) write(1,'(A29,F5.3)')'draw string 3.0 &0 p-value=',p_value(1) close(1) - open(unit=1,form='formatted',file='msd_and_p-value_06') + open(unit=1,form='formatted',file=trim(out_dir)//'msd_and_p-value_06') write(1,'(A15)')'set strsiz 0.17' write(1,'(A18)')'set string 1 l 4 0' write(1,'(A25,F5.3)')'draw string 1.3 &0 MSD=',msd(2) write(1,'(A29,F5.3)')'draw string 3.0 &0 p-value=',p_value(2) close(1) - open(unit=1,form='formatted',file='msd_and_p-value_12') + open(unit=1,form='formatted',file=trim(out_dir)//'msd_and_p-value_12') write(1,'(A15)')'set strsiz 0.17' write(1,'(A18)')'set string 1 l 4 0' write(1,'(A25,F5.3)')'draw string 1.3 &0 MSD=',msd(3) write(1,'(A29,F5.3)')'draw string 3.0 &0 p-value=',p_value(3) close(1) - open(unit=1,form='formatted',file='msd_and_p-value_18') + open(unit=1,form='formatted',file=trim(out_dir)//'msd_and_p-value_18') write(1,'(A15)')'set strsiz 0.17' write(1,'(A18)')'set string 1 l 4 0' write(1,'(A25,F5.3)')'draw string 1.3 &0 MSD=',msd(4) write(1,'(A29,F5.3)')'draw string 3.0 &0 p-value=',p_value(4) close(1) - open(unit=1,form='formatted',file='msd_and_p-value') + open(unit=1,form='formatted',file=trim(out_dir)//'msd_and_p-value') write(1,'(A15)')'set strsiz 0.17' write(1,'(A18)')'set string 1 l 4 0' write(1,'(A25,F5.3)')'draw string 1.3 &0 MSD=',msd(5) diff --git a/SYNOP/STATS/fortran-programs/rank_histogram_summary_statistics b/SYNOP/STATS/fortran-programs/rank_histogram_summary_statistics new file mode 100755 index 0000000000000000000000000000000000000000..8e727b3be9456b0ccd97e6a2a6822c2669e91214 GIT binary patch literal 29424 zcmeHwdwf*Ywf{LY2?PR}@KVrLhik1tNeCzi3Ni@^o_K>s2uiQQ5R%EGCNptng3zlq z7{+oOrczrfwpwky_G53`&!zqRuz(d4v;@6qqxLGdz9Lndh+3}rh*-_BYT!Ge9sM1}Hbfo9;Ub1-FVwqniyDXFX zt5DU$wC1K&vo4y}TvyoK6l_~lxMudO!dVv;MM6b0xZEV4crU+lDXT>0m7*9PgXcut z6ByF8(`0x$LaKprxJkx%+#_%g$4&Bbag&_UxJThWkxSW%+7Ib7QYNN4%ad`^Ypje@ zplnKctJ^|8W|Yccm8TN?9KxLNMH%>S%z!7IytwVx1sUZ3Is?8d13oVU{s+j=N&goz z@IRV?zaazvh79}%GvF6yz;DhVe@6!V3mN2GmVy7a4ESXk2hnELyP^%9I0veF2CTVb-Nr)DT&0RM`|jf5yB zM6F=Fyt1NnfqzEP3?#pN;Z=*P7nfY=pN$5FkKxSMi_|^E$ zI6QJJcqy7m`4+sKk{LhIf>+}>5xf?>8mkFkV8K(~>MFM2Xt|8h=3toC2oTSl$S9L*zRtuiyDs`=~;H~3wy9G~ks=78< z@HEG&Ym)`9=4PU8vEbEQP51{ac$&M_WpuooW5l!DF#8*^&Zuj!$LM%6=Lv0a<~M*E zJojciJ!kt6Be;>0_4f|qIyX!(TAM$b`jjk@G63-Y4mSp_+JR7Cei-@!;1-~ zrrE!V;VTHHrqSQda4EsmB>Gz!zJy?Evi&O=o+%mYTpn}@2ZE4n*_KA&cEcfCKK zg6^Ln7@Y9p5>5Nib9Nd0-0i4PV;()Dxsbiw~P7L zz0ZMp$bejl507%nB)(;xPnb)V1&ZJ#_XU#s(dQ>Cx7D9P z?wcg{zLS<)oJrrqB)9ye<>pgWI@#fKlKb9YPu32_U7tJ4%`Ji4%|qqV5R;)jpuUss zp)*}yYA!n{>CV$h?z|I{>$1qL{Bc@4OUXT(FzFU5fLGBcin>cB?-^(O- z8p)k`(sDOtk~@>+zIx|nL;n)H60vhRG78#^JnZcDxKP?T!FDY;jY+(Ie0J2qa9 zMMi=LBg5?O+xjV0O%l`@+}zpu`5+G`J804|%$E)uKR3)HrpxHqon<68dtsoA^zQP# zq(MAE)gFJ0Dk;8=OlmIL7yEeaBy+EMWJ-_uf%(EGFY_??$>BM_zjgk>apr*eGzf>2 z$eYiPFWuL%TQ_Q-H#*+YyVrBZH1c(n@749Tedg|tK0Wq))OGO1P2J`Dh_ddMegB5B z({q2P=aJ4>XWO`V`95RIp7q)O4+aOl9bh{6$|jV!>OThucjlj`X}d^SGR0e;uqh7x z#7@}9gw4HAAEnSRO6xJ`+R^CUu_w`~NtN!{UKzt|!?VmzDwnbD2x)ukJj3iUx_VuP z-eV+2#VCcL?==#wZ*OO|j)6(Hjsv9_b5vGBtMO?@N2h-9&!{>5;Lafv)>cZNi17?# z#;VXjz+xbHfC$~OWr!|8D?)T7qG)v#U4!T~0^5!#c{1HG-{Y9yIL0$wuBM9?$7-dT z*jZ#v`@H$9WV&{aQA@R@8z!oUWK(Tj`>}(VUpt5)x6IPQr=`T~BoAnppUMG&-zR~I zgqUl&L+pHjlA6yFbq!OK{p4o=<1y;bu};tWyP@ikBK-!5#iYNHV-7{SP-OWkPZJ_b zHn7O@p^sRhS9q`&R59MNLcbBzsh`u-HH3PPpx%pK=Rl3iw3d7=l9vnWKIeSr%d|Wd z56O2jsInu*nb^_m?&#ImceX9)xMg2mvRBULUTGw%NWGOb?Q|V*q1EO)X#32EgM-{} zf4S+PPF+_ufoc#^xeVx@^*6y4>KJf&*85QF{dYN43k@#EsFr&n7cF7Gvw5x*)C|?) z71RvX;u6#h)$-wC&UdPFzIy~UL$y3C(>hnn9iaZLt7R5sI#$bL7-%z8%g@lv;xQ^d z#w25lfzdm@K1Q<%b)%odaf$Qj2dc>t0p9b;Eql$L4%Be$Td2M`kCn_rgQn_-(K7`B za?!3t++4r87v?-TDV;=BD@jQLbfE#4>J>xh`dBZErVNClM5JnEVlhX6fS`KMU!L+z z>+;-<8K;N1s68Vb{f8--hpP7yie_kp6S^3+Td{Xe?xBMJ8lH;OqqfI7zK@sV`);ez zFz|Quok3EkqPA(6kI^u1Wg)wMFGjPt4U0*@6a?8Eti93`yN9i->c?3ZG5eUiMGt0W z0#IgSj3!Qj6sBCyhDa%JBI1^Hv6)FEwXy!CSRQSP$H?&|b07Ac&t??{_*$2zfWYiX z0WHmzb=eu0L)z3%v%K^8mFYyKTgpb>!bv91eihR;X~iWXK~OazG|$g|5=3eZ-&KuA z5=P%mg!IOA$ICptH!7WXHv3UXD3;Wb{x?j(nArJ04BQDRR){ zDF{f~gm|o)Y$xeXHtFDO(>heEgC?H!H3Lq$Zj6x&=Ag}`R&9u<-wOdlX7mHesRI#A zA`Ub9bMHB%`%^MqdotZH#4JQp-kdh@j z^vC0rm`bT1GP$Y1L3l^UHgIfY^nwYu1zXd@>|G9%mbcOUkAjT#=S z!XDFxO%R_TsR*;5nM~QGSRDFO+jXLkWGmIUi;xg162b`^S%^@oAe~vv%#>4uB_~SA z%G}M$NIBU)8_SSEFkk0^i?_C%7L3QUG#rs(Y3S~E7(K^OhGO;kLmCvjV~tn>(q_8c zQpLWu<5*ly(&VT}d)K=jlw;~I`i?egUdGhqsQEa7_T}o>luo}nA)S7e625aH>GZhN zX`;}H+L+SWGS2_|pOZzQ#pnfKj>l-Xj=aYLq0B^BCAASfKBeJHDGlir!!fMpv1mvy zTXwx6HC)X)aI1CDaLe0i8k)pxx7vi0)#+bT#ox&~4M?31aIV}59CXS`*XbjGa{k-K zn^O1jrj(ffUS8|P{PzL2pZ;jR^vUaD3+j^+^T|2SdhYC{3GfW_5N}VV(>6W{+K`e? zN|n@8nryT5g5?<2|4vHfo%9N9*JMhLDj#@@?8~}3l=Kd!3ip9Li(MDXWL+Sn=1N`| zAvq23M_F+1do!&rA0y%Rx;*n_OZXoaRk?)oq^hSeAyWw-PU*BWt%R?GFtmg;;T)xe z@BAsPgfEkDdkMdMvL$@RqAHhgi7eqoOvqHiJt>{iOZYhmLrX{#;89ALlafZw=hLJN zeZQD4%go-Aj(5d`IhQ8PAqF@b29V7aP0DeIJ#fIma6BF*V*IkkX@;OJ#U?U|7}SSD zIHJchZzQ)A(dVq*^M8^WiOmm)-L93`f7tN{;xJz_%sq#VhYY+lG>^n{%#mpP%=Ktv zs4eVktP2~vE|DK+80JL7Y|Yu@%l9g-j?OVVzKhmo?DERXFpKdU*i0z_@ zz>LxEDvYxM0hd{9$dWu!A8`JNPFu6Br9L$|QU{SWSH;rQj@b-0RDv`?9)#U#nPtk} zNTR9D{Ek6s)ot71eIw0Q3e4wr(jGf8wG&fZpgTHUVyimVX?V(Z6ZyH`!NCgiNh7|Q z(@Vy9g2g1(x=MDehT0|Dxp3xlhPk`ae7o-kq*6j-o!|5z&dDKgtA*6jnPtzfhREg< zDsiI9rJ`WQ_(^81FrN|`R+?`Z=4+(pk=F+YE6qRmEl!i3XP52jjn(ve32O!xnU+){BP!>P2EUz;05Vym1pFIde-a6ed_jB3bCoSe8 zo9%4iDTD>BQt#d6Wx3sbmqF6Oe69fGLHwh@UupiO?|Y!gW=8vGRLlJ_$F4ms*|pmt zRWv1ApBhf4PXn96E(X&|A_yrCFlG<$p>QW$kcW14rp_x0NP49Caec z4%fw{%rxY`@M@Y3s=@5w{Ci@rk&1S`XA8Zner(qp{xEUVFpJpGf#UYkq~0|4I_fi~$`oy*^qK$2`wXw5^DIQ~VM`ymhPlh0} z!rX%qhSN*Nc!K#8YwSX3jgv*7abA%kRVG&ES0;W*I##Uv ztLUwjW-s^FkEz#v8@$|GE2ju-Z>8Rs?5&$#w)9r!UjhC~^OL@}LE#mA{ufTO@1@7? zqIINYLYZ%aFkidPe6J%L7>CjEgk-XG(fgSmW4g2gGrbmn=o9DcS~_AN>)z*c*3=Xx#jP%0I@3_!g<5yaO*jk)`iDja}p;kcS|> z1LINpDAn6cq=u$wTV24{Xqe0L;W(pH0tR5=N(`BUwI-!OuQgjHSIhK&~B!!YTRrS z+91G|jrF{aA~#!P5nf7+kcz^cI+zmGOE)%MJC%Wm97 z)FkZfUs>Mq zQaU@mE;c5|ym^|~!0+>idTwVxfTgGALR%hM9(5dADv~u1JIVRMW}Xow z&~EHSWb8zYzwY|SbjlB2q;maVbnMIG+j!fUy)4*8`u8Ps_IU0UU!Hhk5g2ud5w8|T z{QLO#i(xP60rtTIY~~)D5Wx_4f9ZdvHJTS0RGodL=IUWyzVt4mf zJG%SygAg$uwrA?_6G>s!)3#NK+Ba;q|6M9wd^4lt3CUy`>X$G*#&lVc%!G;@c%I}Z z-Tfxg{iNLeEk|+pZ$1up|2onC{yy&h^IXbI?*5z4rP&|=X7M({jE%wsCMUf(19Rxj zgc?X3{r}~nAb%(SpLOGXf=rVVzq?C)1t9!?dSh~wi7woeW`SBZh;m?kqS4K^HM+Bi zDIR0Alm8Eq!vE*=k};lO{-gWSX3t(8TfwO)}T9ozp0?@|2!-&?w`@c+Tj{y!)@ zN#{CF(kqYMXX{AIr2k(m%vWGD-|NT*eU{Pjgk-Yx+54FuW4g2gGrq0Rt@K;d8*U?$$`Hvp>uX>MJ{^Stz zw!*w|;J3iIWC-axLl?0#WGni6&!~1lA94LHhleHm(i&VDGU6U`<{;LVjyoeSXDlp# zE2Pu-0?^7+?b^m{}!Wy>Xh^;*~(4mE^pS|Zc%>(?9njZKj#!~RHHOG{07 zE&a|i3S?7lq^N$*Osy5aA8lz0);Bc=v`|}=Lcdta2O<^(ev)}(5=_OAQ(Z)h2G-!W zqixaFwx||d)f9~QTQ#N-Qlpm=)A>1rpU@!Csx|v-Lv;avQ_xSpPt{tQBFL_}4yC{k zIirC(ulFkah8CgF?Gk!bu^2zLO~U7RL-k(#ggy|N>gBlH-H2S`Ehw2$JhkG&DOa|& ztirwq_|j+>rPEpqY2PB?CB-@Ig;N*KD!On=$(p7Jewy0S6oo;cm;dr`N!b#w1%0Ch zjXY;et-w!BrRp~Q@yR;x%0fmMa9L_z22qO3oh|G&_Hs)&h&cQ zf;R+1Hw6otAbg6q-nU9^rxaAono_WE`m7=Z7cZMyF>C6D0`j(&RV*%FP~8?xnp4xt z@NvPQ{GlZJ6WWis&PLE0nurcCc&kLopnZO5Y{w-dUpi;*Gy5v%U4Q3o^EGX6seY#W zQaVF{W}Y?OgM+OI-`+boxD4U0rv?YNApCbsn@=MA7-1hma^Q<)hV;<_UHUf`Yx3H0>gaATM$sw7mRu`&OoFjFaLJeg3-gO?sR`UE0Mi%SjTYpOEZw0rg=f$fcv%21_v)i znB-l}WWs1=xPO6r7|PJVh`jteU8Q*wzwIv1^Cq%N^9nX*8+paI4>R&+cMM;Y=L_e} zF3Bq{$tx($^MbE5FTXS|hkpTifPFdiT1^&Jk z*gDF`8MMn#x}khl3lS9DFCz**Y=d>V+){Kp3x+QGEiqloM*28ZXO~2M0-nTJoS(K_ zz-LMrZYW=8$Z)HqlMhUnqAQT>0;`Zl+6}U9vLA$FRZ|OIVeon5p7SGK#AF zu}{e5IW*kI99V}itnxi1;onL+GyMY}>byF8mbc6L{=N)vi#grRQYq|xI_HZ*QvyMyK5A9b#+!`l820yrA@{& zM_+~KsMEnlss07G3unz}`ss7<9N}*F`4Hj&s;q2$$f0G?idQ=ew@a(WGe=)X2we1O zQ7Yg62PjLc2R=u?8?r}@lNs2}^Cz&la-~9$2uKi`eWYJ38l{5S-q{w7#TcZY z&(S`J)~9lGG-_HeqUf+5Jm{uOUPL%5mrSo0{|@n7A4R8AbaXLA{d8^*U8<$%_vYP3 zgavex4_&;xN2uTX3uNcHk%^=-U7oubB)uyM{EReOKp^dO$#BB~jGHGp#_LO6w`k+_YS%aMyxMgu7$&IXq=$CeM#!dHzgX7n zH-SdY;^_nZEEFhJv-%i4f7lp(tnSV`Gw<{uKZ=lG2LsT#M9#;c?YaoW zOL8yGtr$0dk_)4;`zu;*?q#`dH2TPkId$5bFG@q#r!#Hf_5H)(M8()NkZrI zCQ@xvKZHzu0?5B|?b0-D!gf@L%8v`z!GN+#dnQjdm&n$U# zQZitzDcBS(ss%~YR^WDNGz=b7f!c7iDV4t(Y296#UJ<@zstd>D>DmaF8gbn(Xu2y4 zxF0~aTU#b`NK<55TO=$`I&G+}l_f2Vv_%5q*wbkjPiqR+HsfP5O$#*F7pC-%MC#!vbGu1J1!Sv~3I`$T}MB9Rac@5YT z4>#2UtO?gP&J%~ndJ7x)|5Y=*g%B{WA=rj=h4lz$&w*)ammFYAAQGu*Km`PX4bjGV z#Xz+MZ)ytG6-H}TH3uSqYa(ldwT4%Gx#FiNt*p|&6j(*RYYjetdRnJ^TFrpO11*SFS0@eTkQkUlK4Fc6G}*Up4`bNMX#p#qJ5vN*)YxvzsII0DLt6PDu2O%Aw zYR4?4Ef{HP5U(&u4pqG$way9C(+7feoS(+;Lj3;La9~KTI9Ib)W4U#qHWqNd3TFqK&^j5Q#8o3pp3hn7tx{&nyRk~Yz zK9%IS!gs-yrTx#KotY+oCp^`n6Q1@7TsW;e-?DxnnKbVc-eSI{#gY*G%lApmRti_U$uUJZ;tUE6BIM>ELz4&z5_%0E_%*dJ%$-<<*fVg@`d!t>Ej_uBNy zhGCt`OTRcHe&2&vS&OB8H3NTH20WceoR8f>d%mFz{0YX7*62K5y3~Ht52;+P+~mG2 z6X{`d2jTohqHQ>ww^pkQgaZxuHU_7uM_c?jARQlM&P{bgUfvSd-k0?Q%r$+PL{S3~0XdY|R+b#Vy1&w4cb5Z_oG z{ElygEQj=4rKC>zm*@5K3HfOpnf@#Q67bpgR%US|y^~U0Og|k@X1vmJx_mKO|(WFl%L7o$CtM=m;Ad0&cvkp$znPbz+b&+L9&(A zMMD0@nqVC*Rg%_{wUw4fYGuUh7%Ow~ZwFWt$UhvAZX0V3sXv)uP3HHnibRH3kN&cQ z>^Eu5DS7g58f2j2FGzqv{%wdfo&eQWdeK=iD--{@1Fa~swgpRYgwe1F8&!-NOSn}l z3SzlkR8m@jrFw%_goS-kBbMP>QQg`g5{obz7L?V2a0CnUG{6rU7Qi)>K*m~|qgoML zyof&F(~4+83tEWvE($ctF$%vG)RK@$A(p)&g^EKkJ|x8Qx*-HvcocC4!U+E48sD$h z_Un(gv&MExBm<*y2=;8k%7&%sUa##H)hmk&_t?;LpG zrCl=tVNW-ievQiq2;bmIfxloV^*%61!b;9`z&M#Tr1Dqq4+}6)(xvpLJm^yC1tjLx zTmUM)dcSDM^gc-#1|G7LN{^jWz82s~tSY^FU%5eMsNPQs?xFUh{dla|lKQLnfxne6 z9BKVSm(pM5qe9xIq<4)9R__}R$@D%-jEnRq9;H9w=pz4$Y^l<#_nXC%(Vo9bugXs^ zLnwVIZo1U_(v^}?y)OvTBe8G!t>$FSNyF#u;#G1Z!q>o9h zGW|*-S}s~&(WSz5h+EUEUFsfc6u5qZjcn_s(ka}x5V59L>+`5jaEwrlGPLWT0G`q- z`zt@c-6s;LejuQf-U{A~h&8=h?+wTbq4$5*%bx#(AX?MUUf^T)+0?Lc zUm}86B-{rGr`Cz;?}yp>6|BM?NJA@S>O*v?_2hW2mr6Q{I>hIa?m+rpe0}Ed&y$W9d)|y_etNUd7PLVA6ROwXsiY>ib zH$Pk@l4QzX2|OUvcSwXvy8LC*YCInO-iZTI$J2q(Kp`7{{LNa;OWG2o`5Uh{T zFzW6w8g0|sUfXh7^?FY0xqQwky`YsQfs$ycjoPEMdTMH|CXH1p7Nb>jzQ5mEYtNp? z2BbZ`_YW4#UTghc>$iSut>1d=oxSfUuUz5Mbxj4AcBw|Wf(bqbiL0h`Ms<>Q2k&k$fu#Y#hpb0tnhKA977 zUX{qISo4TH@sX~NUN7>GHv2fC;)SFT!oj~>C=!y7)FZxKl5dyfQ?Xa-uVPg{svG^* zNc`*FDAK%qO~yn^q3RFOT1rQ+;4ESvCsbT1z?zB`-&NovJ&!lY>S?QFc}{j& zC-qmcYKJ*ZjT`1)FsG@uxT!JNx~X{6!uiGXFDQwGO6GCBNj}kDcEws&iOefSaegAM zpTch{=QM4aj88{QxKr^f!tXTv#^W~*Kaw{AKdN&feg*j1Wg>fALD^|6sHrdIORiH8 zlisB3Bng`=<0*)#ZAl09lc?j0NG{bUJv;?r+2HFym<|4n1AU1D{ap@ls)HB5^ibv? z|34kzuQ|Zac7X3df!XSH#DV@<2m0F_=)dDYPcAN7xhov#f8ap>vIBg`K~A>={Tc`O z0}k+@gZwW#&})8weRC-2k3_4(QNLgF*Vl!@(QtLpPnSqtAnXqZs+;^bhZ~~-8@47C ztf`KIE!-Hax4|P(qOVPXgj%xFMFLTOu(`>?Ec%*;>Tq>U^k^b2l2o}hO`%AN)~I5rCE6GYMp6kKb(NK| zQ$t2|xIR??Ssg9Z*sL{$L#@HuI;|yibDh>4Xogj_=IW-VPz~jpLmQ!wA5OSNHgR)x zV^FIL2Lc*^sc&B554%cp56%8 zo}(?1j-2G=OMIz?&t*LE+;!jA;lAD4=Pi0&`zyu(;V3k`e?Q#1OS@X)4~BdUC!bIL zUWEZ0ocz8OT6~-&T8Onmo((QVGtOg!%OwQEr`q6ZjwXcH2Dh(cX4&9sej@r(8(gg| z2)@t;r@2uDpAAm)rV54)uI4+!RoUP)x2mwt2B&#eh4nT#&A}=(*x;%y2-jkR)4Z<2 zCL6p+0TH*^;A##g^xZbNnv)6MVT03}L4^lwaGJYS*lvT<+Cqg#ZE&?FA>0ldT&+H%#b-kf}&VP~e)a8b{IKP4N)YXP|aQ+LF&!PNw&aa|8b*-Te&R>QX~(oL@?L z>fS>woWF?j)U}4zbABG>sY?x2asFJ&(-0Z*asD%ur>-?r%K6hNPhD!r%lRV8Q&$@D zaQ+m^Qx_W2IPao7b)BI@9|JJ+gBs+i%M1;0{vFCwR~hQ({2wV_MENexze;)P8bdoc z{~O9vml)d4`R6E4U16w$^G{Qry1-By=X)qmO+VCvd`C*C>zMne3iH_;4D(f^{k20? zYbtuXf|Wka=c5MyM@!2qaXC6BN&&^H9Bb*q;j*5`zZlN2kJWZ z*4331PTxuhZtp!zzvV5C%tJ=^TT6`Y5x1f5H=g}CI?<9aR!T_cKU{d`2W^+kL>;u& zNox)B4}-VBi2HLV0is{OH={hFAN~pvmaQ#YV{Cb|1zpK7pM3PA(NV+Pxt*iV2RKS} zAgVNDcT+ANqg-4w9x%-EgGRjk;Nw&WbZVo}=&3OGl|9LMMc3Y?Gig6a`%_7K%ASy< zRLUu`Z+zU|96Vb|BRT zfxWRGAw@mgNHEYadk4=zo679t)JgVqQ}Y240j-VhA!J$0Js{G4N|(Wo54qlC6H*77 zDSe^N#{AxLTI^~=2XFySl2OvKRHBLuC%N)Fs1}ngJS=3Ezc!QrdvE!hB+5dW<%99^ zH$kwdeDL-_eC?a@@>H}=(< z{j>W({9O=t&Dfuve5@pI?CXGjl7qx|jXMPAJ+`-e-=|gK9*B6rr0b42T{}4aD5pJ~ z-p*-nT$|lfSNL|<;lgu!3TO3!v^1_s0Dw32)fL{3U$ASi^sl3%X8DJp@G>jt3ja^} zhk6enQ(5Fx)OqBz+rt)#06!Yn5>+~YqF|3uh{tOCpdMcy>sr)v`z3_$R@4)P$GSELK{AUAu$7HoZj}w9)(TYuA*>RBkOk2601OvEB%%N) zfsRKSuYp%#i5(qJabGICrtE5RSgYZ&7M4@*^W^TlnBs}Cb$c;P;Tj&dTmw?yqY`>! z3!fMr{S`axSSgY;4Z>jnuWf;^Mo!~FziT^EhWUcAo2H~uOiad%XN=v1r_&x|+@B5e zX(O?-g^Ef%Ndi_?l`+?D>dBA)8f6S_e;?TPeV$J)x2wxR?f}U(PFQZ+lMZqRN$#PM z6VgMT~BiR-_5YYQS^1&?8`1W=_ix@p_$}vl5(+NgCixMY+%8LB(2Ma4^z`v*~Ogg z^kAT|Tiwl5hxy`R;|G|HNpL(tUL*b_jq&(S8j8P8SQ`6d$)3V4{{GZEHX4oH zFW;+am5H`9ZX6xmL!ylKkEh>pjnTOOA((e%B42x4KtIU8<6^_?H}oz;?}u%S?l*D` zePm@~vaZ%oHFr$9Jh9k=X)xzW?IxdCK)qq0F2g@H+V|_j-#6O3_2I1<^W*=eauYG0 zAk5eyGJbDt5Ycu*^u|Vz45P7-)G%?PaVa?!$yNdNB1yZ#-q-+ANT`W*yrzqWUGYc4XX39%tRmXQ=aBDzMja zw-#8@V;Nf|u#n@>}*sMF&%$zufeZgjpZ*ug`iqq5h;St+br+XwWm zU9HR7Z#z(9b)kjHm3$)R-2++Oueyvxz9);!t&qu`?6Hnvy+aa^3C07FEM-J5+}epP zQ2U6haO+;Ul%Z%g!*?Cq@T(yghL73|Z!Eqs8ZVKzCa4#YbBK|1Ahn0Sg!OHQkVKt=b~pW^ ztoD&JINLR&pGIgEcE8z_zU7!o%WC|6_1;8!4?Xc$^rUpR@e8Z>A^``I#ckyNiF#nH z3iJNsp3mYKfGBCW{NznSbhcnYn=!w{ngC_O^b%hr?nI2Y1OFKB`6JRZU5(#Bjbr%B z2f2QU_1TB*6#}~^yU!~X*u3mMuSj6GW%qgS4wGFIE!oT6&sb}czXsVRc%ooS?DhaeLfP@Fx7f1;VOOrs$aY*=%kT9-)Mz8q+Epe!o5l<*Q zkB;#A)T#&ZsULohKs`A5D*Ohsv2U68QD)`77NbF!R%I+?OogD)2-gDhrO`P!%>1J} zOuf%2{yqGp(LI1kb_Y2~d*O7R1~*Gc_O3DNY?LI3*(05an4uSAhVB$=UbaPr*}uDu zmPzJ2hPi+6og1xnI4q1-FNY8}pW|5Vy>(12W!5HZPWxoAGEX#>@F=z*`{e#Gy z&x|)@GOmjWdNe!<;1;`7EJ8?O{U8Q3;^pQ*S^Jx!&FDss+GnL!^a`?c7ROE!u;-iZ zIKm!-g&aoM{bW2oL(lbNM}wMelOw<~=qDdO7%0zSpsd{o%l4#5UzZ#N!pPKTsib6| z4YGMsR1%}cYNnm%h-QMa5BtE2W_egO%frA8?)$xHmIs-T2A#&J?_jfG$R;&bI7&^?c?~h*x_9$-m3@5jH$EM*a*<9|e z>+SxD+$|R4Jt*3F!@QbQNZoy(Df>o-2XYN>m%C~fnlRR9sgsLqY^`CxI$)Pi`|fKo zx_ICHOImIITec><@YqfE668AXyAuNI&}4prb!f6OfpuuI^MU<;++^Edv73|+O#Zee zyAlFrOVYx8;J0@9DNS|;8m7IxPtWEY#U^6&r?bp8w3hou8&b{{#$PU21; zHIf7Dq)wIvv8|KlOS)%#X;v(`tSpG!Z+dBN5Yr6%H9@4mV{+l@EHif~Gzu384PyN$ z2XTTX1}g6i%6PgMn0t9rT#R5tt=NMf#V!u#uFcubUDsvNe=F-O7n&>kGAYC=@+dWP z4L{1&B5f@>m^x|Vgf%>CNS)D=5B z&>H|h+v*4@E|8WZ|F1jG}MMKqUSRW zbE;vs%C2(V11*pC)!#Y@Bwd_>pZ|sHJ-SL9+LDnRRh;3u)ukNn`Jx!IgEwK zP-|H7l>)aAeDZ-sQ2U@T>(Jh1?7j|X;Km-W42D^X`=q#G-QJUDnBhaXx1VRUzdB;f z?$^89e>Y|7-((5e!i`{X(qd!*L2$tp>$n~XiM2-hiDC9)0G z2`b7u0Vk_uRdSE5a*I&ivSbA-c3=B9RnThUo$JKRSVfWf?BjIrfP7H?OUUCmj==3* zr-_q)dZuQ1523IB&FE-_`7~4X`h6&L$6UiaC}dQcZw$79b{8u;o1nl|>H~Yc zTvYGimr=;Dhbw|IiM|T-mFC-n2dQ|~w|5$%;=Z(sPZEkSxV@_&z2dcyAu7)N@fZ`v z6C5Qr7nJS(9#^~|rQ#nS(0h1pm5%qgMPb&^lM#L?NjazXtSF@mHvL ztKthq#Y@vFe!5VE!R=i|=@q{bGDO9hKOSSkc!HzE=AyFQJGkOSDHYEZ6=xz@ab`!w zFSnr*>xzzA@q0k)T=9+<(<^=h=&9nb1Jlc!7-)ra2i`c1Sa&uGW3_O98D7^fyzUpf zVKp;GHI+;Chu zIaFUCtOS=5DjSa3(QxE$gYw7FL?C#qa331ZZo%vxbSRkn)?tTcaTn7<{D z^3s1&lf5x`ev0&r@%I|YxEqT4CaQ9h(lPj+=Bm(BpoaNt41bcm1uTa7%HXdlmeo%j zW2Ai=S~z#O>5!B<(*6Vpb+}f<))qi)pNC=}VL6l0$u?L^>^ANybaQ~4AlX$$NMUQ( zP8F^1No)NYB8qo1IG&J1Vm9ZSi)S%D#(3F~Oa#O9{fgvUQ~x5;U7TU0oI&xr(&-GU zm(HN3p|@u_gCg9vk8mH|I#LrBNv<5eMk6hKzes;70<}EvL%WpW$1eXU!|zwg;YWY6 zB_F6t9exjSot^H}9(kTDl5p6zj6BC!hi%Jm1eUCoWnfoAvgjD{8Afaj$-g*n3{TJG zpmq0AIMzXfv@&*JEq)Y^b697q2P{C5L-%HDljaj`ledqfO+3Qt4!3ZNgk2rlr1n`d zcfz4fRtT&^o9qHM&0fc7lRGmxj?pIj`ZLNnMw{FZ4%?{wK8nn8=2RH_ZMJs0Nwkv> z=T50(haOzVNTbImkjk98PPxKIc$&Is7m;=BG$d<(oJYBds{e(m&?(qaI^jS6GNr=* z&h_u);h)%~>QdzUAD4%!2e6(*jh?PPvQ7*8;LVl!@wB*;WO4Y6h9 zymw@94Jjk(rMqMiaF^dqqAC;XJ(Y>aNXLpTABrVvr8&S$)FU(x{1<3>{-~TSpaYfq zptVGOA|^-p1ehv`+vsy z4ns3>n<3Fbw}X!DS1X>jdLY&13tTnj7zTx77)WyrT>p5C!CCxj9Yl&vAoEMYc!KGV z;#c1q{O~C#Bk83_VG&TQjP#VK#5(xZhuIfo-TKEs>%1<%3x%Yv%h!UQ{V_1?S1-)! zSGS_&j^S5tBrPq!dQh0JKh1nEa4kC-98X9hn_vC9umaKRNXOx89?T7S~52jBjF8&6qg*?JIe+w;JQW7>F(o`Nx- zo!u>;#O?d$dmoFnHBW9b?HpF;$_@WK)PV@DwVO2pcw-3R@$PD=a4=u3Te`CE2P6IHpGL-4TBarUf@C@N{czvrU= zhq$F$(s2)0mX|o%;txv2R9y2xadxTh2=grCx}!r))PKDZZ7kRNJ( zYHywToAZ=EZ%2myu(HB@k^Z)_GBNX!8Jf1%NEB1Ny3G8j!aPzroBohD&*=WhJvfKj zEB2?TckW9{UZwd#rFmqz`F7dp1y}GgJzgquD?>M;jdZoGjZ`RYxKfD(!8ImvG zia_uCum|~;n&Osls6JfX9GQc+)!gWBXpBTf-X97E=#3|IFSMj?(S_Pot<}M3V^bjF zZElQ2@cNV)OIq-nm*&P`9iUpMHOetwbi!nQ&NWAB{To7|C~l)xw+Im39h|Gtbsk?) zNT5aA9H<7AuJbg!PAA$hS48tPXjdEYL%b@&&k(K2UlXbg_#1t+PSO&OdM7in;Sk=ASor-FX%B&Z}4;^Rs7F%y&dF2OgT_cXBPSSXI7k zO>5AmDmT+|tb9icMT?K=fq>S2@w1lSq{FE2ZS`2_s)B2X`pK@Pp zAOlg_hwzKHBL3E%(NUN~3!}?Dg!p;%?>@xSF*OV#p7qh_=wuXl3*rk9e}MQ_#Ps3^ z3i>UpG<}mt|5X0iJo;m9g3}+4mq2bY5iA``2U6PE_+5bCCX`EbT7hRp!PLtO$KRaS zrY$-B;&abG`!j%QUi_}ZZ$J2}sf(5scOv7EG#Q1Ei0I{w7?6x zr3Id)1$q3Q9J1d=$jKo&C&Nh#oV3763!JpTNei5`z)1_7w7^LVoV3763!JpT|5p|m znBZf5cF35vt`z9qrxaA4-koaCPf5$4otCF}u~NtvkybU{$EgW2AH@rvD5!T|s`sVS zgJ2Y}b>(onjCVBqI7NG73JS0Gnwwlc0&9Qycr-+DsoO^pzlWRRgSkG6_?_z%S4liQ zdPsry;)v<^jKWkA@%zGMk|W%r;xHKUaV)E;`D8+!8_?+)1$v;Gf@hqMV+9|`6M0pS zQpSq+kyBEYkK3PIpB71va}dreJr2qIMG`N?{KF#kzWVe6@09KRbs0Y*;~&d-zl>jy z@#``^BI7anJ{CDe#^=a*zKmDM_-Yx~$#|oT@09V^W&DVYe=OtuGJZkEugmy|jMM8g z@Oh!n`brUBwrtr&-dU^Ht}gdh(u?Y6dl!^kh*up8INnY_+dG$Db6o13S2}NA>B6~- zyt9m|^4Uu6c}R#ZBYVIEA(zi+6p<~ae(%!CaaBFWhD35PV{td{^pCk)NH_z`u;>ycC2zvMLaB&@64oD82 z2)gpdo(Zm8Q8I|0C%h+TBYI&*kJGMC<2qaspafFQMd^eq88Bg}i_`e>|C9FZ~(P<9(EzOUVhP zl=RbkX(_0lqCZ&hWkM{YH`P+$V?xCGgFi%Zg*P#hRHjgPKW9nrO3KnaqA#QD1NeEa zBJ9;mkbDili8EwbGm)Y29Z(lFYWg)~xUtAgxI42vR4Cc9`b6C`W};rCy9+*5FtcD%E=*gZxeJ!$6A3BD~f6h5t#Uy6YJY&|5NlLT}f!MJu zNb(gx#1u=WB_uZ~c8so9Owu8E>vV;^x=Cnq_^2;anH8rxP#gW!XKzs&e&Vo6O!I~!g6`rOA zn(B&^dPkzQwSl^l24xL3NZori-Cfk@4o2NYUcN@%!Nu;P%P+f5bLF`IK$qV8U9+aS zPbp!I*<~Jg{e#K+E6?x#tZuNuQFrD2-Jg@NjAoppT5(Q8s5vmFdP8etQ|+8^OS4EU zU0YGPd`>-mIG}i5$@z2V)I?h8n=jt7)!um}7tF;>>#w*H_tI){LkwoBW#qECbHz05 zEpCps1_PJW2ZDicV-2#^;hKg^#K&a3#r6FE%6Z;m2)Lv^*b2VlI>ZYX!L<1BOaR&D zKqOLKj|K!S^qlmgTmyty%0TO6(4K=%cU>#8H0gEbA|P%zXQDNaYCf;Bf5*ECf} z8tATLG*CnL7Flo@V)4m^Vtf<>RKY08;@f$+%?MSa4af_2$ruVlQsqR#xC00c zNFSD290*3kn=hG*+j19>d7^Mp(s)b2AH}C5NFu&J5w6}WJ|Lk5 zf*V@^uLB|#p6tggsx=sCtPciiS)BX?1zMdMQ~3kIS}srHJE4AmOE{2GD!zbGqp{rD zP%Dh3K59V{iC6={#*>}q6LgxYie=~_X`LzAEwlG2m_4<1sO?fZ2?4V9F>*0{YZVUD zhaUx9TkGQlJ^&$OUAtZ-TO}w*JFKt$uFP0brmQtSi44nF*KSZryR0?GA?qq7D{9HY za1g;R>#7V{Ws<7NVx+k+B`6X@LS0(vcU8Jh!gOtQ3Qt-F`$i55tY$6cz13``Jh!4# zaXP=^tC#D3#dn)ruPMG`#e*Qo(f&M|PDhh}HaN9nHaMLdU@4&a)ZRb}q`nke5Y;wFf zP3e;DqU5gzeUZx8VtR%n8+@As{4oc37sDrL>ARwS2l@%nvk2{|_Nug^rEplvd0qBH zb>1`<8L}x%RD|7QHeZ-RtNg8I>4WB zfWHCwMD$O!@y6zh!x0Div9OybOZ!e{drD?ow7>y=y#xFf2l%6aPsDzXzMEnXKVtZ4 zT3;Hx+duYQtk?Bg15oewjTE@{h9EIK36R($lP zMym~k1NC@t58qphHv91jwO{}rJHyx6{Pj(t4S3S6HW~^?{MD_Sw3<+JOH%+3#L<2s z8-;yY%ByI6>a4ms;ID0MZr%(QTh6|+6{N>{gm7h9#TEEOo_a(uf={E#kGqvDqO(HV zPR{RNv8rrkxxf61<@8ZKKejslazg@*<*PLRWtCShEvxijxnjlY@-_Z7WlJl|iO{z2 z%~)E&gkdbnm;cihWh*O|**+0xeYuWaX(B#u=d*o+jXn+MvwfW{`Heq3EvdfEXJ-(f zkxR1R<8B!Xc=hQxJjQ7I5};j5YfEi)GyszaZfXq#YZ?O)`{xDahXVN{e0DC!?-7E5 zKd)ye79YAxQ8f7&C7F{poMPYNrw`wyP$tb_+0Xi{pS_SQbn>M)nWj$L#L{>6Qp@zi zCe?B$l|?W$;PI86ol1TtF*`D|nprB~U$b(V)op7dA%8=4u$J~)R)foyODRJb+S-iS ziLFl++8N}h2~%xjFCqDbMmw9|zabKl){`GTbP|#L@?wgBWEt|aiVj$O+7blv^OPwx z0cycibFi{@BL2vtRub9VjI#yA(XfacREj!KxJ4@o;vAu*Y-t6~AnLUeoLH1J;Cw+V zsofj|vxuW%f!P=cM{wehlJNtFoqaVi$W%*HR4d^vaY;0=32EA?0~cbwO9Bnj3E~w< znw1kAVm~i9R2qWukTlK>>O+u)O9>YsjNrEpFZ}B8!cV>wV_hpjQ)wme*v){TCV>sD z^$=PetS6+%;^FI%N>^{#5DsiqIXbjaX&6l<>9dxSS4y%bn7=JS`wdK`ShI_;(Blt8-xoLO7^n_NER@cgk9xQlbi z`=2OTSNBt^B>&wKF$OebC&fQi z3Rs4iNEN@jKYLIXsMg1loMosq#dN;`ds0h(b^r4sS26NGH3_|^T~0ZB;vOA4xd#jom5H+zVGDG?#4`@^1bBJY!eiGK=y z>HJ>;jOVzNd68&+5+t#DX4f0(sq7L?XM>= znHF9mVs%w~Dt{Lec7ApK5T(0D2+|B9gKN6}3BZV7*pyWTO7-g)=SMkef{OVkwYrSA_Dqo7zUX}dq5}@{f{p$rl@yqUPjXz1Q z(Sa4|qUx{qK?Car#ddj4BXXMNRS6mApz>7z(lof@Uz7$XS_&$jAo&F}dG%Jyv?7#Q zRUbu3FD6YRVU%}+plDMAOERR>&T`=2UMm>V{YN_gdG-+8bexETPpd}?N`_! z_!p!NSjDg6m6Bgp&x%$wiR7h input.txt - read station longitude latitude < input.txt + head -`expr ${line_number}` ${station_list} | tail -1 > $rootdir/SYNOP/output/scratch/$experiment/input.txt + read station longitude latitude < $rootdir/SYNOP/output/scratch/$experiment/input.txt echo " **********" echo " Synop station ID, longitude, latitude: ${station} ${longitude} ${latitude}" @@ -205,7 +208,7 @@ echo " Synop station ID, longitude, latitude: ${station} ${longitude} ${latitu # When simulation data are available, a means to retrieve the correct data points from it must be designed echo " Selecting the simulation data (mimicked this far by observations) for synop station: ${station}" # -odb_command="odb sql 'select year,month,day,hour,value where station=${station} and (year>=${year1} and year<=${year2}) and (hour=0 or hour=6 or hour=12 or hour=18) and variable=${variable}' -i ${sim_file} -o sim_data" +odb_command="odb sql 'select year,month,day,hour,value where station=${station} and (year>=${year1} and year<=${year2}) and (hour=0 or hour=6 or hour=12 or hour=18) and variable=${variable}' -i ${sim_file} -o $rootdir/SYNOP/output/scratch/$experiment/sim_data" eval ${odb_command} # ############################################################### @@ -214,12 +217,12 @@ echo " Selecting the quantiles for synop station: ${station}" # 00, 06, 12 and 18 UTC are picked separately, since # select \* does not allow for parentheses (very strange) # -rm quantile_selection_* -odb sql select \* where hour=0 and station=${station} -i ${quant_file} -o quantile_selection_00 -odb sql select \* where hour=6 and station=${station} -i ${quant_file} -o quantile_selection_06 -odb sql select \* where hour=12 and station=${station} -i ${quant_file} -o quantile_selection_12 -odb sql select \* where hour=18 and station=${station} -i ${quant_file} -o quantile_selection_18 -cat quantile_selection_* > quantile_selection +#rm quantile_selection_* +odb sql select \* where hour=0 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_00 +odb sql select \* where hour=6 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_06 +odb sql select \* where hour=12 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_12 +odb sql select \* where hour=18 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_18 +cat $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_* > $rootdir/SYNOP/output/scratch/$experiment/quantile_selection # ################################################################ # @@ -228,7 +231,7 @@ cat quantile_selection_* > quantile_selection # of the time period (included in the name of msd_bootstrap_file) # and (to a smaller extent) the selected station. # -odb sql select \* where station=${station} -i ${msd_bootstrap_file} -o msd_bootstrap_selection +odb sql select \* where station=${station} -i ${msd_bootstrap_file} -o $rootdir/SYNOP/output/scratch/$experiment/msd_bootstrap_selection # ############################################################### # Produce the rank histogram for one station. @@ -251,16 +254,16 @@ fi # -./rank_histograms_one_station < input.txt - read station longitude latitude < input.txt + head -`expr ${line_number}` ${station_list} | tail -1 > $rootdir/SYNOP/output/scratch/$experiment/input.txt + read station longitude latitude < $rootdir/SYNOP/output/scratch/$experiment/input.txt echo " **********" echo " Synop station ID, longitude, latitude: ${station} ${longitude} ${latitude}" # @@ -207,14 +211,14 @@ echo " Synop station ID, longitude, latitude: ${station} ${longitude} ${latitu # When simulation data are available, a means to retrieve the correct data points from it must be designed. echo " Selecting the simulation data (mimicked this far by observations) for synop station: ${station}" # -odb_command="odb sql 'select year,month,day,hour,value where station=${station} and (year>=${year1} and year<=${year2}) and (hour=0 or hour=6 or hour=12 or hour=18) and variable=${variable}' -i ${sim_file} -o sim_data" +odb_command="odb sql 'select year,month,day,hour,value where station=${station} and (year>=${year1} and year<=${year2}) and (hour=0 or hour=6 or hour=12 or hour=18) and variable=${variable}' -i ${sim_file} -o $rootdir/SYNOP/output/scratch/$experiment/sim_data" eval ${odb_command} ################################################################ # Select the rank histogram data for the station echo " Selecting rank histogram data for synop station: ${station}" # -odb sql select \* where station=${station} -i ${rh_file} -o rank_histograms_${variable}_${station}_${year1}${month1}-${year2}${month2} +odb sql select \* where station=${station} -i ${rh_file} -o $rootdir/SYNOP/output/scratch/$experiment/rank_histograms_${variable}_${station}_${year1}${month1}-${year2}${month2} # ############################################################### # Select the quantiles for the station @@ -223,12 +227,12 @@ echo " Selecting the quantiles for synop station: ${station}" # 00, 06, 12 and 18 UTC are picked separately, since # select \* does not allow for parentheses (very strange) # -rm quantile_selection_* -odb sql select \* where hour=0 and station=${station} -i ${quant_file} -o quantile_selection_00 -odb sql select \* where hour=6 and station=${station} -i ${quant_file} -o quantile_selection_06 -odb sql select \* where hour=12 and station=${station} -i ${quant_file} -o quantile_selection_12 -odb sql select \* where hour=18 and station=${station} -i ${quant_file} -o quantile_selection_18 -cat quantile_selection_* > quantile_selection +#rm quantile_selection_* +odb sql select \* where hour=0 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_00 +odb sql select \* where hour=6 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_06 +odb sql select \* where hour=12 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_12 +odb sql select \* where hour=18 and station=${station} -i ${quant_file} -o $rootdir/SYNOP/output/scratch/$experiment/quantile_selection_18 +cat quantile_selection_* > $rootdir/SYNOP/output/scratch/$experiment/quantile_selection # ############################################################## # @@ -240,11 +244,13 @@ cat quantile_selection_* > quantile_selection # in GrADS, but plotting in GrADS is omitted in this script. # ############################################################### -./plots_for_one_station < quantile_selection l_code_in_char=.false.,l_round_6h=.false. &END EOF - +fi +if [ 1 -eq 1 ]; then + $SRC_OBSALL_DIR/SYNOP/STATS/fortran-programs/plots_for_one_station < standard_plot.cfg +cat < $rootdir/SYNOP/output/scratch/$experiment/standard_plot.cfg [data] variable=${variable} station_id=${station} @@ -270,9 +293,9 @@ month_beg=${month1} month_end=${month2} [input] -sim_data=time_series_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt -quantile_sel=quantiles_${variable}_${station}.txt -rank_hists=rank_histogram_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt +sim_data=$rootdir/SYNOP/output/scratch/$experiment/time_series_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt +quantile_sel=$rootdir/SYNOP/output/scratch/$experiment/quantiles_${variable}_${station}.txt +rank_hists=$rootdir/SYNOP/output/scratch/$experiment/rank_histogram_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt [output] fig_name=${figure_dir}/standard_plot_${variable}_${station}_${year1}${month1}-${year2}${month2}_python.png @@ -281,27 +304,27 @@ EOF ################################################################ # echo " Calling python to plot quantiles rank histogram for synop station: ${station}" -python3 python/plot_quantiles_rankhist_synop.py standard_plot.cfg +python3 python/plot_quantiles_rankhist_synop.py $rootdir/SYNOP/output/scratch/$experiment/standard_plot.cfg ################################################################ # Remove unnecessary files echo " Removing unnecessary temporary files ..." -rm input.txt -rm vrange_* -rm msd_and_p-value -rm quantile_selection -rm rank_histograms_${variable}_${station}_${year1}${month1}-${year2}${month2} -rm sim_data +#rm input.txt +#rm vrange_* +#rm msd_and_p-value +#rm quantile_selection +#rm rank_histograms_${variable}_${station}_${year1}${month1}-${year2}${month2} +#rm sim_data ###rm msd_bootstrap_selection ###rm standard_plot_one_station -rm time_series_commands -rm time_series_${variable}_${station}_${year1}${month1}-${year2}${month2}.grads -rm rank_histogram_${variable}_${station}_${year1}${month1}-${year2}${month2}.grads -rm standard_plot.cfg -rm time_series_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt -rm quantiles_${variable}_${station}.txt -rm rank_histogram_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt +#rm time_series_commands +#rm time_series_${variable}_${station}_${year1}${month1}-${year2}${month2}.grads +#rm rank_histogram_${variable}_${station}_${year1}${month1}-${year2}${month2}.grads +#rm standard_plot.cfg +#rm time_series_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt +#rm quantiles_${variable}_${station}.txt +#rm rank_histogram_${variable}_${station}_${year1}${month1}-${year2}${month2}.txt # ((line_number++)) done @@ -309,7 +332,7 @@ done ################################################################ # The Fortran executable is not needed any more: # -rm plots_for_one_station -rm quantile_selection_* -rm msd_and_p-value_* -rm coordinates +#rm plots_for_one_station +#rm quantile_selection_* +#rm msd_and_p-value_* +#rm coordinates diff --git a/SYNOP/STATS/python/plot_p_values_map_synop.py b/SYNOP/STATS/python/plot_p_values_map_synop.py index 4c17da7b5..bc2431534 100644 --- a/SYNOP/STATS/python/plot_p_values_map_synop.py +++ b/SYNOP/STATS/python/plot_p_values_map_synop.py @@ -34,7 +34,7 @@ def read_data(p_values_file): return p_values_data -def plot_p_values(p_values): +def plot_p_values(p_values,figname): ''' Description: plot p values on a map restricted to an area limited by lons (19, 32) and lats (59, 71) Input: numpy array @@ -122,21 +122,24 @@ def plot_p_values(p_values): fig.suptitle('SYNOP stations: p-values for ' + variable_shortnames[variable] +'\nquantiles in ' + timestring, fontsize=fs1) # save figure - plt.savefig('p_values.png', dpi=300) + #plt.savefig('p_values.png', dpi=300) + plt.savefig(figname, dpi=300) -def main(p_values_file): +def main(p_values_file,figurename): ''' Main file: (1) reads in p values from file, (2) plot p values on a map ''' p_values_data = read_data(p_values_file) - plot_p_values(p_values_data) + plot_p_values(p_values_data,figurename) if __name__=='__main__': p_values_file = sys.argv[1] - timestring = sys.argv[2] + timestring = sys.argv[2] # Not used????????? + figurename = sys.argv[3] - main(p_values_file) + #main(p_values_file) # original + main(p_values_file,figurename) diff --git a/SYNOP/STATS/python/plot_rankhist_sum_all_stations_synop.py b/SYNOP/STATS/python/plot_rankhist_sum_all_stations_synop.py index 83d945b53..4fbcc46a9 100644 --- a/SYNOP/STATS/python/plot_rankhist_sum_all_stations_synop.py +++ b/SYNOP/STATS/python/plot_rankhist_sum_all_stations_synop.py @@ -17,7 +17,7 @@ import matplotlib.pyplot as plt from matplotlib.ticker import (MultipleLocator, AutoMinorLocator) import sys -def plot_rank_hist(p_freq, q_freq, number_of_stations, p01, p1, p5, max_freq_p, max_freq_q): +def plot_rank_hist(p_freq, q_freq, number_of_stations, p01, p1, p5, max_freq_p, max_freq_q,figname): ''' Input: p_freq, q_freq, number of stations, p01, p1, p5, max freq p, max freq q Description: Plots p and q frequencies and saves the figure with figname @@ -103,7 +103,7 @@ def plot_rank_hist(p_freq, q_freq, number_of_stations, p01, p1, p5, max_freq_p, fig.suptitle(title, fontsize=fs1) # save figure - figname='rank_hist_sumstats.png' + #figname='rank_hist_sumstats.png' plt.savefig(figname, dpi=300) def read_data(rh_summary_file): @@ -131,7 +131,8 @@ if __name__=='__main__': p5 = sys.argv[5] max_freq_p = float(sys.argv[6]) max_freq_q = float(sys.argv[7]) + figname = sys.argv[8] p_freq, q_freq = read_data(rh_summary_file) - plot_rank_hist(p_freq, q_freq, number_of_stations, p01, p1, p5, max_freq_p, max_freq_q) + plot_rank_hist(p_freq, q_freq, number_of_stations, p01, p1, p5, max_freq_p, max_freq_q,figname) diff --git a/SYNOP/STATS/summary_rank_histograms_all_stations.sh b/SYNOP/STATS/summary_rank_histograms_all_stations.sh index e5b7e385f..267b0e217 100755 --- a/SYNOP/STATS/summary_rank_histograms_all_stations.sh +++ b/SYNOP/STATS/summary_rank_histograms_all_stations.sh @@ -103,7 +103,7 @@ fi echo " Compiling the Fortran program that produces the rank histogram summary statistics ..." echo " fortran-programs/rank_histogram_summary_statistics.f95" -gfortran fortran-programs/rank_histogram_summary_statistics.f95 -o rank_histogram_summary_statistics +#gfortran fortran-programs/rank_histogram_summary_statistics.f95 -o rank_histogram_summary_statistics ################################################################## # @@ -111,7 +111,8 @@ gfortran fortran-programs/rank_histogram_summary_statistics.f95 -o rank_histogra # # 1) Rank histogram directory and input name file name without extension echo " Directory for rank histogram ..." -rh_dir=rank_histograms/${variable}_${year1}${month1}-${year2}${month2} +#rh_dir=rank_histograms/${variable}_${year1}${month1}-${year2}${month2} +rh_dir=$rootdir/SYNOP/output/scratch/$experiment/rank_histograms/${variable}_${year1}${month1}-${year2}${month2} echo " $rh_dir" rh_file=${rh_dir}/rank_histograms_${variable}_${year1}${month1}-${year2}${month2}_all_stations rh_summary_file=${rh_dir}/rank_histograms_${variable}_${year1}${month1}-${year2}${month2}_summary @@ -121,7 +122,8 @@ out_file=${rh_dir}/rh_summary_${variable}_${year1}${month1}-${year2}${month2} # 3) Directory for figures echo " Directory for figures ..." -figure_dir=figures +#figure_dir=figures +figure_dir=$rootdir/SYNOP/output/figures/$experiment echo " $figure_dir" ################################################################## @@ -135,7 +137,7 @@ odb sql select \* -i ${rh_file}.odb -o ${rh_file}.txt # echo " Calculating the rank histogram summary statistics ..." # -./rank_histogram_summary_statistics < $tmp_file_tstamps ls $inp_dir_gsvmoddata > $tmp_file_tstamps tail -n 1 "$tmp_file_tstamps" | tee >(wc -c | xargs -I {} truncate "$tmp_file_tstamps" -s -{}) @@ -142,6 +154,7 @@ echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" #./synop_obs.sh 2020 01 20 15 00 00 $varMETnum $lon_val_min $lon_val_max $lat_val_min $lat_val_max b_min="00" b_sec="00" +pwd ./synop_obs.sh $b_yy $b_mm $b_dd $b_hh $b_min $b_sec $varMETnum $lon_val_min $lon_val_max $lat_val_min $lat_val_max echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" @@ -173,9 +186,9 @@ echo " SCRIPT --- graph_mod_obs.py" echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" #python graph_mod_obs.py 2020012000 2t #python graph_mod_obs.py 2020012015 $varMETstr -python graph_mod_obs.py $b_yyyymmddhh $varMETstr +python graph_mod_obs.py $inp_dir_dataobs/ $inp_dir_datamod/ $inp_dir_graphs/ $b_yyyymmddhh $varMETstr -mv *.png GRAPHS/ +#mv *.png $inp_dir_graphs # GRAPHS/ echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo " ..... STEP 4 - COMPLETED ....." diff --git a/SYNOP/synop_mod.sh b/SYNOP/synop_mod.sh index f5a0cd903..c1bd15d89 100755 --- a/SYNOP/synop_mod.sh +++ b/SYNOP/synop_mod.sh @@ -29,17 +29,17 @@ echo "Bash version ${BASH_VERSION}..." echo " Input path to location of files with extracted (using gsv_interface) modelled data:" #inp_path_mod="/projappl/project_465000454/ama/DEOBS/SYNOP/GSVMODDATA/" -inp_path_mod="GSVMODDATA/" +inp_path_mod=$rootdir/SYNOP/output/scratch/$experiment/GSVMODDATA/ #"GSVMODDATA/" echo " $inp_path_mod" echo " Input path to location of files with extracted (using sql) observed data:" #inp_path_obs="/projappl/project_465000454/ama/DEOBS/SYNOP/DATAOBS/" -inp_path_obs="DATAOBS/" +inp_path_obs=$rootdir/SYNOP/output/scratch/$experiment/DATAOBS/ #"DATAOBS/" echo " $inp_path_obs" echo " Output path to location of modelled data interpolated to coordinates of synop stations:" #out_path_mod="/projappl/project_465000454/ama/DEOBS/SYNOP/DATAMOD/" -out_path_mod="DATAMOD/" +out_path_mod=$rootdir/SYNOP/output/scratch/$experiment/DATAMOD/ #"DATAMOD/" echo " $out_path_mod" # Input name of nc-file with modelled data extracted with gsv_interface @@ -60,7 +60,7 @@ infile=$inp_path_obs$infile # Name of output file with interpolated modelled data to positions of synop stations vardef="_" -outfile="mod_synop$vardef$timefilename$vardef$varMETstr.dat" +outfile=$rootdir/SYNOP/output/scratch/$experiment/mod_synop$vardef$timefilename$vardef$varMETstr.dat #"mod_synop$vardef$timefilename$vardef$varMETstr.dat" echo " Name of output file for interpolated mod data: $outfile" @@ -87,7 +87,7 @@ echo " Number of records (numrec) in obs data file: $numrec" echo " Creating unstructured grid for 2D geographical locations of synop stations ..." -unstr_grid_file="grid_unstructured_synop.txt" +unstr_grid_file=$rootdir/SYNOP/output/scratch/$experiment/grid_unstructured_synop.txt #"grid_unstructured_synop.txt" echo " Name of file with unstructured grid: $unstr_grid_file" echo "gridtype = unstructured" > $unstr_grid_file # adding grid type @@ -108,8 +108,8 @@ done < $infile echo " CDO calculating weights for unstructured grid ... " #cdo genbil,$unstr_grid_file -selname,2t $ncinfile weights_synop.nc -cdo genbil,$unstr_grid_file -selname,$varMETstr $ncinfile weights_synop.nc -cdo remap,$unstr_grid_file,weights_synop.nc $ncinfile tmpfile_synop_new.nc +cdo genbil,$unstr_grid_file -selname,$varMETstr $ncinfile $rootdir/SYNOP/output/scratch/$experiment/weights_synop.nc +cdo remap,$unstr_grid_file,$rootdir/SYNOP/output/scratch/$experiment/weights_synop.nc $ncinfile $rootdir/SYNOP/output/scratch/$experiment/tmpfile_synop_new.nc while IFS=' ' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 do @@ -135,12 +135,12 @@ do # without weights - original ... #cdo -s -outputtab,date,time,lon,lat,value -remapnn,"lon=${longitude}_lat=${latitude}" -selvar,${varMETstr} $ncinfile > tmpout_${station}_${variable}.txt # with weight - modified - cdo -s -outputtab,date,time,lon,lat,value -remapnn,"lon=${longitude}_lat=${latitude}" -selvar,${varMETstr} tmpfile_synop_new.nc > tmpout_${station}_${variable}.txt - cat tmpout_${station}_${variable}.txt | sed '1,1d' > tmpoutrev_${station}_${variable}.txt # deliting header line - sed -i s/$/" "${variable}/ tmpoutrev_${station}_${variable}.txt # adding variable ID - sed -i s/$/" "${station}/ tmpoutrev_${station}_${variable}.txt # adding station ID - cat tmpoutrev_${station}_${variable}.txt >> $outfile # adding record to summary file - rm -rf tmpout_*.txt tmpoutrev_*.txt # cleaning tmp-files + cdo -s -outputtab,date,time,lon,lat,value -remapnn,"lon=${longitude}_lat=${latitude}" -selvar,${varMETstr} $rootdir/SYNOP/output/scratch/$experiment/tmpfile_synop_new.nc > $rootdir/SYNOP/output/scratch/$experiment/tmpout_${station}_${variable}.txt + cat $rootdir/SYNOP/output/scratch/$experiment/tmpout_${station}_${variable}.txt | sed '1,1d' > $rootdir/SYNOP/output/scratch/$experiment/tmpoutrev_${station}_${variable}.txt # deliting header line + sed -i s/$/" "${variable}/ $rootdir/SYNOP/output/scratch/$experiment/tmpoutrev_${station}_${variable}.txt # adding variable ID + sed -i s/$/" "${station}/ $rootdir/SYNOP/output/scratch/$experiment/tmpoutrev_${station}_${variable}.txt # adding station ID + cat $rootdir/SYNOP/output/scratch/$experiment/tmpoutrev_${station}_${variable}.txt >> $outfile # adding record to summary file + rm -f $rootdir/SYNOP/output/scratch/$experiment/tmpout_*.txt #$rootdir/SYNOP/output/scratch/$experiment/tmpoutrev_*.txt # cleaning tmp-files done < $infile @@ -151,8 +151,8 @@ sed -i 's/:/ /' $outfile sed -i 's/:/ /' $outfile # Removing extra temporary files ... -rm -rf tmpfile_synop_new.nc weights_synop.nc -rm -rf grid_unstructured_synop.txt +rm -r $rootdir/SYNOP/output/scratch/$experiment/tmpfile_synop_new.nc $rootdir/SYNOP/output/scratch/$experiment/weights_synop.nc +rm -r $rootdir/SYNOP/output/scratch/$experiment/grid_unstructured_synop.txt ############################################################################### @@ -175,14 +175,15 @@ header_mod_synop_data="year@descr:integer month@descr:integer day@descr:integer sed -i "1i ${header_mod_synop_data}" $outfile # Adding data to odb file ... -mod_synop_odb="/scratch/project_465000454/ama/open_data_ODB/synop_mod_data_2010-2021.odb" # Opt1 - new +#mod_synop_odb="/scratch/project_465000454/ama/open_data_ODB/synop_mod_data_2010-2021.odb" # Opt1 - new ##mod_synop_odb="/scratch/project_465000454/ama/open_data_ODB/synop_open_data_2010-2021.odb" # Opt2 - original +mod_synop_odb=$rootdir/SYNOP/output/ODB_data/$experiment/simulated_synop_data.odb #synop_open_data_2010-2021.odb echo " Path and Name of odb-file with saved records:" echo " $mod_synop_odb" -odb import -d ' ' $outfile tmp_mod_synop_odb.odb -cat tmp_mod_synop_odb.odb >> $mod_synop_odb -rm -rf tmp_mod_synop_odb.odb +odb import -d ' ' $outfile $rootdir/SYNOP/output/scratch/$experiment/tmp_mod_synop_odb.odb +cat $rootdir/SYNOP/output/scratch/$experiment/tmp_mod_synop_odb.odb >> $mod_synop_odb +rm -f $rootdir/SYNOP/output/scratch/$experiment/tmp_mod_synop_odb.odb # Deleting header line as 1st line in mod_synop_YYYYMMDDHH.dat file ... sed -i -e "1d" $outfile diff --git a/SYNOP/synop_obs.sh b/SYNOP/synop_obs.sh index d0c9fdfff..b3b0037b1 100755 --- a/SYNOP/synop_obs.sh +++ b/SYNOP/synop_obs.sh @@ -1,7 +1,7 @@ #!/bin/bash -echo "Bash version ${BASH_VERSION}..." +#echo "Bash version ${BASH_VERSION}..." #module list -pwd + ######################################################################## # DestinE Climate DT Project # @@ -93,7 +93,8 @@ fi # On Lumi (ODB as a single file) echo " Path to dir where ODB file is placed:" -in_dir=/scratch/project_465000454/ama/open_data_ODB +#in_dir=/scratch/project_465000454/ama/open_data_ODB +in_dir=$rootdir/SYNOP/input/ODB_data echo " $in_dir" echo " Name of ODB file containing all synop obs data:" @@ -101,7 +102,8 @@ in_file=synop_open_data_2010-2021.odb echo " $in_file" echo " Name of file for extracted synop obs data at geographical coordinates of stations:" -out_file=obs_synop_${yyyymmdd}${hour} +#out_file=obs_synop_${yyyymmdd}${hour} +out_file=$rootdir/SYNOP/output/scratch/$experiment/DATAOBS/obs_synop_${yyyymmdd}${hour} echo " $out_file" rm -f ${out_file} @@ -166,10 +168,17 @@ echo " year, month, day, hour, minute, second : $year $month $day $hour $mi # 2020 1 20 0 0 0 24.956800 60.326698 39 3.500000 100968 echo " Cleaning and moving extracted from odb synop obs data into separate folder DATAOBS ..." -cat ${out_file} | sed '1,1d' > ${out_file}.dat -rm -rf ${out_file} -pwd -mv ${out_file}.dat DATAOBS/ +if [ $test_run == 'true' ]; then + echo "### Note: running synop_obs.sh in test mode ###" + echo "2020 1 20 0 0 0 23.576000 68.602997 39 1.100000 102019" > ${out_file}.dat + echo "2020 1 20 0 0 0 20.850901 69.042801 39 1.200000 102017" >> ${out_file}.dat + echo "2020 1 20 0 0 0 25.423300 64.142601 39 1.300000 101695" >> ${out_file}.dat +else + cat ${out_file} | sed '1,1d' > ${out_file}.dat +fi +rm -f ${out_file} +#pwd +#mv ${out_file}.dat DATAOBS/ # Some more 'odb sql' examples: # diff --git a/compile_programs.sh b/compile_programs.sh new file mode 100644 index 000000000..c2613347e --- /dev/null +++ b/compile_programs.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Use this to compile all Fortran programs before containerization if they are not compiled yet. +# List of programs that are used during the run: + +# SYNOP: +# SYNOP/STATS/fortran-programs/rank_histograms_one_station.f95 +# SYNOP/STATS/fortran-programs/plots_for_one_station.f95 +# SYNOP/STATS/fortran-programs/rank_histogram_summary_statistics.f95 + +# TEMP: +# RADSOUND/STATRS/fortran-programs/rank_histograms_one_station.f95 +# RADSOUND/STATRS/fortran-programs/plots_for_one_station.f95 +# RADSOUND/STATRS/fortran-programs/rank_histogram_summary_statistics.f95 + +gfortran SYNOP/STATS/fortran-programs/rank_histograms_one_station.f95 -o SYNOP/STATS/fortran-programs/rank_histograms_one_station +gfortran SYNOP/STATS/fortran-programs/plots_for_one_station.f95 -o SYNOP/STATS/fortran-programs/plots_for_one_station +gfortran SYNOP/STATS/fortran-programs/rank_histogram_summary_statistics.f95 -o SYNOP/STATS/fortran-programs/rank_histogram_summary_statistics + +gfortran RADSOUND/STATRS/fortran-programs/rank_histograms_one_station.f95 -o RADSOUND/STATRS/fortran-programs/rank_histograms_one_station +gfortran RADSOUND/STATRS/fortran-programs/plots_for_one_station.f95 -o RADSOUND/STATRS/fortran-programs/plots_for_one_station +gfortran RADSOUND/STATRS/fortran-programs/rank_histogram_summary_statistics.f95 -o RADSOUND/STATRS/fortran-programs/rank_histogram_summary_statistics + + diff --git a/load_modules.sh b/load_modules.sh index 3f378da57..7dad629c0 100755 --- a/load_modules.sh +++ b/load_modules.sh @@ -1,7 +1,9 @@ #!/bin/bash -# In the case of testing the software, export the following variable +# In the case of testing the software, export the following variables export test_run=true +export rootdir=/projappl/project_465000454/data/OBSALL +export experiment='a001' echo "#######################################################" echo "### OBSALL Apps ###" @@ -31,6 +33,6 @@ module load metkit/1.11.0-cpeCray-23.03.lua ## later upgrade OBSALL Apps for Polytope tool ## (required for SATELLITE observations) in Phase-2 -module list +#module list diff --git a/quick_test_as_batchjob.bash b/quick_test_as_batchjob.bash index 7a321e03c..46a7c132d 100644 --- a/quick_test_as_batchjob.bash +++ b/quick_test_as_batchjob.bash @@ -1,7 +1,7 @@ #!/bin/bash -l #SBATCH --job-name=test_obsall # Job name #SBATCH --output=test_obsall.eo # Name of stdout output file -#SBATCH --error=test_obsall_2.eo# Name of stderr error file +#SBATCH --error=test_obsall.eo# Name of stderr error file #SBATCH --partition=small # Partition (queue) name small, debug #SBATCH --ntasks=1 # One task (process) #SBATCH --cpus-per-task=1 # Number of cores (threads) @@ -9,9 +9,12 @@ #SBATCH --time=12:00:00 # Run time (hh:mm:ss) #SBATCH --account=project_465000454 # Project for billing +module purge source load_modules.sh # In the case of testing the software, export the following variable export test_run=true +export experiment='a002' -python run_obsall.py +#python run_obsall.py +./run_obsall.sh diff --git a/run_obsall.sh b/run_obsall.sh index 9b7e60608..595446124 100755 --- a/run_obsall.sh +++ b/run_obsall.sh @@ -4,26 +4,32 @@ echo "Bash version ${BASH_VERSION}..." ## OBSALL Apps (3 parts: SYNOP, TEMP, AMSU-A observations) ## Loading necessary modules ... -module use /project/project_465000454/devaraju/modules/LUMI/23.03/C -module load LUMI/23.03 -module load partition/C -module load PrgEnv-gnu -module load ecCodes/2.32.0-cpeCray-23.03.lua -module load odb_api/0.18.1-cpeCray-23.03.lua -module load python-climatedt/3.11.3-cpeCray-23.03.lua -module load pyfdb/0.0.2-cpeCray-23.03.lua -module load cray-hdf5/1.12.2.3 -module load cray-netcdf/4.9.0.3 -module load rttov/13.2 -module load radsim/3.2 -module load fdb/5.11.94-cpeCray-23.03.lua -module load eckit/1.25.0-cpeCray-23.03.lua -module load metkit/1.11.0-cpeCray-23.03.lua +#module use /project/project_465000454/devaraju/modules/LUMI/23.03/C +#module load LUMI/23.03 +#module load partition/C +#module load PrgEnv-gnu +#module load ecCodes/2.32.0-cpeCray-23.03.lua +#module load odb_api/0.18.1-cpeCray-23.03.lua +#module load python-climatedt/3.11.3-cpeCray-23.03.lua +#module load pyfdb/0.0.2-cpeCray-23.03.lua +#module load cray-hdf5/1.12.2.3 +#module load cray-netcdf/4.9.0.3 +#module load rttov/13.2 +#module load radsim/3.2 +#module load fdb/5.11.94-cpeCray-23.03.lua +#module load eckit/1.25.0-cpeCray-23.03.lua +#module load metkit/1.11.0-cpeCray-23.03.lua + +#VVV for convenient testing in terminal VVV# +#source load_modules.sh +#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA# ## Import required libraries ## import sys ## import subprocess +export SRC_OBSALL_DIR=$(pwd) + ## --- Processing ground-based observations (SYNOP) echo "**********************************************************" echo "DestinE Climate Digital Twin - OBSALL Apps" @@ -37,6 +43,7 @@ cd SYNOP pwd ./main_synop.sh pwd +exit # Only SYNOP prepared properly for containerization. ## --- Processing radiosounding observations (TEMP) echo "**********************************************************" -- GitLab