#! /bin/bash
#--------------------------------------------------------------------#
#  Protocolo obsRadi: Evaluation GSI System - GDAD/CPTEC/INPE - 2017 #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
# obsRadi: Ferramenta de diagnostico da assimilacao de dados de 
#          radiancia usando o GSI. 
#          Script para instalar a estrutura basica desse protocolo de 
#          avaliacÃ£o. Mais informacÃµes ver arquivo eval/diag/obsRadi/README.
#
# !INTERFACE:
#      ./config_obsRadi.ksh <opcao> <GSI_system> <EXPE>
#
# !INPUT PARAMETERS:
#  Opcoes..: <opcao> vars_export -> faz export das variaveis de ambiente desse protocolo
#                    configurar  -> configura o protocolo (cria links e pastas em eval/diag/obsRadi)
#                    testcase    -> prepara os dados do teste padrao do protocolo.
#                    ajuda       -> mostra uma lista de informacÃµes de ajuda
#
#  Sistema usando o GSI..: <GSI_system> SMG -> Versao trunk do SMG (Sistema de modelagem Global) com BAM
#                                       RMS -> Versao trunk do RMS (Sistema de modelagem regional) com WRF
#                                       SMG_V0.0.0 -> Versao inicial V0.0.0 do SMG no ramo TAG. 
#
#  Experimento Label..: <EXPE> Nome de indentificacao do experimento em uso do sistema. Esse label Ã© usado para
#                              organizar a saida dos dados evitando sobreescrever resultados melhor controlando-os.
 
#  Exemplos: ./config_obsRadi.ksh vars_export SMG         testcase
#            ./config_obsRadi.ksh configurar  RMS_V2.0.0  EXPE 
# 
# !REVISION HISTORY:
#
# 22 junho de 2017 - L. F. Sapucci - Versao modelo (dammy) apenas com a estrutura e componentes basicos.  
# 06 junho de 2024 - L. F. Sapucci - Versao apta avaliar a radiância na EGEON usando o readDiag-1.0.0. 
##
# !REMARKS:
#
# O protocolo ainda nÃ£o foi testado para os dados do RMS com os modelos WRF e BRAMS.
#
#
# !BUGS:
#   Nenhum ate o momento.
#
#EOP  
#--------------------------------------------------------------------#
#BOC

# Descomentar para debugar
#set -o xtrace

# Variaveis principais
vars_export(){

# Nome do sistema com a versao do GSI (SMG(BAM) ou SMR(BRAMS) ou RMS(WRF) por exemplo) via linha de argumento
  export nome_sys=$1
  
  # Exportando variaveis do eval
  if test ! -s ../../config_eval.sh ; then
      source  ../../../config_eval.sh vars_export $1 $2
    else
      source  ../../config_eval.sh vars_export $1 $2
  fi
  
# Verifica o argumento do label do experimento se nao setado usa padrÃ£o EXPE
  if [ -z "${2}" ]
  then
    export EXPE="EXPE"
  else
    export EXPE=${2}
  fi
 
# Raiz do sistema onde o GSI esta instalado
  export home_sys=${SUBMIT_HOME}/${nome_sys}
  export work_sys=${WORK_HOME}/${nome_sys}

# Raiz dos pacotes de evaluation e estatistica
  export eval_work=${work_sys}/evalu_t12183/${EXPE}
  export estat_home=${eval_home}/stat
  
# Raiz dos pacotes de diagnostico do GSI
  export diag_home=${eval_home}/diag
  export diag_work=${eval_work}/diag

# Diretorios principais do pacote obsRadi
  export obsRadi_home=${diag_home}/obsRadi
  export obsRadi_work=${diag_work}/obsRadi
  export obsRadi_src=${obsRadi_home}/src
  export obsRadi_run=${obsRadi_home}/run
  export obsRadi_bin=${obsRadi_home}/bin

# Diretorios de running do pacote no scratchout   
  export obsRadi_work_run=${obsRadi_work}/run

# Diretorios de saida dos resultados 
  export obsRadi_dataout=${obsRadi_work}/dataout
  export obsRadi_logs=${obsRadi_dataout}/logfile
  export obsRadi_tabe=${obsRadi_dataout}/tabela
  export obsRadi_figu=${obsRadi_dataout}/figure
  export obsRadi_bina=${obsRadi_dataout}/binary

# Diretorios de exposicÃ£o dos resultados na PAGE 
  export diag_page=${eval_page}/diag
  export obsRadi_page=${diag_page}/obsRadi

  if [ 'x'$1 != 'xsilent' ]; then 

   echo -e ""
   echo -e "\033[36;1m Variaveis do obsRadi carregadas com Sucesso! \033[m \033[m"
   echo -e "\033[34;1m > obsRadi SUBM: \033[36;1m${obsRadi_home}\033[m \033[m"
   echo -e "\033[34;1m > obsRadi WORK: \033[36;1m${obsRadi_work}\033[m \033[m" 
   echo -e ""
 
  fi

}

# Funcao ajuda
ajuda(){

  echo -e ""
  echo -e " Conteudo: obsRadi: Ferramenta de diagnostico da assimilacao de dados de "
  echo -e "                    radiancia usando o GSI"
  echo -e ""
  echo -e " Uso.....: ./config_obsRadi.ksh <opcao> <GSI_system> <EXPE>"
  echo -e ""
  echo -e " Opcoes..: <opcao> configurar -> configura o obsRadi (cria links e pastas)"
  echo -e "                   testcase -> descompacta os arquivos do TestCase"
  echo -e "                   ajuda -> mostra esta ajuda"
  echo -e ""
  echo -e " Sistema usando o GSI..: <GSI_system> SMG -> Versao trunk do SMG (GSI com BAM)"
  echo -e "                                      RMS -> Versao trunk do RMS (GSI com WRF)"
  echo -e "                                      SMG_V0.0.0 -> Versao V0.0.0 DO SMG no TAG."
  echo -e ""
  echo -e " Experimento Label..: <EXPE> Nome de indentificacao do experimento em uso do sistema. "
  echo -e "                             Esse label Ã© usado para organizar a saida dos dados"
  echo -e "                             sem sobreescrever resultados e melhor controlando-os."
  echo -e "                             Caso nao setado usa o padrÃ£o EXPE."
  echo -e ""
  echo -e " Exemplos: ./config_obsRadi.ksh ajuda "    
  echo -e "           ./config_obsRadi.ksh configurar  SMG_V0.0.0  testcase "
  echo -e "           ./config_obsRadi.ksh testcase    RMS         EXPE"
  echo -e ""
  echo -e " Testcase padrÃ£o: ./config_obsRadi.ksh configurar SMG EXPE"
  echo -e "                  ./config_obsRadi.ksh testcase   SMG EXPE"
  echo -e ""

}

copy_fixed_file(){

  #
  # Copiando arquivos fixos necessÃ¡rios para qualquer rodada, independente do perÃ­odo
  # estes arquivos nÃ£o estÃ£o sob controle de versÃ£o pois sÃ£o binÃ¡rios

  echo -e " "
  echo -e "\033[34;1m > Copia de arquivos desnecessÃ¡rio   \033[m"
  echo -e "\033[34;1m > HÃ¡ dois experimento para teste do modulo \033[31;1m obsRadi\033[m \033[34;1m. O primeiro sao as saidas do \033[m"
  echo -e "\033[34;1m > testcase do stat rodado com os dataout do GSI do sistema hospedeiro \033[m \033[m"
  echo -e " "
  echo -e "\033[32;1m A segunda opcao Ã© usar os dados disponivel no Gdad/public \033[m"
  echo -e "\033[32;1m  o que interessante pois nao precisa rodar o testcase do sistema hospedeiro. \033[m"

echo -e "\033[32;1m Para a primeira opcao rode se argumentos e para a segunda use "tescase" como primeiro argumento do run_obsRadi.sh \033[m"
}

# Funcao configurar
configurar(){

# Exportando variaveis
  vars_export $1 $2

  echo -e ""  
  echo -e""
  echo -e "\033[34;1m > Bem vindo ao pacote de dignostico do \033[31;1m obsRadi \033[m \033[m"
  echo -e "\033[34;1m > o configurador do obsRadi ira criar pastas \033[m"
  echo -e "\033[34;1m > nos discos scratchout abaixo. \033[m"
  echo -e  ""
  echo -e  "\033[34;1m > obsRadi work: \033[31;1m${obsRadi_work}\033[m \033[m" 
  echo -e ""
  echo -e "\033[34;1m > Deseja continuar? (S/N)\033[m"
  read resposta

  if [[ ${resposta} = "S" || ${resposta} = "s" ]]
  then

# Mensagem ao usuario
  echo -e ""
  echo -e  "\033[34;1m > Configurando o obsRadi ... ${obsRadi_work_run} \033[m"
  echo -e ""

# Criando estrutura de diretorios no scratchout

# Diretorios de saida no scratchout
  if test ! -s ${obsRadi_work_run}; then mkdir -p ${obsRadi_work_run}; fi
  if test ! -s ${obsRadi_dataout}; then mkdir -p ${obsRadi_dataout}; fi
  if test ! -s ${obsRadi_logs}; then mkdir -p ${obsRadi_logs}; fi
  if test ! -s ${obsRadi_tabe}; then mkdir -p ${obsRadi_tabe}; fi
  if test ! -s ${obsRadi_figu}; then mkdir -p ${obsRadi_figu}; fi
  if test ! -s ${obsRadi_bina}; then mkdir -p ${obsRadi_bina}; fi
# Diretorios de saida na PAGE 
  if test ! -s ${eval_page}; then mkdir -p ${eval_page}; fi
  if test ! -s ${diag_page}; then mkdir -p ${diag_page}; fi
  if test ! -s ${obsRadi_page}; then mkdir -p ${obsRadi_page}; fi

  echo -e ""
  echo -e "\033[34;1m > Configuracao obsRadi completa \033[m"



elif [[ ${resposta} = N || ${resposta} = "n" ]]
then
  echo -e "\033[34;1m > Saindo do configurador. \033[m"
  exit 0
else
  exit 1
fi

}

# Funcao compilar
compilar(){

# Exportando variaveis
  vars_export $1 $2

# Exportando variaveis do eval
  source  ${eval_home}/config_eval.sh vars_export $1 $2

# Exportanto varaiveis do sistema em avaliacao
#  source ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}
  
# Verificando se esta logado no eslogin01
if [ ${HOSTNAME} != "eslogin01" -a ${HOSTNAME} != "eslogin02" ];then
     echo "#####################################################################"
     echo "#                                                                   #"
     echo "#               Voce esta logado no ${HOSTNAME}                       #"
     echo "#                                                                   #"
     echo "# Antes de proceder com a instalacao logar em um destes servidores: #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin01 -XC                                               #"
     echo "#                                                                   #"
     echo "#  ou                                                               #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin02 -XC                                               #"
     echo "#                                                                   #"
     echo "#####################################################################"

     exit
fi


#############################################################################
# Compilacao do obsRadi
##############################################################################

  cd ${obsRadi_src}

  echo 
  echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%"
  echo " Compilando o obsRadi:  "
  echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%"
  echo
  
  # Chamar aqui um arquivo de compilacao quando for o caso do tipo:
#  ${obsRadi_src}/compile_obsRadi.sh 2>&1 | tee ${obsRadi_src}/compile_obsRadi.log

  if [ -e ${obsRadi_src}/obsRadi.x ]; then # mudar aqui para o nome do arquivo executavel  ${obsRadi_bin}/obsRadi.exe
    echo 
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!                                                !"
    echo "!      Compilacao do obsRadi com Sucesso         !"
    echo "!                                                !"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo 
    mv obsRadi.x ../bin
  else 
    echo 
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!                                                !"
    echo "!       Nada para compilar nesse protocolo.      !"
#    echo "! Compilacao do obsRadi falhou !!!!              !"
#    echo "! Rever configuracoes ou espaÃ§o em disco!        !"
#    echo "! Mais informacao no arquivo compile_obsRadi.log !"
    echo "!                                                !"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo 
    exit -9
  fi

  echo -e "\033[34;1m +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \033[m"
  echo -e "\033[34;1m > Compilacao obsRadi completa.  \033[m"
  echo -e "\033[34;1m > Verifique possiveis erros no arquivo compile_obsRadi.log. \033[m"
  echo -e "\033[34;1m +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \033[m"


  bannerobsRadi

}

# Funcao testcase
testcase(){

  aloca_testcase $1 $2

  bannerobsRadi

}

# Funcao aloca tescase
aloca_testcase(){

# Exportando variaveis
  vars_export $1 $2

# Exportando variaveis do eval
  source  ${eval_home}/config_eval.sh vars_export  $1 $2

# Exportanto varaiveis do sistema em avaliacao
#  source ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}

  #
  # copiando arquivos fixos (JÃ¡ devem estar pois sÃ£o copiados durante a configuracÃ£o)
  #
  echo "copy_fixed_file desse protocolo.."
  copy_fixed_file 

}

# Final
bannerobsRadi(){

  echo -e ""
  echo -e "\033[34;1m > Para mais informacoes sobre esta distribuicao do obsRadi, leia o arquivo: \033[m"
  echo -e "\033[34;1m > eval/diag/obsRadi/README \033[m"
  echo -e ""

  exit 0

}

# Verifica os argumentos passados junto com o script
echo -e ""
echo -e "\033[36;1m >>> Config_obsRadi.ksh --> \033[m"

if [[ $# = 0 ]]
then
  echo -e ""
  echo -e "\033[31;1m > Nao foi passado nenhum argumento! \033[m"
  ajuda
  bannerobsRadi
elif [[	${1} =  "ajuda" ]]
then
  echo -e	""
  echo -e	"\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[m"
  ajuda
  bannerobsRadi
elif [[ $# < 2 ]]
then
  echo -e ""
  echo -e "\033[31;1m > Pelo menos dois argumentos sao requeridos! \033[m"
  ajuda
  bannerobsRadi
elif [[ ${1} =	"configurar" ]]
then
  echo -e ""
  echo -e "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m  \033[34;1m Argumentos:\033[m \033[31;1m${2} ${3}\033[m \033[m"
  configurar ${2} ${3}
  bannerobsRadi
elif [[ ${1} = "compilar" ]]
then
  echo -e""
  echo -e "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m  \033[34;1m Argumentos:\033[m \033[31;1m${2} ${3}\033[m \033[m"
  compilar ${2} ${3}
  bannerobsRadi
elif [[ ${1} = "testcase" ]]
then
  echo -e ""
  echo -e "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m  \033[34;1m Argumentos:\033[m \033[31;1m${2} ${3}\033[m \033[m"
  testcase ${2} ${3}
  bannerobsRadi
elif [[ ${1} = "vars_export" ]]
then
  vars_export ${2} ${3}
else
  echo -e ""
  echo -e "\033[31;1m > Opcao desconhecida: \033[31;1m${1}\033[m \033[m"
  ajuda
  bannerobsRadi
fi
