#!/bin/bash

#========================================================================================================================
#
# Series of significant tests of bench.sh for LMDZ
# available cases : ArtII1 ArtII2 TKE deep poches
#
# Fredho : 26 juillet 2024
#
#========================================================================================================================
#
list_expe=ArtII1
nwaves=2
opt=
waves=

while (($# > 0)) ; do
        case $1 in
          -h|-help|--help) echo "Usage : bench_LMDZ.sh [-nwaves N] [-waves \"1 2 3\"] EXP1 EXP2 ..."
                           echo "EXPN within ArtII1 ArtII1f ArtII2 TKE deep poches"
                           exit 1 ;;
          -nwaves|-nw)  nwaves="$2"  ; shift 2 ;;
          -waves|-w)    waves="$2"  ; shift 2 ;;
          -opt)         opt="$2"     ; shift 2 ;; # Option given directly to bench.sh
          *) list_expe="$*" ; echo "$list_expe" ; echo $# ; shift $# ;;
        esac
done
if [ "$list_expe" = "all" ] ; then list_expe="ArtII1 ArtII1f ArtII2 TKE deep poches" ; fi
lmdzdir=$( grep 'LMDZdir=' models/LMDZ/serie_LMDZ.sh | cut -d= -f2 )

if [ "$waves" = "" ] ; then
    waves="$( seq 1 $nwaves )"
fi

#==========================================================================================================
# Exemple de fichier param. Utilisé pour les cas convectifs
#==========================================================================================================
cat >| models/LMDZ/param_test <<eod
A1 0.5 1.2 0.66666667 linear
A2 1.5e-3 4.e-3 2.e-3 linear
B1 0. 1. 0.95 linear
CQ 0. 0.005 0.012 linear
DZ 0.05 0.2 0.07 linear
BG1 0.4 2. 1.1 linear
BG2 0.03 0.2 0.09 linear
EVAP 5e-5 5e-4 1e-4 log
CLC 1e-4 1e-3 6.5e-4 linear
ALPBLK 0.2 0.8 0.5 linear
WBTOP 1.5 6 2.8 linear
WBSRF 0.05 2. 0.5 linear
RQSDP 5000 18600 10000 linear
RQSP0 30000 60000 45000 linear
RQSTOP 0.05 0.6 0.4 linear
h_trig 1e3 8e3 4e3 linear
t_top_max 240. 280. 273.15 linear
eod

for expe in $list_expe ; do

echo ========== RUNNING EXPERIMENT $expe ===================================

case $expe in


#==========================================================================================================
ArtII1) # Bench papier PartII exemple 1
#==========================================================================================================
./bench.sh $opt -wdir ArtII1 -waves "$waves" -param param_ArtII1 -metrics "ARMCU_REF_zav-400-600-theta_7_9,ARMCU_REF_zav-400-600-qv_7_9,ARMCU_REF_nebmax_7_9,RICO_REF_nebmax_19_25,SANDU_REF_neb4zave_50_60"
;;

#==========================================================================================================
ArtII1f) # Exemple avec spécification d'un fichier de 
#==========================================================================================================
cat > metrics_def.csv <<eod
# Metric,target_value,variance_associated_totolerance_to_error
ARMCU_REF_zav-400-600-theta_7_9,304.7034,
ARMCU_REF_zav-400-600-qv_7_9,0.01640434,2.5e-07
ARMCU_REF_nebmax_7_9,,0.002
RICO_REF_nebmax_19_25,,
SANDU_REF_neb4zave_50_60,1656.883,100000
 - Sandu metrics
 - Arm cumulus metrics :
 - Rico metrics
eod
./bench.sh $opt -wdir ArtII1f -metrics_file metrics_def.csv -waves "$waves" -param param_ArtII1
;;

#==========================================================================================================
ArtII2) # Bench papier PartII exemple 2
#==========================================================================================================
./bench.sh $opt -wdir ArtII2 -waves "$waves" -opt_model "-LMAX 95" -param param_ArtII2 -sample_size 300000 -sample_size_next_design 90 -metrics "ARMCU_REF_zav-400-600-theta_7_9,ARMCU_REF_zav-400-600-qv_7_9,IHOP_REF_zav-400-600-theta_7_9,ARMCU_REF_nebzave_7_9,ARMCU_REF_neb4zave_7_9,ARMCU_REF_nebmax_7_9,RICO_REF_nebmax_19_25,SANDU_SLOW_neb4zave_50_60,SANDU_REF_neb4zave_50_60,SANDU_REF_nebzave_50_60,SANDU_FAST_neb4zave_50_60"
;;

#==========================================================================================================
TKE) # Bench avec GABLS pour nouvelle TKE. Avec exemple de création d'un physiq.def
#==========================================================================================================
sed -e 's/iflag_pbl=.*$/iflag_pbl=50/' $lmdzdir/1D/INPUT/PHYS/physiq.def_NPv6.2 >| $lmdzdir/1D/INPUT/PHYS/physiq.def_TKE
cat >> $lmdzdir/1D/INPUT/PHYS/physiq.def_TKE <<eod
iflag_atke=1
iflag_atke_lmix=3
atke_ok_vdiff=y
atke_l0=42.5279652116005
atke_ric=0.190537327781655
atke_rcinf=2.0
atke_cepsilon=8.89273387537601
atke_pr_slope=4.67885738180385
atke_pr_asym=0.4
atke_pr_neut=0.837372701768868
atke_clmix=0.648055235325291
atke_cke=2.47069655134662
atke_smmin=0.0960838631869678
eod

./bench.sh $opt -wdir TKE -waves "$waves" -opt_model "-phys TKE -LMAX 95" -param param_NoDeepConv -sample_size 30000 -sample_size_next_design 140 -metrics "ARMCU_REF_zav-400-600-theta_7_9,ARMCU_REF_zav-400-600-qv_7_9,IHOP_REF_zav-400-600-theta_7_9,ARMCU_REF_nebzave_7_9,ARMCU_REF_neb2zave_7_9,ARMCU_REF_nebmax_7_9,RICO_REF_nebmax_19_25,SANDU_SLOW_neb2zave_50_60,SANDU_REF_neb2zave_50_60,SANDU_REF_nebzave_50_60,SANDU_FAST_neb2zave_50_60,RICO_REF_zav-1500-1700-rneb_19_25,ARMCU_REF_noise-qv-1500-3000_3_14,GABLS1_REF_zav-130-190-u_8_9,GABLS1_REF_zav-60-100-tke_8_9,GABLS1_REF_zav-20-60-tke_8_9,GABLS1_REF_zav-130-160-theta_8_9,GABLS1_REF_zav-30-60-theta_8_9"
;;

#==========================================================================================================
deep) # Travail en cours sur la convection profonde
#==========================================================================================================
./bench.sh $opt -wdir deep -waves "$waves" -param param_test -cw "1 5 10" -cv "3 2.5 2" -metrics "ARMCU_REF_zav-400-600-theta_7_9,ARMCU_REF_zav-400-600-qv_7_9,ARMCU_REF_nebmax_7_9,RICO_REF_nebmax_19_25,CINDY_REF_zav-3000-6000-hur_5_14,CINDY_REF_zav-3000-6000-hur_23_30,RCEOCE_REF_zav-2000-4000-hur_10_19,RCEOCE_REF_zav-4000-8000-hur_10_19"
;;

#==========================================================================================================
poches) # Travail sur les poches froides
#==========================================================================================================
cat> poches.csv <<eod
ARMCU_REF_zav-400-600-theta_7_9,,
ARMCU_REF_zav-400-600-qv_7_9,,
ARMCU_REF_nebmax_7_9,,
RICO_REF_nebmax_19_25,,
SANDU_REF_neb4zave_50_60,,
AMMA_REF_zav-0-100-wakedeltat_13_13,,0.2
RCEOCE_REF_zav-0-50-wakedeltat_40_43,,0.2
RCEOCE_REF_zav-5000-6000-qv_40_43,,0.0000004
CINDY_REF_zav-8000-10000-qv_5_15,,25e-10
CINDY_REF_zav-8000-10000-qv_20_30,,1e-8
CINDY_REF_zav-5000-6000-theta_5_15,,1
CINDY_REF_zav-5000-6000-theta_20_30,,1
CINDY_REF_zav-0-110-wakedeltat_17_17,,0.09
CINDY_REF_zav-0-110-wakedeltat_55_55,,0.09
eod
./bench.sh $opt -wdir poches -waves "$waves" -param param_test -sample_size_next_design 150 -metrics_file poches.csv
;;

*) bash bench_LMDZ.sh --help
   exit 1 ;;

esac

echo ========== ENDING EXPERIMENT $expe ===================================

done

echo "End of $0"
