#! /bin/bash 
#--------------------------------------------------------------------#
#                    ArmazenaEXP - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Script para armazenar os dados de um experimento qualquer do scratchin para o online6
#  em que foi rodado o Sistema de Modelagem SMG ou SMR.
#
# !INTERFACE:
#    ./ArmazenaEXP.sh SYSNAME LABELI LABELF NHOURS EXPE PREFIX TRC NLV
#
#    Onde:
#         => SYSNAME   : Label do sistema de modelagem com o GSI: Ex. "SMG" "SMR"
#         => LABELINI  : Data da analise [%y4%m2%d2%h2]
#         => LABELFIM  : Data da analise Final [%y4%m2%d2%h2]
#         => NHOURS    : Incremento entre analises [+Nh] - N = numero de horas: Ex. "6"
#         => EXPE      : Label do experimento onde se destina os dados de saida: Ex. "TESTCASE"
#         => PREFIX    : CPT,NMC,AVN 
#         => TRC       : resolucao espectral com 4 digitos (SMG), ex: 0699
#                      : resolucao em km com 2 digitos (SMR), ex: 05                         
#         => LV        : total de niveis com 3 digitos, ex: 042
#         => LCP       : 1 - copia apenas os arquivos wrfbdy_d?? e wrf_gsi_input_d??_DATA
#                      : 0 - copia todos os arquivos do dataout do WRF
#
# !EXAMPLES:  
#    ./ArmazenaEXP.sh SMG 2013010100 2013010218 06 EXPE01 CPT 0062 028
#
# !REVISION HISTORY:
#  13-11-2017 - Luiz Sapucci - Codigo Inicial
#  27-08-2018 - Eder Vendrasco - Adaptacao do codigo inicial para inclusao do SMR
#
# !REMARKS:
#
# !BUGS:
#
#EOP
#--------------------------------------------------------------------#
#BOC

# Descomente abaixo para debugar
#set -o xtrace

function ajuda () {
  echo -e ""  
  echo -e "\033[33;1m Ferramenta armazenar os dados de um experimento qualquer do\033[m"
  echo -e "\033[33;1m scratchin para o online6 em que foi rodado o Sistema de Modelagem\033[m"
  echo -e ""
  echo -e "\033[33;1m !INTERFACE:\033[m"
  echo -e "\033[33;1m ./ArmazenaEXP.sh SYSNAME LABELI LABELF NHOURS EXPE PREFIX TRC NLV \033[m"
  echo -e ""
  echo -e "\033[32;1m=> SYSNAME   : Label do sistema de modelagem com o GSI: Ex. "SMG" "SMR" \033[m"
  echo -e "\033[32;1m=> LABELI    : Data da analise [%y4%m2%d2%h2] \033[m"
  echo -e "\033[32;1m=> LABELF    : Data da analise Final [%y4%m2%d2%h2] \033[m"
  echo -e "\033[32;1m=> NHOURS    : Incremento entre analises [+Nh] - N = numero de horas: Ex. "6" \033[m"
  echo -e "\033[32;1m=> EXPE      : Label do experimento onde se destina os dados de saida: EXPE01 \033[m"
  echo -e "\033[32;1m=> PREFIX    : CPT,NMC,AVN  \033[m"
  echo -e "\033[32;1m=> TRC       : resolucao espectral com 4 digitos (SMG), ex: 0699 \033m"
  echo -e "\033[32;1m               resolucao em km com 2 digitos (SMR), ex: 05 \033m"
  echo -e "\033[32;1m=> NLV       : total de niveis com 3 digitos, ex: 042 \033[m"
  echo -e "\033[32;1m=> REPO      : Repositorio para o armazenamento, opções: NETAPP ONLINE \033[m"
  echo -e "\033[32;1m=> LCP       : 1 - copia apenas os arquivos wrfbdy_d?? e wrf_gsi_input_d??_DATA"
  echo -e "\033[32;1m             : 0 - copia todos os arquivos do dataout do WRF \033[m"
  echo -e ""    
  exit 
}

#
# Verificando argumentos de entrada
#
if [ "$#" -ne 9 ]; then
 ajuda
fi

export SYSNAME=${1}
export LABELI=${2}
export LABELF=${3} 
export NHOURS=${4}
export EXPE=${5}
export PREFIX=${6}
export TRC=${7}
export NLV=${8}
export REPO=${9}
export LCP=${10}

export SYSNAMElowc=$(echo ${SYSNAME} | tr [:upper:] [:lower:])

if [ "${SYSNAME:0:3}" == "SMG" ]; then
  export MRES=`echo ${TRC} ${NLV} | awk '{printf("TQ%4.4dL%3.3d\n",$1,$2)}'`
 elif [ "${SYSNAME:0:3}" == "SMR" ]; then
  export MRES=`echo ${TRC} ${NLV} | awk '{printf("KM%2.2dL%3.3d\n",$1,$2)}'`
 else
  echo -e ""
  echo -e "\033[31;1m > Sistema de modelagem desconhecido... Saindo! \033[m"
  echo -e ""
  exit
fi

echo -e ""  
echo -e "\033[33;1m Ferramenta armazenar os dados de um experimento qualquer do\033[m"
echo -e "\033[33;1m scratchin em que foi rodado o Sistema de Modelagem para o online6/NETAPP\033[m"

echo -e ""
echo ./ArmazenaEXP.sh ${SYSNAME} ${LABELI} ${LABELF} ${NHOURS} ${EXPE} ${PREFIX} ${TRC} ${NLV} ${REPO} 
echo -e ""

echo -e "\033[34;1m CONFIGURACAO DA RODADA \033[m"
echo -e ""
echo -e "\033[34;1m > Sistema hospedeiro  : \033[m \033[31;1m${SYSNAME}\033[m"
echo -e "\033[34;1m > Data Inicial        : \033[m \033[31;1m${LABELI}\033[m"
echo -e "\033[34;1m > Data Final          : \033[m \033[31;1m${LABELF}\033[m"
echo -e "\033[34;1m > Intervalo do Ciclo  : \033[m \033[31;1m${NHOURS}\033[m"
echo -e "\033[34;1m > Resolucao           : \033[m \033[31;1m${MRES}\033[m"
echo -e "\033[34;1m > Nome do Experimento : \033[m \033[31;1m${EXPE}\033[m"
echo -e "\033[34;1m > Nome do repositório : \033[m \033[31;1m${REPO}\033[m"

if [ ${REPO} = "ONLINE" ]; then
  echo -e ""
  echo "Status atual do Online6: "
  echo -e ""
  uquota | head -3
  uquota | grep online6
  echo -e ""
  Armazem=/stornext/online6/das/Avalia/${SYSNAME:0:3}/${EXPE}
  read -p "$(echo -e "\033[34;1m > Deseja continuar? (S/N) \033[m") " -n2 resposta
else
  echo -e ""
  echo "Status atual do /dados/das/: "
  echo -e ""
  uquota | head -3
  uquota | grep /dados/das
  echo -e ""
  Armazem=/dados/das/${SYSNAME:0:3}/${EXPE}
fi

  read -p "$(echo -e "\033[34;1m > Deseja continuar? (S/N) \033[m") " -n2 resposta


if [[ ${resposta} = "S" || ${resposta} = "s" ]]
  then
  # Exportando variaveis do eval
  source  ../config_eval.sh vars_export ${SYSNAME} ${EXPE}
  # Exportanto varaiveis do sistema em avaliacao
  source $SUBMIT_HOME/${SYSNAME}/config_${SYSNAMElowc:0:3}.ksh vars_export ${SYSNAME}

  # Criando um diretorio no repositorio do user depois de testar se ja existe

  if test ! -d ${Armazem}; then 
    mkdir -p ${Armazem}
    cd ${Armazem} 
    if [ ${SYSNAME:0:3} == "SMG" ]; then 
      mkdir -p gsi/dataout
      mkdir -p bam/model/datain
      mkdir -p bam/model/dataout/${MRES}
     else 
      mkdir -p gsi/dataout
      mkdir -p wrf/model/dataout/${MRES}
    fi
   else
    echo   
    echo -e "\033[36;1m Experimento ${Armazem} ja realizado \033[m"
    echo
    read -p "$(echo -e "\033[34;1m > Verifique as datas para evitar problemas. Deseja continuar? (S/N) \033[m") " -n2 resposta

    if [[ ${resposta} = "S" || ${resposta} = "s" ]]
    then
      echo 
      echo " > Continuando..."
    else 
      echo 
      echo -e "\033[31;1m > Saindo! \033[m"
      echo 
      exit
    fi
  fi
  
  echo
  echo " > Local do armazenamento: " ${Armazem} 
  echo
  cd ${Armazem}

  # Ciclo principal para as data do periodo
  while [ ${LABELI} -le ${LABELF} ]; do
  
    echo " > Armazenando os dados da data: "${LABELI}
    
    if [ ${SYSNAME:0:3} == "SMG" ]; then 

      # Dados da analise da assimilacao gerada pelo GSI antes de ser lido pelo modelo 
      cp ${work_model_bam}/datain/GANL${PREFIX}${LABELI}S.unf.${MRES} bam/model/datain
      # Dados do background previsto pelo modelo e da analise escrita pelo modelo
      mkdir bam/model/dataout/${MRES}/${LABELI}
      cp ${work_model_bam}/dataout/${MRES}/${LABELI}/GFCT${PREFIX}${LABELI}*.${MRES} bam/model/dataout/${MRES}/${LABELI}
    
      # Copiando os dados de saida do GSI
      cp -R ${work_gsi_dataout}/${LABELI} gsi/dataout/

     else

      #Copiando os dados de saida do WRF
      if test ! -s  wrf/model/dataout/${MRES}/${LABELI} ; then mkdir wrf/model/dataout/${MRES}/${LABELI} ; fi
      if [ $LCP -eq 1 ]; then
        cp -R ${work_mod_dataout}/${LABELI}00/wrf_gsi_input_*  wrf/model/dataout/${MRES}/${LABELI}
        cp -R ${work_mod_dataout}/${LABELI}00/wrfbdy*          wrf/model/dataout/${MRES}/${LABELI}
       else
        cp -R ${work_mod_dataout}/${LABELI}00/*                wrf/model/dataout/${MRES}/${LABELI}
      fi
      cp -R ${work_mod_run}/ARW/SA/${LABELI}00/namelist.wps    wrf/model/dataout/${MRES}/${LABELI}
      cp -R ${work_mod_run}/ARW/SA/${LABELI}00/namelist.input  wrf/model/dataout/${MRES}/${LABELI}
      # Copiando os dados de saida do GSI
      if test ! -s gsi/dataout/${LABELI} ;then mkdir gsi/dataout/${LABELI} ; fi
      cp -R ${work_gsi_dataout}/${LABELI}00/*                  gsi/dataout/${LABELI}
      cp -R ${work_gsi_run}/${LABELI}00/diag*                  gsi/dataout/${LABELI}
      cp -R ${work_gsi_run}/${LABELI}00/fort.*                 gsi/dataout/${LABELI}
      cp -R ${work_gsi_run}/${LABELI}00/wrfanl.${LABELI}00     gsi/dataout/${LABELI}
      cp -R ${work_gsi_run}/${LABELI}00/gsiparm.anl            gsi/dataout/${LABELI}
      cp -R ${work_gsi_run}/${LABELI}00/stdout.anl.${LABELI}00 gsi/dataout/${LABELI}
      cp -R ${work_gsi_run}/${LABELI}00/gsi.*.out              gsi/dataout/${LABELI}

    fi
        
    LABELI=`${inctime} ${LABELI} +${NHOURS}h %y4%m2%d2%h2`
    
  done  
 
  echo 
  echo " > Finalizado!!!"
  echo
  space=`du -sh ${Armazem}| awk  '{print $1}'`
  echo " > Dados armazenados ocupando: " $space
  echo " > Verificar impacto na disponibilidade de armazenamento"
  uquota | head -3
  uquota | grep online6
  
 elif [[ ${resposta} = N || ${resposta} = "n" ]]; then
  echo 
  echo -e "\033[31;1m > Saindo do armazenador de Experimentos. \033[m"
  echo 
  exit 0
 else
  exit 1
fi

