From c67326be6d9346d64bf4a0a58acaa132f0c004c8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 23 Aug 2016 05:53:05 -0400 Subject: [PATCH] update colvars library to version 2016-08-19 --- doc/src/PDF/colvars-refman-lammps.pdf | Bin 533480 -> 533636 bytes lib/colvars/Makefile.fermi | 8 ++--- lib/colvars/Makefile.g++ | 8 ++--- lib/colvars/Makefile.mingw32-cross | 8 ++--- lib/colvars/Makefile.mingw64-cross | 8 ++--- lib/colvars/colvar.cpp | 44 ++++++++++++++------------ lib/colvars/colvar.h | 4 +-- lib/colvars/colvarbias_abf.cpp | 16 +++++----- lib/colvars/colvarbias_abf.h | 1 - lib/colvars/colvarcomp.cpp | 3 +- lib/colvars/colvardeps.cpp | 29 ++++++++++------- lib/colvars/colvardeps.h | 30 +++++++----------- lib/colvars/colvarmodule.h | 2 +- lib/colvars/colvarparse.cpp | 15 --------- lib/colvars/colvarparse.h | 7 ---- lib/colvars/colvarscript.cpp | 5 +++ 16 files changed, 88 insertions(+), 100 deletions(-) diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 0dd82d47947628d5c55c0481499dcc8b79a4598d..071bdb25b89d87e6b9a7ea20053680408dcf72ee 100644 GIT binary patch delta 16450 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 EUvRMTxBvhE delta 16292 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

I^} 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 IP?CiEf5B3R<^TWy diff --git a/lib/colvars/Makefile.fermi b/lib/colvars/Makefile.fermi index e17798bbc3..906675ae12 100644 --- a/lib/colvars/Makefile.fermi +++ b/lib/colvars/Makefile.fermi @@ -93,8 +93,8 @@ colvarcomp_rotations.o: colvarcomp_rotations.cpp colvarmodule.h \ colvar.o: colvar.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvarscript.h colvarbias.h -colvardeps.o: colvardeps.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvardeps.h +colvardeps.o: colvardeps.cpp colvardeps.h colvarmodule.h colvartypes.h \ + colvarproxy.h colvarvalue.h colvarparse.h colvargrid.o: colvargrid.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvargrid.h @@ -104,12 +104,12 @@ colvarmodule.o: colvarmodule.cpp colvarmodule.h colvartypes.h \ colvarbias_restraint.h colvarbias_histogram.h colvarbias_meta.h \ colvarscript.h colvarparse.o: colvarparse.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h colvarscript.o: colvarscript.cpp colvarscript.h colvarmodule.h \ colvartypes.h colvarproxy.h colvarvalue.h colvarbias.h colvar.h \ colvarparse.h colvardeps.h colvartypes.o: colvartypes.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h colvarvalue.o: colvarvalue.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h diff --git a/lib/colvars/Makefile.g++ b/lib/colvars/Makefile.g++ index f1fa1734b9..c80fa1065e 100644 --- a/lib/colvars/Makefile.g++ +++ b/lib/colvars/Makefile.g++ @@ -92,8 +92,8 @@ colvarcomp_rotations.o: colvarcomp_rotations.cpp colvarmodule.h \ colvar.o: colvar.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvarscript.h colvarbias.h -colvardeps.o: colvardeps.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvardeps.h +colvardeps.o: colvardeps.cpp colvardeps.h colvarmodule.h colvartypes.h \ + colvarproxy.h colvarvalue.h colvarparse.h colvargrid.o: colvargrid.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvargrid.h @@ -103,12 +103,12 @@ colvarmodule.o: colvarmodule.cpp colvarmodule.h colvartypes.h \ colvarbias_restraint.h colvarbias_histogram.h colvarbias_meta.h \ colvarscript.h colvarparse.o: colvarparse.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h colvarscript.o: colvarscript.cpp colvarscript.h colvarmodule.h \ colvartypes.h colvarproxy.h colvarvalue.h colvarbias.h colvar.h \ colvarparse.h colvardeps.h colvartypes.o: colvartypes.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h colvarvalue.o: colvarvalue.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h diff --git a/lib/colvars/Makefile.mingw32-cross b/lib/colvars/Makefile.mingw32-cross index cea3a53c25..eba83c555f 100644 --- a/lib/colvars/Makefile.mingw32-cross +++ b/lib/colvars/Makefile.mingw32-cross @@ -100,8 +100,8 @@ $(DIR)colvarcomp_rotations.o: colvarcomp_rotations.cpp colvarmodule.h \ $(DIR)colvar.o: colvar.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvarscript.h colvarbias.h -$(DIR)colvardeps.o: colvardeps.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvardeps.h +$(DIR)colvardeps.o: colvardeps.cpp colvardeps.h colvarmodule.h colvartypes.h \ + colvarproxy.h colvarvalue.h colvarparse.h $(DIR)colvargrid.o: colvargrid.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvargrid.h @@ -111,12 +111,12 @@ $(DIR)colvarmodule.o: colvarmodule.cpp colvarmodule.h colvartypes.h \ colvarbias_restraint.h colvarbias_histogram.h colvarbias_meta.h \ colvarscript.h $(DIR)colvarparse.o: colvarparse.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h $(DIR)colvarscript.o: colvarscript.cpp colvarscript.h colvarmodule.h \ colvartypes.h colvarproxy.h colvarvalue.h colvarbias.h colvar.h \ colvarparse.h colvardeps.h $(DIR)colvartypes.o: colvartypes.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h $(DIR)colvarvalue.o: colvarvalue.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h diff --git a/lib/colvars/Makefile.mingw64-cross b/lib/colvars/Makefile.mingw64-cross index 7dd85b48f8..1d83b6a0a8 100644 --- a/lib/colvars/Makefile.mingw64-cross +++ b/lib/colvars/Makefile.mingw64-cross @@ -100,8 +100,8 @@ $(DIR)colvarcomp_rotations.o: colvarcomp_rotations.cpp colvarmodule.h \ $(DIR)colvar.o: colvar.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvarscript.h colvarbias.h -$(DIR)colvardeps.o: colvardeps.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvardeps.h +$(DIR)colvardeps.o: colvardeps.cpp colvardeps.h colvarmodule.h colvartypes.h \ + colvarproxy.h colvarvalue.h colvarparse.h $(DIR)colvargrid.o: colvargrid.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h colvarparse.h colvardeps.h colvar.h colvarcomp.h \ colvaratoms.h colvargrid.h @@ -111,12 +111,12 @@ $(DIR)colvarmodule.o: colvarmodule.cpp colvarmodule.h colvartypes.h \ colvarbias_restraint.h colvarbias_histogram.h colvarbias_meta.h \ colvarscript.h $(DIR)colvarparse.o: colvarparse.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h $(DIR)colvarscript.o: colvarscript.cpp colvarscript.h colvarmodule.h \ colvartypes.h colvarproxy.h colvarvalue.h colvarbias.h colvar.h \ colvarparse.h colvardeps.h $(DIR)colvartypes.o: colvartypes.cpp colvarmodule.h colvartypes.h colvarproxy.h \ - colvarvalue.h colvarparse.h colvardeps.h + colvarvalue.h colvarparse.h $(DIR)colvarvalue.o: colvarvalue.cpp colvarmodule.h colvartypes.h colvarproxy.h \ colvarvalue.h diff --git a/lib/colvars/colvar.cpp b/lib/colvars/colvar.cpp index 1dd46524ac..84880808af 100644 --- a/lib/colvars/colvar.cpp +++ b/lib/colvars/colvar.cpp @@ -771,7 +771,7 @@ int colvar::calc_cvcs(int first_cvc, size_t num_cvcs) error_code |= calc_cvc_values(first_cvc, num_cvcs); error_code |= calc_cvc_gradients(first_cvc, num_cvcs); - error_code |= calc_cvc_sys_forces(first_cvc, num_cvcs); + error_code |= calc_cvc_total_force(first_cvc, num_cvcs); error_code |= calc_cvc_Jacobians(first_cvc, num_cvcs); if (cvm::debug()) @@ -790,7 +790,7 @@ int colvar::collect_cvc_data() error_code |= collect_cvc_values(); error_code |= collect_cvc_gradients(); - error_code |= collect_cvc_sys_forces(); + error_code |= collect_cvc_total_forces(); error_code |= collect_cvc_Jacobians(); error_code |= calc_colvar_properties(); @@ -889,21 +889,22 @@ int colvar::calc_cvc_gradients(int first_cvc, size_t num_cvcs) size_t const cvc_max_count = num_cvcs ? num_cvcs : num_active_cvcs(); size_t i, cvc_count; - if (is_enabled(f_cv_gradient)) { + if (cvm::debug()) + cvm::log("Calculating gradients of colvar \""+this->name+"\".\n"); - if (cvm::debug()) - cvm::log("Calculating gradients of colvar \""+this->name+"\".\n"); + // calculate the gradients of each component + cvm::increase_depth(); + for (i = first_cvc, cvc_count = 0; + (i < cvcs.size()) && (cvc_count < cvc_max_count); + i++) { + if (!cvcs[i]->is_enabled()) continue; + cvc_count++; - // calculate the gradients of each component - cvm::increase_depth(); - for (i = first_cvc, cvc_count = 0; - (i < cvcs.size()) && (cvc_count < cvc_max_count); - i++) { - if (!cvcs[i]->is_enabled()) continue; - cvc_count++; + if ((cvcs[i])->is_enabled(f_cvc_gradient)) { (cvcs[i])->calc_gradients(); // if requested, propagate (via chain rule) the gradients above // to the atoms used to define the roto-translation + // This could be integrated in the CVC base class for (size_t ig = 0; ig < cvcs[i]->atom_groups.size(); ig++) { if (cvcs[i]->atom_groups[ig]->b_fit_gradients) cvcs[i]->atom_groups[ig]->calc_fit_gradients(); @@ -914,6 +915,7 @@ int colvar::calc_cvc_gradients(int first_cvc, size_t num_cvcs) } } } + cvm::decrease_depth(); if (cvm::debug()) @@ -976,7 +978,7 @@ int colvar::collect_cvc_gradients() } -int colvar::calc_cvc_sys_forces(int first_cvc, size_t num_cvcs) +int colvar::calc_cvc_total_force(int first_cvc, size_t num_cvcs) { size_t const cvc_max_count = num_cvcs ? num_cvcs : num_active_cvcs(); size_t i, cvc_count; @@ -1010,7 +1012,7 @@ int colvar::calc_cvc_sys_forces(int first_cvc, size_t num_cvcs) } -int colvar::collect_cvc_sys_forces() +int colvar::collect_cvc_total_forces() { if (is_enabled(f_cv_total_force_calc)) { ft.reset(); @@ -1097,10 +1099,8 @@ int colvar::calc_colvar_properties() // report the restraint center as "value" x_reported = xr; v_reported = vr; - // the "total force" with the extended Lagrangian is just the - // harmonic term acting on the extended coordinate - // Note: this is the force for current timestep - ft_reported = (-0.5 * ext_force_k) * this->dist2_lgrad(xr, x); + // the "total force" with the extended Lagrangian is + // calculated in update_forces_energy() below } else { @@ -1175,14 +1175,18 @@ cvm::real colvar::update_forces_energy() // the total force is applied to the fictitious mass, while the // atoms only feel the harmonic force - // fr: bias force on extended coordinate (without harmonic spring), for output in trajectory - // f_ext: total force on extended coordinate (including harmonic spring) + // fr: bias force on extended variable (without harmonic spring), for output in trajectory + // f_ext: total force on extended variable (including harmonic spring) // f: - initially, external biasing force // - after this code block, colvar force to be applied to atomic coordinates, ie. spring force fr = f; f_ext = f + (-0.5 * ext_force_k) * this->dist2_lgrad(xr, x); f = (-0.5 * ext_force_k) * this->dist2_rgrad(xr, x); + // The total force acting on the extended variable is f_ext + // This will be used in the next timestep + ft_reported = f_ext; + // leapfrog: starting from x_i, f_i, v_(i-1/2) vr += (0.5 * dt) * f_ext / ext_mass; // Because of leapfrog, kinetic energy at time i is approximate diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index 665b3d6427..0058b56a26 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -254,7 +254,7 @@ public: /// \brief Same as \link colvar::calc_cvc_values \endlink but for gradients int calc_cvc_gradients(int first, size_t num_cvcs); /// \brief Same as \link colvar::calc_cvc_values \endlink but for total forces - int calc_cvc_sys_forces(int first, size_t num_cvcs); + int calc_cvc_total_force(int first, size_t num_cvcs); /// \brief Same as \link colvar::calc_cvc_values \endlink but for Jacobian derivatives/forces int calc_cvc_Jacobians(int first, size_t num_cvcs); @@ -266,7 +266,7 @@ public: /// \brief Same as \link colvar::collect_cvc_values \endlink but for gradients int collect_cvc_gradients(); /// \brief Same as \link colvar::collect_cvc_values \endlink but for total forces - int collect_cvc_sys_forces(); + int collect_cvc_total_forces(); /// \brief Same as \link colvar::collect_cvc_values \endlink but for Jacobian derivatives/forces int collect_cvc_Jacobians(); /// \brief Calculate the quantities associated to the colvar (but not to the CVCs) diff --git a/lib/colvars/colvarbias_abf.cpp b/lib/colvars/colvarbias_abf.cpp index f2659951d4..870079a619 100644 --- a/lib/colvars/colvarbias_abf.cpp +++ b/lib/colvars/colvarbias_abf.cpp @@ -31,10 +31,8 @@ int colvarbias_abf::init(std::string const &conf) // ************* parsing general ABF options *********************** - get_keyval(conf, "applyBias", apply_bias, true); - if (apply_bias) { - enable(f_cvb_apply_force); - } else { + get_keyval_feature((colvarparse *)this, conf, "applyBias", f_cvb_apply_force, true); + if (!is_enabled(f_cvb_apply_force)){ cvm::log("WARNING: ABF biases will *not* be applied!\n"); } @@ -84,9 +82,6 @@ int colvarbias_abf::init(std::string const &conf) // Request calculation of total force (which also checks for availability) if(enable(f_cvb_get_total_force)) return cvm::get_error(); } - if (apply_bias) { - if(enable(f_cvb_apply_force)) return cvm::get_error(); - } bool b_extended = false; for (size_t i = 0; i < colvars.size(); i++) { @@ -249,6 +244,11 @@ int colvarbias_abf::update() // and subtract previous ABF force system_force[i] = colvars[i]->total_force().real_value - colvar_forces[i].real_value; +// if (cvm::debug()) +// cvm::log("ABF System force calc: cv " + cvm::to_str(i) + +// " fs " + cvm::to_str(system_force[i]) + +// " = ft " + cvm::to_str(colvars[i]->total_force().real_value) + +// " - fa " + cvm::to_str(colvar_forces[i].real_value)); } gradients->acc_force(force_bin, system_force); } @@ -277,7 +277,7 @@ int colvarbias_abf::update() } // Compute and apply the new bias, if applicable - if ( apply_bias && samples->index_ok(bin) ) { + if (is_enabled(f_cvb_apply_force) && samples->index_ok(bin)) { size_t count = samples->value(bin); cvm::real fact = 1.0; diff --git a/lib/colvars/colvarbias_abf.h b/lib/colvars/colvarbias_abf.h index 8db0b75632..93079220ba 100644 --- a/lib/colvars/colvarbias_abf.h +++ b/lib/colvars/colvarbias_abf.h @@ -32,7 +32,6 @@ private: /// Base filename(s) for reading previous gradient data (replaces data from restart file) std::vector input_prefix; - bool apply_bias; bool update_bias; bool hide_Jacobian; size_t full_samples; diff --git a/lib/colvars/colvarcomp.cpp b/lib/colvars/colvarcomp.cpp index 632e7fabda..534a927fda 100644 --- a/lib/colvars/colvarcomp.cpp +++ b/lib/colvars/colvarcomp.cpp @@ -43,7 +43,8 @@ colvar::cvc::cvc(std::string const &conf) // All cvcs implement this provide(f_cvc_debug_gradient); - get_keyval(conf, "debugGradients", set_feature(f_cvc_debug_gradient), false, parse_silent); + get_keyval_feature((colvarparse *)this, conf, "debugGradients", + f_cvc_debug_gradient, false, parse_silent); // Attempt scalable calculations when in parallel? (By default yes, if available) get_keyval(conf, "scalable", b_try_scalable, true); diff --git a/lib/colvars/colvardeps.cpp b/lib/colvars/colvardeps.cpp index 7d8d05a2be..7dce7e31f6 100644 --- a/lib/colvars/colvardeps.cpp +++ b/lib/colvars/colvardeps.cpp @@ -1,4 +1,3 @@ -#include "colvarmodule.h" #include "colvardeps.h" @@ -30,6 +29,18 @@ void colvardeps::provide(int feature_id) { } +bool colvardeps::get_keyval_feature(colvarparse *cvp, + std::string const &conf, char const *key, + int feature_id, bool const &def_value, + colvarparse::Parse_Mode const parse_mode) +{ + bool value; + bool const found = cvp->get_keyval(conf, key, value, def_value, parse_mode); + if (value) enable(feature_id); + return found; +} + + int colvardeps::enable(int feature_id, bool dry_run /* default: false */, // dry_run: fail silently, do not enable if available @@ -48,7 +59,7 @@ int colvardeps::enable(int feature_id, if (cvm::debug()) { cvm::log("DEPS: " + description + (dry_run ? " testing " : " requiring ") + - "\"" + f->description); + "\"" + f->description +"\""); } if (fs->enabled) { @@ -140,11 +151,7 @@ int colvardeps::enable(int feature_id, // 4) solve deps in children for (i=0; irequires_children.size(); i++) { int g = f->requires_children[i]; - if (cvm::debug()) - cvm::log("requires children " + features()[g]->description); -// cvm::log("children " + cvm::to_str(g)); for (j=0; jdescription); cvm::increase_depth(); res = children[j]->enable(g, dry_run, false); cvm::decrease_depth(); @@ -215,7 +222,7 @@ void colvardeps::init_cvb_requires() { // Initialize feature_states for each instance feature_states.reserve(f_cvb_ntot); for (i = 0; i < f_cvb_ntot; i++) { - feature_states.push_back(new feature_state(this, feature_states.size(), true, false)); + feature_states.push_back(new feature_state(true, false)); // Most features are available, so we set them so // and list exceptions below } @@ -319,7 +326,7 @@ void colvardeps::init_cv_requires() { // Initialize feature_states for each instance feature_states.reserve(f_cv_ntot); for (i = 0; i < f_cv_ntot; i++) { - feature_states.push_back(new feature_state(this, feature_states.size(), true, false)); + feature_states.push_back(new feature_state(true, false)); // Most features are available, so we set them so // and list exceptions below } @@ -364,7 +371,7 @@ void colvardeps::init_cvc_requires() { f_description(f_cvc_debug_gradient, "debug gradient"); f_req_self(f_cvc_debug_gradient, f_cvc_gradient); - f_description(f_cvc_Jacobian, "Jacobian"); + f_description(f_cvc_Jacobian, "Jacobian derivative"); f_req_self(f_cvc_Jacobian, f_cvc_inv_gradient); f_description(f_cvc_com_based, "depends on group centers of mass"); @@ -385,7 +392,7 @@ void colvardeps::init_cvc_requires() { // default as unavailable, not enabled feature_states.reserve(f_cvc_ntot); for (i = 0; i < colvardeps::f_cvc_ntot; i++) { - feature_states.push_back(new feature_state(this, feature_states.size(), false, false)); + feature_states.push_back(new feature_state(false, false)); } // Features that are implemented by all cvcs by default @@ -429,7 +436,7 @@ void colvardeps::init_ag_requires() { // default as unavailable, not enabled feature_states.reserve(f_ag_ntot); for (i = 0; i < colvardeps::f_ag_ntot; i++) { - feature_states.push_back(new feature_state(this, feature_states.size(), false, false)); + feature_states.push_back(new feature_state(false, false)); } // Features that are implemented (or not) by all atom groups diff --git a/lib/colvars/colvardeps.h b/lib/colvars/colvardeps.h index a2f6f2d5f9..089461c532 100644 --- a/lib/colvars/colvardeps.h +++ b/lib/colvars/colvardeps.h @@ -1,10 +1,11 @@ // -*- c++ -*- -#include "colvarmodule.h" - #ifndef COLVARDEPS_H #define COLVARDEPS_H +#include "colvarmodule.h" +#include "colvarparse.h" + /// Parent class for a member object of a bias, cv or cvc etc. containing dependencies /// (features) and handling dependency resolution @@ -27,16 +28,9 @@ public: std::string description; // reference to object name (cv, cvc etc.) /// This contains the current state of each feature for each object - class feature_state { - private: - colvardeps *const deps_object; - int const id; - operator int() { return 0; } // never cast as int - public: - inline colvardeps *object() const { return deps_object; } - inline int feature_id() const { return id; } - feature_state(colvardeps *o, int i, bool a, bool e) - : deps_object(o), id(i), available(a), enabled(e) {} + struct feature_state { + feature_state(bool a, bool e) + : available(a), enabled(e) {} /// Available means: supported, subject to dependencies as listed, /// MAY BE ENABLED AS A RESULT OF DEPENDENCY SOLVING @@ -55,12 +49,6 @@ public: /// List of the state of all features std::vector feature_states; - /// Allow setting a feature state while parsing its kewyord - inline feature_state * set_feature(int id) - { - return feature_states[id]; - } - /// Describes a feature and its dependecies /// used in a static array within each subclass class feature { @@ -146,6 +134,12 @@ public: void provide(int feature_id); // set the feature's flag to available in local object + /// Parse a keyword and enable a feature accordingly + bool get_keyval_feature(colvarparse *cvp, + std::string const &conf, char const *key, + int feature_id, bool const &def_value, + colvarparse::Parse_Mode const parse_mode = colvarparse::parse_normal); + int enable(int f, bool dry_run = false, bool toplevel = true); // enable a feature and recursively solve its dependencies // dry_run is set to true to recursively test if a feature is available, without enabling it // int disable(int f); diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index cb4272f0bd..8c61dcac2d 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -4,7 +4,7 @@ #define COLVARMODULE_H #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2016-08-10" +#define COLVARS_VERSION "2016-08-19" #endif #ifndef COLVARS_DEBUG diff --git a/lib/colvars/colvarparse.cpp b/lib/colvars/colvarparse.cpp index 47b1970220..8699391107 100644 --- a/lib/colvars/colvarparse.cpp +++ b/lib/colvars/colvarparse.cpp @@ -354,21 +354,6 @@ bool colvarparse::get_keyval(std::string const &conf, } -bool colvarparse::get_keyval(std::string const &conf, - char const *key, - colvardeps::feature_state *value, - bool const &def_value, - Parse_Mode const parse_mode) -{ - bool feature_flag = def_value; - bool const b_found = get_keyval(conf, key, feature_flag, def_value, parse_mode); - if (feature_flag) { - value->object()->enable(value->feature_id()); - } - return b_found; -} - - // multiple-value keyword parsers bool colvarparse::get_keyval(std::string const &conf, diff --git a/lib/colvars/colvarparse.h b/lib/colvars/colvarparse.h index 7685b4eeb4..892f1632e1 100644 --- a/lib/colvars/colvarparse.h +++ b/lib/colvars/colvarparse.h @@ -8,7 +8,6 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvardeps.h" /// \file colvarparse.h Parsing functions for collective variables @@ -181,12 +180,6 @@ public: bool &value, bool const &def_value = false, Parse_Mode const parse_mode = parse_normal); - bool get_keyval(std::string const &conf, - char const *key, - colvardeps::feature_state *value, - bool const &def_value = false, - Parse_Mode const parse_mode = parse_normal); - bool get_keyval(std::string const &conf, char const *key, std::vector &values, diff --git a/lib/colvars/colvarscript.cpp b/lib/colvars/colvarscript.cpp index 069a995135..dc3619fe5e 100644 --- a/lib/colvars/colvarscript.cpp +++ b/lib/colvars/colvarscript.cpp @@ -336,6 +336,11 @@ int colvarscript::proc_bias(int argc, char const *argv[]) { return COLVARS_OK; } + if (subcmd == "state") { + b->print_state(); + return COLVARS_OK; + } + // Subcommands for MW ABF if (subcmd == "bin") { int r = b->current_bin();