#! /bin/bash 
#--------------------------------------------------------------------#
#                    minFcos - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#      run_adjBerr.sh: Script para executar a ferramenta de diagnostico e impacto da matriz de covariancias (B) 
#               usando o GSI
#
# !INTERFACE:
#       ./run_adjBerr.sh BFILE BFILEREF DUMP NBFILE NBFILEREF
#
#    Onde:
#        BFILE: Nome do arquivo com a matriz de covariancias a ser avaliada
#        BFILEREF: Nome do arquivo com a matriz de covariancias de referencia
#        DUMP: Flag (T/F) para escrever ou nao os records de BFILE e BFILREF
#        IDBFILE: Nome de identificacao da matriz de covariancias a ser avaliada
#        IDBFILEREF: Nome de identificacao da matriz de covariancias de referencia
#
#  !EXAMPLES:  
#        ./run_adjBerr.sh new_gsir4.berror_stats.gcv global_berror.l64y386.f77.gcv F CPTEC NCEP
#        ./run_adjBerr.sh gsir4.berror_stats.gcv.BAM.TQ0062L028 gsir4.berror_stats.gcv.BAM.TQ0062L028.rev1 T CPTEC CPTEC.rev1
#        ./run_adjBerr.sh TESTCASE
#
#  !TESTCASE:
#  Digite sem argumentos de entrada para o testcase do sistema hospedeiro, da forma:
#        ./run_adjBerr.sh              
#
# !REVISION HISTORY:
#  02-05-2017 - Luiz Sapucci - Codigo Inicial
#  26-06-2017 - Carlos Frederico Bastarz - criacao das figuras e integracao com o codigo fortran
#
# !REMARKS:
#  Este programa deve funcionar para qualquer matriz de covariancias global utilizada no GSI.
#
#EOP
#--------------------------------------------------------------------#
#BOC

gsidataout=/scratchin/grupos/assim_dados/home/gdad/public/eval/diag/adjBerr/testcase

# Verificando argumentos de entrada
if [ $# -eq 0 ]
 then
  echo -e ""
  echo -e "\033[31;1m          !!! ATENCAO !!!\033[m"
  echo -e "\033[31;1m RODANDO COM PARAMETROS DO TESTCASE \033[m"

  export BFILE="gsir4.berror_stats.gcv.BAM.TQ0062L028"
  export BFILEREF="gsir4.berror_stats.gcv.BAM.TQ0062L028"
elif [ $# -eq 5 ]
then
  export BFILE=${1}
  export BFILEREF=${2}
  export DUMP=${3}
  export IDBFILE=${4}
  export IDBFILEREF=${5}
else
  exit 1
fi

echo -e ""
echo -e " > adjBerr: Ferramenta de diagnostico e impacto da matriz de covariancias (B) usando o GSI"
echo -e ""
echo -e "\033[34;1m CONFIGURACAO DA RODADA \033[m"
echo -e ""
echo -e "\033[34;1m > Nome matriz B.....: \033[m \033[31;1m${BFILE}\033[m"
echo -e "\033[34;1m > Nome matriz B REF.: \033[m \033[31;1m${BFILEREF}\033[m"
echo -e "\033[34;1m > Dump matriz B?....: \033[m \033[31;1m${DUMP}\033[m"
echo -e "\033[34;1m > ID matriz B.......: \033[m \033[31;1m${IDBFILE}\033[m"
echo -e "\033[34;1m > ID matriz B REF...: \033[m \033[31;1m${IDBFILEREF}\033[m"
echo -e "\033[34;1m > Sistema hospedeiro: \033[m \033[31;1m${nome_sys}\033[m"
echo -e "\033[34;1m > Experimento label : \033[m \033[31;1m${EXPE}\033[m"

# Exportando variaveis do eval
#source  ../../config_eval.sh vars_export ${nome_sys} ${EXPE}
#
#if test ! -s ${iadjBerr_tabe}
#then
#  echo "Criando a arvore de diretorio para esse experimento e protocolo:" ${nome_sys} ${EXPE}
#  echo "../../config_eval.sh configurar ${nome_sys} ${EXPE}"
#  ../../config_eval.sh configurar ${nome_sys} ${EXPE}
#  if test ! -s ${adjBerr_tabe}; then echo ""; echo "Rodada cancelada!!!" ; exit; fi
#else 
#  echo "Arvore de diretorio do experimento" ${EXPE} "ja existentente para o protocolo"; 
#  echo ""
#fi
#
## Exportanto variaveis do sistema em avaliacao
#source ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}

echo ""
echo -e "\033[34;1m > Preparando os dados e arquivos para o diagnostico da matriz de covariâncias\033[m"

mkdir -p ${IDBFILE}
cp adjBerr.exe ${IDBFILE}
cp ${BFILE} ${IDBFILE}/
cd ${IDBFILE}/
./adjBerr.exe ${BFILE} ${DUMP}

cd -

mkdir -p ${IDBFILEREF}
cp adjBerr.exe ${IDBFILEREF}
cp ${BFILEREF} ${IDBFILEREF}/
cd ${IDBFILEREF}/
./adjBerr.exe ${BFILEREF} ${DUMP}

cd -

# Script 1: Perfis zonais medios das amplitudes de: sf, vp, t e q

cat <<EOF > plota_perfis_medios_amplitudes.gs
#-----------------------------------------------------------------------------#
#               Data Assimilation Development - DMD/CPTEC/INPE                #
#-----------------------------------------------------------------------------#
#BOP
#
# !SCRIPT:
#      Script GrADS para display grafico
#
# !DESCRIPTION:
#     plota_perfis_medios_amplitudes.gs: Script GrADS para visualizacao dos
#                                        perfis zonais medios das amplitudes
#                                        das seguintes variaveis:
#                                        - sf: Funcao de Corrente;
#                                        - vp: Velocidade Potencial;
#                                        - t: Temperatura;
#                                        - q: Umidade. 
#
# !REVISION HISTORY: 
# 25 de Setembro de 2015 - C. F. Bastarz - Versao inicial.
# 13 de Setembro de 2016 - C. F. Bastarz - Modificacoes diversas. 
# 13 de Marco de 2017    - C. F. Bastarz - Modificacoes diversas. 
# 26 de Junho de 2017    - C. F. Bastarz - Modificacoes diversas.
# 06 de Julho de 2017    - C. F. Bastarz - Generalizacao do script para ler as
#                                          variaveis de um array. 
#
# !REMARKS:
# - As primeira quatro figuras referen-se à coordenada vertical sigma natural;
# - As últimas quatro figuras referem-se ao logarítmo da coordenada sigma natural;
# - Este script deve ser executado com o GrADS 2.1:
# $ module load grads
# $ module swap grads grads/2.1.a1 
#
#EOP
#-----------------------------------------------------------------------------#
#BOC

'reinit'
'reset'

'set display color white'
'c'

'set grid off'

# Salvar figura (yes/no)?
save=yes

# Variaveis
# sf: Função de corrente
# vp: Velocidade potencial
# t: Temperatura;
# q: Umidade.
vars='sf vp t q'

zz=1
while(zz<=2)

  if(zz=1)
    'set zlog off'
    possf='set parea 0.3 2.8 4.55 8'
    posvp='set parea 3 5.5 4.55 8'
    post='set parea 5.75 8.25 4.55 8'
    posq='set parea 8.45 10.95 4.55 8'
  else
    'set zlog on'
    possf='set parea 0.3 2.8 0.4 3.85'
    posvp='set parea 3 5.5 0.45 3.85'
    post='set parea 5.75 8.25 0.4 3.85'
    posq='set parea 8.45 10.95 0.4 3.85'
  endif

  vv=1
  while(vv<=4)
  
    var=subwrd(vars,vv)
  
    'open ./${IDBFILEREF}/corzin-'var'.ctl'
    'open ./${IDBFILE}/corzin-'var'.ctl'
  
    'set ylopts 1 0 0.1'
    'set xlopts 1 0 0.1'
  
    'define media1=aave(corzin.1,global)'
    'define media2=aave(corzin.2,global)'
  
    'set grads off'
    'set cmark 0'
    'set ccolor 4'
    'set line 2 3 5'
  
    if(var=sf)
      possf
      varsimb='\`3Y'
      'set xlint 1'
      'set vrange 0 6.5'
      'd media1*(1e-6)'
      'set cmark 0'
      'set ccolor 2'
      'set vrange 0 6.5'
      'd media2*(1e-6)'
    endif
    if(var=vp)
      posvp
      varsimb='\`3X'
      'set ylopts 0 0 0'
      'set xlint 1'
      'set vrange 0 6.5'
      'd media1*(1e-6)'
      'set cmark 0'
      'set ccolor 2'
      'set vrange 0 6.5'
      'd media2*(1e-6)'
    endif
    if(var=t)
      post
      varsimb='\`2T'
      'set ylopts 0 0 0'
      'set xlint 0.5'
      'set vrange 0.4 2.5'
      'd media1'
      'set cmark 0'
      'set ccolor 2'
      'set vrange 0.4 2.5'
      'd media2'
    endif
    if(var=q)
      posq
      varsimb='\`2q'
      'set ylopts 0 0 0'
      'set xlint 0.5'
      'set vrange 0 2.5'
      'd media1*1e1'
      'set cmark 0'
      'set ccolor 2'
      'set vrange 0 2.5'
      'd media2*1e1'
    endif
  
    'draw title 'varsimb''

    'close 2'
    'close 1'
  
    vv=vv+1
  endwhile

  zz=zz+1
endwhile

'cbar_line -x 9.5 -y 3.5 -c 4 2 -l 1 1 -m 0 0 -t "${IDBFILEREF}" "${IDBFILE}"'
  
if(save=yes)
  'gxprint amplitudes-perfis_${IDBFILEREF}-${IDBFILE}.png'
#  'gxprint amplitudes-perfis_${IDBFILEREF}-${IDBFILE}.eps'
endif

'quit'
EOF

# Script 2: Secoes meridionais das amplitudes de: sf, vp, t e q

cat <<EOF > plota_secoes_amplitudes.gs
#-----------------------------------------------------------------------------#
#               Data Assimilation Development - DMD/CPTEC/INPE                #
#-----------------------------------------------------------------------------#
#BOP
#
# !SCRIPT:
#      Script GrADS para display grafico
#
# !DESCRIPTION:
#     plota_secoes_amplitudes.gs: Script GrADS para visualizacao das
#                                        secoes meridionais das amplitudes
#                                        das seguintes variaveis:
#                                        - sf: Funcao de Corrente;
#                                        - vp: Velocidade Potencial;
#                                        - t: Temperatura;
#                                        - q: Umidade. 
#
# !REVISION HISTORY: 
# 07 de Julho de 2017 - C. F. Bastarz - Versao inicial. 
#
# !REMARKS:
# - As primeira quatro figuras referen-se à coordenada vertical sigma natural;
# - As últimas quatro figuras referem-se ao logarítmo da coordenada sigma natural;
# - Este script deve ser executado com o GrADS 2.1:
# $ module load grads
# $ module swap grads grads/2.1.a1 
#
#EOP
#-----------------------------------------------------------------------------#
#BOC

'reinit'
'reset'

'set display color white'
'c'

'set grid off'

# Salvar figura (yes/no)?
save=yes

# Variaveis
# sf: Função de corrente
# vp: Velocidade potencial
# t: Temperatura;
# q: Umidade.
vars='sf vp t q'

possf${IDBFILEREF}='set parea 0.3 2.8 4.55 8'
posvp${IDBFILEREF}='set parea 3 5.5 4.55 8'
post${IDBFILEREF}='set parea 5.75 8.25 4.55 8'
posq${IDBFILEREF}='set parea 8.45 10.95 4.55 8'

possf${IDBFILE}='set parea 0.3 2.8 0.4 3.85'
posvp${IDBFILE}='set parea 3 5.5 0.45 3.85'
post${IDBFILE}='set parea 5.75 8.25 0.4 3.85'
posq${IDBFILE}='set parea 8.45 10.95 0.4 3.85'

zz=1
while(zz<=2)

  if(zz=2)
    'set zlog on'
    fname='amplitudes-secoes_${IDBFILEREF}-${IDBFILE}-zlog'
  else
    'set zlog off'
    fname='amplitudes-secoes_${IDBFILEREF}-${IDBFILE}'
  endif

  vv=1
  while(vv<=4)
  
    var=subwrd(vars,vv)
  
    'open ./${IDBFILEREF}/corzin-'var'.ctl'
    'open ./${IDBFILE}/corzin-'var'.ctl'
  
    'set ylopts 1 0 0.1'
    'set xlopts 1 0 0.1'
  
    'define media1=corzin.1'
    'define media2=corzin.2'
  
    'set grads off'
  
    'set gxout contour'
    'set ccolor rainbow' 
 
    if(var=sf)
      varsimb='\`3Y'
      possf${IDBFILEREF}
      'set ccolor rainbow' 
      'set clevs 0 1 2 3 4'
      'd media1*(1e-6)'
      'draw title ${IDBFILEREF} 'varsimb''
      possf${IDBFILE}
      'set ccolor rainbow' 
      'set clevs 0 1 2 3 4'
      'd media2*(1e-6)'
      'draw title ${IDBFILE} 'varsimb''
    endif
    if(var=vp)
      varsimb='\`3X'
      posvp${IDBFILEREF}
      'set ylopts 0 0 0'
      'set ccolor rainbow' 
      'set clevs 0 0.5 1 1.5 2'
      'd media1*(1e-6)'
      'draw title 'varsimb''
      posvp${IDBFILE}
      'set ccolor rainbow' 
      'set clevs 0 0.5 1 1.5 2'
      'd media2*(1e-6)'
      'draw title 'varsimb''
    endif
    if(var=t)
      varsimb='\`2T'
      post${IDBFILEREF}
      'set ylopts 0 0 0'
      'set ccolor rainbow' 
      'set clevs 0 0.25 0.5 0.75 1 1.25 1.5 1.75 2 2.25 2.5'
      'd media1'
      'draw title 'varsimb''
      post${IDBFILE}
      'set ccolor rainbow' 
      'set clevs 0 0.25 0.5 0.75 1 1.25 1.5 1.75 2 2.25 2.5'
      'd media2'
      'draw title 'varsimb''
    endif
    if(var=q)
      varsimb='\`2q'
      posq${IDBFILEREF}
      'set ylopts 0 0 0'
      'set ccolor rainbow' 
      'set clevs 0 0.5 1 1.5 2 2.5 3'
      'd media1*1e1'
      'draw title 'varsimb''
      posq${IDBFILE}
      'set ccolor rainbow' 
      'set clevs 0 0.5 1 1.5 2 2.5 3'
      'd media2*1e1'
      'draw title 'varsimb''
    endif
  
    'close 2'
    'close 1'
  
    vv=vv+1
  endwhile

  if(save=yes)
    'gxprint 'fname'.png'
#    'gxprint 'fname'.eps'
  endif

  'c'

  zz=zz+1
endwhile

'quit'
EOF

. /opt/modules/default/etc/modules.sh > /dev/null 2>&1 
module load grads
module swap grads grads/2.1.a1

grads -blc 'run plota_perfis_medios_amplitudes.gs'
grads -blc 'run plota_secoes_amplitudes.gs'

#cp ${adjBerr_figu}/*.png ${adjBerr_page}/
#echo -e "\033[36;1m >>> Arquivos Figs do periodo: \033[m"
#echo -e "\033[33;1m http://ftp-supercomputacao/public/${USER}/${nome_sys}/eval/${EXPE}/diag/adjBerr/ \033[m "
#ls ${minFcos_page}/
#echo ""
cp amplitudes*.png ${TRANSFER_HOME}/PUBLIC/SMG/eval/TESTCASE/diag/adjBerr/
echo -e "\033[36;1m >>> Figuras do diagnóstico disponíveis em: \033[m"
echo -e "\033[33;1m http://ftp-supercomputacao/public/${USER}/SMG/eval/TESTCASE/diag/adjBerr/ \033[m "

#ls ${minFcos_page}/
#echo ""

echo
echo -e  "\033[32;1m   ------------------------------------------------------------ \033[m"
echo -e  "\033[32;1m                                F I M \033[m"
echo -e  "\033[32;1m   ------------------------------------------------------------ \033[m"
echo

exit 0
