From 12d8599eee572fc24dc32f6f6ba71e89b7d55dd0 Mon Sep 17 00:00:00 2001
From: Omar Valsson <omar.valsson@gmail.com>
Date: Tue, 19 Dec 2017 15:38:17 +0100
Subject: [PATCH] Instantameous gradient not on by default

---
 .../colvar.data.reference                     | 44 ++++++++--------
 .../plumed.dat                                |  2 +-
 .../colvar.data.reference                     | 44 ++++++++--------
 .../plumed.dat                                |  2 +-
 .../colvar.data.reference                     | 44 ++++++++--------
 .../rt-opt-averaged-sgd-maskfile/plumed.dat   |  2 +-
 .../rt-opt-averaged-sgd/colvar.data.reference | 44 ++++++++--------
 regtest/ves/rt-opt-averaged-sgd/plumed.dat    |  2 +-
 regtest/ves/rt-opt-dummy/plumed.dat           |  1 +
 src/ves/Optimizer.cpp                         | 51 +++++++++++++------
 src/ves/Optimizer.h                           |  2 +
 11 files changed, 130 insertions(+), 108 deletions(-)

diff --git a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/colvar.data.reference b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/colvar.data.reference
index 24869d916..0868bd70a 100644
--- a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/colvar.data.reference
+++ b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/colvar.data.reference
@@ -1,24 +1,24 @@
-#! FIELDS time phi ves1.bias o1.gradrms o1.gradmax
+#! FIELDS time phi ves1.bias
 #! SET min_phi -pi
 #! SET max_phi pi
- 0.000000 -1.238  0.000  0.000  0.000
- 1.000000 -1.484  0.000  0.000  0.000
- 2.000000 -1.324  0.000  0.637  0.970
- 3.000000 -1.334  4.716  0.637  0.970
- 4.000000 -1.461  4.403  0.659  0.983
- 5.000000 -1.220  6.371  0.659  0.983
- 6.000000 -1.388  7.123  0.649  0.961
- 7.000000 -1.548  7.766  0.649  0.961
- 8.000000 -1.843  1.066  0.599  0.981
- 9.000000 -2.242 -3.365  0.599  0.981
- 10.000000 -1.148  8.387  0.439  0.847
- 11.000000 -1.758  5.325  0.439  0.847
- 12.000000 -1.319 12.218  0.523  0.975
- 13.000000 -2.991 -1.208  0.523  0.975
- 14.000000 -1.411 14.007  0.475  0.814
- 15.000000 -2.599 -0.724  0.475  0.814
- 16.000000 -1.461 15.304  0.451  0.755
- 17.000000 -1.379 17.133  0.451  0.755
- 18.000000 -1.677 11.559  0.598  0.988
- 19.000000 -1.524 17.994  0.598  0.988
- 20.000000 -1.200 15.348  0.585  0.965
+ 0.000000 -1.238  0.000
+ 1.000000 -1.484  0.000
+ 2.000000 -1.324  0.000
+ 3.000000 -1.334  4.716
+ 4.000000 -1.461  4.403
+ 5.000000 -1.220  6.371
+ 6.000000 -1.388  7.123
+ 7.000000 -1.548  7.766
+ 8.000000 -1.843  1.066
+ 9.000000 -2.242 -3.365
+ 10.000000 -1.148  8.387
+ 11.000000 -1.758  5.325
+ 12.000000 -1.319 12.218
+ 13.000000 -2.991 -1.208
+ 14.000000 -1.411 14.007
+ 15.000000 -2.599 -0.724
+ 16.000000 -1.461 15.304
+ 17.000000 -1.379 17.133
+ 18.000000 -1.677 11.559
+ 19.000000 -1.524 17.994
+ 20.000000 -1.200 15.348
diff --git a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/plumed.dat b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/plumed.dat
index 83edb9d94..8c91d9c00 100644
--- a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/plumed.dat
+++ b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver-2/plumed.dat
@@ -35,7 +35,7 @@ OPT_AVERAGED_SGD ...
 
 PRINT ...
   STRIDE=500
-  ARG=phi,ves1.bias,o1.*
+  ARG=phi,ves1.bias
   FILE=colvar.data FMT=%6.3f
 ... PRINT
 
diff --git a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/colvar.data.reference b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/colvar.data.reference
index 0c1a8c5a0..d138bff4a 100644
--- a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/colvar.data.reference
+++ b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/colvar.data.reference
@@ -1,24 +1,24 @@
-#! FIELDS time phi ves1.bias o1.gradrms o1.gradmax
+#! FIELDS time phi ves1.bias
 #! SET min_phi -pi
 #! SET max_phi pi
- 0.000000 -1.238  0.000  0.000  0.000
- 1.000000 -1.484  0.000  0.000  0.000
- 2.000000 -1.324  0.000  0.637  0.970
- 3.000000 -1.334  4.716  0.637  0.970
- 4.000000 -1.461  4.403  0.659  0.983
- 5.000000 -1.220  8.417  0.659  0.983
- 6.000000 -1.388  9.566  0.649  0.961
- 7.000000 -1.548 11.484  0.649  0.961
- 8.000000 -1.843  1.350  0.599  0.981
- 9.000000 -2.242 -4.484  0.599  0.981
- 10.000000 -1.148 11.426  0.439  0.847
- 11.000000 -1.758  8.505  0.439  0.847
- 12.000000 -1.319 17.398  0.523  0.975
- 13.000000 -2.991 -2.357  0.523  0.975
- 14.000000 -1.411 21.113  0.475  0.814
- 15.000000 -2.599 -0.596  0.475  0.814
- 16.000000 -1.461 23.344  0.451  0.755
- 17.000000 -1.379 25.813  0.451  0.755
- 18.000000 -1.677 17.779  0.598  0.988
- 19.000000 -1.524 28.684  0.598  0.988
- 20.000000 -1.200 22.933  0.585  0.965
+ 0.000000 -1.238  0.000
+ 1.000000 -1.484  0.000
+ 2.000000 -1.324  0.000
+ 3.000000 -1.334  4.716
+ 4.000000 -1.461  4.403
+ 5.000000 -1.220  8.417
+ 6.000000 -1.388  9.566
+ 7.000000 -1.548 11.484
+ 8.000000 -1.843  1.350
+ 9.000000 -2.242 -4.484
+ 10.000000 -1.148 11.426
+ 11.000000 -1.758  8.505
+ 12.000000 -1.319 17.398
+ 13.000000 -2.991 -2.357
+ 14.000000 -1.411 21.113
+ 15.000000 -2.599 -0.596
+ 16.000000 -1.461 23.344
+ 17.000000 -1.379 25.813
+ 18.000000 -1.677 17.779
+ 19.000000 -1.524 28.684
+ 20.000000 -1.200 22.933
diff --git a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/plumed.dat b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/plumed.dat
index 6feca1ee9..0c309e09f 100644
--- a/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/plumed.dat
+++ b/regtest/ves/rt-opt-averaged-sgd-exp-decaying-aver/plumed.dat
@@ -35,7 +35,7 @@ OPT_AVERAGED_SGD ...
 
 PRINT ...
   STRIDE=500
-  ARG=phi,ves1.bias,o1.*
+  ARG=phi,ves1.bias
   FILE=colvar.data FMT=%6.3f
 ... PRINT
 
diff --git a/regtest/ves/rt-opt-averaged-sgd-maskfile/colvar.data.reference b/regtest/ves/rt-opt-averaged-sgd-maskfile/colvar.data.reference
index 7ccf565f6..05a9c05c7 100644
--- a/regtest/ves/rt-opt-averaged-sgd-maskfile/colvar.data.reference
+++ b/regtest/ves/rt-opt-averaged-sgd-maskfile/colvar.data.reference
@@ -1,24 +1,24 @@
-#! FIELDS time phi ves1.bias o1.gradrms o1.gradmax
+#! FIELDS time phi ves1.bias
 #! SET min_phi -pi
 #! SET max_phi pi
- 0.000000 -1.238  0.000  0.000  0.000
- 1.000000 -1.484  0.000  0.000  0.000
- 2.000000 -1.324  0.000  0.637  0.970
- 3.000000 -1.334  3.269  0.637  0.970
- 4.000000 -1.461  3.220  0.659  0.983
- 5.000000 -1.220  4.325  0.659  0.983
- 6.000000 -1.388  5.057  0.649  0.961
- 7.000000 -1.548  6.027  0.649  0.961
- 8.000000 -1.843  1.879  0.599  0.981
- 9.000000 -2.242 -1.819  0.599  0.981
- 10.000000 -1.148  5.786  0.439  0.847
- 11.000000 -1.758  5.171  0.439  0.847
- 12.000000 -1.319  8.648  0.523  0.975
- 13.000000 -2.991  1.784  0.523  0.975
- 14.000000 -1.411 10.083  0.475  0.814
- 15.000000 -2.599  1.350  0.475  0.814
- 16.000000 -1.461 11.032  0.451  0.755
- 17.000000 -1.379 11.862  0.451  0.755
- 18.000000 -1.677  9.170  0.598  0.988
- 19.000000 -1.524 12.659  0.598  0.988
- 20.000000 -1.200 10.287  0.585  0.965
+ 0.000000 -1.238  0.000
+ 1.000000 -1.484  0.000
+ 2.000000 -1.324  0.000
+ 3.000000 -1.334  3.269
+ 4.000000 -1.461  3.220
+ 5.000000 -1.220  4.325
+ 6.000000 -1.388  5.057
+ 7.000000 -1.548  6.027
+ 8.000000 -1.843  1.879
+ 9.000000 -2.242 -1.819
+ 10.000000 -1.148  5.786
+ 11.000000 -1.758  5.171
+ 12.000000 -1.319  8.648
+ 13.000000 -2.991  1.784
+ 14.000000 -1.411 10.083
+ 15.000000 -2.599  1.350
+ 16.000000 -1.461 11.032
+ 17.000000 -1.379 11.862
+ 18.000000 -1.677  9.170
+ 19.000000 -1.524 12.659
+ 20.000000 -1.200 10.287
diff --git a/regtest/ves/rt-opt-averaged-sgd-maskfile/plumed.dat b/regtest/ves/rt-opt-averaged-sgd-maskfile/plumed.dat
index 949443111..a8b121097 100644
--- a/regtest/ves/rt-opt-averaged-sgd-maskfile/plumed.dat
+++ b/regtest/ves/rt-opt-averaged-sgd-maskfile/plumed.dat
@@ -33,7 +33,7 @@ OPT_AVERAGED_SGD ...
 
 PRINT ...
   STRIDE=500
-  ARG=phi,ves1.bias,o1.*
+  ARG=phi,ves1.bias
   FILE=colvar.data FMT=%6.3f
 ... PRINT
 
diff --git a/regtest/ves/rt-opt-averaged-sgd/colvar.data.reference b/regtest/ves/rt-opt-averaged-sgd/colvar.data.reference
index d1d516bcc..7aeeeabc0 100644
--- a/regtest/ves/rt-opt-averaged-sgd/colvar.data.reference
+++ b/regtest/ves/rt-opt-averaged-sgd/colvar.data.reference
@@ -1,24 +1,24 @@
-#! FIELDS time phi ves1.bias o1.gradrms o1.gradmax
+#! FIELDS time phi ves1.bias
 #! SET min_phi -pi
 #! SET max_phi pi
- 0.000000 -1.238  0.000  0.000  0.000
- 1.000000 -1.484  0.000  0.000  0.000
- 2.000000 -1.324  0.000  0.637  0.970
- 3.000000 -1.334  4.716  0.637  0.970
- 4.000000 -1.461  4.403  0.659  0.983
- 5.000000 -1.220  6.371  0.659  0.983
- 6.000000 -1.388  7.123  0.649  0.961
- 7.000000 -1.548  7.766  0.649  0.961
- 8.000000 -1.843  1.066  0.599  0.981
- 9.000000 -2.242 -3.365  0.599  0.981
- 10.000000 -1.148  8.387  0.439  0.847
- 11.000000 -1.758  5.325  0.439  0.847
- 12.000000 -1.319 12.218  0.523  0.975
- 13.000000 -2.991 -1.159  0.523  0.975
- 14.000000 -1.411 13.737  0.475  0.814
- 15.000000 -2.599 -0.714  0.475  0.814
- 16.000000 -1.461 14.602  0.451  0.755
- 17.000000 -1.379 15.945  0.451  0.755
- 18.000000 -1.677 10.610  0.598  0.988
- 19.000000 -1.524 16.005  0.598  0.988
- 20.000000 -1.200 13.955  0.585  0.965
+ 0.000000 -1.238  0.000
+ 1.000000 -1.484  0.000
+ 2.000000 -1.324  0.000
+ 3.000000 -1.334  4.716
+ 4.000000 -1.461  4.403
+ 5.000000 -1.220  6.371
+ 6.000000 -1.388  7.123
+ 7.000000 -1.548  7.766
+ 8.000000 -1.843  1.066
+ 9.000000 -2.242 -3.365
+ 10.000000 -1.148  8.387
+ 11.000000 -1.758  5.325
+ 12.000000 -1.319 12.218
+ 13.000000 -2.991 -1.159
+ 14.000000 -1.411 13.737
+ 15.000000 -2.599 -0.714
+ 16.000000 -1.461 14.602
+ 17.000000 -1.379 15.945
+ 18.000000 -1.677 10.610
+ 19.000000 -1.524 16.005
+ 20.000000 -1.200 13.955
diff --git a/regtest/ves/rt-opt-averaged-sgd/plumed.dat b/regtest/ves/rt-opt-averaged-sgd/plumed.dat
index b5b82727d..339ced334 100644
--- a/regtest/ves/rt-opt-averaged-sgd/plumed.dat
+++ b/regtest/ves/rt-opt-averaged-sgd/plumed.dat
@@ -34,7 +34,7 @@ OPT_AVERAGED_SGD ...
 
 PRINT ...
   STRIDE=500
-  ARG=phi,ves1.bias,o1.*
+  ARG=phi,ves1.bias
   FILE=colvar.data FMT=%6.3f
 ... PRINT
 
diff --git a/regtest/ves/rt-opt-dummy/plumed.dat b/regtest/ves/rt-opt-dummy/plumed.dat
index a07e8d631..38b7cc0c2 100644
--- a/regtest/ves/rt-opt-dummy/plumed.dat
+++ b/regtest/ves/rt-opt-dummy/plumed.dat
@@ -33,6 +33,7 @@ OPT_DUMMY ...
   HESSIAN_OUTPUT=1
   HESSIAN_FMT=%12.6f
   TARGETDIST_AVERAGES_FMT=%12.6f
+  MONITOR_INSTANTANEOUS_GRADIENT
 ... OPT_DUMMY
 
 PRINT ...
diff --git a/src/ves/Optimizer.cpp b/src/ves/Optimizer.cpp
index b7785f366..f33da8151 100644
--- a/src/ves/Optimizer.cpp
+++ b/src/ves/Optimizer.cpp
@@ -48,6 +48,7 @@ Optimizer::Optimizer(const ActionOptions&ao):
   iter_counter(0),
   use_hessian_(false),
   diagonal_hessian_(true),
+  monitor_instantaneous_gradient_(false),
   use_mwalkers_mpi_(false),
   mwalkers_mpi_single_files_(true),
   dynamic_targetdists_(0),
@@ -274,6 +275,10 @@ Optimizer::Optimizer(const ActionOptions&ao):
       log.printf("  the reweight factor c(t) will be updated very %u coefficent iterations\n",ustride_reweightfactor_);
     }
   }
+  
+  if(keywords.exists("MONITOR_INSTANTANEOUS_GRADIENT")) {
+    parseFlag("MONITOR_INSTANTANEOUS_GRADIENT",monitor_instantaneous_gradient_);
+  }
 
   if(keywords.exists("MONITOR_AVERAGE_GRADIENT")) {
     bool monitor_aver_gradient = false;
@@ -709,9 +714,11 @@ Optimizer::Optimizer(const ActionOptions&ao):
   if(ncoeffssets_==1) {
     log.printf("  Output Components:\n");
     log.printf(" ");
-    addComponent("gradrms"); componentIsNotPeriodic("gradrms");
-    log.printf(" ");
-    addComponent("gradmax"); componentIsNotPeriodic("gradmax");
+    if(monitor_instantaneous_gradient_) {
+      addComponent("gradrms"); componentIsNotPeriodic("gradrms");
+      log.printf(" ");
+      addComponent("gradmax"); componentIsNotPeriodic("gradmax");      
+    }
     if(aver_gradient_pntrs_.size()>0) {
       log.printf(" ");
       addComponent("avergradrms"); componentIsNotPeriodic("avergradrms");
@@ -729,9 +736,11 @@ Optimizer::Optimizer(const ActionOptions&ao):
       log.printf("  Output Components for coefficent set %u:\n",i);
       std::string is=""; Tools::convert(i,is); is = "_" + coeffssetid_prefix_ + is;
       log.printf(" ");
-      addComponent("gradrms"+is); componentIsNotPeriodic("gradrms"+is);
-      log.printf(" ");
-      addComponent("gradmax"+is); componentIsNotPeriodic("gradmax"+is);
+      if(monitor_instantaneous_gradient_) {
+        addComponent("gradrms"+is); componentIsNotPeriodic("gradrms"+is);
+        log.printf(" ");
+        addComponent("gradmax"+is); componentIsNotPeriodic("gradmax"+is);
+      }
       if(aver_gradient_pntrs_.size()>0) {
         log.printf(" ");
         addComponent("avergradrms"+is); componentIsNotPeriodic("avergradrms"+is);
@@ -837,6 +846,8 @@ void Optimizer::registerKeywords( Keywords& keys ) {
   //
   keys.reserveFlag("START_OPTIMIZATION_AFRESH",false,"if the iterations should be started afresh when a restart has been triggered by the RESTART keyword or the MD code.");
   //
+  keys.addFlag("MONITOR_INSTANTANEOUS_GRADIENT",false,"if the instantaneous gradient should be monitored.");
+  //
   keys.reserveFlag("MONITOR_AVERAGE_GRADIENT",false,"if the averaged gradient should be monitored.");
   keys.reserve("optional","MONITOR_AVERAGES_EXP_DECAY","use an exponentially decaying averaging with a given time constant when monitoring the averaged gradient");
   //
@@ -859,8 +870,8 @@ void Optimizer::registerKeywords( Keywords& keys ) {
   keys.use("UPDATE_FROM");
   keys.use("UPDATE_UNTIL");
   // Components that are always active
-  keys.addOutputComponent("gradrms","default","the root mean square value of the coefficent gradient. For multiple biases this component is labeled using the number of the bias as gradrms-#.");
-  keys.addOutputComponent("gradmax","default","the largest absolute value of the coefficent gradient. For multiple biases this component is labeled using the number of the bias as gradmax-#.");
+  keys.addOutputComponent("gradrms","MONITOR_INSTANTANEOUS_GRADIENT","the root mean square value of the coefficent gradient. For multiple biases this component is labeled using the number of the bias as gradrms-#.");
+  keys.addOutputComponent("gradmax","MONITOR_INSTANTANEOUS_GRADIENT","the largest absolute value of the coefficent gradient. For multiple biases this component is labeled using the number of the bias as gradmax-#.");
   ActionWithValue::useCustomisableComponents(keys);
   // keys.addOutputComponent("gradmaxidx","default","the index of the maximum absolute value of the gradient");
 
@@ -905,6 +916,8 @@ void Optimizer::useRestartKeywords(Keywords& keys) {
 void Optimizer::useMonitorAveragesKeywords(Keywords& keys) {
   keys.use("MONITOR_AVERAGE_GRADIENT");
   keys.use("MONITOR_AVERAGES_EXP_DECAY");
+  keys.addOutputComponent("avergradrms","MONITOR_AVERAGE_GRADIENT","the root mean square value of the averaged coefficent gradient. For multiple biases this component is labeled using the number of the bias as gradrms-#.");
+  keys.addOutputComponent("avergradmax","MONITOR_AVERAGE_GRADIENT","the largest absolute value of the averaged coefficent gradient. For multiple biases this component is labeled using the number of the bias as gradmax-#.");
 }
 
 
@@ -1074,12 +1087,15 @@ void Optimizer::updateOutputComponents() {
     if(!fixed_stepsize_) {
       getPntrToComponent("stepsize")->set( getCurrentStepSize(0) );
     }
-    getPntrToComponent("gradrms")->set( gradient_pntrs_[0]->getRMS() );
-    size_t gradient_maxabs_idx=0;
-    getPntrToComponent("gradmax")->set( gradient_pntrs_[0]->getMaxAbsValue(gradient_maxabs_idx) );
+    if(monitor_instantaneous_gradient_) {
+      getPntrToComponent("gradrms")->set( gradient_pntrs_[0]->getRMS() );
+      size_t gradient_maxabs_idx=0;
+      getPntrToComponent("gradmax")->set( gradient_pntrs_[0]->getMaxAbsValue(gradient_maxabs_idx) );
+    }
     if(aver_gradient_pntrs_.size()>0) {
       getPntrToComponent("avergradrms")->set( aver_gradient_pntrs_[0]->getRMS() );
-      getPntrToComponent("avergradmax")->set( aver_gradient_pntrs_[0]->getMaxAbsValue(gradient_maxabs_idx) );
+      size_t avergradient_maxabs_idx=0;
+      getPntrToComponent("avergradmax")->set( aver_gradient_pntrs_[0]->getMaxAbsValue(avergradient_maxabs_idx) );
     }
   }
   else {
@@ -1088,12 +1104,15 @@ void Optimizer::updateOutputComponents() {
       if(!fixed_stepsize_) {
         getPntrToComponent("stepsize"+is)->set( getCurrentStepSize(i) );
       }
-      getPntrToComponent("gradrms"+is)->set( gradient_pntrs_[i]->getRMS() );
-      size_t gradient_maxabs_idx=0;
-      getPntrToComponent("gradmax"+is)->set( gradient_pntrs_[i]->getMaxAbsValue(gradient_maxabs_idx) );
+      if(monitor_instantaneous_gradient_) {
+        getPntrToComponent("gradrms"+is)->set( gradient_pntrs_[i]->getRMS() );
+        size_t gradient_maxabs_idx=0;
+        getPntrToComponent("gradmax"+is)->set( gradient_pntrs_[i]->getMaxAbsValue(gradient_maxabs_idx) );
+      }
       if(aver_gradient_pntrs_.size()>0) {
         getPntrToComponent("avergradrms"+is)->set( aver_gradient_pntrs_[0]->getRMS() );
-        getPntrToComponent("avergradmax"+is)->set( aver_gradient_pntrs_[0]->getMaxAbsValue(gradient_maxabs_idx) );
+        size_t avergradient_maxabs_idx=0;
+        getPntrToComponent("avergradmax"+is)->set( aver_gradient_pntrs_[0]->getMaxAbsValue(avergradient_maxabs_idx) );
       }
     }
   }
diff --git a/src/ves/Optimizer.h b/src/ves/Optimizer.h
index 6e49dc2b1..d10bc4a6f 100644
--- a/src/ves/Optimizer.h
+++ b/src/ves/Optimizer.h
@@ -67,6 +67,8 @@ private:
   bool diagonal_hessian_;
   bool hessian_covariance_from_averages_;
   //
+  bool monitor_instantaneous_gradient_;
+  //
   bool use_mwalkers_mpi_;
   bool mwalkers_mpi_single_files_;
   //
-- 
GitLab