-
RIETTE Sébastien authored
prep_code used in check_commit_mesonh.sh --expand option to expand array-syntax into do loops preparation for other test cases inclusion
RIETTE Sébastien authoredprep_code used in check_commit_mesonh.sh --expand option to expand array-syntax into do loops preparation for other test cases inclusion
check_commit_mesonh.sh 8.88 KiB
#!/bin/bash
#set -x
set -e
# Repertoire où Mesonh MNH-V5-5-0 officiel est installe
#REFDIR=$HOME
# Repertoire où MNH-V5-5-0_PHYEX.tar.gz modifie pour accueillir PHYEX se trouve
#TARGZDIR=$HOME
availTests="007_16janvier/008_run2"
defaultTest="007_16janvier/008_run2"
separator='_' #- be carrefull, gmkpack (at least on belenos) has multiple allergies (':', '.', '@')
#- seprator must be in sync with prep_code.sh separator
PHYEXTOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function usage {
echo "Usage: $0 [-h] [-c] [-r] [-C] [-s] [--expand] commit reference"
echo "commit commit hash (or a directory)"
echo "reference commit hash or a directory or nothing for ref"
echo "-s suppress compilation pack"
echo "-c performs compilation"
echo "-r runs the tests"
echo "-C checks the result against the reference"
echo "--expand use mnh_expand (code will use do loops)"
echo ""
echo "If nothing is asked (compilation, running, check) everything is done"
echo
echo "The directory (for commit only, not ref) can take the form server:directory"
echo
echo "If using a directory (for commit or reference) it must contain at least one '/'"
}
compilation=0
run=0
check=0
commit=""
reference=""
tests=""
suppress=0
useexpand=0
while [ -n "$1" ]; do
case "$1" in
'-h') usage;;
'-s') suppress=1;;
'-c') compilation=1;;
'-r') run=$(($run+1));;
'-C') check=1;;
'--expand') useexpand=1;;
#-b) param="$2"; shift ;;
#--) shift; break ;;
*) if [ -z "${commit-}" ]; then
commit=$1
else
if [ -z "${reference-}" ]; then
reference=$1
else
echo "Only two commit hash allowed on command line"
exit 1
fi
fi;;
esac
shift
done
[ "$reference" == 'REF' ] && reference="" #Compatibility with check_commit_arome.sh
MNHPACK=${MNHPACK:=$HOME/MesoNH/PHYEX}
REFDIR=${REFDIR:=$PHYEXTOOLSDIR/pack/}
TARGZDIR=${TARGZDIR:=$PHYEXTOOLSDIR/pack/}
if [ -z "${tests-}" ]; then
tests=$defaultTest
elif [ $tests == 'ALL' ]; then
tests=$availTests
fi
if [ $compilation -eq 0 -a \
$run -eq 0 -a \
$check -eq 0 ]; then
compilation=1
run=1
check=1
fi
if [ -z "${commit-}" ]; then
echo "At least one commit hash must be provided on command line"
exit 2
fi
#Two possibilities are supported for the simulations
# - they can be done in the the pack we are currently checking
# - they can be done in the reference pack
#They are done in the current pack except if the reference pack
#already contains a tested simulation
run_in_ref=$(ls -d $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/007_16janvier/008_run2_* 2> /dev/null | tail -1 |wc -l)
#Name and directory for compiling and executing user pack
fromdir=''
if echo $commit | grep '/' > /dev/null; then
fromdir=$commit
tag=$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')
else
tag=$commit
fi
name=MNH-V5-5-0-$tag
[ $suppress -eq 1 -a -d $MNHPACK/$name ] && rm -rf $MNHPACK/$name
if [ $run_in_ref -eq 1 ]; then
path_user_beg=$REFDIR/MNH-V5-5-0 #pack directory containing the simulation
path_user_end=_$tag #to be appended to the 'run' simulation directory
else
path_user_beg=$MNHPACK/$name #pack directory containing the simulation
path_user_end= #to be appended to the 'run' simulation directory
fi
#Name and directory for the reference
reffromdir=''
if echo $reference | grep '/' > /dev/null; then
reffromdir=$reference
reftag=$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')
else
reftag=$reference
fi
refname=MNH-V5-5-0-$reftag
if [ $run_in_ref -eq 1 ]; then
path_ref_beg=$REFDIR/MNH-V5-5-0
if [ "$reference" == "" ]; then
path_ref_end=
else
path_ref_end=_$reftag
fi
else
path_ref_end=
if [ "$reference" == "" ]; then
path_ref_beg=$REFDIR/MNH-V5-5-0
else
path_ref_beg=$MNHPACK/MNH-V5-5-0-$reftag
fi
fi
if [ $compilation -eq 1 ]; then
echo "### Compilation of commit $commit"
if [ -d $MNHPACK/$name ]; then
echo "Pack already exists ($MNHPACK/$name), suppress it to be able to compile it again (or use the -s option to automatically suppress it)"
exit 5
fi
# Prepare the pack
cd $MNHPACK
cp $TARGZDIR/MNH-V5-5-0_PHYEX.tar.gz .
tar xfz MNH-V5-5-0_PHYEX.tar.gz
rm MNH-V5-5-0_PHYEX.tar.gz
mv MNH-V5-5-0 $name
cd $name/src
rm -rf PHYEX
MNH_EXPAND_DIR=$PHYEXTOOLSDIR/mnh_expand
export PATH=$MNH_EXPAND_DIR/filepp:$MNH_EXPAND_DIR/MNH_Expand_Array:$PATH
if [ $useexpand == 1 ]; then
expand_options="-D MNH_EXPAND -D MNH_EXPAND_LOOP"
else
expand_options=""
fi
subs="-s turb -s micro -s aux -s ext -s conv"
prep_code=$PHYEXTOOLSDIR/prep_code.sh
if [ "$fromdir" == '' ]; then
echo "Clone repository, and checkout commit $commit (using prep_code.sh)"
if [[ $commit == mesonh${separator}* ]]; then
$prep_code --renameFf -c $commit PHYEX #This commit is ready for inclusion
else
$prep_code --renameFf -c $commit $expand_options $subs -m mesonh PHYEX
fi
else
echo "Copy $fromdir"
scp -q -r $fromdir PHYEX
$prep_code --renameFf $expand_options $subs -m mesonh PHYEX
fi
rm -rf PHYEX/.git
find PHYEX -type f -exec touch {} \; #to be sure a recompilation occurs
# Move manually ext/ files in src/MNH
mv -f PHYEX/ext/* MNH/
rmdir PHYEX/ext
cd $MNHPACK/$name/src/PHYEX/turb
# Delete files of MNH-V5-5-0/src/MNH and MNH/src/LIB/SURCOUCHE/src with same name
for rep in turb micro conv aux ; do
cd ../$rep
for f in *.f90; do
echo $f
rm -f ../../MNH/$f
rm -f ../../LIB/SURCOUCHE/src/$f
done
done
cd ..
# Delete old files of MNH-V5-5-0/src/MNH that is now called by mode_... NO /aux NEEDED!
find turb micro conv -name 'mode_*' > remove_non_mode.sh
sed -i 's/turb\/mode_/rm -f MNH\//g' remove_non_mode.sh
sed -i 's/micro\/mode_/rm -f MNH\//g' remove_non_mode.sh
sed -i 's/conv\/mode_/rm -f MNH\//g' remove_non_mode.sh
chmod +x remove_non_mode.sh
mv remove_non_mode.sh ../.
cd ../
./remove_non_mode.sh
# nettoyage, routine non appellee :
rm -f MNH/mf_turb_greyzone.f90
rm -f MNH/compute_frac_ice.f90
#Configure and compilation
./configure
set +e #file ends with a test that can return false
. ../conf/profile_mesonh-*
set -e
make -j 8 | tee ../Output_compilation
make installmaster | tee -a ../Output_compilation
fi
if [ $run -ge 1 ]; then
echo "### Running of commit $commit"
if [ ! -f $MNHPACK/$name/exe/MESONH* ]; then
echo "Pack does not exist ($MNHPACK/$name) or compilation has failed, please check"
exit 6
fi
for t in $(echo $tests | sed 's/,/ /g'); do
case=$(echo $t | cut -d / -f 1)
exedir=$(echo $t | cut -d / -f 2)
if [ $run_in_ref -eq 1 ]; then
cd $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/
[ ! -d ${exedir}_$commit ] && cp -R ${exedir} ${exedir}_$commit
cd $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/${exedir}_$commit
else
cd $MNHPACK/$name/MY_RUN/KTEST/$case/
for rep in ???_*; do
if [ $rep != ${exedir} ]; then
rm -rf $rep
ln -s $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/$rep .
fi
done
[ -d ${exedir} ] && rm -rf ${exedir}
cp -R $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/${exedir} .
cd ${exedir}
fi
set +e #file ends with a test that can return false
[ $compilation -eq 0 ] && . $MNHPACK/$name/conf/profile_mesonh-*
set -e
./clean_mesonh_xyz
./run_mesonh_xyz | tee Output_run
done
fi
if [ $check -eq 1 ]; then
echo "### Check commit $commit against commit $reference"
allt=0
for t in $(echo $tests | sed 's/,/ /g'); do
case=$(echo $t | cut -d / -f 1)
exedir=$(echo $t | cut -d / -f 2)
path_user=$path_user_beg/MY_RUN/KTEST/007_16janvier/008_run2$path_user_end
path_ref=$path_ref_beg/MY_RUN/KTEST/007_16janvier/008_run2$path_ref_end
if [ ! -d $path_user ]; then
echo "$path_user is missing, please run the simulation"
exit 7
fi
if [ ! -d $path_ref ]; then
echo "$path_ref is missing, please run the reference simulation"
exit 8
fi
if [ $case == 007_16janvier ]; then
echo "Compare with python..."
# Compare variable of both Synchronous and Diachronic files with printing difference
set +e
$PHYEXTOOLSDIR/compare.py $path_user $path_ref
t=$?
set -e
allt=$(($allt+$t))
#Check bit-repro before date of creation of Synchronous file from ncdump of all values (pb with direct .nc file checks)
file1=$path_user/16JAN.1.12B18.001.nc
file2=$path_ref/16JAN.1.12B18.001.nc
echo "Compare with ncdump..."
set +e
diff <(ncdump $file1 | head -c 62889) <(ncdump $file2 | head -c 62889)
t=$?
set -e
allt=$(($allt+$t))
fi
done
if [ $allt -eq 0 ]; then
status="OK"
else
status="Files are different"
fi
echo "...comparison done: $status"
fi