ctest for minimization and microcanonical MD
[unres.git] / ctest / prota_unres_energy_check.sh
1 #!/bin/bash
2 #
3 # Writen by Dawid JagieÅ‚a and Adam Sieradzan
4 #
5 #
6 #----------------------------------------
7 # variables
8
9 if [[ "$2" =~ "MPI" ]]; then
10  file=$1.out_GB000
11  file_stat=$1_GB000.stat
12 else
13  file=$1.out_GB                                 # Output file to search energy value from
14  file_stat=$1_GB.stat
15 fi
16
17 if [ "$1" == "prota_ENE" ]; then
18  extremediff="10000.0"                  # extreme energy difference, comething went terribly wrong
19  expectenergy="-56066670.000000"        # expected total energy
20  cutoffdiff="0.1"                       # energy cutoff variation - more then this rises warning  
21 elif [ "$1" == "prota_MIN_CART" ]; then
22  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
23  expectenergy="123.8713"                # expected total energy
24  cutoffdiff="0.1"                       # energy cutoff variation - more then this rises warning  
25  
26  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
27  echo 'SUMSL return code' $sumsl_return
28  if [ "$sumsl_return" != "4" ]; then
29    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
30    exit 1
31  fi
32 elif [ "$1" == "1l2y_micro" ]; then
33  stat=`awk '{if ( $1 != "#" ) {n++;a=a+$5;a2=a2+$5^2}}END{print a/n,sqrt((a2-a^2/n)/n)}' $file_stat`
34  array=(${stat// / })
35  echo 'average total energy ' ${array[0]}
36  echo 'standard deviation ' ${array[1]}
37  if [ `echo "a=${array[0]}-103.162;if(0>a)a*=-1;a>5.0"|bc -l` != "0" ]; then
38   echo 'difference ' `echo "a=${array[0]}-103.162;if(0>a)a*=-1;a"|bc -l` 'from reference ave etot 103.162 greater than 5.0'
39   exit 1
40  elif [ `echo "a=${array[1]};a>0.01"|bc -l` != "0" ]; then
41   echo 'standard deviation greater than 0.01'
42   exit 1
43  else
44   exit 0
45  fi
46 else
47  exit 1
48 fi
49
50
51
52 function floating(){
53     echo $1 | sed -e 's/[eE]+/*10^/'
54 }
55
56 #---------------------------------------------------------------------------
57 # MAIN CODE
58 #---------------------------------------------------------------------------
59
60 # Check if file exist
61 if [ ! -f $file ]; then
62     echo "CRITICAL: out file do not exist"
63     exit 2
64 fi
65
66 # Check if energy value is not a number
67 grepene=`grep ETOT $file|tail -1| awk '{print $2}'`
68 if [[ $grepene == "NaN" ]]; then
69     echo "CRITICAL: energy is NaN"
70     exit 2
71 fi
72
73 # Check if energy value is extremely different from expected
74 blaene=`floating $grepene`
75 myene=`echo $blaene |bc`
76 diff=`echo $myene"+("$expectenergy")"|bc`
77 absdiff=`echo $diff| sed 's/-//'`
78
79 true1=`echo "$absdiff >= $extremediff"|bc`
80 if [ $true1 -eq 1 ]; then
81     echo "CRITICAL: energy is loo large $absdiff, ene= $myene"
82     exit 2
83 fi
84
85 # Check if Energy value is as expected
86 true2=`echo "$absdiff<=$cutoffdiff"|bc`
87 if [ $true2 -eq 1 ]; then
88     echo "OK: absdiff= $absdiff, ene= $myene"
89     exit 0
90 else
91     echo "WARNING: energy is somewhat different $absdiff, ene= $myene"
92     exit 1
93 fi
94