#!/bin/bash

######################################################################
#
#              -------------------------------
#              Non regression test for htexplo
#              -------------------------------
#
# Author : F Hourdin. August 2024
#
# The htexplo_cq.sh is designed to be run through cron (by default on
#    ricard)
#
# It runs a series of test cases with htexplo imposing the seed
#    of random numbers. The comparison of the NROY size after
#    2 or 3 waves is checked with a previous version $rel_ref.
#    The svn release to be tested can be imposed in variable $rel
#    If rel=last, the last svn release available is used.
#
######################################################################

# svn release to be compared with
rel_ref=501
rel="last"

tmpmessage="/tmp/htune_qc.message"
cat << EOD > $tmpmessage
Running control quality check $(date)

If you receive this message, it is because something went wrong!

Fix it and come back...
EOD

echo '########################################################################'
echo '# 1. snv release to be checked rel=N. By default, rel=last    '
echo '########################################################################'
if [[ $rel = "" ]] ; then
    optrel=""
    name="HTUNE"
elif [[ $rel = "last" ]] ; then
    rel=$( svn info --show-item revision --username=htune https://svn.lmd.jussieu.fr/HighTune/trunk )
    optrel="-r $rel"
    name="R$rel"
else
    optrel="-r $rel"
    name="R$rel"
fi

echo "svn release to be installed : $rel" | tee $tmpmessage

echo "########################################################################"
echo "# 2. Checking for existing local svn release"
echo "########################################################################"

set +u; NOINTERACTIVE=$NOINTERACTIVE; set -u  # fetch env variable
if [[ -d $name ]] ; then
  if [[ -n $NOINTERACTIVE ]]; then
    echo "STOP: Directory $name already exists and script launched with NOINTERACTIVE."
    exit 1
  fi
  echo "Directory $name already exists, proceed anyway ? (Y/n)"
  read -r answ
  if [[ ! $answ =~ ^[Yy]$ ]]; then
    rm $tmpmessage
    exit 0
  fi
fi

echo '########################################################################'
echo '# 3. Installing the new svn release'
echo '########################################################################'

mkdir -p "$name" ; cd "$name" || exit 1
if [[ ! -d "htexplo" ]]; then
  echo "svn checkout --username=htune https://svn.lmd.jussieu.fr/HighTune/trunk $optrel"
  svn checkout --username=htune https://svn.lmd.jussieu.fr/HighTune/trunk $optrel htexplo
fi

echo '########################################################################'
echo '# 4. Running benches'
echo '########################################################################'

cd htexplo || exit 1
rm -rf log WORK
bench_opt="-seed 123 -noplot"
./bench.sh $bench_opt
cp models/LMDZ/bench_LMDZ.sh .
for case_ in ArtII1 ArtII1f ArtII2 ; do
   ./bench_LMDZ.sh -nwaves 3 -opt "$bench_opt" $case_ &> log/outLMDZ.$case_
done
cp models/ECRAD/bench_ecrad.sh .
./bench_ecrad.sh &> outRAD
rel_eff=$( svn info --show-item revision )
cd WORK/ || exit 1
synthesis_dir=~/WWW/HighTune/synthesis
mkdir -p $synthesis_dir
grep -- "[0-9.]" */Rem*t > "$synthesis_dir/r$rel_eff.txt"

echo '########################################################################'
echo '# Sending synthesis to the list of developers'
echo '########################################################################'
set -vx

if diff "$synthesis_dir/r$rel_ref.txt" "$synthesis_dir/r$rel_eff.txt" > /tmp/htune_diff; then
    mainmessage="svn $rel_eff versus $rel_ref : +OK numerical convergence"
else
    mainmessage="svn $rel_eff versus $rel_ref : -no numerical convergence"
fi
echo "$mainmessage" >> $synthesis_dir/../qc.txt
echo "$mainmessage" > $tmpmessage
cat /tmp/htune_diff >> $tmpmessage
printf "\nSynthesis available on https://web.lmd.jussieu.fr/~lmdz/HighTune/qc.txt\n" >> $tmpmessage

mail_address=hightune-commit@lmd.jussieu.fr,frederic.hourdin@lmd.ipsl.fr,amaury.barral@lmd.ipsl.fr  # amaury rajouté car pas dans liste htune-commit, à enlever après 31/12/2024
scp $tmpmessage lmdz@django:$tmpmessage
ssh lmdz@django "mail -s 'htexplo quality control (Ricard)' $mail_address < $tmpmessage"