ctest checkgrad
authorCezary Czaplewski <czarek@chem.univ.gda.pl>
Wed, 28 Mar 2018 09:42:16 +0000 (11:42 +0200)
committerCezary Czaplewski <czarek@chem.univ.gda.pl>
Wed, 28 Mar 2018 09:42:16 +0000 (11:42 +0200)
ctest/checkgrad.awk [new file with mode: 0644]
ctest/prota_CHECKGRAD.inp [new file with mode: 0644]
ctest/prota_unres_energy_check.sh
source/unres/CMakeLists.txt

diff --git a/ctest/checkgrad.awk b/ctest/checkgrad.awk
new file mode 100644 (file)
index 0000000..c638b3d
--- /dev/null
@@ -0,0 +1,45 @@
+BEGIN{
+i=0
+k=1
+kk=0
+}{
+if ($0=="Gradient in virtual-bond and SC vectors") found=1
+if (found==1 && NF==0) found=2
+if (found==2 && NF>0) { 
+ i=i+1
+ if (i>3) {
+  i=1
+  k=k+6
+ }
+# print "###",i
+# print 
+ if (i==1) {
+#  print "TTT",substr($0,0,3)
+  if (!(substr($0,0,3) ~ /^[[:blank:]]*[0-9]*$/)) exit
+ }
+ if (found==2) {
+ for (j=0;j<6;j++){
+  a[i,k+j]=strtonum(substr($0,4+j*12,12))
+#  print "OOO",i,j,k,k+j,a[i,k+j]
+#  print "AAA",i,a[2,k+j]
+  if(i==3 && ( a[2,k+j]>0.0000001 || a[2,k+j]<-0.0000001) ) {
+   kk++
+   d[kk]=a[i,k+j]
+#   print "III",i,j,k,kk,d[kk]
+  }
+ }}
+}
+}END{
+diffmax=0
+for (x in d){
+  diff=d[x]-1
+  if (diff<0)diff=-diff
+  if (diff>diffmax) diffmax=diff
+}
+      
+print "Largest abs(1-numerical/analytical)= ",diffmax
+print "Sorted:"
+n = asort(d,sorted)
+for (i = 1; i <= n; i++)
+    printf "%4d %12.5E\n",i,sorted[i]
+}
\ No newline at end of file
diff --git a/ctest/prota_CHECKGRAD.inp b/ctest/prota_CHECKGRAD.inp
new file mode 100644 (file)
index 0000000..bf5813e
--- /dev/null
@@ -0,0 +1,12 @@
+Test of cartesian gradient - 1bdd - pdbstart unres_pdb
+SEED=-3059743 pdbstart pdbref refstr rescale_mode=2 unres_pdb checkgrad cart
+WLONG=1.00000 WSCP=1.23315 WELEC=0.84476 WBOND=1.00000 WANG=0.62954            &
+WSCLOC=0.10554 WTOR=1.34316 WTORD=1.26571 WCORRH=0.19212 WCORR5=0.00000        &
+WCORR6=0.00000 WEL_LOC=0.37357 WTURN3=1.40323 WTURN4=0.64673 WTURN6=0.00000    &
+WVDWPP=0.23173 WHPB=1.00000 WSCCOR=0.25                                        &
+CUTOFF=7.00000 WCORR4=0.00000
+prota_unres.pdb
+ 0
+ 0
+0 0 0 0
+300.0
index 0ab4e19..621ec22 100755 (executable)
@@ -203,6 +203,76 @@ elif [ "$1" == "1ei0_min" ]; then
 #   exit 1
  fi
 
+elif [ "$1" == "prota_CHECKGRAD" ] || [ "$1" == "1DKZcut-checkgrad" ] || [ "$1" ==  "checkgrad_dfa" ]  ; then
+ diff=`gawk -f checkgrad.awk $file |grep 'Largest abs(1-numerical/analytical)='|awk '{printf "%15.10f",$3}'`
+ gawk -f checkgrad.awk $file 
+ if [ `echo "a=${diff};a>0.0003"|bc -l` != "0" ]; then
+    echo 'ERROR largest abs(1-numerical/analytical)' ${diff}
+    echo ' greater than 0.0003'
+    exit 1
+ else
+    exit 0
+ fi
+
+elif [ "$1" ==  "Ts866_checkgrad_full" ] ; then
+ diff=`gawk -f checkgrad.awk $file |grep 'Largest abs(1-numerical/analytical)='|awk '{printf "%15.10f",$3}'`
+ gawk -f checkgrad.awk $file 
+
+ exit_error=0
+ ene=`grep ETOT $file|head -1| awk '{print $2*1.0}'`
+ hene=`grep H_CONS $file|head -1| awk '{print $2*1.0}'`
+ ene_ref=3132.980
+ hene_ref=1878.060
+ echo "ETOT= " ${ene} " reference= " ${ene_ref}
+ if [ `echo "a=${ene}-(${ene_ref});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
+  echo 'difference ' `echo "a=${ene}-${ene_ref};if(0>a)a*=-1;a"|bc -l` "from reference etot ${ene_ref} greater than 0.01"
+  exit_error=1
+ fi
+
+ echo "H_CONS= " ${hene} " reference= " ${hene_ref}
+ if [ `echo "a=${hene}-(${hene_ref});if(0>a)a*=-1;a>0.01"|bc -l` != "0" ]; then
+  echo 'difference ' `echo "a=${hene}-${hene_ref};if(0>a)a*=-1;a"|bc -l` "from reference etot ${hene_ref} greater than 0.01"
+  exit_error=1
+ fi
+ if [ `echo "a=${diff};a>0.0020"|bc -l` != "0" ]; then
+    echo 'ERROR largest abs(1-numerical/analytical)' ${diff}
+    echo ' greater than 0.0020'
+    exit_error=1
+ fi
+
+ if [ "${exit_error}" == "1" ]; then
+    exit 1
+ else
+    exit 0
+ fi
+
+
+elif [ "$1" == "remd_dfa" ]; then
+ rm -rf remd_all.stat
+ tail -q -n +100 remd_dfa*.stat >remd_all.stat
+ if [ ! -s remd_all.stat ]; then
+  echo 'FATAL error - stat files empty'
+  exit 2
+ fi
+ ./matplotlib_hist.py
+
+ echo  "<DartMeasurementFile name=\"Histograms $1\" type=\"image/png\">`pwd`/1L2Y_remd_ene_hist.png</DartMeasurementFile>"
+ echo  "<DartMeasurementFile name=\"Energy $1\" type=\"image/png\">`pwd`/1L2Y_remd_Tene.png</DartMeasurementFile>" 
+ grep ACC remd_dfa.out_GB000 |tail -7
+ exchange=`grep ACC remd_dfa.out_GB000 |tail -7|awk '{a=a+$4}END{print a/NR}'`
+ echo "average exchange = ${exchange}"
+ if [ `echo "a=${exchange};a<0.1"|bc -l` != "0" ]; then
+    echo 'ERROR average exchange smaller than 0.1'
+    exit 1
+ else
+    exit 0
+ fi
+
                
 else
  exit 1
index d83102e..443deb6 100644 (file)
@@ -371,6 +371,11 @@ FILE(COPY ${CMAKE_SOURCE_DIR}/ctest/matplotlib_hist.py
         FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
 )
 
+FILE(COPY ${CMAKE_SOURCE_DIR}/ctest/checkgrad.awk
+        DESTINATION ${CMAKE_CURRENT_BINARY_DIR} )
+
+FILE(COPY ${CMAKE_SOURCE_DIR}/ctest/prota_CHECKGRAD.inp
+        DESTINATION ${CMAKE_CURRENT_BINARY_DIR} )
 
 
 #=========================================
@@ -504,6 +509,8 @@ else(NOT UNRES_WITH_MPI)
   if(UNRES_MD_FF STREQUAL "E0LL2Y")
     add_test(NAME UNRES_ENE_prota COMMAND ${mpiexec} ${boot_lam} ${np} 2 ${CMAKE_CURRENT_BINARY_DIR}/test_prota_E0LL2Y.sh prota_ENE 2 )
     add_test(NAME UNRES_ENE1_prota COMMAND ${mpiexec} ${boot_lam} ${np} 1 ${CMAKE_CURRENT_BINARY_DIR}/test_prota_E0LL2Y.sh prota_ENE 1 )
+    add_test(NAME UNRES_CHECKGRAD_prota COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/test_mpi_E0LL2Y.sh prota_CHECKGRAD 2 2 )
+    add_test(NAME UNRES_CHECKGRAD1_prota COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/test_mpi_E0LL2Y.sh prota_CHECKGRAD 1 1 )
     add_test(NAME UNRES_MIN_prota COMMAND ${mpiexec} ${boot_lam} ${np} 2 ${CMAKE_CURRENT_BINARY_DIR}/test_prota_E0LL2Y.sh prota_MIN_CART 2 )
     add_test(NAME UNRES_MIN_INT COMMAND ${mpiexec} ${boot_lam} ${np} 1 ${CMAKE_CURRENT_BINARY_DIR}/test_prota_E0LL2Y.sh 1l2y_MIN_INT 1 )
     add_test(NAME UNRES_REGULAR COMMAND ${mpiexec} ${boot_lam} ${np} 1 ${CMAKE_CURRENT_BINARY_DIR}/test_prota_E0LL2Y.sh 1l2y_MIN_REGULAR_INT 1 )