#! /bin/bash 
#--------------------------------------------------------------------#
#                    ArmazenaEXP - GDAD/CPTEC/INPE - 2024                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Script para armazenar os dados de um experimento qualquer do scratchin para o online6
#  em que foi rodado o Sistema de Modelagem SMNA.
#
# !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
#  22-02-2024 - Luiz Sapucci - Versão do SMNA para o EGEON com copia na Shared
#
# !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 Egeon em que foi rodado o SMNA para o Shared.\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. "SMNA" "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 SHARED \033[m"
  echo -e "\033[32;1m=> REPOPATH  : Endereço onde os dados deverão ser copiados \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 10 ]; 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 REPOPATH=${10}
export LCP=${11}

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

if [ "${SYSNAME:0:4}" == "SMNA" ]; then
  export MRES=`echo ${TRC} ${NLV} | awk '{printf("TQ%4.4dL%3.3d\n",$1,$2)}'`
 elif [ "${SYSNAME:0:3}" == "SMG" ]; then
  export MRES=`echo ${TRC} ${NLV} | awk '{printf("KM%2.2dL%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 rodado o Sistema de Modelagem para o shared\033[m"

echo -e ""
echo ./ArmazenaEXP.sh ${SYSNAME} ${LABELI} ${LABELF} ${NHOURS} ${EXPE} ${PREFIX} ${TRC} ${NLV} ${REPO} ${REPOPATH}
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"
echo -e "\033[34;1m > Local onde copiar   : \033[m \033[31;1m${REPOPATH}\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:4}/${EXPE}
else
  if [ ${REPO} = "SHARED" ]; then
    echo -e ""
    echo "Status atual do Shared: "
    echo -e ""
    df -h | grep das
    echo -e ""
    Armazem=${REPOPATH}/${EXPE}
  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
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:4}.ksh vars_export ${SYSNAME}

  work_model_bam=/mnt/beegfs/jose.aravequia/SMG/datainout/bam/model/
  work_gsi_dataout=/mnt/beegfs/jose.aravequia/SMG/datainout/gsi/dataout

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

  if test ! -d ${Armazem}/gsi/dataout; then 
    mkdir -p ${Armazem}
    cd ${Armazem} 
    if [ ${SYSNAME:0:4} == "SMNA" ]; 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
    ls ${Armazem} 
    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
  space=`du -sh ${Armazem}| awk  '{print $1}'`
  echo " ######## Espaco ocupando antes desse processo: " $space " ##########"
  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:4} == "SMNA" ]; 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 -p bam/model/dataout/${MRES}/${LABELI}
      cp ${work_model_bam}/dataout/${MRES}/DAS/${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 depois desse processo: " $space
  echo " > Verificar impacto na disponibilidade de armazenamento"
  df -h | grep das
   
 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

