From baecb27de7f3b2c9a36cbac61b0b39139db83a5b Mon Sep 17 00:00:00 2001 From: Cezary Czaplewski Date: Wed, 28 Mar 2018 11:42:16 +0200 Subject: [PATCH] ctest checkgrad --- ctest/checkgrad.awk | 45 ++++++++++++++++++++++++ ctest/prota_CHECKGRAD.inp | 12 +++++++ ctest/prota_unres_energy_check.sh | 70 +++++++++++++++++++++++++++++++++++++ source/unres/CMakeLists.txt | 7 ++++ 4 files changed, 134 insertions(+) create mode 100644 ctest/checkgrad.awk create mode 100644 ctest/prota_CHECKGRAD.inp diff --git a/ctest/checkgrad.awk b/ctest/checkgrad.awk new file mode 100644 index 0000000..c638b3d --- /dev/null +++ b/ctest/checkgrad.awk @@ -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 index 0000000..bf5813e --- /dev/null +++ b/ctest/prota_CHECKGRAD.inp @@ -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 diff --git a/ctest/prota_unres_energy_check.sh b/ctest/prota_unres_energy_check.sh index 0ab4e19..621ec22 100755 --- a/ctest/prota_unres_energy_check.sh +++ b/ctest/prota_unres_energy_check.sh @@ -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 "`pwd`/1L2Y_remd_ene_hist.png" + echo "`pwd`/1L2Y_remd_Tene.png" + 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 diff --git a/source/unres/CMakeLists.txt b/source/unres/CMakeLists.txt index d83102e..443deb6 100644 --- a/source/unres/CMakeLists.txt +++ b/source/unres/CMakeLists.txt @@ -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 ) -- 1.7.9.5