#! /bin/ksh 

############# Separa os arquivos para tratar os dias 29 e 30 de fevereiro
############# Concatena os arquivos em anos


#SE FOR HADGEM ALTERAR CALENDARIO E DIA MES FINAL, RCP4.5 vai ate 20991130
_modelo=HadGEM2-ES
_instituto=MOHC
_calendar=360_day
_res=20km
_resF=20

#######################
####RODAR NA ESLOGIN 01
#######################

####################### PARTE 1 #######################

set -A _cenarios Historical    RCP4.5 RCP4.5 RCP4.5 RCP8.5 RCP8.5 RCP8.5
set -A _pdts     PDT0001 PDT0002 PDT0002 PDT0002 PDT0002 PDT0002 PDT0002
set -A _cenariosB historical    rcp45  rcp45  rcp45  rcp85  rcp85  rcp85
set -A _CEs       CE0001       CE0007 CE0007 CE0007 CE0009 CE0009 CE0009
set -A _PEs       PE0000       PE0001 PE0002 PE0003 PE0001 PE0002 PE0003
set -A AnoID         1960      2006   2040   2070   2006   2040   2070
set -A AnoFD         2005      2040   2070   2099   2040   2070   2099
set -A AnoIV         1961      2006   2041   2071   2006   2041   2071
set -A AnoFV         2005      2040   2070   2099   2040   2070   2099
set -A TDEFF        16560     12600  11160  10770  12600  11160  10800


_NVARS=2
let _NVARS=${_NVARS}-1
set -A _vars     MXTP MNTP
set -A _varsN    VR0001 VR0002
set -A _varsc     tasmax				 tasmin
set -A _longns   "Maximum Near-Surface Air Temperature" "Minimum Near-Surface Air Temperature"
set -A _standns   air_temperature			 air_temperature
set -A _units    "grau Celsius" 			"grau Celsius" 
 

iMod=0
while [[ ${iMod} -le 6 ]] ; do
AnoI=${AnoIV[$iMod]}
AnoF=${AnoFV[$iMod]}
AnoIdir=${AnoID[$iMod]}
AnoFdir=${AnoFD[$iMod]}
_cenario=${_cenarios[$iMod]}
_cenarioB=${_cenarios[$iMod]}
TDEF=${TDEFF[$iMod]}
_CE=${_CEs[$iMod]}
_PE=${_PEs[$iMod]}
_PDT=${_pdts[$iMod]}

# Se o _cenario for 2071 a 2009 do RCP4.5 vai ate mes 11 dia 30
if [[ ${iMod} = 3 ]] ; then
_mesdiafinal=1130
else
_mesdiafinal=1230
fi


_contvar=0
while [[ ${_contvar} -le ${_NVARS} ]] ; do
AnoIcont=${AnoIV[$iMod]}
_var=${_vars[$_contvar]}
_varc=${_varsc[$_contvar]}
_VR=${_varsN[$_contvar]}
_longn=${_longns[$_contvar]}
_standn=${_standns[$_contvar]}
_unit=${_units[$_contvar]}


#PREPARA OS DIAS 29 E 30 DE FEVEREIRO
while [[ $AnoIcont -le $AnoF ]] ; do

cam=/MudClim1/PNUD_2014/Extracoes/Binarios/Diarios/Eta_HadGEM2-ES/20km/${_cenario}/${AnoIdir}-${AnoFdir}
dirtrab=/MudClim4/DiegoChagas/Conversao_NETCDF/temp_HAD
saida=/MudClim4/DiegoChagas/Conversao_NETCDF/area_share/NETCDF/PR0002/MO0003/EX0003/${_PE}/${_CE}/${_VR}/FR0004/${_PDT}


mkdir -p ${dirtrab} ${saida}

template_orig=${cam}/${_var}/Eta_HadGEM2-ES_20km_${_cenario}_Diario_${_var}_template.ctl

cp ${template_orig} ${dirtrab}
cat ${dirtrab}/*.ctl | sed "s:360_day_calendar::g" | sed "s:DSET ^:DSET ${cam}/${_var}\/:g" | sed "s:${TDEF}:18000:g" >  ${dirtrab}/CTL_TEMPLATE_365.ctl

#copia os dias 29 e 30 para diretorio temporario
cp ${cam}/${_var}/Eta_HadGEM2-ES_20km_${_cenario}_Diario_${_var}_${AnoIcont}0229.bin  ${dirtrab}
cp ${cam}/${_var}/Eta_HadGEM2-ES_20km_${_cenario}_Diario_${_var}_${AnoIcont}0230.bin  ${dirtrab}

cd $dirtrab

#renomeia os binarios 
for file in $(ls Eta_HadGEM2-ES_20km_${_cenario}_Diario_${_var}_${AnoIcont}*.bin)
do
dia=$(echo $file | cut -d_ -f7 | cut -c 7-8)
parte1=$(echo $file | cut -d_ -f1-6)

  if [ ${dia} -eq 29 ] ; then
   filenew=${parte1}_${AnoIcont}0201.bin
   mv $file $filenew
   else
   filenew=${parte1}_${AnoIcont}0202.bin
   mv $file $filenew
  fi
done


#gera CTLTEMPLATE
cat << EOF > ${dirtrab}/Eta_HadGEM2-ES_20km_${AnoIcont}_${_cenario}_Diario_${_var}_template.ctl
DSET ^Eta_HadGEM2-ES_20km_${_cenario}_Diario_${_var}_${AnoIcont}02%d2.bin
UNDEF  -9999000.000
OPTIONS TEMPLATE 
YDEF  390 LINEAR    -50.00  0.20
XDEF  355 LINEAR   -100.00  0.20
ZDEF  1 LEVELS 1000
TDEF 2 LINEAR 01Feb${AnoIcont} 1dy
VARS 1
${_var}  0  99  ${_var}
ENDVARS

EOF


#GERA NETCDF DOS DIAS 29 e 30 FEV
cat << EOF > ${dirtrab}/geranc2930.gs
'open ${dirtrab}/Eta_HadGEM2-ES_20km_${AnoIcont}_${_cenario}_Diario_${_var}_template.ctl'
'set t 1 last'
'define ${_var}=${_var}'
'set sdfwrite  -nc4  -flt -zip ${dirtrab}/2930FEV${AnoIcont}.nc'
'sdfwrite ${_var}'
'quit'
EOF

grads -blc "run ${dirtrab}/geranc2930.gs"


rm -f ${dirtrab}/Eta_HadGEM2-ES_20km*${AnoIcont}*
rm -f ${dirtrab}/geranc2930.gs
rm -f Eta_HadGEM2-ES_20km_*_template.ctl


#Faz as alteracoes no NETCDF
ncatted -a units,time,m,c,"minutes since ${AnoIcont}-02-29 00:00" ${dirtrab}/2930FEV${AnoIcont}.nc
ncatted -a calendar,time,c,c,360_day ${dirtrab}/2930FEV${AnoIcont}.nc


#FORMATA O RESTANTE DOS MESES
cat << EOF > ${dirtrab}/geranc.gs
'open ${dirtrab}/CTL_TEMPLATE_365.ctl'
'set time 01FEB${AnoIcont} 28FEB${AnoIcont}'
'define plot=${_var}'
'set sdfwrite  -nc4  -flt -zip ${dirtrab}/0128FEV${AnoIcont}.nc'
'sdfwrite plot'
'!ncatted -a calendar,time,c,c,360_day ${dirtrab}/0128FEV${AnoIcont}.nc'
'quit'
EOF

cat << EOF > ${dirtrab}/geranc2.gs
'open ${dirtrab}/CTL_TEMPLATE_365.ctl'

timeI='01JAN${AnoIcont} 01MAR${AnoIcont} 01APR${AnoIcont} 01MAY${AnoIcont} 01JUN${AnoIcont} 01JUL${AnoIcont} 01AUG${AnoIcont} 01SEP${AnoIcont} 01OCT${AnoIcont} 01NOV${AnoIcont} 01DEC${AnoIcont}'
timeF='30JAN${AnoIcont} 30MAR${AnoIcont} 30APR${AnoIcont} 30MAY${AnoIcont} 30JUN${AnoIcont} 30JUL${AnoIcont} 30AUG${AnoIcont} 30SEP${AnoIcont} 30OCT${AnoIcont} 30NOV${AnoIcont} 30DEC${AnoIcont}'

i=1
while (i <= 11)
TI=subwrd(timeI,i)
TF=subwrd(timeF,i)
Arquivo=substr(TI,3,7)

'set time 'TI' 'TF''
'define plot=${_var}'
'set sdfwrite  -nc4  -flt  -zip ${dirtrab}/'Arquivo'.nc'
'sdfwrite plot'
'!ncatted -a calendar,time,c,c,360_day ${dirtrab}/'Arquivo'.nc'

i=i+1
endwhile
'quit'
EOF

grads -blc "run ${dirtrab}/geranc.gs"
grads -blc "run ${dirtrab}/geranc2.gs"


cd ${dirtrab}


cdo cat JAN${AnoIcont}.nc 0128FEV${AnoIcont}.nc 2930FEV${AnoIcont}.nc MAR${AnoIcont}.nc APR${AnoIcont}.nc MAY${AnoIcont}.nc JUN${AnoIcont}.nc JUL${AnoIcont}.nc AUG${AnoIcont}.nc SEP${AnoIcont}.nc OCT${AnoIcont}.nc NOV${AnoIcont}.nc DEC${AnoIcont}.nc ${_cenario}_${_var}${AnoIcont}.nc
rm -f   JAN${AnoIcont}.nc 0128FEV${AnoIcont}.nc 2930FEV${AnoIcont}.nc MAR${AnoIcont}.nc APR${AnoIcont}.nc MAY${AnoIcont}.nc JUN${AnoIcont}.nc JUL${AnoIcont}.nc AUG${AnoIcont}.nc SEP${AnoIcont}.nc OCT${AnoIcont}.nc NOV${AnoIcont}.nc DEC${AnoIcont}.nc
rm -f ${dirtrab}/geranc.gs ${dirtrab}/geranc2.gs
rm -f ${dirtrab}/CTL_TEMPLATE_365.ctl
cd ..

echo ARQUIVOS CONCATENADOS ${AnoIcont}

#data=`ls -la ${dirtrab}/PREC${AnoI}.nc | awk  '{print $6" "$7}'`
#echo $data

data=`date +%F-T%H:%M:%SZ`
echo $data

let AnoIcont=${AnoIcont}+1
done

cdo cat ${dirtrab}/${_cenario}_${_var}*.nc ${dirtrab}/arquivo.nc
rm -f ${dirtrab}/${_cenario}_${_var}*.nc

ncrename -v plot,${_varc} ${dirtrab}/arquivo.nc 

#MONTA OS ATRIBUTOS GLOBAIS
ncatted -a Conventions,global,c,c,"CF-1.4" ${dirtrab}/arquivo.nc
ncatted -a contact,global,c,c,"projeta@inpe.br" ${dirtrab}/arquivo.nc
ncatted -a creation_date,global,c,c,"${data}" ${dirtrab}/arquivo.nc
ncatted -a experiment_id,global,c,c,"${_cenarioB}"  ${dirtrab}/arquivo.nc
ncatted -a driving_model_id,global,c,c,"${_instituto}-${_modelo}" ${dirtrab}/arquivo.nc
ncatted -a driving_model_ensemble_member,global,c,c,"r1i1p1"  ${dirtrab}/arquivo.nc
ncatted -a driving_experiment,global,c,c,"${_modelo}, ${_cenarioB}, r1i1p1" ${dirtrab}/arquivo.nc
ncatted -a driving_experiment_name,global,c,c,"${_cenarioB}" ${dirtrab}/arquivo.nc
ncatted -a frequency,global,c,c,"day" ${dirtrab}/arquivo.nc
ncatted -a institute_id,global,c,c,"INPE" ${dirtrab}/arquivo.nc
ncatted -a model_id,global,c,c,"INPE-Eta" ${dirtrab}/arquivo.nc
ncatted -a rcm_version_id,global,c,c,"v1"  ${dirtrab}/arquivo.nc
ncatted -a project_id,global,c,c,"CORDEX" ${dirtrab}/arquivo.nc
ncatted -a CORDEX_domain,global,c,c,"SAM-20"  ${dirtrab}/arquivo.nc
ncatted -a product,global,c,c,"output"  ${dirtrab}/arquivo.nc

#INSERE ATRIBUTOS EM LAT E LON
ncatted -a standard_name,lon,c,c,longitude ${dirtrab}/arquivo.nc
ncatted -a standard_name,lat,c,c,latitude ${dirtrab}/arquivo.nc
ncatted -a long_name,lon,m,c,longitude ${dirtrab}/arquivo.nc
ncatted -a long_name,lat,m,c,latitude ${dirtrab}/arquivo.nc
ncatted -a axis,lat,c,c,Y ${dirtrab}/arquivo.nc
ncatted -a axis,lon,c,c,X ${dirtrab}/arquivo.nc

#INSERE INFORMACOES EM TIME(depois pra ajustar precisa do ncap)
#ncatted -a calendar,time,c,c,"${_calendar}" ${dirtrab}/arquivo.nc
#ncatted -a units,time,m,c,"days since 1949-12-01T00:00:00Z" ${dirtrab}/arquivo.nc
#ncatted -a bounds,time,c,c,"time_bnds" ${dirtrab}/arquivo.nc



#ALTERA A PARTICULARIDADE DE CADA VARIAVEL
ncatted -a standard_name,"${_varc}",c,c,"${_standn}" ${dirtrab}/arquivo.nc
ncatted -a     long_name,"${_varc}",c,c,"${_longn}" ${dirtrab}/arquivo.nc

if [[ ${_var} = MNTP  ]] ; then
ncatted -a cell_methods,"${_varc}",c,c,"time: minimum" ${dirtrab}/arquivo.nc
elif [[ ${_var} = MXTP  ]] ; then
ncatted -a cell_methods,"${_varc}",c,c,"time: maximum" ${dirtrab}/arquivo.nc
else
ncatted -a cell_methods,"${_varc}",c,c,"time: mean" ${dirtrab}/arquivo.nc
fi

#ALTERA UNDEF DO ARQUIVO
cdo setmissval,1e+20 ${dirtrab}/arquivo.nc ${dirtrab}/arquivo2.nc


if [[  ${_var} = HINV || ${_var} = LWNV || ${_var} = MDNV || ${_var} = USSL || ${_var} = UZRS  ]] ; then
cdo -mulc,100 ${dirtrab}/arquivo2.nc  ${dirtrab}/arquivo3.nc
else
mv ${dirtrab}/arquivo2.nc ${dirtrab}/arquivo3.nc
fi

#altera a unidade no cabecalho
ncatted -a units,"${_varc}",c,c,"${_unit}" ${dirtrab}/arquivo3.nc

#REMOVE HISTORICO DESNECESSARIO
ncatted -h -a history,global,d,, ${dirtrab}/arquivo3.nc
ncatted -h -a CDO,global,d,, ${dirtrab}/arquivo3.nc
ncatted -h -a CDI,global,d,, ${dirtrab}/arquivo3.nc

### PASSA PARA O FORMATO COMPRESS
#nccopy -k 4 -d 1 -s ${dirtrab}/arquivo3.nc ${saida}/${_varc}_SAM-20_${_instituto}_${_cenarioB}_r1i1p1_INPE-Eta_v1_day_${AnoI}0101-${AnoF}${_mesdiafinal}.nc
#rm -f ${dirtrab}/arquivo*.nc
#echo ${saida}/${_varc}_SAM-20_${_instituto}_${_cenarioB}_r1i1p1_INPE-Eta_v1_day_${AnoI}0101-${AnoF}${_mesdiafinal}.nc

### PASSA PARA O FORMATO COMPRESS
nccopy -k 4 -d 1 -s ${dirtrab}/arquivo3.nc ${saida}/${_varc}.nc
rm -f ${dirtrab}/arquivo*.nc
echo ${saida}/${_varc}.nc

let _contvar=${_contvar}+1
#vai pra proxima variavel
done

let iMod=${iMod}+1
done



