Changeset 868 in lmdz_wrf
- Timestamp:
- Jun 17, 2016, 8:04:50 PM (9 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/model_graphics.bash
r846 r868 3 3 4 4 main='model_graphics.bash' 5 errormsg='ERROR -- error -- ERROR -- error'6 warnmsg='ERROR -- error -- ERROR -- error'7 5 8 6 function uploadvars() { … … 48 46 } 49 47 48 function ferrmsg() { 49 # Function to exit and write an error message 50 # comdexit: code number exit from the last execution 51 # ref: script/reference from which error occurs 52 # msg: message to write ('!' for spaces, '#' for end of line) 53 comdexit=$1 54 ref=$2 55 msg=$3 56 57 if test ${comdexit} -ne 0; then 58 echo "ERROR -- error -- ERROR -- error" 59 echo " "${ref}": "$(echo ${msg} | tr '!' ' ' | tr '#' '\n')" !!" 60 exit 61 fi 62 } 63 64 function compute_variable() { 65 # Function to compute a variable 66 # idir: directory with the input files 67 # usefiles: ',' list of files as [headerf]@[file1]|...|[fileN] 68 # odir: directory to write the output files 69 # cvar: [CFvarn]|[varkind]|[headerf]|[varmod]|[vardiag] 70 # [CFvarn]: CF name of the variable 71 # [vark]: kind of variable: 72 # acc: temporal accumulated values 73 # diff: differences between models 74 # direct: no statistics 75 # Lsec: latitudinal section (latitudinal value must be given, [var]@[lat]) 76 # lsec: longitudinal section (longitudinal value must be given, [var]@[lat]) 77 # lmean: longitudinal mean values 78 # tmean: temporal mean values 79 # zsum: vertical aggregated values 80 # [headerf]: header of the files to use 81 # [modvar]: variable to use from the file 82 # [diagvar]: variable computed from the diagnostics (diagnostic.py) 83 # scratch: whether is has to be done from the scratch or not 84 fname='compute_variable' 85 idir=$1 86 usefiles=$2 87 odir=$3 88 cvar=$4 89 scratch=$5 90 91 CFvarn=`echo ${cvar} | tr '|' ' ' | awk '{print $1}'` 92 vark=`echo ${cvar} | tr '|' ' ' | awk '{print $2}'` 93 headerf=`echo ${cvar} | tr '|' ' ' | awk '{print $3}'` 94 modvar=`echo ${cvar} | tr '|' ' ' | awk '{print $4}'` 95 diagvar=`echo ${cvar} | tr '|' ' ' | awk '{print $5}'` 96 97 cfiles=`echo ${usefiles} | tr ',' '\n' | grep ${headerf} | tr '|' ' ' | \ 98 awk '{print $2}' | tr '@' ' '` 99 100 cd ${odir} 101 102 # Computing separately and then joinging for all files 103 Ntotfiles=`echo ${cfiles} | wc -w | awk '{print $1}'` 104 ifile=1 105 for cf in ${cfiles}; do 106 ifS=`printf "%0${Ntotfiles}d" ${ifile}` 107 # Computing variable 108 filen=${odir}/${CFvarn}_${headerf}_${ifile}-${Ntotfiles}.nc 109 if ${scratch}; then rm ${filen}; fi 110 111 if test ! -f ${filen}; then 112 if test ! ${modvar} = 'None'; then 113 # model variable 114 values=${modvar}',0,-1,-1' 115 vs=${modvar},${vdnx},${vdny},${vdnz},${vdnt} 116 pyout=`${pyHOME}/nc_var.py -f ${cf} -o DataSetSection_multivars -v ${vs} \ 117 -S ${values} | grep succesfull | awk '{print $6}' | tr '"' ' '` 118 ferrmsg $? ${fname} "python!'DataSetSection_multivars'!failed" 119 mv ${pyout} ${filen} 120 pyout=`${pyHOME}/nc_var.py -f ${filen} -o chvarname -v ${vs} -S ${CFvarn}` 121 ferrmsg $? ${fname} "python!'chvarname'!failed" 122 123 # adding CF lon,lat,time in WRF files 124 if test ${headerf:0:3} = 'wrf'; then 125 ${pyHOME}/nc_var.py -o WRF_CFtime_creation -S 19491201000000,minutes \ 126 -f ${filen} -v time 127 ${pyHOME}/nc_var.py -o WRF_CFlonlat_creation -v ${vdnx},${vdny} \ 128 -f ${filen} -S lon,lat 129 fi 130 else 131 # diagnostic variable 132 dims=${dnt}@${vdnt},${dnz}@${vdnz},${dny}@${vdny},${dnx}@${vdnx} 133 diagn=`echo ${diagvar} | tr ':' '\n' | head -n 1` 134 Ndiagvars=`echo ${diagvar} | tr ':' ' ' | wc -w | awk '{print $1}'` 135 idiagv=2 136 diagc='' 137 while test ${idiagv} -le ${Ndiagvars}; do 138 diag1=`echo ${diagvar} | tr ':' '\n' | head -n ${idiagv} | tail -n 1` 139 if test ${idiagv} -eq 2; then 140 diagc=${diag1} 141 else 142 diagc=${diagc}'@'${diag1} 143 fi 144 idiagv=`expr ${idiagv} + 1` 145 done 146 147 echo "python ${pyHOME}/diagnostics.py -f ${cf} -d ${dims} -v ${diagn}'|'${diagc}" 148 pyout=`python ${pyHOME}/diagnostics.py -f ${cf} -d ${dims} -v ${diagn}'|'${diagc}` 149 ferrmsg $? ${fname} "python!'diagnostics'!failed" 150 mv diagnostics.nc ${filen} 151 152 # adding CF lon,lat,time in WRF files 153 if test ${headerf:0:3} = 'wrf'; then 154 ${pyHOME}/nc_var.py -o WRF_CFtime_creation -S 19491201000000,minutes \ 155 -f ${filen} -v time 156 ${pyHOME}/nc_var.py -o WRF_CFlonlat_creation -v ${vdnx},${vdny} \ 157 -f ${filen} -S lon,lat 158 fi 159 fi 160 fi 161 162 ifile=`expr ${ifile} + 1` 163 done 164 165 # LLUIS 166 # exit 167 } 168 50 169 ####### ####### 51 170 ## MAIN 52 171 ####### 172 rootsh=`pwd` 53 173 54 174 # Uploading environment 55 175 uploadvars model_graphics.dat 56 176 57 export 58 exit 59 177 if test scratch = 'true'; then 178 scratch=true 179 echo ${warnmsg} 180 echo " "${main}": starting from the SCRATCH !!" 181 else 182 scratch=false 183 fi 60 184 61 185 timeval='tstep' … … 72 196 combosfile=${HOMEpy}/diagnostics.inf 73 197 74 errmsg='ERROR -- error -- ERROR -- error'75 198 ####### ###### ##### #### ### ## # 76 199 77 exps=`echo ${experiments} | tr ':' ' '`200 mods=`echo ${models} | tr ':' ' '` 78 201 varks=`echo ${varkinds} | tr ':' ' '` 202 203 # Models loop 204 ## 205 for mod in ${mods}; do 206 case ${mod} in 207 'WRF') 208 exps=`echo ${WRFexps} | tr ':' ' '` 209 fheaders=`echo ${WRFheaders} | tr ':' ' '` 210 ;; 211 'LMDZ') 212 exps=`echo ${LMDZexps} | tr ':' ' '` 213 fheaders=`echo ${LMDZheaders} | tr ':' ' '` 214 ;; 215 'WRF_LMDZ') 216 exps=`echo ${WRF_LMDZexps} | tr ':' ' '` 217 fheaders=`echo ${WRF_LMDZheaders} | tr ':' ' '` 218 ;; 219 '*') 220 echo ${errmsg} 221 echo " "${main}": model '"${mod}"' not ready!!" 222 exit 223 ;; 224 esac 225 226 modinf=`$pyHOME/nc_var.py -o model_characteristics -f None -S ${mod} | \ 227 grep singleline | awk '{print $2}'` 228 ferrmsg $? $main "python!'model_characteristics'!failed" 229 dnx=`echo ${modinf} | tr ';' '\n' | grep dimxn | tr '=' ' ' | awk '{print $2}'` 230 dny=`echo ${modinf} | tr ';' '\n' | grep dimyn | tr '=' ' ' | awk '{print $2}'` 231 dnz=`echo ${modinf} | tr ';' '\n' | grep dimzn | tr '=' ' ' | awk '{print $2}'` 232 dnt=`echo ${modinf} | tr ';' '\n' | grep dimtn | tr '=' ' ' | awk '{print $2}'` 233 vdnx=`echo ${modinf} | tr ';' '\n' | grep vardxn | tr '=' ' ' | awk '{print $2}'` 234 vdny=`echo ${modinf} | tr ';' '\n' | grep vardyn | tr '=' ' ' | awk '{print $2}'` 235 vdnz=`echo ${modinf} | tr ';' '\n' | grep vardzn | tr '=' ' ' | awk '{print $2}'` 236 vdnt=`echo ${modinf} | tr ';' '\n' | grep vardtn | tr '=' ' ' | awk '{print $2}'` 237 echo ${mod} 238 echo " dims: "${dnx}", "${dny}", "${dnz}", "${dnt} 239 echo " var dims: "${vdnx}", "${vdny}", "${vdnz}", "${vdnt} 240 241 # Experiments loop 242 ## 243 for exp in ${exps}; do 244 echo " "${exp}"..." 245 iwdir=${ifold}/${mod}/${exp} 246 247 # Does input folder exist? 248 if test ! -d ${iwdir}; then 249 echo ${errmsg} 250 echo " "${main}": folder '"${iwdir}"' does not exist !!" 251 exit 252 fi 253 254 owdir=${ofold}/${mod}/${exp} 255 mkdir -p ${owdir} 256 257 # Need to pass to analyze all the data? 258 if ${scratch}; then rm ${owdir}/varcompute.inf >& /dev/null; fi 259 if test ! -f ${owdir}/varcompute.inf; then 260 261 # Does input folder has header files? 262 cd ${iwdir} 263 files='' 264 testfiles='' 265 ih=1 266 for fh in ${fheaders}; do 267 files1h=`ls -1 ${fh}* | tr '\n' '@'` 268 Lfiles1h=`expr length ${files1h}'0'` 269 if test ${Lfiles1h} -lt 2; then 270 ferrmsg 1 $main "folder!:!"${iwdir}"!does!not!contain!files!"${fh}"*" 271 fi 272 testfiles1h=`ls -1 ${fh}* | head -n 1` 273 if test ${ih} -eq 1; then 274 files=${fh}'|'${files1h} 275 testfiles=${fh}'|'${testfiles1h} 276 else 277 files=${files}','${fh}'|'${files1h} 278 testfiles=${testfiles}'@'${fh}'|'${testfiles1h} 279 fi 280 ih=`expr ${ih} + 1` 281 done 282 testfs=`echo ${testfiles} | tr '@' ' '` 283 cd ${rootsh} 284 285 # Kind variables loop 286 ## 287 ik=1 288 itotv=1 289 for vark in ${varks}; do 290 echo " "${vark}" ..." 291 case ${vark} in 292 'varacc') 293 varvks=${varacc} 294 ;; 295 'vardiff') 296 varvks=${vardiff} 297 ;; 298 'direct') 299 varvks=${vardirect} 300 ;; 301 'varLsec') 302 varvks=${varLsec} 303 ;; 304 'varlsec') 305 varvks=${varlsec} 306 ;; 307 'varlmean') 308 varvks=${varlmean} 309 ;; 310 'vartmean') 311 varvks=${vartmean} 312 ;; 313 'varzsum') 314 varvks=${varzsum} 315 ;; 316 '*') 317 echo ${errmsg} 318 echo " "${main}": variable kind '"${vark}"' not ready!!" 319 exit 320 ;; 321 esac 322 323 # Do we have variables for this kind? 324 Lvarvks=`expr length ${varvks}'0'` 325 if test ${Lvarvks} -lt 2; then 326 ferrmsg 1 ${main} "variable!kind!"${vark}"!without!variables" 327 fi 328 if test ${ik} -eq 1; then 329 allvars=${varvks} 330 else 331 allvars=${allvars}':'${varvks} 332 fi 333 ik=`expr ${ik} + 1` 334 vars=`echo ${varvks} | tr ':' ' '` 335 336 # Variables loop 337 ## 338 iv=1 339 for var in ${vars}; do 340 echo " "${var} 341 # How to copmute it? 342 cancompute=true 343 for ftest in ${testfs}; do 344 headerf=`echo ${ftest} | tr '|' ' ' | awk '{print $1}'` 345 filen=`echo ${ftest} | tr '|' ' ' | awk '{print $2}'` 346 compute=`${pyHOME}/nc_var.py -o computevar_model -f ${iwdir}/${filen} \ 347 -S ${var}` 348 ferrmsg $? ${main} "python!'computevar_model'!failed!#"$(echo ${compute} | \ 349 tr ' ' '!') 350 varmod=`echo ${compute} | tr ' ' '#' | tr '|' ' ' | awk '{print $2}' | \ 351 tr '@' ' ' | awk '{print $2}' | tr '=' ' ' | awk '{print $2}'` 352 vardiag=`echo ${compute} | tr ' ' '#' | tr '|' ' ' | awk '{print $2}' | \ 353 tr '@' ' ' | awk '{print $3}' | tr '=' ' ' | awk '{print $2}'` 354 echo " "${var}" mod:"${varmod}" diag: "${vardiag} 355 if test ${varmod} = 'None' && test ${vardiag} = 'None'; then 356 cancompute=false 357 else 358 cancompute=true 359 # Should be considered that variable can also be computed by both ways? 360 break 361 fi 362 done 363 if ! ${cancompute}; then 364 msg="there!is!no!way!to!compute!'"${var}"'!for!model!"${mod} 365 # Too extrict! 366 # ferrmsg 1 ${main} ${msg} 367 echo ${warnmsg} 368 echo $(echo $msg | tr '!' ' ') 369 fi 370 371 # A ';' list 'varcompute' it is created for each variable giving: 372 # [var]|[vark]|[headerf][varmod]|[vardiag] 373 # This list will be used to compute a new file for each variable 374 varcomp=${var}'|'${vark}'|'${headerf}'|'${varmod}'|'${vardiag} 375 if test ${itotv} -eq 1; then 376 varcompute=${varcomp} 377 else 378 varcompute=${varcompute}';'${varcomp} 379 fi 380 381 iv=`expr ${iv} + 1` 382 itotv=`expr ${itotv} + 1` 383 384 # end loop of variables 385 done 386 # end of kind of variables 387 done 388 389 # Outwritting the varcompute to avoid next time (if it is not scratch!) 390 cat << EOF > ${owdir}/varcompute.inf 391 files: ${files} 392 varcompute: ${varcompute} 393 itotv: ${itotv} 394 EOF 395 else 396 echo $warnmsg 397 echo " "${main}": getting already data information from the experiment!" 398 files=`cat ${owdir}/varcompute.inf | grep files | awk '{print $2}'` 399 varcompute=`cat ${owdir}/varcompute.inf | grep varcompute | awk '{print $2}'` 400 itotv=`cat ${owdir}/varcompute.inf | grep itotv | awk '{print $2}'` 401 # End of avoiding to repeat all the experiment search 402 fi 403 404 echo " For experiment '"${exp}"' is required to compute: "${itotv}" variables" 405 # Computing files for each variable 406 ## 407 echo " Computing all variables ..." 408 cd $owdir 409 ic=1 410 cvars=`echo ${varcompute} | tr ';' ' '` 411 for cvar in ${cvars}; do 412 CFv=`echo ${cvar} | tr '|' ' ' | awk '{print $1}'` 413 modv=`echo ${cvar} | tr '|' ' ' | awk '{print $4}'` 414 diagv=`echo ${cvar} | tr '|' ' ' | awk '{print $5}'` 415 echo " "${CFv}"; "${modv}" "${diagv} 416 417 if test ! ${modv} = 'None' || test ! ${diagv} = 'None'; then 418 compute_variable ${iwdir} ${files} ${owdir} ${cvar} ${scratch} 419 ic=`expr ${ic} + 1` 420 else 421 echo " not computing '"${CFv}"' for model '"${mod}"' !!" 422 fi 423 424 # exit 425 # end of computing vars 426 done 427 echo " "${main}": has been "${ic}" variables computed" 428 cd ${rootsh} 429 exit 430 # end of experiments 431 done 432 # end of models 433 done 434 435 exit 79 436 80 437 istep=0 -
trunk/tools/model_graphics_template.dat
r838 r868 1 ### ASCII file to manage `model_graphics.bash' 1 ### ASCII file to manage `model_graphics.bash' from different models and experiments 2 # from each one 3 # 4 # 1: Variables choice using its CF name 5 # 2: Kind of statisitcs to apply to the variable 6 # 3: Kind of plot for the variable 7 # 4: Kind of difference among models/experiments 8 # 2 9 # Different assumptions are made: 3 # model outputs are organized as ${ifold}/${model}/${sim} 4 # script outputs will be organized as ${ofold}/${model}/${sim} 5 # when diagnostic might be required a new file will be created 6 # WRF outputs will have added 'WRFtime' variable 10 # - model outputs are organized as ${ifold}/${model}/${exp} 11 # - script outputs will be organized as ${ofold}/${model}/${exp} 12 # - when diagnostic might be required a new file will be created 13 # - WRF outputs will have added 'WRFtime' variable 14 # 15 # NOTE: in this file all the values without ' 7 16 8 17 # python HOME 9 18 HOMEpy = ${HOME}/etudes/WRF_LMDZ/svn/LMDZ_WRF/tools 10 19 20 # Srcatch 21 srcatch=false 22 11 23 # Folder with the files 12 13 ifold = / bdd/PCER/workspace/lfita/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ24 ##ifold = /bdd/PCER/workspace/lfita/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ 25 ifold = /home/lluis/etudes/WRF_LMDZ/WaquaL_highres/tests/model_graphics 14 26 15 27 # Output folder 16 ofold = /bdd/PCER/workspace/lfita/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ 28 ##ofold = /bdd/PCER/workspace/lfita/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ 29 ofold = /home/lluis/etudes/WRF_LMDZ/WaquaL_highres/tests/model_graphics 17 30 18 31 # Experiments (model runs) … … 20 33 # LMDZ: LMDZ model 21 34 # WRF_LMDZ: LMDZ physics coupled to WRF 22 models=WRF:WRF_LMDZ:LMDZ 35 #models=WRF:WRF_LMDZ:LMDZ 36 models=WRF 23 37 24 # Simulations (labels of the simualtions from each experiment) 25 WRFsims = control:pbl1 26 LMDZsims = AR40:NPv31 27 WRF_LMDZsims = AR40:NPv31 38 # Experiments (labels of each experiment) 39 WRFexps = control:pbl1 40 LMDZexps = AR40:NPv31 41 WRF_LMDZexps = AR40:NPv31 42 43 # Headers of the files to use 44 WRFheaders = wrfout 45 WRF_LMDZheaders = wrfout 46 LMDZheaders = histins 28 47 29 48 # Kind of calculations (adding the euiqvalent `surname' to each variable) … … 36 55 # tmean: temporal mean values 37 56 # zsum: vertical aggregated values 38 39 57 varkinds = direct:tmean:lmean:diff 40 58 … … 42 60 # in foudre values from: ${HOME}/UNSW-CCRC-WRF/tools/postprocess/GMS-UC/WRF4G/util/postprocess/wrfncxnj/wrfncxnj.table 43 61 # must exist on the table $pyHOME/variables_values.dat 44 direct = tas:uas:vas:ps:pr:pracc:rsds:prw:rhs:evspsbl:hfss:hfls:hurs:huss:zmla:hufs:wakes:lwakeh:stherm:zmaxth:clt:cllmh:prc:prls:bils45 tmean = prc:prls:zmla:hfss:hfls:evspsbl:bils:uas:vas:tas:ps:clt:cllmh:prw:huss:pr:wakes:wakeh:stherm:zmaxth46 lmean = ta:ua:va:hur47 diff = ualmean:valmean:talmean:huslmean:uas:vas:ps:pr62 vardirect = tas:uas:vas:ps:pr:pracc:rsds:prw:evspsbl:hfss:hfls:hurs:huss:zmla:hufs:wakes:lwakeh:stherm:zmaxth:clt:cll:clm:clh:prc:prls:bils 63 vartmean = prc:prls:zmla:hfss:hfls:evspsbl:bils:uas:vas:tas:ps:clt:cll:clm:clh:prw:huss:pr:wakes:wakeh:stherm:zmaxth 64 varlmean = ta:ua:va:hur 65 vardiff = ualmean:valmean:talmean:huslmean:uas:vas:ps:pr 48 66 49 67 # Kind of plots … … 64 82 # Figures output 65 83 kindfig = pdf 84 85 # Generic 86 errmsg = ERROR--error--ERROR--error 87 warnmsg = WARNING--warning--WARNING--warning 88
Note: See TracChangeset
for help on using the changeset viewer.