ctest checkgrad ref ene and limits
[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="145.1742"        # - 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.3680"                # - 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.88137"                       # 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="47.55"                   # 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="37.527"
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  if [ `echo "a=${array[0]}-${refe};if(0>a)a*=-1;a>5.0"|bc -l` != "0" ]; then
66   echo 'difference ' `echo "a=${array[0]}-${refe};if(0>a)a*=-1;a"|bc -l` "from reference ave etot ${refe} greater than 5.0"
67   exit 1
68  elif [ `echo "a=${array[1]};a>0.15"|bc -l` != "0" ]; then
69   echo 'standard deviation greater than 0.15'
70   exit 1
71  else
72   exit 0
73  fi
74 elif [ "$1" == "1L2Y_L" ] || [ "$1" == "1L2Y_NH" ]; then
75  if [ ! -s $file_stat ]; then
76   echo 'FATAL error - stat file empty'
77   exit 2
78  fi
79  chi2=`./matplotlib_fit_hist.py $file_stat 111`
80  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
81  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
82  
83  if [ `echo "a=${chi2};a>0.001"|bc -l` != "0" ]; then
84     echo 'chi2 greater than 0.001'
85     exit 1
86  else
87     exit 0
88  fi
89 elif [ "$1" == "1L2Y_B" ]; then
90  if [ ! -s $file_stat ]; then
91   echo 'FATAL error - stat file empty'
92   exit 2
93  fi
94  chi2=`./matplotlib_fit_hist.py $file_stat 111`
95  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
96  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
97  
98  if [ `echo "a=${chi2};a>0.01"|bc -l` != "0" ]; then
99     echo 'chi2 greater than 0.01'
100     exit 1
101  else
102     exit 0
103  fi
104
105
106 elif [ "$1" == "1L2Y_remd" ]; then
107  rm -rf remd_all.stat
108  tail -q -n +1000 1L2Y_remd*.stat >remd_all.stat
109  if [ ! -s remd_all.stat ]; then
110   echo 'FATAL error - stat files empty'
111   exit 2
112  fi
113  ./matplotlib_hist.py
114
115  echo  "<DartMeasurementFile name=\"Histograms $1\" type=\"image/png\">`pwd`/1L2Y_remd_ene_hist.png</DartMeasurementFile>"
116  echo  "<DartMeasurementFile name=\"Energy $1\" type=\"image/png\">`pwd`/1L2Y_remd_Tene.png</DartMeasurementFile>" 
117  grep ACC 1L2Y_remd.out_GB000 |tail -7
118  exchange=`grep ACC 1L2Y_remd.out_GB000 |tail -7|awk '{a=a+$4}END{print a/NR}'`
119  echo "average exchange = ${exchange}"
120  if [ `echo "a=${exchange};a<0.2"|bc -l` != "0" ]; then
121     echo 'ERROR average exchange smaller than 0.2'
122     exit 1
123  else
124     exit 0
125  fi
126
127 elif [ "$1" == "1DKZcut-ber" ]; then
128  chi2=`./matplotlib_fit_hist.py $file_stat 519`
129  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
130  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
131  
132  if [ `echo "a=${chi2};a>0.01"|bc -l` != "0" ]; then
133     echo 'chi2 greater than 0.01'
134     exit 1
135  else
136     exit 0
137  fi
138
139 elif [ "$1" == "1DKZcut-lang" ]; then
140  chi2=`./matplotlib_fit_hist.py $file_stat 519`
141  echo 'Chi2 for fitting theoretical temperature distribution ' ${chi2}
142  echo  "<DartMeasurementFile name=\"Temperature distribution $1\" type=\"image/png\">`pwd`/${file_stat}.png</DartMeasurementFile>"
143  
144  if [ `echo "a=${chi2};a>0.001"|bc -l` != "0" ]; then
145     echo 'chi2 greater than 0.001'
146     exit 1
147  else
148     exit 0
149  fi
150
151 elif [ "$1" == "1DKZcut-min" ]; then
152  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
153  expectenergy="332.1213"                # - expected total energy
154  cutoffdiff="3.0"                       # energy cutoff variation - more then this rises warning  
155  
156  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
157  echo 'SUMSL return code' $sumsl_return
158  if [ "$sumsl_return" != "4" ]; then
159    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
160    echo 'but not failing this test, it is known problem with esccor'
161 #   exit 1
162  fi
163
164 elif [ "$1" == "1DKZcut-ene" ]; then
165  extremediff="10000.0"                  # extreme energy difference, comething went terribly wrong
166  expectenergy="-452.4430"       # - expected total energy
167  cutoffdiff="0.01"                      # energy cutoff variation - more then this rises warning  
168
169 elif [ "$1" == "1DKZcut-micro" ]; then
170  refe="-173.573"
171  stat=`awk '{if ( $1 != "#" ) {n++;a=a+$5;a2=a2+$5^2}}END{print a/n,sqrt((a2-a^2/n)/n)}' $file_stat`
172  array=(${stat// / })
173  echo 'average total energy ' ${array[0]}
174  echo 'standard deviation ' ${array[1]}
175  if [ `echo "a=${array[0]}-(${refe});if(0>a)a*=-1;a>5.0"|bc -l` != "0" ]; then
176   echo 'difference ' `echo "a=${array[0]}-${refe};if(0>a)a*=-1;a"|bc -l` "from reference ave etot ${refe} greater than 5.0"
177   exit 1
178  elif [ `echo "a=${array[1]};a>0.005"|bc -l` != "0" ]; then
179   echo 'standard deviation greater than 0.005'
180   exit 1
181  else
182   exit 0
183  fi
184
185 elif [ "$1" == "1ei0_min" ]; then
186  extremediff="10.0"                     # extreme energy difference, comething went terribly wrong
187  expectenergy="151.3218"                # - expected total energy
188  cutoffdiff="6.0"                       # energy cutoff variation - more then this rises warning  
189  
190  refe="134.8382"
191  startene=`grep ETOT $file|head -1| awk '{print $2*1.0}'`
192  echo "initial energy=${startene} reference=${refe}"
193  if [ `echo "a=${startene}-(${refe});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
194   echo 'difference ' `echo "a=${startene}-${refe};if(0>a)a*=-1;a"|bc -l` "from reference etot ${refe} greater than 0.01"
195   exit 1
196  fi
197  
198  sumsl_return=`grep SUMSL $file|awk '{print $4}'`
199  echo 'SUMSL return code' $sumsl_return
200  if [ "$sumsl_return" != "4" ]; then
201    echo 'ERROR = SUMSL return code' $sumsl_return 'is not 4'
202    echo 'but not failing this test, it is known problem with dissulfides'
203 #   exit 1
204  fi
205
206 elif [ "$1" == "prota_CHECKGRAD" ] || [ "$1" == "1DKZcut-checkgrad" ] || [ "$1" ==  "checkgrad_dfa" ]  ; then
207  diff=`gawk -f checkgrad.awk $file |grep 'Largest abs(1-numerical/analytical)='|awk '{printf "%15.10f",$3}'`
208  gawk -f checkgrad.awk $file 
209  
210  if [ `echo "a=${diff};a>0.0003"|bc -l` != "0" ]; then
211     echo 'ERROR largest abs(1-numerical/analytical)' ${diff}
212     echo ' greater than 0.0005'
213     exit 1
214  else
215     exit 0
216  fi
217
218 elif [ "$1" ==  "Ts866_checkgrad_full" ] ; then
219  diff=`gawk -f checkgrad.awk $file |grep 'Largest abs(1-numerical/analytical)='|awk '{printf "%15.10f",$3}'`
220  gawk -f checkgrad.awk $file 
221
222  exit_error=0
223  ene=`grep ETOT $file|head -1| awk '{print $2*1.0}'`
224  hene=`grep H_CONS $file|head -1| awk '{print $2*1.0}'`
225  
226  ene_ref=3129.43
227  hene_ref=1878.060
228  
229  echo "ETOT= " ${ene} " reference= " ${ene_ref}
230  if [ `echo "a=${ene}-(${ene_ref});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
231   echo 'difference ' `echo "a=${ene}-${ene_ref};if(0>a)a*=-1;a"|bc -l` "from reference etot ${ene_ref} greater than 0.01"
232   exit_error=1
233  fi
234
235  echo "H_CONS= " ${hene} " reference= " ${hene_ref}
236  if [ `echo "a=${hene}-(${hene_ref});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
237   echo 'difference ' `echo "a=${hene}-${hene_ref};if(0>a)a*=-1;a"|bc -l` "from reference etot ${hene_ref} greater than 0.01"
238   exit_error=1
239  fi
240  
241  
242  if [ `echo "a=${diff};a>0.0020"|bc -l` != "0" ]; then
243     echo 'ERROR largest abs(1-numerical/analytical)' ${diff}
244     echo ' greater than 0.0020'
245     exit_error=1
246  fi
247
248  if [ "${exit_error}" == "1" ]; then
249     exit 1
250  else
251     exit 0
252  fi
253
254
255 elif [ "$1" == "remd_dfa" ]; then
256  rm -rf remd_all.stat
257  tail -q -n +100 remd_dfa*.stat >remd_all.stat
258  if [ ! -s remd_all.stat ]; then
259   echo 'FATAL error - stat files empty'
260   exit 2
261  fi
262  ./matplotlib_hist.py
263
264  echo  "<DartMeasurementFile name=\"Histograms $1\" type=\"image/png\">`pwd`/1L2Y_remd_ene_hist.png</DartMeasurementFile>"
265  echo  "<DartMeasurementFile name=\"Energy $1\" type=\"image/png\">`pwd`/1L2Y_remd_Tene.png</DartMeasurementFile>" 
266  grep ACC remd_dfa.out_GB000 |tail -7
267  exchange=`grep ACC remd_dfa.out_GB000 |tail -7|awk '{a=a+$4}END{print a/NR}'`
268  echo "average exchange = ${exchange}"
269  if [ `echo "a=${exchange};a<0.1"|bc -l` != "0" ]; then
270     echo 'ERROR average exchange smaller than 0.1'
271     exit 1
272  else
273     exit 0
274  fi
275
276                
277 else
278  exit 1
279 fi
280
281
282
283 function floating(){
284     echo $1 | sed -e 's/[eE]+/*10^/'
285 }
286
287 #---------------------------------------------------------------------------
288 # MAIN CODE
289 #---------------------------------------------------------------------------
290
291 # Check if file exist
292 if [ ! -f $file ]; then
293     echo "CRITICAL: out file do not exist"
294     exit 2
295 fi
296
297 # Check if energy value is not a number
298 grepene=`grep ETOT $file|tail -1| awk '{print $2}'`
299 if [[ $grepene == "NaN" ]]; then
300     echo "CRITICAL: energy is NaN"
301     exit 2
302 fi
303
304 # Check if energy value is extremely different from expected
305 blaene=`floating $grepene`
306 myene=`echo $blaene |bc`
307 diff=`echo $myene"+("$expectenergy")"|bc`
308 absdiff=`echo $diff| sed 's/-//'`
309
310 true1=`echo "$absdiff >= $extremediff"|bc`
311 if [ $true1 -eq 1 ]; then
312     echo "CRITICAL: energy is loo large $absdiff, ene= $myene"
313     exit 2
314 fi
315
316 # Check if Energy value is as expected
317 true2=`echo "$absdiff<=$cutoffdiff"|bc`
318 if [ $true2 -eq 1 ]; then
319     echo "OK: absdiff= $absdiff, ene= $myene"
320     exit 0
321 else
322     echo "WARNING: energy is somewhat different $absdiff, ene= $myene"
323     exit 1
324 fi
325