#!/bin/bash

if [ "$edate" = "" ]; then
   edate=$1   #ex: 2012041100
   arq_in=$2  #ex: /scratchout/oper/tempo/BRAMS/ams_05km/dataout/2013100100/grads/JULES_BRAMS05km_2013100100-A-2013-10-03-120000-g1.ctl
   id_process=$3  # GEMPAK: Importante para definir o processo dentro do GEMPAK e diferenciar os modelos
   arq_vars=$4   #nome de arquivo com var_grb definido, caso não tenha este arquivo pega o default
fi

echo
echo ${edate} ${arq_in} ${id_process} ${arq_vars}
echo

if [ -z $4 ]; then
   var_grb=('PSLM PRMSL 0m    @'\
   'PSLC PRES  0m    @'\
   'TOPO HGT  0m    @'\
   'LSMK LAND  0m    @'\
   'TP2M TMP   2m    @'\
   'MXTP TMAX  0m    @'\
   'MNTP TMIN  0m    @'\
   'DP2M DPT   2m    @'\
   'U10M UGRD  10m   @'\
   'V10M VGRD  10m   @'\
   'U100 UGRD  100m  @'\
   'V100 VGRD  100m  @'\
   'PREC APCP  0m    @'\
   'PRCV ACPCP 0m    @'\
   'PRGE NCPCP 0m      @'\
   'NEVE ASNOW 0m    @'\
   'CLSF LHTFL 0m    @'\
   'CSSF SHTFL 0m    @'\
   'GHFL GFLUX 0m    @'\
   'TSFC TMP   0m    @'\
   'QSFC SPFH  0m    @'\
   'TGSC TSOIL 01m   @'\
   'TGRZ TSOIL 02m   @'\
   'USSL SOILM 01m   @'\
   'UZRS SOILM 02m   @'\
   'SMAV       @'\
   'RNOF SSRUN 0m    @'\
   'ZORL SFCRH 0m    @'\
   'EVPP PEVAP 0m    @'\
   'USST       @'\
   'VSST       @'\
   'LWNV LCDC  0m    @'\
   'MDNV MCDC  0m    @'\
   'HINV HCDC  0m    @'\
   'CBNT       @'\
   'OCIS DSWRF 0m    @'\
   'OLIS DLWRF 0m    @'\
   'OCES USWRF 0m    @'\
   'OLES ULWRF 0m    @'\
   'ROCE NSWRT 0m    @'\
   'ROLE NLWRT 0m    @'\
   'ALBE ALBDO 0m    @'\
   'CAPE CAPE  0m    @'\
   'CINE CIN   0m    @'\
   'BLI  BLI   0m    @'\
   'AGPL PWAT  0m    @'\
   'TPPP       @'\
   'FZHT       @'\
   'FZRH       @'\
   'MXWP       @'\
   'MXWU       @'\
   'MXWV       @'\
   'PCBS       @'\
   'PCTP SCTPRES 0m  @'\
   'ZGEO HGT   all   @'\
   'UVEL UGRD  all   @'\
   'VVEL VGRD  all   @'\
   'TEMP TMP   all   @'\
   'UMRL RH    all   @'\
   'OMEG VVEL  all   @'\
   'UMES SPFH  all   @'\
   'PSAT EPOT  all   @'\
   'WTNV CWAT  all   @'\
   'ITNV CICE  all   @');
   lvls=(lixo 1020 1000 950 925 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100 50)
   name_out=$(basename $arq_in | awk -F "." '{print $1}')
else
   . $4
fi

#eta_15km_2013110400+2013111420.ctl

if [ $(echo $arq_in | grep eta_15km | wc -l) -eq 1 ]; then
   date_fct=$(echo $arq_in | awk -F "+" '{print substr($2,0,10)}')
   a=$(date "+%s" -d "${edate:8:2}:00:00 ${edate:0:8}" -u)
   b=$(date "+%s" -d "${date_fct:8:2}:00:00 ${date_fct:0:8}" -u)
   h=$(echo "($b-$a)/3600" | bc)  #"
   name_out=$(basename $arq_in | awk -F "." '{print $1}')
else
   atmp=$(basename $arq_in)
   echo ${atmp:7:10} - ${atmp:17:10}
   date_fct=$(echo $arq_in | awk -F "+" '{print substr($2,0,10)}')
   a=$(date "+%s" -d "${atmp:15:2}:00:00 ${atmp:7:8}" -u)
   b=$(date "+%s" -d "${atmp:25:2}:00:00 ${atmp:17:8}" -u)
   h=$(echo "($b-$a)/3600" | bc)  #"
fi


echo \'open ${arq_in}\' > ${name_out}.gs
plus=""

IFS=@
for var in ${var_grb[@]}; do
   var_cptec=$(echo $var | awk '{print $1}')
   var_grb2=$(echo $var | awk '{print $2}')
   var_level=$(echo $var | awk '{print $3}')
   var_modif=$(echo $var | awk '{print $4}')
   
   if [ -z ${var_grb2} ]; then
      continue
   fi
   
   # Definição dos níveis
   if [ "${var_level}" = "0m" ]; then
      name_lev[1]="surface"
      zi=1
      nf=1
   elif [ "${var_level}" = "10m" ]; then
      name_lev[1]="10 m above ground"
      zi=1
      nf=1
   elif [ "${var_level}" = "100m" ]; then
      name_lev[1]="100 m above ground"
      zi=1
      nf=1
   elif [ "${var_level}" = "2m" ]; then
      name_lev[1]="2 m above ground"
      zi=1
      nf=1
   elif [ "${var_level}" = "all" ]; then
      zi=1
      nf=$((${#lvls[@]}-1))
      z=1
      while [ $z -le $nf ]; do
         name_lev[$z]="${lvls[$z]} mb"
         z=$((${z}+1))      
      done
   elif [ $(echo ${var_level} | grep \- | wc -l) -eq 1 -a $(echo ${var_grb2} | grep SOIL | wc -l) -eq 1 ]; then
      name_lev[1]="${var_level} m below ground"
      zi=1
      nf=1
   fi
   
   z=$zi
   while [ $z -le $nf ]; do
      echo \'set z $z\'  >> ${name_out}.gs
      if [ "${var_level}" = "all" ]; then
         var_tmp=${var_cptec}
         var_cptec="${var_cptec}(lev=${lvls[$z]})"
      fi
      if [ "$date_fct" = "$edate" ]; then
         echo \'./g2grb ${var_cptec}  ${plus}${name_out}.grib2 ${id_process} d=${edate}:${var_grb2}:${name_lev[$z]}:anl\' >> ${name_out}.gs
      else
         if [ "0$var_modif" = "0" ]; then
            echo \'./g2grb ${var_cptec}  ${plus}${name_out}.grib2 ${id_process} d=${edate}:${var_grb2}:${name_lev[$z]}:$h hour fcst\' >> ${name_out}.gs
         else
            bef=$(echo $h-5 | bc)
            echo \'./g2grb ${var_cptec}  ${plus}${name_out}.grib2 ${id_process} d=${edate}:${var_grb2}:${name_lev[$z]}:$bef-$h hour $var_modif fcst\' >> ${name_out}.gs
         fi
      fi
      if [ "${var_level}" = "all" ]; then
         var_cptec=${var_tmp}
      fi
      plus="+"
      z=$((${z}+1))  
   done
done
echo \'quit \'  >> ${name_out}.gs


echo
echo ${name_out}.gs
/p/app/opengrads/2.2.1.oga.1/grads -lbc "run ${name_out}.gs"
#rm -f ${name_out}.gs


exit 0

