#! /bin/bash

#
#BOP
#----------------------------------------------------------------------------------#
# Sistema Comunitário de Avaliação de modelos Numéricos de Tempo e Clima (SCANTEC) #
#----------------------------------------------------------------------------------#
#
# !DESCRIPTION:
# Script que transforma dados .nc (por exemplo do MONAN) em dados .nc recortados e 
# depois em formato grib para serem utilizados no SCANTEC versão 2.0
#
# !CALLING SEQUENCE:
# ./nc2grb.sh dataINI dataFIM ndia nhor nhan area EXPE NCin
#
#  onde: 
#     dataINI=2024021400     Data inicial do periodo desejado
#     dataFIM=2024022300     Data final do periodo desejado
#     ndia=5                 Numero de dias de integração de cada rodada
#     nhor=24                Numero de horas entre cada saida avaliada
#     nhan=24                Numero de horas entre as analises avaliadas
#     area=global            Area onde o modelo está sendo avaliado
#     EXPE=EXPE              Lable dos dados gerados que devem estar no datain
#     NCin=diretorio         Endereço dos dados NETcdf de entrada
#                  
# !Histórico de revisões: 
#      05/02/2025 - Victor Ranieri - versão inicial basweado no projeto PIBIC
#      07-02-2025 - Luiz Sapucci   - ajustes nos diretorio dados no scantec
#      Sindy
#
# !Notes:
# Altere os caminhos que precisar via argumento na chamada. Essa configuração do testcase
# foi a mesma usada para criar o testcase do MONAN disponivel em 
# https://ftp1.cptec.inpe.br/pesquisa/das/scantec/TestCase_SCANTEC/MONAN/
#
# !Pre requesitos:
#      inctime no /home/bin
#      versao do grads com lat4d disponivel
#      Espaco em disco suficiente para seu periodo.
#      Esse script precisa ser rodado no SCANTEC/scripts para que a saida fique no datain
#
#EOP  
#----------------------------------------------------------------------------------#
#BOC

# Verificando argumentos de entrada se testcase
if [ "${1}" = "testcase" ]
then
  export dataINI=2024021400
  export dataFIM=2024021500
  export ndia=5                  # Numero de dias de integração de cada rodada
  export nhor=24                 # Numero de horas entre cada saida avaliada
  export nhan=24                 # Numero de horas entre as analises avaliadas
  export area=global             # Area onde o modelo está sendo avaliado

  export EXPE="testcase"
  -
  export NCin=/share/das/dist/victor.ranieri/MONANexp/MONAN_v1.1.0/
  
  echo -e ""
  echo -e "\033[31;1m  ATENCAO !!! usando dados da ferramenta  \033[m"
  echo -e ""
  echo -e "\033[33;1m ./nc2grb.sh $dataINI $dataFIM $ndia $nhor $nhan $area $EXP $NCin \033[m"
  echo -e ""
else

# Verificando se ajuda
  if [ "${1}" = "ajuda" ]
    then
    echo -e ""
    echo -e "\033[33;1m Ferramenta que transforma dados .nc (por exemplo do MONAN) em dados .nc recortados e depois em formato grib para serem utilizados no SCANTEC versão 2.0  \033[m"
    echo -e ""
    echo -e "\033[33;1m !INTERFACE:\033[m"
    echo -e "\033[33;1m ./nc2grb.sh  dataINI dataFIM ndia nhor nhan area EXPE NCin \033[m"
    echo -e ""
    echo -e "\033[32;1m Digite com a palabra testcase no primeiro argumento para o testcase padrão:\033[m"
    echo -e "\033[32;1m ./nc2grb.sh  testcase \033[m"
    echo -e ""
    exit 
  fi
  
echo -e ""
echo -e "\033[34;1m > ./nc2grb.sh: Ferramenta que transforma dados .nc (por exemplo do MONAN) em dados .nc  \033[m"
echo -e "\033[34;1m > recortados e depois em formato grib para serem utilizados no SCANTEC versão 2.0          \033[m"

  
  # Verificando argumentos de entrada
  if [ -z "${1}" ]
  then
    export dataINI=2024021400
  else
    export dataINI=${1}
  fi
  if [ -z "${2}" ]
  then
    export dataFIM=2024022300
  else
    export dataFIM=${2} 
  fi
  if [ -z "${3}" ]
  then
    export ndia=5
  else
    export ndia=${3}
  fi
  if [ -z "${4}" ]
  then
    export nhor=24
  else
    export nhor=${4}
  fi
  if [ -z "${5}" ]
  then
    export nhan=24
  else
    export nhan=${5}
  fi
  if [ -z "${6}" ]
  then
    export area=global
  else
    export area=${6}
  fi
  if [ -z "${7}" ]
  then
    export EXPE="MONAN"
  else
    export EXPE=${7}
  fi
  if [ -z "${8}" ]
  then
    export NCin=/share/das/dist/victor.ranieri/MONANexp/MONAN_v1.1.0/
  else
    export NCin=${8}
  fi

############################
  if [ $# -eq 0 ]
   then
     echo -e ""
     echo -e "\033[31;1m          !!! ATENCAO !!!\033[m"
     echo -e "\033[31;1m RODANDO COM PARAMETROS DO TESTCASE  E COLOCADO NO EXPE \033[m"
     echo -e ""
     echo -e "\033[33;1m ./nc2grb.sh $dataINI $dataFIM $ndia $nhor $nhan $area $EXPE $NCin \033[m"
     echo -e ""
     echo -e "\033[31;1m ATENCAO!! CASO NÁO TENHA CERTEZA DISSO NAO CONTINUE \033[m"
     echo -e "\033[31;1m NESSE CASO UTILIZE O TESTCASE COLOCANO NO TESTECASE DIGITANDO: "
     echo -e ""
     echo -e "\033[33;1m ./nc2grb.sh  testcase   \033[m"
     echo ""
     echo -ne "\033[31;1m > Deseja continuar? (S/N) \033[m"
     read resposta

    if [[ ${resposta} != "S" && ${resposta} != "s" ]]
    then
      echo ""
      echo -e "\033[34;1m  Saindo da ferramenta!!! \033[m"
      echo ""
      exit
    fi

  fi

fi

# Caso não tenha o inctime instalado obtenha-o em https://svn.cptec.inpe.br/inctime
inctime=${HOME}/bin/inctime

# Criando o diretorio de saida para essa area
mkdir -p ../datain/${EXPE}
mkdir -p ../datain/${EXPE}/${area}
cd ../datain/${EXPE}/${area}

#Função para formato especifico do tempo para o lats4d
data_fmt() {

  data=${1}      
  yyyy=${data:0:4}
  mm=${data:4:2}
  dd=${data:6:2}
  hh=${data:8:2}
  if [ ${mm} -eq 01 ]; then nmm=JAN; fi
  if [ ${mm} -eq 02 ]; then nmm=FEB; fi
  if [ ${mm} -eq 03 ]; then nmm=MAR; fi
  if [ ${mm} -eq 04 ]; then nmm=APR; fi
  if [ ${mm} -eq 05 ]; then nmm=MAY; fi
  if [ ${mm} -eq 06 ]; then nmm=JUN; fi
  if [ ${mm} -eq 07 ]; then nmm=JUL; fi
  if [ ${mm} -eq 08 ]; then nmm=AUG; fi
  if [ ${mm} -eq 09 ]; then nmm=SEP; fi
  if [ ${mm} -eq 10 ]; then nmm=OCT; fi
  if [ ${mm} -eq 11 ]; then nmm=NOV; fi
  if [ ${mm} -eq 12 ]; then nmm=DEC; fi

  datafmt=${hh}Z${dd}${nmm}${yyyy}

}        

dataANA=$dataINI

while [ ${dataANA} -le ${dataFIM} ]; do
  echo  
  echo "%%%%%%%%Processando a data do periodo:"${dataANA}
  echo 

  mkdir -p ${dataANA}
  cd ${dataANA}

  data=${dataANA}
  dataf=$(${inctime} ${dataANA} +${ndia}d %y4%m2%d2%h2)  

  # Chama a função para formatar a data
  data_fmt ${dataf}
  dataffmt=${datafmt}
  data_fmt ${dataANA}

  ## Nome do arquivo em .nc
  #file_name="MONAN_DIAG_G_POS_GFS_${dataANA}.00.00.x1024002L55.nc"
  file_name="ERA5_${yyyy}-${mm}-${dd}.nc" 
  echo $file_name


  ## lats4d.sh e usado aqui para recortar o dado bruto em dados menores 

  echo "Fazendo o recorte para o arquivo ${file_name} com recorte " $area

  fout=ERA5_${area}_${dataANA}

  lats4d.sh -v -i ${NCin}/${file_name} -o ${fout} -ftype sdf -format netcdf -time $datafmt  $dataffmt -vars r t q u v -levs 200 250 500 850 

  # América do sul com as variaveis rainc rainnc mslp u10 v10, lat/lon -60 15 -lon 270 330
  # Para o recorte da américa do sul descomente a linha abaixo mude  $area para "AS"    

  #lats4d.sh -v -i ${datain}${file_name} -o ${fout} -ftype sdf -format netcdf -time 00Z{data}FEB2024 00Z${final_data}FEB2024 -lat -60 15 -lon 270 330 -vars rainc rainnc mslp u10 v10
  
 # Teste global para ERA5 com variaveis t q r u v 
  #lats4d.sh -v -i "${NCin}/${file_name}" -o ${fout} -ftype sdf -format netcdf -time $datafmt  $dataffmt -vars r t q u v -levs 200 250 500 850  

  # configuração do regrid requerido

cat << EOF > grade.txt  
gridtype = lonlat
xsize    = 360
ysize    = 180
xfirst   = -180.0
xinc     = 1.0
yfirst   = -90
yinc     = 1.0
EOF

  # Loop para iterar sobre as datas
  while [ ${data} -le ${dataf} ]; do
        echo
	echo ">>>>>>>>>>>>>>>>>> Processando a previsão : "${data}
        ls 
        # Chama a função para formatar a data
        data_fmt ${data}

        fout=ERA5_${dataANA}-${data}

        # Executa o comando nohup para processar os dados
       nohup lats4d.sh -v -i out_${dataANA}.nc -time ${datafmt} ${datafmt} -o ${fout} -ftype sdf -format netcdf 

#> ${data}.log &
	
	
 	# Incrementa a data
        data=$(${inctime} ${data} +${nhor}h %y4%m2%d2%h2)  
	
  done

  for file in ERA5*.nc; do
    echo "$file"

    filein=${file}
    
    filein_reg=$(basename "${filein}" .nc)
    if [[ ! "$filein_reg" =~ -reg$ ]]; then
      filein_reg="${filein_reg}-reg"
    fi
    
    cdo remapbil,grade.txt "${filein}" "${filein_reg}.nc"
    lats4d.sh -v -i "${filein_reg}.nc" -o "${filein_reg}" -ftype sdf -format grads_grib
	        
   sed -i 's/temperature/temp/'  ${filein_reg}.ctl
   sed -i 's/umeridional/vwnd/'  ${filein_reg}.ctl
   sed -i 's/uzonal/uwnd/'  ${filein_reg}.ctl
   sed -i 's/relhum/Urel/'  ${filein_reg}.ctl

  done 

  dataANA=$(${inctime} ${dataANA} +${nhan}h %y4%m2%d2%h2)  

  rm -rf ERA5_global_*.nc nohup.out grade.txt

  cd ..
 
done
