#!/bin/bash

ANOI=1989
ANOF=1989
DIR=`pwd`

VAR="hus"
VAREX="Specific Humidity [kg kg-1]"

for ((  i = $ANOI ;  i <= $ANOF;  i++  ))
do

cd $DIR/$i

gunzip $VAR.grd.gz

# GERACAO DOS .CTL DE CADA VARIAVEL E CADA ANO
rm $VAR.$i.ctl
cat >> $VAR.$i.ctl <<-EOF
dset ^$VAR.grd
TITLE     20C3M
OPTIONS   big_endian template
UNDEF     -999
XDEF       320 LINEAR       0       1.125000
YDEF       160 LEVELS
 -89.1415  -88.0294  -86.9108  -85.7906  -84.6699  -83.5489  -82.4278  -81.3066
 -80.1853  -79.0640  -77.9426  -76.8212  -75.6998  -74.5784  -73.4570  -72.3356
 -71.2141  -70.0927  -68.9712  -67.8498  -66.7283  -65.6069  -64.4854  -63.3639
 -62.2425  -61.1210  -59.9995  -58.8780  -57.7566  -56.6351  -55.5136  -54.3921
 -53.2706  -52.1492  -51.0277  -49.9062  -48.7847  -47.6632  -46.5417  -45.4203
 -44.2988  -43.1773  -42.0558  -40.9343  -39.8129  -38.6914  -37.5699  -36.4484
 -35.3269  -34.2054  -33.0839  -31.9624  -30.8409  -29.7195  -28.5980  -27.4765
 -26.3550  -25.2335  -24.1120  -22.9905  -21.8690  -20.7475  -19.6261  -18.5046
 -17.3831  -16.2616  -15.1401  -14.0186  -12.8971  -11.7756  -10.6542   -9.5327
  -8.4112   -7.2897   -6.1682   -5.0467   -3.9252   -2.8037   -1.6822   -0.5607
   0.5607    1.6822    2.8037    3.9252    5.0467    6.1682    7.2897    8.4112
   9.5327   10.6542   11.7756   12.8971   14.0186   15.1401   16.2616   17.3831
  18.5046   19.6261   20.7475   21.8690   22.9905   24.1120   25.2335   26.3550
  27.4765   28.5980   29.7195   30.8409   31.9624   33.0839   34.2054   35.3269
  36.4484   37.5699   38.6914   39.8129   40.9343   42.0558   43.1773   44.2988
  45.4203   46.5417   47.6632   48.7847   49.9062   51.0277   52.1492   53.2706
  54.3921   55.5136   56.6351   57.7566   58.8780   59.9995   61.1210   62.2425
  63.3639   64.4854   65.6069   66.7283   67.8498   68.9712   70.0927   71.2141
  72.3356   73.4570   74.5784   75.6998   76.8212   77.9426   79.0640   80.1853
  81.3066   82.4278   83.5489   84.6699   85.7906   86.9108   88.0294   89.1415
ZDEF        23 LEVELS
   1000   925   850   775   700   600   500   400   300   250   200   150
    100    70    50    30    20    10     7     5     3     2     1
EOF

# TESTE PRA VER SE O ANO E BISSEXTO E ESCREVER O TDEF CORRETO

isleap="false"
if [ $((i % 4)) -ne 0 ] ; then
: # not a leap year : means do nothing and use old value of isleap 
elif [ $((i % 400)) -eq 0 ] ; then
# yes, it's a leap year 
isleap="true"
elif [ $((i % 100)) -eq 0 ] ; then
: # not a leap year do nothing and use old value of isleap 
else
# it is a leap year 
isleap="true"
fi


if [ "$isleap" == "true" ];
then
echo "$i is leap year" 
cat >> $VAR.$i.ctl <<-EOF
TDEF     1464 LINEAR  00:00Z01JAN$i     6hr
VARS  1
$VAR          23 99 $VAREX
ENDVARS
EOF
else
echo "$i is NOT leap year" 
cat >> $VAR.$i.ctl <<-EOF
TDEF     1460 LINEAR  00:00Z01JAN$i     6hr
VARS  1
$VAR          23 99 $VAREX
ENDVARS
EOF
fi


# PASSAGEM DE .CTL PRA .NC
#/home/lamma/cclima/grads-1.8sl11/bin/gradsnc -blc "lats4d -v -q -i $VAR.$i -o $VAR.$i"
cdo -f nc import_binary $VAR.$i.ctl $VAR.$i.nc

# GERACAO DE W (razao de mistura) A PARTIR DE qa (umidade especifica)
# DEPOIS MOVE PARA O DIRETORIO ur (umidade relativa)

if [ "$isleap" == "true" ];
then
mv ../1.bis.nc .
cdo sub 1.bis.nc $VAR.$i.nc 1-$VAR.$i.nc
cdo div $VAR.$i.nc 1-$VAR.$i.nc w.$i.nc
cdo -O chname,$VAR,ta w.$i.nc temp.nc
mv temp.nc w.$i.nc
mv 1.bis.nc ..
else
mv ../1.nbis.nc .
cdo sub 1.nbis.nc $VAR.$i.nc 1-$VAR.$i.nc
cdo div $VAR.$i.nc 1-$VAR.$i.nc w.$i.nc
cdo -O chname,$VAR,ta w.$i.nc temp.nc
mv temp.nc w.$i.nc
mv 1.nbis.nc ..
fi

# GERACAO DE Ws (razao de mistura de saturacao) A PARTIR DE ta (temperatura)

if [ "$isleap" == "true" ];
then
timetafull="1464"
else
timetafull="1460"
fi

# SEPARANDO O ARQUIVO TA.ANO.NC EM MESES PQ ELE EH MTO GRANDE
cdo splitmon ta.$i.original.nc ta.$i.

cp $DIR/bins/mes* $DIR/$i

for ((  j = 1 ;  j <= 12;  j++  ))
do

if [ $j == 1 ]
then
timeta=124
jj=0$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

elif [ $j == 2 ]
then
if [ $timetafull == 1460 ]
then
timeta=112
jj=0$j
mv ta.$i.$jj.nc ta.mes28.nc
./mes28
mv ta.mes28.nc ta.$i.$jj.nc
mv ws.mes28.nc ws.$i.$jj.nc

else
timeta=116
jj=0$j
mv ta.$i.$jj.nc ta.mes29.nc
./mes29
mv ta.mes29.nc ta.$i.$jj.nc
mv ws.mes29.nc ws.$i.$jj.nc

fi
elif [ $j == 3 ]
then
timeta=124
jj=0$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

elif [ $j == 4 ]
then
timeta=120
jj=0$j
mv ta.$i.$jj.nc ta.mes30.nc
./mes30
mv ta.mes30.nc ta.$i.$jj.nc
mv ws.mes30.nc ws.$i.$jj.nc

elif [ $j == 5 ]
then
timeta=124
jj=0$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

elif [ $j == 6 ]
then
timeta=120
jj=0$j
mv ta.$i.$jj.nc ta.mes30.nc
./mes30
mv ta.mes30.nc ta.$i.$jj.nc
mv ws.mes30.nc ws.$i.$jj.nc

elif [ $j == 7 ]
then
timeta=124
jj=0$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

elif [ $j == 8 ]
then
timeta=124
jj=0$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

elif [ $j == 9 ]
then
timeta=120
jj=0$j
mv ta.$i.$jj.nc ta.mes30.nc
./mes30
mv ta.mes30.nc ta.$i.$jj.nc
mv ws.mes30.nc ws.$i.$jj.nc

elif [ $j == 10 ]
then
timeta=124
jj=$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

elif [ $j == 11 ]
then
timeta=120
jj=$j
mv ta.$i.$jj.nc ta.mes30.nc
./mes30
mv ta.mes30.nc ta.$i.$jj.nc
mv ws.mes30.nc ws.$i.$jj.nc

elif [ $j == 12 ]
then
timeta=124
jj=$j
mv ta.$i.$jj.nc ta.mes31.nc
./mes31
mv ta.mes31.nc ta.$i.$jj.nc
mv ws.mes31.nc ws.$i.$jj.nc

fi

#$DIR/write.ta.WS.sh $i $jj $timeta $DIR

# COMPILACAO
#ifort ta.WS.f90 -L/home/projetos/ufrj/coppe/froque/bin/netcdf-4.1.1/lib -lnetcdf
#ifort ta.WS.f90 -L/usr/local/lib -lnetcdf 
# Jeito usado atualmente
#ifort -o mes31 ta.WS.mes31.f90 -L/usr/local/lib -lnetcdf
# EXECUCAO
#./a.out

done

# CONCATENAR O ARQUIVO WS.$I.$JJ.NC NUM ARQUIVO SOMENTE
cdo -O cat ws.$i.??.nc ws.$i.nc

# GERACAO DA UR FAZENDO W(razao de mistura)/Ws(razao de mistura de saturacao). 
# NAO PRECISA MULTIPLICAR POR 100, POIS Ws JÁ FOI DIVIDIDO POR 100.
#####ncbo -O --op_typ=dvd w.$i.nc ws.$i.nc ur.$i.nc
cdo div w.$i.nc ws.$i.nc ur.$i.nc

# APAGANDO ARQUIVOS TEMPORARIOS
rm 1-$VAR.$i.nc w.$i.nc ta.$i.??.nc ws.$i.??.nc ws.temp.nc a.out ws.$i.nc

# AJUSTE DOS NETCDF'S

ncatted -a units,lev,o,c,"hPa" ur.$i.nc
cdo -O invertlat ur.$i.nc temp.nc
cdo -O invertlev temp.nc ur.$i.nc
cdo -O chname,ta,r ur.$i.nc temp.nc
mv temp.nc ur.$i.nc

cdo splithour ur.$i.nc rhum.$i.

rm ur.$i.nc temp*

done
