Changeset 868 in lmdz_wrf


Ignore:
Timestamp:
Jun 17, 2016, 8:04:50 PM (9 years ago)
Author:
lfita
Message:

First working version (until individual var file creation)

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/model_graphics.bash

    r846 r868  
    33
    44main='model_graphics.bash'
    5 errormsg='ERROR -- error -- ERROR -- error'
    6 warnmsg='ERROR -- error -- ERROR -- error'
    75
    86function uploadvars() {
     
    4846}
    4947
     48function 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
     64function 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
    50169#######    #######
    51170## MAIN
    52171    #######
     172rootsh=`pwd`
    53173
    54174# Uploading environment
    55175uploadvars model_graphics.dat
    56176
    57 export
    58 exit
    59 
     177if test scratch = 'true'; then
     178  scratch=true
     179  echo ${warnmsg}
     180  echo "  "${main}": starting from the SCRATCH !!"
     181else
     182  scratch=false
     183fi
    60184
    61185timeval='tstep'
     
    72196combosfile=${HOMEpy}/diagnostics.inf
    73197
    74 errmsg='ERROR -- error -- ERROR -- error'
    75198####### ###### ##### #### ### ## #
    76199
    77 exps=`echo ${experiments} | tr ':' ' '`
     200mods=`echo ${models} | tr ':' ' '`
    78201varks=`echo ${varkinds} | tr ':' ' '`
     202
     203# Models loop
     204##
     205for 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
     391files: ${files}
     392varcompute: ${varcompute}
     393itotv: ${itotv}
     394EOF
     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
     433done
     434
     435exit
    79436
    80437istep=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#
    29# 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 '
    716
    817# python HOME
    918HOMEpy = ${HOME}/etudes/WRF_LMDZ/svn/LMDZ_WRF/tools
    1019
     20# Srcatch
     21srcatch=false
     22
    1123# Folder with the files
    12 
    13 ifold = /bdd/PCER/workspace/lfita/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ
     24##ifold = /bdd/PCER/workspace/lfita/etudes/WRF_LMDZ/WaquaL/WRF_LMDZ
     25ifold = /home/lluis/etudes/WRF_LMDZ/WaquaL_highres/tests/model_graphics
    1426
    1527# 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
     29ofold = /home/lluis/etudes/WRF_LMDZ/WaquaL_highres/tests/model_graphics
    1730
    1831# Experiments (model runs)
     
    2033#   LMDZ: LMDZ model
    2134#   WRF_LMDZ: LMDZ physics coupled to WRF
    22 models=WRF:WRF_LMDZ:LMDZ
     35#models=WRF:WRF_LMDZ:LMDZ
     36models=WRF
    2337
    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)
     39WRFexps = control:pbl1
     40LMDZexps = AR40:NPv31
     41WRF_LMDZexps = AR40:NPv31
     42
     43# Headers of the files to use
     44WRFheaders = wrfout
     45WRF_LMDZheaders = wrfout
     46LMDZheaders = histins
    2847
    2948# Kind of calculations (adding the euiqvalent `surname' to each variable)
     
    3655#   tmean: temporal mean values
    3756#   zsum: vertical aggregated values
    38 
    3957varkinds = direct:tmean:lmean:diff
    4058
     
    4260#   in foudre values from: ${HOME}/UNSW-CCRC-WRF/tools/postprocess/GMS-UC/WRF4G/util/postprocess/wrfncxnj/wrfncxnj.table
    4361#   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:bils
    45 tmean = prc:prls:zmla:hfss:hfls:evspsbl:bils:uas:vas:tas:ps:clt:cllmh:prw:huss:pr:wakes:wakeh:stherm:zmaxth
    46 lmean = ta:ua:va:hur
    47 diff = ualmean:valmean:talmean:huslmean:uas:vas:ps:pr
     62vardirect = 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
     63vartmean = prc:prls:zmla:hfss:hfls:evspsbl:bils:uas:vas:tas:ps:clt:cll:clm:clh:prw:huss:pr:wakes:wakeh:stherm:zmaxth
     64varlmean = ta:ua:va:hur
     65vardiff = ualmean:valmean:talmean:huslmean:uas:vas:ps:pr
    4866
    4967# Kind of plots
     
    6482# Figures output
    6583kindfig = pdf
     84
     85# Generic
     86errmsg = ERROR--error--ERROR--error
     87warnmsg = WARNING--warning--WARNING--warning
     88
Note: See TracChangeset for help on using the changeset viewer.