ctest 2 correction
[unres.git] / ctest / prota_unres_energy_check_mult.sh
1 #!/bin/bash
2 #
3 # Writen by Dawid Jagie?a and Adam Sieradzan
4 # and Cezary Czaplewski
5 #
6 #
7 #----------------------------------------
8 # variables
9
10 if [[ "$2" =~ "MPI" ]]; then
11  file=$1.out_GB000
12  file_stat=$1_GB000.stat
13 else
14  file=$1.out_GB                                 # Output file to search energy value from
15  file_stat=$1_GB.stat
16 fi
17
18 if [ "$1" == "prota_ENE_m" ]; then
19  extremediff="10000.0"                  # extreme energy difference, comething went terribly wrong
20  expectenergy="146.0091"        # - expected total energy
21  cutoffdiff="0.01"                      # energy cutoff variation - more then this rises warning  
22 elif [ "$1" == "prota_MIN_CART" ]; then
23  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
24  expectenergy="158.7321"                # - expected total energy
25  cutoffdiff="0.1"                       # energy cutoff variation - more then this rises warning  
26  
27  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
28  echo 'SUMSL return code' $sumsl_return
29  if [ "$sumsl_return" != "4" ]; then
30    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
31 #   exit 1
32  fi
33 elif [ "$1" == "1l2y_MIN_INT" ]; then
34  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
35  expectenergy="-47.58411"                       # expected total energy
36  cutoffdiff="0.1"                       # energy cutoff variation - more then this rises warning  
37  
38  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
39  echo 'SUMSL return code' $sumsl_return
40  if [ "$sumsl_return" != "4" ]; then
41    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
42 #   exit 1
43  fi
44 elif [ "$1" == "1l2y_MIN_REGULAR_INT" ]; then
45  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
46  expectenergy="9.4385"                  # expected total energy
47 #
48 # something wrong with REGULAR and sometimes gives code 8 and different energy
49 # for now 8 is only warning and cutoffdiff is large
50 #
51  cutoffdiff="6.0"                       # energy cutoff variation - more then this rises warning  
52  
53  sumsl_return=`grep "SUMSL return code:" $file|awk '{print $4}'`
54  echo 'SUMSL return code' $sumsl_return
55  if [ "$sumsl_return" != "4" ]; then
56    echo 'WARNING = SUMSL return code' $sumsl_return 'is not 4'
57  fi
58
59 elif [ "$1" == "1l2y_micro" ]; then
60  refe="79.9"
61  stat=`awk '{if ( $1 != "#" ) {n++;a=a+$5;a2=a2+$5^2}}END{print a/n,sqrt((a2-a^2/n)/n)}' $file_stat`
62  array=(${stat// / })
63  echo 'average total energy ' ${array[0]}
64  echo 'standard deviation ' ${array[1]}
65
66  ./matplotlib_plot.py $file_stat 
67  echo  "<DartMeasurementFile name=\"Energy $1\" type=\"image/png\">`pwd`/${file_stat}_ene.png</DartMeasurementFile>"
68
69  if [ `echo "a=${array[0]}-${refe};if(0>a)a*=-1;a>6.0"|bc -l` != "0" ]; then
70   echo 'difference ' `echo "a=${array[0]}-${refe};if(0>a)a*=-1;a"|bc -l` "from reference ave etot ${refe} greater than 6.0"
71   exit 1
72  elif [ `echo "a=${array[1]};a>0.40"|bc -l` != "0" ]; then
73   echo 'standard deviation greater than 0.40'
74   exit 1
75  else
76   exit 0
77  fi
78 elif [ "$1" == "1L2Y_L" ] || [ "$1" == "1L2Y_NH" ]; then
79  if [ ! -s $file_stat ]; then
80   echo 'FATAL error - stat file empty'
81   exit 2
82  fi
83  chi2=`./matplotlib_fit_hist.py $file_stat 111`
84  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
85  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
86  
87  if [ `echo "a=${chi2};a>0.001"|bc -l` != "0" ]; then
88     echo 'chi2 greater than 0.001'
89     exit 1
90  else
91     exit 0
92  fi
93 elif [ "$1" == "1L2Y_B" ]; then
94  if [ ! -s $file_stat ]; then
95   echo 'FATAL error - stat file empty'
96   exit 2
97  fi
98  chi2=`./matplotlib_fit_hist.py $file_stat 111`
99  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
100  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
101  
102  if [ `echo "a=${chi2};a>0.01"|bc -l` != "0" ]; then
103     echo 'chi2 greater than 0.01'
104     exit 1
105  else
106     exit 0
107  fi
108
109
110 elif [ "$1" == "1L2Y_remd" ]; then
111  rm -rf remd_all.stat
112  tail -q -n +1000 1L2Y_remd*.stat >remd_all.stat
113  if [ ! -s remd_all.stat ]; then
114   echo 'FATAL error - stat files empty'
115   exit 2
116  fi
117  ./matplotlib_hist.py
118
119  echo  "<DartMeasurementFile name=\"Histograms $1\" type=\"image/png\">`pwd`/1L2Y_remd_ene_hist.png</DartMeasurementFile>"
120  echo  "<DartMeasurementFile name=\"Energy $1\" type=\"image/png\">`pwd`/1L2Y_remd_Tene.png</DartMeasurementFile>" 
121  grep ACC 1L2Y_remd.out_GB000 |tail -7
122  exchange=`grep ACC 1L2Y_remd.out_GB000 |tail -7|awk '{a=a+$4}END{print a/NR}'`
123  echo "average exchange = ${exchange}"
124  if [ `echo "a=${exchange};a<0.2"|bc -l` != "0" ]; then
125     echo 'ERROR average exchange smaller than 0.2'
126     exit 1
127  else
128     exit 0
129  fi
130
131 elif [ "$1" == "1DKZcut-ber" ]; then
132  chi2=`./matplotlib_fit_hist.py $file_stat 519`
133  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
134  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
135  
136  if [ `echo "a=${chi2};a>0.01"|bc -l` != "0" ]; then
137     echo 'chi2 greater than 0.01'
138     exit 1
139  else
140     exit 0
141  fi
142
143 elif [ "$1" == "1DKZcut-lang" ]; then
144  chi2=`./matplotlib_fit_hist.py $file_stat 519`
145  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
146  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
147  
148  if [ `echo "a=${chi2};a>0.001"|bc -l` != "0" ]; then
149     echo 'chi2 greater than 0.001'
150     exit 1
151  else
152     exit 0
153  fi
154
155 elif [ "$1" == "1DKZcut-min" ]; then
156  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
157  expectenergy="323.6931"                # - expected total energy
158  cutoffdiff="8.0"                       # energy cutoff variation - more then this rises warning  
159  
160  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
161  echo 'SUMSL return code' $sumsl_return
162  if [ "$sumsl_return" != "4" ]; then
163    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
164    echo 'but not failing this test, it is known problem with esccor'
165 #   exit 1
166  fi
167
168 elif [ "$1" == "1DKZcut-ene" ]; then
169  extremediff="10000.0"                  # extreme energy difference, comething went terribly wrong
170  expectenergy="-443.2674"       # - expected total energy
171  cutoffdiff="0.01"                      # energy cutoff variation - more then this rises warning  
172
173 elif [ "$1" == "1DKZcut-micro" ]; then
174  refe="-173.573"
175  stat=`awk '{if ( $1 != "#" ) {n++;a=a+$5;a2=a2+$5^2}}END{print a/n,sqrt((a2-a^2/n)/n)}' $file_stat`
176  array=(${stat// / })
177  echo 'average total energy ' ${array[0]}
178  echo 'standard deviation ' ${array[1]}
179  if [ `echo "a=${array[0]}-(${refe});if(0>a)a*=-1;a>5.0"|bc -l` != "0" ]; then
180   echo 'difference ' `echo "a=${array[0]}-${refe};if(0>a)a*=-1;a"|bc -l` "from reference ave etot ${refe} greater than 5.0"
181   exit 1
182  elif [ `echo "a=${array[1]};a>0.005"|bc -l` != "0" ]; then
183   echo 'standard deviation greater than 0.005'
184   exit 1
185  else
186   exit 0
187  fi
188
189 elif [ "$1" == "1ei0_min" ]; then
190  extremediff="20.0"                     # extreme energy difference, comething went terribly wrong
191  expectenergy="148.5862"                # - expected total energy
192  cutoffdiff="10.0"                      # energy cutoff variation - more then this rises warning  
193  
194  refe="127.044"
195  startene=`grep ETOT $file|head -1| awk '{print $2*1.0}'`
196  echo "initial energy=${startene} reference=${refe}"
197  if [ `echo "a=${startene}-(${refe});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
198   echo 'difference ' `echo "a=${startene}-${refe};if(0>a)a*=-1;a"|bc -l` "from reference etot ${refe} greater than 0.01"
199   exit 1
200  fi
201  
202  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
203  echo 'SUMSL return code' $sumsl_return
204  if [ "$sumsl_return" != "4" ]; then
205    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
206    echo 'but not failing this test, it is known problem with dissulfides'
207 #   exit 1
208  fi
209
210 elif [ "$1" == "prota_CHECKGRAD" ] || [ "$1" == "1DKZcut-checkgrad" ] || [ "$1" ==  "checkgrad_dfa" ]  ; then
211  diff=`gawk -f checkgrad.awk $file |grep 'Largest abs(1-numerical/analytical)='|awk '{printf "%15.10f",$3}'`
212  gawk -f checkgrad.awk $file 
213  
214  if [ `echo "a=${diff};a>0.025"|bc -l` != "0" ]; then
215     echo 'ERROR largest abs(1-numerical/analytical)' ${diff}
216     echo ' greater than 0.025'
217     exit 1
218  else
219     exit 0
220  fi
221
222 elif [ "$1" ==  "Ts866_checkgrad_full" ] ; then
223  diff=`gawk -f checkgrad.awk $file |grep 'Largest abs(1-numerical/analytical)='|awk '{printf "%15.10f",$3}'`
224  gawk -f checkgrad.awk $file 
225
226  exit_error=0
227  ene=`grep ETOT $file|head -1| awk '{print $2*1.0}'`
228  hene=`grep H_CONS $file|head -1| awk '{print $2*1.0}'`
229  
230  ene_ref=3124.502
231  hene_ref=1872.981
232  
233  echo "ETOT= " ${ene} " reference= " ${ene_ref}
234  if [ `echo "a=${ene}-(${ene_ref});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
235   echo 'difference ' `echo "a=${ene}-${ene_ref};if(0>a)a*=-1;a"|bc -l` "from reference etot ${ene_ref} greater than 0.01"
236   exit_error=1
237  fi
238
239  echo "H_CONS= " ${hene} " reference= " ${hene_ref}
240  if [ `echo "a=${hene}-(${hene_ref});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
241   echo 'difference ' `echo "a=${hene}-${hene_ref};if(0>a)a*=-1;a"|bc -l` "from reference etot ${hene_ref} greater than 0.01"
242   exit_error=1
243  fi
244  
245  
246  if [ `echo "a=${diff};a>0.0080"|bc -l` != "0" ]; then
247     echo 'ERROR largest abs(1-numerical/analytical)' ${diff}
248     echo ' greater than 0.0080'
249     exit_error=1
250  fi
251
252  if [ "${exit_error}" == "1" ]; then
253     exit 1
254  else
255     exit 0
256  fi
257
258
259 elif [ "$1" == "remd_dfa" ]; then
260  rm -rf remd_all.stat
261  tail -q -n +100 remd_dfa*.stat >remd_all.stat
262  if [ ! -s remd_all.stat ]; then
263   echo 'FATAL error - stat files empty'
264   exit 2
265  fi
266  ./matplotlib_hist.py
267
268  echo  "<DartMeasurementFile name=\"Histograms $1\" type=\"image/png\">`pwd`/1L2Y_remd_ene_hist.png</DartMeasurementFile>"
269  echo  "<DartMeasurementFile name=\"Energy $1\" type=\"image/png\">`pwd`/1L2Y_remd_Tene.png</DartMeasurementFile>" 
270  grep ACC remd_dfa.out_GB000 |tail -7
271  exchange=`grep ACC remd_dfa.out_GB000 |tail -7|awk '{a=a+$4}END{print a/NR}'`
272  echo "average exchange = ${exchange}"
273  if [ `echo "a=${exchange};a<0.1"|bc -l` != "0" ]; then
274     echo 'ERROR average exchange smaller than 0.1'
275     exit 1
276  else
277     exit 0
278  fi
279
280                
281 else
282  exit 1
283 fi
284
285
286
287 function floating(){
288     echo $1 | sed -e 's/[eE]+/*10^/'
289 }
290
291 #---------------------------------------------------------------------------
292 # MAIN CODE
293 #---------------------------------------------------------------------------
294
295 # Check if file exist
296 if [ ! -f $file ]; then
297     echo "CRITICAL: out file do not exist"
298     exit 2
299 fi
300
301 # Check if energy value is not a number
302 grepene=`grep ETOT $file|tail -1| awk '{print $2}'`
303 if [[ $grepene == "NaN" ]]; then
304     echo "CRITICAL: energy is NaN"
305     exit 2
306 fi
307
308 # Check if energy value is extremely different from expected
309 #blaene=`floating $grepene`
310 #myene=`echo $blaene |bc`
311 #diff=`echo $myene"+("$expectenergy")"|bc`
312 #absdiff=`echo $diff| sed 's/-//'`
313 myene=$grepene
314 absdiff=`awk "function abs(v) {return v < 0 ? -v : v}BEGIN{print abs($grepene+$expectenergy)}"`
315
316 true1=`echo "$absdiff >= $extremediff"|bc`
317 if [ $true1 -eq 1 ]; then
318     echo "CRITICAL: energy is loo large $absdiff, ene= $myene"
319     exit 2
320 fi
321
322 # Check if Energy value is as expected
323 true2=`echo "$absdiff<=$cutoffdiff"|bc`
324 if [ $true2 -eq 1 ]; then
325     echo "OK: absdiff= $absdiff, ene= $myene"
326     exit 0
327 else
328     echo "WARNING: energy is somewhat different $absdiff, ene= $myene"
329     exit 1
330 fi
331