#!/bin/bash
#
#-----------------------------------------------------------------------------#
#           Group on Data Assimilation Development - GDAD/CPTEC/INPE          #
#-----------------------------------------------------------------------------#
#
#BOP
#
# !SCRIPT:  
#
# !DESCRIPTION:
#
# !CALLING SEQUENCE:
#     
#        ./runModelV4.4.sh EXP LABELI FCST num_dom runmode
#
#           o EXP       :   Nome do experimento, ex. SA
#           o LABELI    :   Data inicial (YYYYMMDDHHMM), ex. 202101010000
#           o FCST      :   Tempo de previsao, em minutos (ex. 24 [horas])
#           o num_dom   :   Quantidade de dominios, ex. 1
#           o runmode   :   Modo normal (no) ou modo GenBE (gb)
#           o INOUTINTM :   Intervalo de saída do arquivo background para Assimilação de Dados [Minutos]
#           o INTSEC    :   Intervalo em segundos para a interpolação do contorno (namelist.wps)
#           o FROMDA    :   A condição inicial vem da assimilação de dados? 1: Sim - 0: Não
#
# !REVISION HISTORY:
#
# 30 Sept 2025 - Vendrasco, E. P. - Initial Version based on LMS
# 
# !REMARKS:
#
#EOP
#-----------------------------------------------------------------------------#
#BOC

function usage(){
   sed -n '/^# !CALLING SEQUENCE:/,/^# !/{p}' runModelV4.4.sh | head -n 10
}

#
# Verificando argumentos de entrada
#

if [ $# -ne 8 ] && [ $# -ne 9 ] ; then
   usage
   exit 1
fi

EXP=${1}
LABELI=${2}
FCST=${3}
NDOM=${4}
runmode=${5}
INOUTINTM=${6} ; (( INOUTINTH = INOUTINTM /60 ))
INTSEC=${7}
FROMDA=${8}
pid=${9}

start_date=${LABELI:0:4}-${LABELI:4:2}-${LABELI:6:2}_${LABELI:8:2}:00:00

LABELF=`date -d "${LABELI:0:8} ${LABELI:8:4} +${FCST} minutes" '+%Y%m%d%H%M'`

printf "\nLABELI: ${LABELI}\nLABELF: ${LABELF}\n"

end_date=${LABELF:0:4}-${LABELF:4:2}-${LABELF:6:2}_${LABELF:8:2}:00:00

BASEDIR=${HOMEBE}/Opera
RUNDIR=${BASEDIR}/run
GFSDIR=${BASEDIR}/gfsdata
EXEDIR=${BASEDIR}/bin/V4.4
TBLDIR=${BASEDIR}/tables/V4.4
NMLDIR=${BASEDIR}/namelists
SCRDIR=${BASEDIR}/scripts
GEODIR=${BASEDIR}/geog/V4.4

EXPDIR=${RUNDIR}/${EXP}/${LABELI}/runwrf
LOGDIR=${EXPDIR}/logs

NETCDF=${HOME}/Packages/netcdf4
HDF5=${HOME}/Packages/hdf5
 
export LD_LIBRARY_PATH=$NETCDF/lib:$HDF5/lib:$LD_LIBRARY_PATH

cd ${EXPDIR}

ln -sf ${RUNDIR}/${EXP}/static/geo*.nc       ${EXPDIR}
ln -sf ${TBLDIR}/co2_trans                   ${EXPDIR}/co2_trans
ln -sf ${TBLDIR}/ETAMPNEW_DATA               ${EXPDIR}/ETAMPNEW_DATA
ln -sf ${TBLDIR}/ETAMPNEW_DATA.expanded_rain ${EXPDIR}/ETAMPNEW_DATA.expanded_rain
ln -sf ${TBLDIR}/grib2map.tbl                ${EXPDIR}/grib2map.tbl
ln -sf ${TBLDIR}/gribmap.txt                 ${EXPDIR}/gribmap.txt
ln -sf ${TBLDIR}/RRTM*                       ${EXPDIR}
ln -sf ${TBLDIR}/aerosol*                    ${EXPDIR}
ln -sf ${TBLDIR}/ozone*                      ${EXPDIR} 
ln -sf ${TBLDIR}/tr49t67                     ${EXPDIR}/tr49t67
ln -sf ${TBLDIR}/tr49t85                     ${EXPDIR}/tr49t85
ln -sf ${TBLDIR}/tr67t85                     ${EXPDIR}/tr67t85
ln -sf ${TBLDIR}/VEGPARM.TBL                 ${EXPDIR}/VEGPARM.TBL
ln -sf ${TBLDIR}/METGRID.TBL                 ${EXPDIR}/METGRID.TBL
ln -sf ${TBLDIR}/GENPARM.TBL                 ${EXPDIR}/GENPARM.TBL
ln -sf ${TBLDIR}/LANDUSE.TBL                 ${EXPDIR}/LANDUSE.TBL
ln -sf ${TBLDIR}/MPTABLE.TBL                 ${EXPDIR}/MPTABLE.TBL
ln -sf ${TBLDIR}/SOILPARM.TBL                ${EXPDIR}/SOILPARM.TBL
ln -sf ${TBLDIR}/CAMtr_volume_mixing_ratio   ${EXPDIR}/CAMtr_volume_mixing_ratio

ln -sf ${TBLDIR}/Vtable.GFS                  ${EXPDIR}/Vtable.GFS
ln -sf ${TBLDIR}/Vtable.SST                  ${EXPDIR}/Vtable.SST


sed -e "s,#IYEAR#,${LABELI:0:4},g;s,#IMON#,${LABELI:4:2},g;s,#IDAY#,${LABELI:6:2},g; \
	s,#IHOU#,${LABELI:8:2},g;s,#IMIN#,${LABELI:10:2},g;s,#FYEAR#,${LABELF:0:4},g;s,#FMON#,${LABELF:4:2},g; \
	s,#FDAY#,${LABELF:6:2},g;s,#FHOU#,${LABELF:8:2},g;s,#FMIN#,${LABELF:10:2},g;s,#DOM#,${NDOM},g; \
	s,#INOUTINTM#,${INOUTINTM},g;s,#INOUTINTH#,${INOUTINTH},g;s,#INTSEC#,${INTSEC},g; \
	s,nocolons	=.false.,nocolons=.false.,g;\
	s,#NPROC_X#,-1,g;s,#NPROC_Y#,-1,g;s,#IO_TASKS#,0,g;s,#IO_GROUPS#,1,g" \
	${NMLDIR}/namelist.input.${EXP} > ${EXPDIR}/namelist.input

if [ $runmode == 'gb' ]; then
 sed -i '/history_interval/s/=/= 720,/' ${EXPDIR}/namelist.input
 FROMDA=0
fi

NTASKS=128
JNAME="MP"

cat > MP.sh <<EOF0
#!/bin/bash

#SBATCH --time=00:30:00
#SBATCH --ntasks=$NTASKS
#SBATCH --job-name=$JNAME
#SBATCH --partition=batch

ulimit -s unlimited

cd ${EXPDIR}

if [ $FROMDA -eq 1 ]; then
  cp ${RUNDIR}/${EXP}/${LABELI}/runwda/wrfvar_output  ${EXPDIR}/wrfinput_d01
  cp ${RUNDIR}/${EXP}/${LABELI}/runwda/wrfbdy*        ${EXPDIR}
 else
  cp ${RUNDIR}/${EXP}/${LABELI}/runwps/wrfinput*  ${EXPDIR}
  cp ${RUNDIR}/${EXP}/${LABELI}/runwps/wrfbdy*    ${EXPDIR}
fi

date

cp ${NMLDIR}/extra_output.txt ${EXPDIR}

echo  "STARTING AT \`date\` "
Start=\`date +%s.%N\`
echo \$Start > Timing.wrf

export OMP_NUM_THREADS=1
time mpirun -np ${NTASKS} ${EXEDIR}/MP.exe &> ${EXPDIR}/logs/log.wrf

End=\`date +%s.%N\`
echo  "FINISHED AT \`date\` "
echo \$End   >>Timing.wrf
echo \$Start \$End | awk '{print \$2 - \$1" sec"}' >> Timing.wrf

grep "SUCCESS COMPLETE WRF" rsl.error.0000

if [ \$? -ne 0 ]; then

   echo "  BUMMER: WRF generation failed for some yet unknown reason."
   echo " "
   exit 

else

   echo "  #################################"
   echo "  ### WRF completed - \$(date) ####"
   echo "  #################################"
   
   #mv rsl.error.0000                                  ${EXPDIR}/runwrf/rsl.error.0000_wrf
   #mv rsl.out.0000                                    ${EXPDIR}/runwrf/rsl.out.0000_wrf
   #mv wrfinput* wrfbdy* wrfout_d* wrf_gsi*            ${EXPDIR}/runwrf
   #mv *.sh namelist.*                                 ${EXPDIR}/scripts
   #mv Timing.wrf                                      ${EXPDIR}/logs/Timing.wrf
   #rm rsl.*.????    
   #rm extra_output.txt
   echo WRF OK > ${EXPDIR}/logs/wrf.ok
fi

date

exit 0
EOF0

chmod +x MP.sh

if [ 'x'$pid == 'x' ]; then
  sbatch ./MP.sh
 else
  sbatch --dependency=afterok:${pid} ./MP.sh
fi
#EOC

