From 133dee9ac1b72f470033dc6e1c7fadd8501b41dc Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Tue, 6 Aug 2024 01:07:43 +0200 Subject: [PATCH] Update Colvars library to version 2024-06-04 --- doc/src/PDF/colvars-refman-lammps.pdf | Bin 1498869 -> 1632360 bytes lib/colvars/Makefile.common | 2 + lib/colvars/Makefile.deps | 319 +++--- lib/colvars/colvar.cpp | 593 ++++++----- lib/colvars/colvar.h | 104 +- lib/colvars/colvar_arithmeticpath.h | 183 ++-- lib/colvars/colvar_geometricpath.h | 19 +- lib/colvars/colvar_neuralnetworkcompute.cpp | 12 +- lib/colvars/colvar_neuralnetworkcompute.h | 2 - lib/colvars/colvar_rotation_derivative.h | 627 +++++++++++ lib/colvars/colvaratoms.cpp | 174 +-- lib/colvars/colvaratoms.h | 39 +- lib/colvars/colvarbias.cpp | 291 +++-- lib/colvars/colvarbias.h | 90 +- lib/colvars/colvarbias_abf.cpp | 860 +++++++++------ lib/colvars/colvarbias_abf.h | 127 ++- lib/colvars/colvarbias_abmd.cpp | 136 +++ lib/colvars/colvarbias_abmd.h | 49 + lib/colvars/colvarbias_alb.cpp | 6 +- lib/colvars/colvarbias_histogram.cpp | 59 +- lib/colvars/colvarbias_histogram.h | 10 +- .../colvarbias_histogram_reweight_amd.cpp | 39 +- .../colvarbias_histogram_reweight_amd.h | 17 +- lib/colvars/colvarbias_meta.cpp | 604 ++++++----- lib/colvars/colvarbias_meta.h | 47 +- lib/colvars/colvarbias_restraint.cpp | 59 +- lib/colvars/colvarbias_restraint.h | 9 - lib/colvars/colvarcomp.cpp | 221 ++-- lib/colvars/colvarcomp.h | 990 ++++++------------ lib/colvars/colvarcomp_alchlambda.cpp | 10 +- lib/colvars/colvarcomp_angles.cpp | 305 ++---- lib/colvars/colvarcomp_apath.cpp | 442 ++++++-- lib/colvars/colvarcomp_combination.cpp | 96 +- lib/colvars/colvarcomp_coordnums.cpp | 263 +++-- lib/colvars/colvarcomp_distances.cpp | 619 +++++------ lib/colvars/colvarcomp_gpath.cpp | 236 ++++- lib/colvars/colvarcomp_neuralnetwork.cpp | 67 +- lib/colvars/colvarcomp_protein.cpp | 102 +- lib/colvars/colvarcomp_rotations.cpp | 487 ++------- lib/colvars/colvarcomp_volmaps.cpp | 30 +- lib/colvars/colvardeps.cpp | 5 + lib/colvars/colvardeps.h | 4 + lib/colvars/colvargrid.cpp | 287 ++++- lib/colvars/colvargrid.h | 713 ++++++++----- lib/colvars/colvargrid_def.h | 230 ++++ lib/colvars/colvarmodule.cpp | 556 +++++++--- lib/colvars/colvarmodule.h | 134 ++- lib/colvars/colvarmodule_refs.h | 81 +- lib/colvars/colvarparse.cpp | 115 +- lib/colvars/colvarparse.h | 59 +- lib/colvars/colvarproxy.cpp | 151 ++- lib/colvars/colvarproxy.h | 88 +- lib/colvars/colvarproxy_io.cpp | 154 ++- lib/colvars/colvarproxy_io.h | 59 +- lib/colvars/colvarproxy_system.cpp | 7 +- lib/colvars/colvarproxy_system.h | 15 +- lib/colvars/colvarproxy_tcl.cpp | 2 +- lib/colvars/colvarproxy_volmaps.cpp | 2 +- lib/colvars/colvarproxy_volmaps.h | 4 +- lib/colvars/colvars_memstream.cpp | 102 ++ lib/colvars/colvars_memstream.h | 289 +++++ lib/colvars/colvars_version.h | 2 +- lib/colvars/colvarscript.cpp | 22 +- lib/colvars/colvarscript.h | 11 +- lib/colvars/colvarscript_commands.cpp | 4 +- lib/colvars/colvarscript_commands.h | 62 +- lib/colvars/colvarscript_commands_bias.cpp | 4 +- lib/colvars/colvarscript_commands_bias.h | 23 +- lib/colvars/colvarscript_commands_colvar.cpp | 2 +- lib/colvars/colvarscript_commands_colvar.h | 2 +- lib/colvars/colvartypes.cpp | 292 ++---- lib/colvars/colvartypes.h | 95 +- lib/colvars/colvarvalue.cpp | 66 +- lib/colvars/colvarvalue.h | 32 +- 74 files changed, 7343 insertions(+), 4676 deletions(-) create mode 100644 lib/colvars/colvar_rotation_derivative.h create mode 100644 lib/colvars/colvarbias_abmd.cpp create mode 100644 lib/colvars/colvarbias_abmd.h create mode 100644 lib/colvars/colvars_memstream.cpp create mode 100644 lib/colvars/colvars_memstream.h diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 4f85537b35d994f8d7e75d00545d15224a55d384..b8f049ce019f6d2d9555a87a1f0b2bfde8e88bf7 100644 GIT binary patch delta 608898 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 z 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%0A?SUbBMf2)0(mL%lT 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⪇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

IZ;;+iGP{%+$^^ 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�tg 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 S!OO> colvar::global_cvc_map = + std::map>(); + +std::map colvar::global_cvc_desc_map = + std::map(); -#if (__cplusplus >= 201103L) -std::map> colvar::global_cvc_map = std::map>(); -#endif colvar::colvar() { @@ -36,6 +41,8 @@ colvar::colvar() dev_null = 0.0; #endif + matching_state = false; + expand_boundaries = false; description = "uninitialized colvar"; @@ -131,7 +138,14 @@ int colvar::init(std::string const &conf) // Sort array of cvcs based on their names // Note: default CVC names are in input order for same type of CVC - std::sort(cvcs.begin(), cvcs.end(), colvar::compare_cvc); + std::sort(cvcs.begin(), cvcs.end(), + [](std::shared_ptr const &cvc1, + std::shared_ptr const &cvc2) -> bool { + if (cvc1 && cvc2) { + return cvc1->name < cvc2->name; + } + return false; + }); if(cvcs.size() > 1) { cvm::log("Sorted list of components for this scripted colvar:\n"); @@ -186,9 +200,9 @@ int colvar::init(std::string const &conf) if ((cvcs[i])->sup_np < 0) { cvm::log("Warning: you chose a negative exponent in the combination; " - "if you apply forces, the simulation may become unstable " - "when the component \""+ - (cvcs[i])->function_type+"\" approaches zero.\n"); + "if you apply forces, the simulation may become unstable " + "when the component \""+ + (cvcs[i])->function_type()+"\" approaches zero.\n"); } } } @@ -295,7 +309,7 @@ int colvar::init(std::string const &conf) error_code |= init_grid_parameters(conf); // Detect if we have a single component that is an alchemical lambda - if (is_enabled(f_cv_single_cvc) && cvcs[0]->function_type == "alchLambda") { + if (is_enabled(f_cv_single_cvc) && cvcs[0]->function_type() == "alchLambda") { enable(f_cv_external); } @@ -468,13 +482,6 @@ int colvar::init_custom_function(std::string const &conf) size_t pos = 0; if (key_lookup(conf, "customFunction", &expr, &pos)) { std::string msg("Error: customFunction requires the Lepton library."); -#if (__cplusplus < 201103L) - // NOTE: this is not ideal; testing for the Lepton library's version would - // be more accurate, but also less portable - msg += - std::string(" Note also that recent versions of Lepton require C++11: " - "please see https://colvars.github.io/README-c++11.html."); -#endif return cvm::error(msg, COLVARS_NOT_IMPLEMENTED); } @@ -697,9 +704,14 @@ int colvar::init_extended_Lagrangian(std::string const &conf) } if (ext_gamma != 0.0) { enable(f_cv_Langevin); + cvm::main()->cite_feature("BAOA integrator"); ext_gamma *= 1.0e-3; // correct as long as input is required in ps-1 and cvm::dt() is in fs // Adjust Langevin sigma for slow time step if time_step_factor != 1 - ext_sigma = cvm::sqrt(2.0 * proxy->boltzmann() * temp * ext_gamma * ext_mass / (cvm::dt() * cvm::real(time_step_factor))); + // Eq. (6a) in https://doi.org/10.1021/acs.jctc.2c00585 + ext_sigma = cvm::sqrt((1.0 - cvm::exp(-2.0 * ext_gamma * cvm::dt() * cvm::real(time_step_factor))) + * ext_mass * proxy->boltzmann() * temp); + } else { + ext_sigma = 0.0; } get_keyval_feature(this, conf, "reflectingLowerBoundary", f_cv_reflecting_lower_boundary, false); @@ -744,75 +756,56 @@ int colvar::init_output_flags(std::string const &conf) return COLVARS_OK; } -#if (__cplusplus >= 201103L) -// C++11 -template int colvar::init_components_type(std::string const &, - char const * /* def_desc */, - char const *def_config_key) { - // global_cvc_map is only supported in the C++11 case - global_cvc_map[def_config_key] = [](const std::string& cvc_conf){return new def_class_name(cvc_conf);}; - // TODO: maybe it is better to do more check to avoid duplication in the map? - return COLVARS_OK; + +template +void colvar::add_component_type(char const *def_description, char const *def_config_key) +{ + if (global_cvc_map.count(def_config_key) == 0) { + global_cvc_map[def_config_key] = []() { + return new def_class_name(); + }; + global_cvc_desc_map[def_config_key] = std::string(def_description); + } } -int colvar::init_components_type_from_global_map(const std::string& conf, - const char* def_config_key) { -#else -template int colvar::init_components_type(std::string const & conf, - char const * /* def_desc */, - char const *def_config_key) { -#endif + +int colvar::init_components_type(const std::string& conf, const char* def_config_key) { size_t def_count = 0; std::string def_conf = ""; size_t pos = 0; + int error_code = COLVARS_OK; while ( this->key_lookup(conf, def_config_key, &def_conf, &pos) ) { - if (!def_conf.size()) continue; + cvm::log("Initializing " "a new \""+std::string(def_config_key)+"\" component"+ (cvm::debug() ? ", with configuration:\n"+def_conf : ".\n")); + cvc *cvcp = global_cvc_map[def_config_key](); + if (!cvcp) { + return cvm::error("Error: in creating object of type \"" + std::string(def_config_key) + + "\".\n", + COLVARS_MEMORY_ERROR); + } + cvcs.push_back(std::shared_ptr(cvcp)); + cvm::increase_depth(); - // only the following line is different from init_components_type - // in the non-C++11 case -#if (__cplusplus >= 201103L) - cvc *cvcp = global_cvc_map.at(def_config_key)(def_conf); -#else - cvc *cvcp = new def_class_name(def_conf); -#endif - if (cvcp != NULL) { - cvcs.push_back(cvcp); - cvcp->check_keywords(def_conf, def_config_key); - cvcp->set_function_type(def_config_key); - if (cvm::get_error()) { - cvm::error("Error: in setting up component \""+ - std::string(def_config_key)+"\".\n", COLVARS_INPUT_ERROR); - return COLVARS_INPUT_ERROR; - } - cvm::decrease_depth(); - } else { - cvm::decrease_depth(); - cvm::error("Error: in allocating component \""+ - std::string(def_config_key)+"\".\n", - COLVARS_MEMORY_ERROR); - return COLVARS_MEMORY_ERROR; - } - - if ( (cvcp->period != 0.0) || (cvcp->wrap_center != 0.0) ) { - if (! cvcp->is_enabled(f_cvc_periodic)) { - cvm::error("Error: invalid use of period and/or " - "wrapAround in a \""+ - std::string(def_config_key)+ - "\" component.\n"+ - "Period: "+cvm::to_str(cvcp->period) + - " wrapAround: "+cvm::to_str(cvcp->wrap_center), - COLVARS_INPUT_ERROR); - return COLVARS_INPUT_ERROR; - } + int error_code_this = cvcp->init(def_conf); + if (error_code_this == COLVARS_OK) { + // Checking for invalid keywords only if the parsing was successful, otherwise any + // early-returns due to errors would raise false positives + error_code_this |= cvcp->check_keywords(def_conf, def_config_key); + } + cvm::decrease_depth(); + if (error_code_this != COLVARS_OK) { + error_code |= + cvm::error("Error: in setting up component \"" + std::string(def_config_key) + "\".\n", + COLVARS_INPUT_ERROR); } + // Set default name if it doesn't have one if ( ! cvcs.back()->name.size()) { std::ostringstream s; s << def_config_key << std::setfill('0') << std::setw(4) << ++def_count; @@ -822,135 +815,138 @@ template int colvar::init_components_type(std::string c cvcs.back()->setup(); if (cvm::debug()) { - cvm::log("Done initializing a \""+ - std::string(def_config_key)+ - "\" component"+ - (cvm::debug() ? - ", named \""+cvcs.back()->name+"\"" - : "")+".\n"); + cvm::log("Done initializing a \"" + std::string(def_config_key) + "\" component" + + (cvm::debug() ? ", named \"" + cvcs.back()->name + "\"" : "") + ".\n"); } + def_conf = ""; if (cvm::debug()) { - cvm::log("Parsed "+cvm::to_str(cvcs.size())+ - " components at this time.\n"); + cvm::log("Parsed " + cvm::to_str(cvcs.size()) + " components at this time.\n"); } } - return COLVARS_OK; + return error_code; } + +void colvar::define_component_types() +{ + colvarproxy *proxy = cvm::main()->proxy; + + add_component_type("distance", "distance"); + add_component_type("distance vector", "distanceVec"); + add_component_type("Cartesian coordinates", "cartesian"); + add_component_type("distance vector direction", "distanceDir"); + add_component_type("distance projection on an axis", "distanceZ"); + add_component_type("distance projection on a plane", "distanceXY"); + add_component_type("spherical polar angle theta", "polarTheta"); + add_component_type("spherical azimuthal angle phi", "polarPhi"); + add_component_type("average distance weighted by inverse power", "distanceInv"); + add_component_type("N1xN2-long vector of pairwise distances", "distancePairs"); + add_component_type("dipole magnitude", "dipoleMagnitude"); + add_component_type("coordination number", "coordNum"); + add_component_type("self-coordination number", "selfCoordNum"); + add_component_type("group-coordination number", "groupCoord"); + add_component_type("angle", "angle"); + add_component_type("dipole angle", "dipoleAngle"); + add_component_type("dihedral", "dihedral"); + add_component_type("hydrogen bond", "hBond"); + + if (proxy->check_atom_name_selections_available() == COLVARS_OK) { + add_component_type("alpha helix", "alpha"); + add_component_type("dihedral principal component", "dihedralPC"); + } + + add_component_type("orientation", "orientation"); + add_component_type("orientation angle", "orientationAngle"); + add_component_type("orientation projection", "orientationProj"); + add_component_type("tilt", "tilt"); + add_component_type("spin angle", "spinAngle"); + add_component_type("RMSD", "rmsd"); + add_component_type("radius of gyration", "gyration"); + add_component_type("moment of inertia", "inertia"); + add_component_type("moment of inertia around an axis", "inertiaZ"); + add_component_type("eigenvector", "eigenvector"); + add_component_type("alchemical coupling parameter", "alchLambda"); + add_component_type("force on alchemical coupling parameter", "alchFLambda"); + add_component_type("arithmetic path collective variables (s)", "aspath"); + add_component_type("arithmetic path collective variables (z)", "azpath"); + add_component_type("geometrical path collective variables (s)", "gspath"); + add_component_type("geometrical path collective variables (z)", "gzpath"); + add_component_type("linear combination of other collective variables", "linearCombination"); + add_component_type("geometrical path collective variables (s) for other CVs", "gspathCV"); + add_component_type("geometrical path collective variables (z) for other CVs", "gzpathCV"); + add_component_type("arithmetic path collective variables (s) for other CVs", "aspathCV"); + add_component_type("arithmetic path collective variables (s) for other CVs", "azpathCV"); + add_component_type("euler phi angle of the optimal orientation", "eulerPhi"); + add_component_type("euler psi angle of the optimal orientation", "eulerPsi"); + add_component_type("euler theta angle of the optimal orientation", "eulerTheta"); + +#ifdef LEPTON + add_component_type("CV with support of the Lepton custom function", "customColvar"); +#endif + + add_component_type("neural network CV for other CVs", "neuralNetwork"); + + if (proxy->check_volmaps_available() == COLVARS_OK) { + add_component_type("total value of atomic map", "mapTotal"); + } +} + + int colvar::init_components(std::string const &conf) { int error_code = COLVARS_OK; size_t i = 0, j = 0; - // in the non-C++11 case, the components are initialized directly by init_components_type; - // in the C++11 case, the components are stored in the global_cvc_map at first - // by init_components_type, and then the map is iterated to initialize all components. - error_code |= init_components_type(conf, "distance", "distance"); - error_code |= init_components_type(conf, "distance vector", "distanceVec"); - error_code |= init_components_type(conf, "Cartesian coordinates", "cartesian"); - error_code |= init_components_type(conf, "distance vector " - "direction", "distanceDir"); - error_code |= init_components_type(conf, "distance projection " - "on an axis", "distanceZ"); - error_code |= init_components_type(conf, "distance projection " - "on a plane", "distanceXY"); - error_code |= init_components_type(conf, "spherical polar angle theta", - "polarTheta"); - error_code |= init_components_type(conf, "spherical azimuthal angle phi", - "polarPhi"); - error_code |= init_components_type(conf, "average distance " - "weighted by inverse power", "distanceInv"); - error_code |= init_components_type(conf, "N1xN2-long vector " - "of pairwise distances", "distancePairs"); - error_code |= init_components_type(conf, "dipole magnitude", - "dipoleMagnitude"); - error_code |= init_components_type(conf, "coordination " - "number", "coordNum"); - error_code |= init_components_type(conf, "self-coordination " - "number", "selfCoordNum"); - error_code |= init_components_type(conf, "group-coordination " - "number", "groupCoord"); - error_code |= init_components_type(conf, "angle", "angle"); - error_code |= init_components_type(conf, "dipole angle", "dipoleAngle"); - error_code |= init_components_type(conf, "dihedral", "dihedral"); - error_code |= init_components_type(conf, "hydrogen bond", "hBond"); - error_code |= init_components_type(conf, "alpha helix", "alpha"); - error_code |= init_components_type(conf, "dihedral " - "principal component", "dihedralPC"); - error_code |= init_components_type(conf, "orientation", "orientation"); - error_code |= init_components_type(conf, "orientation " - "angle", "orientationAngle"); - error_code |= init_components_type(conf, "orientation " - "projection", "orientationProj"); - error_code |= init_components_type(conf, "tilt", "tilt"); - error_code |= init_components_type(conf, "spin angle", "spinAngle"); - error_code |= init_components_type(conf, "RMSD", "rmsd"); - error_code |= init_components_type(conf, "radius of " - "gyration", "gyration"); - error_code |= init_components_type(conf, "moment of " - "inertia", "inertia"); - error_code |= init_components_type(conf, "moment of inertia around an axis", "inertiaZ"); - error_code |= init_components_type(conf, "eigenvector", "eigenvector"); - error_code |= init_components_type(conf, "alchemical coupling parameter", "alchLambda"); - error_code |= init_components_type(conf, "force on alchemical coupling parameter", "alchFLambda"); - error_code |= init_components_type(conf, "geometrical path collective variables (s)", "gspath"); - error_code |= init_components_type(conf, "geometrical path collective variables (z)", "gzpath"); - error_code |= init_components_type(conf, "linear combination of other collective variables", "linearCombination"); - error_code |= init_components_type(conf, "geometrical path collective variables (s) for other CVs", "gspathCV"); - error_code |= init_components_type(conf, "geometrical path collective variables (z) for other CVs", "gzpathCV"); - error_code |= init_components_type(conf, "arithmetic path collective variables (s) for other CVs", "aspathCV"); - error_code |= init_components_type(conf, "arithmetic path collective variables (s) for other CVs", "azpathCV"); - error_code |= init_components_type(conf, "euler phi angle of the optimal orientation", "eulerPhi"); - error_code |= init_components_type(conf, "euler psi angle of the optimal orientation", "eulerPsi"); - error_code |= init_components_type(conf, "euler theta angle of the optimal orientation", "eulerTheta"); -#ifdef LEPTON - error_code |= init_components_type(conf, "CV with support of the lepton custom function", "customColvar"); -#endif - error_code |= init_components_type(conf, "neural network CV for other CVs", "NeuralNetwork"); + if (global_cvc_map.empty()) { + define_component_types(); + } - error_code |= init_components_type(conf, "total value of atomic map", "mapTotal"); -#if (__cplusplus >= 201103L) // iterate over all available CVC in the map for (auto it = global_cvc_map.begin(); it != global_cvc_map.end(); ++it) { - error_code |= init_components_type_from_global_map(conf, it->first.c_str()); + error_code |= init_components_type(conf, it->first.c_str()); // TODO: is it better to check the error code here? if (error_code != COLVARS_OK) { cvm::log("Failed to initialize " + it->first + " with the following configuration:\n"); cvm::log(conf); // TODO: should it stop here? + break; } } -#endif - if (!cvcs.size() || (error_code != COLVARS_OK)) { - cvm::error("Error: no valid components were provided " - "for this collective variable.\n", - COLVARS_INPUT_ERROR); - return COLVARS_INPUT_ERROR; + + if (!cvcs.size()) { + std::string msg("Error: no valid components were provided for this collective variable.\n"); + msg += "Currently available component types are: \n"; + for (auto it = global_cvc_desc_map.begin(); it != global_cvc_desc_map.end(); ++it) { + msg += " " + it->first + " -- " + it->second + "\n"; + } + msg += "\nPlease note that some of the above types may still be unavailable, irrespective of this error.\n"; + error_code |= cvm::error(msg, COLVARS_INPUT_ERROR); } // Check for uniqueness of CVC names (esp. if user-provided) for (i = 0; i < cvcs.size(); i++) { - for (j = i+1; j < cvcs.size(); j++) { + for (j = i + 1; j < cvcs.size(); j++) { if (cvcs[i]->name == cvcs[j]->name) { - cvm::error("Components " + cvm::to_str(i) + " and " + cvm::to_str(j) +\ - " cannot have the same name \"" + cvcs[i]->name+ "\".\n", COLVARS_INPUT_ERROR); - return COLVARS_INPUT_ERROR; + error_code |= cvm::error("Components " + cvm::to_str(i) + " and " + cvm::to_str(j) + + " cannot have the same name \"" + cvcs[i]->name + "\".\n", + COLVARS_INPUT_ERROR); } } } - n_active_cvcs = cvcs.size(); - - // Store list of children cvcs for dependency checking purposes - for (i = 0; i < cvcs.size(); i++) { - add_child(cvcs[i]); + if (error_code == COLVARS_OK) { + // Store list of children cvcs for dependency checking purposes + for (i = 0; i < cvcs.size(); i++) { + add_child(cvcs[i].get()); + } + // By default all CVCs are active at the start + n_active_cvcs = cvcs.size(); + cvm::log("All components initialized.\n"); } - cvm::log("All components initialized.\n"); - - return COLVARS_OK; + return error_code; } @@ -1220,7 +1216,7 @@ int colvar::init_dependencies() { // Initialize feature_states for each instance feature_states.reserve(f_cv_ntot); - for (i = 0; i < f_cv_ntot; i++) { + for (i = feature_states.size(); i < f_cv_ntot; i++) { feature_states.push_back(feature_state(true, false)); // Most features are available, so we set them so // and list exceptions below @@ -1283,14 +1279,10 @@ colvar::~colvar() // for dependency purposes remove_all_children(); - for (std::vector::reverse_iterator ci = cvcs.rbegin(); - ci != cvcs.rend(); - ++ci) { - // clear all children of this cvc (i.e. its atom groups) - // because the cvc base class destructor can't do it early enough - // and we don't want to have each cvc derived class do it separately + for (auto ci = cvcs.rbegin(); ci != cvcs.rend(); ++ci) { + // Clear all children of this cvc (i.e. its atom groups), because the cvc base class destructor + // can't do it early enough and we don't want to have each cvc derived class do it separately (*ci)->remove_all_children(); - delete *ci; } cvcs.clear(); @@ -1512,6 +1504,7 @@ int colvar::collect_cvc_values() cvm::to_str(x, cvm::cv_width, cvm::cv_prec)+".\n"); if (after_restart) { + x_old = x_restart; if (cvm::proxy->simulation_running()) { cvm::real const jump2 = dist2(x, x_restart) / (width*width); if (jump2 > 0.25) { @@ -1555,12 +1548,12 @@ int colvar::calc_cvc_gradients(int first_cvc, size_t num_cvcs) (cvcs[i])->debug_gradients(); } - cvm::decrease_depth(); - if (cvm::debug()) cvm::log("Done calculating gradients of colvar \""+this->name+"\".\n"); } + cvm::decrease_depth(); + return COLVARS_OK; } @@ -1706,12 +1699,13 @@ int colvar::calc_colvar_properties() // Do the same if no simulation is running (eg. VMD postprocessing) if ((cvm::step_relative() == 0 && !after_restart) || x_ext.type() == colvarvalue::type_notset || !cvm::proxy->simulation_running()) { x_ext = x; + cvm::log("Initializing extended coordinate to colvar value.\n"); if (is_enabled(f_cv_reflecting_lower_boundary) && x_ext < lower_boundary) { - cvm::log("Warning: initializing extended coordinate to reflective lower boundary, as colvar value is below."); + cvm::log("Warning: initializing extended coordinate to reflective lower boundary, as colvar value is below.\n"); x_ext = lower_boundary; } if (is_enabled(f_cv_reflecting_upper_boundary) && x_ext > upper_boundary) { - cvm::log("Warning: initializing extended coordinate to reflective upper boundary, as colvar value is above."); + cvm::log("Warning: initializing extended coordinate to reflective upper boundary, as colvar value is above.\n"); x_ext = upper_boundary; } @@ -1721,8 +1715,18 @@ int colvar::calc_colvar_properties() // Special case of a repeated timestep (eg. multiple NAMD "run" statements) // revert values of the extended coordinate and velocity prior to latest integration if (cvm::proxy->simulation_running() && cvm::step_relative() == prev_timestep) { - x_ext = prev_x_ext; - v_ext = prev_v_ext; + // Detect jumps due to discrete changes in coordinates (eg. in replica exchange schemes) + cvm::real const jump2 = dist2(x, x_old) / (width*width); + if (jump2 > 0.25) { + cvm::log("Detected discrete jump in colvar value from " + + cvm::to_str(x_old) + " to " + cvm::to_str(x) + ".\n"); + cvm::log("Reinitializing extended coordinate to colvar value.\n"); + x_ext = x; + } else { + cvm::log("Reinitializing extended coordinate to last value.\n"); + x_ext = prev_x_ext; + v_ext = prev_v_ext; + } } // report the restraint center as "value" // These position and velocities come from integration at the _previous timestep_ in update_forces_energy() @@ -1830,9 +1834,11 @@ void colvar::update_extended_Lagrangian() f += fb_actual; } - fr = f; - // External force has been scaled for a 1-timestep impulse, scale it back because we will - // integrate it with the colvar's own timestep factor + // fr: bias force on extended variable (without harmonic spring), for output in trajectory + fr = f; + + // External force has been scaled for an inner-timestep impulse (for the back-end integrator) + // here we scale it back because this integrator uses only the outer (long) timestep f_ext = f / cvm::real(time_step_factor); colvarvalue f_system(fr.type()); // force exterted by the system on the extended DOF @@ -1845,15 +1851,14 @@ void colvar::update_extended_Lagrangian() } else { // the total force is applied to the fictitious mass, while the // atoms only feel the harmonic force + wall force - // 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 (fb_actual will be added just below) f_system = (-0.5 * ext_force_k) * this->dist2_lgrad(x_ext, x); f = -1.0 * f_system; - // Coupling force is a slow force, to be applied to atomic coords impulse-style - // over a single MD timestep + // Coupling force will be applied to atomic coords impulse-style + // over an inner timestep of the back-end integrator f *= cvm::real(time_step_factor); } f_ext += f_system; @@ -1873,34 +1878,57 @@ void colvar::update_extended_Lagrangian() prev_x_ext = x_ext; prev_v_ext = v_ext; - // leapfrog: starting from x_i, f_i, v_(i-1/2) - v_ext += (0.5 * dt) * f_ext / ext_mass; - // Because of leapfrog, kinetic energy at time i is approximate + // BAOA (GSD) integrator as formulated in https://doi.org/10.1021/acs.jctc.2c00585 + // starting from x_t, f_t, v_(t-1/2) + // Variation: the velocity step is split in two to estimate the kinetic energy at time t + // so this is more of a "BBAOA" scheme: a rearranged BAOAB where the second B is deferred + // to the next time step for implementation reasons (waiting for the force calculation) + + // [B] Eq. (10a) split into two half-steps + // would reduce to leapfrog when gamma = 0 if this was the reported velocity + v_ext += 0.5 * dt * f_ext / ext_mass; + + // Kinetic energy at t kinetic_energy = 0.5 * ext_mass * v_ext * v_ext; + + // Potential energy at t potential_energy = 0.5 * ext_force_k * this->dist2(x_ext, x); - // leap to v_(i+1/2) + + // Total energy will lag behind position by one timestep + // (current kinetic energy is not accessible before the next force calculation) + + v_ext += 0.5 * dt * f_ext / ext_mass; + // Final v_ext lags behind x_ext by half a timestep + + // [A] Half step in position (10b) + x_ext += dt * v_ext / 2.0; + + // [O] leap to v_(i+1/2) (10c) if (is_enabled(f_cv_Langevin)) { - v_ext -= dt * ext_gamma * v_ext; colvarvalue rnd(x); rnd.set_random(); - v_ext += dt * ext_sigma * rnd / ext_mass; + // ext_sigma has been computed at init time according to (10c) + v_ext = cvm::exp(- 1.0 * dt * ext_gamma) * v_ext + ext_sigma * rnd / ext_mass; } - v_ext += (0.5 * dt) * f_ext / ext_mass; - x_ext += dt * v_ext; + // [A] Second half step in position (10d) + x_ext += dt * v_ext / 2.0; cvm::real delta = 0; // Length of overshoot past either reflecting boundary if ((is_enabled(f_cv_reflecting_lower_boundary) && (delta = x_ext - lower_boundary) < 0) || (is_enabled(f_cv_reflecting_upper_boundary) && (delta = x_ext - upper_boundary) > 0)) { + // Reflect arrival position x_ext -= 2.0 * delta; - v_ext *= -1.0; - if ((is_enabled(f_cv_reflecting_lower_boundary) && (delta = x_ext - lower_boundary) < 0) || - (is_enabled(f_cv_reflecting_upper_boundary) && (delta = x_ext - upper_boundary) > 0)) { + // Bounce happened on average at t+1/2 -> reflect velocity at t+1/2 + v_ext = -0.5 * (prev_v_ext + v_ext); + if ((is_enabled(f_cv_reflecting_lower_boundary) && (x_ext - lower_boundary) < 0.0) || + (is_enabled(f_cv_reflecting_upper_boundary) && (x_ext - upper_boundary) > 0.0)) { cvm::error("Error: extended coordinate value " + cvm::to_str(x_ext) + " is still outside boundaries after reflection.\n"); } } x_ext.apply_constraints(); this->wrap(x_ext); + if (is_enabled(f_cv_external)) { // Colvar value is constrained to the extended value x = x_ext; @@ -1914,9 +1942,8 @@ int colvar::end_of_step() if (cvm::debug()) cvm::log("End of step for colvar \""+this->name+"\".\n"); - if (is_enabled(f_cv_fdiff_velocity)) { - x_old = x; - } + // Used for fdiff_velocity and for detecting jumps for extended Lagrangian colvars + x_old = x; if (is_enabled(f_cv_subtract_applied_force)) { f_old = f; @@ -2256,44 +2283,65 @@ void colvar::wrap(colvarvalue &x_unwrapped) const std::istream & colvar::read_state(std::istream &is) { - std::streampos const start_pos = is.tellg(); + auto const start_pos = is.tellg(); std::string conf; - if ( !(is >> colvarparse::read_block("colvar", &conf)) ) { + if ( !(is >> colvarparse::read_block("colvar", &conf)) || + (check_matching_state(conf) != COLVARS_OK) ) { // this is not a colvar block is.clear(); - is.seekg(start_pos, std::ios::beg); + is.seekg(start_pos); is.setstate(std::ios::failbit); return is; } - { - std::string check_name = ""; - get_keyval(conf, "name", check_name, - std::string(""), colvarparse::parse_silent); - if (check_name.size() == 0) { - cvm::error("Error: Collective variable in the " - "restart file without any identifier.\n", COLVARS_INPUT_ERROR); - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); - return is; - } - - if (check_name != name) { - if (cvm::debug()) { - cvm::log("Ignoring state of colvar \""+check_name+ - "\": this colvar is named \""+name+"\".\n"); - } - is.seekg(start_pos, std::ios::beg); - return is; - } + if (!matching_state) { + // No errors reading, but this state is not for this colvar; rewind + is.seekg(start_pos); + return is; } + if (set_state_params(conf) != COLVARS_OK) { + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + } + + return is; +} + + +int colvar::check_matching_state(std::string const &conf) +{ + std::string check_name = ""; + get_keyval(conf, "name", check_name, std::string(""), colvarparse::parse_silent); + + if (check_name.size() == 0) { + return cvm::error("Error: Collective variable in the " + "state file without any identifier.\n", COLVARS_INPUT_ERROR); + } + + if (check_name != name) { + if (cvm::debug()) { + cvm::log("Ignoring state of colvar \""+check_name+ + "\": this colvar is named \""+name+"\".\n"); + } + matching_state = false; + } else { + matching_state = true; + } + + return COLVARS_OK; +} + + +int colvar::set_state_params(std::string const &conf) +{ + int error_code = COLVARS_OK; if ( !(get_keyval(conf, "x", x, x, colvarparse::parse_silent)) ) { - cvm::log("Error: restart file does not contain " - "the value of the colvar \""+ - name+"\" .\n"); + error_code |= cvm::error("Error: restart file does not contain " + "the value of the colvar \""+ + name+"\" .\n", COLVARS_INPUT_ERROR); } else { cvm::log("Restarting collective variable \""+name+"\" from value: "+ cvm::to_str(x)+"\n"); @@ -2306,9 +2354,10 @@ std::istream & colvar::read_state(std::istream &is) colvarvalue(x.type()), colvarparse::parse_silent)) || !(get_keyval(conf, "extended_v", v_ext, colvarvalue(x.type()), colvarparse::parse_silent)) ) { - cvm::log("Error: restart file does not contain " - "\"extended_x\" or \"extended_v\" for the colvar \""+ - name+"\", but you requested \"extendedLagrangian\".\n"); + error_code |= cvm::error("Error: restart file does not contain " + "\"extended_x\" or \"extended_v\" for the colvar \""+ + name+"\", but you requested \"extendedLagrangian\".\n", + COLVARS_INPUT_ERROR); } x_reported = x_ext; } else { @@ -2319,9 +2368,10 @@ std::istream & colvar::read_state(std::istream &is) if ( !(get_keyval(conf, "v", v_fdiff, colvarvalue(x.type()), colvarparse::parse_silent)) ) { - cvm::log("Error: restart file does not contain " - "the velocity for the colvar \""+ - name+"\", but you requested \"outputVelocity\".\n"); + error_code |= cvm::error("Error: restart file does not contain " + "the velocity for the colvar \""+ + name+"\", but you requested \"outputVelocity\".\n", + COLVARS_INPUT_ERROR); } if (is_enabled(f_cv_extended_Lagrangian)) { @@ -2331,6 +2381,41 @@ std::istream & colvar::read_state(std::istream &is) } } + return error_code; +} + + +cvm::memory_stream &colvar::read_state(cvm::memory_stream &is) +{ + auto const start_pos = is.tellg(); + std::string key, data; + if (is >> key) { + if (key == "colvar") { + // Read a formatted config string, then read the state parameters from it + if (is >> data) { + if (set_state_params(data) == COLVARS_OK) { + return is; + } + } + } + } + + auto const error_pos = is.tellg(); + + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + + std::string error_msg("Error: in reading state data for colvar \"" + name + " at position " + + cvm::to_str(error_pos) + " in unformatted stream.\n"); + if (key.size() && key != "colvar") { + error_msg += "; the keyword read was \"" + key + "\", but \"colvar\" was expected"; + } + if (data.size()) { + error_msg += "; the configuration string read was not recognized"; + } + error_msg += ".\n"; + cvm::error(error_msg, COLVARS_INPUT_ERROR); return is; } @@ -2345,7 +2430,7 @@ std::istream & colvar::read_traj(std::istream &is) cvm::log("Error: in reading the value of colvar \""+ this->name+"\" from trajectory.\n"); is.clear(); - is.seekg(start_pos, std::ios::beg); + is.seekg(start_pos); is.setstate(std::ios::failbit); return is; } @@ -2385,10 +2470,23 @@ std::istream & colvar::read_traj(std::istream &is) // ******************** OUTPUT FUNCTIONS ******************** -std::ostream & colvar::write_state(std::ostream &os) { +std::ostream & colvar::write_state(std::ostream &os) const +{ + os << "colvar {\n" << get_state_params() << "}\n\n"; - os << "colvar {\n" - << " name " << name << "\n" + if (runave_outfile.size() > 0) { + cvm::main()->proxy->flush_output_stream(runave_outfile); + } + + return os; +} + + +std::string const colvar::get_state_params() const +{ + std::ostringstream os; + + os << " name " << name << "\n" << " x " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) @@ -2412,7 +2510,13 @@ std::ostream & colvar::write_state(std::ostream &os) { << v_reported << "\n"; } - os << "}\n\n"; + return os.str(); +} + + +cvm::memory_stream & colvar::write_state(cvm::memory_stream &os) const +{ + os << std::string("colvar") << get_state_params(); if (runave_outfile.size() > 0) { cvm::main()->proxy->flush_output_stream(runave_outfile); @@ -2875,14 +2979,11 @@ int colvar::calc_runave() runave_variance *= 1.0 / cvm::real(runave_length-1); if (runave_outfile.size() > 0) { - std::ostream &runave_os = proxy->output_stream(runave_outfile); - runave_os << std::setw(cvm::it_width) << cvm::step_relative() - << " " - << std::setprecision(cvm::cv_prec) - << std::setw(cvm::cv_width) - << runave << " " - << std::setprecision(cvm::cv_prec) - << std::setw(cvm::cv_width) + std::ostream &runave_os = + proxy->output_stream(runave_outfile, "running average output file"); + runave_os << std::setw(cvm::it_width) << cvm::step_relative() << " " + << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) << runave << " " + << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) << cvm::sqrt(runave_variance) << "\n"; } } diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index 9af26dedd3..443e1e4bdd 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -10,12 +10,11 @@ #ifndef COLVAR_H #define COLVAR_H -#include - -#if (__cplusplus >= 201103L) -#include #include -#endif +#include +#include +#include +#include #include "colvarmodule.h" #include "colvarvalue.h" @@ -91,7 +90,7 @@ public: /// calculations, \link colvarbias_abf \endlink, it is used to /// calculate the grid spacing in the direction of this collective /// variable. - cvm::real width; + cvm::real width = 1.0; /// \brief Implementation of the feature list for colvar static std::vector cv_features; @@ -184,13 +183,13 @@ protected: /// Previous velocity of the restraint center colvarvalue prev_v_ext; /// Mass of the restraint center - cvm::real ext_mass; + cvm::real ext_mass = 0.0; /// Restraint force constant - cvm::real ext_force_k; + cvm::real ext_force_k = 0.0; /// Friction coefficient for Langevin extended dynamics - cvm::real ext_gamma; + cvm::real ext_gamma = 0.0; /// Amplitude of Gaussian white noise for Langevin extended dynamics - cvm::real ext_sigma; + cvm::real ext_sigma = 0.0; /// \brief Applied force on extended DOF, for output (unscaled if using MTS) colvarvalue fr; @@ -224,14 +223,14 @@ public: colvarvalue ft; /// Period, if this variable is periodic - cvm::real period; + cvm::real period = 0.0; /// Center of wrapping, if this variable is periodic - cvm::real wrap_center; + cvm::real wrap_center = 0.0; /// \brief Expand the boundaries of multiples of width, to keep the /// value always within range - bool expand_boundaries; + bool expand_boundaries = false; /// \brief Location of the lower boundary colvarvalue lower_boundary; @@ -252,6 +251,9 @@ public: /// Main init function int init(std::string const &conf); + /// Populate the map of available CVC types + void define_component_types(); + /// Parse the CVC configuration and allocate their data int init_components(std::string const &conf); @@ -271,17 +273,13 @@ public: virtual int init_dependencies(); private: - /// Parse the CVC configuration for all components of a certain type - template int init_components_type(std::string const & conf, - char const *def_desc, - char const *def_config_key); -#if (__cplusplus >= 201103L) - /// For the C++11 case, the names of all available components are - /// registered in the global map at first, and then the CVC configuration - /// is parsed by this function - int init_components_type_from_global_map(const std::string& conf, - const char* def_config_key); -#endif + + /// Declare an available CVC type and its description, register them in the global map + template + void add_component_type(char const *description, char const *config_key); + + /// Initialize any CVC objects matching the given key + int init_components_type(const std::string &conf, const char *config_key); public: @@ -387,10 +385,10 @@ public: protected: /// \brief Number of CVC objects with an active flag - size_t n_active_cvcs; + size_t n_active_cvcs = 0; /// Sum of square coefficients for active cvcs - cvm::real active_cvc_square_norm; + cvm::real active_cvc_square_norm = 0.0; /// Update the sum of square coefficients for active cvcs void update_active_cvc_square_norm(); @@ -460,16 +458,35 @@ public: /// Write a label to the trajectory file (comment line) std::ostream & write_traj_label(std::ostream &os); - /// Read the collective variable from a restart file + /// Read the colvar's state from a formatted input stream std::istream & read_state(std::istream &is); - /// Write the collective variable to a restart file - std::ostream & write_state(std::ostream &os); + + /// Read the colvar's state from an unformatted input stream + cvm::memory_stream & read_state(cvm::memory_stream &is); + + /// Check the name of the bias vs. the given string, set the matching_state flag accordingly + int check_matching_state(std::string const &state_conf); + + /// Read the values of colvar mutable data from a string (used by both versions of read_state()) + int set_state_params(std::string const &state_conf); + + /// Write the state information of this colvar in a block of text, suitable for later parsing + std::string const get_state_params() const; + + /// Write the colvar's state to a formatted output stream + std::ostream & write_state(std::ostream &os) const; + + /// Write the colvar's state to an unformatted output stream + cvm::memory_stream & write_state(cvm::memory_stream &os) const; /// Write output files (if defined, e.g. in analysis mode) int write_output_files(); protected: + /// Flag used to tell if the state string being read is for this colvar + bool matching_state; + /// Previous value (to calculate velocities during analysis) colvarvalue x_old; @@ -554,15 +571,15 @@ protected: /// Current value of the running average colvarvalue runave; /// Current value of the square deviation from the running average - cvm::real runave_variance; + cvm::real runave_variance = 0.0; /// Calculate the running average and its standard deviation int calc_runave(); /// If extended Lagrangian active: colvar kinetic energy - cvm::real kinetic_energy; + cvm::real kinetic_energy = 0.0; /// If extended Lagrangian active: colvar harmonic potential - cvm::real potential_energy; + cvm::real potential_energy = 0.0; public: @@ -601,8 +618,9 @@ public: class dihedPC; class alch_lambda; class alch_Flambda; - class componentDisabled; class CartesianBasedPath; + class aspath; + class azpath; class gspath; class gzpath; class linearCombination; @@ -626,21 +644,19 @@ public: // components that do not handle any atoms directly class map_total; - /// getter of the global cvc map -#if (__cplusplus >= 201103L) /// A global mapping of cvc names to the cvc constructors - static const std::map>& get_global_cvc_map() { - return global_cvc_map; + static const std::map> &get_global_cvc_map() + { + return global_cvc_map; } -#endif /// \brief function for sorting cvcs by their names static bool compare_cvc(const colvar::cvc* const i, const colvar::cvc* const j); protected: - /// \brief Array of \link colvar::cvc \endlink objects - std::vector cvcs; + /// Array of components objects + std::vector> cvcs; /// \brief Flags to enable or disable cvcs at next colvar evaluation std::vector cvc_flags; @@ -671,10 +687,11 @@ protected: double dev_null; #endif -#if (__cplusplus >= 201103L) /// A global mapping of cvc names to the cvc constructors - static std::map> global_cvc_map; -#endif + static std::map> global_cvc_map; + + /// A global mapping of cvc names to the corresponding descriptions + static std::map global_cvc_desc_map; /// Volmap numeric IDs, one for each CVC (-1 if not available) std::vector volmap_ids_; @@ -762,4 +779,3 @@ inline void colvar::reset_bias_force() { } #endif - diff --git a/lib/colvars/colvar_arithmeticpath.h b/lib/colvars/colvar_arithmeticpath.h index bea86a1014..ee97390dfc 100644 --- a/lib/colvars/colvar_arithmeticpath.h +++ b/lib/colvars/colvar_arithmeticpath.h @@ -7,126 +7,84 @@ #include #include #include +#include namespace ArithmeticPathCV { using std::vector; -enum path_sz {S, Z}; - -template +template class ArithmeticPathBase { public: ArithmeticPathBase() {} - virtual ~ArithmeticPathBase() {} - virtual void initialize(size_t p_num_elements, size_t p_total_frames, double p_lambda, const vector& p_element, const vector& p_weights); - virtual void updateDistanceToReferenceFrames() = 0; - virtual void computeValue(); - virtual void computeDerivatives(); - virtual void compute(); - virtual void reComputeLambda(const vector& rmsd_between_refs); + ~ArithmeticPathBase() {} + void initialize(size_t p_num_elements, size_t p_total_frames, scalar_type p_lambda, const vector& p_weights); + void reComputeLambda(const vector& rmsd_between_refs); + template + void computeValue(const vector>& frame_element_distances, scalar_type *s = nullptr, scalar_type *z = nullptr); + // can only be called after computeValue() for element-wise derivatives and store derivatives of i-th frame to dsdx and dzdx + template + void computeDerivatives(const vector>& frame_element_distances, vector> *dsdx = nullptr, vector> *dzdx = nullptr); protected: scalar_type lambda; - vector weights; + vector squared_weights; size_t num_elements; size_t total_frames; - vector< vector > frame_element_distances; - scalar_type s; - scalar_type z; - vector dsdx; - vector dzdx; -private: - // intermediate variables - vector s_numerator_frame; - vector s_denominator_frame; - scalar_type numerator_s; - scalar_type denominator_s; + vector exponents; + scalar_type max_exponent; + scalar_type saved_exponent_sum; scalar_type normalization_factor; + scalar_type saved_s; }; -template -void ArithmeticPathBase::initialize(size_t p_num_elements, size_t p_total_frames, double p_lambda, const vector& p_element, const vector& p_weights) { +template +void ArithmeticPathBase::initialize(size_t p_num_elements, size_t p_total_frames, scalar_type p_lambda, const vector& p_weights) { lambda = p_lambda; - weights = p_weights; + for (size_t i = 0; i < p_weights.size(); ++i) squared_weights.push_back(p_weights[i] * p_weights[i]); num_elements = p_num_elements; total_frames = p_total_frames; - frame_element_distances.resize(total_frames, p_element); - for (size_t i_frame = 0; i_frame < frame_element_distances.size(); ++i_frame) { - for (size_t j_elem = 0; j_elem < num_elements; ++j_elem) { - frame_element_distances[i_frame][j_elem].reset(); - } - } - s = scalar_type(0); - z = scalar_type(0); - dsdx = p_element; - dzdx = p_element; - s_numerator_frame.resize(total_frames, scalar_type(0)); - s_denominator_frame.resize(total_frames, scalar_type(0)); - numerator_s = scalar_type(0); - denominator_s = scalar_type(0); + exponents.resize(total_frames); normalization_factor = 1.0 / static_cast(total_frames - 1); + saved_s = scalar_type(); + saved_exponent_sum = scalar_type(); + max_exponent = scalar_type(); } -template -void ArithmeticPathBase::computeValue() { - updateDistanceToReferenceFrames(); - numerator_s = scalar_type(0); - denominator_s = scalar_type(0); - for (size_t i_frame = 0; i_frame < frame_element_distances.size(); ++i_frame) { - scalar_type exponent_tmp = scalar_type(0); +template +template +void ArithmeticPathBase::computeValue( + const vector>& frame_element_distances, + scalar_type *s, scalar_type *z) +{ + for (size_t i_frame = 0; i_frame < total_frames; ++i_frame) { + scalar_type exponent_tmp = scalar_type(); for (size_t j_elem = 0; j_elem < num_elements; ++j_elem) { - exponent_tmp += weights[j_elem] * frame_element_distances[i_frame][j_elem] * weights[j_elem] * frame_element_distances[i_frame][j_elem]; + exponent_tmp += squared_weights[j_elem] * frame_element_distances[i_frame][j_elem] * frame_element_distances[i_frame][j_elem]; } - exponent_tmp = exponent_tmp * -1.0 * lambda; - // prevent underflow if the argument of cvm::exp is less than -708.4 - if (exponent_tmp > -708.4) { - exponent_tmp = cvm::exp(exponent_tmp); - } else { - exponent_tmp = 0; - } - numerator_s += static_cast(i_frame) * exponent_tmp; - denominator_s += exponent_tmp; - s_numerator_frame[i_frame] = static_cast(i_frame) * exponent_tmp; - s_denominator_frame[i_frame] = exponent_tmp; + exponents[i_frame] = exponent_tmp * -1.0 * lambda; + if (i_frame == 0 || exponents[i_frame] > max_exponent) max_exponent = exponents[i_frame]; } - s = numerator_s / denominator_s * normalization_factor; - z = -1.0 / lambda * cvm::logn(denominator_s); -} - -template -void ArithmeticPathBase::compute() { - computeValue(); - computeDerivatives(); -} - -template -void ArithmeticPathBase::computeDerivatives() { - for (size_t j_elem = 0; j_elem < num_elements; ++j_elem) { - element_type dsdxj_numerator_part1(dsdx[j_elem]); - element_type dsdxj_numerator_part2(dsdx[j_elem]); - element_type dzdxj_numerator(dsdx[j_elem]); - dsdxj_numerator_part1.reset(); - dsdxj_numerator_part2.reset(); - dzdxj_numerator.reset(); - for (size_t i_frame = 0; i_frame < frame_element_distances.size(); ++i_frame) { - element_type derivative_tmp = -2.0 * lambda * weights[j_elem] * weights[j_elem] * frame_element_distances[i_frame][j_elem]; - dsdxj_numerator_part1 += s_numerator_frame[i_frame] * derivative_tmp; - dsdxj_numerator_part2 += s_denominator_frame[i_frame] * derivative_tmp; - dzdxj_numerator += s_denominator_frame[i_frame] * derivative_tmp; - } - dsdxj_numerator_part1 *= denominator_s; - dsdxj_numerator_part2 *= numerator_s; - if ((dsdxj_numerator_part1 - dsdxj_numerator_part2).norm() < std::numeric_limits::min()) { - dsdx[j_elem] = 0; - } else { - dsdx[j_elem] = (dsdxj_numerator_part1 - dsdxj_numerator_part2) / (denominator_s * denominator_s) * normalization_factor; - } - dzdx[j_elem] = -1.0 / lambda * dzdxj_numerator / denominator_s; + scalar_type log_sum_exp_0 = scalar_type(); + scalar_type log_sum_exp_1 = scalar_type(); + for (size_t i_frame = 0; i_frame < total_frames; ++i_frame) { + exponents[i_frame] = cvm::exp(exponents[i_frame] - max_exponent); + log_sum_exp_0 += exponents[i_frame]; + log_sum_exp_1 += i_frame * exponents[i_frame]; + } + saved_exponent_sum = log_sum_exp_0; + log_sum_exp_0 = max_exponent + cvm::logn(log_sum_exp_0); + log_sum_exp_1 = max_exponent + cvm::logn(log_sum_exp_1); + saved_s = normalization_factor * cvm::exp(log_sum_exp_1 - log_sum_exp_0); + if (s != nullptr) { + *s = saved_s; + } + if (z != nullptr) { + *z = -1.0 / lambda * log_sum_exp_0; } } -template -void ArithmeticPathBase::reComputeLambda(const vector& rmsd_between_refs) { +template +void ArithmeticPathBase::reComputeLambda(const vector& rmsd_between_refs) { scalar_type mean_square_displacements = 0.0; for (size_t i_frame = 1; i_frame < total_frames; ++i_frame) { cvm::log(std::string("Distance between frame ") + cvm::to_str(i_frame) + " and " + cvm::to_str(i_frame + 1) + " is " + cvm::to_str(rmsd_between_refs[i_frame - 1]) + std::string("\n")); @@ -135,6 +93,45 @@ void ArithmeticPathBase::reComputeLambda(c mean_square_displacements /= scalar_type(total_frames - 1); lambda = 1.0 / mean_square_displacements; } + +// frame-wise derivatives for frames using optimal rotation +template +template +void ArithmeticPathBase::computeDerivatives( + const vector>& frame_element_distances, + vector> *dsdx, + vector> *dzdx) +{ + vector softmax_out, tmps; + softmax_out.reserve(total_frames); + tmps.reserve(total_frames); + for (size_t i_frame = 0; i_frame < total_frames; ++i_frame) { + softmax_out.push_back(exponents[i_frame] / saved_exponent_sum); + tmps.push_back( + (static_cast(i_frame) - + static_cast(total_frames - 1) * saved_s) * + normalization_factor); + } + if (dsdx != nullptr) { + for (size_t i_frame = 0; i_frame < total_frames; ++i_frame) { + for (size_t j_elem = 0; j_elem < num_elements; ++j_elem) { + (*dsdx)[i_frame][j_elem] = + -2.0 * squared_weights[j_elem] * lambda * + frame_element_distances[i_frame][j_elem] * + softmax_out[i_frame] * tmps[i_frame]; + } + } + } + if (dzdx != nullptr) { + for (size_t i_frame = 0; i_frame < total_frames; ++i_frame) { + for (size_t j_elem = 0; j_elem < num_elements; ++j_elem) { + (*dzdx)[i_frame][j_elem] = + 2.0 * squared_weights[j_elem] * softmax_out[i_frame] * + frame_element_distances[i_frame][j_elem]; + } + } + } +} } #endif // ARITHMETICPATHCV_H diff --git a/lib/colvars/colvar_geometricpath.h b/lib/colvars/colvar_geometricpath.h index 9ff78261f2..51f97bb675 100644 --- a/lib/colvars/colvar_geometricpath.h +++ b/lib/colvars/colvar_geometricpath.h @@ -8,12 +8,13 @@ // Colvars repository at GitHub. +#include +#include +#include +#include + #include "colvarmodule.h" -#include -#include -#include -#include namespace GeometricPathCV { @@ -171,10 +172,14 @@ void GeometricPathBase::determineClosestFr sign = -1; } if (cvm::fabs(static_cast(frame_index[0]) - static_cast(frame_index[1])) > 1) { - std::cout << "Warning: Geometrical pathCV relies on the assumption that the second closest frame is the neighbouring frame\n"; - std::cout << " Please check your configuration or increase restraint on z(σ)\n"; + std::string message( + "Warning: Geometrical pathCV relies on the assumption that the second closest frame is " + "the neighbouring frame\n" + " Please check your configuration or increase restraint on z(σ)\n"); for (size_t i_frame = 0; i_frame < frame_index.size(); ++i_frame) { - std::cout << "Frame index: " << frame_index[i_frame] << " ; optimal RMSD = " << frame_distances[frame_index[i_frame]] << "\n"; + message += "Frame index: " + cvm::to_str(frame_index[i_frame]) + + " ; optimal RMSD = " + cvm::to_str(frame_distances[frame_index[i_frame]]) + + "\n"; } } min_frame_index_1 = frame_index[0]; // s_m diff --git a/lib/colvars/colvar_neuralnetworkcompute.cpp b/lib/colvars/colvar_neuralnetworkcompute.cpp index a1ad717946..b77db0cfa3 100644 --- a/lib/colvars/colvar_neuralnetworkcompute.cpp +++ b/lib/colvars/colvar_neuralnetworkcompute.cpp @@ -10,7 +10,6 @@ #include #include -#if (__cplusplus >= 201103L) #include "colvar_neuralnetworkcompute.h" #include "colvarparse.h" #include "colvarproxy.h" @@ -272,9 +271,12 @@ std::vector> neuralNetworkCompute::multiply_matrix(const std const size_t t = B[0].size(); std::vector> C(m, std::vector(t, 0.0)); for (size_t i = 0; i < m; ++i) { - for (size_t j = 0; j < t; ++j) { - for (size_t k = 0; k < n; ++k) { - C[i][j] += A[i][k] * B[k][j]; + for (size_t k = 0; k < n; ++k) { + const auto tmp = A[i][k]; + auto& C_i = C[i]; + auto& B_k = B[k]; + for (size_t j = 0; j < t; ++j) { + C_i[j] += tmp * B_k[j]; } } } @@ -306,5 +308,3 @@ void neuralNetworkCompute::compute() { } } } - -#endif diff --git a/lib/colvars/colvar_neuralnetworkcompute.h b/lib/colvars/colvar_neuralnetworkcompute.h index 5a56887431..575ce3b40b 100644 --- a/lib/colvars/colvar_neuralnetworkcompute.h +++ b/lib/colvars/colvar_neuralnetworkcompute.h @@ -7,7 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#if (__cplusplus >= 201103L) #ifndef NEURALNETWORKCOMPUTE_H #define NEURALNETWORKCOMPUTE_H @@ -145,4 +144,3 @@ public: } #endif -#endif diff --git a/lib/colvars/colvar_rotation_derivative.h b/lib/colvars/colvar_rotation_derivative.h new file mode 100644 index 0000000000..50f4f1aa97 --- /dev/null +++ b/lib/colvars/colvar_rotation_derivative.h @@ -0,0 +1,627 @@ +#ifndef COLVAR_ROTATION_DERIVATIVE +#define COLVAR_ROTATION_DERIVATIVE + +#include "colvartypes.h" +#include +#include + +/// \brief Helper function for loading the ia-th atom in the vector pos to x, y and z (C++11 SFINAE is used) +template ::value, bool>::type = true> +inline void read_atom_coord( + size_t ia, const std::vector& pos, + cvm::real* x, cvm::real* y, cvm::real* z) { + *x = pos[ia].x; + *y = pos[ia].y; + *z = pos[ia].z; +} + +template ::value, bool>::type = true> +inline void read_atom_coord( + size_t ia, const std::vector& pos, + cvm::real* x, cvm::real* y, cvm::real* z) { + *x = pos[ia].pos.x; + *y = pos[ia].pos.y; + *z = pos[ia].pos.z; +} + +/// \brief Helper enum class for specifying options in rotation_derivative::prepare_derivative +enum class rotation_derivative_dldq { + /// Require the derivative of the leading eigenvalue with respect to the atom coordinats + use_dl = 1 << 0, + /// Require the derivative of the leading eigenvector with respect to the atom coordinats + use_dq = 1 << 1 +}; + +inline constexpr rotation_derivative_dldq operator|(rotation_derivative_dldq Lhs, rotation_derivative_dldq Rhs) { + return static_cast( + static_cast::type>(Lhs) | + static_cast::type>(Rhs)); +} + +inline constexpr bool operator&(rotation_derivative_dldq Lhs, rotation_derivative_dldq Rhs) +{ + return (static_cast::type>(Lhs) & + static_cast::type>(Rhs)); +} + +/// \brief Helper class for calculating the derivative of rotation +template +struct rotation_derivative { + static_assert(std::is_same::value || std::is_same::value, + "class template rotation_derivative only supports cvm::atom_pos or cvm::atom types."); + static_assert(std::is_same::value || std::is_same::value, + "class template rotation_derivative only supports cvm::atom_pos or cvm::atom types."); + /// \brief Reference to the rotation + const cvm::rotation &m_rot; + /// \brief Reference to the atom positions of group 1 + const std::vector &m_pos1; + /// \brief Reference to the atom positions of group 2 + const std::vector &m_pos2; + /// \brief Temporary variable that will be updated if prepare_derivative called + cvm::real tmp_Q0Q0[4][4]; + cvm::real tmp_Q0Q0_L[4][4][4]; + /*! @brief Constructor of the cvm::rotation::derivative class + * @param[in] rot The cvm::rotation object (must have called + * `calc_optimal_rotation` before calling + * `calc_derivative_wrt_group1` and + * `calc_derivative_wrt_group2`) + * @param[in] pos1 The atom positions of group 1 + * @param[in] pos2 The atom positions of group 2 + */ + rotation_derivative( + const cvm::rotation &rot, + const std::vector &pos1, + const std::vector &pos2): + m_rot(rot), m_pos1(pos1), m_pos2(pos2) {}; + /*! @brief This function must be called before `calc_derivative_wrt_group1` + * and `calc_derivative_wrt_group2` in order to prepare the tmp_Q0Q0 + * and tmp_Q0Q0_L. + * @param[in] require_dl_dq Require the calculation of the derivatives of L or/and Q + * with respect to atoms. + */ + void prepare_derivative(rotation_derivative_dldq require_dl_dq) { + if (require_dl_dq & rotation_derivative_dldq::use_dl) { + const auto &Q0 = m_rot.S_eigvec[0]; + tmp_Q0Q0[0][0] = Q0[0] * Q0[0]; + tmp_Q0Q0[0][1] = Q0[0] * Q0[1]; + tmp_Q0Q0[0][2] = Q0[0] * Q0[2]; + tmp_Q0Q0[0][3] = Q0[0] * Q0[3]; + tmp_Q0Q0[1][0] = Q0[1] * Q0[0]; + tmp_Q0Q0[1][1] = Q0[1] * Q0[1]; + tmp_Q0Q0[1][2] = Q0[1] * Q0[2]; + tmp_Q0Q0[1][3] = Q0[1] * Q0[3]; + tmp_Q0Q0[2][0] = Q0[2] * Q0[0]; + tmp_Q0Q0[2][1] = Q0[2] * Q0[1]; + tmp_Q0Q0[2][2] = Q0[2] * Q0[2]; + tmp_Q0Q0[2][3] = Q0[2] * Q0[3]; + tmp_Q0Q0[3][0] = Q0[3] * Q0[0]; + tmp_Q0Q0[3][1] = Q0[3] * Q0[1]; + tmp_Q0Q0[3][2] = Q0[3] * Q0[2]; + tmp_Q0Q0[3][3] = Q0[3] * Q0[3]; + } + if (require_dl_dq & rotation_derivative_dldq::use_dq) { + const auto &Q0 = m_rot.S_eigvec[0]; + const auto &Q1 = m_rot.S_eigvec[1]; + const auto &Q2 = m_rot.S_eigvec[2]; + const auto &Q3 = m_rot.S_eigvec[3]; + cvm::real const L0 = m_rot.S_eigval[0]; + cvm::real const L1 = m_rot.S_eigval[1]; + cvm::real const L2 = m_rot.S_eigval[2]; + cvm::real const L3 = m_rot.S_eigval[3]; + + tmp_Q0Q0_L[0][0][0] = (Q1[0] * Q0[0]) / (L0-L1) * Q1[0] + + (Q2[0] * Q0[0]) / (L0-L2) * Q2[0] + + (Q3[0] * Q0[0]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][0][0] = (Q1[0] * Q0[0]) / (L0-L1) * Q1[1] + + (Q2[0] * Q0[0]) / (L0-L2) * Q2[1] + + (Q3[0] * Q0[0]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][0][0] = (Q1[0] * Q0[0]) / (L0-L1) * Q1[2] + + (Q2[0] * Q0[0]) / (L0-L2) * Q2[2] + + (Q3[0] * Q0[0]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][0][0] = (Q1[0] * Q0[0]) / (L0-L1) * Q1[3] + + (Q2[0] * Q0[0]) / (L0-L2) * Q2[3] + + (Q3[0] * Q0[0]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][0][1] = (Q1[0] * Q0[1]) / (L0-L1) * Q1[0] + + (Q2[0] * Q0[1]) / (L0-L2) * Q2[0] + + (Q3[0] * Q0[1]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][0][1] = (Q1[0] * Q0[1]) / (L0-L1) * Q1[1] + + (Q2[0] * Q0[1]) / (L0-L2) * Q2[1] + + (Q3[0] * Q0[1]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][0][1] = (Q1[0] * Q0[1]) / (L0-L1) * Q1[2] + + (Q2[0] * Q0[1]) / (L0-L2) * Q2[2] + + (Q3[0] * Q0[1]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][0][1] = (Q1[0] * Q0[1]) / (L0-L1) * Q1[3] + + (Q2[0] * Q0[1]) / (L0-L2) * Q2[3] + + (Q3[0] * Q0[1]) / (L0-L3) * Q3[3]; + + + tmp_Q0Q0_L[0][0][2] = (Q1[0] * Q0[2]) / (L0-L1) * Q1[0] + + (Q2[0] * Q0[2]) / (L0-L2) * Q2[0] + + (Q3[0] * Q0[2]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][0][2] = (Q1[0] * Q0[2]) / (L0-L1) * Q1[1] + + (Q2[0] * Q0[2]) / (L0-L2) * Q2[1] + + (Q3[0] * Q0[2]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][0][2] = (Q1[0] * Q0[2]) / (L0-L1) * Q1[2] + + (Q2[0] * Q0[2]) / (L0-L2) * Q2[2] + + (Q3[0] * Q0[2]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][0][2] = (Q1[0] * Q0[2]) / (L0-L1) * Q1[3] + + (Q2[0] * Q0[2]) / (L0-L2) * Q2[3] + + (Q3[0] * Q0[2]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][0][3] = (Q1[0] * Q0[3]) / (L0-L1) * Q1[0] + + (Q2[0] * Q0[3]) / (L0-L2) * Q2[0] + + (Q3[0] * Q0[3]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][0][3] = (Q1[0] * Q0[3]) / (L0-L1) * Q1[1] + + (Q2[0] * Q0[3]) / (L0-L2) * Q2[1] + + (Q3[0] * Q0[3]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][0][3] = (Q1[0] * Q0[3]) / (L0-L1) * Q1[2] + + (Q2[0] * Q0[3]) / (L0-L2) * Q2[2] + + (Q3[0] * Q0[3]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][0][3] = (Q1[0] * Q0[3]) / (L0-L1) * Q1[3] + + (Q2[0] * Q0[3]) / (L0-L2) * Q2[3] + + (Q3[0] * Q0[3]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][1][0] = (Q1[1] * Q0[0]) / (L0-L1) * Q1[0] + + (Q2[1] * Q0[0]) / (L0-L2) * Q2[0] + + (Q3[1] * Q0[0]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][1][0] = (Q1[1] * Q0[0]) / (L0-L1) * Q1[1] + + (Q2[1] * Q0[0]) / (L0-L2) * Q2[1] + + (Q3[1] * Q0[0]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][1][0] = (Q1[1] * Q0[0]) / (L0-L1) * Q1[2] + + (Q2[1] * Q0[0]) / (L0-L2) * Q2[2] + + (Q3[1] * Q0[0]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][1][0] = (Q1[1] * Q0[0]) / (L0-L1) * Q1[3] + + (Q2[1] * Q0[0]) / (L0-L2) * Q2[3] + + (Q3[1] * Q0[0]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][1][1] = (Q1[1] * Q0[1]) / (L0-L1) * Q1[0] + + (Q2[1] * Q0[1]) / (L0-L2) * Q2[0] + + (Q3[1] * Q0[1]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][1][1] = (Q1[1] * Q0[1]) / (L0-L1) * Q1[1] + + (Q2[1] * Q0[1]) / (L0-L2) * Q2[1] + + (Q3[1] * Q0[1]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][1][1] = (Q1[1] * Q0[1]) / (L0-L1) * Q1[2] + + (Q2[1] * Q0[1]) / (L0-L2) * Q2[2] + + (Q3[1] * Q0[1]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][1][1] = (Q1[1] * Q0[1]) / (L0-L1) * Q1[3] + + (Q2[1] * Q0[1]) / (L0-L2) * Q2[3] + + (Q3[1] * Q0[1]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][1][2] = (Q1[1] * Q0[2]) / (L0-L1) * Q1[0] + + (Q2[1] * Q0[2]) / (L0-L2) * Q2[0] + + (Q3[1] * Q0[2]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][1][2] = (Q1[1] * Q0[2]) / (L0-L1) * Q1[1] + + (Q2[1] * Q0[2]) / (L0-L2) * Q2[1] + + (Q3[1] * Q0[2]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][1][2] = (Q1[1] * Q0[2]) / (L0-L1) * Q1[2] + + (Q2[1] * Q0[2]) / (L0-L2) * Q2[2] + + (Q3[1] * Q0[2]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][1][2] = (Q1[1] * Q0[2]) / (L0-L1) * Q1[3] + + (Q2[1] * Q0[2]) / (L0-L2) * Q2[3] + + (Q3[1] * Q0[2]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][1][3] = (Q1[1] * Q0[3]) / (L0-L1) * Q1[0] + + (Q2[1] * Q0[3]) / (L0-L2) * Q2[0] + + (Q3[1] * Q0[3]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][1][3] = (Q1[1] * Q0[3]) / (L0-L1) * Q1[1] + + (Q2[1] * Q0[3]) / (L0-L2) * Q2[1] + + (Q3[1] * Q0[3]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][1][3] = (Q1[1] * Q0[3]) / (L0-L1) * Q1[2] + + (Q2[1] * Q0[3]) / (L0-L2) * Q2[2] + + (Q3[1] * Q0[3]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][1][3] = (Q1[1] * Q0[3]) / (L0-L1) * Q1[3] + + (Q2[1] * Q0[3]) / (L0-L2) * Q2[3] + + (Q3[1] * Q0[3]) / (L0-L3) * Q3[3]; + + + tmp_Q0Q0_L[0][2][0] = (Q1[2] * Q0[0]) / (L0-L1) * Q1[0] + + (Q2[2] * Q0[0]) / (L0-L2) * Q2[0] + + (Q3[2] * Q0[0]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][2][0] = (Q1[2] * Q0[0]) / (L0-L1) * Q1[1] + + (Q2[2] * Q0[0]) / (L0-L2) * Q2[1] + + (Q3[2] * Q0[0]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][2][0] = (Q1[2] * Q0[0]) / (L0-L1) * Q1[2] + + (Q2[2] * Q0[0]) / (L0-L2) * Q2[2] + + (Q3[2] * Q0[0]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][2][0] = (Q1[2] * Q0[0]) / (L0-L1) * Q1[3] + + (Q2[2] * Q0[0]) / (L0-L2) * Q2[3] + + (Q3[2] * Q0[0]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][2][1] = (Q1[2] * Q0[1]) / (L0-L1) * Q1[0] + + (Q2[2] * Q0[1]) / (L0-L2) * Q2[0] + + (Q3[2] * Q0[1]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][2][1] = (Q1[2] * Q0[1]) / (L0-L1) * Q1[1] + + (Q2[2] * Q0[1]) / (L0-L2) * Q2[1] + + (Q3[2] * Q0[1]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][2][1] = (Q1[2] * Q0[1]) / (L0-L1) * Q1[2] + + (Q2[2] * Q0[1]) / (L0-L2) * Q2[2] + + (Q3[2] * Q0[1]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][2][1] = (Q1[2] * Q0[1]) / (L0-L1) * Q1[3] + + (Q2[2] * Q0[1]) / (L0-L2) * Q2[3] + + (Q3[2] * Q0[1]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][2][2] = (Q1[2] * Q0[2]) / (L0-L1) * Q1[0] + + (Q2[2] * Q0[2]) / (L0-L2) * Q2[0] + + (Q3[2] * Q0[2]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][2][2] = (Q1[2] * Q0[2]) / (L0-L1) * Q1[1] + + (Q2[2] * Q0[2]) / (L0-L2) * Q2[1] + + (Q3[2] * Q0[2]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][2][2] = (Q1[2] * Q0[2]) / (L0-L1) * Q1[2] + + (Q2[2] * Q0[2]) / (L0-L2) * Q2[2] + + (Q3[2] * Q0[2]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][2][2] = (Q1[2] * Q0[2]) / (L0-L1) * Q1[3] + + (Q2[2] * Q0[2]) / (L0-L2) * Q2[3] + + (Q3[2] * Q0[2]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][2][3] = (Q1[2] * Q0[3]) / (L0-L1) * Q1[0] + + (Q2[2] * Q0[3]) / (L0-L2) * Q2[0] + + (Q3[2] * Q0[3]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][2][3] = (Q1[2] * Q0[3]) / (L0-L1) * Q1[1] + + (Q2[2] * Q0[3]) / (L0-L2) * Q2[1] + + (Q3[2] * Q0[3]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][2][3] = (Q1[2] * Q0[3]) / (L0-L1) * Q1[2] + + (Q2[2] * Q0[3]) / (L0-L2) * Q2[2] + + (Q3[2] * Q0[3]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][2][3] = (Q1[2] * Q0[3]) / (L0-L1) * Q1[3] + + (Q2[2] * Q0[3]) / (L0-L2) * Q2[3] + + (Q3[2] * Q0[3]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][3][0] = (Q1[3] * Q0[0]) / (L0-L1) * Q1[0] + + (Q2[3] * Q0[0]) / (L0-L2) * Q2[0] + + (Q3[3] * Q0[0]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][3][0] = (Q1[3] * Q0[0]) / (L0-L1) * Q1[1] + + (Q2[3] * Q0[0]) / (L0-L2) * Q2[1] + + (Q3[3] * Q0[0]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][3][0] = (Q1[3] * Q0[0]) / (L0-L1) * Q1[2] + + (Q2[3] * Q0[0]) / (L0-L2) * Q2[2] + + (Q3[3] * Q0[0]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][3][0] = (Q1[3] * Q0[0]) / (L0-L1) * Q1[3] + + (Q2[3] * Q0[0]) / (L0-L2) * Q2[3] + + (Q3[3] * Q0[0]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][3][1] = (Q1[3] * Q0[1]) / (L0-L1) * Q1[0] + + (Q2[3] * Q0[1]) / (L0-L2) * Q2[0] + + (Q3[3] * Q0[1]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][3][1] = (Q1[3] * Q0[1]) / (L0-L1) * Q1[1] + + (Q2[3] * Q0[1]) / (L0-L2) * Q2[1] + + (Q3[3] * Q0[1]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][3][1] = (Q1[3] * Q0[1]) / (L0-L1) * Q1[2] + + (Q2[3] * Q0[1]) / (L0-L2) * Q2[2] + + (Q3[3] * Q0[1]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][3][1] = (Q1[3] * Q0[1]) / (L0-L1) * Q1[3] + + (Q2[3] * Q0[1]) / (L0-L2) * Q2[3] + + (Q3[3] * Q0[1]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][3][2] = (Q1[3] * Q0[2]) / (L0-L1) * Q1[0] + + (Q2[3] * Q0[2]) / (L0-L2) * Q2[0] + + (Q3[3] * Q0[2]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][3][2] = (Q1[3] * Q0[2]) / (L0-L1) * Q1[1] + + (Q2[3] * Q0[2]) / (L0-L2) * Q2[1] + + (Q3[3] * Q0[2]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][3][2] = (Q1[3] * Q0[2]) / (L0-L1) * Q1[2] + + (Q2[3] * Q0[2]) / (L0-L2) * Q2[2] + + (Q3[3] * Q0[2]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][3][2] = (Q1[3] * Q0[2]) / (L0-L1) * Q1[3] + + (Q2[3] * Q0[2]) / (L0-L2) * Q2[3] + + (Q3[3] * Q0[2]) / (L0-L3) * Q3[3]; + + tmp_Q0Q0_L[0][3][3] = (Q1[3] * Q0[3]) / (L0-L1) * Q1[0] + + (Q2[3] * Q0[3]) / (L0-L2) * Q2[0] + + (Q3[3] * Q0[3]) / (L0-L3) * Q3[0]; + tmp_Q0Q0_L[1][3][3] = (Q1[3] * Q0[3]) / (L0-L1) * Q1[1] + + (Q2[3] * Q0[3]) / (L0-L2) * Q2[1] + + (Q3[3] * Q0[3]) / (L0-L3) * Q3[1]; + tmp_Q0Q0_L[2][3][3] = (Q1[3] * Q0[3]) / (L0-L1) * Q1[2] + + (Q2[3] * Q0[3]) / (L0-L2) * Q2[2] + + (Q3[3] * Q0[3]) / (L0-L3) * Q3[2]; + tmp_Q0Q0_L[3][3][3] = (Q1[3] * Q0[3]) / (L0-L1) * Q1[3] + + (Q2[3] * Q0[3]) / (L0-L2) * Q2[3] + + (Q3[3] * Q0[3]) / (L0-L3) * Q3[3]; + } + } + /*! @brief Actual implementation of the derivative calculation + * @param[in] ds The derivative of matrix S with respect to an atom of + * either group 1 or group 2 + * @param[out] dl0_out The output of derivative of L + * @param[out] dq0_out The output of derivative of Q + * @param[out] ds_out The output of derivative of overlap matrix S + */ + void calc_derivative_impl( + const cvm::rvector (&ds)[4][4], + cvm::rvector* const dl0_out, + cvm::vector1d* const dq0_out, + cvm::matrix2d* const ds_out) const { + if (ds_out != nullptr) { + // this code path is for debug_gradients, so not necessary to unroll the loop + *ds_out = cvm::matrix2d(4, 4); + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < 4; ++j) { + (*ds_out)[i][j] = ds[i][j]; + } + } + } + if (dl0_out != nullptr) { + /* manually loop unrolling of the following loop: + dl0_1.reset(); + for (size_t i = 0; i < 4; i++) { + for (size_t j = 0; j < 4; j++) { + dl0_1 += Q0[i] * ds_1[i][j] * Q0[j]; + } + } + */ + *dl0_out = tmp_Q0Q0[0][0] * ds[0][0] + + tmp_Q0Q0[0][1] * ds[0][1] + + tmp_Q0Q0[0][2] * ds[0][2] + + tmp_Q0Q0[0][3] * ds[0][3] + + tmp_Q0Q0[1][0] * ds[1][0] + + tmp_Q0Q0[1][1] * ds[1][1] + + tmp_Q0Q0[1][2] * ds[1][2] + + tmp_Q0Q0[1][3] * ds[1][3] + + tmp_Q0Q0[2][0] * ds[2][0] + + tmp_Q0Q0[2][1] * ds[2][1] + + tmp_Q0Q0[2][2] * ds[2][2] + + tmp_Q0Q0[2][3] * ds[2][3] + + tmp_Q0Q0[3][0] * ds[3][0] + + tmp_Q0Q0[3][1] * ds[3][1] + + tmp_Q0Q0[3][2] * ds[3][2] + + tmp_Q0Q0[3][3] * ds[3][3]; + } + if (dq0_out != nullptr) { + // we can skip this check if a fixed-size array is used + if (dq0_out->size() != 4) dq0_out->resize(4); + /* manually loop unrolling of the following loop: + dq0_1.reset(); + for (size_t p = 0; p < 4; p++) { + for (size_t i = 0; i < 4; i++) { + for (size_t j = 0; j < 4; j++) { + dq0_1[p] += + (Q1[i] * ds_1[i][j] * Q0[j]) / (L0-L1) * Q1[p] + + (Q2[i] * ds_1[i][j] * Q0[j]) / (L0-L2) * Q2[p] + + (Q3[i] * ds_1[i][j] * Q0[j]) / (L0-L3) * Q3[p]; + } + } + } + */ + (*dq0_out)[0] = tmp_Q0Q0_L[0][0][0] * ds[0][0] + + tmp_Q0Q0_L[0][0][1] * ds[0][1] + + tmp_Q0Q0_L[0][0][2] * ds[0][2] + + tmp_Q0Q0_L[0][0][3] * ds[0][3] + + tmp_Q0Q0_L[0][1][0] * ds[1][0] + + tmp_Q0Q0_L[0][1][1] * ds[1][1] + + tmp_Q0Q0_L[0][1][2] * ds[1][2] + + tmp_Q0Q0_L[0][1][3] * ds[1][3] + + tmp_Q0Q0_L[0][2][0] * ds[2][0] + + tmp_Q0Q0_L[0][2][1] * ds[2][1] + + tmp_Q0Q0_L[0][2][2] * ds[2][2] + + tmp_Q0Q0_L[0][2][3] * ds[2][3] + + tmp_Q0Q0_L[0][3][0] * ds[3][0] + + tmp_Q0Q0_L[0][3][1] * ds[3][1] + + tmp_Q0Q0_L[0][3][2] * ds[3][2] + + tmp_Q0Q0_L[0][3][3] * ds[3][3]; + + (*dq0_out)[1] = tmp_Q0Q0_L[1][0][0] * ds[0][0] + + tmp_Q0Q0_L[1][0][1] * ds[0][1] + + tmp_Q0Q0_L[1][0][2] * ds[0][2] + + tmp_Q0Q0_L[1][0][3] * ds[0][3] + + tmp_Q0Q0_L[1][1][0] * ds[1][0] + + tmp_Q0Q0_L[1][1][1] * ds[1][1] + + tmp_Q0Q0_L[1][1][2] * ds[1][2] + + tmp_Q0Q0_L[1][1][3] * ds[1][3] + + tmp_Q0Q0_L[1][2][0] * ds[2][0] + + tmp_Q0Q0_L[1][2][1] * ds[2][1] + + tmp_Q0Q0_L[1][2][2] * ds[2][2] + + tmp_Q0Q0_L[1][2][3] * ds[2][3] + + tmp_Q0Q0_L[1][3][0] * ds[3][0] + + tmp_Q0Q0_L[1][3][1] * ds[3][1] + + tmp_Q0Q0_L[1][3][2] * ds[3][2] + + tmp_Q0Q0_L[1][3][3] * ds[3][3]; + + (*dq0_out)[2] = tmp_Q0Q0_L[2][0][0] * ds[0][0] + + tmp_Q0Q0_L[2][0][1] * ds[0][1] + + tmp_Q0Q0_L[2][0][2] * ds[0][2] + + tmp_Q0Q0_L[2][0][3] * ds[0][3] + + tmp_Q0Q0_L[2][1][0] * ds[1][0] + + tmp_Q0Q0_L[2][1][1] * ds[1][1] + + tmp_Q0Q0_L[2][1][2] * ds[1][2] + + tmp_Q0Q0_L[2][1][3] * ds[1][3] + + tmp_Q0Q0_L[2][2][0] * ds[2][0] + + tmp_Q0Q0_L[2][2][1] * ds[2][1] + + tmp_Q0Q0_L[2][2][2] * ds[2][2] + + tmp_Q0Q0_L[2][2][3] * ds[2][3] + + tmp_Q0Q0_L[2][3][0] * ds[3][0] + + tmp_Q0Q0_L[2][3][1] * ds[3][1] + + tmp_Q0Q0_L[2][3][2] * ds[3][2] + + tmp_Q0Q0_L[2][3][3] * ds[3][3]; + + (*dq0_out)[3] = tmp_Q0Q0_L[3][0][0] * ds[0][0] + + tmp_Q0Q0_L[3][0][1] * ds[0][1] + + tmp_Q0Q0_L[3][0][2] * ds[0][2] + + tmp_Q0Q0_L[3][0][3] * ds[0][3] + + tmp_Q0Q0_L[3][1][0] * ds[1][0] + + tmp_Q0Q0_L[3][1][1] * ds[1][1] + + tmp_Q0Q0_L[3][1][2] * ds[1][2] + + tmp_Q0Q0_L[3][1][3] * ds[1][3] + + tmp_Q0Q0_L[3][2][0] * ds[2][0] + + tmp_Q0Q0_L[3][2][1] * ds[2][1] + + tmp_Q0Q0_L[3][2][2] * ds[2][2] + + tmp_Q0Q0_L[3][2][3] * ds[2][3] + + tmp_Q0Q0_L[3][3][0] * ds[3][0] + + tmp_Q0Q0_L[3][3][1] * ds[3][1] + + tmp_Q0Q0_L[3][3][2] * ds[3][2] + + tmp_Q0Q0_L[3][3][3] * ds[3][3]; + } + } + /*! @brief Calculate the derivatives of S, the leading eigenvalue L and + * the leading eigenvector Q with respect to `m_pos1` + * @param[in] ia The index the of atom + * @param[out] dl0_1_out The output of derivative of L with respect to + * ia-th atom of group 1 + * @param[out] dq0_1_out The output of derivative of Q with respect to + * ia-th atom of group 1 + * @param[out] ds_1_out The output of derivative of overlap matrix S with + * respect to ia-th atom of group 1 + */ + void calc_derivative_wrt_group1( + size_t ia, cvm::rvector* const dl0_1_out = nullptr, + cvm::vector1d* const dq0_1_out = nullptr, + cvm::matrix2d* const ds_1_out = nullptr) const { + if (dl0_1_out == nullptr && dq0_1_out == nullptr) return; + cvm::real a2x, a2y, a2z; + // we can get rid of the helper function read_atom_coord if C++17 (constexpr) is available + read_atom_coord(ia, m_pos2, &a2x, &a2y, &a2z); + cvm::rvector ds_1[4][4]; + ds_1[0][0].set( a2x, a2y, a2z); + ds_1[1][0].set( 0.0, a2z, -a2y); + ds_1[0][1] = ds_1[1][0]; + ds_1[2][0].set(-a2z, 0.0, a2x); + ds_1[0][2] = ds_1[2][0]; + ds_1[3][0].set( a2y, -a2x, 0.0); + ds_1[0][3] = ds_1[3][0]; + ds_1[1][1].set( a2x, -a2y, -a2z); + ds_1[2][1].set( a2y, a2x, 0.0); + ds_1[1][2] = ds_1[2][1]; + ds_1[3][1].set( a2z, 0.0, a2x); + ds_1[1][3] = ds_1[3][1]; + ds_1[2][2].set(-a2x, a2y, -a2z); + ds_1[3][2].set( 0.0, a2z, a2y); + ds_1[2][3] = ds_1[3][2]; + ds_1[3][3].set(-a2x, -a2y, a2z); + calc_derivative_impl(ds_1, dl0_1_out, dq0_1_out, ds_1_out); + } + /*! @brief Calculate the derivatives of S, the leading eigenvalue L and + * the leading eigenvector Q with respect to `m_pos2` + * @param[in] ia The index the of atom + * @param[out] dl0_2_out The output of derivative of L with respect to + * ia-th atom of group 2 + * @param[out] dq0_2_out The output of derivative of Q with respect to + * ia-th atom of group 2 + * @param[out] ds_2_out The output of derivative of overlap matrix S with + * respect to ia-th atom of group 2 + */ + void calc_derivative_wrt_group2( + size_t ia, cvm::rvector* const dl0_2_out = nullptr, + cvm::vector1d* const dq0_2_out = nullptr, + cvm::matrix2d* const ds_2_out = nullptr) const { + if (dl0_2_out == nullptr && dq0_2_out == nullptr) return; + cvm::real a1x, a1y, a1z; + // we can get rid of the helper function read_atom_coord if C++17 (constexpr) is available + read_atom_coord(ia, m_pos1, &a1x, &a1y, &a1z); + cvm::rvector ds_2[4][4]; + ds_2[0][0].set( a1x, a1y, a1z); + ds_2[1][0].set( 0.0, -a1z, a1y); + ds_2[0][1] = ds_2[1][0]; + ds_2[2][0].set( a1z, 0.0, -a1x); + ds_2[0][2] = ds_2[2][0]; + ds_2[3][0].set(-a1y, a1x, 0.0); + ds_2[0][3] = ds_2[3][0]; + ds_2[1][1].set( a1x, -a1y, -a1z); + ds_2[2][1].set( a1y, a1x, 0.0); + ds_2[1][2] = ds_2[2][1]; + ds_2[3][1].set( a1z, 0.0, a1x); + ds_2[1][3] = ds_2[3][1]; + ds_2[2][2].set(-a1x, a1y, -a1z); + ds_2[3][2].set( 0.0, a1z, a1y); + ds_2[2][3] = ds_2[3][2]; + ds_2[3][3].set(-a1x, -a1y, a1z); + calc_derivative_impl(ds_2, dl0_2_out, dq0_2_out, ds_2_out); + } +}; + +/*! @brief Function for debugging gradients (allow using either + * std::vector or std::vector for + * pos1 and pos2) + * @param[in] pos1 Atom positions of group 1 + * @param[in] pos2 Atom positions of group 2 + */ +template +void debug_gradients( + cvm::rotation &rot, + const std::vector &pos1, + const std::vector &pos2) { + static_assert(std::is_same::value || std::is_same::value, ""); + static_assert(std::is_same::value || std::is_same::value, ""); + // eigenvalues and eigenvectors + cvm::real const L0 = rot.S_eigval[0]; + cvm::real const L1 = rot.S_eigval[1]; + cvm::real const L2 = rot.S_eigval[2]; + cvm::real const L3 = rot.S_eigval[3]; + cvm::quaternion const Q0(rot.S_eigvec[0]); + cvm::quaternion const Q1(rot.S_eigvec[1]); + cvm::quaternion const Q2(rot.S_eigvec[2]); + cvm::quaternion const Q3(rot.S_eigvec[3]); + + cvm::log("L0 = "+cvm::to_str(L0, cvm::cv_width, cvm::cv_prec)+ + ", Q0 = "+cvm::to_str(Q0, cvm::cv_width, cvm::cv_prec)+ + ", Q0*Q0 = "+cvm::to_str(Q0.inner(Q0), cvm::cv_width, cvm::cv_prec)+ + "\n"); + cvm::log("L1 = "+cvm::to_str(L1, cvm::cv_width, cvm::cv_prec)+ + ", Q1 = "+cvm::to_str(Q1, cvm::cv_width, cvm::cv_prec)+ + ", Q0*Q1 = "+cvm::to_str(Q0.inner(Q1), cvm::cv_width, cvm::cv_prec)+ + "\n"); + cvm::log("L2 = "+cvm::to_str(L2, cvm::cv_width, cvm::cv_prec)+ + ", Q2 = "+cvm::to_str(Q2, cvm::cv_width, cvm::cv_prec)+ + ", Q0*Q2 = "+cvm::to_str(Q0.inner(Q2), cvm::cv_width, cvm::cv_prec)+ + "\n"); + cvm::log("L3 = "+cvm::to_str(L3, cvm::cv_width, cvm::cv_prec)+ + ", Q3 = "+cvm::to_str(Q3, cvm::cv_width, cvm::cv_prec)+ + ", Q0*Q3 = "+cvm::to_str(Q0.inner(Q3), cvm::cv_width, cvm::cv_prec)+ + "\n"); + + rotation_derivative deriv(rot, pos1, pos2); + cvm::rvector dl0_2; + cvm::vector1d dq0_2(4); + cvm::matrix2d ds_2; +#ifdef COLVARS_LAMMPS + MathEigen::Jacobi *ecalc = + reinterpret_cast *>(rot.jacobi); +#endif + deriv.prepare_derivative(rotation_derivative_dldq::use_dl | rotation_derivative_dldq::use_dq); + cvm::real S_new[4][4]; + cvm::real S_new_eigval[4]; + cvm::real S_new_eigvec[4][4]; + for (size_t ia = 0; ia < pos2.size(); ++ia) { + // cvm::real const &a1x = pos1[ia].x; + // cvm::real const &a1y = pos1[ia].y; + // cvm::real const &a1z = pos1[ia].z; + deriv.calc_derivative_wrt_group2(ia, &dl0_2, &dq0_2, &ds_2); + // make an infitesimal move along each cartesian coordinate of + // this atom, and solve again the eigenvector problem + for (size_t comp = 0; comp < 3; comp++) { + std::memcpy(S_new, rot.S_backup, sizeof(cvm::real) * 4 * 4); + std::memset(S_new_eigval, 0, sizeof(cvm::real) * 4); + std::memset(S_new_eigvec, 0, sizeof(cvm::real) * 4 * 4); + for (size_t i = 0; i < 4; i++) { + for (size_t j = 0; j < 4; j++) { + S_new[i][j] += + colvarmodule::debug_gradients_step_size * ds_2[i][j][comp]; + } + } +#ifdef COLVARS_LAMMPS + ecalc->Diagonalize(S_new, S_new_eigval, S_new_eigvec); +#else + NR::diagonalize_matrix(S_new, S_new_eigval, S_new_eigvec); +#endif + cvm::real const &L0_new = S_new_eigval[0]; + cvm::quaternion const Q0_new(S_new_eigvec[0]); + + cvm::real const DL0 = (dl0_2[comp]) * colvarmodule::debug_gradients_step_size; + cvm::quaternion const DQ0(dq0_2[0][comp] * colvarmodule::debug_gradients_step_size, + dq0_2[1][comp] * colvarmodule::debug_gradients_step_size, + dq0_2[2][comp] * colvarmodule::debug_gradients_step_size, + dq0_2[3][comp] * colvarmodule::debug_gradients_step_size); + + cvm::log( "|(l_0+dl_0) - l_0^new|/l_0 = "+ + cvm::to_str(cvm::fabs(L0+DL0 - L0_new)/L0, cvm::cv_width, cvm::cv_prec)+ + ", |(q_0+dq_0) - q_0^new| = "+ + cvm::to_str((Q0+DQ0 - Q0_new).norm(), cvm::cv_width, cvm::cv_prec)+ + "\n"); + } + } +} + +#endif // COLVAR_ROTATION_DERIVATIVE diff --git a/lib/colvars/colvaratoms.cpp b/lib/colvars/colvaratoms.cpp index e31041ea6b..e15b9301a1 100644 --- a/lib/colvars/colvaratoms.cpp +++ b/lib/colvars/colvaratoms.cpp @@ -13,10 +13,12 @@ #include #include +#include "colvardeps.h" #include "colvarmodule.h" #include "colvarproxy.h" #include "colvarparse.h" #include "colvaratoms.h" +#include "colvar_rotation_derivative.h" cvm::atom::atom() @@ -118,6 +120,11 @@ cvm::atom_group::~atom_group() fitting_group = NULL; } + if (rot_deriv != nullptr) { + delete rot_deriv; + rot_deriv = nullptr; + } + cvm::main()->unregister_named_atom_group(this); } @@ -226,6 +233,7 @@ int cvm::atom_group::init() b_dummy = false; b_user_defined_fit = false; fitting_group = NULL; + rot_deriv = nullptr; noforce = false; @@ -278,7 +286,7 @@ int cvm::atom_group::init_dependencies() { // Initialize feature_states for each instance // default as unavailable, not enabled feature_states.reserve(f_ag_ntot); - for (i = 0; i < colvardeps::f_ag_ntot; i++) { + for (i = feature_states.size(); i < colvardeps::f_ag_ntot; i++) { feature_states.push_back(feature_state(false, false)); } @@ -317,6 +325,13 @@ int cvm::atom_group::setup() return COLVARS_OK; } +void cvm::atom_group::setup_rotation_derivative() { + if (rot_deriv != nullptr) delete rot_deriv; + rot_deriv = new rotation_derivative( + rot, fitting_group ? fitting_group->atoms : this->atoms, ref_pos + ); +} + void cvm::atom_group::update_total_mass() { @@ -383,7 +398,7 @@ int cvm::atom_group::parse(std::string const &group_conf) // } // colvarparse::Parse_Mode mode = parse_normal; - int parse_error = COLVARS_OK; + int error_code = COLVARS_OK; // Optional group name will let other groups reuse atom definition if (get_keyval(group_conf, "name", name)) { @@ -433,7 +448,7 @@ int cvm::atom_group::parse(std::string const &group_conf) cvm::error("Error: cannot find atom group with name " + atoms_of + ".\n"); return COLVARS_ERROR; } - parse_error |= add_atoms_of_group(ag); + error_code |= add_atoms_of_group(ag); } } @@ -447,7 +462,7 @@ int cvm::atom_group::parse(std::string const &group_conf) std::string numbers_conf = ""; size_t pos = 0; while (key_lookup(group_conf, "atomNumbers", &numbers_conf, &pos)) { - parse_error |= add_atom_numbers(numbers_conf); + error_code |= add_atom_numbers(numbers_conf); numbers_conf = ""; } } @@ -456,7 +471,7 @@ int cvm::atom_group::parse(std::string const &group_conf) std::string index_group_name; if (get_keyval(group_conf, "indexGroup", index_group_name)) { // use an index group from the index file read globally - parse_error |= add_index_group(index_group_name); + error_code |= add_index_group(index_group_name); } } @@ -465,7 +480,7 @@ int cvm::atom_group::parse(std::string const &group_conf) size_t pos = 0; while (key_lookup(group_conf, "atomNumbersRange", &range_conf, &pos)) { - parse_error |= add_atom_numbers_range(range_conf); + error_code |= add_atom_numbers_range(range_conf); range_conf = ""; } } @@ -492,7 +507,7 @@ int cvm::atom_group::parse(std::string const &group_conf) cvm::error("Error: more instances of \"atomNameResidueRange\" than " "values of \"psfSegID\".\n", COLVARS_INPUT_ERROR); } else { - parse_error |= add_atom_name_residue_range(psf_segids.size() ? + error_code |= add_atom_name_residue_range(psf_segids.size() ? *psii : std::string(""), range_conf); if (psf_segids.size()) psii++; } @@ -517,26 +532,26 @@ int cvm::atom_group::parse(std::string const &group_conf) cvm::error("Error: atomsColValue, if provided, must be non-zero.\n", COLVARS_INPUT_ERROR); } - // NOTE: calls to add_atom() and/or add_atom_id() are in the proxy-implemented function - parse_error |= cvm::load_atoms(atoms_file_name.c_str(), *this, atoms_col, atoms_col_value); + error_code |= cvm::main()->proxy->load_atoms_pdb(atoms_file_name.c_str(), *this, atoms_col, + atoms_col_value); } } // Catch any errors from all the initialization steps above - if (parse_error || cvm::get_error()) return (parse_error || cvm::get_error()); + if (error_code || cvm::get_error()) return (error_code || cvm::get_error()); // checks of doubly-counted atoms have been handled by add_atom() already if (get_keyval(group_conf, "dummyAtom", dummy_atom_pos, cvm::atom_pos())) { - parse_error |= set_dummy(); - parse_error |= set_dummy_pos(dummy_atom_pos); + error_code |= set_dummy(); + error_code |= set_dummy_pos(dummy_atom_pos); } else { if (!(atoms_ids.size())) { - parse_error |= cvm::error("Error: no atoms defined for atom group \""+ - key+"\".\n", COLVARS_INPUT_ERROR); + error_code |= cvm::error("Error: no atoms defined for atom group \"" + key + "\".\n", + COLVARS_INPUT_ERROR); } // whether these atoms will ever receive forces or not @@ -546,7 +561,7 @@ int cvm::atom_group::parse(std::string const &group_conf) } // Now that atoms are defined we can parse the detailed fitting options - parse_error |= parse_fitting_options(group_conf); + error_code |= parse_fitting_options(group_conf); if (is_enabled(f_ag_scalable) && !b_dummy) { cvm::log("Enabling scalable calculation for group \""+this->key+"\".\n"); @@ -583,7 +598,9 @@ int cvm::atom_group::parse(std::string const &group_conf) cvm::log(print_atom_ids()); } - return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); + if (is_enabled(f_ag_rotate)) setup_rotation_derivative(); + + return error_code; } @@ -883,8 +900,6 @@ int cvm::atom_group::parse_fitting_options(std::string const &group_conf) "to its radius of gyration), the optimal rotation and its gradients may become discontinuous. " "If that happens, use fittingGroup (or a different definition for it if already defined) " "to align the coordinates.\n"); - // initialize rot member data - rot.request_group1_gradients(group_for_fit->size()); } } @@ -912,7 +927,6 @@ void cvm::atom_group::do_feature_side_effects(int id) if (is_enabled(f_ag_center) || is_enabled(f_ag_rotate)) { atom_group *group_for_fit = fitting_group ? fitting_group : this; group_for_fit->fit_gradients.assign(group_for_fit->size(), cvm::atom_pos(0.0, 0.0, 0.0)); - rot.request_group1_gradients(group_for_fit->size()); } break; } @@ -1045,17 +1059,18 @@ void cvm::atom_group::calc_apply_roto_translation() // rotate the group (around the center of geometry if f_ag_center is // enabled, around the origin otherwise) rot.calc_optimal_rotation(fitting_group ? - fitting_group->positions() : - this->positions(), + fitting_group->atoms: + this->atoms, ref_pos); + const auto rot_mat = rot.matrix(); cvm::atom_iter ai; for (ai = this->begin(); ai != this->end(); ai++) { - ai->pos = rot.rotate(ai->pos); + ai->pos = rot_mat * ai->pos; } if (fitting_group) { for (ai = fitting_group->begin(); ai != fitting_group->end(); ai++) { - ai->pos = rot.rotate(ai->pos); + ai->pos = rot_mat * ai->pos; } } } @@ -1095,9 +1110,10 @@ void cvm::atom_group::read_velocities() if (is_enabled(f_ag_rotate)) { + const auto rot_mat = rot.matrix(); for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { ai->read_velocity(); - ai->vel = rot.rotate(ai->vel); + ai->vel = rot_mat * ai->vel; } } else { @@ -1116,9 +1132,10 @@ void cvm::atom_group::read_total_forces() if (is_enabled(f_ag_rotate)) { + const auto rot_mat = rot.matrix(); for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { ai->read_total_force(); - ai->total_force = rot.rotate(ai->total_force); + ai->total_force = rot_mat * ai->total_force; } } else { @@ -1200,52 +1217,71 @@ void cvm::atom_group::calc_fit_gradients() if (cvm::debug()) cvm::log("Calculating fit gradients.\n"); - cvm::atom_group *group_for_fit = fitting_group ? fitting_group : this; - - if (is_enabled(f_ag_center)) { - // add the center of geometry contribution to the gradients - cvm::rvector atom_grad; - - for (size_t i = 0; i < this->size(); i++) { - atom_grad += atoms[i].grad; - } - if (is_enabled(f_ag_rotate)) atom_grad = (rot.inverse()).rotate(atom_grad); - atom_grad *= (-1.0)/(cvm::real(group_for_fit->size())); - - for (size_t j = 0; j < group_for_fit->size(); j++) { - group_for_fit->fit_gradients[j] = atom_grad; - } - } - - if (is_enabled(f_ag_rotate)) { - - // add the rotation matrix contribution to the gradients - cvm::rotation const rot_inv = rot.inverse(); - - for (size_t i = 0; i < this->size(); i++) { - - // compute centered, unrotated position - cvm::atom_pos const pos_orig = - rot_inv.rotate((is_enabled(f_ag_center) ? (atoms[i].pos - ref_pos_cog) : (atoms[i].pos))); - - // calculate \partial(R(q) \vec{x}_i)/\partial q) \cdot \partial\xi/\partial\vec{x}_i - cvm::quaternion const dxdq = - rot.q.position_derivative_inner(pos_orig, atoms[i].grad); - - for (size_t j = 0; j < group_for_fit->size(); j++) { - // multiply by {\partial q}/\partial\vec{x}_j and add it to the fit gradients - for (size_t iq = 0; iq < 4; iq++) { - group_for_fit->fit_gradients[j] += dxdq[iq] * rot.dQ0_1[j][iq]; - } - } - } - } + if (is_enabled(f_ag_center) && is_enabled(f_ag_rotate)) + calc_fit_gradients_impl(); + if (is_enabled(f_ag_center) && !is_enabled(f_ag_rotate)) + calc_fit_gradients_impl(); + if (!is_enabled(f_ag_center) && is_enabled(f_ag_rotate)) + calc_fit_gradients_impl(); + if (!is_enabled(f_ag_center) && !is_enabled(f_ag_rotate)) + calc_fit_gradients_impl(); if (cvm::debug()) cvm::log("Done calculating fit gradients.\n"); } +template +void cvm::atom_group::calc_fit_gradients_impl() { + cvm::atom_group *group_for_fit = fitting_group ? fitting_group : this; + // the center of geometry contribution to the gradients + cvm::rvector atom_grad; + // the rotation matrix contribution to the gradients + const auto rot_inv = rot.inverse().matrix(); + // temporary variables for computing and summing derivatives + cvm::real sum_dxdq[4] = {0, 0, 0, 0}; + cvm::vector1d dq0_1(4); + // loop 1: iterate over the current atom group + for (size_t i = 0; i < size(); i++) { + cvm::atom_pos pos_orig; + if (B_ag_center) { + atom_grad += atoms[i].grad; + if (B_ag_rotate) pos_orig = rot_inv * (atoms[i].pos - ref_pos_cog); + } else { + if (B_ag_rotate) pos_orig = atoms[i].pos; + } + if (B_ag_rotate) { + // calculate \partial(R(q) \vec{x}_i)/\partial q) \cdot \partial\xi/\partial\vec{x}_i + cvm::quaternion const dxdq = + rot.q.position_derivative_inner(pos_orig, atoms[i].grad); + sum_dxdq[0] += dxdq[0]; + sum_dxdq[1] += dxdq[1]; + sum_dxdq[2] += dxdq[2]; + sum_dxdq[3] += dxdq[3]; + } + } + if (B_ag_center) { + if (B_ag_rotate) atom_grad = rot.inverse().matrix() * atom_grad; + atom_grad *= (-1.0)/(cvm::real(group_for_fit->size())); + } + // loop 2: iterate over the fitting group + if (B_ag_rotate) rot_deriv->prepare_derivative(rotation_derivative_dldq::use_dq); + for (size_t j = 0; j < group_for_fit->size(); j++) { + if (B_ag_center) { + group_for_fit->fit_gradients[j] = atom_grad; + } + if (B_ag_rotate) { + rot_deriv->calc_derivative_wrt_group1(j, nullptr, &dq0_1); + // multiply by {\partial q}/\partial\vec{x}_j and add it to the fit gradients + group_for_fit->fit_gradients[j] += sum_dxdq[0] * dq0_1[0] + + sum_dxdq[1] * dq0_1[1] + + sum_dxdq[2] * dq0_1[2] + + sum_dxdq[3] * dq0_1[3]; + } + } +} + + std::vector cvm::atom_group::positions() const { if (b_dummy) { @@ -1373,9 +1409,9 @@ void cvm::atom_group::apply_colvar_force(cvm::real const &force) if (is_enabled(f_ag_rotate)) { // rotate forces back to the original frame - cvm::rotation const rot_inv = rot.inverse(); + const auto rot_inv = rot.inverse().matrix(); for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { - ai->apply_force(rot_inv.rotate(force * ai->grad)); + ai->apply_force(rot_inv * (force * ai->grad)); } } else { @@ -1418,9 +1454,9 @@ void cvm::atom_group::apply_force(cvm::rvector const &force) if (is_enabled(f_ag_rotate)) { - cvm::rotation const rot_inv = rot.inverse(); + const auto rot_inv = rot.inverse().matrix(); for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { - ai->apply_force(rot_inv.rotate((ai->mass/total_mass) * force)); + ai->apply_force(rot_inv * ((ai->mass/total_mass) * force)); } } else { diff --git a/lib/colvars/colvaratoms.h b/lib/colvars/colvaratoms.h index 84c5ee137e..d16ca7bd56 100644 --- a/lib/colvars/colvaratoms.h +++ b/lib/colvars/colvaratoms.h @@ -15,6 +15,9 @@ #include "colvarparse.h" #include "colvardeps.h" +template +struct rotation_derivative; + /// \brief Stores numeric id, mass and all mutable data for an atom, /// mostly used by a \link colvar::cvc \endlink @@ -167,7 +170,7 @@ public: atom_group(std::vector const &atoms_in); /// \brief Destructor - ~atom_group(); + ~atom_group() override; /// \brief Optional name to reuse properties of this in other groups std::string name; @@ -180,7 +183,7 @@ public: int init(); /// \brief Initialize dependency tree - virtual int init_dependencies(); + int init_dependencies() override; /// \brief Update data required to calculate cvc's int setup(); @@ -221,16 +224,13 @@ public: static std::vector ag_features; /// \brief Implementation of the feature list accessor for atom group - virtual const std::vector &features() const + const std::vector &features() const override { return ag_features; } + + std::vector &modify_features() override { return ag_features; } + + static void delete_features() { - return ag_features; - } - virtual std::vector &modify_features() - { - return ag_features; - } - static void delete_features() { - for (size_t i=0; i < ag_features.size(); i++) { + for (size_t i = 0; i < ag_features.size(); i++) { delete ag_features[i]; } ag_features.clear(); @@ -330,6 +330,9 @@ public: /// The rotation calculated automatically if f_ag_rotate is defined cvm::rotation rot; + /// Rotation derivative; + rotation_derivative* rot_deriv; + /// \brief Indicates that the user has explicitly set centerToReference or /// rotateReference, and the corresponding reference: /// cvc's (eg rmsd, eigenvector) will not override the user's choice @@ -369,6 +372,8 @@ public: /// \brief (Re)calculate the optimal roto-translation void calc_apply_roto_translation(); + void setup_rotation_derivative(); + /// \brief Save aside the center of geometry of the reference positions, /// then subtract it from them /// @@ -492,6 +497,16 @@ public: /// \brief Calculate the derivatives of the fitting transformation void calc_fit_gradients(); +/*! @brief Actual implementation of `calc_fit_gradients`. The template is + * used to avoid branching inside the loops in case that the CPU + * branch prediction is broken (or further migration to GPU code). + * @tparam B_ag_center Centered the reference to origin? This should follow + * the value of `is_enabled(f_ag_center)`. + * @tparam B_ag_rotate Calculate the optimal rotation? This should follow + * the value of `is_enabled(f_ag_rotate)`. + */ + template void calc_fit_gradients_impl(); + /// \brief Derivatives of the fitting transformation std::vector fit_gradients; @@ -525,7 +540,7 @@ public: /// Implements possible actions to be carried out /// when a given feature is enabled /// This overloads the base function in colvardeps - void do_feature_side_effects(int id); + void do_feature_side_effects(int id) override; }; diff --git a/lib/colvars/colvarbias.cpp b/lib/colvars/colvarbias.cpp index 18969fc531..fdffdc1794 100644 --- a/lib/colvars/colvarbias.cpp +++ b/lib/colvars/colvarbias.cpp @@ -15,6 +15,7 @@ #include "colvarvalue.h" #include "colvarbias.h" #include "colvargrid.h" +#include "colvars_memstream.h" colvarbias::colvarbias(char const *key) @@ -166,6 +167,10 @@ int colvarbias::init_dependencies() { init_feature(f_cvb_get_total_force, "obtain_total_force", f_type_dynamic); require_feature_children(f_cvb_get_total_force, f_cv_total_force); + // Depending on back-end, we may not obtain total force at step 0 + if (!cvm::main()->proxy->total_forces_same_step()) { + exclude_feature_self(f_cvb_get_total_force, f_cvb_step_zero_data); + } init_feature(f_cvb_output_acc_work, "output_accumulated_work", f_type_user); require_feature_self(f_cvb_output_acc_work, f_cvb_apply_force); @@ -192,6 +197,8 @@ int colvarbias::init_dependencies() { init_feature(f_cvb_scale_biasing_force, "scale_biasing_force", f_type_user); require_feature_children(f_cvb_scale_biasing_force, f_cv_grid); + init_feature(f_cvb_extended, "Bias on extended-Lagrangian variables", f_type_static); + // check that everything is initialized for (i = 0; i < colvardeps::f_cvb_ntot; i++) { if (is_not_set(i)) { @@ -202,7 +209,7 @@ int colvarbias::init_dependencies() { // Initialize feature_states for each instance feature_states.reserve(f_cvb_ntot); - for (i = 0; i < f_cvb_ntot; i++) { + for (i = feature_states.size(); i < f_cvb_ntot; i++) { feature_states.push_back(feature_state(true, false)); // Most features are available, so we set them so // and list exceptions below @@ -436,43 +443,55 @@ int colvarbias::bin_num() cvm::error("Error: bin_num() not implemented.\n"); return COLVARS_NOT_IMPLEMENTED; } + int colvarbias::current_bin() { cvm::error("Error: current_bin() not implemented.\n"); return COLVARS_NOT_IMPLEMENTED; } + int colvarbias::bin_count(int /* bin_index */) { cvm::error("Error: bin_count() not implemented.\n"); return COLVARS_NOT_IMPLEMENTED; } + +int colvarbias::local_sample_count(int /* radius */) +{ + cvm::error("Error: local_sample_count() not implemented.\n"); + return COLVARS_NOT_IMPLEMENTED; +} + int colvarbias::replica_share() { cvm::error("Error: replica_share() not implemented.\n"); return COLVARS_NOT_IMPLEMENTED; } +size_t colvarbias::replica_share_freq() const +{ + return 0; +} + std::string const colvarbias::get_state_params() const { std::ostringstream os; - os << "step " << cvm::step_absolute() << "\n" - << "name " << this->name << "\n"; + os << " step " << cvm::step_absolute() << "\n" + << " name " << this->name << "\n"; return os.str(); } -int colvarbias::set_state_params(std::string const &conf) +int colvarbias::check_matching_state(std::string const &conf) { - matching_state = false; - std::string check_name = ""; colvarparse::get_keyval(conf, "name", check_name, std::string(""), colvarparse::parse_silent); if (check_name.size() == 0) { - cvm::error("Error: \""+bias_type+"\" block within the restart file " - "has no identifiers.\n", COLVARS_INPUT_ERROR); + return cvm::error("Error: \""+bias_type+"\" block within the state file " + "has no identifiers.\n", COLVARS_INPUT_ERROR); } if (check_name != this->name) { @@ -480,11 +499,17 @@ int colvarbias::set_state_params(std::string const &conf) cvm::log("Ignoring state of bias \""+check_name+ "\": this bias is named \""+name+"\".\n"); } - return COLVARS_OK; + matching_state = false; + } else { + matching_state = true; } - matching_state = true; + return COLVARS_OK; +} + +int colvarbias::set_state_params(std::string const &conf) +{ colvarparse::get_keyval(conf, "step", state_file_step, cvm::step_absolute(), colvarparse::parse_silent); @@ -495,76 +520,119 @@ int colvarbias::set_state_params(std::string const &conf) std::ostream & colvarbias::write_state(std::ostream &os) { if (cvm::debug()) { - cvm::log("Writing state file for bias \""+name+"\"\n"); + cvm::log("Writing formatted state for bias \""+name+"\"\n"); } os.setf(std::ios::scientific, std::ios::floatfield); os.precision(cvm::cv_prec); os << state_keyword << " {\n" - << " configuration {\n"; - std::istringstream is(get_state_params()); - std::string line; - while (std::getline(is, line)) { - os << " " << line << "\n"; - } - os << " }\n"; + << " configuration {\n" + << get_state_params() + << " }\n"; write_state_data(os); os << "}\n\n"; return os; } -std::istream & colvarbias::read_state(std::istream &is) +cvm::memory_stream & colvarbias::write_state(cvm::memory_stream &os) { - std::streampos const start_pos = is.tellg(); + if (cvm::debug()) { + cvm::log("Writing unformatted state for bias \""+name+"\"\n"); + } + os << state_keyword << std::string("configuration") << get_state_params(); + write_state_data(os); + return os; +} + + +template +void raise_error_rewind(IST &is, SPT start_pos, std::string const &bias_type, + std::string const &bias_name, std::string const added_msg = "") +{ + auto state = is.rdstate(); + is.clear(); + is.seekg(start_pos); + is.setstate(state | std::ios::failbit); + cvm::error("Error: in reading state for \"" + bias_type + "\" bias \"" + bias_name + + "\" at position " + cvm::to_str(static_cast(is.tellg())) + " in stream." + + added_msg + "\n", + COLVARS_INPUT_ERROR); +} + + +template IST & colvarbias::read_state_template_(IST &is) +{ + auto const start_pos = is.tellg(); std::string key, brace, conf; - if ( !(is >> key) || !(key == state_keyword || key == bias_type) || - !(is >> brace) || !(brace == "{") || - !(is >> colvarparse::read_block("configuration", &conf)) || - (set_state_params(conf) != COLVARS_OK) ) { - cvm::error("Error: in reading state configuration for \""+bias_type+ - "\" bias \""+ - this->name+"\" at position "+ - cvm::to_str(static_cast(is.tellg()))+ - " in stream.\n", COLVARS_INPUT_ERROR); - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); + if (is >> key) { + if (key == state_keyword || key == bias_type) { + + if (! std::is_same::value) { + // Formatted input only + if (!(is >> brace) || !(brace == "{") ) { + raise_error_rewind(is, start_pos, bias_type, name); + return is; + } + } + + if (!(is >> colvarparse::read_block("configuration", &conf)) || + (check_matching_state(conf) != COLVARS_OK)) { + raise_error_rewind(is, start_pos, bias_type, name); + return is; + } + + } else { + // Not a match for this bias type, rewind without error + is.seekg(start_pos); + return is; + } + + } else { + raise_error_rewind(is, start_pos, bias_type, name); return is; } - if (matching_state == false) { - // This state is not for this bias - is.seekg(start_pos, std::ios::beg); + if (!matching_state) { + // No errors, but not a match for this bias instance; rewind + is.seekg(start_pos); return is; } - cvm::log("Restarting "+bias_type+" bias \""+name+"\" from step number "+ - cvm::to_str(state_file_step)+".\n"); - - if (!read_state_data(is)) { - cvm::error("Error: in reading state data for \""+bias_type+"\" bias \""+ - this->name+"\" at position "+ - cvm::to_str(static_cast(is.tellg()))+ - " in stream.\n", COLVARS_INPUT_ERROR); - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); + if ((set_state_params(conf) != COLVARS_OK) || !read_state_data(is)) { + raise_error_rewind(is, start_pos, bias_type, name); } - is >> brace; - if (brace != "}") { - cvm::error("Error: corrupt restart information for \""+bias_type+"\" bias \""+ - this->name+"\": no matching brace at position "+ - cvm::to_str(static_cast(is.tellg()))+ - " in stream.\n"); - is.setstate(std::ios::failbit); + if (! std::is_same::value) { + is >> brace; + if (brace != "}") { + cvm::error("Error: corrupt restart information for \""+bias_type+"\" bias \""+ + this->name+"\": no matching brace at position "+ + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n"); + raise_error_rewind(is, start_pos, bias_type, name); + } } + cvm::log("Restarted " + bias_type + " bias \"" + name + "\" with step number " + + cvm::to_str(state_file_step) + ".\n"); + return is; } +std::istream &colvarbias::read_state(std::istream &is) +{ + return read_state_template_(is); +} + + +cvm::memory_stream &colvarbias::read_state(cvm::memory_stream &is) +{ + return read_state_template_(is); +} + + int colvarbias::write_state_prefix(std::string const &prefix) { std::string const filename = @@ -635,25 +703,51 @@ int colvarbias::read_state_string(char const *buffer) } -std::istream & colvarbias::read_state_data_key(std::istream &is, char const *key) +std::ostream &colvarbias::write_state_data_key(std::ostream &os, std::string const &key, + bool header) { - std::streampos const start_pos = is.tellg(); + os << (header ? "\n" : "") << key << (header ? "\n" : " "); + return os; +} + + +cvm::memory_stream &colvarbias::write_state_data_key(cvm::memory_stream &os, std::string const &key, + bool /* header */) +{ + os << std::string(key); + return os; +} + + +template +IST &colvarbias::read_state_data_key_template_(IST &is, std::string const &key) +{ + auto const start_pos = is.tellg(); std::string key_in; - if ( !(is >> key_in) || - !(to_lower_cppstr(key_in) == to_lower_cppstr(std::string(key))) ) { - cvm::error("Error: in reading restart configuration for "+ - bias_type+" bias \""+this->name+"\" at position "+ - cvm::to_str(static_cast(is.tellg()))+ - " in stream.\n", COLVARS_INPUT_ERROR); - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); - return is; + if (is >> key_in) { + if (key_in != key) { + raise_error_rewind(is, start_pos, bias_type, name, + " Expected keyword \"" + std::string(key) + "\", found \"" + key_in + + "\"."); + } + } else { + raise_error_rewind(is, start_pos, bias_type, name); } return is; } +std::istream & colvarbias::read_state_data_key(std::istream &is, std::string const &key) +{ + return read_state_data_key_template_(is, key); +} + + +cvm::memory_stream & colvarbias::read_state_data_key(cvm::memory_stream &is, std::string const &key) +{ + return read_state_data_key_template_(is, key); +} + std::ostream & colvarbias::write_traj_label(std::ostream &os) { @@ -686,28 +780,11 @@ colvarbias_ti::colvarbias_ti(char const *key) // Samples at step zero can not be collected feature_states[f_cvb_step_zero_data].available = false; } - ti_avg_forces = NULL; - ti_count = NULL; } colvarbias_ti::~colvarbias_ti() { - colvarbias_ti::clear_state_data(); -} - - -int colvarbias_ti::clear_state_data() -{ - if (ti_avg_forces != NULL) { - delete ti_avg_forces; - ti_avg_forces = NULL; - } - if (ti_count != NULL) { - delete ti_count; - ti_count = NULL; - } - return COLVARS_OK; } @@ -765,7 +842,7 @@ int colvarbias_ti::init(std::string const &conf) int colvarbias_ti::init_grids() { if (is_enabled(f_cvb_calc_ti_samples)) { - if (ti_avg_forces == NULL) { + if (!ti_avg_forces) { ti_bin.resize(num_variables()); ti_system_forces.resize(num_variables()); for (size_t icv = 0; icv < num_variables(); icv++) { @@ -773,8 +850,8 @@ int colvarbias_ti::init_grids() ti_system_forces[icv].is_derivative(); ti_system_forces[icv].reset(); } - ti_avg_forces = new colvar_grid_gradient(colvars); - ti_count = new colvar_grid_count(colvars); + ti_avg_forces.reset(new colvar_grid_gradient(colvars)); + ti_count.reset(new colvar_grid_count(colvars)); ti_avg_forces->samples = ti_count; ti_count->has_parent_data = true; } @@ -860,9 +937,22 @@ std::ostream & colvarbias_ti::write_state_data(std::ostream &os) if (! is_enabled(f_cvb_calc_ti_samples)) { return os; } - os << "\nhistogram\n"; + write_state_data_key(os, "histogram"); ti_count->write_raw(os); - os << "\nsystem_forces\n"; + write_state_data_key(os, "system_forces"); + ti_avg_forces->write_raw(os); + return os; +} + + +cvm::memory_stream & colvarbias_ti::write_state_data(cvm::memory_stream &os) +{ + if (! is_enabled(f_cvb_calc_ti_samples)) { + return os; + } + write_state_data_key(os, "histogram"); + ti_count->write_raw(os); + write_state_data_key(os, "system_forces"); ti_avg_forces->write_raw(os); return os; } @@ -895,6 +985,33 @@ std::istream & colvarbias_ti::read_state_data(std::istream &is) } +cvm::memory_stream & colvarbias_ti::read_state_data(cvm::memory_stream &is) +{ + if (! is_enabled(f_cvb_calc_ti_samples)) { + return is; + } + if (cvm::debug()) { + cvm::log("Reading state data for the TI estimator.\n"); + } + if (! read_state_data_key(is, "histogram")) { + return is; + } + if (! ti_count->read_raw(is)) { + return is; + } + if (! read_state_data_key(is, "system_forces")) { + return is; + } + if (! ti_avg_forces->read_raw(is)) { + return is; + } + if (cvm::debug()) { + cvm::log("Done reading state data for the TI estimator.\n"); + } + return is; +} + + int colvarbias_ti::write_output_files() { int error_code = COLVARS_OK; diff --git a/lib/colvars/colvarbias.h b/lib/colvars/colvarbias.h index e865902be6..03f93f4315 100644 --- a/lib/colvars/colvarbias.h +++ b/lib/colvars/colvarbias.h @@ -10,6 +10,8 @@ #ifndef COLVARBIAS_H #define COLVARBIAS_H +#include + #include "colvar.h" #include "colvarparse.h" #include "colvardeps.h" @@ -91,11 +93,16 @@ public: // FIXME this is currently 1D only virtual int current_bin(); //// Give the count at a given bin index. - // FIXME this is currently 1D only virtual int bin_count(int bin_index); + /// Return the average number of samples in a given "radius" around current bin + virtual int local_sample_count(int radius); + //// Share information between replicas, whatever it may be. virtual int replica_share(); + /// Report the frequency at which this bias needs to communicate with replicas + virtual size_t replica_share_freq() const; + /// Perform analysis tasks virtual void analyze() {} @@ -133,32 +140,87 @@ public: /// Write the values of specific mutable properties to a string virtual std::string const get_state_params() const; + /// Check the name of the bias vs. the given string, set the matching_state flag accordingly + int check_matching_state(std::string const &conf); + /// Read the values of specific mutable properties from a string virtual int set_state_params(std::string const &state_conf); - /// Write all mutable data not already written by get_state_params() + /// Write all mutable data not already written by get_state_params() to a formatted stream virtual std::ostream & write_state_data(std::ostream &os) { return os; } - /// Read all mutable data not already set by set_state_params() + /// Write all mutable data not already written by get_state_params() to an unformatted stream + virtual cvm::memory_stream & write_state_data(cvm::memory_stream &os) + { + return os; + } + + /// Read all mutable data not already set by set_state_params() from a formatted stream virtual std::istream & read_state_data(std::istream &is) { return is; } - /// Read a keyword from the state data (typically a header) - /// \param Input stream - /// \param Keyword labeling the header block - std::istream & read_state_data_key(std::istream &is, char const *key); + /// Read all mutable data not already set by set_state_params() from an unformatted stream + virtual cvm::memory_stream & read_state_data(cvm::memory_stream &is) + { + return is; + } - /// Write the bias configuration to a state file or other stream - std::ostream & write_state(std::ostream &os); + /// Write a keyword header for a data sequence to a formatted stream + /// \param[in,out] os Output stream + /// \param[in] key Keyword labeling the header block + /// \param[in] header Whether this is the header of a multi-line segment vs a single line + std::ostream &write_state_data_key(std::ostream &os, std::string const &key, bool header = true); - /// Read the bias configuration from a restart file or other stream + /// Write a keyword header for a data sequence to an unformatted stream + /// \param[in,out] os Output stream + /// \param[in] key Keyword labeling the header block + /// \param[in] header Ignored + cvm::memory_stream &write_state_data_key(cvm::memory_stream &os, std::string const &key, + bool header = true); + +private: + + /// Read a keyword header for a data sequence from a stream + /// \param[in,out] Input stream + /// \param[in] Keyword labeling the header block; an error will be raised if not matching + template IST &read_state_data_key_template_(IST &is, std::string const &key); + +public: + + /// Read a keyword header for a data sequence from a formatted stream + /// \param[in,out] Input stream + /// \param[in] Keyword labeling the header block; an error will be raised if not matching + std::istream & read_state_data_key(std::istream &is, std::string const &key); + + /// Read a keyword header for a data sequence from an unformatted stream + /// \param[in,out] Input stream + /// \param[in] Keyword labeling the header block; an error will be raised if not matching + cvm::memory_stream & read_state_data_key(cvm::memory_stream &is, std::string const &key); + +private: + + /// Generic stream reading function (formatted and not) + template IST & read_state_template_(IST &is); + +public: + + /// Write the bias configuration to a formatted stream + std::ostream &write_state(std::ostream &os); + + /// Write the bias configuration to an unformatted stream + cvm::memory_stream & write_state(cvm::memory_stream &os); + + /// Read the bias configuration from a formatted stream std::istream & read_state(std::istream &is); + /// Read the bias configuration from an unformatted stream + cvm::memory_stream & read_state(cvm::memory_stream &is); + /// Write the bias state to a file with the given prefix int write_state_prefix(std::string const &prefix); @@ -274,8 +336,6 @@ public: colvarbias_ti(char const *key); virtual ~colvarbias_ti(); - virtual int clear_state_data(); - virtual int init(std::string const &conf); virtual int init_grids(); virtual int update(); @@ -288,7 +348,9 @@ public: virtual std::string const get_state_params() const; virtual int set_state_params(std::string const &state_conf); virtual std::ostream & write_state_data(std::ostream &os); + virtual cvm::memory_stream & write_state_data(cvm::memory_stream &os); virtual std::istream & read_state_data(std::istream &is); + virtual cvm::memory_stream & read_state_data(cvm::memory_stream &is); virtual int write_output_files(); protected: @@ -297,10 +359,10 @@ protected: std::vector ti_system_forces; /// Averaged system forces - colvar_grid_gradient *ti_avg_forces; + std::shared_ptr ti_avg_forces; /// Histogram of sampled data - colvar_grid_count *ti_count; + std::shared_ptr ti_count; /// Because total forces may be from the last simulation step, /// store the index of the variables then diff --git a/lib/colvars/colvarbias_abf.cpp b/lib/colvars/colvarbias_abf.cpp index 7d6b7b7fef..6327650863 100644 --- a/lib/colvars/colvarbias_abf.cpp +++ b/lib/colvars/colvarbias_abf.cpp @@ -12,29 +12,15 @@ #include "colvarmodule.h" #include "colvar.h" #include "colvarbias_abf.h" - +#include "colvars_memstream.h" colvarbias_abf::colvarbias_abf(char const *key) : colvarbias(key), b_UI_estimator(false), b_CZAR_estimator(false), pabf_freq(0), - system_force(NULL), - gradients(NULL), - samples(NULL), - pmf(NULL), - z_gradients(NULL), - z_samples(NULL), - czar_gradients(NULL), - czar_pmf(NULL), - last_gradients(NULL), - last_samples(NULL) + system_force(NULL) { - colvarproxy *proxy = cvm::main()->proxy; - if (!proxy->total_forces_same_step()) { - // Samples at step zero can not be collected - feature_states[f_cvb_step_zero_data].available = false; - } } @@ -42,7 +28,10 @@ int colvarbias_abf::init(std::string const &conf) { colvarproxy *proxy = cvm::main()->proxy; - colvarbias::init(conf); + int err = colvarbias::init(conf); + if (err != COLVARS_OK) { + return err; + } cvm::main()->cite_feature("ABF colvar bias implementation"); enable(f_cvb_scalar_variables); @@ -54,18 +43,11 @@ int colvarbias_abf::init(std::string const &conf) // ************* parsing general ABF options *********************** - get_keyval_feature((colvarparse *)this, conf, "applyBias", f_cvb_apply_force, true); + get_keyval_feature(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"); } - get_keyval(conf, "updateBias", update_bias, true); - if (update_bias) { - enable(f_cvb_history_dependent); - } else { - cvm::log("WARNING: ABF biases will *not* be updated!\n"); - } - get_keyval(conf, "hideJacobian", hide_Jacobian, false); if (hide_Jacobian) { cvm::log("Jacobian (geometric) forces will be handled internally.\n"); @@ -73,13 +55,21 @@ int colvarbias_abf::init(std::string const &conf) cvm::log("Jacobian (geometric) forces will be included in reported free energy gradients.\n"); } - get_keyval(conf, "fullSamples", full_samples, 200); - if ( full_samples <= 1 ) full_samples = 1; - min_samples = full_samples / 2; - // full_samples - min_samples >= 1 is guaranteed + full_samples = 200; + get_keyval(conf, "fullSamples", full_samples, full_samples); + get_keyval(conf, "minSamples", min_samples, full_samples / 2); + + if (full_samples <= 1 ) { + full_samples = 1; + min_samples = 0; + } + if (min_samples >= full_samples) { + return cvm::error("Error: minSamples must be lower than fullSamples\n"); + } get_keyval(conf, "inputPrefix", input_prefix, std::vector()); + history_last_step = -1; get_keyval(conf, "historyFreq", history_freq, 0); if (history_freq != 0) { if (output_freq == 0) { @@ -92,7 +82,6 @@ int colvarbias_abf::init(std::string const &conf) } } } - b_history_files = (history_freq > 0); // shared ABF get_keyval(conf, "shared", shared_on, false); @@ -105,30 +94,25 @@ int colvarbias_abf::init(std::string const &conf) } cvm::log("shared ABF will be applied among "+ cvm::to_str(proxy->num_replicas()) + " replicas.\n"); - if (cvm::proxy->smp_enabled() == COLVARS_OK) { - cvm::error("Error: shared ABF is currently not available with SMP parallelism; " - "please set \"SMP off\" at the top of the Colvars configuration file.\n", - COLVARS_NOT_IMPLEMENTED); - return COLVARS_NOT_IMPLEMENTED; - } // If shared_freq is not set, we default to output_freq get_keyval(conf, "sharedFreq", shared_freq, output_freq); + if ( shared_freq && output_freq % shared_freq ) { + return cvm::error("Error: outputFreq must be a multiple of sharedFreq.\n"); + } + + // Allocate these at init time if possible + local_samples.reset(new colvar_grid_count(colvars)); + local_gradients.reset(new colvar_grid_gradient(colvars, local_samples)); + local_pmf.reset(new integrate_potential(colvars, local_gradients)); } // ************* checking the associated colvars ******************* if (num_variables() == 0) { - cvm::error("Error: no collective variables specified for the ABF bias.\n"); - return COLVARS_ERROR; + return cvm::error("Error: no collective variables specified for the ABF bias.\n"); } - if (update_bias) { - // Request calculation of total force - if(enable(f_cvb_get_total_force)) return cvm::get_error(); - } - - bool b_extended = false; size_t i; for (i = 0; i < num_variables(); i++) { @@ -140,11 +124,10 @@ int colvarbias_abf::init(std::string const &conf) colvars[i]->enable(f_cv_hide_Jacobian); } - // If any colvar is extended-system (restrained style, not external with constraint), we are running eABF - if (colvars[i]->is_enabled(f_cv_extended_Lagrangian) - && !colvars[i]->is_enabled(f_cv_external)) { - b_extended = true; - } + // If any colvar is extended-system, we need to collect the extended + // system gradient + if (colvars[i]->is_enabled(f_cv_extended_Lagrangian)) + enable(f_cvb_extended); // Cannot mix and match coarse time steps with ABF because it gives // wrong total force averages - total force needs to be averaged over @@ -160,7 +143,15 @@ int colvarbias_abf::init(std::string const &conf) // and make it just a warning if some parameter is set? } - if (b_extended) { + get_keyval(conf, "updateBias", update_bias, true); + if (update_bias) { + enable(f_cvb_history_dependent); + enable(f_cvb_get_total_force); + } else { + cvm::log("WARNING: ABF biases will *not* be updated!\n"); + } + + if (is_enabled(f_cvb_extended)) { cvm::main()->cite_feature("eABF implementation"); } else { cvm::main()->cite_feature("Internal-forces free energy estimator"); @@ -190,13 +181,14 @@ int colvarbias_abf::init(std::string const &conf) cvm::log("Allocating count and free energy gradient grids.\n"); } - samples = new colvar_grid_count(colvars); - gradients = new colvar_grid_gradient(colvars); - gradients->samples = samples; - samples->has_parent_data = true; + samples.reset(new colvar_grid_count(colvars)); + gradients.reset(new colvar_grid_gradient(colvars, samples)); - // Data for eAB F z-based estimator - if ( b_extended ) { + gradients->full_samples = full_samples; + gradients->min_samples = min_samples; + + // Data for eABF z-based estimator + if (is_enabled(f_cvb_extended)) { get_keyval(conf, "CZARestimator", b_CZAR_estimator, true); if ( b_CZAR_estimator ) { cvm::main()->cite_feature("CZAR eABF estimator"); @@ -206,13 +198,11 @@ int colvarbias_abf::init(std::string const &conf) colvarparse::parse_silent); z_bin.assign(num_variables(), 0); - z_samples = new colvar_grid_count(colvars); + z_samples.reset(new colvar_grid_count(colvars)); z_samples->request_actual_value(); - z_gradients = new colvar_grid_gradient(colvars); + z_gradients.reset(new colvar_grid_gradient(colvars, z_samples)); z_gradients->request_actual_value(); - z_gradients->samples = z_samples; - z_samples->has_parent_data = true; - czar_gradients = new colvar_grid_gradient(colvars); + czar_gradients.reset(new colvar_grid_gradient(colvars)); } get_keyval(conf, "integrate", b_integrate, num_variables() <= 3); // Integrate for output if d<=3 @@ -222,9 +212,9 @@ int colvarbias_abf::init(std::string const &conf) cvm::error("Error: cannot integrate free energy in dimension > 3.\n"); return COLVARS_ERROR; } - pmf = new integrate_potential(colvars, gradients); - if ( b_CZAR_estimator ) { - czar_pmf = new integrate_potential(colvars, czar_gradients); + pmf.reset(new integrate_potential(colvars, gradients)); + if (b_CZAR_estimator) { + czar_pmf.reset(new integrate_potential(colvars, czar_gradients)); } // Parameters for integrating initial (and final) gradient data get_keyval(conf, "integrateMaxIterations", integrate_iterations, 10000, colvarparse::parse_silent); @@ -235,16 +225,34 @@ int colvarbias_abf::init(std::string const &conf) get_keyval(conf, "pABFintegrateTol", pabf_integrate_tol, 1e-4, colvarparse::parse_silent); } + if (b_CZAR_estimator && shared_on && cvm::main()->proxy->replica_index() == 0) { + // The pointers below are used for outputting CZAR data + // Allocate grids for collected global data, on replica 0 only + global_z_samples.reset(new colvar_grid_count(colvars)); + global_z_gradients.reset(new colvar_grid_gradient(colvars, global_z_samples)); + global_czar_gradients.reset(new colvar_grid_gradient(colvars)); + global_czar_pmf.reset(new integrate_potential(colvars, global_czar_gradients)); + } else { + // otherwise they are just aliases for the local CZAR grids + global_z_samples = z_samples; + global_z_gradients = z_gradients; + global_czar_gradients = czar_gradients; + global_czar_pmf = czar_pmf; + } + // For shared ABF, we store a second set of grids. // This used to be only if "shared" was defined, // but now we allow calling share externally (e.g. from Tcl). - last_samples = new colvar_grid_count(colvars); - last_gradients = new colvar_grid_gradient(colvars); - last_gradients->samples = last_samples; - last_samples->has_parent_data = true; - shared_last_step = -1; + if (b_CZAR_estimator) { + z_samples_in.reset(new colvar_grid_count(colvars)); + z_gradients_in.reset(new colvar_grid_gradient(colvars, z_samples_in)); + } + last_samples.reset(new colvar_grid_count(colvars)); + last_gradients.reset(new colvar_grid_gradient(colvars, last_samples)); + // Any data collected after now is new for shared ABF purposes + shared_last_step = cvm::step_absolute(); - // If custom grids are provided, read them + // Read any custom input ABF data if ( input_prefix.size() > 0 ) { read_gradients_samples(); // Update divergence to account for input data @@ -252,11 +260,15 @@ int colvarbias_abf::init(std::string const &conf) } // if extendedLangrangian is on, then call UI estimator - if (b_extended) { + if (is_enabled(f_cvb_extended)) { get_keyval(conf, "UIestimator", b_UI_estimator, false); if (b_UI_estimator) { - + if (shared_on) { + cvm::error("Error: UI estimator is not available for multiple-walker (shared) ABF.\n"); + b_UI_estimator = false; + return COLVARS_ERROR; + } cvm::main()->cite_feature("Umbrella-integration eABF estimator"); std::vector UI_lowerboundary; std::vector UI_upperboundary; @@ -290,63 +302,11 @@ int colvarbias_abf::init(std::string const &conf) /// Destructor colvarbias_abf::~colvarbias_abf() { - if (samples) { - delete samples; - samples = NULL; - } - - if (gradients) { - delete gradients; - gradients = NULL; - } - - if (pmf) { - delete pmf; - pmf = NULL; - } - - if (z_samples) { - delete z_samples; - z_samples = NULL; - } - - if (z_gradients) { - delete z_gradients; - z_gradients = NULL; - } - - if (czar_gradients) { - delete czar_gradients; - czar_gradients = NULL; - } - - if (czar_pmf) { - delete czar_pmf; - czar_pmf = NULL; - } - - // shared ABF - // We used to only do this if "shared" was defined, - // but now we can call shared externally - if (last_samples) { - delete last_samples; - last_samples = NULL; - } - - if (last_gradients) { - delete last_gradients; - last_gradients = NULL; - } - - if (system_force) { - delete [] system_force; - system_force = NULL; - } + if (system_force) delete[] system_force; } /// Update the FE gradient, compute and apply biasing force -/// also output data to disk if needed int colvarbias_abf::update() { @@ -356,68 +316,79 @@ int colvarbias_abf::update() for (i = 0; i < num_variables(); i++) { bin[i] = samples->current_bin_scalar(i); } + + + // *********************************************************** + // ****** ABF Part I: update the FE gradient estimate ****** + // *********************************************************** + + if (cvm::proxy->total_forces_same_step()) { // e.g. in LAMMPS, total forces are current force_bin = bin; } - if (cvm::step_relative() > 0 || is_enabled(f_cvb_step_zero_data)) { + if (can_accumulate_data() && is_enabled(f_cvb_history_dependent)) { - if (update_bias) { -// if (b_adiabatic_reweighting) { -// // Update gradients non-locally based on conditional distribution of -// // fictitious variable TODO -// -// } else + if (cvm::step_relative() > 0 || cvm::proxy->total_forces_same_step()) { if (samples->index_ok(force_bin)) { // Only if requested and within bounds of the grid... - for (i = 0; i < num_variables(); i++) { - // get total forces (lagging by 1 timestep) from colvars - // and subtract previous ABF force if necessary - update_system_force(i); - } - gradients->acc_force(force_bin, system_force); - if ( b_integrate ) { - pmf->update_div_neighbors(force_bin); - } - } - } + // get total forces (lagging by 1 timestep) from colvars + // and subtract previous ABF force if necessary + update_system_force(); - if ( z_gradients && update_bias ) { - for (i = 0; i < num_variables(); i++) { - z_bin[i] = z_samples->current_bin_scalar(i); + gradients->acc_force(force_bin, system_force); + if ( b_integrate ) { + pmf->update_div_neighbors(force_bin); + } } - if ( z_samples->index_ok(z_bin) ) { + + if ( z_gradients ) { for (i = 0; i < num_variables(); i++) { - // If we are outside the range of xi, the force has not been obtained above + z_bin[i] = z_samples->current_bin_scalar(i); + } + if ( z_samples->index_ok(z_bin) ) { + // If we are outside the range of z, the force has not been obtained above // the function is just an accessor, so cheap to call again anyway - update_system_force(i); + update_system_force(); + z_gradients->acc_force(z_bin, system_force); } - z_gradients->acc_force(z_bin, system_force); } - } - if ( b_integrate ) { if ( pabf_freq && cvm::step_relative() % pabf_freq == 0 ) { cvm::real err; - int iter = pmf->integrate(pabf_integrate_iterations, pabf_integrate_tol, err); - if ( iter == pabf_integrate_iterations ) { - cvm::log("Warning: PMF integration did not converge to " + cvm::to_str(pabf_integrate_tol) - + " in " + cvm::to_str(pabf_integrate_iterations) + int iter = pmf->integrate(integrate_iterations, integrate_tol, err); + if ( iter == integrate_iterations ) { + cvm::log("Warning: PMF integration did not converge to " + cvm::to_str(integrate_tol) + + " in " + cvm::to_str(integrate_iterations) + " steps. Residual error: " + cvm::to_str(err)); } - pmf->set_zero_minimum(); // TODO: do this only when necessary } } } - if (!cvm::proxy->total_forces_same_step()) { + if (!(cvm::proxy->total_forces_same_step())) { // e.g. in NAMD, total forces will be available for next timestep // hence we store the current colvar bin force_bin = bin; } + // Share data after force sample is collected for this time step + // shared_on can be true with shared_freq 0 if we are sharing via script + if (shared_on && shared_freq && + cvm::step_absolute() > shared_last_step && // time has passed since the last sharing timestep + // (avoid re-sharing at last and first ts of successive run statements) + cvm::step_absolute() % shared_freq == 0) { + // Share gradients and samples for shared ABF. + replica_share(); + } + + // ****************************************************************** + // ****** ABF Part II: calculate and apply the biasing force ****** + // ****************************************************************** + + // Reset biasing forces from previous timestep for (i = 0; i < num_variables(); i++) { colvar_forces[i].reset(); @@ -426,51 +397,20 @@ int colvarbias_abf::update() // Compute and apply the new bias, if applicable if (is_enabled(f_cvb_apply_force) && samples->index_ok(bin)) { - cvm::real count = cvm::real(samples->value(bin)); - cvm::real fact = 1.0; + std::vector force(num_variables()); + calc_biasing_force(force); - // Factor that ensures smooth introduction of the force - if ( count < full_samples ) { - fact = (count < min_samples) ? 0.0 : - (cvm::real(count - min_samples)) / (cvm::real(full_samples - min_samples)); - } - - std::vector grad(num_variables()); - - if ( pabf_freq ) { - // In projected ABF, the force is the PMF gradient estimate - pmf->vector_gradient_finite_diff(bin, grad); - } else { - // Normal ABF - gradients->vector_value(bin, grad); - } - -// if ( b_adiabatic_reweighting) { -// // Average of force according to conditional distribution of fictitious variable -// // need freshly integrated PMF, gradient TODO -// } else - if ( fact != 0.0 ) { - if ( (num_variables() == 1) && colvars[0]->periodic_boundaries() ) { - // Enforce a zero-mean bias on periodic, 1D coordinates - // in other words: boundary condition is that the biasing potential is periodic - // This is enforced naturally if using integrated PMF - colvar_forces[0].real_value = fact * (grad[0] - gradients->average ()); - } else { - for (i = 0; i < num_variables(); i++) { - // subtracting the mean force (opposite of the FE gradient) means adding the gradient - colvar_forces[i].real_value = fact * grad[i]; - } - } - if (cap_force) { - for (i = 0; i < num_variables(); i++) { - if ( colvar_forces[i].real_value * colvar_forces[i].real_value > max_force[i] * max_force[i] ) { - colvar_forces[i].real_value = (colvar_forces[i].real_value > 0 ? max_force[i] : -1.0 * max_force[i]); - } - } - } + for (size_t i = 0; i < num_variables(); i++) { + colvar_forces[i].real_value = force[i]; } } + + // ********************************* + // ****** End of ABF proper ****** + // ********************************* + + // update the output prefix; TODO: move later to setup_output() function if (cvm::main()->num_biases_feature(colvardeps::f_cvb_calc_pmf) == 1) { // This is the only bias computing PMFs @@ -479,19 +419,6 @@ int colvarbias_abf::update() output_prefix = cvm::output_prefix() + "." + this->name; } - if (shared_on && shared_last_step >= 0 && cvm::step_absolute() % shared_freq == 0) { - // Share gradients and samples for shared ABF. - replica_share(); - } - - // Prepare for the first sharing. - if (shared_last_step < 0) { - // Copy the current gradient and count values into last. - last_gradients->copy_grid(*gradients); - last_samples->copy_grid(*samples); - shared_last_step = cvm::step_absolute(); - cvm::log("Prepared sample and gradient buffers at step "+cvm::to_str(cvm::step_absolute())+".\n"); - } // update UI estimator every step if (b_UI_estimator) @@ -514,6 +441,86 @@ int colvarbias_abf::update() } + // **************************************** + // ****** Helper functions for ABF ****** + // **************************************** + + +int colvarbias_abf::update_system_force() +{ + size_t i; + // System force from atomic forces (or extended Lagrangian if applicable) + + for (i = 0; i < num_variables(); i++) { + if (colvars[i]->is_enabled(f_cv_subtract_applied_force)) { + // this colvar is already subtracting the ABF force + system_force[i] = colvars[i]->total_force().real_value; + } else { + system_force[i] = colvars[i]->total_force().real_value + - colvar_forces[i].real_value; + } + } + return COLVARS_OK; +} + + +cvm::real colvarbias_abf::smoothing_factor(cvm::real weight) +{ + cvm::real fact = 1.0; + if ( weight < full_samples ) { + if ( weight < min_samples) { + fact = 0.0; + } else { + fact = (weight - min_samples) / cvm::real(full_samples - min_samples); + } + } + return fact; +} + + +int colvarbias_abf::calc_biasing_force(std::vector &force) +{ + size_t i; + + // Pick between different types of biasing force + if ( pabf_freq ) { + // In projected ABF, the force is the PMF gradient estimate + pmf->vector_gradient_finite_diff(bin, force); + // Calculate ramp factor that ensures smooth introduction of the force + const cvm::real count = samples->value(bin); + const cvm::real fact = smoothing_factor(count); + for (i = 0; i < num_variables(); i++) { + force[i] *= fact; + } + } else { + // Normal ABF or eABF: use accumulated gradient average + gradients->vector_value_smoothed(bin, &force[0], true); + if ( (num_variables() == 1) && gradients->periodic[0] ) { + // Enforce a zero-mean bias on periodic, 1D coordinates + // in other words: boundary condition is that the biasing potential is periodic + // Only plain ABF needs this + force[0] = force[0] - gradients->average(); + } + } + + if (cap_force) { + for (i = 0; i < num_variables(); i++) { + if ( force[i] * force[i] > max_force[i] * max_force[i] ) { + force[i] = (force[i] > 0 ? max_force[i] : -1.0 * max_force[i]); + } + } + } + + return COLVARS_OK; +} + + + // ************************************ + // ****** Shared ABF functions ****** + // ************************************ + + + int colvarbias_abf::replica_share() { colvarproxy *proxy = cvm::main()->proxy; @@ -527,53 +534,82 @@ int colvarbias_abf::replica_share() { cvm::error("Error: shared ABF: Tried to apply shared ABF before any sampling had occurred.\n"); return COLVARS_ERROR; } + shared_on = true; // If called by a script, inform the rest of the code that we're sharing, eg. CZAR // Share gradients for shared ABF. cvm::log("shared ABF: Sharing gradient and samples among replicas at step "+cvm::to_str(cvm::step_absolute()) ); + if (!local_samples) { + // We arrive here if sharing has just been enabled by a script + // in which case local arrays have not been initialized yet + local_samples.reset(new colvar_grid_count(colvars)); + local_gradients.reset(new colvar_grid_gradient(colvars, local_samples)); + local_pmf.reset(new integrate_potential(colvars, local_gradients)); + } + // Calculate the delta gradient and count for the local replica + last_gradients->delta_grid(*gradients); + // Add the delta gradient and count to the accumulated local data + local_gradients->add_grid(*last_gradients); + + last_samples->delta_grid(*samples); + local_samples->add_grid(*last_samples); + + // Count of data items. - size_t data_n = gradients->raw_data_num(); - size_t samp_start = data_n*sizeof(cvm::real); - size_t msg_total = data_n*sizeof(size_t) + samp_start; + size_t samples_n = samples->raw_data_num(); + size_t gradients_n = gradients->raw_data_num(); + + size_t samp_start = gradients_n * sizeof(cvm::real); + int msg_total = samples_n * sizeof(size_t) + samp_start; char* msg_data = new char[msg_total]; - if (proxy->replica_index() == 0) { + if (cvm::main()->proxy->replica_index() == 0) { int p; // Replica 0 collects the delta gradient and count from the others. for (p = 1; p < proxy->num_replicas(); p++) { // Receive the deltas. - proxy->replica_comm_recv(msg_data, msg_total, p); + if (proxy->replica_comm_recv(msg_data, msg_total, p) != msg_total) { + cvm::error("Error getting shared ABF data from replica."); + return COLVARS_ERROR; + } // Map the deltas from the others into the grids. + // Re-use last_gradients as temp array, erasing its contents each time last_gradients->raw_data_in((cvm::real*)(&msg_data[0])); - last_samples->raw_data_in((size_t*)(&msg_data[samp_start])); - // Combine the delta gradient and count of the other replicas // with Replica 0's current state (including its delta). - gradients->add_grid( *last_gradients ); - samples->add_grid( *last_samples ); + gradients->add_grid(*last_gradients); + + last_samples->raw_data_in((size_t*)(&msg_data[samp_start])); + samples->add_grid(*last_samples); } // Now we must send the combined gradient to the other replicas. gradients->raw_data_out((cvm::real*)(&msg_data[0])); samples->raw_data_out((size_t*)(&msg_data[samp_start])); + for (p = 1; p < proxy->num_replicas(); p++) { - proxy->replica_comm_send(msg_data, msg_total, p); + if (proxy->replica_comm_send(msg_data, msg_total, p) != msg_total) { + cvm::error("Error sending shared ABF data to replica."); + return COLVARS_ERROR; + } } } else { // All other replicas send their delta gradient and count. - // Calculate the delta gradient and count. - last_gradients->delta_grid(*gradients); - last_samples->delta_grid(*samples); - // Cast the raw char data to the gradient and samples. last_gradients->raw_data_out((cvm::real*)(&msg_data[0])); last_samples->raw_data_out((size_t*)(&msg_data[samp_start])); - proxy->replica_comm_send(msg_data, msg_total, 0); + if (proxy->replica_comm_send(msg_data, msg_total, 0) != msg_total) { + cvm::error("Error sending shared ABF data to replica."); + return COLVARS_ERROR; + } // We now receive the combined gradient from Replica 0. - proxy->replica_comm_recv(msg_data, msg_total, 0); + if (proxy->replica_comm_recv(msg_data, msg_total, 0) != msg_total) { + cvm::error("Error getting shared ABF data from replica 0."); + return COLVARS_ERROR; + } // We sync to the combined gradient computed by Replica 0. gradients->raw_data_in((cvm::real*)(&msg_data[0])); samples->raw_data_in((size_t*)(&msg_data[samp_start])); @@ -590,18 +626,105 @@ int colvarbias_abf::replica_share() { last_samples->copy_grid(*samples); shared_last_step = cvm::step_absolute(); + cvm::log("RMSD btw. local and global ABF gradients: " + cvm::to_str(gradients->grid_rmsd(*local_gradients))); + if (b_integrate) { - // Update divergence to account for newly shared gradients + cvm::real err; + + // Update whole divergence field to account for newly shared gradients pmf->set_div(); + pmf->integrate(integrate_iterations, integrate_tol, err); + pmf->set_zero_minimum(); + local_pmf->set_div(); + local_pmf->integrate(integrate_iterations, integrate_tol, err); + local_pmf->set_zero_minimum(); + cvm::log("RMSD btw. local and global ABF FES: " + cvm::to_str(pmf->grid_rmsd(*local_pmf))); } return COLVARS_OK; } +int colvarbias_abf::replica_share_CZAR() { + colvarproxy *proxy = cvm::main()->proxy; + + cvm::log("shared eABF: Gathering CZAR gradient and samples from replicas at step "+cvm::to_str(cvm::step_absolute()) ); + + // Count of data items. + size_t samples_n = z_samples->raw_data_num(); + size_t gradients_n = z_gradients->raw_data_num(); + + size_t samp_start = gradients_n*sizeof(cvm::real); + int msg_total = samples_n*sizeof(size_t) + samp_start; + char* msg_data = new char[msg_total]; + + if (cvm::main()->proxy->replica_index() == 0) { + if (!global_z_samples) { + // We arrive here if sharing has just been enabled by a script + // Allocate grids for collective data, on replica 0 only + // overriding CZAR grids that are equal to local ones by default + global_z_samples.reset(new colvar_grid_count(colvars)); + global_z_gradients.reset(new colvar_grid_gradient(colvars, global_z_samples)); + global_czar_gradients.reset(new colvar_grid_gradient(colvars)); + global_czar_pmf.reset(new integrate_potential(colvars, global_czar_gradients)); + } + + // Start with data from replica 0 + global_z_gradients->copy_grid(*z_gradients); + global_z_samples->copy_grid(*z_samples); + + int p; + // Replica 0 collects the gradient and count from the others. + for (p = 1; p < proxy->num_replicas(); p++) { + if (proxy->replica_comm_recv(msg_data, msg_total, p) != msg_total) { + cvm::error("Error getting shared ABF data from replica."); + return COLVARS_ERROR; + } + + // Map the deltas from the others into the grids. + // Re-use z_gradients_in, erasing its contents each time + z_gradients_in->raw_data_in((cvm::real*)(&msg_data[0])); + z_samples_in->raw_data_in((size_t*)(&msg_data[samp_start])); + + // Combine the new gradient and count of the other replicas + // with Replica 0's current state + global_z_gradients->add_grid(*z_gradients_in); + global_z_samples->add_grid(*z_samples_in); + } + } else { + // All other replicas send their current z gradient and z count. + z_gradients->raw_data_out((cvm::real*)(&msg_data[0])); + z_samples->raw_data_out((size_t*)(&msg_data[samp_start])); + if (proxy->replica_comm_send(msg_data, msg_total, 0) != msg_total) { + cvm::error("Error sending shared ABF data to replica."); + return COLVARS_ERROR; + } + } + + // Without a barrier it's possible that one replica starts + // share 2 when other replicas haven't finished share 1. + proxy->replica_comm_barrier(); + // Done syncing the replicas. + delete[] msg_data; + + return COLVARS_OK; +} + + + // ***************************** + // ****** I/O functions ****** + // ***************************** + + +size_t colvarbias_abf::replica_share_freq() const +{ + return shared_freq; +} + + template int colvarbias_abf::write_grid_to_file(T const *grid, std::string const &filename, bool close) { - std::ostream &os = cvm::proxy->output_stream(filename); + std::ostream &os = cvm::proxy->output_stream(filename, "multicolumn grid file"); if (!os) { return cvm::error("Error opening file " + filename + " for writing.\n", COLVARS_ERROR | COLVARS_FILE_ERROR); } @@ -619,7 +742,7 @@ template int colvarbias_abf::write_grid_to_file(T const *grid, // (could be implemented as multiple dx files) if (num_variables() > 2 && close) { std::string dx = filename + ".dx"; - std::ostream &dx_os = cvm::proxy->output_stream(dx); + std::ostream &dx_os = cvm::proxy->output_stream(dx, "OpenDX grid file"); if (!dx_os) { return cvm::error("Error opening file " + dx + " for writing.\n", COLVARS_ERROR | COLVARS_FILE_ERROR); } @@ -637,45 +760,77 @@ template int colvarbias_abf::write_grid_to_file(T const *grid, } -void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool close) +void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool close, bool local) { colvarproxy *proxy = cvm::main()->proxy; - write_grid_to_file(samples, prefix + ".count", close); - write_grid_to_file(gradients, prefix + ".grad", close); + // The following are local aliases for the class' unique pointers + colvar_grid_count *samples_out, *z_samples_out; + colvar_grid_gradient *gradients_out, *z_gradients_out, *czar_gradients_out; + integrate_potential *pmf_out, *czar_pmf_out; + + // In shared ABF, write grids containing local data only if requested + if (local) { + samples_out = local_samples.get(); + gradients_out = local_gradients.get(); + pmf_out = local_pmf.get(); + // Update the divergence before integrating the local PMF below + // only needs to happen here, just before output + local_pmf->set_div(); + z_samples_out = z_samples.get(); + z_gradients_out = z_gradients.get(); + czar_gradients_out = czar_gradients.get(); + czar_pmf_out = czar_pmf.get(); + } else { + samples_out = samples.get(); + gradients_out = gradients.get(); + pmf_out = pmf.get(); + // Note: outside of shared ABF, "global" CZAR grids are just the local ones + z_samples_out = global_z_samples.get(); + z_gradients_out = global_z_gradients.get(); + czar_gradients_out = global_czar_gradients.get(); + czar_pmf_out = global_czar_pmf.get(); + } + + write_grid_to_file(samples_out, prefix + ".count", close); + write_grid_to_file(gradients_out, prefix + ".grad", close); if (b_integrate) { // Do numerical integration (to high precision) and output a PMF cvm::real err; - pmf->integrate(integrate_iterations, integrate_tol, err); - pmf->set_zero_minimum(); - write_grid_to_file(pmf, prefix + ".pmf", close); + // Divergence has already been updated on the fly for the global PMF (member data 'pmf') + pmf_out->integrate(integrate_iterations, integrate_tol, err); + pmf_out->set_zero_minimum(); + write_grid_to_file(pmf_out, prefix + ".pmf", close); } if (b_CZAR_estimator) { // Write eABF CZAR-related quantities - write_grid_to_file(z_samples, prefix + ".zcount", close); + write_grid_to_file(z_samples_out, prefix + ".zcount", close); if (b_czar_window_file) { - write_grid_to_file(z_gradients, prefix + ".zgrad", close); + write_grid_to_file(z_gradients_out, prefix + ".zgrad", close); } - // Calculate CZAR estimator of gradients - for (std::vector ix = czar_gradients->new_index(); - czar_gradients->index_ok(ix); czar_gradients->incr(ix)) { - for (size_t n = 0; n < czar_gradients->multiplicity(); n++) { - czar_gradients->set_value(ix, z_gradients->value_output(ix, n) - - proxy->target_temperature() * proxy->boltzmann() * z_samples->log_gradient_finite_diff(ix, n), n); + // Update the CZAR estimator of gradients, except at step 0 + // in which case we preserve any existing data (e.g. read via inputPrefix, used to join strata in stratified eABF) + if (cvm::step_relative() > 0) { + for (std::vector iz_bin = czar_gradients_out->new_index(); + czar_gradients_out->index_ok(iz_bin); czar_gradients_out->incr(iz_bin)) { + for (size_t n = 0; n < czar_gradients_out->multiplicity(); n++) { + czar_gradients_out->set_value(iz_bin, z_gradients_out->value_output(iz_bin, n) + - proxy->target_temperature() * proxy->boltzmann() * z_samples_out->log_gradient_finite_diff(iz_bin, n), n); + } } } - write_grid_to_file(czar_gradients, prefix + ".czar.grad", close); + write_grid_to_file(czar_gradients_out, prefix + ".czar.grad", close); if (b_integrate) { // Do numerical integration (to high precision) and output a PMF cvm::real err; - czar_pmf->set_div(); - czar_pmf->integrate(integrate_iterations, integrate_tol, err); - czar_pmf->set_zero_minimum(); - write_grid_to_file(czar_pmf, prefix + ".czar.pmf", close); + czar_pmf_out->set_div(); + czar_pmf_out->integrate(integrate_iterations, integrate_tol, err); + czar_pmf_out->set_zero_minimum(); + write_grid_to_file(czar_pmf_out, prefix + ".czar.pmf", close); } } return; @@ -685,80 +840,98 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool clo // For Tcl implementation of selection rules. /// Give the total number of bins for a given bias. int colvarbias_abf::bin_num() { - return samples->number_of_points(0); + return samples->number_of_points(); } + /// Calculate the bin index for a given bias. int colvarbias_abf::current_bin() { - return samples->current_bin_scalar(0); + return samples->current_bin_flat_bound(); } + /// Give the count at a given bin index. int colvarbias_abf::bin_count(int bin_index) { if (bin_index < 0 || bin_index >= bin_num()) { cvm::error("Error: Tried to get bin count from invalid bin index "+cvm::to_str(bin_index)); return -1; } - std::vector ix(1,(int)bin_index); - return samples->value(ix); + return int(samples->get_value(bin_index)); } +// Return the average number of samples in a given "radius" around current bin +int colvarbias_abf::colvarbias_abf::local_sample_count(int radius) { + return samples->local_sample_count(radius); +} int colvarbias_abf::read_gradients_samples() { - int error_code = COLVARS_OK; + int err = COLVARS_OK; + // Reading the CZAR gradients is necessary for joining strata in stratified eABF + std::unique_ptr czar_gradients_in; - std::string samples_in_name, gradients_in_name, z_samples_in_name, z_gradients_in_name; + if (b_CZAR_estimator) { + // CZAR gradients are usually computed as needed from z-gradients and z_samples + // Therefore the czar_gradients grid is not linked to a sampling grid + // Here we define a temporary czar_gradients grid linked to z_samples, + // to correctly average input gradients if overlapping + czar_gradients_in.reset(new colvar_grid_gradient(colvars, z_samples)); + } for ( size_t i = 0; i < input_prefix.size(); i++ ) { - samples_in_name = input_prefix[i] + ".count"; - gradients_in_name = input_prefix[i] + ".grad"; - z_samples_in_name = input_prefix[i] + ".zcount"; - z_gradients_in_name = input_prefix[i] + ".zgrad"; + std::string prefix = input_prefix[i]; + // For user-provided files, the per-bias naming scheme may not apply - cvm::log("Reading sample count from " + samples_in_name + - " and gradient from " + gradients_in_name); - - error_code |= samples->read_multicol(samples_in_name, - "ABF samples file", - true); - - error_code |= gradients->read_multicol(gradients_in_name, - "ABF gradient file", - true); + err |= samples->read_multicol(prefix + ".count", "ABF samples file", true); + err |= gradients->read_multicol(prefix + ".grad", "ABF gradient file", true); + if (shared_on) { + last_gradients->copy_grid(*gradients); + last_samples->copy_grid(*samples); + } if (b_CZAR_estimator) { // Read eABF z-averaged data for CZAR - cvm::log("Reading z-histogram from " + z_samples_in_name + " and z-gradient from " + z_gradients_in_name); - error_code |= z_samples->read_multicol(z_samples_in_name, - "eABF z-histogram file", - true); - error_code |= z_gradients->read_multicol(z_gradients_in_name, - "eABF z-gradient file", - true); + err |= z_samples->read_multicol(prefix + ".zcount", "eABF z-histogram file", true); + err |= z_gradients->read_multicol(prefix + ".zgrad", "eABF z-gradient file", true); + err |= czar_gradients_in->read_multicol(prefix + ".czar.grad", "eABF CZAR gradient file", true); } } - return error_code; + if (b_CZAR_estimator) { + // Now copy real CZAR gradients (divided by total count) to the final grid + for (std::vector ix = czar_gradients->new_index(); + czar_gradients->index_ok(ix); czar_gradients->incr(ix)) { + for (size_t n = 0; n < czar_gradients->multiplicity(); n++) { + czar_gradients->set_value(ix, czar_gradients_in->value_output(ix, n), n); + } + } + } + return err; } -std::ostream & colvarbias_abf::write_state_data(std::ostream& os) +template OST & colvarbias_abf::write_state_data_template_(OST &os) { - std::ios::fmtflags flags(os.flags()); + auto flags = os.flags(); os.setf(std::ios::fmtflags(0), std::ios::floatfield); // default floating-point format - os << "\nsamples\n"; - samples->write_raw(os, 8); - os.flags(flags); - os << "\ngradient\n"; + write_state_data_key(os, "samples"); + samples->write_raw(os, 8); + + write_state_data_key(os, "gradient"); gradients->write_raw(os, 8); + if (shared_on) { + write_state_data_key(os, "local_samples"); + local_samples->write_raw(os, 8); + write_state_data_key(os, "local_gradient"); + local_gradients->write_raw(os, 8); + } + if (b_CZAR_estimator) { os.setf(std::ios::fmtflags(0), std::ios::floatfield); // default floating-point format - os << "\nz_samples\n"; + write_state_data_key(os, "z_samples"); z_samples->write_raw(os, 8); - os.flags(flags); - os << "\nz_gradient\n"; + write_state_data_key(os, "z_gradient"); z_gradients->write_raw(os, 8); } @@ -767,7 +940,19 @@ std::ostream & colvarbias_abf::write_state_data(std::ostream& os) } -std::istream & colvarbias_abf::read_state_data(std::istream& is) +std::ostream & colvarbias_abf::write_state_data(std::ostream& os) +{ + return write_state_data_template_(os); +} + + +cvm::memory_stream & colvarbias_abf::write_state_data(cvm::memory_stream& os) +{ + return write_state_data_template_(os); +} + + +template IST &colvarbias_abf::read_state_data_template_(IST &is) { if ( input_prefix.size() > 0 ) { cvm::error("ERROR: cannot provide both inputPrefix and a colvars state file.\n", COLVARS_INPUT_ERROR); @@ -791,6 +976,21 @@ std::istream & colvarbias_abf::read_state_data(std::istream& is) pmf->set_div(); } + if (shared_on) { + if (! read_state_data_key(is, "local_samples")) { + return is; + } + if (! local_samples->read_raw(is)) { + return is; + } + if (! read_state_data_key(is, "local_gradient")) { + return is; + } + if (! local_gradients->read_raw(is)) { + return is; + } + } + if (b_CZAR_estimator) { if (! read_state_data_key(is, "z_samples")) { @@ -808,29 +1008,64 @@ std::istream & colvarbias_abf::read_state_data(std::istream& is) } } + // Last samples / gradients must be updated after restart + // reproducing the state after the last sharing step of previous run + if (shared_on) { + last_gradients->copy_grid(*gradients); + last_samples->copy_grid(*samples); + shared_last_step = cvm::step_absolute(); + } + return is; } +std::istream & colvarbias_abf::read_state_data(std::istream& is) +{ + return read_state_data_template_(is); +} + + +cvm::memory_stream & colvarbias_abf::read_state_data(cvm::memory_stream& is) +{ + return read_state_data_template_(is); +} + + int colvarbias_abf::write_output_files() { if (cvm::debug()) { cvm::log("ABF bias trying to write gradients and samples to disk"); } - if (shared_on && cvm::main()->proxy->replica_index() > 0 - && ! (b_CZAR_estimator || b_UI_estimator) ) { - // No need to report the same data as replica 0, let it do the I/O job - // except if using an eABF FE estimator - return COLVARS_OK; + // In shared eABF/CZAR, the communication routine needs to run on all ranks + if (shared_on) { + if (b_CZAR_estimator) replica_share_CZAR(); } - write_gradients_samples(output_prefix); - if (b_history_files) { - if ((cvm::step_absolute() % history_freq) == 0) { - write_gradients_samples(output_prefix + ".hist", false); + // In shared setting, output local data for all replicas + if (shared_on) { + // Write local data on all replicas + write_gradients_samples(output_prefix, true, true); + + if (cvm::main()->proxy->replica_index() > 0) { + // No need to report the same data as replica 0, let it do the I/O job + return COLVARS_OK; } } + // In shared ABF, only replica 0 reaches this + // filename prefix for master replica + // used in mwABF to distinguish local from complete data + std::string master_prefix = (shared_on ? output_prefix + ".all" : output_prefix); + write_gradients_samples(master_prefix); + + if ((history_freq > 0) && + (!shared_on || cvm::main()->proxy->replica_index() == 0) && // if shared, only on replica 0 + (cvm::step_absolute() % history_freq == 0) && // at requested frequency + (cvm::step_absolute() != history_last_step)) { // not twice the same timestep + write_gradients_samples(master_prefix + ".hist", false); + history_last_step = cvm::step_absolute(); + } if (b_UI_estimator) { eabf_UI.calc_pmf(); @@ -848,14 +1083,13 @@ int colvarbias_abf::calc_energy(std::vector const *values) if (num_variables() > 1 || values != NULL) { // Use simple estimate: neglect effect of fullSamples, // return value at center of bin - if (pmf != NULL) { - std::vector const curr_bin = values ? + if (pmf) { + std::vector curr_bin = values ? pmf->get_colvars_index(*values) : pmf->get_colvars_index(); - - if (pmf->index_ok(curr_bin)) { - bias_energy = pmf->value(curr_bin); - } + pmf->set_zero_minimum(); + pmf->wrap_to_edge(curr_bin, curr_bin); // Closest edge if outside of grid + bias_energy = pmf->value(curr_bin); } return COLVARS_OK; } @@ -870,28 +1104,14 @@ int colvarbias_abf::calc_energy(std::vector const *values) cvm::real sum = 0.0; for (int i = 0; i < home; i++) { std::vector ix(1,i); - - // Include the full_samples factor if necessary. - unsigned int count = samples->value(ix); - cvm::real fact = 1.0; - if ( count < full_samples ) { - fact = (count < min_samples) ? 0.0 : - (cvm::real(count - min_samples)) / (cvm::real(full_samples - min_samples)); - } - if (count > 0) sum += fact*gradients->value(ix)/count*gradients->widths[0]; + // Include the smoothing factor if necessary. + sum += gradients->value_output_smoothed(ix, true) * gradients->widths[0]; } // Integrate the gradient up to the current position in the home interval, a fractional portion of a bin. std::vector ix(1,home); cvm::real frac = gradients->current_bin_scalar_fraction(0); - unsigned int count = samples->value(ix); - cvm::real fact = 1.0; - if ( count < full_samples ) { - fact = (count < min_samples) ? 0.0 : - (cvm::real(count - min_samples)) / (cvm::real(full_samples - min_samples)); - } - if (count > 0) - sum += fact*gradients->value(ix)/count*gradients->widths[0]*frac; + sum += gradients->value_output_smoothed(ix, true) * gradients->widths[0] * frac; // The applied potential is the negative integral of force samples. bias_energy = -sum; diff --git a/lib/colvars/colvarbias_abf.h b/lib/colvars/colvarbias_abf.h index f5d5bd267f..4426a8a3f4 100644 --- a/lib/colvars/colvarbias_abf.h +++ b/lib/colvars/colvarbias_abf.h @@ -14,13 +14,14 @@ #include #include #include +#include #include "colvarproxy.h" #include "colvarbias.h" #include "colvargrid.h" #include "colvar_UIestimator.h" -typedef cvm::real* gradient_t; +typedef cvm::real *gradient_t; /// ABF bias @@ -31,17 +32,14 @@ public: /// Constructor for ABF bias colvarbias_abf(char const *key); /// Initializer for ABF bias - virtual int init(std::string const &conf); + int init(std::string const &conf) override; /// Default destructor for ABF bias - virtual ~colvarbias_abf(); + ~colvarbias_abf() override; /// Per-timestep update of ABF bias - virtual int update(); + int update() override; private: - /// Filename prefix for human-readable gradient/sample count output - std::string output_prefix; - /// Base filename(s) for reading previous gradient data (replaces data from restart file) std::vector input_prefix; @@ -57,8 +55,8 @@ private: size_t full_samples; /// Number of samples per bin before applying a scaled-down biasing force size_t min_samples; - /// Write combined files with a history of all output data? - bool b_history_files; + /// Latest absolute time step at which history files were written + cvm::step_number history_last_step; /// Write CZAR output file for stratified eABF (.zgrad) bool b_czar_window_file; /// Number of timesteps between recording data in history files (if non-zero) @@ -99,75 +97,104 @@ private: gradient_t system_force; /// n-dim grid of free energy gradients - colvar_grid_gradient *gradients; + std::shared_ptr gradients; /// n-dim grid of number of samples - colvar_grid_count *samples; + std::shared_ptr samples; /// n-dim grid of pmf (dimension 1 to 3) - integrate_potential *pmf; + std::shared_ptr pmf; /// n-dim grid: average force on "real" coordinate for eABF z-based estimator - colvar_grid_gradient *z_gradients; + std::shared_ptr z_gradients; /// n-dim grid of number of samples on "real" coordinate for eABF z-based estimator - colvar_grid_count *z_samples; - /// n-dim grid containing CZAR estimator of "real" free energy gradients - colvar_grid_gradient *czar_gradients; + std::shared_ptr z_samples; + /// n-dim grid containing CZAR estimatr of "real" free energy gradients + std::shared_ptr czar_gradients; /// n-dim grid of CZAR pmf (dimension 1 to 3) - integrate_potential *czar_pmf; + std::shared_ptr czar_pmf; - inline int update_system_force(size_t i) - { - if (colvars[i]->is_enabled(f_cv_subtract_applied_force)) { - // this colvar is already subtracting the ABF force - system_force[i] = colvars[i]->total_force().real_value; - } else { - system_force[i] = colvars[i]->total_force().real_value - - colvar_forces[i].real_value; - // If hideJacobian is active then total_force has an extra term of -fj - // which is the Jacobian-compensating force at the colvar level - } - 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)); - return COLVARS_OK; - } + /// Calculate system force for all colvars + int update_system_force(); + + /// Calulate the biasing force for the current bin + int calc_biasing_force(std::vector &force); + + /// Calulate the smoothing factor to apply to biasing forces for given local count + cvm::real smoothing_factor(cvm::real weight); // shared ABF bool shared_on; size_t shared_freq; cvm::step_number shared_last_step; - // Share between replicas -- may be called independently of update - virtual int replica_share(); - // Store the last set for shared ABF - colvar_grid_gradient *last_gradients; - colvar_grid_count *last_samples; + // Share between replicas -- may be called independently of update + int replica_share() override; + + // Share data needed for CZAR between replicas - called before output only + int replica_share_CZAR(); + + /// Report the frequency at which this bias needs to communicate with replicas + size_t replica_share_freq() const override; + + // Data just after the last share (start of cycle) in shared ABF + std::unique_ptr last_gradients; + std::shared_ptr last_samples; + // eABF/CZAR local data last shared + std::unique_ptr z_gradients_in; + std::shared_ptr z_samples_in; + // ABF data from local replica only in shared ABF + std::shared_ptr local_gradients; + std::shared_ptr local_samples; + std::unique_ptr local_pmf; + // eABF/CZAR data collected from all replicas in shared eABF on replica 0 + // if non-shared, aliases of regular CZAR grids, for output purposes + std::shared_ptr global_z_gradients; + std::shared_ptr global_z_samples; + std::shared_ptr global_czar_gradients; + std::shared_ptr global_czar_pmf; + // For Tcl implementation of selection rules. /// Give the total number of bins for a given bias. - virtual int bin_num(); + int bin_num() override; /// Calculate the bin index for a given bias. - virtual int current_bin(); + int current_bin() override; //// Give the count at a given bin index. - virtual int bin_count(int bin_index); + int bin_count(int bin_index) override; + /// Return the average number of samples in a given "radius" around current bin + int local_sample_count(int radius) override; /// Write human-readable FE gradients and sample count, and DX file in dim > 2 - void write_gradients_samples(const std::string &prefix, bool close = true); + /// \param local write grids contining replica-local data in shared ABF + void write_gradients_samples(const std::string &prefix, bool close = true, bool local = false); /// Read human-readable FE gradients and sample count (if not using restart) int read_gradients_samples(); - /// Template used in write_gradient_samples() + /// Shorthand template used in write_gradient_samples() template int write_grid_to_file(T const *grid, std::string const &name, bool close); - virtual std::istream& read_state_data(std::istream&); - virtual std::ostream& write_state_data(std::ostream&); - virtual int write_output_files(); +private: + + /// Generic stream writing function (formatted and not) + template OST &write_state_data_template_(OST &os); + + /// Generic stream readingx function (formatted and not) + template IST &read_state_data_template_(IST &is); + +public: + + std::ostream &write_state_data(std::ostream &os) override; + + cvm::memory_stream &write_state_data(cvm::memory_stream &os) override; + + std::istream &read_state_data(std::istream &is) override; + + cvm::memory_stream &read_state_data(cvm::memory_stream &is) override; + + int write_output_files() override; /// Calculate the bias energy for 1D ABF - virtual int calc_energy(std::vector const *values); + int calc_energy(std::vector const *values) override; }; - #endif diff --git a/lib/colvars/colvarbias_abmd.cpp b/lib/colvars/colvarbias_abmd.cpp new file mode 100644 index 0000000000..4825c73be4 --- /dev/null +++ b/lib/colvars/colvarbias_abmd.cpp @@ -0,0 +1,136 @@ +// -*- c++ -*- + +// This file is part of the Collective Variables module (Colvars). +// The original version of Colvars and its updates are located at: +// https://github.com/Colvars/colvars +// Please update all Colvars source files before making any changes. +// If you wish to distribute your changes, please submit them to the +// Colvars repository at GitHub. + + +#include "colvarbias_abmd.h" +#include "colvarproxy.h" +#include + + +colvarbias_abmd::colvarbias_abmd(char const *key) + : colvarbias(key), + colvarbias_ti(key) +{ +} + + +int colvarbias_abmd::init(std::string const &conf) +{ + cvm::main()->cite_feature("ABMD bias"); + + int err = colvarbias::init(conf); + err |= colvarbias_ti::init(conf); + if (err != COLVARS_OK) return err; + + enable(f_cvb_apply_force); + + if (num_variables() != 1) { + return cvm::error("ABMD requires exactly one collective variable.\n", COLVARS_INPUT_ERROR); + } + + if ( ! (variables(0))->is_enabled(f_cv_scalar) ) { + return cvm::error("ABMD colvar must be scalar.\n", COLVARS_INPUT_ERROR); + } + + get_keyval(conf, "forceConstant", k); + get_keyval(conf, "decreasing", decreasing, decreasing); + get_keyval(conf, "stoppingValue", stopping_val); + + return COLVARS_OK; +} + + +int colvarbias_abmd::update() +{ + if (!cvm::main()->proxy->simulation_running()) { + return COLVARS_OK; + } + + colvar const *cv = variables(0); + cvm::real const val = cv->value().real_value; + + if (!ref_initialized) { + ref_val = val; + ref_initialized = true; + } + + // Compute sign factor to unify increasing and decreasing cases below + // less conditionals, more arithmetic + cvm::real const sign = decreasing ? -1. : 1.; + cvm::real const diff = (val - ref_val) * sign; + + if ( diff > 0. ) { + colvar_forces[0] = 0.; + bias_energy = 0.; + if ( (ref_val-stopping_val) * sign <= 0. ) ref_val = val; + } else { + colvar_forces[0] = - sign * k * diff; + bias_energy = 0.5 * k * diff * diff;; + } + return COLVARS_OK; +} + + +std::string const colvarbias_abmd::get_state_params() const +{ + std::ostringstream os; + os.setf(std::ios::scientific, std::ios::floatfield); + + os << " refValue " + << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) + << ref_val << "\n"; + os << " stoppingValue " << stopping_val << "\n"; + os << " forceConstant " << k << "\n"; + os << " decreasing " << (decreasing ? "on" : "off") << "\n"; + + return (colvarbias::get_state_params() + os.str()); +} + + +int colvarbias_abmd::set_state_params(std::string const &conf) +{ + int error_code = colvarbias::set_state_params(conf); + + if (error_code != COLVARS_OK) { + return error_code; + } + + get_keyval(conf, "refValue", ref_val, ref_val, + colvarparse::parse_restart | colvarparse::parse_required); + ref_initialized = true; + + get_keyval(conf, "forceConstant", k, k, + colvarparse::parse_restart | colvarparse::parse_required); + get_keyval(conf, "decreasing", decreasing, decreasing, + colvarparse::parse_restart | colvarparse::parse_required); + get_keyval(conf, "stoppingValue", stopping_val, stopping_val, + colvarparse::parse_restart | colvarparse::parse_required); + + return COLVARS_OK; +} + + +std::ostream & colvarbias_abmd::write_traj_label(std::ostream &os) +{ + size_t const this_cv_width = (variables(0)->value()).output_width(cvm::cv_width); + os << " ref_" + << cvm::wrap_string(variables(0)->name, this_cv_width-4); + + return os; +} + + +std::ostream & colvarbias_abmd::write_traj(std::ostream &os) +{ + os << " " + << std::setprecision(cvm::en_prec) << std::setw(cvm::en_width) + << ref_val; + + return os; +} diff --git a/lib/colvars/colvarbias_abmd.h b/lib/colvars/colvarbias_abmd.h new file mode 100644 index 0000000000..96278c2de8 --- /dev/null +++ b/lib/colvars/colvarbias_abmd.h @@ -0,0 +1,49 @@ +// -*- c++ -*- + +// This file is part of the Collective Variables module (Colvars). +// The original version of Colvars and its updates are located at: +// https://github.com/Colvars/colvars +// Please update all Colvars source files before making any changes. +// If you wish to distribute your changes, please submit them to the +// Colvars repository at GitHub. + +#ifndef COLVARBIAS_ABMD_H +#define COLVARBIAS_ABMD_H + +#include "colvarbias_restraint.h" + + +/// \brief Adiabatic Bias MD +class colvarbias_abmd + : public colvarbias_ti +{ +public: + + colvarbias_abmd(char const *key); + virtual int init(std::string const &conf); + virtual int update(); + virtual std::string const get_state_params() const; + virtual int set_state_params(std::string const &conf); + virtual std::ostream & write_traj_label(std::ostream &os); + virtual std::ostream & write_traj(std::ostream &os); + +protected: + + /// \brief Location of the moving wall + cvm::real ref_val = 0.; + + /// \brief Has ref_val already been set? + bool ref_initialized = false; + + /// \brief Value of the reference where it stops moving + cvm::real stopping_val = 0.; + + /// \brief Is the target moving down? + bool decreasing = false; + + /// \brief Restraint force constant + cvm::real k = 0.; +}; + + +#endif diff --git a/lib/colvars/colvarbias_alb.cpp b/lib/colvars/colvarbias_alb.cpp index b432659bf4..5b664b8c0b 100644 --- a/lib/colvars/colvarbias_alb.cpp +++ b/lib/colvars/colvarbias_alb.cpp @@ -9,7 +9,6 @@ #include #include -#include #include "colvarmodule.h" #include "colvarproxy.h" @@ -40,7 +39,10 @@ colvarbias_alb::colvarbias_alb(char const *key) int colvarbias_alb::init(std::string const &conf) { colvarproxy *proxy = cvm::main()->proxy; - colvarbias::init(conf); + int err = colvarbias::init(conf); + if (err != COLVARS_OK) { + return err; + } cvm::main()->cite_feature("ALB colvar bias implementation"); enable(f_cvb_scalar_variables); diff --git a/lib/colvars/colvarbias_histogram.cpp b/lib/colvars/colvarbias_histogram.cpp index 84f1a5bdee..98de275304 100644 --- a/lib/colvars/colvarbias_histogram.cpp +++ b/lib/colvars/colvarbias_histogram.cpp @@ -7,10 +7,13 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. +#include + #include "colvarmodule.h" #include "colvarproxy.h" #include "colvar.h" #include "colvarbias_histogram.h" +#include "colvars_memstream.h" colvarbias_histogram::colvarbias_histogram(char const *key) @@ -23,7 +26,10 @@ colvarbias_histogram::colvarbias_histogram(char const *key) int colvarbias_histogram::init(std::string const &conf) { - colvarbias::init(conf); + int err = colvarbias::init(conf); + if (err != COLVARS_OK) { + return err; + } cvm::main()->cite_feature("Histogram colvar bias implementation"); enable(f_cvb_scalar_variables); @@ -125,22 +131,6 @@ int colvarbias_histogram::update() // assign a valid bin size bin.assign(num_variables(), 0); - if (out_name.size() == 0) { - // At the first timestep, we need to assign out_name since - // output_prefix is unset during the constructor - if (cvm::step_relative() == 0) { - out_name = cvm::output_prefix() + "." + this->name + ".dat"; - cvm::log("Histogram " + this->name + " will be written to file \"" + out_name + "\"\n"); - } - } - - if (out_name_dx.size() == 0) { - if (cvm::step_relative() == 0) { - out_name_dx = cvm::output_prefix() + "." + this->name + ".dx"; - cvm::log("Histogram " + this->name + " will be written to file \"" + out_name_dx + "\"\n"); - } - } - if (colvar_array_size == 0) { // update indices for scalar values size_t i; @@ -181,6 +171,16 @@ int colvarbias_histogram::write_output_files() int error_code = COLVARS_OK; + // Set default filenames, if none have been provided + if (!cvm::output_prefix().empty()) { + if (out_name.empty()) { + out_name = cvm::output_prefix() + "." + this->name + ".dat"; + } + if (out_name_dx.empty()) { + out_name_dx = cvm::output_prefix() + "." + this->name + ".dx"; + } + } + if (out_name.size() && out_name != "none") { cvm::log("Writing the histogram file \""+out_name+"\".\n"); error_code |= grid->write_multicol(out_name, "histogram output file"); @@ -197,13 +197,18 @@ int colvarbias_histogram::write_output_files() std::istream & colvarbias_histogram::read_state_data(std::istream& is) { - if (! read_state_data_key(is, "grid")) { - return is; - } - if (! grid->read_raw(is)) { - return is; + if (read_state_data_key(is, "grid")) { + grid->read_raw(is); } + return is; +} + +cvm::memory_stream & colvarbias_histogram::read_state_data(cvm::memory_stream& is) +{ + if (read_state_data_key(is, "grid")) { + grid->read_raw(is); + } return is; } @@ -212,8 +217,16 @@ std::ostream & colvarbias_histogram::write_state_data(std::ostream& os) { std::ios::fmtflags flags(os.flags()); os.setf(std::ios::fmtflags(0), std::ios::floatfield); - os << "grid\n"; + write_state_data_key(os, "grid"); grid->write_raw(os, 8); os.flags(flags); return os; } + + +cvm::memory_stream & colvarbias_histogram::write_state_data(cvm::memory_stream& os) +{ + write_state_data_key(os, "grid"); + grid->write_raw(os); + return os; +} diff --git a/lib/colvars/colvarbias_histogram.h b/lib/colvars/colvarbias_histogram.h index 6044fa189e..2c6ee84d1f 100644 --- a/lib/colvars/colvarbias_histogram.h +++ b/lib/colvars/colvarbias_histogram.h @@ -24,11 +24,16 @@ class colvarbias_histogram : public colvarbias { public: colvarbias_histogram(char const *key); - ~colvarbias_histogram(); + virtual ~colvarbias_histogram(); virtual int init(std::string const &conf); virtual int update(); virtual int write_output_files(); + virtual std::ostream & write_state_data(std::ostream &os); + virtual cvm::memory_stream & write_state_data(cvm::memory_stream &os); + virtual std::istream & read_state_data(std::istream &is); + virtual cvm::memory_stream & read_state_data(cvm::memory_stream &is); + protected: /// n-dim histogram @@ -40,9 +45,6 @@ protected: size_t colvar_array_size; /// If colvar_array_size is larger than 1, weigh each one by this number before accumulating the histogram std::vector weights; - - virtual std::istream & read_state_data(std::istream &is); - virtual std::ostream & write_state_data(std::ostream &os); }; #endif diff --git a/lib/colvars/colvarbias_histogram_reweight_amd.cpp b/lib/colvars/colvarbias_histogram_reweight_amd.cpp index 85f1bde35c..de2f6d9b8a 100644 --- a/lib/colvars/colvarbias_histogram_reweight_amd.cpp +++ b/lib/colvars/colvarbias_histogram_reweight_amd.cpp @@ -9,6 +9,7 @@ #include "colvarbias_histogram_reweight_amd.h" #include "colvarproxy.h" +#include "colvars_memstream.h" colvarbias_reweightaMD::colvarbias_reweightaMD(char const *key) : colvarbias_histogram(key), grid_count(NULL), grid_dV(NULL), @@ -343,23 +344,37 @@ void colvarbias_reweightaMD::compute_cumulant_expansion_factor( } } -std::ostream & colvarbias_reweightaMD::write_state_data(std::ostream& os) + +template OST & colvarbias_reweightaMD::write_state_data_template_(OST& os) { std::ios::fmtflags flags(os.flags()); os.setf(std::ios::fmtflags(0), std::ios::floatfield); - os << "grid\n"; + write_state_data_key(os, "grid"); grid->write_raw(os, 8); - os << "grid_count\n"; + write_state_data_key(os, "grid_count"); grid_count->write_raw(os, 8); - os << "grid_dV\n"; + write_state_data_key(os, "grid_dV"); grid_dV->write_raw(os, 8); - os << "grid_dV_square\n"; + write_state_data_key(os, "grid_dV_square"); grid_dV_square->write_raw(os, 8); os.flags(flags); return os; } -std::istream & colvarbias_reweightaMD::read_state_data(std::istream& is) + +std::ostream & colvarbias_reweightaMD::write_state_data(std::ostream& os) +{ + return write_state_data_template_(os); +} + + +cvm::memory_stream & colvarbias_reweightaMD::write_state_data(cvm::memory_stream& os) +{ + return write_state_data_template_(os); +} + + +template IST & colvarbias_reweightaMD::read_state_data_template_(IST& is) { if (! read_state_data_key(is, "grid")) { return is; @@ -387,3 +402,15 @@ std::istream & colvarbias_reweightaMD::read_state_data(std::istream& is) } return is; } + + +std::istream & colvarbias_reweightaMD::read_state_data(std::istream& is) +{ + return read_state_data_template_(is); +} + + +cvm::memory_stream & colvarbias_reweightaMD::read_state_data(cvm::memory_stream& is) +{ + return read_state_data_template_(is); +} diff --git a/lib/colvars/colvarbias_histogram_reweight_amd.h b/lib/colvars/colvarbias_histogram_reweight_amd.h index f126738305..43759b3bde 100644 --- a/lib/colvars/colvarbias_histogram_reweight_amd.h +++ b/lib/colvars/colvarbias_histogram_reweight_amd.h @@ -18,15 +18,9 @@ class colvarbias_reweightaMD : public colvarbias_histogram { public: colvarbias_reweightaMD(char const *key); virtual ~colvarbias_reweightaMD(); -#if (__cplusplus >= 201103L) virtual int init(std::string const &conf) override; virtual int update() override; virtual int write_output_files() override; -#else - virtual int init(std::string const &conf); - virtual int update(); - virtual int write_output_files(); -#endif /// @brief convert histogram to PMF by taking logarithm and multiplying /// it with -1/beta @@ -85,14 +79,15 @@ protected: /// Write gradients of the PMF? bool b_write_gradients; + template OST & write_state_data_template_(OST& os); + template IST & read_state_data_template_(IST& is); + /// save and restore -#if (__cplusplus >= 201103L) virtual std::istream & read_state_data(std::istream &is) override; + virtual cvm::memory_stream & read_state_data(cvm::memory_stream &is) override; virtual std::ostream & write_state_data(std::ostream &os) override; -#else - virtual std::istream & read_state_data(std::istream &is); - virtual std::ostream & write_state_data(std::ostream &os); -#endif + virtual cvm::memory_stream & write_state_data(cvm::memory_stream &os) override; + private: /// temporary grids for evaluating PMFs colvar_grid_scalar *pmf_grid_exp_avg; diff --git a/lib/colvars/colvarbias_meta.cpp b/lib/colvars/colvarbias_meta.cpp index 90497bf150..905cd17883 100644 --- a/lib/colvars/colvarbias_meta.cpp +++ b/lib/colvars/colvarbias_meta.cpp @@ -7,29 +7,33 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include -#include #include #include #include -// used to set the absolute path of a replica file +// Define function to get the absolute path of a replica file #if defined(_WIN32) && !defined(__CYGWIN__) #include -#define CHDIR ::_chdir -#define GETCWD ::_getcwd +#define GETCWD(BUF, SIZE) ::_getcwd(BUF, SIZE) #define PATHSEP "\\" #else #include -#define CHDIR ::chdir -#define GETCWD ::getcwd +#define GETCWD(BUF, SIZE) ::getcwd(BUF, SIZE) #define PATHSEP "/" #endif +#ifdef __cpp_lib_filesystem +// When std::filesystem is available, use it +#include +#undef GETCWD +#define GETCWD(BUF, SIZE) (std::filesystem::current_path().string().c_str()) +#endif + #include "colvarmodule.h" #include "colvarproxy.h" #include "colvar.h" #include "colvarbias_meta.h" +#include "colvars_memstream.h" colvarbias_meta::colvarbias_meta(char const *key) @@ -58,7 +62,6 @@ colvarbias_meta::colvarbias_meta(char const *key) ebmeta_equil_steps = 0L; - replica_update_freq = 0; replica_id.clear(); } @@ -392,11 +395,8 @@ colvarbias_meta::add_hill(colvarbias_meta::hill const &h) // output to trajectory (if specified) if (b_hills_traj) { - // Open trajectory file or access the one already open - std::ostream &hills_traj_os = - cvm::proxy->output_stream(hills_traj_file_name()); - hills_traj_os << (hills.back()).output_traj(); - cvm::proxy->flush_output_stream(hills_traj_file_name()); + // Save the current hill to a buffer for further traj output + hills_traj_os_buf << (hills.back()).output_traj(); } has_data = true; @@ -427,13 +427,10 @@ colvarbias_meta::delete_hill(hill_iter &h) } if (b_hills_traj) { - // output to the trajectory - std::ostream &hills_traj_os = - cvm::proxy->output_stream(hills_traj_file_name()); - hills_traj_os << "# DELETED this hill: " - << (hills.back()).output_traj() - << "\n"; - cvm::proxy->flush_output_stream(hills_traj_file_name()); + // Save the current hill to a buffer for further traj output + hills_traj_os_buf << "# DELETED this hill: " + << (hills.back()).output_traj() + << "\n"; } return hills.erase(h); @@ -624,9 +621,9 @@ int colvarbias_meta::update_bias() add_hill(hill(cvm::step_absolute(), hill_weight*hills_scale, colvar_values, colvar_sigmas, replica_id)); std::ostream &replica_hills_os = - cvm::proxy->output_stream(replica_hills_file); + cvm::proxy->output_stream(replica_hills_file, "replica hills file"); if (replica_hills_os) { - replica_hills_os << hills.back(); + write_hill(replica_hills_os, hills.back()); } else { return cvm::error("Error: in metadynamics bias \""+this->name+"\""+ ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+ @@ -985,9 +982,9 @@ void colvarbias_meta::recount_hills_off_grid(colvarbias_meta::hill_iter h_first int colvarbias_meta::replica_share() { int error_code = COLVARS_OK; - colvarproxy *proxy = cvm::proxy; // sync with the other replicas (if needed) if (comm == multiple_replicas) { + colvarproxy *proxy = cvm::main()->proxy; // reread the replicas registry error_code |= update_replicas_registry(); // empty the output buffer @@ -998,6 +995,12 @@ int colvarbias_meta::replica_share() } +size_t colvarbias_meta::replica_share_freq() const +{ + return replica_update_freq; +} + + int colvarbias_meta::update_replicas_registry() { int error_code = COLVARS_OK; @@ -1299,21 +1302,40 @@ int colvarbias_meta::set_state_params(std::string const &state_conf) } -std::istream & colvarbias_meta::read_state_data(std::istream& is) +template +IST & colvarbias_meta::read_grid_data_template_(IST& is, std::string const &key, + GT *grid, GT *backup_grid) +{ + auto const start_pos = is.tellg(); + std::string key_in; + if (is >> key_in) { + if ((key != key_in) || !(grid->read_restart(is))) { + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + if (!rebin_grids) { + if ((backup_grid == nullptr) || (comm == single_replica)) { + cvm::error("Error: couldn't read grid data for metadynamics bias \""+ + this->name+"\""+ + ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+ + "; if useGrids was off when the state file was written, " + "try enabling rebinGrids now to regenerate the grids.\n", COLVARS_INPUT_ERROR); + } + } + } + } else { + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + } + return is; +} + + +template IST &colvarbias_meta::read_state_data_template_(IST &is) { if (use_grids) { - if (expand_grids) { - // the boundaries of the colvars may have been changed; TODO: - // this reallocation is only for backward-compatibility, and may - // be deleted when grid_parameters (i.e. colvargrid's own - // internal reallocation) has kicked in - delete hills_energy; - delete hills_energy_gradients; - hills_energy = new colvar_grid_scalar(colvars); - hills_energy_gradients = new colvar_grid_gradient(colvars); - } - colvar_grid_scalar *hills_energy_backup = NULL; colvar_grid_gradient *hills_energy_gradients_backup = NULL; @@ -1328,95 +1350,26 @@ std::istream & colvarbias_meta::read_state_data(std::istream& is) hills_energy_gradients = new colvar_grid_gradient(colvars); } - std::streampos const hills_energy_pos = is.tellg(); - std::string key; - if (!(is >> key)) { - if (hills_energy_backup != NULL) { - delete hills_energy; - delete hills_energy_gradients; - hills_energy = hills_energy_backup; - hills_energy_gradients = hills_energy_gradients_backup; + read_grid_data_template_(is, "hills_energy", hills_energy, + hills_energy_backup); + + read_grid_data_template_( + is, "hills_energy_gradients", hills_energy_gradients, hills_energy_gradients_backup); + + if (is) { + cvm::log(" successfully read the biasing potential and its gradients from grids.\n"); + if (hills_energy_backup != nullptr) { + // Now that we have successfully updated the grids, delete the backup copies + delete hills_energy_backup; + delete hills_energy_gradients_backup; } - is.clear(); - is.seekg(hills_energy_pos, std::ios::beg); - is.setstate(std::ios::failbit); + } else { return is; - } else if (!(key == std::string("hills_energy")) || - !(hills_energy->read_restart(is))) { - is.clear(); - is.seekg(hills_energy_pos, std::ios::beg); - if (!rebin_grids) { - if ((hills_energy_backup == NULL) || (comm == single_replica)) { - cvm::error("Error: couldn't read the energy grid for metadynamics bias \""+ - this->name+"\""+ - ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+ - "; if useGrids was off when the state file was written, " - "enable rebinGrids now to regenerate the grids.\n"); - } else { - delete hills_energy; - delete hills_energy_gradients; - hills_energy = hills_energy_backup; - hills_energy_gradients = hills_energy_gradients_backup; - is.setstate(std::ios::failbit); - return is; - } - } - } - - std::streampos const hills_energy_gradients_pos = is.tellg(); - if (!(is >> key)) { - if (hills_energy_backup != NULL) { - delete hills_energy; - delete hills_energy_gradients; - hills_energy = hills_energy_backup; - hills_energy_gradients = hills_energy_gradients_backup; - } - is.clear(); - is.seekg(hills_energy_gradients_pos, std::ios::beg); - is.setstate(std::ios::failbit); - return is; - } else if (!(key == std::string("hills_energy_gradients")) || - !(hills_energy_gradients->read_restart(is))) { - is.clear(); - is.seekg(hills_energy_gradients_pos, std::ios::beg); - if (!rebin_grids) { - if ((hills_energy_backup == NULL) || (comm == single_replica)) { - cvm::error("Error: couldn't read the gradients grid for metadynamics bias \""+ - this->name+"\""+ - ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+ - "; if useGrids was off when the state file was written, " - "enable rebinGrids now to regenerate the grids.\n"); - } else { - delete hills_energy; - delete hills_energy_gradients; - hills_energy = hills_energy_backup; - hills_energy_gradients = hills_energy_gradients_backup; - is.setstate(std::ios::failbit); - return is; - } - } - } - - if (cvm::debug()) - cvm::log("Successfully read new grids for bias \""+ - this->name+"\""+ - ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+"\n"); - - cvm::log(" read biasing energy and forces from grids.\n"); - - if (hills_energy_backup != NULL) { - // now that we have successfully updated the grids, delete the - // backup copies - if (cvm::debug()) - cvm::log("Deallocating the older grids.\n"); - - delete hills_energy_backup; - delete hills_energy_gradients_backup; } } - // Save references to the end of the list of existing hills, so that it can - // be cleared if hills are read successfully state + // Save references to the end of the list of existing hills, so that they can + // be cleared if hills are read successfully from the stream bool const existing_hills = !hills.empty(); size_t const old_hills_size = hills.size(); hill_iter old_hills_end = hills.end(); @@ -1430,17 +1383,20 @@ std::istream & colvarbias_meta::read_state_data(std::istream& is) while (read_hill(is)) { if (cvm::debug()) { cvm::log("Read a previously saved hill under the " - "metadynamics bias \""+ - this->name+"\", created at step "+ - cvm::to_str((hills.back()).it)+".\n"); + "metadynamics bias \"" + + this->name + "\", created at step " + cvm::to_str((hills.back()).it) + + "; position in stream is " + cvm::to_str(is.tellg()) + ".\n"); } } + is.clear(); + new_hills_begin = hills.end(); - cvm::log(" read "+cvm::to_str(hills.size() - old_hills_size)+ - " additional explicit hills.\n"); + cvm::log(" successfully read "+cvm::to_str(hills.size() - old_hills_size)+ + " explicit hills from state.\n"); if (existing_hills) { + // Prune any hills that pre-existed those just read hills.erase(hills.begin(), old_hills_end); hills_off_grid.erase(hills_off_grid.begin(), old_hills_off_grid_end); if (cvm::debug()) { @@ -1449,6 +1405,46 @@ std::istream & colvarbias_meta::read_state_data(std::istream& is) } } + // If rebinGrids is set, rebin the grids based on the current information + rebin_grids_after_restart(); + + if (use_grids) { + if (!hills_off_grid.empty()) { + cvm::log(cvm::to_str(hills_off_grid.size())+" hills are near the " + "grid boundaries: they will be computed analytically " + "and saved to the state files.\n"); + } + } + + colvarbias_ti::read_state_data(is); + + if (cvm::debug()) + cvm::log("colvarbias_meta::read_restart() done\n"); + + has_data = true; + + if (comm == multiple_replicas) { + read_replica_files(); + } + + return is; +} + + +std::istream & colvarbias_meta::read_state_data(std::istream& is) +{ + return read_state_data_template_(is); +} + + +cvm::memory_stream &colvarbias_meta::read_state_data(cvm::memory_stream &is) +{ + return read_state_data_template_(is); +} + + +void colvarbias_meta::rebin_grids_after_restart() +{ if (rebin_grids) { // allocate new grids (based on the new boundaries and widths just @@ -1463,9 +1459,9 @@ std::istream & colvarbias_meta::read_state_data(std::istream& is) if (cvm::debug()) { std::ostringstream tmp_os; tmp_os << "hills_energy parameters:\n"; - hills_energy->write_params(tmp_os); + tmp_os << hills_energy->get_state_params(); tmp_os << "new_hills_energy parameters:\n"; - new_hills_energy->write_params(tmp_os); + tmp_os << new_hills_energy->get_state_params(); cvm::log(tmp_os.str()); } @@ -1495,114 +1491,182 @@ std::istream & colvarbias_meta::read_state_data(std::istream& is) if (!hills.empty()) recount_hills_off_grid(hills.begin(), hills.end(), hills_energy); } +} - if (use_grids) { - if (!hills_off_grid.empty()) { - cvm::log(cvm::to_str(hills_off_grid.size())+" hills are near the " - "grid boundaries: they will be computed analytically " - "and saved to the state files.\n"); + +template +OST &colvarbias_meta::write_hill_template_(OST &os, colvarbias_meta::hill const &h) +{ + bool const formatted = !std::is_same::value; + + if (formatted) { + os.setf(std::ios::scientific, std::ios::floatfield); + } + + write_state_data_key(os, "hill", false); + + if (formatted) + os << "{\n"; + + write_state_data_key(os, "step", false); + if (formatted) + os << std::setw(cvm::it_width); + os << h.it; + if (formatted) + os << "\n"; + + write_state_data_key(os, "weight", false); + if (formatted) + os << std::setprecision(cvm::en_prec) << std::setw(cvm::en_width); + os << h.W; + if (formatted) + os << "\n"; + + size_t i; + write_state_data_key(os, "centers", false); + for (i = 0; i < (h.centers).size(); i++) { + if (formatted) + os << " " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width); + os << h.centers[i]; + } + if (formatted) + os << "\n"; + + // For backward compatibility, write the widths instead of the sigmas + write_state_data_key(os, "widths", false); + for (i = 0; i < (h.sigmas).size(); i++) { + if (formatted) + os << " " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width); + os << 2.0 * h.sigmas[i]; + } + if (formatted) + os << "\n"; + + if (h.replica.size()) { + write_state_data_key(os, "replicaID", false); + os << h.replica; + if (formatted) + os << "\n"; + } + + if (formatted) + os << "}\n"; + + return os; +} + + +std::ostream &colvarbias_meta::write_hill(std::ostream &os, colvarbias_meta::hill const &h) +{ + return write_hill_template_(os, h); +} + + +cvm::memory_stream &colvarbias_meta::write_hill(cvm::memory_stream &os, + colvarbias_meta::hill const &h) +{ + return write_hill_template_(os, h); +} + + +template IST &hill_stream_error(IST &is, size_t start_pos, std::string const &key) +{ + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + cvm::error("Error: in reading data for keyword \"" + key + "\" from stream.\n", + COLVARS_INPUT_ERROR); + return is; +} + + +template IST &colvarbias_meta::read_hill_template_(IST &is) +{ + if (!is) + return is; // do nothing if failbit is set + + bool const formatted = !std::is_same::value; + + auto const start_pos = is.tellg(); + + std::string key; + if (!(is >> key) || (key != "hill")) { + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + return is; + } + + if (formatted) { + std::string brace; + if (!(is >> brace) || (brace != "{")) { + return hill_stream_error(is, start_pos, "hill"); } } - colvarbias_ti::read_state_data(is); - - if (cvm::debug()) - cvm::log("colvarbias_meta::read_restart() done\n"); - - has_data = true; - - if (comm != single_replica) { - read_replica_files(); - } - - return is; -} - - -inline std::istream & reset_istream(std::istream &is, size_t start_pos) -{ - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); - return is; -} - - -std::istream & colvarbias_meta::read_hill(std::istream &is) -{ - if (!is) return is; // do nothing if failbit is set - - std::streampos const start_pos = is.tellg(); - size_t i = 0; - - std::string data; - if ( !(is >> read_block("hill", &data)) ) { - return reset_istream(is, start_pos); - } - - std::istringstream data_is(data); - cvm::step_number h_it = 0L; - cvm::real h_weight; + cvm::real h_weight = 0.0; std::vector h_centers(num_variables()); - for (i = 0; i < num_variables(); i++) { + for (size_t i = 0; i < num_variables(); i++) { h_centers[i].type(variables(i)->value()); } std::vector h_sigmas(num_variables()); std::string h_replica; - std::string keyword; - while (data_is >> keyword) { + if (!read_state_data_key(is, "step") || !(is >> h_it)) { + return hill_stream_error(is, start_pos, "step"); + } - if (keyword == "step") { - if ( !(data_is >> h_it)) { - return reset_istream(is, start_pos); - } - if ((h_it <= state_file_step) && !restart_keep_hills) { - if (cvm::debug()) - cvm::log("Skipping a hill older than the state file for metadynamics bias \""+ - this->name+"\""+ - ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+"\n"); - return is; + if (read_state_data_key(is, "weight")) { + if (!(is >> h_weight)) { + return hill_stream_error(is, start_pos, "weight"); + } + } + + if (read_state_data_key(is, "centers")) { + for (size_t i = 0; i < num_variables(); i++) { + if (!(is >> h_centers[i])) { + return hill_stream_error(is, start_pos, "centers"); } } + } - if (keyword == "weight") { - if ( !(data_is >> h_weight)) { - return reset_istream(is, start_pos); + if (read_state_data_key(is, "widths")) { + for (size_t i = 0; i < num_variables(); i++) { + if (!(is >> h_sigmas[i])) { + return hill_stream_error(is, start_pos, "widths"); + } + // For backward compatibility, read the widths instead of the sigmas + h_sigmas[i] /= 2.0; + } + } + + if (comm != single_replica) { + if (read_state_data_key(is, "replicaID")) { + if (!(is >> h_replica)) { + return hill_stream_error(is, start_pos, "replicaID"); + } + if (h_replica != replica_id) { + cvm::error("Error: trying to read a hill created by replica \"" + h_replica + + "\" for replica \"" + replica_id + "\"; did you swap output files?\n", + COLVARS_INPUT_ERROR); + return hill_stream_error(is, start_pos, "replicaID"); } } + } - if (keyword == "centers") { - for (i = 0; i < num_variables(); i++) { - if ( !(data_is >> h_centers[i])) { - return reset_istream(is, start_pos); - } - } + if (formatted) { + std::string brace; + if (!(is >> brace) || (brace != "}")) { + return hill_stream_error(is, start_pos, "hill"); } + } - if (keyword == "widths") { - for (i = 0; i < num_variables(); i++) { - if ( !(data_is >> h_sigmas[i])) { - return reset_istream(is, start_pos); - } - // For backward compatibility, read the widths instead of the sigmas - h_sigmas[i] /= 2.0; - } - } - - if (comm != single_replica) { - if (keyword == "replicaID") { - if ( !(data_is >> h_replica)) { - return reset_istream(is, start_pos); - } - if (h_replica != replica_id) { - cvm::error("Error: trying to read a hill created by replica \""+ - h_replica+"\" for replica \""+replica_id+ - "\"; did you swap output files?\n", COLVARS_INPUT_ERROR); - } - } - } + if ((h_it <= state_file_step) && !restart_keep_hills) { + if (cvm::debug()) + cvm::log("Skipping a hill older than the state file for metadynamics bias \"" + this->name + + "\"" + ((comm != single_replica) ? ", replica \"" + replica_id + "\"" : "") + "\n"); + return is; } hill_iter const hills_end = hills.end(); @@ -1617,7 +1681,7 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) // add this also to the list of hills that are off-grid, which will // be computed analytically cvm::real const min_dist = - hills_energy->bin_distance_from_boundaries((hills.back()).centers, true); + hills_energy->bin_distance_from_boundaries((hills.back()).centers, true); if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(hills.back()); } @@ -1628,6 +1692,18 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) } +std::istream &colvarbias_meta::read_hill(std::istream &is) +{ + return read_hill_template_(is); +} + + +cvm::memory_stream &colvarbias_meta::read_hill(cvm::memory_stream &is) +{ + return read_hill_template_(is); +} + + int colvarbias_meta::setup_output() { int error_code = COLVARS_OK; @@ -1644,7 +1720,10 @@ int colvarbias_meta::setup_output() // TODO: one may want to specify the path manually for intricated filesystems? char *pwd = new char[3001]; - if (GETCWD(pwd, 3000) == NULL) { + if (GETCWD(pwd, 3000) == nullptr) { + if (pwd != nullptr) { // + delete[] pwd; + } return cvm::error("Error: cannot get the path of the current working directory.\n", COLVARS_BUG_ERROR); } @@ -1701,7 +1780,7 @@ int colvarbias_meta::setup_output() // if we're running without grids, use a growing list of "hills" files // otherwise, just one state file and one "hills" file as buffer - std::ostream &list_os = cvm::proxy->output_stream(replica_list_file); + std::ostream &list_os = cvm::proxy->output_stream(replica_list_file, "replica list file"); if (list_os) { list_os << "stateFile " << replica_state_file << "\n"; list_os << "hillsFile " << replica_hills_file << "\n"; @@ -1723,7 +1802,7 @@ int colvarbias_meta::setup_output() if (b_hills_traj) { std::ostream &hills_traj_os = - cvm::proxy->output_stream(hills_traj_file_name()); + cvm::proxy->output_stream(hills_traj_file_name(), "hills trajectory file"); if (!hills_traj_os) { error_code |= COLVARS_FILE_ERROR; } @@ -1757,36 +1836,32 @@ std::string const colvarbias_meta::get_state_params() const } -std::ostream & colvarbias_meta::write_state_data(std::ostream& os) +template OST &colvarbias_meta::write_state_data_template_(OST &os) { if (use_grids) { // this is a very good time to project hills, if you haven't done // it already! - project_hills(new_hills_begin, hills.end(), - hills_energy, hills_energy_gradients); + project_hills(new_hills_begin, hills.end(), hills_energy, hills_energy_gradients); new_hills_begin = hills.end(); // write down the grids to the restart file - os << " hills_energy\n"; + write_state_data_key(os, "hills_energy"); hills_energy->write_restart(os); - os << " hills_energy_gradients\n"; + write_state_data_key(os, "hills_energy_gradients"); hills_energy_gradients->write_restart(os); } - if ( (!use_grids) || keep_hills ) { + if ((!use_grids) || keep_hills) { // write all hills currently in memory - for (std::list::const_iterator h = this->hills.begin(); - h != this->hills.end(); - h++) { - os << *h; + for (std::list::const_iterator h = this->hills.begin(); h != this->hills.end(); h++) { + write_hill(os, *h); } } else { // write just those that are near the grid boundaries for (std::list::const_iterator h = this->hills_off_grid.begin(); - h != this->hills_off_grid.end(); - h++) { - os << *h; + h != this->hills_off_grid.end(); h++) { + write_hill(os, *h); } } @@ -1795,6 +1870,18 @@ std::ostream & colvarbias_meta::write_state_data(std::ostream& os) } +std::ostream & colvarbias_meta::write_state_data(std::ostream& os) +{ + return write_state_data_template_(os); +} + + +cvm::memory_stream &colvarbias_meta::write_state_data(cvm::memory_stream &os) +{ + return write_state_data_template_(os); +} + + int colvarbias_meta::write_state_to_replicas() { int error_code = COLVARS_OK; @@ -1816,6 +1903,15 @@ int colvarbias_meta::write_output_files() if (dump_fes) { write_pmf(); } + if (b_hills_traj) { + std::ostream &hills_traj_os = + cvm::proxy->output_stream(hills_traj_file_name(), "hills trajectory file"); + hills_traj_os << hills_traj_os_buf.str(); + cvm::proxy->flush_output_stream(hills_traj_file_name()); + // clear the buffer + hills_traj_os_buf.str(""); + hills_traj_os_buf.clear(); + } return COLVARS_OK; } @@ -1915,7 +2011,7 @@ int colvarbias_meta::write_replica_state_file() // Write to temporary state file std::string const tmp_state_file(replica_state_file+".tmp"); error_code |= proxy->remove_file(tmp_state_file); - std::ostream &rep_state_os = cvm::proxy->output_stream(tmp_state_file); + std::ostream &rep_state_os = cvm::proxy->output_stream(tmp_state_file, "temporary state file"); if (rep_state_os) { if (!write_state(rep_state_os)) { error_code |= cvm::error("Error: in writing to temporary file \""+ @@ -1934,11 +2030,11 @@ int colvarbias_meta::reopen_replica_buffer_file() { int error_code = COLVARS_OK; colvarproxy *proxy = cvm::proxy; - if (proxy->output_stream(replica_hills_file)) { + if (proxy->output_stream(replica_hills_file, "replica hills file")) { error_code |= proxy->close_output_stream(replica_hills_file); } error_code |= proxy->remove_file(replica_hills_file); - std::ostream &replica_hills_os = proxy->output_stream(replica_hills_file); + std::ostream &replica_hills_os = proxy->output_stream(replica_hills_file, "replica hills file"); if (replica_hills_os) { replica_hills_os.setf(std::ios::scientific, std::ios::floatfield); } else { @@ -2037,43 +2133,3 @@ colvarbias_meta::hill::operator = (colvarbias_meta::hill const &h) colvarbias_meta::hill::~hill() {} - - -std::ostream & operator << (std::ostream &os, colvarbias_meta::hill const &h) -{ - os.setf(std::ios::scientific, std::ios::floatfield); - - os << "hill {\n"; - os << " step " << std::setw(cvm::it_width) << h.it << "\n"; - os << " weight " - << std::setprecision(cvm::en_prec) - << std::setw(cvm::en_width) - << h.W << "\n"; - - if (h.replica.size()) - os << " replicaID " << h.replica << "\n"; - - size_t i; - os << " centers "; - for (i = 0; i < (h.centers).size(); i++) { - os << " " - << std::setprecision(cvm::cv_prec) - << std::setw(cvm::cv_width) - << h.centers[i]; - } - os << "\n"; - - // For backward compatibility, write the widths instead of the sigmas - os << " widths "; - for (i = 0; i < (h.sigmas).size(); i++) { - os << " " - << std::setprecision(cvm::cv_prec) - << std::setw(cvm::cv_width) - << 2.0 * h.sigmas[i]; - } - os << "\n"; - - os << "}\n"; - - return os; -} diff --git a/lib/colvars/colvarbias_meta.h b/lib/colvars/colvarbias_meta.h index bac2ff74d4..a765a60c71 100644 --- a/lib/colvars/colvarbias_meta.h +++ b/lib/colvars/colvarbias_meta.h @@ -17,6 +17,7 @@ #include "colvarbias.h" #include "colvargrid.h" + /// Metadynamics bias (implementation of \link colvarbias \endlink) class colvarbias_meta : public virtual colvarbias, @@ -51,14 +52,32 @@ public: virtual int update_bias(); virtual int update_grid_data(); virtual int replica_share(); + virtual size_t replica_share_freq() const; virtual int calc_energy(std::vector const *values); virtual int calc_forces(std::vector const *values); virtual std::string const get_state_params() const; virtual int set_state_params(std::string const &state_conf); - virtual std::ostream & write_state_data(std::ostream &os); - virtual std::istream & read_state_data(std::istream &os); + + virtual std::ostream &write_state_data(std::ostream &os); + virtual cvm::memory_stream &write_state_data(cvm::memory_stream &os); + virtual std::istream &read_state_data(std::istream &is); + virtual cvm::memory_stream &read_state_data(cvm::memory_stream &is); + +private: + + template + IST &read_grid_data_template_(IST &is, std::string const &key, GT *grid, GT *backup_grid); + + template IST &read_state_data_template_(IST &is); + + template OST &write_state_data_template_(OST &os); + +public: + + /// Function called by read_state_data() to execute rebinning (if requested) + void rebin_grids_after_restart(); virtual int setup_output(); virtual int write_output_files(); @@ -105,11 +124,24 @@ protected: /// Regenerate the hills_off_grid list void recount_hills_off_grid(hill_iter h_first, hill_iter h_last, - colvar_grid_scalar *ge); + colvar_grid_scalar *ge); - /// Read a hill from a file + template OST &write_hill_template_(OST &os, colvarbias_meta::hill const &h); + + /// Write a hill to a formatted stream + std::ostream &write_hill(std::ostream &os, hill const &h); + + /// Write a hill to an unformatted stream + cvm::memory_stream &write_hill(cvm::memory_stream &os, hill const &h); + + template IST &read_hill_template_(IST &is); + + /// Read a new hill from a formatted stream std::istream & read_hill(std::istream &is); + /// Read a new hill from an unformatted stream + cvm::memory_stream & read_hill(cvm::memory_stream &is); + /// \brief Add a new hill; if a .hills trajectory is written, /// write it there; if there is more than one replica, communicate /// it to the others @@ -230,7 +262,7 @@ protected: std::vector replicas; /// \brief Frequency at which data the "mirror" biases are updated - size_t replica_update_freq; + size_t replica_update_freq = 0; /// List of replicas (and their output list files): contents are /// copied into replicas_registry for convenience @@ -258,6 +290,8 @@ protected: /// Position within replica_hills_file (when reading it) std::streampos replica_hills_file_pos; + /// Cache of the hills trajectory + std::ostringstream hills_traj_os_buf; }; @@ -399,9 +433,6 @@ public: /// Represent the hill ina string suitable for a trajectory file std::string output_traj(); - /// Write the hill to an output stream - friend std::ostream & operator << (std::ostream &os, hill const &h); - }; diff --git a/lib/colvars/colvarbias_restraint.cpp b/lib/colvars/colvarbias_restraint.cpp index a7963c4f8f..6ea00375e3 100644 --- a/lib/colvars/colvarbias_restraint.cpp +++ b/lib/colvars/colvarbias_restraint.cpp @@ -27,7 +27,10 @@ colvarbias_restraint::colvarbias_restraint(char const *key) int colvarbias_restraint::init(std::string const &conf) { - colvarbias::init(conf); + int err = colvarbias::init(conf); + if (err != COLVARS_OK) { + return err; + } enable(f_cvb_apply_force); colvarbias_ti::init(conf); @@ -202,6 +205,8 @@ int colvarbias_restraint_moving::init(std::string const &conf) first_step = cvm::step_absolute(); + cvm::log("Initial step for restraint change: " + cvm::to_str(first_step) + "\n"); + get_keyval(conf, "targetNumSteps", target_nsteps, target_nsteps); if (!target_nsteps) { cvm::error("Error: targetNumSteps must be non-zero.\n", COLVARS_INPUT_ERROR); @@ -232,10 +237,9 @@ std::string const colvarbias_restraint_moving::get_state_params() const std::ostringstream os; os.setf(std::ios::scientific, std::ios::floatfield); if (b_chg_centers || b_chg_force_k) { - // TODO move this + os << "firstStep " << std::setw(cvm::it_width) << first_step << "\n"; if (target_nstages) { - os << "stage " << std::setw(cvm::it_width) - << stage << "\n"; + os << "stage " << std::setw(cvm::it_width) << stage << "\n"; } } return os.str(); @@ -245,6 +249,12 @@ std::string const colvarbias_restraint_moving::get_state_params() const int colvarbias_restraint_moving::set_state_params(std::string const &conf) { if (b_chg_centers || b_chg_force_k) { + auto first_step_flags = colvarparse::parse_restart; + if (cvm::main()->restart_version_number() > 20230906) { + // Only require the first step when the code could produce it + first_step_flags = colvarparse::parse_restart | colvarparse::parse_required; + } + get_keyval(conf, "firstStep", first_step, first_step, first_step_flags); if (target_nstages) { get_keyval(conf, "stage", stage, stage, colvarparse::parse_restart | colvarparse::parse_required); @@ -837,18 +847,6 @@ int colvarbias_restraint_harmonic::set_state_params(std::string const &conf) } -std::ostream & colvarbias_restraint_harmonic::write_state_data(std::ostream &os) -{ - return colvarbias_ti::write_state_data(os); -} - - -std::istream & colvarbias_restraint_harmonic::read_state_data(std::istream &is) -{ - return colvarbias_ti::read_state_data(is); -} - - std::ostream & colvarbias_restraint_harmonic::write_traj_label(std::ostream &os) { colvarbias_restraint::write_traj_label(os); @@ -1136,18 +1134,6 @@ int colvarbias_restraint_harmonic_walls::set_state_params(std::string const &con } -std::ostream & colvarbias_restraint_harmonic_walls::write_state_data(std::ostream &os) -{ - return colvarbias_ti::write_state_data(os); -} - - -std::istream & colvarbias_restraint_harmonic_walls::read_state_data(std::istream &is) -{ - return colvarbias_ti::read_state_data(is); -} - - std::ostream & colvarbias_restraint_harmonic_walls::write_traj_label(std::ostream &os) { colvarbias_restraint::write_traj_label(os); @@ -1293,18 +1279,6 @@ int colvarbias_restraint_linear::set_state_params(std::string const &conf) } -std::ostream & colvarbias_restraint_linear::write_state_data(std::ostream &os) -{ - return colvarbias_ti::write_state_data(os); -} - - -std::istream & colvarbias_restraint_linear::read_state_data(std::istream &is) -{ - return colvarbias_ti::read_state_data(is); -} - - std::ostream & colvarbias_restraint_linear::write_traj_label(std::ostream &os) { colvarbias_restraint::write_traj_label(os); @@ -1338,7 +1312,10 @@ int colvarbias_restraint_histogram::init(std::string const &conf) { int error_code = COLVARS_OK; - colvarbias::init(conf); + int err = colvarbias::init(conf); + if (err != COLVARS_OK) { + return err; + } enable(f_cvb_apply_force); cvm::main()->cite_feature("histogramRestraint colvar bias implementation"); diff --git a/lib/colvars/colvarbias_restraint.h b/lib/colvars/colvarbias_restraint.h index 45a96d14f8..f030a5cad7 100644 --- a/lib/colvars/colvarbias_restraint.h +++ b/lib/colvars/colvarbias_restraint.h @@ -38,9 +38,6 @@ public: virtual std::string const get_state_params() const; virtual int set_state_params(std::string const &conf); - // virtual std::ostream & write_state_data(std::ostream &os); - // virtual std::istream & read_state_data(std::istream &os); - virtual std::ostream & write_traj_label(std::ostream &os); virtual std::ostream & write_traj(std::ostream &os); @@ -242,8 +239,6 @@ public: virtual int update(); virtual std::string const get_state_params() const; virtual int set_state_params(std::string const &conf); - virtual std::ostream & write_state_data(std::ostream &os); - virtual std::istream & read_state_data(std::istream &os); virtual std::ostream & write_traj_label(std::ostream &os); virtual std::ostream & write_traj(std::ostream &os); virtual int change_configuration(std::string const &conf); @@ -269,8 +264,6 @@ public: virtual int update(); virtual std::string const get_state_params() const; virtual int set_state_params(std::string const &conf); - virtual std::ostream & write_state_data(std::ostream &os); - virtual std::istream & read_state_data(std::istream &os); virtual std::ostream & write_traj_label(std::ostream &os); virtual std::ostream & write_traj(std::ostream &os); @@ -311,8 +304,6 @@ public: virtual std::string const get_state_params() const; virtual int set_state_params(std::string const &conf); - virtual std::ostream & write_state_data(std::ostream &os); - virtual std::istream & read_state_data(std::istream &os); virtual std::ostream & write_traj_label(std::ostream &os); virtual std::ostream & write_traj(std::ostream &os); diff --git a/lib/colvars/colvarcomp.cpp b/lib/colvars/colvarcomp.cpp index abe522a249..e6729f43a7 100644 --- a/lib/colvars/colvarcomp.cpp +++ b/lib/colvars/colvarcomp.cpp @@ -19,45 +19,40 @@ colvar::cvc::cvc() { description = "uninitialized colvar component"; - b_try_scalable = true; - sup_coeff = 1.0; - sup_np = 1; - period = 0.0; - wrap_center = 0.0; - width = 0.0; cvc::init_dependencies(); } -colvar::cvc::cvc(std::string const &conf) +int colvar::cvc::update_description() { - description = "uninitialized colvar component"; - b_try_scalable = true; - sup_coeff = 1.0; - sup_np = 1; - period = 0.0; - wrap_center = 0.0; - width = 0.0; - init_dependencies(); - colvar::cvc::init(conf); + if (name.size() > 0) { + description = "cvc \"" + name + "\""; + } else { + description = "unnamed cvc"; + } + description += " of type \"" + function_type() + "\""; + return COLVARS_OK; +} + + +std::string colvar::cvc::function_type() const +{ + if (function_types.empty()) { + return "unset"; + } + return function_types.back(); } int colvar::cvc::set_function_type(std::string const &type) { - function_type = type; - if (function_types.size() == 0) { - function_types.push_back(function_type); - } else { - if (function_types.back() != function_type) { - function_types.push_back(function_type); - } - } + function_types.push_back(type); + update_description(); + cvm::main()->cite_feature(function_types[0]+" colvar component"); for (size_t i = function_types.size()-1; i > 0; i--) { cvm::main()->cite_feature(function_types[i]+" colvar component"+ " (derived from "+function_types[i-1]+")"); } - cvm::main()->cite_feature(function_types[0]+" colvar component"); return COLVARS_OK; } @@ -67,6 +62,8 @@ int colvar::cvc::init(std::string const &conf) if (cvm::debug()) cvm::log("Initializing cvc base object.\n"); + int error_code = COLVARS_OK; + std::string const old_name(name); if (name.size() > 0) { @@ -74,18 +71,14 @@ int colvar::cvc::init(std::string const &conf) } if (get_keyval(conf, "name", name, name)) { - if (name.size() > 0) { - description = "cvc \"" + name + "\" of type " + function_type; - } else { - description = "unnamed cvc"; - } if ((name != old_name) && (old_name.size() > 0)) { - cvm::error("Error: cannot rename component \""+old_name+ - "\" after initialization (new name = \""+name+"\")", - COLVARS_INPUT_ERROR); + error_code |= cvm::error("Error: cannot rename component \"" + old_name + + "\" after initialization (new name = \"" + name + "\")", + COLVARS_INPUT_ERROR); name = old_name; } } + update_description(); get_keyval(conf, "componentCoeff", sup_coeff, sup_coeff); get_keyval(conf, "componentExp", sup_np, sup_np); @@ -102,6 +95,24 @@ int colvar::cvc::init(std::string const &conf) register_param("period", reinterpret_cast(&period)); register_param("wrapAround", reinterpret_cast(&wrap_center)); + if (period != 0.0) { + if (!is_available(f_cvc_periodic)) { + error_code |= + cvm::error("Error: invalid use of period and/or " + "wrapAround in a \"" + + function_type() + "\" component.\n" + "Period: " + cvm::to_str(period) + + " wrapAround: " + cvm::to_str(wrap_center), + COLVARS_INPUT_ERROR); + } else { + enable(f_cvc_periodic); + } + } + + if ((wrap_center != 0.0) && !is_enabled(f_cvc_periodic)) { + error_code |= cvm::error("Error: wrapAround was defined for a non-periodic component.\n", + COLVARS_INPUT_ERROR); + } + get_keyval_feature(this, conf, "debugGradients", f_cvc_debug_gradient, false, parse_silent); @@ -119,7 +130,7 @@ int colvar::cvc::init(std::string const &conf) if (cvm::debug()) cvm::log("Done initializing cvc base object.\n"); - return cvm::get_error(); + return error_code; } @@ -157,10 +168,13 @@ cvm::atom_group *colvar::cvc::parse_group(std::string const &conf, char const *group_key, bool optional) { - cvm::atom_group *group = NULL; + int error_code = COLVARS_OK; + + cvm::atom_group *group = nullptr; std::string group_conf; if (key_lookup(conf, group_key, &group_conf)) { + group = new cvm::atom_group(group_key); if (b_try_scalable) { @@ -177,31 +191,42 @@ cvm::atom_group *colvar::cvc::parse_group(std::string const &conf, // TODO check for other types of parallelism here } - if (group_conf.size() == 0) { - cvm::error("Error: atom group \""+group->key+ - "\" is set, but has no definition.\n", - COLVARS_INPUT_ERROR); + if (group_conf.empty()) { + error_code |= cvm::error("Error: atom group \"" + group->key + "\" has no definition.\n", + COLVARS_INPUT_ERROR); + delete group; + group = nullptr; + // Silence unused variable warning; TODO stop returning a pointer + (void) error_code; return group; } cvm::increase_depth(); - if (group->parse(group_conf) == COLVARS_OK) { + error_code |= group->parse(group_conf); + if (error_code != COLVARS_OK) { + error_code |= + cvm::error("Error: in definition of atom group \"" + std::string(group_key) + "\".", + COLVARS_INPUT_ERROR); + delete group; + group = nullptr; + } else { register_atom_group(group); - } - group->check_keywords(group_conf, group_key); - if (cvm::get_error()) { - cvm::error("Error parsing definition for atom group \""+ - std::string(group_key)+"\".", COLVARS_INPUT_ERROR); + error_code |= group->check_keywords(group_conf, group_key); } cvm::decrease_depth(); } else { - if (! optional) { - cvm::error("Error: definition for atom group \""+ - std::string(group_key)+"\" not found.\n"); + + if (!optional) { + error_code |= + cvm::error("Error: atom group \"" + std::string(group_key) + "\" is required.\n", + COLVARS_INPUT_ERROR); } } + // Silence unused variable warning; TODO stop returning a pointer + (void) error_code; + return group; } @@ -228,6 +253,8 @@ int colvar::cvc::init_dependencies() { init_feature(f_cvc_upper_boundary, "defined_upper_boundary", f_type_static); + init_feature(f_cvc_explicit_atom_groups, "explicit_atom_groups", f_type_static); + init_feature(f_cvc_gradient, "gradient", f_type_dynamic); init_feature(f_cvc_explicit_gradient, "explicit_gradient", f_type_static); @@ -264,6 +291,7 @@ int colvar::cvc::init_dependencies() { init_feature(f_cvc_collect_atom_ids, "collect_atom_ids", f_type_dynamic); require_feature_children(f_cvc_collect_atom_ids, f_ag_collect_atom_ids); + require_feature_self(f_cvc_collect_atom_ids, f_cvc_explicit_atom_groups); // TODO only enable this when f_ag_scalable can be turned on for a pre-initialized group // require_feature_children(f_cvc_scalable, f_ag_scalable); @@ -281,7 +309,7 @@ int colvar::cvc::init_dependencies() { // default as available, not enabled // except dynamic features which default as unavailable feature_states.reserve(f_cvc_ntot); - for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + for (i = feature_states.size(); i < colvardeps::f_cvc_ntot; i++) { bool avail = is_dynamic(i) ? false : true; feature_states.push_back(feature_state(avail, false)); } @@ -292,6 +320,8 @@ int colvar::cvc::init_dependencies() { feature_states[f_cvc_gradient].available = true; feature_states[f_cvc_collect_atom_ids].available = true; + feature_states[f_cvc_periodic].available = false; + // CVCs are enabled from the start - get disabled based on flags enable(f_cvc_active); @@ -314,7 +344,7 @@ int colvar::cvc::init_dependencies() { int colvar::cvc::setup() { - description = "cvc " + name; + update_description(); return COLVARS_OK; } @@ -349,6 +379,7 @@ void colvar::cvc::init_as_angle() void colvar::cvc::init_as_periodic_angle() { x.type(colvarvalue::type_scalar); + provide(f_cvc_periodic); enable(f_cvc_periodic); period = 360.0; init_scalar_boundaries(-180.0, 180.0); @@ -372,6 +403,7 @@ void colvar::cvc::register_atom_group(cvm::atom_group *ag) { atom_groups.push_back(ag); add_child(ag); + enable(f_cvc_explicit_atom_groups); } @@ -411,29 +443,21 @@ int colvar::cvc::set_param(std::string const ¶m_name, void colvar::cvc::read_data() { - size_t ig; - for (ig = 0; ig < atom_groups.size(); ig++) { - cvm::atom_group &atoms = *(atom_groups[ig]); - atoms.reset_atoms_data(); - atoms.read_positions(); - atoms.calc_required_properties(); - // each atom group will take care of its own fitting_group, if defined + if (is_enabled(f_cvc_explicit_atom_groups)) { + for (auto agi = atom_groups.begin(); agi != atom_groups.end(); agi++) { + cvm::atom_group &atoms = *(*agi); + atoms.reset_atoms_data(); + atoms.read_positions(); + atoms.calc_required_properties(); + // each atom group will take care of its own fitting_group, if defined + } } - -//// Don't try to get atom velocities, as no back-end currently implements it -// if (tasks[task_output_velocity] && !tasks[task_fdiff_velocity]) { -// for (i = 0; i < cvcs.size(); i++) { -// for (ig = 0; ig < cvcs[i]->atom_groups.size(); ig++) { -// cvcs[i]->atom_groups[ig]->read_velocities(); -// } -// } -// } } -std::vector > colvar::cvc::get_atom_lists() +std::vector> colvar::cvc::get_atom_lists() { - std::vector > lists; + std::vector> lists; std::vector::iterator agi = atom_groups.begin(); for ( ; agi != atom_groups.end(); ++agi) { @@ -462,12 +486,12 @@ void colvar::cvc::collect_gradients(std::vector const &atom_ids, std::vecto // If necessary, apply inverse rotation to get atomic // gradient in the laboratory frame if (ag.is_enabled(f_ag_rotate)) { - cvm::rotation const rot_inv = ag.rot.inverse(); + const auto rot_inv = ag.rot.inverse().matrix(); for (size_t k = 0; k < ag.size(); k++) { size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), ag[k].id) - atom_ids.begin(); - atomic_gradients[a] += coeff * rot_inv.rotate(ag[k].grad); + atomic_gradients[a] += coeff * (rot_inv * ag[k].grad); } } else { @@ -494,7 +518,7 @@ void colvar::cvc::collect_gradients(std::vector const &atom_ids, std::vecto void colvar::cvc::calc_force_invgrads() { cvm::error("Error: calculation of inverse gradients is not implemented " - "for colvar components of type \""+function_type+"\".\n", + "for colvar components of type \""+function_type()+"\".\n", COLVARS_NOT_IMPLEMENTED); } @@ -502,7 +526,7 @@ void colvar::cvc::calc_force_invgrads() void colvar::cvc::calc_Jacobian_derivative() { cvm::error("Error: calculation of inverse gradients is not implemented " - "for colvar components of type \""+function_type+"\".\n", + "for colvar components of type \""+function_type()+"\".\n", COLVARS_NOT_IMPLEMENTED); } @@ -515,6 +539,18 @@ void colvar::cvc::calc_fit_gradients() } +void colvar::cvc::apply_force(colvarvalue const &cvforce) +{ + if (is_enabled(f_cvc_explicit_atom_groups)) { + for (auto agi = atom_groups.begin(); agi != atom_groups.end(); agi++) { + if (!(*agi)->noforce) { + (*agi)->apply_colvar_force(cvforce); + } + } + } +} + + void colvar::cvc::debug_gradients() { // this function should work for any scalar cvc: @@ -528,8 +564,8 @@ void colvar::cvc::debug_gradients() cvm::atom_group *group = atom_groups[ig]; if (group->b_dummy) continue; - cvm::rotation const rot_0 = group->rot; - cvm::rotation const rot_inv = group->rot.inverse(); + const auto rot_0 = group->rot.matrix(); + const auto rot_inv = group->rot.inverse().matrix(); cvm::real x_0 = x.real_value; if ((x.type() == colvarvalue::type_vector) && (x.size() == 1)) x_0 = x[0]; @@ -550,7 +586,7 @@ void colvar::cvc::debug_gradients() cvm::log((group->fitting_group ? std::string("refPosGroup") : group->key) + "[" + cvm::to_str(j) + "] = " + (group->is_enabled(f_ag_rotate) ? - cvm::to_str(rot_0.rotate(group_for_fit->fit_gradients[j])) : + cvm::to_str(rot_0 * (group_for_fit->fit_gradients[j])) : cvm::to_str(group_for_fit->fit_gradients[j]))); } } @@ -561,7 +597,7 @@ void colvar::cvc::debug_gradients() // tests are best conducted in the unrotated (simulation) frame cvm::rvector const atom_grad = (group->is_enabled(f_ag_rotate) ? - rot_inv.rotate((*group)[ia].grad) : + rot_inv * ((*group)[ia].grad) : (*group)[ia].grad); gradient_sum += atom_grad; @@ -634,34 +670,43 @@ void colvar::cvc::debug_gradients() } -cvm::real colvar::cvc::dist2(colvarvalue const &x1, - colvarvalue const &x2) const +cvm::real colvar::cvc::dist2(colvarvalue const &x1, colvarvalue const &x2) const { - return x1.dist2(x2); + cvm::real diff = x1.real_value - x2.real_value; + if (is_enabled(f_cvc_periodic)) { + cvm::real const shift = cvm::floor(diff / period + 0.5); + diff -= shift * period; + } + return diff * diff; } -colvarvalue colvar::cvc::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const +colvarvalue colvar::cvc::dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const { - return x1.dist2_grad(x2); + cvm::real diff = x1.real_value - x2.real_value; + if (is_enabled(f_cvc_periodic)) { + cvm::real const shift = cvm::floor(diff / period + 0.5); + diff -= shift * period; + } + return 2.0 * diff; } -colvarvalue colvar::cvc::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const +colvarvalue colvar::cvc::dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const { - return x2.dist2_grad(x1); + return cvc::dist2_lgrad(x1, x2); } -void colvar::cvc::wrap(colvarvalue & /* x_unwrapped */) const +void colvar::cvc::wrap(colvarvalue &x_unwrapped) const { - return; + if (is_enabled(f_cvc_periodic)) { + cvm::real const shift = cvm::floor((x_unwrapped.real_value - wrap_center) / period + 0.5); + x_unwrapped.real_value -= shift * period; + } } - // Static members std::vector colvar::cvc::cvc_features; diff --git a/lib/colvars/colvarcomp.h b/lib/colvars/colvarcomp.h index 87d3e27a8f..334fdc1f6e 100644 --- a/lib/colvars/colvarcomp.h +++ b/lib/colvars/colvarcomp.h @@ -19,20 +19,12 @@ // this can be done straightforwardly by using the macro: // simple_scalar_dist_functions (derived_class) +#include #include "colvarmodule.h" -#include "colvar.h" #include "colvaratoms.h" -#include "colvar_arithmeticpath.h" - -#if (__cplusplus >= 201103L) -// C++11-only functions +#include "colvar.h" #include "colvar_geometricpath.h" -#include -#include -#endif - -#include /// \brief Colvar component (base class for collective variables) @@ -82,37 +74,29 @@ public: /// cvc instance when debugging) std::string name; - /// \brief Description of the type of collective variable - /// - /// Normally this string is set by the parent \link colvar \endlink - /// object within its constructor, when all \link colvar::cvc \endlink - /// objects are initialized; therefore the main "config string" - /// constructor does not need to define it. If a \link colvar::cvc - /// \endlink is initialized and/or a different constructor is used, - /// this variable definition should be set within the constructor. - std::string function_type; + /// String identifier for the type of collective variable + std::string function_type() const; /// Keyword used in the input to denote this CVC std::string config_key; /// \brief Coefficient in the polynomial combination (default: 1.0) - cvm::real sup_coeff; + cvm::real sup_coeff = 1.0; + /// \brief Exponent in the polynomial combination (default: 1) - int sup_np; + int sup_np = 1; /// \brief Period of the values of this CVC (default: 0.0, non periodic) - cvm::real period; + cvm::real period = 0.0; /// \brief If the component is periodic, wrap around this value (default: 0.0) - cvm::real wrap_center; + cvm::real wrap_center = 0.0; - /// \brief Constructor - /// - /// Calls the init() function of the class - cvc(std::string const &conf); + /// Constructor + cvc(); - /// Set the value of \link function_type \endlink and its dependencies - int set_function_type(std::string const &type); + /// Destructor + virtual ~cvc(); /// An init function should be defined for every class inheriting from cvc /// \param conf Contents of the configuration file pertaining to this \link @@ -122,38 +106,20 @@ public: /// \brief Initialize dependency tree virtual int init_dependencies(); - /// \brief Within the constructor, make a group parse its own - /// options from the provided configuration string - /// Returns reference to new group - cvm::atom_group *parse_group(std::string const &conf, - char const *group_key, - bool optional = false); - - /// \brief Parse options pertaining to total force calculation - virtual int init_total_force_params(std::string const &conf); - /// \brief After construction, set data related to dependency handling int setup(); - /// \brief Default constructor (used when \link colvar::cvc \endlink - /// objects are declared within other ones) - cvc(); - - /// Destructor - virtual ~cvc(); - - /// \brief Implementation of the feature list for colvar - static std::vector cvc_features; - /// \brief Implementation of the feature list accessor for colvar virtual const std::vector &features() const { return cvc_features; } + virtual std::vector &modify_features() { return cvc_features; } + static void delete_features() { for (size_t i=0; i < cvc_features.size(); i++) { delete cvc_features[i]; @@ -211,16 +177,12 @@ public: /// collective variable force, usually coming from the biases and /// eventually manipulated by the parent \link colvar \endlink /// object - virtual void apply_force(colvarvalue const &cvforce) = 0; + virtual void apply_force(colvarvalue const &cvforce); - /// \brief Square distance between x1 and x2 (can be redefined to - /// transparently implement constraints, symmetries and - /// periodicities) - /// - /// colvar::cvc::dist2() and the related functions are - /// declared as "const" functions, but not "static", because - /// additional parameters defining the metrics (e.g. the - /// periodicity) may be specific to each colvar::cvc object. + /// Square distance between x1 and x2 (can be redefined to transparently + /// implement metrics in multi-dimensional spaces with or without + /// constraints, symmetries and periodicities). The default implementation + /// assumes scalar numbers and no symmetries or periodicities. /// /// If symmetries or periodicities are present, the /// colvar::cvc::dist2() should be redefined to return the @@ -235,12 +197,6 @@ public: /// i.e. already deprived of its component normal to the constraint /// hypersurface. /// - /// Finally, another useful application, if you are performing very - /// many operations with these functions, could be to override the - /// \link colvarvalue \endlink member functions and access directly - /// its member data. For instance: to define dist2(x1,x2) as - /// (x2.real_value-x1.real_value)*(x2.real_value-x1.real_value) in - /// case of a scalar \link colvarvalue \endlink type. virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; @@ -273,7 +229,7 @@ public: virtual int set_param(std::string const ¶m_name, void const *new_value); /// \brief Whether or not this CVC will be computed in parallel whenever possible - bool b_try_scalable; + bool b_try_scalable = true; /// Forcibly set value of CVC - useful for driving an external coordinate, /// eg. lambda dynamics @@ -283,6 +239,22 @@ public: protected: + /// Set the value of \link function_type \endlink and its dependencies + int set_function_type(std::string const &type); + + /// Update the description string based on name and type + int update_description(); + + /// Parse a group definition + cvm::atom_group *parse_group(std::string const &conf, char const *group_key, + bool optional = false); + + /// \brief Parse options pertaining to total force calculation + virtual int init_total_force_params(std::string const &conf); + + /// \brief Implementation of the feature list for colvar + static std::vector cvc_features; + /// Record the type of this class as well as those it is derived from std::vector function_types; @@ -320,8 +292,8 @@ protected: /// \brief Location of the upper boundary (not defined by user choice) colvarvalue upper_boundary; - /// \brief CVC-specific default colvar width - cvm::real width; + /// \brief CVC-specific default colvar width (default: not provided) + cvm::real width = 0.0; }; @@ -352,26 +324,19 @@ class colvar::distance { protected: /// First atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Second atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; /// Vector distance, cached to be recycled cvm::rvector dist_v; public: - distance(std::string const &conf); distance(); virtual ~distance() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -383,25 +348,22 @@ class colvar::distance_vec : public colvar::distance { public: - distance_vec(std::string const &conf); distance_vec(); virtual ~distance_vec() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - /// Redefined to handle the box periodicity - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the box periodicity - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the box periodicity - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual void wrap(colvarvalue &x_unwrapped) const; }; - /// \brief Colvar component: distance unit vector (direction) between /// centers of mass of two groups (colvarvalue::type_unit3vector type, /// range [-1:1]x[-1:1]x[-1:1]) @@ -409,21 +371,19 @@ class colvar::distance_dir : public colvar::distance { public: - distance_dir(std::string const &conf); distance_dir(); virtual ~distance_dir() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - /// Redefined to override the distance ones - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to override the distance ones - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to override the distance ones - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -435,11 +395,11 @@ class colvar::distance_z { protected: /// Main atom group - cvm::atom_group *main; + cvm::atom_group *main = nullptr; /// Reference atom group - cvm::atom_group *ref1; + cvm::atom_group *ref1 = nullptr; /// Optional, second ref atom group - cvm::atom_group *ref2; + cvm::atom_group *ref2 = nullptr; /// Vector on which the distance vector is projected cvm::rvector axis; /// Norm of the axis @@ -447,24 +407,15 @@ protected: /// Vector distance, cached to be recycled cvm::rvector dist_v; /// Flag: using a fixed axis vector? - bool fixed_axis; + bool fixed_axis = true; public: - distance_z(std::string const &conf); distance_z(); virtual ~distance_z() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// \brief Redefined to make use of the user-provided period - virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -480,20 +431,12 @@ protected: /// Vector distances cvm::rvector v12, v13; public: - distance_xy(std::string const &conf); distance_xy(); virtual ~distance_xy() {} virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -502,28 +445,16 @@ public: class colvar::polar_phi : public colvar::cvc { +protected: + cvm::atom_group *atoms = nullptr; + cvm::real r, theta, phi; + public: - polar_phi(std::string const &conf); polar_phi(); virtual ~polar_phi() {} -protected: - cvm::atom_group *atoms; - cvm::real r, theta, phi; -public: + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - /// Redefined to handle the 2*PI periodicity - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -533,27 +464,18 @@ class colvar::polar_theta : public colvar::cvc { public: - polar_theta(std::string const &conf); polar_theta(); virtual ~polar_theta() {} + virtual int init(std::string const &conf); protected: - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; cvm::real r, theta, phi; public: virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - /// Redefined to override the distance ones - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to override the distance ones - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to override the distance ones - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; + /// \brief Colvar component: average distance between two groups of atoms, weighted as the sixth power, /// as in NMR refinements(colvarvalue::type_scalar type, range (0:*)) class colvar::distance_inv @@ -561,23 +483,17 @@ class colvar::distance_inv { protected: /// First atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Second atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; /// Components of the distance vector orthogonal to the axis - int exponent; + int exponent = 6; public: - distance_inv(std::string const &conf); + distance_inv(); virtual ~distance_inv() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -589,45 +505,41 @@ class colvar::distance_pairs { protected: /// First atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Second atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; public: - distance_pairs(std::string const &conf); distance_pairs(); virtual ~distance_pairs() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); + /// Redefined to deal with multiple dimensions + virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual void wrap(colvarvalue &x_unwrapped) const; }; - /// \brief Colvar component: dipole magnitude of a molecule class colvar::dipole_magnitude : public colvar::cvc { protected: /// Dipole atom group - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; cvm::atom_pos dipoleV; public: - /// Initialize by parsing the configuration - dipole_magnitude (std::string const &conf); - dipole_magnitude (cvm::atom const &a1); dipole_magnitude(); virtual ~dipole_magnitude() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - //virtual void calc_force_invgrads(); - //virtual void calc_Jacobian_derivative(); - virtual void apply_force (colvarvalue const &force); - virtual cvm::real dist2 (colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad (colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad (colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -639,21 +551,15 @@ class colvar::gyration { protected: /// Atoms involved - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; public: - gyration(std::string const &conf); + gyration(); virtual ~gyration() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -664,19 +570,10 @@ class colvar::inertia : public colvar::gyration { public: - /// Constructor - inertia(std::string const &conf); inertia(); virtual ~inertia() {} virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -690,19 +587,11 @@ protected: /// Vector on which the inertia tensor is projected cvm::rvector axis; public: - /// Constructor - inertia_z(std::string const &conf); inertia_z(); virtual ~inertia_z() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -715,7 +604,7 @@ class colvar::eigenvector protected: /// Atom group - cvm::atom_group * atoms; + cvm::atom_group * atoms = nullptr; /// Reference coordinates std::vector ref_pos; @@ -728,20 +617,13 @@ protected: public: - /// Constructor - eigenvector(std::string const &conf); + eigenvector(); virtual ~eigenvector() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -754,11 +636,11 @@ class colvar::angle protected: /// Atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; /// Atom group - cvm::atom_group *group3; + cvm::atom_group *group3 = nullptr; /// Inter site vectors cvm::rvector r21, r23; @@ -770,25 +652,18 @@ protected: /// Compute total force on first site only to avoid unwanted /// coupling to other colvars (see e.g. Ciccotti et al., 2005) /// (or to allow dummy atoms) - bool b_1site_force; + bool b_1site_force = false; public: - /// Initialize by parsing the configuration - angle(std::string const &conf); + angle(); /// \brief Initialize the three groups after three atoms angle(cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3); virtual ~angle() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -801,11 +676,11 @@ class colvar::dipole_angle protected: /// Dipole atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; /// Atom group - cvm::atom_group *group3; + cvm::atom_group *group3 = nullptr; /// Inter site vectors cvm::rvector r21, r23; @@ -817,24 +692,14 @@ protected: /// Compute total force on first site only to avoid unwanted /// coupling to other colvars (see e.g. Ciccotti et al., 2005) /// (or to allow dummy atoms) - bool b_1site_force; + bool b_1site_force = false; public: - /// Initialize by parsing the configuration - dipole_angle (std::string const &conf); - /// \brief Initialize the three groups after three atoms - dipole_angle (cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3); dipole_angle(); virtual ~dipole_angle() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force (colvarvalue const &force); - virtual cvm::real dist2 (colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad (colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad (colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -847,45 +712,31 @@ class colvar::dihedral protected: /// Atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; /// Atom group - cvm::atom_group *group3; + cvm::atom_group *group3 = nullptr; /// Atom group - cvm::atom_group *group4; + cvm::atom_group *group4 = nullptr; /// Inter site vectors cvm::rvector r12, r23, r34; /// \brief Compute total force on first site only to avoid unwanted /// coupling to other colvars (see e.g. Ciccotti et al., 2005) - bool b_1site_force; + bool b_1site_force = false; public: - /// Initialize by parsing the configuration - dihedral(std::string const &conf); /// \brief Initialize the four groups after four atoms dihedral(cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3, cvm::atom const &a4); dihedral(); virtual ~dihedral() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - - /// Redefined to handle the 2*PI periodicity - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -897,46 +748,39 @@ class colvar::coordnum { protected: /// First atom group - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// Second atom group - cvm::atom_group *group2; + cvm::atom_group *group2 = nullptr; /// \brief "Cutoff" for isotropic calculation (default) cvm::real r0; /// \brief "Cutoff vector" for anisotropic calculation cvm::rvector r0_vec; /// \brief Whether r/r0 or \vec{r}*\vec{1/r0_vec} should be used - bool b_anisotropic; + bool b_anisotropic = false; /// Integer exponent of the function numerator - int en; + int en = 6; /// Integer exponent of the function denominator - int ed; + int ed = 12; /// If true, group2 will be treated as a single atom - bool b_group2_center_only; + bool b_group2_center_only = false; /// Tolerance for the pair list - cvm::real tolerance; + cvm::real tolerance = 0.0; /// Frequency of update of the pair list - int pairlist_freq; + int pairlist_freq = 100; /// Pair list - bool *pairlist; + bool *pairlist = nullptr; public: - coordnum(std::string const &conf); - ~coordnum(); - + coordnum(); + virtual ~coordnum(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; enum { ef_null = 0, @@ -981,31 +825,25 @@ class colvar::selfcoordnum protected: /// Selected atoms - cvm::atom_group *group1; + cvm::atom_group *group1 = nullptr; /// \brief "Cutoff" for isotropic calculation (default) cvm::real r0; /// Integer exponent of the function numerator - int en; + int en = 6; /// Integer exponent of the function denominator - int ed; - cvm::real tolerance; - int pairlist_freq; - bool *pairlist; + int ed = 12; + cvm::real tolerance = 0.0; + int pairlist_freq = 100; + + bool *pairlist = nullptr; public: - selfcoordnum(std::string const &conf); + selfcoordnum(); ~selfcoordnum(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; /// Main workhorse function template int compute_selfcoordnum(); @@ -1025,25 +863,17 @@ protected: cvm::rvector r0_vec; /// \brief Wheter dist/r0 or \vec{dist}*\vec{1/r0_vec} should ne be /// used - bool b_anisotropic; + bool b_anisotropic = false; /// Integer exponent of the function numerator - int en; + int en = 6; /// Integer exponent of the function denominator - int ed; + int ed = 12; public: - /// Constructor - groupcoordnum(std::string const &conf); + groupcoordnum(); virtual ~groupcoordnum() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1058,73 +888,22 @@ protected: /// \brief "Cutoff" distance between acceptor and donor cvm::real r0; /// Integer exponent of the function numerator - int en; + int en = 6; /// Integer exponent of the function denominator - int ed; + int ed = 8; public: - h_bond(std::string const &conf); /// Constructor for atoms already allocated h_bond(cvm::atom const &acceptor, cvm::atom const &donor, cvm::real r0, int en, int ed); h_bond(); virtual ~h_bond() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; - -/// \brief Colvar component: alpha helix content of a contiguous -/// segment of 5 or more residues, implemented as a sum of phi/psi -/// dihedral angles and hydrogen bonds (colvarvalue::type_scalar type, -/// range [0:1]) -// class colvar::alpha_dihedrals -// : public colvar::cvc -// { -// protected: - -// /// Alpha-helical reference phi value -// cvm::real phi_ref; - -// /// Alpha-helical reference psi value -// cvm::real psi_ref; - -// /// List of phi dihedral angles -// std::vector phi; - -// /// List of psi dihedral angles -// std::vector psi; - -// /// List of hydrogen bonds -// std::vector hb; - -// public: - -// alpha_dihedrals (std::string const &conf); -// alpha_dihedrals(); -// virtual ~alpha_dihedrals() {} -// virtual void calc_value(); -// virtual void calc_gradients(); -// virtual void apply_force (colvarvalue const &force); -// virtual cvm::real dist2 (colvarvalue const &x1, -// colvarvalue const &x2) const; -// virtual colvarvalue dist2_lgrad (colvarvalue const &x1, -// colvarvalue const &x2) const; -// virtual colvarvalue dist2_rgrad (colvarvalue const &x1, -// colvarvalue const &x2) const; -// }; - - - /// \brief Colvar component: alpha helix content of a contiguous /// segment of 5 or more residues, implemented as a sum of Ca-Ca-Ca /// angles and hydrogen bonds (colvarvalue::type_scalar type, range @@ -1135,10 +914,10 @@ class colvar::alpha_angles protected: /// Reference Calpha-Calpha angle (default: 88 degrees) - cvm::real theta_ref; + cvm::real theta_ref = 88.0; /// Tolerance on the Calpha-Calpha angle - cvm::real theta_tol; + cvm::real theta_tol = 15.0; /// List of Calpha-Calpha angles std::vector theta; @@ -1146,25 +925,28 @@ protected: /// List of hydrogen bonds std::vector hb; - /// Contribution of the hb terms - cvm::real hb_coeff; + /// Contribution of the HB terms + cvm::real hb_coeff = 0.5; + + /// Cutoff for HB + cvm::real r0; + + /// Integer exponent of the HB numerator + int en = 6; + + /// Integer exponent of the HB denominator + int ed = 8; public: - alpha_angles(std::string const &conf); alpha_angles(); virtual ~alpha_angles(); + virtual int init(std::string const &conf); void calc_value(); void calc_gradients(); /// Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1183,20 +965,14 @@ protected: public: - dihedPC(std::string const &conf); dihedPC(); - virtual ~dihedPC(); - void calc_value(); - void calc_gradients(); + virtual ~dihedPC(); + virtual int init(std::string const &conf); + virtual void calc_value(); + virtual void calc_gradients(); /// Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs - void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); - void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + virtual void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); + virtual void apply_force(colvarvalue const &force); }; @@ -1211,13 +987,16 @@ class colvar::orientation protected: /// Atom group - cvm::atom_group * atoms; + cvm::atom_group * atoms = nullptr; /// Center of geometry of the group cvm::atom_pos atoms_cog; /// Reference coordinates std::vector ref_pos; + /// Shifted atomic positions + std::vector shifted_pos; + /// Rotation object cvm::rotation rot; @@ -1225,45 +1004,50 @@ protected: /// quaternion, which may be annoying in the colvars trajectory cvm::quaternion ref_quat; + /// Rotation derivative + struct rotation_derivative_impl_; + std::unique_ptr rot_deriv_impl; + public: - orientation(std::string const &conf); orientation(); + virtual ~orientation(); virtual int init(std::string const &conf); - virtual ~orientation() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + /// Redefined to use quaternion metrics + virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use quaternion metrics + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use quaternion metrics + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use quaternion metrics + virtual void wrap(colvarvalue &x_unwrapped) const; }; - -/// \brief Colvar component: angle of rotation with respect to a set -/// of reference coordinates (colvarvalue::type_scalar type, range -/// [0:PI)) +/// Colvar component: angle of rotation with respect to a set of reference coordinates +/// (colvarvalue::type_scalar type, range [0:PI)) +/// This is also used to derive all other sub-rotation variables that return a scalar value class colvar::orientation_angle : public colvar::orientation { public: - orientation_angle(std::string const &conf); - virtual int init(std::string const &conf); + orientation_angle(); virtual ~orientation_angle() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; + /// Redefined to use scalar metrics + virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use scalar metrics + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use scalar metrics + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use scalar metrics + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -1272,23 +1056,14 @@ public: /// of reference coordinates (colvarvalue::type_scalar type, range /// [-1:1]) class colvar::orientation_proj - : public colvar::orientation + : public colvar::orientation_angle { public: - orientation_proj(std::string const &conf); orientation_proj(); - virtual int init(std::string const &conf); virtual ~orientation_proj() {} virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1296,7 +1071,7 @@ public: /// \brief Colvar component: projection of the orientation vector onto /// a predefined axis (colvarvalue::type_scalar type, range [-1:1]) class colvar::tilt - : public colvar::orientation + : public colvar::orientation_proj { protected: @@ -1304,18 +1079,11 @@ protected: public: - tilt(std::string const &conf); - virtual int init(std::string const &conf); + tilt(); virtual ~tilt() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1323,98 +1091,47 @@ public: /// \brief Colvar component: angle of rotation around a predefined /// axis (colvarvalue::type_scalar type, range [-PI:PI]) class colvar::spin_angle - : public colvar::orientation + : public colvar::tilt { -protected: - - cvm::rvector axis; - public: - spin_angle(std::string const &conf); spin_angle(); - virtual int init(std::string const &conf); virtual ~spin_angle() {} virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - /// Redefined to handle the 2*PI periodicity - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x_unwrapped) const; }; class colvar::euler_phi - : public colvar::orientation + : public colvar::orientation_angle { public: - euler_phi(std::string const &conf); euler_phi(); - virtual int init(std::string const &conf); virtual ~euler_phi() {} virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x_unwrapped) const; }; class colvar::euler_psi - : public colvar::orientation + : public colvar::orientation_angle { public: - euler_psi(std::string const &conf); euler_psi(); - virtual int init(std::string const &conf); virtual ~euler_psi() {} virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x_unwrapped) const; }; class colvar::euler_theta - : public colvar::orientation + : public colvar::orientation_angle { public: - euler_theta(std::string const &conf); euler_theta(); - virtual int init(std::string const &conf); virtual ~euler_theta() {} virtual void calc_value(); virtual void calc_gradients(); - virtual void apply_force(colvarvalue const &force); - // theta angle is a scalar variable and not periodic - // we need to override the virtual functions from orientation - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1428,33 +1145,29 @@ class colvar::rmsd protected: /// Atom group - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; /// Reference coordinates (for RMSD calculation only) /// Includes sets with symmetry permutations (n_permutations * n_atoms) std::vector ref_pos; /// Number of permutations of symmetry-related atoms - size_t n_permutations; + size_t n_permutations = 1; /// Index of the permutation yielding the smallest RMSD (0 for identity) - size_t best_perm_index; -public: + size_t best_perm_index = 0; - /// Constructor - rmsd(std::string const &conf); + /// Permutation RMSD input parsing + int init_permutation(std::string const &conf); + +public: + rmsd(); virtual ~rmsd() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void calc_force_invgrads(); virtual void calc_Jacobian_derivative(); - virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1466,16 +1179,27 @@ class colvar::cartesian { protected: /// Atom group - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; /// Which Cartesian coordinates to include std::vector axes; public: - cartesian(std::string const &conf); cartesian(); virtual ~cartesian() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); + /// Redefined to deal with multiple dimensions + virtual cvm::real dist2(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to deal with multiple dimensions + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -1487,18 +1211,11 @@ class colvar::alch_lambda protected: // No atom groups needed public: - alch_lambda(std::string const &conf); alch_lambda(); virtual ~alch_lambda() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; @@ -1510,58 +1227,38 @@ class colvar::alch_Flambda protected: // No atom groups needed public: - alch_Flambda(std::string const &conf); alch_Flambda(); virtual ~alch_Flambda() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); - virtual cvm::real dist2(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const; - virtual colvarvalue dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const; }; -class colvar::componentDisabled - : public colvar::cvc -{ -public: - componentDisabled(std::string const & /* conf */) { - cvm::error("Error: this component is not enabled in the current build; please see https://colvars.github.io/README-c++11.html"); - } - virtual ~componentDisabled() {} - virtual void calc_value() {} - virtual void calc_gradients() {} - virtual void apply_force(colvarvalue const & /* force */) {} -}; - - - -#if (__cplusplus >= 201103L) class colvar::CartesianBasedPath : public colvar::cvc { protected: + virtual void computeDistanceBetweenReferenceFrames(std::vector& result); virtual void computeDistanceToReferenceFrames(std::vector& result); /// Selected atoms - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; /// Fitting options - bool has_user_defined_fitting; + bool has_user_defined_fitting = false; /// Reference frames std::vector> reference_frames; std::vector> reference_fitting_frames; /// Atom groups for RMSD calculation together with reference frames std::vector comp_atoms; /// Total number of reference frames - size_t total_reference_frames; + size_t total_reference_frames = 0; public: - CartesianBasedPath(std::string const &conf); + CartesianBasedPath(); virtual ~CartesianBasedPath(); + virtual int init(std::string const &conf); virtual void calc_value() = 0; - virtual void apply_force(colvarvalue const &force) = 0; + /// Redefined to raise error because this is an abstract type + virtual void apply_force(colvarvalue const &force); }; /// \brief Colvar component: alternative path collective variable using geometry, variable s @@ -1577,8 +1274,9 @@ protected: virtual void prepareVectors(); virtual void updateDistanceToReferenceFrames(); public: - gspath(std::string const &conf); + gspath(); virtual ~gspath() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1599,8 +1297,9 @@ protected: virtual void prepareVectors(); virtual void updateDistanceToReferenceFrames(); public: - gzpath(std::string const &conf); + gzpath(); virtual ~gzpath() {} + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1618,11 +1317,23 @@ protected: protected: cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const; public: - linearCombination(std::string const &conf); + linearCombination(); virtual ~linearCombination(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); + /// Redefined to allow arbitrary dimensions + virtual cvm::real dist2(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to allow arbitrary dimensions + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to allow arbitrary dimensions + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to allow arbitrary dimensions + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -1631,7 +1342,7 @@ class colvar::customColvar : public colvar::linearCombination { protected: - bool use_custom_function; + bool use_custom_function = false; #ifdef LEPTON /// Vector of evaluators for custom functions using Lepton std::vector value_evaluators; @@ -1641,11 +1352,12 @@ protected: std::vector value_eval_var_refs; std::vector grad_eval_var_refs; /// Unused value that is written to when a variable simplifies out of a Lepton expression - double dev_null; + double dev_null = 0.0; #endif public: - customColvar(std::string const &conf); + customColvar(); virtual ~customColvar(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1663,17 +1375,27 @@ protected: /// If all sub-cvs use explicit gradients then we also use it bool use_explicit_gradients; /// Total number of reference frames - size_t total_reference_frames; + size_t total_reference_frames = 0; protected: virtual void computeDistanceToReferenceFrames(std::vector& result); /// Helper function to determine the distance between reference frames virtual void computeDistanceBetweenReferenceFrames(std::vector& result) const; cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const; public: - CVBasedPath(std::string const &conf); + CVBasedPath(); virtual ~CVBasedPath(); + virtual int init(std::string const &conf); virtual void calc_value() = 0; - virtual void apply_force(colvarvalue const &force) = 0; + /// Redefined to raise error because this is an abstract type + virtual void apply_force(colvarvalue const &force); + /// Redefined to use the metric of the returned colvarvalue (defined at runtime) + virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use the metric of the returned colvarvalue (defined at runtime) + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use the metric of the returned colvarvalue (defined at runtime) + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; + /// Redefined to use the metric of the returned colvarvalue (defined at runtime) + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -1688,8 +1410,9 @@ protected: virtual void updateDistanceToReferenceFrames(); virtual void prepareVectors(); public: - gspathCV(std::string const &conf); + gspathCV(); virtual ~gspathCV(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1704,23 +1427,56 @@ protected: virtual void updateDistanceToReferenceFrames(); virtual void prepareVectors(); public: - gzpathCV(std::string const &conf); + gzpathCV(); virtual ~gzpathCV(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); }; +struct ArithmeticPathImpl; +class colvar::aspath + : public colvar::CartesianBasedPath +{ +private: + std::unique_ptr impl_; + friend struct ArithmeticPathImpl; +public: + aspath(); + virtual ~aspath(); + virtual int init(std::string const &conf); + virtual void calc_value(); + virtual void calc_gradients(); + virtual void apply_force(colvarvalue const &force); +}; + +class colvar::azpath + : public colvar::CartesianBasedPath +{ +private: + std::unique_ptr impl_; + friend struct ArithmeticPathImpl; +public: + azpath(); + virtual ~azpath(); + virtual int init(std::string const &conf); + virtual void calc_value(); + virtual void calc_gradients(); + virtual void apply_force(colvarvalue const &force); +}; class colvar::aspathCV - : public colvar::CVBasedPath, public ArithmeticPathCV::ArithmeticPathBase + : public colvar::CVBasedPath { -protected: - virtual void updateDistanceToReferenceFrames(); +private: + std::unique_ptr impl_; + friend struct ArithmeticPathImpl; public: - aspathCV(std::string const &conf); + aspathCV(); virtual ~aspathCV(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1728,13 +1484,15 @@ public: class colvar::azpathCV - : public colvar::CVBasedPath, public ArithmeticPathCV::ArithmeticPathBase + : public colvar::CVBasedPath { -protected: - virtual void updateDistanceToReferenceFrames(); +private: + std::unique_ptr impl_; + friend struct ArithmeticPathImpl; public: - azpathCV(std::string const &conf); + azpathCV(); virtual ~azpathCV(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1745,6 +1503,7 @@ namespace neuralnetworkCV { class neuralNetworkCompute; } + class colvar::neuralNetwork : public linearCombination { @@ -1752,89 +1511,27 @@ protected: /// actual computation happens in neuralnetworkCV::neuralNetworkCompute std::unique_ptr nn; /// the index of nn output components - size_t m_output_index; + size_t m_output_index = 0; public: - neuralNetwork(std::string const &conf); + neuralNetwork(); virtual ~neuralNetwork(); + virtual int init(std::string const &conf); virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); + /// Redefined to allow arbitrary dimensions + virtual cvm::real dist2(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to allow arbitrary dimensions + virtual colvarvalue dist2_lgrad(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to allow arbitrary dimensions + virtual colvarvalue dist2_rgrad(colvarvalue const &x1, + colvarvalue const &x2) const; + /// Redefined to allow arbitrary dimensions + virtual void wrap(colvarvalue &x_unwrapped) const; }; -#else // if the compiler doesn't support C++11 - -class colvar::linearCombination - : public colvar::componentDisabled -{ -public: - linearCombination(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::CartesianBasedPath - : public colvar::componentDisabled -{ -public: - CartesianBasedPath(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::CVBasedPath - : public colvar::componentDisabled -{ -public: - CVBasedPath(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::gspath - : public colvar::componentDisabled -{ -public: - gspath(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::gzpath - : public colvar::componentDisabled -{ -public: - gzpath(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::gspathCV - : public colvar::componentDisabled -{ -public: - gspathCV(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::gzpathCV - : public colvar::componentDisabled -{ -public: - gzpathCV(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::aspathCV - : public colvar::componentDisabled -{ -public: - aspathCV(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::azpathCV - : public colvar::componentDisabled -{ -public: - azpathCV(std::string const &conf) : componentDisabled(conf) {} -}; - -class colvar::neuralNetwork - : public colvar::componentDisabled -{ -public: - neuralNetwork(std::string const &conf) : componentDisabled(conf) {} -}; - -#endif // C++11 checking - // \brief Colvar component: total value of a scalar map // (usually implemented as a grid by the simulation engine) @@ -1844,7 +1541,6 @@ class colvar::map_total public: map_total(); - map_total(std::string const &conf); virtual ~map_total() {} virtual int init(std::string const &conf); virtual void calc_value(); @@ -1857,13 +1553,13 @@ protected: std::string volmap_name; /// Numeric identifier of the map object (as used by the simulation engine) - int volmap_id; + int volmap_id = -1; /// Index of the map objet in the proxy arrays - int volmap_index; + int volmap_index = -1; /// Group of atoms selected internally (optional) - cvm::atom_group *atoms; + cvm::atom_group *atoms = nullptr; /// Weights assigned to each atom (default: uniform weights) std::vector atom_weights; @@ -1871,36 +1567,4 @@ protected: -// metrics functions for cvc implementations - -// simple definitions of the distance functions; these are useful only -// for optimization (the type check performed in the default -// colvarcomp functions is skipped) - -// definitions assuming the scalar type - -#define simple_scalar_dist_functions(TYPE) \ - \ - \ - cvm::real colvar::TYPE::dist2(colvarvalue const &x1, \ - colvarvalue const &x2) const \ - { \ - return (x1.real_value - x2.real_value)*(x1.real_value - x2.real_value); \ - } \ - \ - \ - colvarvalue colvar::TYPE::dist2_lgrad(colvarvalue const &x1, \ - colvarvalue const &x2) const \ - { \ - return 2.0 * (x1.real_value - x2.real_value); \ - } \ - \ - \ - colvarvalue colvar::TYPE::dist2_rgrad(colvarvalue const &x1, \ - colvarvalue const &x2) const \ - { \ - return this->dist2_lgrad(x2, x1); \ - } \ - - #endif diff --git a/lib/colvars/colvarcomp_alchlambda.cpp b/lib/colvars/colvarcomp_alchlambda.cpp index 9f18bec776..a175ea43e8 100644 --- a/lib/colvars/colvarcomp_alchlambda.cpp +++ b/lib/colvars/colvarcomp_alchlambda.cpp @@ -12,13 +12,11 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" -colvar::alch_lambda::alch_lambda(std::string const &conf) - : cvc(conf) +colvar::alch_lambda::alch_lambda() { set_function_type("alchLambda"); @@ -56,12 +54,9 @@ void colvar::alch_lambda::apply_force(colvarvalue const & /* force */) cvm::proxy->set_alch_lambda(x.real_value); } -simple_scalar_dist_functions(alch_lambda) - -colvar::alch_Flambda::alch_Flambda(std::string const &conf) - : cvc(conf) +colvar::alch_Flambda::alch_Flambda() { set_function_type("alch_Flambda"); @@ -103,4 +98,3 @@ void colvar::alch_Flambda::apply_force(colvarvalue const &force) cvm::proxy->indirect_lambda_biasing_force += d2E_dlambda2 * f; } -simple_scalar_dist_functions(alch_Flambda) diff --git a/lib/colvars/colvarcomp_angles.cpp b/lib/colvars/colvarcomp_angles.cpp index d3f1bfd9aa..56894e9f5c 100644 --- a/lib/colvars/colvarcomp_angles.cpp +++ b/lib/colvars/colvarcomp_angles.cpp @@ -12,8 +12,7 @@ #include "colvarcomp.h" -colvar::angle::angle(std::string const &conf) - : cvc(conf) +colvar::angle::angle() { set_function_type("angle"); init_as_angle(); @@ -21,26 +20,25 @@ colvar::angle::angle(std::string const &conf) provide(f_cvc_inv_gradient); provide(f_cvc_Jacobian); enable(f_cvc_com_based); +} + + +int colvar::angle::init(std::string const &conf) +{ + int error_code = cvc::init(conf); group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); group3 = parse_group(conf, "group3"); - init_total_force_params(conf); + error_code |= init_total_force_params(conf); + + return error_code; } -colvar::angle::angle(cvm::atom const &a1, - cvm::atom const &a2, - cvm::atom const &a3) +colvar::angle::angle(cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3) : angle() { - set_function_type("angle"); - init_as_angle(); - - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); - enable(f_cvc_com_based); - group1 = new cvm::atom_group(std::vector(1, a1)); group2 = new cvm::atom_group(std::vector(1, a2)); group3 = new cvm::atom_group(std::vector(1, a3)); @@ -120,52 +118,6 @@ void colvar::angle::calc_Jacobian_derivative() } -void colvar::angle::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); - - if (!group3->noforce) - group3->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(angle) - - - -colvar::dipole_angle::dipole_angle(std::string const &conf) - : cvc(conf) -{ - set_function_type("dipoleAngle"); - init_as_angle(); - - group1 = parse_group(conf, "group1"); - group2 = parse_group(conf, "group2"); - group3 = parse_group(conf, "group3"); - - init_total_force_params(conf); -} - - -colvar::dipole_angle::dipole_angle(cvm::atom const &a1, - cvm::atom const &a2, - cvm::atom const &a3) -{ - set_function_type("dipoleAngle"); - init_as_angle(); - - group1 = new cvm::atom_group(std::vector(1, a1)); - group2 = new cvm::atom_group(std::vector(1, a2)); - group3 = new cvm::atom_group(std::vector(1, a3)); - register_atom_group(group1); - register_atom_group(group2); - register_atom_group(group3); -} - colvar::dipole_angle::dipole_angle() { @@ -174,6 +126,19 @@ colvar::dipole_angle::dipole_angle() } +int colvar::dipole_angle::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + + group1 = parse_group(conf, "group1"); + group2 = parse_group(conf, "group2"); + group3 = parse_group(conf, "group3"); + + error_code |= init_total_force_params(conf); + return error_code; +} + + void colvar::dipole_angle::calc_value() { cvm::atom_pos const g1_pos = group1->center_of_mass(); @@ -229,52 +194,35 @@ void colvar::dipole_angle::calc_gradients() } -void colvar::dipole_angle::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); - - if (!group3->noforce) - group3->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(dipole_angle) - - - -colvar::dihedral::dihedral(std::string const &conf) - : cvc(conf) +colvar::dihedral::dihedral() { set_function_type("dihedral"); init_as_periodic_angle(); provide(f_cvc_inv_gradient); provide(f_cvc_Jacobian); enable(f_cvc_com_based); +} + + +int colvar::dihedral::init(std::string const &conf) +{ + int error_code = cvc::init(conf); group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); group3 = parse_group(conf, "group3"); group4 = parse_group(conf, "group4"); - init_total_force_params(conf); + error_code |= init_total_force_params(conf); + return error_code; } -colvar::dihedral::dihedral(cvm::atom const &a1, - cvm::atom const &a2, - cvm::atom const &a3, +colvar::dihedral::dihedral(cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3, cvm::atom const &a4) + : dihedral() { - set_function_type("dihedral"); - init_as_periodic_angle(); - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); - enable(f_cvc_com_based); - b_1site_force = false; group1 = new cvm::atom_group(std::vector(1, a1)); @@ -288,16 +236,6 @@ colvar::dihedral::dihedral(cvm::atom const &a1, } -colvar::dihedral::dihedral() -{ - set_function_type("dihedral"); - init_as_periodic_angle(); - enable(f_cvc_periodic); - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); -} - - void colvar::dihedral::calc_value() { cvm::atom_pos const g1_pos = group1->center_of_mass(); @@ -323,7 +261,7 @@ void colvar::dihedral::calc_value() cvm::real const sin_phi = n1 * r34 * r23.norm(); x.real_value = (180.0/PI) * cvm::atan2(sin_phi, cos_phi); - this->wrap(x); + wrap(x); } @@ -349,7 +287,7 @@ void colvar::dihedral::calc_gradients() A *= rA; cvm::rvector const dcosdA = rA*(cos_phi*A-B); cvm::rvector const dcosdB = rB*(cos_phi*B-A); - rA = 1.0; + // rA = 1.0; cvm::real const K = (1.0/sin_phi) * (180.0/PI); @@ -363,7 +301,7 @@ void colvar::dihedral::calc_gradients() C *= rC; cvm::rvector const dsindC = rC*(sin_phi*C-B); cvm::rvector const dsindB = rB*(sin_phi*B-C); - rC = 1.0; + // rC = 1.0; cvm::real const K = (-1.0/cos_phi) * (180.0/PI); @@ -439,81 +377,22 @@ void colvar::dihedral::calc_Jacobian_derivative() } -void colvar::dihedral::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); - - if (!group3->noforce) - group3->apply_colvar_force(force.real_value); - - if (!group4->noforce) - group4->apply_colvar_force(force.real_value); -} - - -// metrics functions for cvc implementations with a periodicity - -cvm::real colvar::dihedral::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return diff * diff; -} - - -colvarvalue colvar::dihedral::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return 2.0 * diff; -} - - -colvarvalue colvar::dihedral::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return (-2.0) * diff; -} - - -void colvar::dihedral::wrap(colvarvalue &x_unwrapped) const -{ - if ((x_unwrapped.real_value - wrap_center) >= 180.0) { - x_unwrapped.real_value -= 360.0; - return; - } - - if ((x_unwrapped.real_value - wrap_center) < -180.0) { - x_unwrapped.real_value += 360.0; - return; - } -} - - -colvar::polar_theta::polar_theta(std::string const &conf) - : cvc(conf) -{ - set_function_type("polarTheta"); - enable(f_cvc_com_based); - - atoms = parse_group(conf, "atoms"); - init_total_force_params(conf); - x.type(colvarvalue::type_scalar); -} - colvar::polar_theta::polar_theta() { + r = theta = phi = 0.0; set_function_type("polarTheta"); - x.type(colvarvalue::type_scalar); + enable(f_cvc_com_based); + init_as_angle(); +} + + +int colvar::polar_theta::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + atoms = parse_group(conf, "atoms"); + error_code |= init_total_force_params(conf); + return error_code; } @@ -540,35 +419,25 @@ void colvar::polar_theta::calc_gradients() } -void colvar::polar_theta::apply_force(colvarvalue const &force) -{ - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(polar_theta) - - -colvar::polar_phi::polar_phi(std::string const &conf) - : cvc(conf) -{ - set_function_type("polarPhi"); - init_as_periodic_angle(); - enable(f_cvc_com_based); - - atoms = parse_group(conf, "atoms"); - init_total_force_params(conf); -} - colvar::polar_phi::polar_phi() { + r = theta = phi = 0.0; set_function_type("polarPhi"); + enable(f_cvc_com_based); init_as_periodic_angle(); } +int colvar::polar_phi::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + atoms = parse_group(conf, "atoms"); + error_code |= init_total_force_params(conf); + return error_code; +} + + void colvar::polar_phi::calc_value() { cvm::rvector pos = atoms->center_of_mass(); @@ -587,55 +456,3 @@ void colvar::polar_phi::calc_gradients() (180.0/PI) * cvm::cos(phi) / (r*cvm::sin(theta)), 0.)); } - - -void colvar::polar_phi::apply_force(colvarvalue const &force) -{ - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); -} - - -// Same as dihedral, for polar_phi - -cvm::real colvar::polar_phi::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return diff * diff; -} - - -colvarvalue colvar::polar_phi::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return 2.0 * diff; -} - - -colvarvalue colvar::polar_phi::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return (-2.0) * diff; -} - - -void colvar::polar_phi::wrap(colvarvalue &x_unwrapped) const -{ - if ((x_unwrapped.real_value - wrap_center) >= 180.0) { - x_unwrapped.real_value -= 360.0; - return; - } - - if ((x_unwrapped.real_value - wrap_center) < -180.0) { - x_unwrapped.real_value += 360.0; - return; - } - - return; -} diff --git a/lib/colvars/colvarcomp_apath.cpp b/lib/colvars/colvarcomp_apath.cpp index ab759e9dea..9e8256957d 100644 --- a/lib/colvars/colvarcomp_apath.cpp +++ b/lib/colvars/colvarcomp_apath.cpp @@ -1,78 +1,312 @@ -#if (__cplusplus >= 201103L) +// -*- c++ -*- + +// This file is part of the Collective Variables module (Colvars). +// The original version of Colvars and its updates are located at: +// https://github.com/Colvars/colvars +// Please update all Colvars source files before making any changes. +// If you wish to distribute your changes, please submit them to the +// Colvars repository at GitHub. -#include #include #include -#include +#include #include +#include -#include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" +#include "colvar_arithmeticpath.h" -colvar::aspathCV::aspathCV(std::string const &conf): CVBasedPath(conf) { + +struct ArithmeticPathImpl: public ArithmeticPathCV::ArithmeticPathBase { + std::vector> frame_element_distances; + std::vector> dsdx; + std::vector> dzdx; + template + void updateCartesianDistanceToReferenceFrames(T* obj) { + for (size_t i_frame = 0; i_frame < obj->reference_frames.size(); ++i_frame) { + for (size_t i_atom = 0; i_atom < obj->atoms->size(); ++i_atom) { + frame_element_distances[i_frame][i_atom] = (*(obj->comp_atoms[i_frame]))[i_atom].pos - obj->reference_frames[i_frame][i_atom]; + } + } + } + template + void updateCVDistanceToReferenceFrames(T* obj) { + for (size_t i_cv = 0; i_cv < obj->cv.size(); ++i_cv) { + obj->cv[i_cv]->calc_value(); + } + for (size_t i_frame = 0; i_frame < obj->ref_cv.size(); ++i_frame) { + for (size_t i_cv = 0; i_cv < obj->cv.size(); ++i_cv) { + colvarvalue ref_cv_value(obj->ref_cv[i_frame][i_cv]); + colvarvalue current_cv_value(obj->cv[i_cv]->value()); + if (current_cv_value.type() == colvarvalue::type_scalar) { + frame_element_distances[i_frame][i_cv] = 0.5 * obj->cv[i_cv]->dist2_lgrad(obj->cv[i_cv]->sup_coeff * (cvm::pow(current_cv_value.real_value, obj->cv[i_cv]->sup_np)), ref_cv_value.real_value); + } else { + frame_element_distances[i_frame][i_cv] = 0.5 * obj->cv[i_cv]->dist2_lgrad(obj->cv[i_cv]->sup_coeff * current_cv_value, ref_cv_value); + } + } + } + } + ArithmeticPathImpl(size_t p_num_elements, size_t p_total_frames, cvm::real p_lambda, const std::vector& p_weights) { + ArithmeticPathCV::ArithmeticPathBase::initialize(p_num_elements, p_total_frames, p_lambda, p_weights); + frame_element_distances.resize(p_total_frames, std::vector(p_num_elements, colvarvalue(colvarvalue::Type::type_notset))); + dsdx.resize(p_total_frames, std::vector(p_num_elements, colvarvalue(colvarvalue::Type::type_notset))); + dzdx.resize(p_total_frames, std::vector(p_num_elements, colvarvalue(colvarvalue::Type::type_notset))); + } + cvm::real get_lambda() const {return lambda;} + cvm::real compute_s() { + cvm::real s; + computeValue(frame_element_distances, &s, nullptr); + return s; + } + cvm::real compute_z() { + cvm::real z; + computeValue(frame_element_distances, nullptr, &z); + return z; + } + void compute_s_derivatives() { + computeDerivatives(frame_element_distances, &dsdx, nullptr); + } + void compute_z_derivatives() { + computeDerivatives(frame_element_distances, nullptr, &dzdx); + } + // for debug gradients of implicit sub CVs + template + colvarvalue compute_s_analytical_derivative_ij(size_t i, size_t j, cvm::real eps, T* obj) const { + ArithmeticPathImpl tmp_left(*this), tmp_right(*this); + const size_t value_size = frame_element_distances[i][j].size(); + colvarvalue result(frame_element_distances[i][j].type()); + colvarvalue ref_cv_value(obj->ref_cv[i][j]); + for (size_t k = 0; k < value_size; ++k) { + // get the current CV value + colvarvalue current_cv_value(obj->cv[j]->value()); + // save the old values in frame element distance matrices + const auto saved_left = tmp_left.frame_element_distances[i][j][k]; + const auto saved_right = tmp_right.frame_element_distances[i][j][k]; + // update frame element distance matrices + if (current_cv_value.type() == colvarvalue::type_scalar) { + tmp_left.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * (cvm::pow(current_cv_value.real_value - eps, obj->cv[j]->sup_np)), ref_cv_value.real_value); + tmp_right.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * (cvm::pow(current_cv_value.real_value + eps, obj->cv[j]->sup_np)), ref_cv_value.real_value); + } else { + current_cv_value[k] -= eps; + tmp_left.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * current_cv_value, ref_cv_value); + current_cv_value[k] += eps + eps; + tmp_right.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * current_cv_value, ref_cv_value); + } + const cvm::real s_left = tmp_left.compute_s(); + const cvm::real s_right = tmp_right.compute_s(); + result[k] = (s_right - s_left) / (2.0 * eps); + tmp_left.frame_element_distances[i][j][k] = saved_left; + tmp_right.frame_element_distances[i][j][k] = saved_right; + } + return result; + } + template + colvarvalue compute_z_analytical_derivative_ij(size_t i, size_t j, cvm::real eps, T* obj) const { + ArithmeticPathImpl tmp_left(*this), tmp_right(*this); + const size_t value_size = frame_element_distances[i][j].size(); + colvarvalue result(frame_element_distances[i][j].type()); + colvarvalue ref_cv_value(obj->ref_cv[i][j]); + for (size_t k = 0; k < value_size; ++k) { + // get the current CV value + colvarvalue current_cv_value(obj->cv[j]->value()); + // save the old values in frame element distance matrices + const auto saved_left = tmp_left.frame_element_distances[i][j][k]; + const auto saved_right = tmp_right.frame_element_distances[i][j][k]; + // update frame element distance matrices + if (current_cv_value.type() == colvarvalue::type_scalar) { + tmp_left.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * (cvm::pow(current_cv_value.real_value - eps, obj->cv[j]->sup_np)), ref_cv_value.real_value); + tmp_right.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * (cvm::pow(current_cv_value.real_value + eps, obj->cv[j]->sup_np)), ref_cv_value.real_value); + } else { + current_cv_value[k] -= eps; + tmp_left.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * current_cv_value, ref_cv_value); + current_cv_value[k] += eps + eps; + tmp_right.frame_element_distances[i][j] = 0.5 * obj->cv[j]->dist2_lgrad(obj->cv[j]->sup_coeff * current_cv_value, ref_cv_value); + } + const cvm::real z_left = tmp_left.compute_z(); + const cvm::real z_right = tmp_right.compute_z(); + result[k] = (z_right - z_left) / (2.0 * eps); + tmp_left.frame_element_distances[i][j][k] = saved_left; + tmp_right.frame_element_distances[i][j][k] = saved_right; + } + return result; + } +}; + +colvar::aspath::aspath() +{ + set_function_type("aspath"); + x.type(colvarvalue::type_scalar); +} + + +int colvar::aspath::init(std::string const &conf) +{ + int error_code = CartesianBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); + cvm::real p_lambda; + get_keyval(conf, "lambda", p_lambda, -1.0); + const size_t num_atoms = atoms->size(); + std::vector p_weights(num_atoms, std::sqrt(1.0 / num_atoms)); + // ArithmeticPathCV::ArithmeticPathBase::initialize(num_atoms, total_reference_frames, p_lambda, reference_frames[0], p_weights); + if (impl_) impl_.reset(); + impl_ = std::unique_ptr(new ArithmeticPathImpl(num_atoms, total_reference_frames, p_lambda, p_weights)); + cvm::log(std::string("Lambda is ") + cvm::to_str(impl_->get_lambda()) + std::string("\n")); + return error_code; +} + +colvar::aspath::~aspath() {} + +void colvar::aspath::calc_value() { + if (impl_->get_lambda() < 0) { + // this implies that the user may not set a valid lambda value + // so recompute it by the suggested value in Parrinello's paper + cvm::log("A non-positive value of lambda is detected, which implies that it may not set in the configuration.\n"); + cvm::log("This component (aspath) will recompute a value for lambda following the suggestion in the origin paper.\n"); + std::vector rmsd_between_refs(total_reference_frames - 1, 0.0); + computeDistanceBetweenReferenceFrames(rmsd_between_refs); + impl_->reComputeLambda(rmsd_between_refs); + cvm::log("Ok, the value of lambda is updated to " + cvm::to_str(impl_->get_lambda())); + } + impl_->updateCartesianDistanceToReferenceFrames(this); + x = impl_->compute_s(); +} + +void colvar::aspath::calc_gradients() { + impl_->compute_s_derivatives(); + for (size_t i_frame = 0; i_frame < reference_frames.size(); ++i_frame) { + for (size_t i_atom = 0; i_atom < atoms->size(); ++i_atom) { + (*(comp_atoms[i_frame]))[i_atom].grad += impl_->dsdx[i_frame][i_atom]; + } + } +} + +void colvar::aspath::apply_force(colvarvalue const &force) { + cvm::real const &F = force.real_value; + for (size_t i_frame = 0; i_frame < reference_frames.size(); ++i_frame) { + (*(comp_atoms[i_frame])).apply_colvar_force(F); + } +} + +colvar::azpath::azpath() +{ + set_function_type("azpath"); + x.type(colvarvalue::type_scalar); +} + +int colvar::azpath::init(std::string const &conf) +{ + int error_code = CartesianBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); + x.type(colvarvalue::type_scalar); + cvm::real p_lambda; + get_keyval(conf, "lambda", p_lambda, -1.0); + const size_t num_atoms = atoms->size(); + std::vector p_weights(num_atoms, std::sqrt(1.0 / num_atoms)); + if (impl_) impl_.reset(); + impl_ = std::unique_ptr(new ArithmeticPathImpl(num_atoms, total_reference_frames, p_lambda, p_weights)); + cvm::log(std::string("Lambda is ") + cvm::to_str(impl_->get_lambda()) + std::string("\n")); + return error_code; +} + +colvar::azpath::~azpath() {} + +void colvar::azpath::calc_value() { + if (impl_->get_lambda() < 0) { + // this implies that the user may not set a valid lambda value + // so recompute it by the suggested value in Parrinello's paper + cvm::log("A non-positive value of lambda is detected, which implies that it may not set in the configuration.\n"); + cvm::log("This component (azpath) will recompute a value for lambda following the suggestion in the origin paper.\n"); + std::vector rmsd_between_refs(total_reference_frames - 1, 0.0); + computeDistanceBetweenReferenceFrames(rmsd_between_refs); + impl_->reComputeLambda(rmsd_between_refs); + cvm::log("Ok, the value of lambda is updated to " + cvm::to_str(impl_->get_lambda())); + } + impl_->updateCartesianDistanceToReferenceFrames(this); + x = impl_->compute_z(); +} + +void colvar::azpath::calc_gradients() { + impl_->compute_z_derivatives(); + for (size_t i_frame = 0; i_frame < reference_frames.size(); ++i_frame) { + for (size_t i_atom = 0; i_atom < atoms->size(); ++i_atom) { + (*(comp_atoms[i_frame]))[i_atom].grad += impl_->dzdx[i_frame][i_atom]; + } + } +} + +void colvar::azpath::apply_force(colvarvalue const &force) { + cvm::real const &F = force.real_value; + for (size_t i_frame = 0; i_frame < reference_frames.size(); ++i_frame) { + (*(comp_atoms[i_frame])).apply_colvar_force(F); + } +} + +colvar::aspathCV::aspathCV() +{ set_function_type("aspathCV"); + x.type(colvarvalue::type_scalar); +} + +int colvar::aspathCV::init(std::string const &conf) +{ + int error_code = CVBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); std::vector p_weights(cv.size(), 1.0); get_keyval(conf, "weights", p_weights, std::vector(cv.size(), 1.0)); - x.type(colvarvalue::type_scalar); use_explicit_gradients = true; cvm::real p_lambda; get_keyval(conf, "lambda", p_lambda, -1.0); - ArithmeticPathCV::ArithmeticPathBase::initialize(cv.size(), total_reference_frames, p_lambda, ref_cv[0], p_weights); - cvm::log(std::string("Lambda is ") + cvm::to_str(lambda) + std::string("\n")); + if (impl_) impl_.reset(); + impl_ = std::unique_ptr(new ArithmeticPathImpl(cv.size(), total_reference_frames, p_lambda, p_weights)); + cvm::log(std::string("Lambda is ") + cvm::to_str(impl_->get_lambda()) + std::string("\n")); for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { if (!cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { use_explicit_gradients = false; } - cvm::log(std::string("The weight of CV ") + cvm::to_str(i_cv) + std::string(" is ") + cvm::to_str(weights[i_cv]) + std::string("\n")); + cvm::log(std::string("The weight of CV ") + cvm::to_str(i_cv) + std::string(" is ") + cvm::to_str(p_weights[i_cv]) + std::string("\n")); } + return error_code; } -void colvar::aspathCV::updateDistanceToReferenceFrames() { - for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { - cv[i_cv]->calc_value(); - } - for (size_t i_frame = 0; i_frame < ref_cv.size(); ++i_frame) { - for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { - colvarvalue ref_cv_value(ref_cv[i_frame][i_cv]); - colvarvalue current_cv_value(cv[i_cv]->value()); - if (current_cv_value.type() == colvarvalue::type_scalar) { - frame_element_distances[i_frame][i_cv] = 0.5 * cv[i_cv]->dist2_lgrad(cv[i_cv]->sup_coeff * (cvm::pow(current_cv_value.real_value, cv[i_cv]->sup_np)), ref_cv_value.real_value); - } else { - frame_element_distances[i_frame][i_cv] = 0.5 * cv[i_cv]->dist2_lgrad(cv[i_cv]->sup_coeff * current_cv_value, ref_cv_value); - } - } - } -} +colvar::aspathCV::~aspathCV() {} void colvar::aspathCV::calc_value() { - if (lambda < 0) { + if (impl_->get_lambda() < 0) { // this implies that the user may not set a valid lambda value // so recompute it by the suggested value in Parrinello's paper cvm::log("A non-positive value of lambda is detected, which implies that it may not set in the configuration.\n"); cvm::log("This component (aspathCV) will recompute a value for lambda following the suggestion in the origin paper.\n"); std::vector rmsd_between_refs(total_reference_frames - 1, 0.0); computeDistanceBetweenReferenceFrames(rmsd_between_refs); - reComputeLambda(rmsd_between_refs); - cvm::log("Ok, the value of lambda is updated to " + cvm::to_str(lambda)); + impl_->reComputeLambda(rmsd_between_refs); + cvm::log("Ok, the value of lambda is updated to " + cvm::to_str(impl_->get_lambda())); } - computeValue(); - x = s; + impl_->updateCVDistanceToReferenceFrames(this); + x = impl_->compute_s(); } void colvar::aspathCV::calc_gradients() { - computeDerivatives(); + impl_->compute_s_derivatives(); for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { cv[i_cv]->calc_gradients(); if (cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { cvm::real factor_polynomial = getPolynomialFactorOfCVGradient(i_cv); + // compute the gradient (grad) with respect to the i-th CV + colvarvalue grad(cv[i_cv]->value().type()); + // sum up derivatives with respect to all frames + for (size_t m_frame = 0; m_frame < impl_->dsdx.size(); ++m_frame) { + // dsdx is the derivative of s with respect to the m-th frame + grad += impl_->dsdx[m_frame][i_cv]; + } for (size_t j_elem = 0; j_elem < cv[i_cv]->value().size(); ++j_elem) { for (size_t k_ag = 0 ; k_ag < cv[i_cv]->atom_groups.size(); ++k_ag) { for (size_t l_atom = 0; l_atom < (cv[i_cv]->atom_groups)[k_ag]->size(); ++l_atom) { - (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad = dsdx[i_cv][j_elem] * factor_polynomial * (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad; + (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad = grad[j_elem] * factor_polynomial * (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad; } } } @@ -88,97 +322,137 @@ void colvar::aspathCV::apply_force(colvarvalue const &force) { } } else { cvm::real factor_polynomial = getPolynomialFactorOfCVGradient(i_cv); - colvarvalue cv_force = dsdx[i_cv] * force.real_value * factor_polynomial; - cv[i_cv]->apply_force(cv_force); - } - } -} - -colvar::aspathCV::~aspathCV() {} - -colvar::azpathCV::azpathCV(std::string const &conf): CVBasedPath(conf) { - set_function_type("azpathCV"); - cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); - std::vector p_weights(cv.size(), 1.0); - get_keyval(conf, "weights", p_weights, std::vector(cv.size(), 1.0)); - x.type(colvarvalue::type_scalar); - use_explicit_gradients = true; - cvm::real p_lambda; - get_keyval(conf, "lambda", p_lambda, -1.0); - ArithmeticPathCV::ArithmeticPathBase::initialize(cv.size(), total_reference_frames, p_lambda, ref_cv[0], p_weights); - cvm::log(std::string("Lambda is ") + cvm::to_str(lambda) + std::string("\n")); - for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { - if (!cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { - use_explicit_gradients = false; - } - cvm::log(std::string("The weight of CV ") + cvm::to_str(i_cv) + std::string(" is ") + cvm::to_str(weights[i_cv]) + std::string("\n")); - } -} - -void colvar::azpathCV::updateDistanceToReferenceFrames() { - for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { - cv[i_cv]->calc_value(); - } - for (size_t i_frame = 0; i_frame < ref_cv.size(); ++i_frame) { - for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { - colvarvalue ref_cv_value(ref_cv[i_frame][i_cv]); - colvarvalue current_cv_value(cv[i_cv]->value()); - if (current_cv_value.type() == colvarvalue::type_scalar) { - frame_element_distances[i_frame][i_cv] = 0.5 * cv[i_cv]->dist2_lgrad(cv[i_cv]->sup_coeff * (cvm::pow(current_cv_value.real_value, cv[i_cv]->sup_np)), ref_cv_value.real_value); - } else { - frame_element_distances[i_frame][i_cv] = 0.5 * cv[i_cv]->dist2_lgrad(cv[i_cv]->sup_coeff * current_cv_value, ref_cv_value); + // compute the gradient (grad) with respect to the i-th CV + colvarvalue grad(cv[i_cv]->value().type()); + for (size_t m_frame = 0; m_frame < impl_->dsdx.size(); ++m_frame) { + // dsdx is the derivative of s with respect to the m-th frame + grad += impl_->dsdx[m_frame][i_cv]; + } + grad *= factor_polynomial; + cv[i_cv]->apply_force(force.real_value * grad); + // try my best to debug gradients even if the sub-CVs do not have explicit gradients + if (is_enabled(f_cvc_debug_gradient)) { + cvm::log("Debugging gradients for " + description + + " with respect to sub-CV " + cv[i_cv]->description + + ", which has no explicit gradient with respect to its own input(s)"); + colvarvalue analytical_grad(cv[i_cv]->value().type()); + for (size_t m_frame = 0; m_frame < impl_->dsdx.size(); ++m_frame) { + analytical_grad += impl_->compute_s_analytical_derivative_ij( + m_frame, i_cv, cvm::debug_gradients_step_size, this); + } + cvm::log("dx(actual) = "+cvm::to_str(analytical_grad, 21, 14)+"\n"); + cvm::log("dx(interp) = "+cvm::to_str(grad, 21, 14)+"\n"); + cvm::log("|dx(actual) - dx(interp)|/|dx(actual)| = "+ + cvm::to_str((analytical_grad - grad).norm() / + (analytical_grad).norm(), 12, 5)+"\n"); } } } } +colvar::azpathCV::azpathCV() +{ + set_function_type("azpathCV"); + x.type(colvarvalue::type_scalar); +} + +int colvar::azpathCV::init(std::string const &conf) +{ + int error_code = CVBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); + std::vector p_weights(cv.size(), 1.0); + get_keyval(conf, "weights", p_weights, std::vector(cv.size(), 1.0)); + use_explicit_gradients = true; + cvm::real p_lambda; + get_keyval(conf, "lambda", p_lambda, -1.0); + if (impl_) impl_.reset(); + impl_ = std::unique_ptr(new ArithmeticPathImpl(cv.size(), total_reference_frames, p_lambda, p_weights)); + cvm::log(std::string("Lambda is ") + cvm::to_str(impl_->get_lambda()) + std::string("\n")); + for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { + if (!cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { + use_explicit_gradients = false; + } + cvm::log(std::string("The weight of CV ") + cvm::to_str(i_cv) + std::string(" is ") + cvm::to_str(p_weights[i_cv]) + std::string("\n")); + } + return error_code; +} + void colvar::azpathCV::calc_value() { - if (lambda < 0) { + if (impl_->get_lambda() < 0) { // this implies that the user may not set a valid lambda value // so recompute it by the suggested value in Parrinello's paper cvm::log("A non-positive value of lambda is detected, which implies that it may not set in the configuration.\n"); cvm::log("This component (azpathCV) will recompute a value for lambda following the suggestion in the origin paper.\n"); std::vector rmsd_between_refs(total_reference_frames - 1, 0.0); computeDistanceBetweenReferenceFrames(rmsd_between_refs); - reComputeLambda(rmsd_between_refs); - cvm::log("Ok, the value of lambda is updated to " + cvm::to_str(lambda)); + impl_->reComputeLambda(rmsd_between_refs); + cvm::log("Ok, the value of lambda is updated to " + cvm::to_str(impl_->get_lambda())); } - computeValue(); - x = z; + impl_->updateCVDistanceToReferenceFrames(this); + x = impl_->compute_z(); } void colvar::azpathCV::calc_gradients() { - computeDerivatives(); + impl_->compute_z_derivatives(); for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { cv[i_cv]->calc_gradients(); if (cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { cvm::real factor_polynomial = getPolynomialFactorOfCVGradient(i_cv); + // compute the gradient (grad) with respect to the i-th CV + colvarvalue grad(cv[i_cv]->value().type()); + // sum up derivatives with respect to all frames + for (size_t m_frame = 0; m_frame < impl_->dzdx.size(); ++m_frame) { + // dzdx is the derivative of z with respect to the m-th frame + grad += impl_->dzdx[m_frame][i_cv]; + } for (size_t j_elem = 0; j_elem < cv[i_cv]->value().size(); ++j_elem) { for (size_t k_ag = 0 ; k_ag < cv[i_cv]->atom_groups.size(); ++k_ag) { for (size_t l_atom = 0; l_atom < (cv[i_cv]->atom_groups)[k_ag]->size(); ++l_atom) { - (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad = dzdx[i_cv][j_elem] * factor_polynomial * (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad; + (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad = grad[j_elem] * factor_polynomial * (*(cv[i_cv]->atom_groups)[k_ag])[l_atom].grad; } } } - } } } void colvar::azpathCV::apply_force(colvarvalue const &force) { + // the PCV component itself is a scalar, so force should be scalar for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { if (cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { for (size_t k_ag = 0 ; k_ag < cv[i_cv]->atom_groups.size(); ++k_ag) { (cv[i_cv]->atom_groups)[k_ag]->apply_colvar_force(force.real_value); } } else { - cvm::real factor_polynomial = getPolynomialFactorOfCVGradient(i_cv); - const colvarvalue cv_force = dzdx[i_cv] * force.real_value * factor_polynomial; - cv[i_cv]->apply_force(cv_force); + const cvm::real factor_polynomial = getPolynomialFactorOfCVGradient(i_cv); + // compute the gradient (grad) with respect to the i-th CV + colvarvalue grad(cv[i_cv]->value().type()); + for (size_t m_frame = 0; m_frame < impl_->dzdx.size(); ++m_frame) { + // dzdx is the derivative of z with respect to the m-th frame + grad += impl_->dzdx[m_frame][i_cv]; + } + grad *= factor_polynomial; + cv[i_cv]->apply_force(force.real_value * grad); + // try my best to debug gradients even if the sub-CVs do not have explicit gradients + if (is_enabled(f_cvc_debug_gradient)) { + cvm::log("Debugging gradients for " + description + + " with respect to sub-CV " + cv[i_cv]->description + + ", which has no explicit gradient with respect to its own input(s)"); + colvarvalue analytical_grad(cv[i_cv]->value().type()); + for (size_t m_frame = 0; m_frame < impl_->dzdx.size(); ++m_frame) { + analytical_grad += impl_->compute_z_analytical_derivative_ij( + m_frame, i_cv, cvm::debug_gradients_step_size, this); + } + cvm::log("dx(actual) = "+cvm::to_str(analytical_grad, 21, 14)+"\n"); + cvm::log("dx(interp) = "+cvm::to_str(grad, 21, 14)+"\n"); + cvm::log("|dx(actual) - dx(interp)|/|dx(actual)| = "+ + cvm::to_str((analytical_grad - grad).norm() / + (analytical_grad).norm(), 12, 5)+"\n"); + } } } } colvar::azpathCV::~azpathCV() {} -#endif diff --git a/lib/colvars/colvarcomp_combination.cpp b/lib/colvars/colvarcomp_combination.cpp index 64745b6472..01c7ffc320 100644 --- a/lib/colvars/colvarcomp_combination.cpp +++ b/lib/colvars/colvarcomp_combination.cpp @@ -1,4 +1,4 @@ -#if (__cplusplus >= 201103L) +// -*- c++ -*- // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: @@ -9,14 +9,26 @@ #include "colvarcomp.h" -colvar::linearCombination::linearCombination(std::string const &conf): cvc(conf) { + +colvar::linearCombination::linearCombination() +{ + set_function_type("linearCombination"); +} + + +int colvar::linearCombination::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + if (error_code != COLVARS_OK) return error_code; + // Lookup all available sub-cvcs for (auto it_cv_map = colvar::get_global_cvc_map().begin(); it_cv_map != colvar::get_global_cvc_map().end(); ++it_cv_map) { if (key_lookup(conf, it_cv_map->first.c_str())) { std::vector sub_cvc_confs; get_key_string_multi_value(conf, it_cv_map->first.c_str(), sub_cvc_confs); for (auto it_sub_cvc_conf = sub_cvc_confs.begin(); it_sub_cvc_conf != sub_cvc_confs.end(); ++it_sub_cvc_conf) { - cv.push_back((it_cv_map->second)(*(it_sub_cvc_conf))); + cv.push_back((it_cv_map->second)()); + cv.back()->init(*(it_sub_cvc_conf)); } } } @@ -29,26 +41,11 @@ colvar::linearCombination::linearCombination(std::string const &conf): cvc(conf) } // Show useful error messages and prevent crashes if no sub CVC is found if (cv.size() == 0) { - cvm::error("Error: the CV " + name + - " expects one or more nesting components.\n"); - return; + return cvm::error("Error: the CV " + name + " expects one or more nesting components.\n", + COLVARS_INPUT_ERROR); } else { - // TODO: Maybe we can add an option to allow mixing scalar and vector types, - // but that's a bit complicated so we just require a consistent type - // of nesting CVs. x.type(cv[0]->value()); x.reset(); - for (size_t i_cv = 1; i_cv < cv.size(); ++i_cv) { - const auto type_i = cv[i_cv]->value().type(); - if (type_i != x.type()) { - cvm::error("Error: the type of sub-CVC " + cv[i_cv]->name + - " is " + colvarvalue::type_desc(type_i) + ", which is " - "different to the type of the first sub-CVC. Currently " - "only sub-CVCs of the same type are supported to be " - "nested.\n"); - return; - } - } } use_explicit_gradients = true; for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { @@ -59,6 +56,7 @@ colvar::linearCombination::linearCombination(std::string const &conf): cvc(conf) if (!use_explicit_gradients) { disable(f_cvc_explicit_gradient); } + return error_code; } cvm::real colvar::linearCombination::getPolynomialFactorOfCVGradient(size_t i_cv) const { @@ -138,8 +136,42 @@ void colvar::linearCombination::apply_force(colvarvalue const &force) { } } -colvar::customColvar::customColvar(std::string const &conf): linearCombination(conf) { - use_custom_function = false; + +cvm::real colvar::linearCombination::dist2(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x1.dist2(x2); +} + + +colvarvalue colvar::linearCombination::dist2_lgrad(colvarvalue const &x1, + colvarvalue const &x2) const +{ + return x1.dist2_grad(x2); +} + + +colvarvalue colvar::linearCombination::dist2_rgrad(colvarvalue const &x1, + colvarvalue const &x2) const +{ + return x2.dist2_grad(x1); +} + + +void colvar::linearCombination::wrap(colvarvalue & /* x_unwrapped */) const {} + + + +colvar::customColvar::customColvar() +{ + set_function_type("customColvar"); +} + + +int colvar::customColvar::init(std::string const &conf) +{ + int error_code = linearCombination::init(conf); + if (error_code != COLVARS_OK) return error_code; + // code swipe from colvar::init_custom_function std::string expr_in, expr; size_t pos = 0; // current position in config string @@ -160,7 +192,7 @@ colvar::customColvar::customColvar(std::string const &conf): linearCombination(c pexpr = Lepton::Parser::parse(expr); pexprs.push_back(pexpr); } catch (...) { - cvm::error("Error parsing expression \"" + expr + "\".\n", COLVARS_INPUT_ERROR); + return cvm::error("Error parsing expression \"" + expr + "\".\n", COLVARS_INPUT_ERROR); } try { value_evaluators.push_back(new Lepton::CompiledExpression(pexpr.createCompiledExpression())); @@ -178,7 +210,7 @@ colvar::customColvar::customColvar(std::string const &conf): linearCombination(c } } } catch (...) { - cvm::error("Error compiling expression \"" + expr + "\".\n", COLVARS_INPUT_ERROR); + return cvm::error("Error compiling expression \"" + expr + "\".\n", COLVARS_INPUT_ERROR); } } while (key_lookup(conf, "customFunction", &expr_in, &pos)); // Now define derivative with respect to each scalar sub-component @@ -203,7 +235,7 @@ colvar::customColvar::customColvar(std::string const &conf): linearCombination(c } } if (value_evaluators.size() == 0) { - cvm::error("Error: no custom function defined.\n", COLVARS_INPUT_ERROR); + return cvm::error("Error: no custom function defined.\n", COLVARS_INPUT_ERROR); } if (value_evaluators.size() != 1) { x.type(colvarvalue::type_vector); @@ -211,14 +243,17 @@ colvar::customColvar::customColvar(std::string const &conf): linearCombination(c x.type(colvarvalue::type_scalar); } #else - cvm::error("customFunction requires the Lepton library, but it is not enabled during compilation.\n" - "Please refer to the Compilation Notes section of the Colvars manual for more information.\n", - COLVARS_INPUT_ERROR); + return cvm::error( + "customFunction requires the Lepton library, but it is not enabled during compilation.\n" + "Please refer to the Compilation Notes section of the Colvars manual for more " + "information.\n", + COLVARS_NOT_IMPLEMENTED); #endif } else { cvm::log("Warning: no customFunction specified.\n"); cvm::log("Warning: use linear combination instead.\n"); } + return error_code; } colvar::customColvar::~customColvar() { @@ -317,7 +352,8 @@ void colvar::customColvar::apply_force(colvarvalue const &force) { } } else { const colvarvalue& current_cv_value = cv[i_cv]->value(); - colvarvalue cv_force(current_cv_value.type()); + colvarvalue cv_force(current_cv_value); + cv_force.reset(); const cvm::real factor_polynomial = getPolynomialFactorOfCVGradient(i_cv); for (size_t j_elem = 0; j_elem < current_cv_value.size(); ++j_elem) { for (size_t c = 0; c < x.size(); ++c) { @@ -340,5 +376,3 @@ void colvar::customColvar::apply_force(colvarvalue const &force) { #endif } } - -#endif // __cplusplus >= 201103L diff --git a/lib/colvars/colvarcomp_coordnums.cpp b/lib/colvars/colvarcomp_coordnums.cpp index 3d618ff805..63418050d0 100644 --- a/lib/colvars/colvarcomp_coordnums.cpp +++ b/lib/colvars/colvarcomp_coordnums.cpp @@ -8,7 +8,6 @@ // Colvars repository at GitHub. #include "colvarmodule.h" -#include "colvarparse.h" #include "colvaratoms.h" #include "colvarvalue.h" #include "colvar.h" @@ -90,48 +89,47 @@ cvm::real colvar::coordnum::switching_function(cvm::real const &r0, } -colvar::coordnum::coordnum(std::string const &conf) - : cvc(conf), b_anisotropic(false), pairlist(NULL) - +colvar::coordnum::coordnum() { set_function_type("coordNum"); x.type(colvarvalue::type_scalar); - colvarproxy *proxy = cvm::main()->proxy; + r0 = proxy->angstrom_to_internal(4.0); + r0_vec = cvm::rvector(proxy->angstrom_to_internal(4.0), + proxy->angstrom_to_internal(4.0), + proxy->angstrom_to_internal(4.0)); +} + + +int colvar::coordnum::init(std::string const &conf) +{ + int error_code = cvc::init(conf); group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); - if (group1 == NULL || group2 == NULL) { - cvm::error("Error: failed to initialize atom groups.\n", - COLVARS_INPUT_ERROR); - return; + if (!group1 || !group2) { + return error_code | COLVARS_INPUT_ERROR; } if (int atom_number = cvm::atom_group::overlap(*group1, *group2)) { - cvm::error("Error: group1 and group2 share a common atom (number: " + - cvm::to_str(atom_number) + ")\n", COLVARS_INPUT_ERROR); - return; + error_code |= cvm::error( + "Error: group1 and group2 share a common atom (number: " + cvm::to_str(atom_number) + ")\n", + COLVARS_INPUT_ERROR); } if (group1->b_dummy) { - cvm::error("Error: only group2 is allowed to be a dummy atom\n", - COLVARS_INPUT_ERROR); - return; + error_code |= + cvm::error("Error: only group2 is allowed to be a dummy atom\n", COLVARS_INPUT_ERROR); } - bool const b_isotropic = get_keyval(conf, "cutoff", r0, - cvm::real(proxy->angstrom_to_internal(4.0))); + bool const b_isotropic = get_keyval(conf, "cutoff", r0, r0); - if (get_keyval(conf, "cutoff3", r0_vec, - cvm::rvector(proxy->angstrom_to_internal(4.0), - proxy->angstrom_to_internal(4.0), - proxy->angstrom_to_internal(4.0)))) { + if (get_keyval(conf, "cutoff3", r0_vec, r0_vec)) { if (b_isotropic) { - cvm::error("Error: cannot specify \"cutoff\" and \"cutoff3\" " - "at the same time.\n", - COLVARS_INPUT_ERROR); - return; + error_code |= cvm::error("Error: cannot specify \"cutoff\" and \"cutoff3\" " + "at the same time.\n", + COLVARS_INPUT_ERROR); } b_anisotropic = true; @@ -141,17 +139,17 @@ colvar::coordnum::coordnum(std::string const &conf) if (r0_vec.z < 0.0) r0_vec.z *= -1.0; } - get_keyval(conf, "expNumer", en, 6); - get_keyval(conf, "expDenom", ed, 12); + get_keyval(conf, "expNumer", en, en); + get_keyval(conf, "expDenom", ed, ed); if ( (en%2) || (ed%2) ) { - cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", - COLVARS_INPUT_ERROR); + error_code |= cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", + COLVARS_INPUT_ERROR); } if ( (en <= 0) || (ed <= 0) ) { - cvm::error("Error: negative exponent(s) provided.\n", - COLVARS_INPUT_ERROR); + error_code |= cvm::error("Error: negative exponent(s) provided.\n", + COLVARS_INPUT_ERROR); } if (!is_enabled(f_cvc_pbc_minimum_image)) { @@ -160,14 +158,14 @@ colvar::coordnum::coordnum(std::string const &conf) get_keyval(conf, "group2CenterOnly", b_group2_center_only, group2->b_dummy); - get_keyval(conf, "tolerance", tolerance, 0.0); + get_keyval(conf, "tolerance", tolerance, tolerance); if (tolerance > 0) { cvm::main()->cite_feature("coordNum pairlist"); - get_keyval(conf, "pairListFrequency", pairlist_freq, 100); + get_keyval(conf, "pairListFrequency", pairlist_freq, pairlist_freq); if ( ! (pairlist_freq > 0) ) { - cvm::error("Error: non-positive pairlistfrequency provided.\n", - COLVARS_INPUT_ERROR); - return; // and do not allocate the pairlists below + return cvm::error("Error: non-positive pairlistfrequency provided.\n", + COLVARS_INPUT_ERROR); + // return and do not allocate the pairlists below } if (b_group2_center_only) { pairlist = new bool[group1->size()]; @@ -181,12 +179,14 @@ colvar::coordnum::coordnum(std::string const &conf) static_cast(group1->size()) : static_cast(group1->size() * group2->size())); + + return error_code; } colvar::coordnum::~coordnum() { - if (pairlist != NULL) { + if (pairlist) { delete [] pairlist; } } @@ -285,25 +285,23 @@ void colvar::coordnum::calc_gradients() } -void colvar::coordnum::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(coordnum) - - // h_bond member functions -colvar::h_bond::h_bond(std::string const &conf) -: cvc(conf) +colvar::h_bond::h_bond() { + colvarproxy *proxy = cvm::main()->proxy; + r0 = proxy->angstrom_to_internal(3.3); + set_function_type("hBond"); + x.type(colvarvalue::type_scalar); + init_scalar_boundaries(0.0, 1.0); +} + + +int colvar::h_bond::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + if (cvm::debug()) cvm::log("Initializing h_bond object.\n"); @@ -311,15 +309,12 @@ colvar::h_bond::h_bond(std::string const &conf) x.type(colvarvalue::type_scalar); init_scalar_boundaries(0.0, 1.0); - colvarproxy *proxy = cvm::main()->proxy; - int a_num = -1, d_num = -1; get_keyval(conf, "acceptor", a_num, a_num); get_keyval(conf, "donor", d_num, a_num); if ( (a_num == -1) || (d_num == -1) ) { - cvm::error("Error: either acceptor or donor undefined.\n"); - return; + error_code |= cvm::error("Error: either acceptor or donor undefined.\n", COLVARS_INPUT_ERROR); } cvm::atom acceptor = cvm::atom(a_num); @@ -328,34 +323,34 @@ colvar::h_bond::h_bond(std::string const &conf) atom_groups[0]->add_atom(acceptor); atom_groups[0]->add_atom(donor); - get_keyval(conf, "cutoff", r0, proxy->angstrom_to_internal(3.3)); - get_keyval(conf, "expNumer", en, 6); - get_keyval(conf, "expDenom", ed, 8); + get_keyval(conf, "cutoff", r0, r0); + get_keyval(conf, "expNumer", en, en); + get_keyval(conf, "expDenom", ed, ed); - if ( (en%2) || (ed%2) ) { - cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", - COLVARS_INPUT_ERROR); + if ((en % 2) || (ed % 2)) { + error_code |= cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", + COLVARS_INPUT_ERROR); } - if ( (en <= 0) || (ed <= 0) ) { - cvm::error("Error: negative exponent(s) provided.\n", - COLVARS_INPUT_ERROR); + if ((en <= 0) || (ed <= 0)) { + error_code |= cvm::error("Error: negative exponent(s) provided.\n", COLVARS_INPUT_ERROR); } if (cvm::debug()) cvm::log("Done initializing h_bond object.\n"); + + return error_code; } colvar::h_bond::h_bond(cvm::atom const &acceptor, cvm::atom const &donor, cvm::real r0_i, int en_i, int ed_i) - : r0(r0_i), en(en_i), ed(ed_i) + : h_bond() { - set_function_type("hBond"); - x.type(colvarvalue::type_scalar); - init_scalar_boundaries(0.0, 1.0); - + r0 = r0_i; + en = en_i; + ed = ed_i; register_atom_group(new cvm::atom_group); atom_groups[0]->add_atom(acceptor); atom_groups[0]->add_atom(donor); @@ -385,64 +380,63 @@ void colvar::h_bond::calc_gradients() } -void colvar::h_bond::apply_force(colvarvalue const &force) -{ - (atom_groups[0])->apply_colvar_force(force); -} - -simple_scalar_dist_functions(h_bond) - - - -colvar::selfcoordnum::selfcoordnum(std::string const &conf) - : cvc(conf), pairlist(NULL) +colvar::selfcoordnum::selfcoordnum() { set_function_type("selfCoordNum"); x.type(colvarvalue::type_scalar); + r0 = cvm::main()->proxy->angstrom_to_internal(4.0); +} - colvarproxy *proxy = cvm::main()->proxy; + +int colvar::selfcoordnum::init(std::string const &conf) +{ + int error_code = cvc::init(conf); group1 = parse_group(conf, "group1"); - get_keyval(conf, "cutoff", r0, cvm::real(proxy->angstrom_to_internal(4.0))); - get_keyval(conf, "expNumer", en, 6); - get_keyval(conf, "expDenom", ed, 12); - - - if ( (en%2) || (ed%2) ) { - cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", - COLVARS_INPUT_ERROR); + if (!group1 || group1->size() == 0) { + return error_code | COLVARS_INPUT_ERROR; } - if ( (en <= 0) || (ed <= 0) ) { - cvm::error("Error: negative exponent(s) provided.\n", - COLVARS_INPUT_ERROR); + get_keyval(conf, "cutoff", r0, r0); + get_keyval(conf, "expNumer", en, en); + get_keyval(conf, "expDenom", ed, ed); + + + if ((en % 2) || (ed % 2)) { + error_code |= cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", + COLVARS_INPUT_ERROR); + } + + if ((en <= 0) || (ed <= 0)) { + error_code |= cvm::error("Error: negative exponent(s) provided.\n", COLVARS_INPUT_ERROR); } if (!is_enabled(f_cvc_pbc_minimum_image)) { cvm::log("Warning: only minimum-image distances are used by this variable.\n"); } - get_keyval(conf, "tolerance", tolerance, 0.0); + get_keyval(conf, "tolerance", tolerance, tolerance); if (tolerance > 0) { - get_keyval(conf, "pairListFrequency", pairlist_freq, 100); + get_keyval(conf, "pairListFrequency", pairlist_freq, pairlist_freq); if ( ! (pairlist_freq > 0) ) { - cvm::error("Error: non-positive pairlistfrequency provided.\n", - COLVARS_INPUT_ERROR); - return; + error_code |= cvm::error("Error: non-positive pairlistfrequency provided.\n", + COLVARS_INPUT_ERROR); } pairlist = new bool[(group1->size()-1) * (group1->size()-1)]; } init_scalar_boundaries(0.0, static_cast((group1->size()-1) * (group1->size()-1))); + + return error_code; } colvar::selfcoordnum::~selfcoordnum() { - if (pairlist != NULL) { + if (pairlist) { delete [] pairlist; } } @@ -527,44 +521,36 @@ void colvar::selfcoordnum::calc_gradients() } -void colvar::selfcoordnum::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) { - group1->apply_colvar_force(force.real_value); - } -} - -simple_scalar_dist_functions(selfcoordnum) - - - -// groupcoordnum member functions -colvar::groupcoordnum::groupcoordnum(std::string const &conf) - : distance(conf), b_anisotropic(false) +colvar::groupcoordnum::groupcoordnum() { set_function_type("groupCoord"); x.type(colvarvalue::type_scalar); init_scalar_boundaries(0.0, 1.0); - colvarproxy *proxy = cvm::main()->proxy; + r0 = proxy->angstrom_to_internal(4.0); + r0_vec = cvm::rvector(proxy->angstrom_to_internal(4.0), + proxy->angstrom_to_internal(4.0), + proxy->angstrom_to_internal(4.0)); +} + + +int colvar::groupcoordnum::init(std::string const &conf) +{ + int error_code = distance::init(conf); // group1 and group2 are already initialized by distance() if (group1->b_dummy || group2->b_dummy) { - cvm::error("Error: neither group can be a dummy atom\n"); - return; + return cvm::error("Error: neither group can be a dummy atom\n", COLVARS_INPUT_ERROR); } - bool const b_scale = get_keyval(conf, "cutoff", r0, - cvm::real(proxy->angstrom_to_internal(4.0))); - - if (get_keyval(conf, "cutoff3", r0_vec, - cvm::rvector(4.0, 4.0, 4.0), parse_silent)) { + bool const b_scale = get_keyval(conf, "cutoff", r0, r0); + if (get_keyval(conf, "cutoff3", r0_vec, r0_vec)) { if (b_scale) { - cvm::error("Error: cannot specify \"scale\" and " - "\"scale3\" at the same time.\n"); - return; + error_code |= + cvm::error("Error: cannot specify \"cutoff\" and \"cutoff3\" at the same time.\n", + COLVARS_INPUT_ERROR); } b_anisotropic = true; // remove meaningless negative signs @@ -573,23 +559,23 @@ colvar::groupcoordnum::groupcoordnum(std::string const &conf) if (r0_vec.z < 0.0) r0_vec.z *= -1.0; } - get_keyval(conf, "expNumer", en, 6); - get_keyval(conf, "expDenom", ed, 12); + get_keyval(conf, "expNumer", en, en); + get_keyval(conf, "expDenom", ed, ed); - if ( (en%2) || (ed%2) ) { - cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", - COLVARS_INPUT_ERROR); + if ((en % 2) || (ed % 2)) { + error_code |= cvm::error("Error: odd exponent(s) provided, can only use even ones.\n", + COLVARS_INPUT_ERROR); } - if ( (en <= 0) || (ed <= 0) ) { - cvm::error("Error: negative exponent(s) provided.\n", - COLVARS_INPUT_ERROR); + if ((en <= 0) || (ed <= 0)) { + error_code |= cvm::error("Error: negative exponent(s) provided.\n", COLVARS_INPUT_ERROR); } if (!is_enabled(f_cvc_pbc_minimum_image)) { cvm::log("Warning: only minimum-image distances are used by this variable.\n"); } + return error_code; } @@ -640,16 +626,3 @@ void colvar::groupcoordnum::calc_gradients() group1->set_weighted_gradient(group1_com_atom.grad); group2->set_weighted_gradient(group2_com_atom.grad); } - - -void colvar::groupcoordnum::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(groupcoordnum) diff --git a/lib/colvars/colvarcomp_distances.cpp b/lib/colvars/colvarcomp_distances.cpp index d96cb33482..319190c385 100644 --- a/lib/colvars/colvarcomp_distances.cpp +++ b/lib/colvars/colvarcomp_distances.cpp @@ -11,14 +11,12 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" +#include "colvar_rotation_derivative.h" - -colvar::distance::distance(std::string const &conf) - : cvc(conf) +colvar::distance::distance() { set_function_type("distance"); init_as_distance(); @@ -26,23 +24,23 @@ colvar::distance::distance(std::string const &conf) provide(f_cvc_inv_gradient); provide(f_cvc_Jacobian); enable(f_cvc_com_based); +} + + +int colvar::distance::init(std::string const &conf) +{ + int error_code = cvc::init(conf); group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); - init_total_force_params(conf); -} + if (!group1 || !group2) { + return error_code | COLVARS_INPUT_ERROR; + } + error_code |= init_total_force_params(conf); -colvar::distance::distance() - : cvc() -{ - set_function_type("distance"); - init_as_distance(); - - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); - enable(f_cvc_com_based); + return error_code; } @@ -84,35 +82,10 @@ void colvar::distance::calc_Jacobian_derivative() } -void colvar::distance::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(distance) - - - -colvar::distance_vec::distance_vec(std::string const &conf) - : distance(conf) -{ - set_function_type("distanceVec"); - enable(f_cvc_com_based); - disable(f_cvc_explicit_gradient); - x.type(colvarvalue::type_3vector); -} - colvar::distance_vec::distance_vec() - : distance() { set_function_type("distanceVec"); - enable(f_cvc_com_based); disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_3vector); } @@ -146,48 +119,47 @@ void colvar::distance_vec::apply_force(colvarvalue const &force) } -cvm::real colvar::distance_vec::dist2(colvarvalue const &x1, - colvarvalue const &x2) const +cvm::real colvar::distance_vec::dist2(colvarvalue const &x1, colvarvalue const &x2) const { - return (cvm::position_distance(x1.rvector_value, x2.rvector_value)).norm2(); + if (is_enabled(f_cvc_pbc_minimum_image)) { + return (cvm::position_distance(x1.rvector_value, x2.rvector_value)).norm2(); + } + return (x2.rvector_value - x1.rvector_value).norm2(); } -colvarvalue colvar::distance_vec::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const +colvarvalue colvar::distance_vec::dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const { - return 2.0 * cvm::position_distance(x2.rvector_value, x1.rvector_value); + if (is_enabled(f_cvc_pbc_minimum_image)) { + return 2.0 * cvm::position_distance(x2.rvector_value, x1.rvector_value); + } + return 2.0 * (x2.rvector_value - x1.rvector_value); } -colvarvalue colvar::distance_vec::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const +colvarvalue colvar::distance_vec::dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const { - return 2.0 * cvm::position_distance(x2.rvector_value, x1.rvector_value); + return distance_vec::dist2_lgrad(x2, x1); } +void colvar::distance_vec::wrap(colvarvalue & /* x_unwrapped */) const {} -colvar::distance_z::distance_z(std::string const &conf) - : cvc(conf) + +colvar::distance_z::distance_z() { set_function_type("distanceZ"); provide(f_cvc_inv_gradient); provide(f_cvc_Jacobian); enable(f_cvc_com_based); + provide(f_cvc_periodic); x.type(colvarvalue::type_scalar); +} - // TODO detect PBC from MD engine (in simple cases) - // and then update period in real time - if (period != 0.0) { - enable(f_cvc_periodic); - } - if ((wrap_center != 0.0) && !is_enabled(f_cvc_periodic)) { - cvm::error("Error: wrapAround was defined in a distanceZ component," - " but its period has not been set.\n"); - return; - } +int colvar::distance_z::init(std::string const &conf) +{ + int error_code = cvc::init(conf); main = parse_group(conf, "main"); ref1 = parse_group(conf, "ref"); @@ -202,8 +174,7 @@ colvar::distance_z::distance_z(std::string const &conf) } else { if (get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0))) { if (axis.norm2() == 0.0) { - cvm::error("Axis vector is zero!"); - return; + error_code |= cvm::error("Axis vector is zero!", COLVARS_INPUT_ERROR); } if (axis.norm2() != 1.0) { axis = axis.unit(); @@ -213,18 +184,9 @@ colvar::distance_z::distance_z(std::string const &conf) fixed_axis = true; } - init_total_force_params(conf); + error_code |= init_total_force_params(conf); -} - - -colvar::distance_z::distance_z() -{ - set_function_type("distanceZ"); - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); - enable(f_cvc_com_based); - x.type(colvarvalue::type_scalar); + return error_code; } @@ -254,7 +216,7 @@ void colvar::distance_z::calc_value() axis = axis.unit(); } x.real_value = axis * dist_v; - this->wrap(x); + wrap(x); } @@ -303,90 +265,12 @@ void colvar::distance_z::calc_Jacobian_derivative() } -void colvar::distance_z::apply_force(colvarvalue const &force) -{ - if (!ref1->noforce) - ref1->apply_colvar_force(force.real_value); - - if (ref2 && !ref2->noforce) - ref2->apply_colvar_force(force.real_value); - - if (!main->noforce) - main->apply_colvar_force(force.real_value); -} - - -// Differences should always be wrapped around 0 (ignoring wrap_center) -cvm::real colvar::distance_z::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - if (is_enabled(f_cvc_periodic)) { - cvm::real shift = cvm::floor(diff/period + 0.5); - diff -= shift * period; - } - return diff * diff; -} - - -colvarvalue colvar::distance_z::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - if (is_enabled(f_cvc_periodic)) { - cvm::real shift = cvm::floor(diff/period + 0.5); - diff -= shift * period; - } - return 2.0 * diff; -} - - -colvarvalue colvar::distance_z::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - if (is_enabled(f_cvc_periodic)) { - cvm::real shift = cvm::floor(diff/period + 0.5); - diff -= shift * period; - } - return (-2.0) * diff; -} - - -void colvar::distance_z::wrap(colvarvalue &x_unwrapped) const -{ - if (!is_enabled(f_cvc_periodic)) { - // don't wrap if the period has not been set - return; - } - cvm::real shift = - cvm::floor((x_unwrapped.real_value - wrap_center) / period + 0.5); - x_unwrapped.real_value -= shift * period; -} - - - -colvar::distance_xy::distance_xy(std::string const &conf) - : distance_z(conf) -{ - set_function_type("distanceXY"); - init_as_distance(); - - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); - enable(f_cvc_com_based); -} - colvar::distance_xy::distance_xy() - : distance_z() { set_function_type("distanceXY"); + provide(f_cvc_periodic, false); // Disable inherited distance_z flag init_as_distance(); - - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); - enable(f_cvc_com_based); } @@ -462,35 +346,8 @@ void colvar::distance_xy::calc_Jacobian_derivative() } -void colvar::distance_xy::apply_force(colvarvalue const &force) -{ - if (!ref1->noforce) - ref1->apply_colvar_force(force.real_value); - - if (ref2 && !ref2->noforce) - ref2->apply_colvar_force(force.real_value); - - if (!main->noforce) - main->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(distance_xy) - - - -colvar::distance_dir::distance_dir(std::string const &conf) - : distance(conf) -{ - set_function_type("distanceDir"); - enable(f_cvc_com_based); - disable(f_cvc_explicit_gradient); - x.type(colvarvalue::type_unit3vector); -} - colvar::distance_dir::distance_dir() - : distance() { set_function_type("distanceDir"); enable(f_cvc_com_based); @@ -556,31 +413,39 @@ colvarvalue colvar::distance_dir::dist2_rgrad(colvarvalue const &x1, } +void colvar::distance_dir::wrap(colvarvalue & /* x_unwrapped */) const {} -colvar::distance_inv::distance_inv(std::string const &conf) - : cvc(conf) + + +colvar::distance_inv::distance_inv() { set_function_type("distanceInv"); init_as_distance(); +} + + +int colvar::distance_inv::init(std::string const &conf) +{ + int error_code = cvc::init(conf); group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); - get_keyval(conf, "exponent", exponent, 6); - if (exponent%2) { - cvm::error("Error: odd exponent provided, can only use even ones.\n"); - return; + get_keyval(conf, "exponent", exponent, exponent); + if (exponent % 2) { + error_code |= + cvm::error("Error: odd exponent provided, can only use even ones.\n", COLVARS_INPUT_ERROR); } if (exponent <= 0) { - cvm::error("Error: negative or zero exponent provided.\n"); - return; + error_code |= cvm::error("Error: negative or zero exponent provided.\n", COLVARS_INPUT_ERROR); } for (cvm::atom_iter ai1 = group1->begin(); ai1 != group1->end(); ai1++) { for (cvm::atom_iter ai2 = group2->begin(); ai2 != group2->end(); ai2++) { if (ai1->id == ai2->id) { - cvm::error("Error: group1 and group2 have some atoms in common: this is not allowed for distanceInv.\n"); - return; + error_code |= cvm::error("Error: group1 and group2 have some atoms in common: this is not " + "allowed for distanceInv.\n", + COLVARS_INPUT_ERROR); } } } @@ -590,6 +455,8 @@ colvar::distance_inv::distance_inv(std::string const &conf) "for distanceInv, because its value and gradients are computed " "simultaneously.\n"); } + + return error_code; } @@ -642,33 +509,6 @@ void colvar::distance_inv::calc_gradients() } -void colvar::distance_inv::apply_force(colvarvalue const &force) -{ - if (!group1->noforce) - group1->apply_colvar_force(force.real_value); - - if (!group2->noforce) - group2->apply_colvar_force(force.real_value); -} - - -simple_scalar_dist_functions(distance_inv) - - - -colvar::distance_pairs::distance_pairs(std::string const &conf) - : cvc(conf) -{ - set_function_type("distancePairs"); - - group1 = parse_group(conf, "group1"); - group2 = parse_group(conf, "group2"); - - x.type(colvarvalue::type_vector); - disable(f_cvc_explicit_gradient); - x.vector1d_value.resize(group1->size() * group2->size()); -} - colvar::distance_pairs::distance_pairs() { @@ -678,6 +518,18 @@ colvar::distance_pairs::distance_pairs() } +int colvar::distance_pairs::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + + group1 = parse_group(conf, "group1"); + group2 = parse_group(conf, "group2"); + x.vector1d_value.resize(group1->size() * group2->size()); + + return error_code; +} + + void colvar::distance_pairs::calc_value() { x.vector1d_value.resize(group1->size() * group2->size()); @@ -740,26 +592,28 @@ void colvar::distance_pairs::apply_force(colvarvalue const &force) } - -colvar::dipole_magnitude::dipole_magnitude(std::string const &conf) - : cvc(conf) +cvm::real colvar::distance_pairs::dist2(colvarvalue const &x1, colvarvalue const &x2) const { - set_function_type("dipoleMagnitude"); - atoms = parse_group(conf, "atoms"); - init_total_force_params(conf); - x.type(colvarvalue::type_scalar); + return (x1.vector1d_value - x2.vector1d_value).norm2(); } -colvar::dipole_magnitude::dipole_magnitude(cvm::atom const &a1) +colvarvalue colvar::distance_pairs::dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const { - set_function_type("dipoleMagnitude"); - atoms = new cvm::atom_group(std::vector(1, a1)); - register_atom_group(atoms); - x.type(colvarvalue::type_scalar); + return 2.0 * (x1.vector1d_value - x2.vector1d_value); } +colvarvalue colvar::distance_pairs::dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return distance_pairs::dist2_lgrad(x1, x2); +} + + +void colvar::distance_pairs::wrap(colvarvalue & /* x_unwrapped */) const {} + + + colvar::dipole_magnitude::dipole_magnitude() { set_function_type("dipoleMagnitude"); @@ -767,6 +621,15 @@ colvar::dipole_magnitude::dipole_magnitude() } +int colvar::dipole_magnitude::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + atoms = parse_group(conf, "atoms"); + if (!atoms) error_code |= COLVARS_INPUT_ERROR; + return error_code; +} + + void colvar::dipole_magnitude::calc_value() { cvm::atom_pos const atomsCom = atoms->center_of_mass(); @@ -787,26 +650,20 @@ void colvar::dipole_magnitude::calc_gradients() } -void colvar::dipole_magnitude::apply_force(colvarvalue const &force) + +colvar::gyration::gyration() { - if (!atoms->noforce) { - atoms->apply_colvar_force(force.real_value); - } + set_function_type("gyration"); + provide(f_cvc_inv_gradient); + provide(f_cvc_Jacobian); + init_as_distance(); } -simple_scalar_dist_functions(dipole_magnitude) - - - -colvar::gyration::gyration(std::string const &conf) - : cvc(conf) +int colvar::gyration::init(std::string const &conf) { - set_function_type("gyration"); - init_as_distance(); + int error_code = cvc::init(conf); - provide(f_cvc_inv_gradient); - provide(f_cvc_Jacobian); atoms = parse_group(conf, "atoms"); if (atoms->b_user_defined_fit) { @@ -816,6 +673,8 @@ colvar::gyration::gyration(std::string const &conf) atoms->ref_pos.assign(1, cvm::atom_pos(0.0, 0.0, 0.0)); atoms->fit_gradients.assign(atoms->size(), cvm::rvector(0.0, 0.0, 0.0)); } + + return error_code; } @@ -857,22 +716,10 @@ void colvar::gyration::calc_Jacobian_derivative() } -void colvar::gyration::apply_force(colvarvalue const &force) -{ - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); -} - -simple_scalar_dist_functions(gyration) - - - -colvar::inertia::inertia(std::string const &conf) - : gyration(conf) +colvar::inertia::inertia() { set_function_type("inertia"); - init_as_distance(); } @@ -893,32 +740,26 @@ void colvar::inertia::calc_gradients() } -void colvar::inertia::apply_force(colvarvalue const &force) + +colvar::inertia_z::inertia_z() { - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); + set_function_type("inertiaZ"); } -simple_scalar_dist_functions(inertia_z) - - - -colvar::inertia_z::inertia_z(std::string const &conf) - : inertia(conf) +int colvar::inertia_z::init(std::string const &conf) { - set_function_type("inertiaZ"); - init_as_distance(); + int error_code = inertia::init(conf); if (get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0))) { if (axis.norm2() == 0.0) { - cvm::error("Axis vector is zero!", COLVARS_INPUT_ERROR); - return; + error_code |= cvm::error("Axis vector is zero!", COLVARS_INPUT_ERROR); } if (axis.norm2() != 1.0) { axis = axis.unit(); cvm::log("The normalized axis is: "+cvm::to_str(axis)+".\n"); } } + return error_code; } @@ -940,31 +781,23 @@ void colvar::inertia_z::calc_gradients() } -void colvar::inertia_z::apply_force(colvarvalue const &force) -{ - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); -} - -simple_scalar_dist_functions(inertia) - - - - -colvar::rmsd::rmsd(std::string const &conf) - : cvc(conf) +colvar::rmsd::rmsd() { set_function_type("rmsd"); init_as_distance(); - provide(f_cvc_inv_gradient); +} + + +int colvar::rmsd::init(std::string const &conf) +{ + int error_code = cvc::init(conf); atoms = parse_group(conf, "atoms"); if (!atoms || atoms->size() == 0) { - cvm::error("Error: \"atoms\" must contain at least 1 atom to compute RMSD."); - return; + return error_code | COLVARS_INPUT_ERROR; } bool b_Jacobian_derivative = true; @@ -981,20 +814,20 @@ colvar::rmsd::rmsd(std::string const &conf) if (get_keyval(conf, "refPositions", ref_pos, ref_pos)) { cvm::log("Using reference positions from configuration file to calculate the variable.\n"); if (ref_pos.size() != atoms->size()) { - cvm::error("Error: the number of reference positions provided ("+ - cvm::to_str(ref_pos.size())+ - ") does not match the number of atoms of group \"atoms\" ("+ - cvm::to_str(atoms->size())+").\n"); - return; + error_code |= cvm::error("Error: the number of reference positions provided (" + + cvm::to_str(ref_pos.size()) + + ") does not match the number of atoms of group \"atoms\" (" + + cvm::to_str(atoms->size()) + ").\n", + COLVARS_INPUT_ERROR); } } else { // Only look for ref pos file if ref positions not already provided std::string ref_pos_file; if (get_keyval(conf, "refPositionsFile", ref_pos_file, std::string(""))) { if (ref_pos.size()) { - cvm::error("Error: cannot specify \"refPositionsFile\" and " - "\"refPositions\" at the same time.\n"); - return; + error_code |= cvm::error("Error: cannot specify \"refPositionsFile\" and " + "\"refPositions\" at the same time.\n", + COLVARS_INPUT_ERROR); } std::string ref_pos_col; @@ -1004,9 +837,9 @@ colvar::rmsd::rmsd(std::string const &conf) // if provided, use PDB column to select coordinates bool found = get_keyval(conf, "refPositionsColValue", ref_pos_col_value, 0.0); if (found && ref_pos_col_value==0.0) { - cvm::error("Error: refPositionsColValue, " - "if provided, must be non-zero.\n"); - return; + error_code |= cvm::error("Error: refPositionsColValue, " + "if provided, must be non-zero.\n", + COLVARS_INPUT_ERROR); } } @@ -1015,15 +848,17 @@ colvar::rmsd::rmsd(std::string const &conf) cvm::load_coords(ref_pos_file.c_str(), &ref_pos, atoms, ref_pos_col, ref_pos_col_value); } else { - cvm::error("Error: no reference positions for RMSD; use either refPositions of refPositionsFile."); - return; + error_code |= cvm::error( + "Error: no reference positions for RMSD; use either refPositions of refPositionsFile.", + COLVARS_INPUT_ERROR); } } if (ref_pos.size() != atoms->size()) { - cvm::error("Error: found " + cvm::to_str(ref_pos.size()) + - " reference positions for RMSD; expected " + cvm::to_str(atoms->size())); - return; + error_code |= + cvm::error("Error: found " + cvm::to_str(ref_pos.size()) + + " reference positions for RMSD; expected " + cvm::to_str(atoms->size()), + COLVARS_INPUT_ERROR); } if (atoms->b_user_defined_fit) { @@ -1042,14 +877,18 @@ colvar::rmsd::rmsd(std::string const &conf) cvm::log("This is a standard minimum RMSD, derivatives of the optimal rotation " "will not be computed as they cancel out in the gradients."); atoms->disable(f_ag_fit_gradients); - - // request the calculation of the derivatives of the rotation defined by the atom group - atoms->rot.request_group1_gradients(atoms->size()); - // request derivatives of optimal rotation wrt reference coordinates for Jacobian: - // this is only required for ABF, but we do both groups here for better caching - atoms->rot.request_group2_gradients(atoms->size()); } + atoms->setup_rotation_derivative(); + error_code |= init_permutation(conf); + + return error_code; +} + + +int colvar::rmsd::init_permutation(std::string const &conf) +{ + int error_code = COLVARS_OK; std::string perm_conf; size_t pos = 0; // current position in config string n_permutations = 1; @@ -1064,21 +903,22 @@ colvar::rmsd::rmsd(std::string const &conf) std::vector const &ids = atoms->ids(); size_t const ia = std::find(ids.begin(), ids.end(), index-1) - ids.begin(); if (ia == atoms->size()) { - cvm::error("Error: atom id " + cvm::to_str(index) + - " is not a member of group \"atoms\"."); - return; + error_code |= cvm::error("Error: atom id " + cvm::to_str(index) + + " is not a member of group \"atoms\".", + COLVARS_INPUT_ERROR); } if (std::find(perm.begin(), perm.end(), ia) != perm.end()) { - cvm::error("Error: atom id " + cvm::to_str(index) + - " is mentioned more than once in atomPermutation list."); - return; + error_code |= cvm::error("Error: atom id " + cvm::to_str(index) + + " is mentioned more than once in atomPermutation list.", + COLVARS_INPUT_ERROR); } perm.push_back(ia); } if (perm.size() != atoms->size()) { - cvm::error("Error: symmetry permutation in input contains " + cvm::to_str(perm.size()) + - " indices, but group \"atoms\" contains " + cvm::to_str(atoms->size()) + " atoms."); - return; + error_code |= cvm::error( + "Error: symmetry permutation in input contains " + cvm::to_str(perm.size()) + + " indices, but group \"atoms\" contains " + cvm::to_str(atoms->size()) + " atoms.", + COLVARS_INPUT_ERROR); } cvm::log("atomPermutation = " + cvm::to_str(perm)); n_permutations++; @@ -1088,6 +928,8 @@ colvar::rmsd::rmsd(std::string const &conf) } } } + + return error_code; } @@ -1132,13 +974,6 @@ void colvar::rmsd::calc_gradients() } -void colvar::rmsd::apply_force(colvarvalue const &force) -{ - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); -} - - void colvar::rmsd::calc_force_invgrads() { atoms->read_total_forces(); @@ -1165,10 +1000,12 @@ void colvar::rmsd::calc_Jacobian_derivative() cvm::matrix2d grad_rot_mat(3, 3); // gradients of products of 2 quaternion components cvm::rvector g11, g22, g33, g01, g02, g03, g12, g13, g23; + cvm::vector1d dq; + atoms->rot_deriv->prepare_derivative(rotation_derivative_dldq::use_dq); for (size_t ia = 0; ia < atoms->size(); ia++) { // Gradient of optimal quaternion wrt current Cartesian position - cvm::vector1d &dq = atoms->rot.dQ0_1[ia]; + atoms->rot_deriv->calc_derivative_wrt_group1(ia, nullptr, &dq); g11 = 2.0 * (atoms->rot.q)[1]*dq[1]; g22 = 2.0 * (atoms->rot.q)[2]*dq[2]; @@ -1213,19 +1050,24 @@ void colvar::rmsd::calc_Jacobian_derivative() } -simple_scalar_dist_functions(rmsd) - - -colvar::eigenvector::eigenvector(std::string const &conf) - : cvc(conf) +colvar::eigenvector::eigenvector() { set_function_type("eigenvector"); provide(f_cvc_inv_gradient); provide(f_cvc_Jacobian); x.type(colvarvalue::type_scalar); +} + + +int colvar::eigenvector::init(std::string const &conf) +{ + int error_code = cvc::init(conf); atoms = parse_group(conf, "atoms"); + if (!atoms || atoms->size() == 0) { + return error_code | COLVARS_INPUT_ERROR; + } { bool const b_inline = get_keyval(conf, "refPositions", ref_pos, ref_pos); @@ -1233,9 +1075,9 @@ colvar::eigenvector::eigenvector(std::string const &conf) if (b_inline) { cvm::log("Using reference positions from input file.\n"); if (ref_pos.size() != atoms->size()) { - cvm::error("Error: reference positions do not " - "match the number of requested atoms.\n"); - return; + error_code |= cvm::error("Error: reference positions do not " + "match the number of requested atoms.\n", + COLVARS_INPUT_ERROR); } } @@ -1243,19 +1085,18 @@ colvar::eigenvector::eigenvector(std::string const &conf) if (get_keyval(conf, "refPositionsFile", file_name)) { if (b_inline) { - cvm::error("Error: refPositions and refPositionsFile cannot be specified at the same time.\n"); - return; + error_code |= cvm::error( + "Error: refPositions and refPositionsFile cannot be specified at the same time.\n", + COLVARS_INPUT_ERROR); } - std::string file_col; double file_col_value=0.0; if (get_keyval(conf, "refPositionsCol", file_col, std::string(""))) { // use PDB flags if column is provided bool found = get_keyval(conf, "refPositionsColValue", file_col_value, 0.0); - if (found && file_col_value==0.0) { - cvm::error("Error: refPositionsColValue, " - "if provided, must be non-zero.\n"); - return; + if (found && file_col_value == 0.0) { + error_code |= cvm::error("Error: refPositionsColValue, if provided, must be non-zero.\n", + COLVARS_INPUT_ERROR); } } @@ -1266,14 +1107,14 @@ colvar::eigenvector::eigenvector(std::string const &conf) } if (ref_pos.size() == 0) { - cvm::error("Error: reference positions were not provided.\n", COLVARS_INPUT_ERROR); - return; + error_code |= + cvm::error("Error: reference positions were not provided.\n", COLVARS_INPUT_ERROR); } if (ref_pos.size() != atoms->size()) { - cvm::error("Error: reference positions do not " - "match the number of requested atoms.\n", COLVARS_INPUT_ERROR); - return; + error_code |= cvm::error("Error: reference positions do not " + "match the number of requested atoms.\n", + COLVARS_INPUT_ERROR); } // save for later the geometric center of the provided positions (may not be the origin) @@ -1295,13 +1136,8 @@ colvar::eigenvector::eigenvector(std::string const &conf) atoms->center_ref_pos(); atoms->disable(f_ag_fit_gradients); // cancel out if group is fitted on itself // and cvc is translationally invariant - - // request the calculation of the derivatives of the rotation defined by the atom group - atoms->rot.request_group1_gradients(atoms->size()); - // request derivatives of optimal rotation wrt reference coordinates for Jacobian: - // this is only required for ABF, but we do both groups here for better caching - atoms->rot.request_group2_gradients(atoms->size()); } + atoms->setup_rotation_derivative(); { bool const b_inline = get_keyval(conf, "vector", eigenvec, eigenvec); @@ -1309,9 +1145,8 @@ colvar::eigenvector::eigenvector(std::string const &conf) if (b_inline) { cvm::log("Using vector components from input file.\n"); if (eigenvec.size() != atoms->size()) { - cvm::error("Error: vector components do not " - "match the number of requested atoms->\n"); - return; + error_code |= cvm::error("Error: vector components do not " + "match the number of requested atoms->\n", COLVARS_INPUT_ERROR); } } @@ -1319,8 +1154,9 @@ colvar::eigenvector::eigenvector(std::string const &conf) if (get_keyval(conf, "vectorFile", file_name)) { if (b_inline) { - cvm::error("Error: vector and vectorFile cannot be specified at the same time.\n"); - return; + error_code |= + cvm::error("Error: vector and vectorFile cannot be specified at the same time.\n", + COLVARS_INPUT_ERROR); } std::string file_col; @@ -1329,8 +1165,8 @@ colvar::eigenvector::eigenvector(std::string const &conf) // use PDB flags if column is provided bool found = get_keyval(conf, "vectorColValue", file_col_value, 0.0); if (found && file_col_value==0.0) { - cvm::error("Error: vectorColValue, if provided, must be non-zero.\n"); - return; + error_code |= cvm::error("Error: vectorColValue, if provided, must be non-zero.\n", + COLVARS_INPUT_ERROR); } } @@ -1341,9 +1177,8 @@ colvar::eigenvector::eigenvector(std::string const &conf) } if (!ref_pos.size() || !eigenvec.size()) { - cvm::error("Error: both reference coordinates" - "and eigenvector must be defined.\n"); - return; + error_code |= cvm::error("Error: both reference coordinates and eigenvector must be defined.\n", + COLVARS_INPUT_ERROR); } cvm::atom_pos eig_center(0.0, 0.0, 0.0); @@ -1367,8 +1202,9 @@ colvar::eigenvector::eigenvector(std::string const &conf) } if (atoms->is_enabled(f_ag_rotate)) { atoms->rot.calc_optimal_rotation(eigenvec, ref_pos); + const auto rot_mat = atoms->rot.matrix(); for (size_t i = 0; i < atoms->size(); i++) { - eigenvec[i] = atoms->rot.rotate(eigenvec[i]); + eigenvec[i] = rot_mat * eigenvec[i]; } } cvm::log("\"differenceVector\" is on: subtracting the reference positions from the provided vector: v = x_vec - x_ref.\n"); @@ -1416,6 +1252,8 @@ colvar::eigenvector::eigenvector(std::string const &conf) cvm::log("The norm of the vector is |v| = "+ cvm::to_str(1.0/cvm::sqrt(eigenvec_invnorm2))+".\n"); } + + return error_code; } @@ -1436,13 +1274,6 @@ void colvar::eigenvector::calc_gradients() } -void colvar::eigenvector::apply_force(colvarvalue const &force) -{ - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); -} - - void colvar::eigenvector::calc_force_invgrads() { atoms->read_total_forces(); @@ -1466,12 +1297,14 @@ void colvar::eigenvector::calc_Jacobian_derivative() cvm::real sum = 0.0; + cvm::vector1d dq_1; + atoms->rot_deriv->prepare_derivative(rotation_derivative_dldq::use_dq); for (size_t ia = 0; ia < atoms->size(); ia++) { // Gradient of optimal quaternion wrt current Cartesian position // trick: d(R^-1)/dx = d(R^t)/dx = (dR/dx)^t // we can just transpose the derivatives of the direct matrix - cvm::vector1d &dq_1 = atoms->rot.dQ0_1[ia]; + atoms->rot_deriv->calc_derivative_wrt_group1(ia, nullptr, &dq_1); g11 = 2.0 * quat0[1]*dq_1[1]; g22 = 2.0 * quat0[2]*dq_1[2]; @@ -1506,14 +1339,18 @@ void colvar::eigenvector::calc_Jacobian_derivative() } -simple_scalar_dist_functions(eigenvector) - - -colvar::cartesian::cartesian(std::string const &conf) - : cvc(conf) +colvar::cartesian::cartesian() { set_function_type("cartesian"); + x.type(colvarvalue::type_vector); + disable(f_cvc_explicit_gradient); +} + + +int colvar::cartesian::init(std::string const &conf) +{ + int error_code = cvc::init(conf); atoms = parse_group(conf, "atoms"); @@ -1528,14 +1365,15 @@ colvar::cartesian::cartesian(std::string const &conf) if (use_z) axes.push_back(2); if (axes.size() == 0) { - cvm::error("Error: a \"cartesian\" component was defined with all three axes disabled.\n"); - return; + error_code |= + cvm::error("Error: a \"cartesian\" component was defined with all three axes disabled.\n", + COLVARS_INPUT_ERROR); } - x.type(colvarvalue::type_vector); - disable(f_cvc_explicit_gradient); // Don't try to access atoms if creation of the atom group failed - if (atoms != NULL) x.vector1d_value.resize(atoms->size() * axes.size()); + if (atoms) x.vector1d_value.resize(atoms->size() * axes.size()); + + return error_code; } @@ -1573,3 +1411,24 @@ void colvar::cartesian::apply_force(colvarvalue const &force) } } } + + +cvm::real colvar::cartesian::dist2(colvarvalue const &x1, colvarvalue const &x2) const +{ + return (x1.vector1d_value - x2.vector1d_value).norm2(); +} + + +colvarvalue colvar::cartesian::dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return 2.0 * (x1.vector1d_value - x2.vector1d_value); +} + + +colvarvalue colvar::cartesian::dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return cartesian::dist2_lgrad(x1, x2); +} + + +void colvar::cartesian::wrap(colvarvalue & /* x_unwrapped */) const {} diff --git a/lib/colvars/colvarcomp_gpath.cpp b/lib/colvars/colvarcomp_gpath.cpp index c73ab4f6c1..46d6b8e5a8 100644 --- a/lib/colvars/colvarcomp_gpath.cpp +++ b/lib/colvars/colvarcomp_gpath.cpp @@ -1,4 +1,4 @@ -#if (__cplusplus >= 201103L) +// -*- c++ -*- // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: @@ -10,17 +10,29 @@ #include #include #include -#include #include #include #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" -colvar::CartesianBasedPath::CartesianBasedPath(std::string const &conf): cvc(conf), atoms(nullptr), reference_frames(0) { + + +colvar::CartesianBasedPath::CartesianBasedPath() +{ + x.type(colvarvalue::type_scalar); + // Don't use implicit gradient + enable(f_cvc_explicit_gradient); +} + + +int colvar::CartesianBasedPath::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + if (error_code != COLVARS_OK) return error_code; + // Parse selected atoms atoms = parse_group(conf, "atoms"); has_user_defined_fitting = false; @@ -31,13 +43,12 @@ colvar::CartesianBasedPath::CartesianBasedPath(std::string const &conf): cvc(con // Lookup reference column of PDB // Copied from the RMSD class std::string reference_column; - double reference_column_value; + double reference_column_value = 0.0; if (get_keyval(conf, "refPositionsCol", reference_column, std::string(""))) { - bool found = get_keyval(conf, "refPositionsColValue", reference_column_value, 0.0); + bool found = get_keyval(conf, "refPositionsColValue", reference_column_value, reference_column_value); if (found && reference_column_value == 0.0) { - cvm::error("Error: refPositionsColValue, " - "if provided, must be non-zero.\n"); - return; + return cvm::error("Error: refPositionsColValue, if provided, must be non-zero.\n", + COLVARS_INPUT_ERROR); } } // Lookup all reference frames @@ -66,9 +77,6 @@ colvar::CartesianBasedPath::CartesianBasedPath(std::string const &conf): cvc(con tmp_atoms->ref_pos = reference_frames[i_frame]; tmp_atoms->center_ref_pos(); tmp_atoms->enable(f_ag_fit_gradients); - tmp_atoms->rot.request_group1_gradients(tmp_atoms->size()); - tmp_atoms->rot.request_group2_gradients(tmp_atoms->size()); - comp_atoms.push_back(tmp_atoms); } else { // parse a group of atoms for fitting std::string fitting_group_name = std::string("fittingAtoms") + cvm::to_str(i_frame); @@ -91,15 +99,13 @@ colvar::CartesianBasedPath::CartesianBasedPath(std::string const &conf): cvc(con tmp_atoms->enable(f_ag_fit_gradients); tmp_atoms->enable(f_ag_fitting_group); tmp_atoms->fitting_group = tmp_fitting_atoms; - tmp_atoms->rot.request_group1_gradients(tmp_fitting_atoms->size()); - tmp_atoms->rot.request_group2_gradients(tmp_fitting_atoms->size()); reference_fitting_frames.push_back(reference_fitting_position); - comp_atoms.push_back(tmp_atoms); } + tmp_atoms->setup_rotation_derivative(); + comp_atoms.push_back(tmp_atoms); } - x.type(colvarvalue::type_scalar); - // Don't use implicit gradient - enable(f_cvc_explicit_gradient); + + return error_code; } colvar::CartesianBasedPath::~CartesianBasedPath() { @@ -125,8 +131,60 @@ void colvar::CartesianBasedPath::computeDistanceToReferenceFrames(std::vector& result) { + for (size_t i_frame = 0; i_frame < reference_frames.size() - 1; ++i_frame) { + std::vector this_frame_atom_pos(reference_frames[i_frame].size()); + std::vector next_frame_atom_pos(reference_frames[i_frame + 1].size()); + cvm::real frame_rmsd = 0.0; + const size_t this_index = i_frame; + const size_t next_index = i_frame + 1; + // compute COM of two successive images, respectively + cvm::atom_pos reference_cog_this, reference_cog_next; + for (size_t i_atom = 0; i_atom < atoms->size(); ++i_atom) { + reference_cog_this += reference_frames[this_index][i_atom]; + reference_cog_next += reference_frames[next_index][i_atom]; + } + reference_cog_this /= reference_frames[this_index].size(); + reference_cog_next /= reference_frames[next_index].size(); + // move all atoms to COM + for (size_t i_atom = 0; i_atom < atoms->size(); ++i_atom) { + this_frame_atom_pos[i_atom] = reference_frames[this_index][i_atom] - reference_cog_this; + next_frame_atom_pos[i_atom] = reference_frames[next_index][i_atom] - reference_cog_next; + } + cvm::rotation rot_this_to_next; + // compute the optimal rotation + rot_this_to_next.calc_optimal_rotation(this_frame_atom_pos, next_frame_atom_pos); + // compute rmsd between reference frames + for (size_t i_atom = 0; i_atom < atoms->size(); ++i_atom) { + frame_rmsd += (rot_this_to_next.q.rotate(this_frame_atom_pos[i_atom]) - next_frame_atom_pos[i_atom]).norm2(); + } + frame_rmsd /= cvm::real(atoms->size()); + frame_rmsd = cvm::sqrt(frame_rmsd); + result[i_frame] = frame_rmsd; + } +} + + +void colvar::CartesianBasedPath::apply_force(colvarvalue const &force) +{ + cvm::error("Error: using apply_force() in a component of type CartesianBasedPath, which is abstract.\n", + COLVARS_BUG_ERROR); +} + + + +colvar::gspath::gspath() +{ set_function_type("gspath"); +} + + +int colvar::gspath::init(std::string const &conf) +{ + int error_code = CartesianBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + get_keyval(conf, "useSecondClosestFrame", use_second_closest_frame, true); if (use_second_closest_frame == true) { cvm::log(std::string("Geometric path s(σ) will use the second closest frame to compute s_(m-1)\n")); @@ -140,12 +198,14 @@ colvar::gspath::gspath(std::string const &conf): CartesianBasedPath(conf) { cvm::log(std::string("Geometric path s(σ) will use the neighbouring frame to compute s_(m+1)\n")); } if (total_reference_frames < 2) { - cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + " reference frames, but gspath requires at least 2 frames.\n"); - return; + return cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + + " reference frames, but gspath requires at least 2 frames.\n", + COLVARS_INPUT_ERROR); } GeometricPathCV::GeometricPathBase::initialize(atoms->size(), cvm::atom_pos(), total_reference_frames, use_second_closest_frame, use_third_closest_frame); cvm::log(std::string("Geometric pathCV(s) is initialized.\n")); cvm::log(std::string("Geometric pathCV(s) loaded ") + cvm::to_str(reference_frames.size()) + std::string(" frames.\n")); + return error_code; } void colvar::gspath::updateDistanceToReferenceFrames() { @@ -192,8 +252,9 @@ void colvar::gspath::prepareVectors() { } else { rot_v3.calc_optimal_rotation(tmp_reference_frame_1, tmp_reference_frame_2); } + const auto rot_mat_v3 = rot_v3.matrix(); for (i_atom = 0; i_atom < atoms->size(); ++i_atom) { - v3[i_atom] = rot_v3.q.rotate(tmp_reference_frame_1[i_atom]) - tmp_reference_frame_2[i_atom]; + v3[i_atom] = rot_mat_v3 * tmp_reference_frame_1[i_atom] - tmp_reference_frame_2[i_atom]; } } else { cvm::atom_pos reference_cog_1, reference_cog_3; @@ -227,9 +288,10 @@ void colvar::gspath::prepareVectors() { } else { rot_v3.calc_optimal_rotation(tmp_reference_frame_1, tmp_reference_frame_3); } + const auto rot_mat_v3 = rot_v3.matrix(); for (i_atom = 0; i_atom < atoms->size(); ++i_atom) { // v3 = s_(m+1) - s_m - v3[i_atom] = tmp_reference_frame_3[i_atom] - rot_v3.q.rotate(tmp_reference_frame_1[i_atom]); + v3[i_atom] = tmp_reference_frame_3[i_atom] - rot_mat_v3 * tmp_reference_frame_1[i_atom]; } } } @@ -267,8 +329,17 @@ void colvar::gspath::apply_force(colvarvalue const &force) { (*(comp_atoms[min_frame_index_2])).apply_colvar_force(F); } -colvar::gzpath::gzpath(std::string const &conf): CartesianBasedPath(conf) { + +colvar::gzpath::gzpath() +{ set_function_type("gzpath"); +} + +int colvar::gzpath::init(std::string const &conf) +{ + int error_code = CartesianBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + get_keyval(conf, "useSecondClosestFrame", use_second_closest_frame, true); if (use_second_closest_frame == true) { cvm::log(std::string("Geometric path z(σ) will use the second closest frame to compute s_(m-1)\n")); @@ -287,13 +358,15 @@ colvar::gzpath::gzpath(std::string const &conf): CartesianBasedPath(conf) { cvm::log(std::string("Geometric path z(σ) will use the square of distance from current frame to path compute z\n")); } if (total_reference_frames < 2) { - cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + " reference frames, but gzpath requires at least 2 frames.\n"); - return; + return cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + + " reference frames, but gzpath requires at least 2 frames.\n", + COLVARS_INPUT_ERROR); } GeometricPathCV::GeometricPathBase::initialize(atoms->size(), cvm::atom_pos(), total_reference_frames, use_second_closest_frame, use_third_closest_frame, b_use_z_square); // Logging cvm::log(std::string("Geometric pathCV(z) is initialized.\n")); cvm::log(std::string("Geometric pathCV(z) loaded ") + cvm::to_str(reference_frames.size()) + std::string(" frames.\n")); + return error_code; } void colvar::gzpath::updateDistanceToReferenceFrames() { @@ -335,12 +408,13 @@ void colvar::gzpath::prepareVectors() { } else { rot_v4.calc_optimal_rotation(tmp_reference_frame_1, tmp_reference_frame_2); } + const auto rot_mat_v4 = rot_v4.matrix(); for (i_atom = 0; i_atom < atoms->size(); ++i_atom) { v1[i_atom] = reference_frames[min_frame_index_1][i_atom] - (*(comp_atoms[min_frame_index_1]))[i_atom].pos; v2[i_atom] = (*(comp_atoms[min_frame_index_2]))[i_atom].pos - reference_frames[min_frame_index_2][i_atom]; // v4 only computes in gzpath // v4 = s_m - s_(m-1) - v4[i_atom] = rot_v4.q.rotate(tmp_reference_frame_1[i_atom]) - tmp_reference_frame_2[i_atom]; + v4[i_atom] = rot_mat_v4 * tmp_reference_frame_1[i_atom] - tmp_reference_frame_2[i_atom]; } if (min_frame_index_3 < 0 || min_frame_index_3 > M) { v3 = v4; @@ -368,9 +442,10 @@ void colvar::gzpath::prepareVectors() { } else { rot_v3.calc_optimal_rotation(tmp_reference_frame_1, tmp_reference_frame_3); } + const auto rot_mat_v3 = rot_v3.matrix(); for (i_atom = 0; i_atom < atoms->size(); ++i_atom) { // v3 = s_(m+1) - s_m - v3[i_atom] = tmp_reference_frame_3[i_atom] - rot_v3.q.rotate(tmp_reference_frame_1[i_atom]); + v3[i_atom] = tmp_reference_frame_3[i_atom] - rot_mat_v3 * tmp_reference_frame_1[i_atom]; } } } @@ -399,14 +474,26 @@ void colvar::gzpath::apply_force(colvarvalue const &force) { } -colvar::CVBasedPath::CVBasedPath(std::string const &conf): cvc(conf) { +colvar::CVBasedPath::CVBasedPath() +{ + set_function_type("gspathCV"); + x.type(colvarvalue::type_scalar); +} + + +int colvar::CVBasedPath::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + if (error_code != COLVARS_OK) return error_code; + // Lookup all available sub-cvcs for (auto it_cv_map = colvar::get_global_cvc_map().begin(); it_cv_map != colvar::get_global_cvc_map().end(); ++it_cv_map) { if (key_lookup(conf, it_cv_map->first.c_str())) { std::vector sub_cvc_confs; get_key_string_multi_value(conf, it_cv_map->first.c_str(), sub_cvc_confs); for (auto it_sub_cvc_conf = sub_cvc_confs.begin(); it_sub_cvc_conf != sub_cvc_confs.end(); ++it_sub_cvc_conf) { - cv.push_back((it_cv_map->second)(*(it_sub_cvc_conf))); + cv.push_back((it_cv_map->second)()); + cv.back()->init(*(it_sub_cvc_conf)); } } } @@ -429,7 +516,7 @@ colvar::CVBasedPath::CVBasedPath(std::string const &conf): cvc(conf) { cvm::log(std::string("Reading path file: ") + path_filename + std::string("\n")); auto &ifs_path = cvm::main()->proxy->input_stream(path_filename); if (!ifs_path) { - return; + return COLVARS_INPUT_ERROR; } std::string line; const std::string token(" "); @@ -450,8 +537,8 @@ colvar::CVBasedPath::CVBasedPath(std::string const &conf): cvc(conf) { cvm::log(cvm::to_str(tmp_cv[i_cv][i - start_index])); } } else { - cvm::error("Error: incorrect format of path file.\n"); - return; + error_code = cvm::error("Error: incorrect format of path file.\n", COLVARS_INPUT_ERROR); + return error_code; } } if (!fields.empty()) { @@ -461,15 +548,18 @@ colvar::CVBasedPath::CVBasedPath(std::string const &conf): cvc(conf) { } cvm::main()->proxy->close_input_stream(path_filename); if (total_reference_frames <= 1) { - cvm::error("Error: there is only 1 or 0 reference frame, which doesn't constitute a path.\n"); - return; + error_code = cvm::error( + "Error: there is only 1 or 0 reference frame, which doesn't constitute a path.\n", + COLVARS_INPUT_ERROR); + return error_code; } if (cv.size() == 0) { - cvm::error("Error: the CV " + name + - " expects one or more nesting components.\n"); - return; + error_code = + cvm::error("Error: the CV " + name + " expects one or more nesting components.\n", + COLVARS_INPUT_ERROR); + return error_code; } - x.type(colvarvalue::type_scalar); + use_explicit_gradients = true; for (size_t i_cv = 0; i_cv < cv.size(); ++i_cv) { if (!cv[i_cv]->is_enabled(f_cvc_explicit_gradient)) { @@ -479,6 +569,8 @@ colvar::CVBasedPath::CVBasedPath(std::string const &conf): cvc(conf) { if (!use_explicit_gradients) { disable(f_cvc_explicit_gradient); } + + return error_code; } void colvar::CVBasedPath::computeDistanceToReferenceFrames(std::vector& result) { @@ -548,8 +640,47 @@ colvar::CVBasedPath::~CVBasedPath() { atom_groups.clear(); } -colvar::gspathCV::gspathCV(std::string const &conf): CVBasedPath(conf) { + +void colvar::CVBasedPath::apply_force(colvarvalue const &force) +{ + cvm::error("Error: using apply_force() in a component of type CVBasedPath, which is abstract.\n", + COLVARS_BUG_ERROR); +} + + +cvm::real colvar::CVBasedPath::dist2(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x1.dist2(x2); +} + + +colvarvalue colvar::CVBasedPath::dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x1.dist2_grad(x2); +} + + +colvarvalue colvar::CVBasedPath::dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x2.dist2_grad(x1); +} + + +void colvar::CVBasedPath::wrap(colvarvalue & /* x_unwrapped */) const {} + + + +colvar::gspathCV::gspathCV() +{ set_function_type("gspathCV"); + x.type(colvarvalue::type_scalar); +} + +int colvar::gspathCV::init(std::string const &conf) +{ + int error_code = CVBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); // Initialize variables for future calculation get_keyval(conf, "useSecondClosestFrame", use_second_closest_frame, true); @@ -565,11 +696,10 @@ colvar::gspathCV::gspathCV(std::string const &conf): CVBasedPath(conf) { cvm::log(std::string("Geometric path s(σ) will use the neighbouring frame to compute s_(m+1)\n")); } if (total_reference_frames < 2) { - cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + " reference frames, but gspathCV requires at least 2 frames.\n"); - return; + return cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + " reference frames, but gspathCV requires at least 2 frames.\n", COLVARS_INPUT_ERROR); } GeometricPathCV::GeometricPathBase::initialize(cv.size(), ref_cv[0], total_reference_frames, use_second_closest_frame, use_third_closest_frame); - x.type(colvarvalue::type_scalar); + return error_code; } colvar::gspathCV::~gspathCV() {} @@ -671,8 +801,16 @@ void colvar::gspathCV::apply_force(colvarvalue const &force) { } } -colvar::gzpathCV::gzpathCV(std::string const &conf): CVBasedPath(conf) { +colvar::gzpathCV::gzpathCV() +{ set_function_type("gzpathCV"); +} + +int colvar::gzpathCV::init(std::string const &conf) { + + int error_code = CVBasedPath::init(conf); + if (error_code != COLVARS_OK) return error_code; + cvm::log(std::string("Total number of frames: ") + cvm::to_str(total_reference_frames) + std::string("\n")); // Initialize variables for future calculation M = cvm::real(total_reference_frames - 1); @@ -695,11 +833,13 @@ colvar::gzpathCV::gzpathCV(std::string const &conf): CVBasedPath(conf) { cvm::log(std::string("Geometric path z(σ) will use the square of distance from current frame to path compute z\n")); } if (total_reference_frames < 2) { - cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + " reference frames, but gzpathCV requires at least 2 frames.\n"); - return; + return cvm::error("Error: you have specified " + cvm::to_str(total_reference_frames) + + " reference frames, but gzpathCV requires at least 2 frames.\n", + COLVARS_INPUT_ERROR); } GeometricPathCV::GeometricPathBase::initialize(cv.size(), ref_cv[0], total_reference_frames, use_second_closest_frame, use_third_closest_frame, b_use_z_square); - x.type(colvarvalue::type_scalar); + + return error_code; } colvar::gzpathCV::~gzpathCV() { @@ -794,5 +934,3 @@ void colvar::gzpathCV::apply_force(colvarvalue const &force) { } } } - -#endif diff --git a/lib/colvars/colvarcomp_neuralnetwork.cpp b/lib/colvars/colvarcomp_neuralnetwork.cpp index 98bd8cddd5..2d2f89d5f5 100644 --- a/lib/colvars/colvarcomp_neuralnetwork.cpp +++ b/lib/colvars/colvarcomp_neuralnetwork.cpp @@ -1,16 +1,31 @@ -#if (__cplusplus >= 201103L) +// -*- c++ -*- + +// This file is part of the Collective Variables module (Colvars). +// The original version of Colvars and its updates are located at: +// https://github.com/Colvars/colvars +// Please update all Colvars source files before making any changes. +// If you wish to distribute your changes, please submit them to the +// Colvars repository at GitHub. #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" #include "colvar_neuralnetworkcompute.h" using namespace neuralnetworkCV; -colvar::neuralNetwork::neuralNetwork(std::string const &conf): linearCombination(conf) { + +colvar::neuralNetwork::neuralNetwork() +{ set_function_type("neuralNetwork"); +} + + +int colvar::neuralNetwork::init(std::string const &conf) +{ + int error_code = linearCombination::init(conf); + if (error_code != COLVARS_OK) return error_code; // the output of neural network consists of multiple values // read "output_component" key to determine it get_keyval(conf, "output_component", m_output_index); @@ -59,8 +74,8 @@ colvar::neuralNetwork::neuralNetwork(std::string const &conf): linearCombination std::string function_name; get_keyval(conf, lookup_key.c_str(), function_name, std::string("")); if (activation_function_map.find(function_name) == activation_function_map.end()) { - cvm::error("Unknown activation function name: \"" + function_name + "\".\n"); - return; + return cvm::error("Unknown activation function name: \"" + function_name + "\".\n", + COLVARS_INPUT_ERROR); } activation_functions.push_back(std::make_pair(false, function_name)); cvm::log(std::string{"The activation function for layer["} + cvm::to_str(num_activation_functions + 1) + std::string{"] is "} + function_name + '\n'); @@ -79,11 +94,13 @@ colvar::neuralNetwork::neuralNetwork(std::string const &conf): linearCombination } // expect the three numbers are equal if ((num_layers_weight != num_layers_bias) || (num_layers_bias != num_activation_functions)) { - cvm::error("Error: the numbers of weights, biases and activation functions do not match.\n"); - return; + return cvm::error( + "Error: the numbers of weights, biases and activation functions do not match.\n", + COLVARS_INPUT_ERROR); } // nn = std::make_unique(); // std::make_unique is only available in C++14 + if (nn) nn.reset(); nn = std::unique_ptr(new neuralnetworkCV::neuralNetworkCompute()); for (size_t i_layer = 0; i_layer < num_layers_weight; ++i_layer) { denseLayer d; @@ -93,8 +110,9 @@ colvar::neuralNetwork::neuralNetwork(std::string const &conf): linearCombination try { d = denseLayer(weight_files[i_layer], bias_files[i_layer], activation_functions[i_layer].second); } catch (std::exception &ex) { - cvm::error("Error on initializing layer " + cvm::to_str(i_layer) + " (" + ex.what() + ")\n", COLVARS_INPUT_ERROR); - return; + return cvm::error("Error on initializing layer " + cvm::to_str(i_layer) + + " (" + ex.what() + ")\n", + COLVARS_INPUT_ERROR); } } else { #endif @@ -104,8 +122,9 @@ colvar::neuralNetwork::neuralNetwork(std::string const &conf): linearCombination try { d = denseLayer(weight_files[i_layer], bias_files[i_layer], f, df); } catch (std::exception &ex) { - cvm::error("Error on initializing layer " + cvm::to_str(i_layer) + " (" + ex.what() + ")\n", COLVARS_INPUT_ERROR); - return; + return cvm::error("Error on initializing layer " + cvm::to_str(i_layer) + + " (" + ex.what() + ")\n", + COLVARS_INPUT_ERROR); } #ifdef LEPTON } @@ -123,11 +142,11 @@ colvar::neuralNetwork::neuralNetwork(std::string const &conf): linearCombination } } } else { - cvm::error("Error: error on adding a new dense layer.\n"); - return; + return cvm::error("Error: error on adding a new dense layer.\n", COLVARS_INPUT_ERROR); } } nn->input().resize(cv.size()); + return error_code; } colvar::neuralNetwork::~neuralNetwork() { @@ -185,4 +204,24 @@ void colvar::neuralNetwork::apply_force(colvarvalue const &force) { } } -#endif + +cvm::real colvar::neuralNetwork::dist2(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x1.dist2(x2); +} + + +colvarvalue colvar::neuralNetwork::dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x1.dist2_grad(x2); +} + + +colvarvalue colvar::neuralNetwork::dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const +{ + return x2.dist2_grad(x1); +} + + + +void colvar::neuralNetwork::wrap(colvarvalue & /* x_unwrapped */) const {} diff --git a/lib/colvars/colvarcomp_protein.cpp b/lib/colvars/colvarcomp_protein.cpp index 80ef9b855c..f782095148 100644 --- a/lib/colvars/colvarcomp_protein.cpp +++ b/lib/colvars/colvarcomp_protein.cpp @@ -11,19 +11,23 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" -colvar::alpha_angles::alpha_angles(std::string const &conf) - : cvc(conf) +colvar::alpha_angles::alpha_angles() { set_function_type("alpha"); enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); - colvarproxy *proxy = cvm::main()->proxy; + r0 = proxy->angstrom_to_internal(3.3); +} + + +int colvar::alpha_angles::init(std::string const &conf) +{ + int error_code = cvc::init(conf); std::string segment_id; get_keyval(conf, "psfSegID", segment_id, std::string("MAIN")); @@ -44,29 +48,29 @@ colvar::alpha_angles::alpha_angles(std::string const &conf) } } } else { - cvm::error("Error: no residues defined in \"residueRange\".\n"); - return; + error_code |= + cvm::error("Error: no residues defined in \"residueRange\".\n", COLVARS_INPUT_ERROR); } } if (residues.size() < 5) { - cvm::error("Error: not enough residues defined in \"residueRange\".\n"); - return; + error_code |= cvm::error("Error: not enough residues defined in \"residueRange\".\n", + COLVARS_INPUT_ERROR); } std::string const &sid = segment_id; std::vector const &r = residues; - get_keyval(conf, "hBondCoeff", hb_coeff, 0.5); - if ( (hb_coeff < 0.0) || (hb_coeff > 1.0) ) { - cvm::error("Error: hBondCoeff must be defined between 0 and 1.\n"); - return; + get_keyval(conf, "hBondCoeff", hb_coeff, hb_coeff); + if ((hb_coeff < 0.0) || (hb_coeff > 1.0)) { + error_code |= + cvm::error("Error: hBondCoeff must be defined between 0 and 1.\n", COLVARS_INPUT_ERROR); } - get_keyval(conf, "angleRef", theta_ref, 88.0); - get_keyval(conf, "angleTol", theta_tol, 15.0); + get_keyval(conf, "angleRef", theta_ref, theta_ref); + get_keyval(conf, "angleTol", theta_tol, theta_tol); if (hb_coeff < 1.0) { @@ -84,11 +88,9 @@ colvar::alpha_angles::alpha_angles(std::string const &conf) } { - cvm::real r0; - size_t en, ed; - get_keyval(conf, "hBondCutoff", r0, proxy->angstrom_to_internal(3.3)); - get_keyval(conf, "hBondExpNumer", en, 6); - get_keyval(conf, "hBondExpDenom", ed, 8); + get_keyval(conf, "hBondCutoff", r0, r0); + get_keyval(conf, "hBondExpNumer", en, en); + get_keyval(conf, "hBondExpDenom", ed, ed); if (hb_coeff > 0.0) { @@ -103,15 +105,8 @@ colvar::alpha_angles::alpha_angles(std::string const &conf) cvm::log("The hBondCoeff specified will disable the hydrogen bond terms.\n"); } } -} - -colvar::alpha_angles::alpha_angles() - : cvc() -{ - set_function_type("alphaAngles"); - enable(f_cvc_explicit_gradient); - x.type(colvarvalue::type_scalar); + return error_code; } @@ -273,24 +268,27 @@ void colvar::alpha_angles::apply_force(colvarvalue const &force) } -simple_scalar_dist_functions(alpha_angles) - ////////////////////////////////////////////////////////////////////// // dihedral principal component ////////////////////////////////////////////////////////////////////// -colvar::dihedPC::dihedPC(std::string const &conf) - : cvc(conf) +colvar::dihedPC::dihedPC() { - if (cvm::debug()) - cvm::log("Initializing dihedral PC object.\n"); - set_function_type("dihedPC"); // Supported through references to atom groups of children cvcs enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); +} + + +int colvar::dihedPC::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + + if (cvm::debug()) + cvm::log("Initializing dihedral PC object.\n"); std::string segment_id; get_keyval(conf, "psfSegID", segment_id, std::string("MAIN")); @@ -311,14 +309,14 @@ colvar::dihedPC::dihedPC(std::string const &conf) } } } else { - cvm::error("Error: no residues defined in \"residueRange\".\n"); - return; + error_code |= + cvm::error("Error: no residues defined in \"residueRange\".\n", COLVARS_INPUT_ERROR); } } if (residues.size() < 2) { - cvm::error("Error: dihedralPC requires at least two residues.\n"); - return; + error_code |= + cvm::error("Error: dihedralPC requires at least two residues.\n", COLVARS_INPUT_ERROR); } std::string const &sid = segment_id; @@ -329,15 +327,15 @@ colvar::dihedPC::dihedPC(std::string const &conf) if (get_keyval(conf, "vectorFile", vecFileName, vecFileName)) { get_keyval(conf, "vectorNumber", vecNumber, 0); if (vecNumber < 1) { - cvm::error("A positive value of vectorNumber is required."); - return; + error_code |= + cvm::error("A positive value of vectorNumber is required.", COLVARS_INPUT_ERROR); } std::istream &vecFile = cvm::main()->proxy->input_stream(vecFileName, "dihedral PCA vector file"); if (!vecFile) { - return; + return COLVARS_INPUT_ERROR; } // TODO: adapt to different formats by setting this flag @@ -383,11 +381,10 @@ colvar::dihedPC::dihedPC(std::string const &conf) } if ( coeffs.size() != 4 * (residues.size() - 1)) { - cvm::error("Error: wrong number of coefficients: " + - cvm::to_str(coeffs.size()) + ". Expected " + - cvm::to_str(4 * (residues.size() - 1)) + - " (4 coeffs per residue, minus one residue).\n"); - return; + error_code |= cvm::error("Error: wrong number of coefficients: " + cvm::to_str(coeffs.size()) + + ". Expected " + cvm::to_str(4 * (residues.size() - 1)) + + " (4 coeffs per residue, minus one residue).\n", + COLVARS_INPUT_ERROR); } for (size_t i = 0; i < residues.size()-1; i++) { @@ -413,16 +410,8 @@ colvar::dihedPC::dihedPC(std::string const &conf) if (cvm::debug()) cvm::log("Done initializing dihedPC object.\n"); -} - -colvar::dihedPC::dihedPC() - : cvc() -{ - set_function_type("dihedPC"); - // Supported through references to atom groups of children cvcs - enable(f_cvc_explicit_gradient); - x.type(colvarvalue::type_scalar); + return error_code; } @@ -491,6 +480,3 @@ void colvar::dihedPC::apply_force(colvarvalue const &force) coeffs[2*i+1] * dsindt) * force); } } - - -simple_scalar_dist_functions(dihedPC) diff --git a/lib/colvars/colvarcomp_rotations.cpp b/lib/colvars/colvarcomp_rotations.cpp index f469174a62..a04ace851a 100644 --- a/lib/colvars/colvarcomp_rotations.cpp +++ b/lib/colvars/colvarcomp_rotations.cpp @@ -9,27 +9,39 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" +#include "colvar_rotation_derivative.h" +struct colvar::orientation::rotation_derivative_impl_: public rotation_derivative { +public: + rotation_derivative_impl_(colvar::orientation* orientation_cvc): + rotation_derivative( + orientation_cvc->rot, orientation_cvc->ref_pos, orientation_cvc->shifted_pos) {} +}; -colvar::orientation::orientation(std::string const &conf) - : cvc() + +colvar::orientation::orientation() { set_function_type("orientation"); + rot_deriv_impl = std::unique_ptr(new rotation_derivative_impl_(this)); disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_quaternion); - colvar::orientation::init(conf); } +colvar::orientation::~orientation() {} + + int colvar::orientation::init(std::string const &conf) { int error_code = cvc::init(conf); atoms = parse_group(conf, "atoms"); + if (!atoms || atoms->size() == 0) { + return error_code | COLVARS_INPUT_ERROR; + } ref_pos.reserve(atoms->size()); if (get_keyval(conf, "refPositions", ref_pos, ref_pos)) { @@ -56,17 +68,18 @@ int colvar::orientation::init(std::string const &conf) } ref_pos.resize(atoms->size()); - cvm::load_coords(file_name.c_str(), &ref_pos, atoms, + error_code |= cvm::load_coords(file_name.c_str(), &ref_pos, atoms, file_col, file_col_value); } } + if (error_code != COLVARS_OK) return error_code; + if (!ref_pos.size()) { return cvm::error("Error: must define a set of " "reference coordinates.\n", COLVARS_INPUT_ERROR); } - cvm::rvector ref_cog(0.0, 0.0, 0.0); size_t i; for (i = 0; i < ref_pos.size(); i++) { @@ -84,30 +97,21 @@ int colvar::orientation::init(std::string const &conf) get_keyval(conf, "closestToQuaternion", ref_quat, cvm::quaternion(1.0, 0.0, 0.0, 0.0)); - // initialize rot member data - if (!atoms->noforce) { - rot.request_group2_gradients(atoms->size()); - } + // If the debug gradients feature is active, debug the rotation gradients + // (note that this won't be active for the orientation CVC itself, because + // colvardeps prevents the flag's activation) + rot.b_debug_gradients = is_enabled(f_cvc_debug_gradient); return error_code; } -colvar::orientation::orientation() - : cvc() -{ - set_function_type("orientation"); - disable(f_cvc_explicit_gradient); - x.type(colvarvalue::type_quaternion); -} - - void colvar::orientation::calc_value() { - rot.b_debug_gradients = is_enabled(f_cvc_debug_gradient); atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); if ((rot.q).inner(ref_quat) >= 0.0) { x.quaternion_value = rot.q; @@ -131,9 +135,12 @@ void colvar::orientation::apply_force(colvarvalue const &force) cvm::quaternion const &FQ = force.quaternion_value; if (!atoms->noforce) { + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); for (size_t i = 0; i < 4; i++) { - (*atoms)[ia].apply_force(FQ[i] * rot.dQ0_2[ia][i]); + (*atoms)[ia].apply_force(FQ[i] * dq0_2[i]); } } } @@ -161,20 +168,15 @@ colvarvalue colvar::orientation::dist2_rgrad(colvarvalue const &x1, } +void colvar::orientation::wrap(colvarvalue & /* x_unwrapped */) const {} -colvar::orientation_angle::orientation_angle(std::string const &conf) - : orientation() + + +colvar::orientation_angle::orientation_angle() { set_function_type("orientationAngle"); init_as_angle(); enable(f_cvc_explicit_gradient); - orientation_angle::init(conf); -} - - -int colvar::orientation_angle::init(std::string const &conf) -{ - return orientation::init(conf); } @@ -182,7 +184,8 @@ void colvar::orientation_angle::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); if ((rot.q).q0 >= 0.0) { x.real_value = (180.0/PI) * 2.0 * cvm::acos((rot.q).q0); @@ -199,46 +202,59 @@ void colvar::orientation_angle::calc_gradients() ((180.0 / PI) * (-2.0) / cvm::sqrt(1.0 - ((rot.q).q0 * (rot.q).q0))) : 0.0 ); + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { - (*atoms)[ia].grad = (dxdq0 * (rot.dQ0_2[ia])[0]); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); + (*atoms)[ia].grad = (dxdq0 * dq0_2[0]); } } void colvar::orientation_angle::apply_force(colvarvalue const &force) { - cvm::real const &fw = force.real_value; - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } + cvc::apply_force(force); } -simple_scalar_dist_functions(orientation_angle) +cvm::real colvar::orientation_angle::dist2(colvarvalue const &x1, colvarvalue const &x2) const +{ + return cvc::dist2(x1, x2); +} + + +colvarvalue colvar::orientation_angle::dist2_lgrad(colvarvalue const &x1, + colvarvalue const &x2) const +{ + return cvc::dist2_lgrad(x1, x2); +} + + +colvarvalue colvar::orientation_angle::dist2_rgrad(colvarvalue const &x1, + colvarvalue const &x2) const +{ + return cvc::dist2_rgrad(x1, x2); +} + + +void colvar::orientation_angle::wrap(colvarvalue & /* x_unwrapped */) const {} -colvar::orientation_proj::orientation_proj(std::string const &conf) - : orientation() +colvar::orientation_proj::orientation_proj() { set_function_type("orientationProj"); enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); init_scalar_boundaries(0.0, 1.0); - orientation_proj::init(conf); -} - - -int colvar::orientation_proj::init(std::string const &conf) -{ - return orientation::init(conf); } void colvar::orientation_proj::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); x.real_value = 2.0 * (rot.q).q0 * (rot.q).q0 - 1.0; } @@ -246,42 +262,28 @@ void colvar::orientation_proj::calc_value() void colvar::orientation_proj::calc_gradients() { cvm::real const dxdq0 = 2.0 * 2.0 * (rot.q).q0; + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { - (*atoms)[ia].grad = (dxdq0 * (rot.dQ0_2[ia])[0]); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); + (*atoms)[ia].grad = (dxdq0 * dq0_2[0]); } } -void colvar::orientation_proj::apply_force(colvarvalue const &force) -{ - cvm::real const &fw = force.real_value; - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } -} - - -simple_scalar_dist_functions(orientation_proj) - - - -colvar::tilt::tilt(std::string const &conf) - : orientation() +colvar::tilt::tilt() { set_function_type("tilt"); x.type(colvarvalue::type_scalar); enable(f_cvc_explicit_gradient); init_scalar_boundaries(-1.0, 1.0); - tilt::init(conf); } int colvar::tilt::init(std::string const &conf) { - int error_code = COLVARS_OK; - - error_code |= orientation::init(conf); + int error_code = orientation_proj::init(conf); get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0)); if (axis.norm2() != 1.0) { @@ -297,7 +299,8 @@ void colvar::tilt::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); x.real_value = rot.cos_theta(axis); } @@ -307,64 +310,24 @@ void colvar::tilt::calc_gradients() { cvm::quaternion const dxdq = rot.dcos_theta_dq(axis); + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { (*atoms)[ia].grad = cvm::rvector(0.0, 0.0, 0.0); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); for (size_t iq = 0; iq < 4; iq++) { - (*atoms)[ia].grad += (dxdq[iq] * (rot.dQ0_2[ia])[iq]); + (*atoms)[ia].grad += (dxdq[iq] * dq0_2[iq]); } } } -void colvar::tilt::apply_force(colvarvalue const &force) -{ - cvm::real const &fw = force.real_value; - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } -} - - -simple_scalar_dist_functions(tilt) - - - -colvar::spin_angle::spin_angle(std::string const &conf) - : orientation() +colvar::spin_angle::spin_angle() { set_function_type("spinAngle"); init_as_periodic_angle(); - enable(f_cvc_periodic); enable(f_cvc_explicit_gradient); - spin_angle::init(conf); -} - - -int colvar::spin_angle::init(std::string const &conf) -{ - int error_code = COLVARS_OK; - - error_code |= orientation::init(conf); - - get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0)); - if (axis.norm2() != 1.0) { - axis /= axis.norm(); - cvm::log("Normalizing rotation axis to "+cvm::to_str(axis)+".\n"); - } - - return error_code; -} - - -colvar::spin_angle::spin_angle() - : orientation() -{ - set_function_type("spinAngle"); - period = 360.0; - enable(f_cvc_periodic); - enable(f_cvc_explicit_gradient); - x.type(colvarvalue::type_scalar); } @@ -372,10 +335,11 @@ void colvar::spin_angle::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); x.real_value = rot.spin_angle(axis); - this->wrap(x); + wrap(x); } @@ -383,80 +347,20 @@ void colvar::spin_angle::calc_gradients() { cvm::quaternion const dxdq = rot.dspin_angle_dq(axis); + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { (*atoms)[ia].grad = cvm::rvector(0.0, 0.0, 0.0); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); for (size_t iq = 0; iq < 4; iq++) { - (*atoms)[ia].grad += (dxdq[iq] * (rot.dQ0_2[ia])[iq]); + (*atoms)[ia].grad += (dxdq[iq] * dq0_2[iq]); } } } -void colvar::spin_angle::apply_force(colvarvalue const &force) -{ - cvm::real const &fw = force.real_value; - - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } -} - - -cvm::real colvar::spin_angle::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return diff * diff; -} - - -colvarvalue colvar::spin_angle::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return 2.0 * diff; -} - - -colvarvalue colvar::spin_angle::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return (-2.0) * diff; -} - - -void colvar::spin_angle::wrap(colvarvalue &x_unwrapped) const -{ - if ((x_unwrapped.real_value - wrap_center) >= 180.0) { - x_unwrapped.real_value -= 360.0; - return; - } - - if ((x_unwrapped.real_value - wrap_center) < -180.0) { - x_unwrapped.real_value += 360.0; - return; - } - - return; -} - - -colvar::euler_phi::euler_phi(std::string const &conf) - : orientation() -{ - set_function_type("eulerPhi"); - init_as_periodic_angle(); - enable(f_cvc_explicit_gradient); - euler_phi::init(conf); -} - colvar::euler_phi::euler_phi() - : orientation() { set_function_type("eulerPhi"); init_as_periodic_angle(); @@ -464,19 +368,12 @@ colvar::euler_phi::euler_phi() } -int colvar::euler_phi::init(std::string const &conf) -{ - int error_code = COLVARS_OK; - error_code |= orientation::init(conf); - return error_code; -} - - void colvar::euler_phi::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); const cvm::real& q0 = rot.q.q0; const cvm::real& q1 = rot.q.q1; @@ -499,79 +396,20 @@ void colvar::euler_phi::calc_gradients() const cvm::real dxdq1 = (180.0/PI) * (2 * q0 * (-2 * q1 * q1 - 2 * q2 * q2 + 1) - 4 * q1 * (-2 * q0 * q1 - 2 * q2 * q3)) / denominator; const cvm::real dxdq2 = (180.0/PI) * (-4 * q2 * (-2 * q0 * q1 - 2 * q2 * q3) + 2 * q3 * (-2 * q1 * q1 - 2 * q2 * q2 + 1)) / denominator; const cvm::real dxdq3 = (180.0/PI) * 2 * q2 * (-2 * q1 * q1 - 2 * q2 * q2 + 1) / denominator; + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { - (*atoms)[ia].grad = (dxdq0 * (rot.dQ0_2[ia])[0]) + - (dxdq1 * (rot.dQ0_2[ia])[1]) + - (dxdq2 * (rot.dQ0_2[ia])[2]) + - (dxdq3 * (rot.dQ0_2[ia])[3]); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); + (*atoms)[ia].grad = (dxdq0 * dq0_2[0]) + + (dxdq1 * dq0_2[1]) + + (dxdq2 * dq0_2[2]) + + (dxdq3 * dq0_2[3]); } } -void colvar::euler_phi::apply_force(colvarvalue const &force) -{ - cvm::real const &fw = force.real_value; - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } -} - - -cvm::real colvar::euler_phi::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return diff * diff; -} - - -colvarvalue colvar::euler_phi::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return 2.0 * diff; -} - - -colvarvalue colvar::euler_phi::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return (-2.0) * diff; -} - - -void colvar::euler_phi::wrap(colvarvalue &x_unwrapped) const -{ - if ((x_unwrapped.real_value - wrap_center) >= 180.0) { - x_unwrapped.real_value -= 360.0; - return; - } - - if ((x_unwrapped.real_value - wrap_center) < -180.0) { - x_unwrapped.real_value += 360.0; - return; - } - - return; -} - - -colvar::euler_psi::euler_psi(std::string const &conf) - : orientation() -{ - set_function_type("eulerPsi"); - init_as_periodic_angle(); - enable(f_cvc_explicit_gradient); - euler_psi::init(conf); -} - colvar::euler_psi::euler_psi() - : orientation() { set_function_type("eulerPsi"); init_as_periodic_angle(); @@ -579,19 +417,12 @@ colvar::euler_psi::euler_psi() } -int colvar::euler_psi::init(std::string const &conf) -{ - int error_code = COLVARS_OK; - error_code |= orientation::init(conf); - return error_code; -} - - void colvar::euler_psi::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); const cvm::real& q0 = rot.q.q0; const cvm::real& q1 = rot.q.q1; @@ -614,79 +445,20 @@ void colvar::euler_psi::calc_gradients() const cvm::real dxdq1 = (180.0/PI) * 2 * q2 * (-2 * q2 * q2 - 2 * q3 * q3 + 1) / denominator; const cvm::real dxdq2 = (180.0/PI) * (2 * q1 * (-2 * q2 * q2 - 2 * q3 * q3 + 1) - 4 * q2 * (-2 * q0 * q3 - 2 * q1 * q2)) / denominator; const cvm::real dxdq3 = (180.0/PI) * (2 * q0 * (-2 * q2 * q2 - 2 * q3 * q3 + 1) - 4 * q3 * (-2 * q0 * q3 - 2 * q1 * q2)) / denominator; + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { - (*atoms)[ia].grad = (dxdq0 * (rot.dQ0_2[ia])[0]) + - (dxdq1 * (rot.dQ0_2[ia])[1]) + - (dxdq2 * (rot.dQ0_2[ia])[2]) + - (dxdq3 * (rot.dQ0_2[ia])[3]); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); + (*atoms)[ia].grad = (dxdq0 * dq0_2[0]) + + (dxdq1 * dq0_2[1]) + + (dxdq2 * dq0_2[2]) + + (dxdq3 * dq0_2[3]); } } -void colvar::euler_psi::apply_force(colvarvalue const &force) -{ - cvm::real const &fw = force.real_value; - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } -} - - -cvm::real colvar::euler_psi::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return diff * diff; -} - - -colvarvalue colvar::euler_psi::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return 2.0 * diff; -} - - -colvarvalue colvar::euler_psi::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - cvm::real diff = x1.real_value - x2.real_value; - diff = (diff < -180.0 ? diff + 360.0 : (diff > 180.0 ? diff - 360.0 : diff)); - return (-2.0) * diff; -} - - -void colvar::euler_psi::wrap(colvarvalue &x_unwrapped) const -{ - if ((x_unwrapped.real_value - wrap_center) >= 180.0) { - x_unwrapped.real_value -= 360.0; - return; - } - - if ((x_unwrapped.real_value - wrap_center) < -180.0) { - x_unwrapped.real_value += 360.0; - return; - } - - return; -} - - -colvar::euler_theta::euler_theta(std::string const &conf) - : orientation() -{ - set_function_type("eulerTheta"); - init_as_angle(); - enable(f_cvc_explicit_gradient); - euler_theta::init(conf); -} - colvar::euler_theta::euler_theta() - : orientation() { set_function_type("eulerTheta"); init_as_angle(); @@ -694,19 +466,12 @@ colvar::euler_theta::euler_theta() } -int colvar::euler_theta::init(std::string const &conf) -{ - int error_code = COLVARS_OK; - error_code |= orientation::init(conf); - return error_code; -} - - void colvar::euler_theta::calc_value() { atoms_cog = atoms->center_of_geometry(); - rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); + shifted_pos = atoms->positions_shifted(-1.0 * atoms_cog); + rot.calc_optimal_rotation(ref_pos, shifted_pos); const cvm::real& q0 = rot.q.q0; const cvm::real& q1 = rot.q.q1; @@ -727,43 +492,13 @@ void colvar::euler_theta::calc_gradients() const cvm::real dxdq1 = (180.0/PI) * -2 * q3 / denominator; const cvm::real dxdq2 = (180.0/PI) * 2 * q0 / denominator; const cvm::real dxdq3 = (180.0/PI) * -2 * q1 / denominator; + rot_deriv_impl->prepare_derivative(rotation_derivative_dldq::use_dq); + cvm::vector1d dq0_2; for (size_t ia = 0; ia < atoms->size(); ia++) { - (*atoms)[ia].grad = (dxdq0 * (rot.dQ0_2[ia])[0]) + - (dxdq1 * (rot.dQ0_2[ia])[1]) + - (dxdq2 * (rot.dQ0_2[ia])[2]) + - (dxdq3 * (rot.dQ0_2[ia])[3]); + rot_deriv_impl->calc_derivative_wrt_group2(ia, nullptr, &dq0_2); + (*atoms)[ia].grad = (dxdq0 * dq0_2[0]) + + (dxdq1 * dq0_2[1]) + + (dxdq2 * dq0_2[2]) + + (dxdq3 * dq0_2[3]); } } - - -void colvar::euler_theta::apply_force(colvarvalue const &force) -{ - cvm::real const &fw = force.real_value; - if (!atoms->noforce) { - atoms->apply_colvar_force(fw); - } -} - - -cvm::real colvar::euler_theta::dist2(colvarvalue const &x1, - colvarvalue const &x2) const -{ - // theta angle is not periodic - return cvc::dist2(x1, x2); -} - - -colvarvalue colvar::euler_theta::dist2_lgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - // theta angle is not periodic - return cvc::dist2_lgrad(x1, x2); -} - - -colvarvalue colvar::euler_theta::dist2_rgrad(colvarvalue const &x1, - colvarvalue const &x2) const -{ - // theta angle is not periodic - return cvc::dist2_rgrad(x1, x2); -} diff --git a/lib/colvars/colvarcomp_volmaps.cpp b/lib/colvars/colvarcomp_volmaps.cpp index 00c7206bc1..a15501ab6a 100644 --- a/lib/colvars/colvarcomp_volmaps.cpp +++ b/lib/colvars/colvarcomp_volmaps.cpp @@ -9,35 +9,18 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarparse.h" #include "colvar.h" #include "colvarcomp.h" colvar::map_total::map_total() - : cvc() { set_function_type("mapTotal"); - volmap_id = -1; - volmap_index = -1; - atoms = NULL; x.type(colvarvalue::type_scalar); } -colvar::map_total::map_total(std::string const &conf) - : cvc() // init() will take care of this -{ - set_function_type("mapTotal"); - volmap_id = -1; - volmap_index = -1; - atoms = NULL; - x.type(colvarvalue::type_scalar); - map_total::init(conf); -} - - int colvar::map_total::init(std::string const &conf) { int error_code = cvc::init(conf); @@ -50,12 +33,12 @@ int colvar::map_total::init(std::string const &conf) if ((volmap_name.size() > 0) && (volmap_id >= 0)) { error_code |= - cvm::error("Error: mapName and mapID are mutually exclusive.\n"); + cvm::error("Error: mapName and mapID are mutually exclusive.\n", COLVARS_INPUT_ERROR); } // Parse optional group atoms = parse_group(conf, "atoms", true); - if (atoms != NULL) { + if (atoms) { // Using internal selection if (volmap_name.size()) { @@ -74,11 +57,11 @@ int colvar::map_total::init(std::string const &conf) if (volmap_id >= 0) { volmap_index = proxy->init_volmap_by_id(volmap_id); } - error_code |= volmap_index > 0 ? COLVARS_OK : COLVARS_INPUT_ERROR; + error_code |= (volmap_index >= 0) ? COLVARS_OK : COLVARS_INPUT_ERROR; } if (get_keyval(conf, "atomWeights", atom_weights, atom_weights)) { - if (atoms == NULL) { + if (!atoms) { error_code |= cvm::error("Error: weights can only be assigned when atoms " "are selected explicitly in Colvars.\n", COLVARS_INPUT_ERROR); @@ -133,11 +116,10 @@ void colvar::map_total::calc_gradients() void colvar::map_total::apply_force(colvarvalue const &force) { - colvarproxy *proxy = cvm::main()->proxy; if (atoms) { - if (!atoms->noforce) - atoms->apply_colvar_force(force.real_value); + cvc::apply_force(force); } else { + colvarproxy *proxy = cvm::main()->proxy; proxy->apply_volmap_force(volmap_index, force.real_value); } } diff --git a/lib/colvars/colvardeps.cpp b/lib/colvars/colvardeps.cpp index 2a22b1cb57..46b7917569 100644 --- a/lib/colvars/colvardeps.cpp +++ b/lib/colvars/colvardeps.cpp @@ -129,6 +129,11 @@ int colvardeps::enable(int feature_id, int res; size_t i, j; bool ok; + + if (feature_id < 0 || feature_id >= int(features().size())) { + cvm::error("Error: colvardeps::enable() called with invalid feature_id " + cvm::to_str(feature_id) + "\n"); + return COLVARS_ERROR; + } feature *f = features()[feature_id]; feature_state *fs = &feature_states[feature_id]; diff --git a/lib/colvars/colvardeps.h b/lib/colvars/colvardeps.h index cfc93d0514..1bd304b545 100644 --- a/lib/colvars/colvardeps.h +++ b/lib/colvars/colvardeps.h @@ -253,6 +253,8 @@ public: f_cvb_write_ti_pmf, /// \brief whether this bias uses an external grid to scale the biasing forces f_cvb_scale_biasing_force, + /// \brief whether this bias is applied to one or more ext-Lagrangian colvars + f_cvb_extended, f_cvb_ntot }; @@ -355,6 +357,8 @@ public: f_cvc_lower_boundary, /// This CVC provides a default value for the colvar's upper boundary f_cvc_upper_boundary, + /// CVC accesses atom groups directly (as opposed to going throuh other objects) + f_cvc_explicit_atom_groups, /// CVC calculates atom gradients f_cvc_gradient, /// CVC calculates and stores explicit atom gradients on rank 0 diff --git a/lib/colvars/colvargrid.cpp b/lib/colvars/colvargrid.cpp index 2fd385ccec..11693a7587 100644 --- a/lib/colvars/colvargrid.cpp +++ b/lib/colvars/colvargrid.cpp @@ -8,13 +8,11 @@ // Colvars repository at GitHub. #include -#include #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" #include "colvar.h" -#include "colvarcomp.h" #include "colvargrid.h" #include "colvargrid_def.h" @@ -37,6 +35,58 @@ colvar_grid_count::colvar_grid_count(std::vector &colvars, : colvar_grid(colvars, def_count, 1, margin) {} +std::string colvar_grid_count::get_state_params() const +{ + return colvar_grid::get_state_params(); +} + +int colvar_grid_count::parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode) +{ + return colvar_grid::parse_params(conf, parse_mode); +} + +std::istream & colvar_grid_count::read_restart(std::istream &is) +{ + return colvar_grid::read_restart(is); +} + +cvm::memory_stream & colvar_grid_count::read_restart(cvm::memory_stream &is) +{ + return colvar_grid::read_restart(is); +} + +std::ostream & colvar_grid_count::write_restart(std::ostream &os) +{ + return colvar_grid::write_restart(os); +} + +cvm::memory_stream & colvar_grid_count::write_restart(cvm::memory_stream &os) +{ + return colvar_grid::write_restart(os); +} + +std::istream &colvar_grid_count::read_raw(std::istream &is) +{ + return colvar_grid::read_raw(is); +} + +cvm::memory_stream &colvar_grid_count::read_raw(cvm::memory_stream &is) +{ + return colvar_grid::read_raw(is); +} + +std::ostream &colvar_grid_count::write_raw(std::ostream &os, size_t const buf_size) const +{ + return colvar_grid::write_raw(os, buf_size); +} + +cvm::memory_stream &colvar_grid_count::write_raw(cvm::memory_stream &os, + size_t const buf_size) const +{ + return colvar_grid::write_raw(os, buf_size); +} + std::istream & colvar_grid_count::read_multicol(std::istream &is, bool add) { return colvar_grid::read_multicol(is, add); @@ -96,6 +146,58 @@ colvar_grid_scalar::~colvar_grid_scalar() { } +std::string colvar_grid_scalar::get_state_params() const +{ + return colvar_grid::get_state_params(); +} + +int colvar_grid_scalar::parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode) +{ + return colvar_grid::parse_params(conf, parse_mode); +} + +std::istream &colvar_grid_scalar::read_restart(std::istream &is) +{ + return colvar_grid::read_restart(is); +} + +cvm::memory_stream &colvar_grid_scalar::read_restart(cvm::memory_stream &is) +{ + return colvar_grid::read_restart(is); +} + +std::ostream &colvar_grid_scalar::write_restart(std::ostream &os) +{ + return colvar_grid::write_restart(os); +} + +cvm::memory_stream &colvar_grid_scalar::write_restart(cvm::memory_stream &os) +{ + return colvar_grid::write_restart(os); +} + +std::istream &colvar_grid_scalar::read_raw(std::istream &is) +{ + return colvar_grid::read_raw(is); +} + +cvm::memory_stream &colvar_grid_scalar::read_raw(cvm::memory_stream &is) +{ + return colvar_grid::read_raw(is); +} + +std::ostream &colvar_grid_scalar::write_raw(std::ostream &os, size_t const buf_size) const +{ + return colvar_grid::write_raw(os, buf_size); +} + +cvm::memory_stream &colvar_grid_scalar::write_raw(cvm::memory_stream &os, + size_t const buf_size) const +{ + return colvar_grid::write_raw(os, buf_size); +} + std::istream & colvar_grid_scalar::read_multicol(std::istream &is, bool add) { return colvar_grid::read_multicol(is, add); @@ -195,30 +297,63 @@ cvm::real colvar_grid_scalar::entropy() const return bin_volume * sum; } +/// \brief Return the RMSD between this grid's data and another one +/// Grids must have the same dimensions. +cvm::real colvar_grid_scalar::grid_rmsd(colvar_grid_scalar const &other_grid) const +{ + if (other_grid.data.size() != this->data.size()) { + cvm::error("Error: trying to subtract two grids with " + "different size.\n"); + return -1.; + } + + cvm::real sum2 = 0.0; + + if (samples && other_grid.samples) { + for (size_t i = 0; i < data.size(); i++) { + size_t n = samples->get_value(i); + cvm::real us = n ? data[i] / n : 0.0; + n = other_grid.samples->get_value(i); + cvm::real them = n ? other_grid.data[i ] / n : 0.0; + cvm::real d = us - them; + sum2 += d*d; + } + } else { + for (size_t i = 0; i < data.size(); i++) { + cvm::real d = other_grid.data[i] - data[i]; + sum2 += d*d; + } + } + + return sqrt(sum2/this->data.size()); +} + colvar_grid_gradient::colvar_grid_gradient() - : colvar_grid(), - samples(NULL), - weights(NULL) + : colvar_grid(), samples(NULL), full_samples(0), min_samples(0) {} + colvar_grid_gradient::colvar_grid_gradient(std::vector const &nx_i) - : colvar_grid(nx_i, 0.0, nx_i.size()), - samples(NULL), - weights(NULL) + : colvar_grid(nx_i, 0.0, nx_i.size()), samples(NULL), full_samples(0), min_samples(0) {} + colvar_grid_gradient::colvar_grid_gradient(std::vector &colvars) - : colvar_grid(colvars, 0.0, colvars.size()), - samples(NULL), - weights(NULL) + : colvar_grid(colvars, 0.0, colvars.size()), samples(NULL), full_samples(0), min_samples(0) {} +colvar_grid_gradient::colvar_grid_gradient(std::vector &colvars, std::shared_ptr samples_in) + : colvar_grid(colvars, 0.0, colvars.size()), samples(samples_in), full_samples(0), min_samples(0) +{ + samples_in->has_parent_data = true; +} + + colvar_grid_gradient::colvar_grid_gradient(std::string &filename) : colvar_grid(), - samples(NULL), - weights(NULL) + samples(NULL) { std::istream &is = cvm::main()->proxy->input_stream(filename, "gradient file"); @@ -280,6 +415,57 @@ colvar_grid_gradient::colvar_grid_gradient(std::string &filename) cvm::main()->proxy->close_input_stream(filename); } +std::string colvar_grid_gradient::get_state_params() const +{ + return colvar_grid::get_state_params(); +} + +int colvar_grid_gradient::parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode) +{ + return colvar_grid::parse_params(conf, parse_mode); +} + +std::istream &colvar_grid_gradient::read_restart(std::istream &is) +{ + return colvar_grid::read_restart(is); +} + +cvm::memory_stream &colvar_grid_gradient::read_restart(cvm::memory_stream &is) +{ + return colvar_grid::read_restart(is); +} + +std::ostream &colvar_grid_gradient::write_restart(std::ostream &os) +{ + return colvar_grid::write_restart(os); +} + +cvm::memory_stream &colvar_grid_gradient::write_restart(cvm::memory_stream &os) +{ + return colvar_grid::write_restart(os); +} + +std::istream &colvar_grid_gradient::read_raw(std::istream &is) +{ + return colvar_grid::read_raw(is); +} + +cvm::memory_stream &colvar_grid_gradient::read_raw(cvm::memory_stream &is) +{ + return colvar_grid::read_raw(is); +} + +std::ostream &colvar_grid_gradient::write_raw(std::ostream &os, size_t const buf_size) const +{ + return colvar_grid::write_raw(os, buf_size); +} + +cvm::memory_stream &colvar_grid_gradient::write_raw(cvm::memory_stream &os, + size_t const buf_size) const +{ + return colvar_grid::write_raw(os, buf_size); +} std::istream & colvar_grid_gradient::read_multicol(std::istream &is, bool add) { @@ -371,9 +557,38 @@ void colvar_grid_gradient::write_1D_integral(std::ostream &os) } +/// \brief Return the RMSD between this grid's data and another one +/// Grids must have the same dimensions. +cvm::real colvar_grid_gradient::grid_rmsd(colvar_grid_gradient const &other_grid) const +{ + if (other_grid.multiplicity() != this->multiplicity()) { + cvm::error("Error: trying to subtract two grids with " + "different multiplicity.\n"); + return -1.; + } -integrate_potential::integrate_potential(std::vector &colvars, colvar_grid_gradient * gradients) + if (other_grid.data.size() != this->data.size()) { + cvm::error("Error: trying to subtract two grids with " + "different size.\n"); + return -1.; + } + + cvm::real sum2 = 0.0; + std::vector ix; + size_t imult; + for (ix = new_index(); index_ok(ix); incr(ix)) { + for (imult = 0; imult < this->multiplicity(); imult++) { + cvm::real d = this->value_output(ix, imult) - other_grid.value_output(ix, imult); + sum2 += d*d; + } + } + return sqrt(sum2/this->data.size()); +} + + +integrate_potential::integrate_potential(std::vector &colvars, std::shared_ptr gradients) : colvar_grid_scalar(colvars, true), + b_smoothed(false), gradients(gradients) { // parent class colvar_grid_scalar is constructed with margin option set to true @@ -402,8 +617,9 @@ integrate_potential::integrate_potential(std::vector &colvars, colvar_ } -integrate_potential::integrate_potential(colvar_grid_gradient * gradients) - : gradients(gradients) +integrate_potential::integrate_potential(std::shared_ptr gradients) + : b_smoothed(false), + gradients(gradients) { nd = gradients->num_variables(); nx = gradients->number_of_points_vec(); @@ -425,7 +641,7 @@ integrate_potential::integrate_potential(colvar_grid_gradient * gradients) } -int integrate_potential::integrate(const int itmax, const cvm::real &tol, cvm::real & err) +int integrate_potential::integrate(const int itmax, const cvm::real &tol, cvm::real & err, bool verbose) { int iter = 0; @@ -438,22 +654,24 @@ int integrate_potential::integrate(const int itmax, const cvm::real &tol, cvm::r } else { corr = 0.0; } - std::vector ix; // Iterate over valid indices in gradient grid for (ix = new_index(); gradients->index_ok(ix); incr(ix)) { set_value(ix, sum); - sum += (gradients->value_output(ix) - corr) * widths[0]; + cvm::real val = gradients->value_output_smoothed(ix, b_smoothed); + sum += (val - corr) * widths[0]; } if (index_ok(ix)) { // This will happen if non-periodic: then PMF grid has one extra bin wrt gradient grid + // If not, sum should be zero set_value(ix, sum); } } else if (nd <= 3) { nr_linbcg_sym(divergence, data, tol, itmax, iter, err); - cvm::log("Integrated in " + cvm::to_str(iter) + " steps, error: " + cvm::to_str(err) + "\n"); + if (verbose) + cvm::log("Integrated in " + cvm::to_str(iter) + " steps, error: " + cvm::to_str(err)); } else { cvm::error("Cannot integrate PMF in dimension > 3\n"); @@ -477,7 +695,7 @@ void integrate_potential::update_div_neighbors(const std::vector &ix0) std::vector ix(ix0); int i, j, k; - // If not periodic, expanded grid ensures that neighbors of ix0 are valid grid points + // If not periodic, expanded grid ensures that upper neighbors of ix0 are valid grid points if (nd == 1) { return; @@ -509,30 +727,23 @@ void integrate_potential::update_div_neighbors(const std::vector &ix0) } } + void integrate_potential::get_grad(cvm::real * g, std::vector &ix) { - size_t count, i; - bool edge = gradients->wrap_edge(ix); // Detect edge if non-PBC + size_t i; + bool edge = gradients->wrap_detect_edge(ix); // Detect edge if non-PBC - if (gradients->samples) { - count = gradients->samples->value(ix); - } else { - count = 1; + if (edge) { + for ( i = 0; ivalue(ix)); - cvm::real const fact = 1.0 / count; - for ( i = 0; ivector_value_smoothed(ix, g, b_smoothed); } + void integrate_potential::update_div_local(const std::vector &ix0) { const size_t linear_index = address(ix0); diff --git a/lib/colvars/colvargrid.h b/lib/colvars/colvargrid.h index e2fc1e0fe2..4cbbb10961 100644 --- a/lib/colvars/colvargrid.h +++ b/lib/colvars/colvargrid.h @@ -10,21 +10,23 @@ #ifndef COLVARGRID_H #define COLVARGRID_H -#include -#include +#include +#include #include "colvar.h" #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" + /// \brief Grid of values of a function of several collective /// variables \param T The data type /// /// Only scalar colvars supported so far: vector colvars are treated as arrays template class colvar_grid : public colvarparse { -protected: + //protected: +public: // TODO create accessors for these after all instantiations work /// Number of dimensions size_t nd; @@ -374,7 +376,7 @@ public: { for (size_t i = 0; i < nd; i++) { if (periodic[i]) { - ix[i] = (ix[i] + nx[i]) % nx[i]; //to ensure non-negative result + ix[i] = (ix[i] + nx[i]) % nx[i]; // Avoid modulo with negative operands (implementation-defined) } else { if (ix[i] < 0 || ix[i] >= nx[i]) { cvm::error("Trying to wrap illegal index vector (non-PBC) for a grid point: " @@ -387,25 +389,58 @@ public: /// Wrap an index vector around periodic boundary conditions /// or detects edges if non-periodic - inline bool wrap_edge(std::vector & ix) const + inline bool wrap_detect_edge(std::vector & ix) const { bool edge = false; for (size_t i = 0; i < nd; i++) { if (periodic[i]) { - ix[i] = (ix[i] + nx[i]) % nx[i]; //to ensure non-negative result - } else if (ix[i] == -1 || ix[i] == nx[i]) { + ix[i] = (ix[i] + nx[i]) % nx[i]; // Avoid modulo with negative operands (implementation-defined) + } else if (ix[i] < 0 || ix[i] >= nx[i]) { edge = true; } } return edge; } + /// Wrap an index vector around periodic boundary conditions + /// or brings back to nearest edge if non-periodic + inline bool wrap_to_edge(std::vector & ix, std::vector & edge_bin) const + { + bool edge = false; + edge_bin = ix; + for (size_t i = 0; i < nd; i++) { + if (periodic[i]) { + ix[i] = (ix[i] + nx[i]) % nx[i]; // Avoid modulo with negative operands (implementation-defined) + edge_bin[i] = ix[i]; + } else if (ix[i] < 0) { + edge = true; + edge_bin[i] = 0; + } else if (ix[i] >= nx[i]) { + edge = true; + edge_bin[i] = nx[i] - 1; + } + } + return edge; + } + + /// \brief Report the bin corresponding to the current value of variable i inline int current_bin_scalar(int const i) const { return value_to_bin_scalar(use_actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); } + /// \brief Report the flattened bin address corresponding to the current value of all variables + /// and assign first or last bin if out of boundaries + inline int current_bin_flat_bound() const + { + std::vector index = new_index(); + for (size_t i = 0; i < nd; i++) { + index[i] = current_bin_scalar_bound(i); + } + return address(index); + } + /// \brief Report the bin corresponding to the current value of variable i /// and assign first or last bin if out of boundaries inline int current_bin_scalar_bound(int const i) const @@ -447,6 +482,9 @@ public: inline int value_to_bin_scalar_bound(colvarvalue const &value, const int i) const { int bin_index = cvm::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); + + // Wrap bins for periodic dimensions before truncating + if (periodic[i]) bin_index %= nx[i]; if (bin_index < 0) bin_index=0; if (bin_index >=int(nx[i])) bin_index=int(nx[i])-1; return (int) bin_index; @@ -490,6 +528,13 @@ public: data[i] = t; } + /// Get the value at the point with linear address i (for speed) + inline T get_value(size_t i) const + { + return data[i]; + } + + /// \brief Get the change from this to other_grid /// and store the result in this. /// this_grid := other_grid - this_grid @@ -515,6 +560,7 @@ public: has_data = true; } + /// \brief Copy data from another grid of the same type, AND /// identical definition (boundaries, widths) /// Added for shared ABF. @@ -753,6 +799,7 @@ public: has_data = true; } + // /// Get the pointer to the binned value indexed by ix // inline T const *value_p (std::vector const &ix) // { @@ -803,109 +850,12 @@ public: } } - /// Write the grid parameters (number of colvars, boundaries, width and number of points) - std::ostream & write_params(std::ostream &os) - { - size_t i; - os << "grid_parameters {\n n_colvars " << nd << "\n"; + /// Write the current grid parameters to a string + std::string get_state_params() const; - os << " lower_boundaries "; - for (i = 0; i < nd; i++) - os << " " << lower_boundaries[i]; - os << "\n"; - - os << " upper_boundaries "; - for (i = 0; i < nd; i++) - os << " " << upper_boundaries[i]; - os << "\n"; - - os << " widths "; - for (i = 0; i < nd; i++) - os << " " << widths[i]; - os << "\n"; - - os << " sizes "; - for (i = 0; i < nd; i++) - os << " " << nx[i]; - os << "\n"; - - os << "}\n"; - return os; - } - - /// Read a grid definition from a config string + /// Read new grid parameters from a string int parse_params(std::string const &conf, - colvarparse::Parse_Mode const parse_mode = colvarparse::parse_normal) - { - if (cvm::debug()) cvm::log("Reading grid configuration from string.\n"); - - std::vector old_nx = nx; - std::vector old_lb = lower_boundaries; - std::vector old_ub = upper_boundaries; - std::vector old_w = widths; - - { - size_t nd_in = 0; - // this is only used in state files - colvarparse::get_keyval(conf, "n_colvars", nd_in, nd, colvarparse::parse_silent); - if (nd_in != nd) { - cvm::error("Error: trying to read data for a grid " - "that contains a different number of colvars ("+ - cvm::to_str(nd_in)+") than the grid defined " - "in the configuration file("+cvm::to_str(nd)+ - ").\n"); - return COLVARS_ERROR; - } - } - - // underscore keywords are used in state file - colvarparse::get_keyval(conf, "lower_boundaries", - lower_boundaries, lower_boundaries, colvarparse::parse_silent); - colvarparse::get_keyval(conf, "upper_boundaries", - upper_boundaries, upper_boundaries, colvarparse::parse_silent); - - // camel case keywords are used in config file - colvarparse::get_keyval(conf, "lowerBoundaries", - lower_boundaries, lower_boundaries, parse_mode); - colvarparse::get_keyval(conf, "upperBoundaries", - upper_boundaries, upper_boundaries, parse_mode); - - colvarparse::get_keyval(conf, "widths", widths, widths, parse_mode); - - // only used in state file - colvarparse::get_keyval(conf, "sizes", nx, nx, colvarparse::parse_silent); - - if (nd < lower_boundaries.size()) nd = lower_boundaries.size(); - - if (! use_actual_value.size()) use_actual_value.assign(nd, false); - if (! periodic.size()) periodic.assign(nd, false); - if (! widths.size()) widths.assign(nd, 1.0); - - cvm::real eps = 1.e-10; - - bool new_params = false; - if (old_nx.size()) { - for (size_t i = 0; i < nd; i++) { - if (old_nx[i] != nx[i] || - cvm::sqrt(cv[i]->dist2(old_lb[i], lower_boundaries[i])) > eps || - cvm::sqrt(cv[i]->dist2(old_ub[i], upper_boundaries[i])) > eps || - cvm::fabs(old_w[i] - widths[i]) > eps) { - new_params = true; - } - } - } else { - new_params = true; - } - - // reallocate the array in case the grid params have just changed - if (new_params) { - init_from_boundaries(); - // data.clear(); // no longer needed: setup calls clear() - return this->setup(nx, T(), mult); - } - - return COLVARS_OK; - } + colvarparse::Parse_Mode const parse_mode = colvarparse::parse_normal); /// \brief Check that the grid information inside (boundaries, /// widths, ...) is consistent with the current setting of the @@ -950,83 +900,33 @@ public: } } + /// Read all grid parameters and data from a formatted stream + std::istream & read_restart(std::istream &is); - /// \brief Read grid entry in restart file - std::istream & read_restart(std::istream &is) - { - std::streampos const start_pos = is.tellg(); - std::string key, conf; - if ((is >> key) && (key == std::string("grid_parameters"))) { - is.seekg(start_pos, std::ios::beg); - is >> colvarparse::read_block("grid_parameters", &conf); - parse_params(conf, colvarparse::parse_silent); - } else { - cvm::log("Grid parameters are missing in the restart file, using those from the configuration.\n"); - is.seekg(start_pos, std::ios::beg); - } - read_raw(is); - return is; - } + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream & read_restart(cvm::memory_stream &is); - /// \brief Write grid entry in restart file - std::ostream & write_restart(std::ostream &os) - { - write_params(os); - write_raw(os); - return os; - } + /// Write all grid parameters and data to a formatted stream + std::ostream & write_restart(std::ostream &os); + /// Write all grid parameters and data to an unformatted stream + cvm::memory_stream & write_restart(cvm::memory_stream &os); - /// \brief Write the grid data without labels, as they are - /// represented in memory - /// \param buf_size Number of values per line - std::ostream & write_raw(std::ostream &os, - size_t const buf_size = 3) const - { - std::streamsize const w = os.width(); - std::streamsize const p = os.precision(); + /// Read all grid parameters and data from a formatted stream + std::istream &read_raw(std::istream &is); - std::vector ix = new_index(); - size_t count = 0; - for ( ; index_ok(ix); incr(ix)) { - for (size_t imult = 0; imult < mult; imult++) { - os << " " - << std::setw(w) << std::setprecision(p) - << value_output(ix, imult); - if (((++count) % buf_size) == 0) - os << "\n"; - } - } - // write a final newline only if buffer is not empty - if ((count % buf_size) != 0) - os << "\n"; + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream &read_raw(cvm::memory_stream &is); - return os; - } + /// Write all grid data to a formatted stream (without labels, as they are represented in memory) + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line + std::ostream &write_raw(std::ostream &os, size_t const buf_size = 3) const; - /// \brief Read data written by colvar_grid::write_raw() - std::istream & read_raw(std::istream &is) - { - std::streampos const start_pos = is.tellg(); - - for (std::vector ix = new_index(); index_ok(ix); incr(ix)) { - for (size_t imult = 0; imult < mult; imult++) { - T new_value; - if (is >> new_value) { - value_input(ix, new_value, imult); - } else { - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); - cvm::error("Error: failed to read all of the grid points from file. Possible explanations: grid parameters in the configuration (lowerBoundary, upperBoundary, width) are different from those in the file, or the file is corrupt/incomplete.\n"); - return is; - } - } - } - - has_data = true; - return is; - } + /// Write all grid data to an unformatted stream + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line (note: ignored because there is no formatting) + cvm::memory_stream &write_raw(cvm::memory_stream &os, size_t const buf_size = 3) const; /// Read a grid written by write_multicol(), incrementing if add is true std::istream & read_multicol(std::istream &is, bool add = false); @@ -1082,16 +982,50 @@ public: } /// \brief Get the binned count indexed by ix from the newly read data - inline size_t const & new_count(std::vector const &ix, - size_t const &imult = 0) + inline size_t const & new_value(std::vector const &ix) { - return new_data[address(ix) + imult]; + return new_data[address(ix)]; } + /// Write the current grid parameters to a string + std::string get_state_params() const; + + /// Read new grid parameters from a string + int parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode = colvarparse::parse_normal); + + /// Read all grid parameters and data from a formatted stream + std::istream & read_restart(std::istream &is); + + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream & read_restart(cvm::memory_stream &is); + + /// Write all grid parameters and data to a formatted stream + std::ostream & write_restart(std::ostream &os); + + /// Write all grid parameters and data to an unformatted stream + cvm::memory_stream & write_restart(cvm::memory_stream &os); + + /// Read all grid parameters and data from a formatted stream + std::istream &read_raw(std::istream &is); + + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream &read_raw(cvm::memory_stream &is); + + /// Write all grid data to a formatted stream (without labels, as they are represented in memory) + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line + std::ostream &write_raw(std::ostream &os, size_t const buf_size = 3) const; + + /// Write all grid data to an unformatted stream + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line (note: ignored because there is no formatting) + cvm::memory_stream &write_raw(cvm::memory_stream &os, size_t const buf_size = 3) const; + /// Read a grid written by write_multicol(), incrementin if data is true std::istream & read_multicol(std::istream &is, bool add = false); - /// Read a grid written by write_multicol(), incrementin if data is true + /// Read a grid written by write_multicol(), incrementing if add is true int read_multicol(std::string const &filename, std::string description = "grid file", bool add = false); @@ -1129,10 +1063,88 @@ public: has_data = true; } + /// \brief Return the average number of samples in a given "radius" around current bin + /// Really a hypercube of length 2*radius + 1 + inline int local_sample_count(int radius) + { + std::vector ix0 = new_index(); + std::vector ix = new_index(); + + for (size_t i = 0; i < nd; i++) { + ix0[i] = current_bin_scalar_bound(i); + } + if (radius < 1) { + // Simple case: no averaging + if (index_ok(ix0)) + return value(ix0); + else + return 0; + } + size_t count = 0; + size_t nbins = 0; + int i, j, k; + bool edge; + ix = ix0; + // Treat each dimension separately to simplify code + switch (nd) + { + case 1: + for (i = -radius; i <= radius; i++) { + ix[0] = ix0[0] + i; + edge = wrap_detect_edge(ix); + if (!edge) { + nbins++; + count += value(ix); + } + } + break; + case 2: + for (i = -radius; i <= radius; i++) { + ix[0] = ix0[0] + i; + for (j = -radius; j <= radius; j++) { + ix[1] = ix0[1] + j; + edge = wrap_detect_edge(ix); + if (!edge) { + nbins++; + count += value(ix); + } + } + } + break; + case 3: + for (i = -radius; i <= radius; i++) { + ix[0] = ix0[0] + i; + for (j = -radius; j <= radius; j++) { + ix[1] = ix0[1] + j; + for (k = -radius; k <= radius; k++) { + ix[2] = ix0[2] + k; + edge = wrap_detect_edge(ix); + if (!edge) { + nbins++; + count += value(ix); + } + } + } + } + break; + default: + cvm::error("Error: local_sample_count is not implemented for grids of dimension > 3", COLVARS_NOT_IMPLEMENTED); + break; + } + + if (nbins) + // Integer division - an error on the order of 1 doesn't matter + return count / nbins; + else + return 0.0; + } + + /// \brief Return the log-gradient from finite differences /// on the *same* grid for dimension n + /// (colvar_grid_count) inline cvm::real log_gradient_finite_diff(const std::vector &ix0, - int n = 0) + int n = 0, int offset = 0) { cvm::real A0, A1, A2; std::vector ix = ix0; @@ -1140,10 +1152,10 @@ public: // TODO this can be rewritten more concisely with wrap_edge() if (periodic[n]) { ix[n]--; wrap(ix); - A0 = value(ix); + A0 = value(ix) + offset; ix = ix0; ix[n]++; wrap(ix); - A1 = value(ix); + A1 = value(ix) + offset; if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { @@ -1152,10 +1164,10 @@ public: } } else if (ix[n] > 0 && ix[n] < nx[n]-1) { // not an edge ix[n]--; - A0 = value(ix); + A0 = value(ix) + offset; ix = ix0; ix[n]++; - A1 = value(ix); + A1 = value(ix) + offset; if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { @@ -1166,9 +1178,9 @@ public: // edge: use 2nd order derivative int increment = (ix[n] == 0 ? 1 : -1); // move right from left edge, or the other way around - A0 = value(ix); - ix[n] += increment; A1 = value(ix); - ix[n] += increment; A2 = value(ix); + A0 = value(ix) + offset; + ix[n] += increment; A1 = value(ix) + offset; + ix[n] += increment; A2 = value(ix) + offset; if (A0 * A1 * A2 == 0) { return 0.; // can't handle empty bins } else { @@ -1178,8 +1190,10 @@ public: } } + /// \brief Return the gradient of discrete count from finite differences /// on the *same* grid for dimension n + /// (colvar_grid_count) inline cvm::real gradient_finite_diff(const std::vector &ix0, int n = 0) { @@ -1261,10 +1275,45 @@ public: has_data = true; } + /// Write the current grid parameters to a string + std::string get_state_params() const; + + /// Read new grid parameters from a string + int parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode = colvarparse::parse_normal); + + /// Read all grid parameters and data from a formatted stream + std::istream & read_restart(std::istream &is); + + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream & read_restart(cvm::memory_stream &is); + + /// Write all grid parameters and data to a formatted stream + std::ostream & write_restart(std::ostream &os); + + /// Write all grid parameters and data to an unformatted stream + cvm::memory_stream & write_restart(cvm::memory_stream &os); + + /// Read all grid parameters and data from a formatted stream + std::istream &read_raw(std::istream &is); + + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream &read_raw(cvm::memory_stream &is); + + /// Write all grid data to a formatted stream (without labels, as they are represented in memory) + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line + std::ostream &write_raw(std::ostream &os, size_t const buf_size = 3) const; + + /// Write all grid data to an unformatted stream + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line (note: ignored because there is no formatting) + cvm::memory_stream &write_raw(cvm::memory_stream &os, size_t const buf_size = 3) const; + /// Read a grid written by write_multicol(), incrementin if data is true std::istream & read_multicol(std::istream &is, bool add = false); - /// Read a grid written by write_multicol(), incrementin if data is true + /// Read a grid written by write_multicol(), incrementing if add is true int read_multicol(std::string const &filename, std::string description = "grid file", bool add = false); @@ -1336,8 +1385,61 @@ public: } } + + /// \brief Return the log-gradient from finite differences + /// on the *same* grid for dimension n + /// (colvar_grid_scalar) + inline cvm::real log_gradient_finite_diff(const std::vector &ix0, + int n = 0, int offset = 0) + { + cvm::real A0, A1, A2; + std::vector ix = ix0; + + // TODO this can be rewritten more concisely with wrap_edge() + if (periodic[n]) { + ix[n]--; wrap(ix); + A0 = value(ix) + offset; + ix = ix0; + ix[n]++; wrap(ix); + A1 = value(ix) + offset; + if (A0 * A1 == 0) { + return 0.; // can't handle empty bins + } else { + return (cvm::logn(A1) - cvm::logn(A0)) + / (widths[n] * 2.); + } + } else if (ix[n] > 0 && ix[n] < nx[n]-1) { // not an edge + ix[n]--; + A0 = value(ix) + offset; + ix = ix0; + ix[n]++; + A1 = value(ix) + offset; + if (A0 * A1 == 0) { + return 0.; // can't handle empty bins + } else { + return (cvm::logn(A1) - cvm::logn(A0)) + / (widths[n] * 2.); + } + } else { + // edge: use 2nd order derivative + int increment = (ix[n] == 0 ? 1 : -1); + // move right from left edge, or the other way around + A0 = value(ix) + offset; + ix[n] += increment; A1 = value(ix) + offset; + ix[n] += increment; A2 = value(ix) + offset; + if (A0 * A1 * A2 == 0) { + return 0.; // can't handle empty bins + } else { + return (-1.5 * cvm::logn(A0) + 2. * cvm::logn(A1) + - 0.5 * cvm::logn(A2)) * increment / widths[n]; + } + } + } + + /// \brief Return the gradient of discrete count from finite differences /// on the *same* grid for dimension n + /// (colvar_grid_scalar) inline cvm::real gradient_finite_diff(const std::vector &ix0, int n = 0) { @@ -1365,7 +1467,7 @@ public: if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { - return (A1 - A0) / (widths[n] * 2.); + return cvm::real(A1 - A0) / (widths[n] * 2.); } } else { // edge: use 2nd order derivative @@ -1374,27 +1476,29 @@ public: A0 = value(ix); ix[n] += increment; A1 = value(ix); ix[n] += increment; A2 = value(ix); - return (-1.5 * A0 + 2. * A1 - - 0.5 * A2) * increment / widths[n]; + return (-1.5 * cvm::real(A0) + 2. * cvm::real(A1) + - 0.5 * cvm::real(A2)) * increment / widths[n]; } } + /// \brief Return the value of the function at ix divided by its /// number of samples (if the count grid is defined) - virtual cvm::real value_output(std::vector const &ix, - size_t const &imult = 0) const + virtual inline cvm::real value_output(std::vector const &ix, + size_t const &imult = 0) const override { + int s; if (imult > 0) { cvm::error("Error: trying to access a component " "larger than 1 in a scalar data grid.\n"); return 0.; } if (samples) { - return (samples->value(ix) > 0) ? - (data[address(ix)] / cvm::real(samples->value(ix))) : + return ( (s = samples->value(ix)) > 0) ? + (data[address(ix) + imult] / cvm::real(s)) : 0.0; } else { - return data[address(ix)]; + return data[address(ix) + imult]; } } @@ -1402,7 +1506,7 @@ public: virtual void value_input(std::vector const &ix, cvm::real const &new_value, size_t const &imult = 0, - bool add = false) + bool add = false) override { if (imult > 0) { cvm::error("Error: trying to access a component " @@ -1411,7 +1515,7 @@ public: } if (add) { if (samples) - data[address(ix)] += new_value * samples->new_count(ix); + data[address(ix)] += new_value * samples->new_value(ix); else data[address(ix)] += new_value; } else { @@ -1438,6 +1542,10 @@ public: /// \brief Assuming that the map is a normalized probability density, /// calculates the entropy (uses widths if they are defined) cvm::real entropy() const; + + /// \brief Return the RMSD between this grid's data and another one + /// Grids must have the same dimensions. + cvm::real grid_rmsd(colvar_grid_scalar const &other_grid) const; }; @@ -1449,11 +1557,7 @@ public: /// \brief Provide the sample count by which each binned value /// should be divided - colvar_grid_count *samples; - - /// \brief Provide the floating point weights by which each binned value - /// should be divided (alternate to samples, only one should be non-null) - colvar_grid_scalar *weights; + std::shared_ptr samples; /// Default constructor colvar_grid_gradient(); @@ -1471,26 +1575,68 @@ public: /// Constructor from a multicol file colvar_grid_gradient(std::string &filename); - /// Read a grid written by write_multicol(), incrementin if data is true - virtual std::istream & read_multicol(std::istream &is, bool add = false); + /// Constructor from a vector of colvars and a pointer to the count grid + colvar_grid_gradient(std::vector &colvars, std::shared_ptr samples_in); + + /// Parameters for smoothing data with low sampling + int full_samples; + int min_samples; + + /// Write the current grid parameters to a string + std::string get_state_params() const; + + /// Read new grid parameters from a string + int parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode = colvarparse::parse_normal); + + /// Read all grid parameters and data from a formatted stream + std::istream & read_restart(std::istream &is); + + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream & read_restart(cvm::memory_stream &is); + + /// Write all grid parameters and data to a formatted stream + std::ostream & write_restart(std::ostream &os); + + /// Write all grid parameters and data to an unformatted stream + cvm::memory_stream & write_restart(cvm::memory_stream &os); + + /// Read all grid parameters and data from a formatted stream + std::istream &read_raw(std::istream &is); + + /// Read all grid parameters and data from an unformatted stream + cvm::memory_stream &read_raw(cvm::memory_stream &is); + + /// Write all grid data to a formatted stream (without labels, as they are represented in memory) + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line + std::ostream &write_raw(std::ostream &os, size_t const buf_size = 3) const; + + /// Write all grid data to an unformatted stream + /// \param[in,out] os Stream object + /// \param[in] buf_size Number of values per line (note: ignored because there is no formatting) + cvm::memory_stream &write_raw(cvm::memory_stream &os, size_t const buf_size = 3) const; /// Read a grid written by write_multicol(), incrementin if data is true - virtual int read_multicol(std::string const &filename, + std::istream & read_multicol(std::istream &is, bool add = false); + + /// Read a grid written by write_multicol(), incrementin if data is true + int read_multicol(std::string const &filename, std::string description = "grid file", bool add = false); /// Write grid in a format which is both human-readable and gnuplot-friendly - virtual std::ostream & write_multicol(std::ostream &os) const; + std::ostream & write_multicol(std::ostream &os) const; /// Write grid in a format which is both human-readable and gnuplot-friendly - virtual int write_multicol(std::string const &filename, + int write_multicol(std::string const &filename, std::string description = "grid file") const; /// Write the grid data without labels, as they are represented in memory - virtual std::ostream & write_opendx(std::ostream &os) const; + std::ostream & write_opendx(std::ostream &os) const; /// Write the grid data without labels, as they are represented in memory - virtual int write_opendx(std::string const &filename, + int write_opendx(std::string const &filename, std::string description = "grid file") const; /// \brief Get a vector with the binned value(s) indexed by ix, normalized if applicable @@ -1516,6 +1662,7 @@ public: } } + /// \brief Accumulate the value inline void acc_value(std::vector const &ix, std::vector const &values) { for (size_t imult = 0; imult < mult; imult++) { @@ -1535,28 +1682,89 @@ public: samples->incr_count(ix); } - /// \brief Accumulate the gradient based on the force (i.e. sums the - /// opposite of the force) with a non-integer weight - inline void acc_force_weighted(std::vector const &ix, - cvm::real const *forces, - cvm::real weight) { - for (size_t imult = 0; imult < mult; imult++) { - data[address(ix) + imult] -= forces[imult] * weight; - } - weights->acc_value(ix, weight); - } - /// \brief Return the value of the function at ix divided by its /// number of samples (if the count grid is defined) virtual cvm::real value_output(std::vector const &ix, - size_t const &imult = 0) const + size_t const &imult = 0) const override { - if (samples) - return (samples->value(ix) > 0) ? - (data[address(ix) + imult] / cvm::real(samples->value(ix))) : + int s; + if (samples) { + return ( (s = samples->value(ix)) > 0) ? + (data[address(ix) + imult] / cvm::real(s)) : 0.0; - else + } else { return data[address(ix) + imult]; + } + } + + /// Compute the inverse weight corresponding to smoothing factor as in ABF + /// to normalize sums over steps into averages + inline cvm::real smooth_inverse_weight(cvm::real weight) + { + cvm::real fact; + if ( weight <= min_samples ) { + fact = 0.0; + } else if ( weight < full_samples ) { + fact = (weight - min_samples) / (weight * cvm::real(full_samples - min_samples)); + } else { + fact = 1.0 / weight; + } + return fact; + } + + + /// \brief Return the scalar value of the function at ix divided by its + /// number of samples (if the count grid is defined), possibly smoothed + /// by a ramp function going from 0 to 1 between minSamples and fullSamples. + /// Only makes sense if dimension is 1 + virtual inline cvm::real value_output_smoothed(std::vector const &ix, bool smoothed = true) + { + cvm::real weight, fact; + + if (samples) { + weight = cvm::real(samples->value(ix)); + } else { + weight = 1.; + } + + if (smoothed) { + fact = smooth_inverse_weight(weight); + } else { + fact = weight > 0. ? 1. / weight : 0.; + } + + return fact * data[address(ix)]; + } + + /// \brief Obtain the vector value of the function at ix divided by its + /// number of samples (if the count grid is defined), possibly smoothed + /// by a ramp function going from 0 to 1 between minSamples and fullSamples. + inline void vector_value_smoothed(std::vector const &ix, cvm::real *grad, bool smoothed = true) + { + cvm::real weight, fact; + + if (samples) { + weight = cvm::real(samples->value(ix)); + } else { + weight = 1.; + } + + if (smoothed) { + fact = smooth_inverse_weight(weight); + } else { + fact = weight > 0. ? 1. / weight : 0.; + } + + cvm::real *p = &(data[address(ix)]); + + // Appease Clang analyzer, which likes to assume that mult is zero + #ifdef __clang_analyzer__ + assert(mult > 0); + #endif + + for (size_t imult = 0; imult < mult; imult++) { + grad[imult] = fact * p[imult]; + } } /// \brief Get the value from a formatted output and transform it @@ -1565,11 +1773,11 @@ public: virtual void value_input(std::vector const &ix, cvm::real const &new_value, size_t const &imult = 0, - bool add = false) + bool add = false) override { if (add) { if (samples) - data[address(ix) + imult] += new_value * samples->new_count(ix); + data[address(ix) + imult] += new_value * samples->new_value(ix); else data[address(ix) + imult] += new_value; } else { @@ -1583,31 +1791,26 @@ public: /// Compute and return average value for a 1D gradient grid - inline cvm::real average() + inline cvm::real average(bool smoothed = false) { - size_t n = 0; - if (nd != 1 || nx[0] == 0) { return 0.0; } cvm::real sum = 0.0; - std::vector ix = new_index(); - if (samples) { - for ( ; index_ok(ix); incr(ix)) { - if ( (n = samples->value(ix)) ) - sum += value(ix) / n; - } - } else { - for ( ; index_ok(ix); incr(ix)) { - sum += value(ix); - } + for (std::vector ix = new_index(); index_ok(ix); incr(ix)) { + sum += value_output_smoothed(ix, smoothed); } + return (sum / cvm::real(nx[0])); } + /// \brief Return the RMSD between this grid's data and another one + /// Grids must have the same dimensions. + cvm::real grid_rmsd(colvar_grid_gradient const &other_grid) const; + /// \brief If the grid is 1-dimensional, integrate it and write the - /// integral to a file + /// integral to a file (DEPRECATED by the integrate_potential class) void write_1D_integral(std::ostream &os); }; @@ -1626,18 +1829,22 @@ class integrate_potential : public colvar_grid_scalar {} /// Constructor from a vector of colvars + gradient grid - integrate_potential(std::vector &colvars, colvar_grid_gradient * gradients); + integrate_potential(std::vector &colvars, std::shared_ptr gradients); /// Constructor from a gradient grid (for processing grid files without a Colvars config) - integrate_potential(colvar_grid_gradient * gradients); + integrate_potential(std::shared_ptr gradients); /// \brief Calculate potential from divergence (in 2D); return number of steps - int integrate(const int itmax, const cvm::real & tol, cvm::real & err); + int integrate(const int itmax, const cvm::real & tol, cvm::real & err, bool verbose = true); /// \brief Update matrix containing divergence and boundary conditions /// based on new gradient point value, in neighboring bins void update_div_neighbors(const std::vector &ix); + /// \brief Update matrix containing divergence and boundary conditions + /// called by update_div_neighbors and by colvarbias_abf::adiabatic_reweighting_update_gradient_pmf + void update_div_local(const std::vector &ix); + /// \brief Set matrix containing divergence and boundary conditions /// based on complete gradient grid void set_div(); @@ -1648,20 +1855,20 @@ class integrate_potential : public colvar_grid_scalar add_constant(-1.0 * minimum_value()); } + /// \brief Flag requesting the use of a smoothed version of the gradient (default: false) + bool b_smoothed; + + protected: // Reference to gradient grid - colvar_grid_gradient *gradients; + std::shared_ptr gradients; /// Array holding divergence + boundary terms (modified Neumann) if not periodic std::vector divergence; // std::vector inv_lap_diag; // Inverse of the diagonal of the Laplacian; for conditioning - /// \brief Update matrix containing divergence and boundary conditions - /// called by update_div_neighbors - void update_div_local(const std::vector &ix); - /// Obtain the gradient vector at given location ix, if available /// or zero if it is on the edge of the gradient grid /// ix gets wrapped in PBC diff --git a/lib/colvars/colvargrid_def.h b/lib/colvars/colvargrid_def.h index f2245f3d81..fa6531271b 100644 --- a/lib/colvars/colvargrid_def.h +++ b/lib/colvars/colvargrid_def.h @@ -19,6 +19,233 @@ #include "colvarproxy.h" #include "colvar.h" #include "colvargrid.h" +#include "colvars_memstream.h" + + +template IST &read_restart_template_(colvar_grid &g, IST &is) +{ + auto const start_pos = is.tellg(); + std::string conf; + if ((is >> colvarparse::read_block("grid_parameters", &conf)) && + (g.parse_params(conf, colvarparse::parse_restart) == COLVARS_OK) && g.read_raw(is)) { + return is; + } + auto const error_pos = is.tellg(); + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + cvm::error("Error: in reading grid state from stream at position " + cvm::to_str(error_pos) + + "\n", + COLVARS_INPUT_ERROR); + return is; +} + + +template std::istream &colvar_grid::read_restart(std::istream &is) +{ + return read_restart_template_(*this, is); +} + + +template cvm::memory_stream &colvar_grid::read_restart(cvm::memory_stream &is) +{ + return read_restart_template_(*this, is); +} + + +template std::ostream &colvar_grid::write_restart(std::ostream &os) +{ + os << "grid_parameters {\n" << get_state_params() << "}\n"; + write_raw(os); + return os; +} + + +template cvm::memory_stream &colvar_grid::write_restart(cvm::memory_stream &os) +{ + os << std::string("grid_parameters") << get_state_params(); + write_raw(os); + return os; +} + + +template IST &read_raw_template_(colvar_grid &g, IST &is) +{ + auto const start_pos = is.tellg(); + + for (std::vector ix = g.new_index(); g.index_ok(ix); g.incr(ix)) { + for (size_t imult = 0; imult < g.mult; imult++) { + T new_value; + if (is >> new_value) { + g.value_input(ix, new_value, imult); + } else { + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + cvm::error( + "Error: failed to read all of the grid points from file. Possible explanations: grid " + "parameters in the configuration (lowerBoundary, upperBoundary, width) are different " + "from those in the file, or the file is corrupt/incomplete.\n", + COLVARS_INPUT_ERROR); + return is; + } + } + } + + g.has_data = true; + return is; +} + + +template std::istream &colvar_grid::read_raw(std::istream &is) +{ + return read_raw_template_(*this, is); +} + + +template cvm::memory_stream &colvar_grid::read_raw(cvm::memory_stream &is) +{ + return read_raw_template_(*this, is); +} + + +template +std::ostream &colvar_grid::write_raw(std::ostream &os, size_t const buf_size) const +{ + auto const w = os.width(); + auto const p = os.precision(); + + size_t count = 0; + for (auto ix = new_index(); index_ok(ix); incr(ix)) { + for (size_t imult = 0; imult < mult; imult++) { + os << " " << std::setw(w) << std::setprecision(p) << value_output(ix, imult); + if (((++count) % buf_size) == 0) + os << "\n"; + } + } + // write a final newline only if buffer is not empty + if ((count % buf_size) != 0) + os << "\n"; + + return os; +} + + +template +cvm::memory_stream &colvar_grid::write_raw(cvm::memory_stream &os, size_t const buf_size) const +{ + for (auto ix = new_index(); index_ok(ix); incr(ix)) { + for (size_t imult = 0; imult < mult; imult++) { + os << value_output(ix, imult); + } + } + return os; +} + + +template std::string colvar_grid::get_state_params() const +{ + std::ostringstream os; + size_t i; + os << " n_colvars " << nd << "\n"; + + os << " lower_boundaries "; + for (i = 0; i < nd; i++) + os << " " << lower_boundaries[i]; + os << "\n"; + + os << " upper_boundaries "; + for (i = 0; i < nd; i++) + os << " " << upper_boundaries[i]; + os << "\n"; + + os << " widths "; + for (i = 0; i < nd; i++) + os << " " << widths[i]; + os << "\n"; + + os << " sizes "; + for (i = 0; i < nd; i++) + os << " " << nx[i]; + os << "\n"; + + return os.str(); +} + + +template int colvar_grid::parse_params(std::string const &conf, + colvarparse::Parse_Mode const parse_mode) +{ + if (cvm::debug()) + cvm::log("Reading grid configuration from string.\n"); + + std::vector old_nx = nx; + std::vector old_lb = lower_boundaries; + std::vector old_ub = upper_boundaries; + std::vector old_w = widths; + + { + size_t nd_in = 0; + // this is only used in state files + colvarparse::get_keyval(conf, "n_colvars", nd_in, nd, colvarparse::parse_silent); + if (nd_in != nd) { + cvm::error("Error: trying to read data for a grid " + "that contains a different number of colvars ("+ + cvm::to_str(nd_in)+") than the grid defined " + "in the configuration file("+cvm::to_str(nd)+ + ").\n"); + return COLVARS_ERROR; + } + } + + // underscore keywords are used in state file + colvarparse::get_keyval(conf, "lower_boundaries", + lower_boundaries, lower_boundaries, colvarparse::parse_silent); + colvarparse::get_keyval(conf, "upper_boundaries", + upper_boundaries, upper_boundaries, colvarparse::parse_silent); + + // camel case keywords are used in config file + colvarparse::get_keyval(conf, "lowerBoundaries", + lower_boundaries, lower_boundaries, parse_mode); + colvarparse::get_keyval(conf, "upperBoundaries", + upper_boundaries, upper_boundaries, parse_mode); + + colvarparse::get_keyval(conf, "widths", widths, widths, parse_mode); + + // only used in state file + colvarparse::get_keyval(conf, "sizes", nx, nx, colvarparse::parse_silent); + + if (nd < lower_boundaries.size()) nd = lower_boundaries.size(); + + if (! use_actual_value.size()) use_actual_value.assign(nd, false); + if (! periodic.size()) periodic.assign(nd, false); + if (! widths.size()) widths.assign(nd, 1.0); + + cvm::real eps = 1.e-10; + + bool new_params = false; + if (old_nx.size()) { + for (size_t i = 0; i < nd; i++) { + if (old_nx[i] != nx[i] || + cvm::sqrt(cv[i]->dist2(old_lb[i], lower_boundaries[i])) > eps || + cvm::sqrt(cv[i]->dist2(old_ub[i], upper_boundaries[i])) > eps || + cvm::fabs(old_w[i] - widths[i]) > eps) { + new_params = true; + } + } + } else { + new_params = true; + } + + // reallocate the array in case the grid params have just changed + if (new_params) { + init_from_boundaries(); + // data.clear(); // no longer needed: setup calls clear() + return this->setup(nx, T(), mult); + } + + return COLVARS_OK; +} template @@ -90,6 +317,9 @@ std::istream & colvar_grid::read_multicol(std::istream &is, bool add) for (size_t i = 0; i < nd; i++ ) { if ( !(is >> x) ) end_of_file = true; bin[i] = value_to_bin_scalar(x, i); + // if x is out of bounds and we are using PBC, wrap it + // Ignore out of bounds points in non-PBC + wrap_detect_edge(bin); } if (end_of_file) break; diff --git a/lib/colvars/colvarmodule.cpp b/lib/colvars/colvarmodule.cpp index 68cd402e1c..25b1efe209 100644 --- a/lib/colvars/colvarmodule.cpp +++ b/lib/colvars/colvarmodule.cpp @@ -7,13 +7,10 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include #include -#include -#include -#include +#include +#include #include -#include #include "colvarmodule.h" #include "colvarparse.h" @@ -21,6 +18,7 @@ #include "colvar.h" #include "colvarbias.h" #include "colvarbias_abf.h" +#include "colvarbias_abmd.h" #include "colvarbias_alb.h" #include "colvarbias_histogram.h" #include "colvarbias_histogram_reweight_amd.h" @@ -29,7 +27,7 @@ #include "colvarscript.h" #include "colvaratoms.h" #include "colvarcomp.h" - +#include "colvars_memstream.h" /// Track usage of Colvars features @@ -69,6 +67,11 @@ protected: }; +namespace { + constexpr uint32_t colvars_magic_number = 2013813594; +} + + colvarmodule::colvarmodule(colvarproxy *proxy_in) { depth_s = 0; @@ -98,16 +101,14 @@ colvarmodule::colvarmodule(colvarproxy *proxy_in) version_int = proxy->get_version_from_string(COLVARS_VERSION); cvm::log(cvm::line_marker); - cvm::log("Initializing the collective variables module, version "+ - version()+".\n"); + cvm::log( + "Initializing the collective variables module, version " + version() + + (patch_version_number() ? (" (patch " + cvm::to_str(patch_version_number()) + ")") : "") + + ".\n"); cvm::log("Please cite Fiorin et al, Mol Phys 2013:\n" " https://doi.org/10.1080/00268976.2013.813594\n" "as well as all other papers listed below for individual features used.\n"); - if (proxy->smp_enabled() == COLVARS_OK) { - cvm::log("SMP parallelism is enabled; if needed, use \"smp off\" to override this.\n"); - } - #if (__cplusplus >= 201103L) cvm::log("This version was built with the C++11 standard or higher.\n"); #else @@ -116,8 +117,38 @@ colvarmodule::colvarmodule(colvarproxy *proxy_in) " https://colvars.github.io/README-c++11.html\n"); #endif + cvm::log("Summary of compile-time features available in this build:\n"); + + if (proxy->check_smp_enabled() == COLVARS_NOT_IMPLEMENTED) { + cvm::log(" - SMP parallelism: not available\n"); + } else { + if (proxy->check_smp_enabled() == COLVARS_OK) { + cvm::log(" - SMP parallelism: enabled (num. threads = " + to_str(proxy->smp_num_threads()) + ")\n"); + } else { + cvm::log(" - SMP parallelism: available, but not enabled\n"); + } + } + +#if defined(LEPTON) + cvm::log(" - Lepton custom functions: available\n"); +#else + cvm::log(" - Lepton custom functions: not available\n"); +#endif + +#if defined(COLVARS_TCL) + cvm::log(" - Tcl interpreter: available\n"); +#else + cvm::log(" - Tcl interpreter: not available\n"); +#endif + // set initial default values + binary_restart = false; + char const *env_var = getenv("COLVARS_BINARY_RESTART"); + if (env_var && atoi(env_var)) { + binary_restart = true; + } + // "it_restart" will be set by the input state file, if any; // "it" should be updated by the proxy colvarmodule::it = colvarmodule::it_restart = 0; @@ -182,6 +213,13 @@ size_t colvarmodule::size() const } +void colvarmodule::set_initial_step(step_number it_in) +{ + cvm::log("Setting initial step number from MD engine: " + cvm::to_str(it_in) + "\n"); + it = it_restart = it_in; +} + + int colvarmodule::read_config_file(char const *config_filename) { cvm::log(cvm::line_marker); @@ -327,6 +365,7 @@ void colvarmodule::config_changed() int colvarmodule::parse_global_params(std::string const &conf) { + int error_code = COLVARS_OK; // TODO document and then echo this keyword parse->get_keyval(conf, "logLevel", log_level_, log_level_, colvarparse::parse_silent); @@ -334,10 +373,7 @@ int colvarmodule::parse_global_params(std::string const &conf) std::string units; if (parse->get_keyval(conf, "units", units)) { units = colvarparse::to_lower_cppstr(units); - int error_code = proxy->set_unit_system(units, (colvars.size() != 0)); - if (error_code != COLVARS_OK) { - return error_code; - } + error_code |= proxy->set_unit_system(units, (colvars.size() != 0)); } } @@ -346,7 +382,7 @@ int colvarmodule::parse_global_params(std::string const &conf) size_t pos = 0; while (parse->key_lookup(conf, "indexFile", &index_file_name, &pos)) { cvm::log("# indexFile = \""+index_file_name+"\"\n"); - read_index_file(index_file_name.c_str()); + error_code |= read_index_file(index_file_name.c_str()); index_file_name.clear(); } } @@ -358,9 +394,8 @@ int colvarmodule::parse_global_params(std::string const &conf) } bool b_analysis = true; - if (parse->get_keyval(conf, "analysis", b_analysis, true, - colvarparse::parse_silent)) { - cvm::log("Warning: keyword \"analysis\" is deprecated: it is now set " + if (parse->get_keyval(conf, "analysis", b_analysis, true, colvarparse::parse_silent)) { + cvm::log("Warning: keyword \"analysis\" is deprecated: it is now always set " "to true; individual analyses are performed only if requested."); } @@ -391,7 +426,12 @@ int colvarmodule::parse_global_params(std::string const &conf) parse->get_keyval(conf, "sourceTclFile", source_Tcl_script); #endif - return cvm::get_error(); + if (proxy->engine_name() == "GROMACS" && proxy->version_number() >= 20231003) { + parse->get_keyval(conf, "defaultInputStateFile", default_input_state_file_, + default_input_state_file_); + } + + return error_code; } @@ -522,6 +562,9 @@ int colvarmodule::parse_biases(std::string const &conf) /// initialize ABF instances parse_biases_type(conf, "abf"); + /// initialize ABMD instances + parse_biases_type(conf, "abmd"); + /// initialize adaptive linear biases parse_biases_type(conf, "ALB"); @@ -791,28 +834,26 @@ int colvarmodule::calc() // write restart files and similar data if (restart_out_freq && (cvm::step_relative() > 0) && - ((cvm::step_absolute() % restart_out_freq) == 0) ) { + ((cvm::step_absolute() % restart_out_freq) == 0)) { if (restart_out_name.size()) { // Write restart file, if different from main output error_code |= write_restart_file(restart_out_name); - } else { - error_code |= write_restart_file(output_prefix()+".colvars.state"); + } else if (output_prefix().size()) { + error_code |= write_restart_file(output_prefix() + ".colvars.state"); } - cvm::increase_depth(); - for (std::vector::iterator cvi = colvars.begin(); - cvi != colvars.end(); - cvi++) { - // TODO remove this when corrFunc becomes a bias - error_code |= (*cvi)->write_output_files(); + if (output_prefix().size()) { + cvm::increase_depth(); + for (std::vector::iterator cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + // TODO remove this when corrFunc becomes a bias + error_code |= (*cvi)->write_output_files(); + } + for (std::vector::iterator bi = biases.begin(); bi != biases.end(); bi++) { + error_code |= (*bi)->write_state_to_replicas(); + } + cvm::decrease_depth(); } - for (std::vector::iterator bi = biases.begin(); - bi != biases.end(); - bi++) { - error_code |= (*bi)->write_state_to_replicas(); - } - cvm::decrease_depth(); } // Write output files for biases, at the specified frequency for each @@ -881,7 +922,7 @@ int colvarmodule::calc_colvars() } // if SMP support is available, split up the work - if (proxy->smp_enabled() == COLVARS_OK) { + if (proxy->check_smp_enabled() == COLVARS_OK) { // first, calculate how much work (currently, how many active CVCs) each colvar has @@ -963,8 +1004,16 @@ int colvarmodule::calc_biases() } } - // if SMP support is available, split up the work - if (proxy->smp_enabled() == COLVARS_OK) { + bool biases_need_main_thread = false; + for (bi = biases_active()->begin(); bi != biases_active()->end(); bi++) { + if ((*bi)->replica_share_freq() > 0) { + // Biases that share data with replicas need read/write access to I/O or MPI + biases_need_main_thread = true; + } + } + + // If SMP support is available, split up the work (unless biases need to use main thread's memory) + if (proxy->check_smp_enabled() == COLVARS_OK && !biases_need_main_thread) { if (use_scripted_forces && !scripting_after_biases) { // calculate biases and scripted forces in parallel @@ -980,10 +1029,12 @@ int colvarmodule::calc_biases() error_code |= calc_scripted_forces(); } + // Straight loop over biases on a single thread cvm::increase_depth(); for (bi = biases_active()->begin(); bi != biases_active()->end(); bi++) { error_code |= (*bi)->update(); if (cvm::get_error()) { + cvm::decrease_depth(); return error_code; } } @@ -994,7 +1045,7 @@ int colvarmodule::calc_biases() total_bias_energy += (*bi)->get_energy(); } - return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); + return error_code; } @@ -1082,9 +1133,22 @@ int colvarmodule::write_restart_file(std::string const &out_name) cvm::log("Saving collective variables state to \""+out_name+"\".\n"); std::ostream &restart_out_os = proxy->output_stream(out_name, "state file"); if (!restart_out_os) return COLVARS_FILE_ERROR; - if (!write_restart(restart_out_os)) { - return cvm::error("Error: in writing restart file.\n", COLVARS_FILE_ERROR); + + if (binary_restart) { + cvm::memory_stream mem_os; + if (!write_state(mem_os)) { + return cvm::error("Error: in writing binary state information to file.\n", COLVARS_ERROR); + } + if (!restart_out_os.write(reinterpret_cast(mem_os.output_buffer()), + mem_os.length())) { + return cvm::error("Error: in writing restart file.\n", COLVARS_FILE_ERROR); + } + } else { + if (!write_state(restart_out_os)) { + return cvm::error("Error: in writing restart file.\n", COLVARS_FILE_ERROR); + } } + proxy->close_output_stream(out_name); // Take the opportunity to flush colvars.traj @@ -1097,7 +1161,7 @@ int colvarmodule::write_restart_string(std::string &output) { cvm::log("Saving state to output buffer.\n"); std::ostringstream os; - if (!write_restart(os)) { + if (!write_state(os)) { return cvm::error("Error: in writing restart to buffer.\n", COLVARS_FILE_ERROR); } output = os.str(); @@ -1207,9 +1271,17 @@ int colvarmodule::end_of_step() int colvarmodule::update_engine_parameters() { - if (this->size() == 0) return cvm::get_error(); - for (std::vector::iterator cvi = variables()->begin(); - cvi != variables()->end(); cvi++) { + if (size() == 0) { + // No-op if no variables or biases are defined + return cvm::get_error(); + } + if (proxy->simulation_running()) { + cvm::log("Current simulation parameters: initial step = " + cvm::to_str(it) + + ", integration timestep = " + cvm::to_str(dt()) + "\n"); + } + cvm::log("Updating atomic parameters (masses, charges, etc).\n"); + for (std::vector::iterator cvi = variables()->begin(); cvi != variables()->end(); + cvi++) { (*cvi)->setup(); } return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); @@ -1250,10 +1322,10 @@ int colvarmodule::reset() parse->clear(); // Iterate backwards because we are deleting the elements as we go - for (std::vector::reverse_iterator bi = biases.rbegin(); - bi != biases.rend(); - bi++) { - delete *bi; // the bias destructor updates the biases array + while (!biases.empty()) { + colvarbias* tail = biases.back(); + biases.pop_back(); + delete tail; // the bias destructor updates the biases array } biases.clear(); biases_active_.clear(); @@ -1262,11 +1334,11 @@ int colvarmodule::reset() reinterpret_cast *>(num_biases_types_used_)->clear(); // Iterate backwards because we are deleting the elements as we go - for (std::vector::reverse_iterator cvi = colvars.rbegin(); - cvi != colvars.rend(); - cvi++) { - delete *cvi; // the colvar destructor updates the colvars array - } + while (!colvars.empty()) { + colvar* cvi = colvars.back(); + colvars.pop_back(); + delete cvi; // the colvar destructor updates the colvars array + }; colvars.clear(); reset_index_groups(); @@ -1274,64 +1346,119 @@ int colvarmodule::reset() proxy->flush_output_streams(); proxy->reset(); - return (cvm::get_error() ? COLVARS_ERROR : COLVARS_OK); + clear_error(); + + return COLVARS_OK; } int colvarmodule::setup_input() { - if (proxy->input_prefix().size()) { - // Read a state file - std::string restart_in_name(proxy->input_prefix()+ - std::string(".colvars.state")); - std::istream *input_is = &(proxy->input_stream(restart_in_name, - "restart file/channel", - false)); + if (proxy->input_prefix().empty() && (!proxy->input_stream_exists("input state string")) && + input_state_buffer_.empty()) { + // If no input sources have been defined up to this point, use defaultInputStateFile + proxy->set_input_prefix(default_input_state_file_); + } + + if (!proxy->input_prefix().empty()) { + + // Read state from a file + + std::string restart_in_name(proxy->input_prefix() + std::string(".colvars.state")); + std::istream *input_is = &(proxy->input_stream(restart_in_name, "restart file/channel", false)); if (!*input_is) { // Try without the suffix ".colvars.state" restart_in_name = proxy->input_prefix(); - input_is = &(proxy->input_stream(restart_in_name, - "restart file/channel")); + input_is = &(proxy->input_stream(restart_in_name, "restart file/channel")); if (!*input_is) { + // Error message has already been printed, return now return COLVARS_FILE_ERROR; } } - // Now that the file has been opened, clear this field so that this - // function will not be called twice - proxy->input_prefix().clear(); + // Now that the file has been opened, clear this field so that this block + // will not be executed twice + proxy->set_input_prefix(""); - cvm::log(cvm::line_marker); - cvm::log("Loading state from file \""+restart_in_name+"\".\n"); - read_restart(*input_is); cvm::log(cvm::line_marker); - proxy->close_input_stream(restart_in_name); + input_is->seekg(0, std::ios::end); + size_t const file_size = input_is->tellg(); + input_is->seekg(0, std::ios::beg); - return cvm::get_error(); - } + bool binary_state_file = false; - // TODO This could soon be redundant - if (proxy->input_buffer() != NULL) { - // Read a string buffer - char const *buffer = proxy->input_buffer(); - size_t const buffer_size = strlen(proxy->input_buffer()); - // Clear proxy pointer for the next round - proxy->input_buffer() = NULL; - if (buffer_size > 0) { - std::istringstream input_is; - // Replace the buffer of input_is; work around the lack of const in - // pubsetbuf's prototype (which also needs to support output streams) - input_is.rdbuf()->pubsetbuf(const_cast(buffer), buffer_size); - cvm::log(cvm::line_marker); - cvm::log("Loading state from input buffer.\n"); - read_restart(input_is); - cvm::log(cvm::line_marker); - return cvm::get_error(); + uint32_t file_magic_number = 0; + if (file_size > sizeof(uint32_t)) { + if (input_is->read(reinterpret_cast(&file_magic_number), sizeof(uint32_t))) { + if (file_magic_number == colvars_magic_number) { + binary_state_file = true; + } + input_is->seekg(0, std::ios::beg); + } } + + if (binary_state_file) { + cvm::log("Loading state from binary file \"" + restart_in_name + "\".\n"); + // TODO integrate istream.read() into memory_stream to avoid copying + auto *buf = new unsigned char[file_size]; + if (input_is->read(reinterpret_cast(buf), file_size)) { + cvm::memory_stream mem_is(file_size, buf); + if (!read_state(mem_is)) { + input_is->setstate(std::ios::failbit); + cvm::error("Error: cannot interpret contents of binary file \"" + restart_in_name + + "\".\n", + COLVARS_INPUT_ERROR); + } + } else { + cvm::error("Error: cannot read from binary file \"" + restart_in_name + "\".\n", + COLVARS_INPUT_ERROR); + } + delete[] buf; + } else { + cvm::log("Loading state from text file \"" + restart_in_name + "\".\n"); + read_state(*input_is); + } + cvm::log(cvm::line_marker); + + // Now that an explicit state file was read, we shall ignore any other restart info + if (proxy->input_stream_exists("input state string")) { + proxy->delete_input_stream("input state string"); + } + input_state_buffer_.clear(); + + proxy->delete_input_stream(restart_in_name); } - return COLVARS_OK; + if (proxy->input_stream_exists("input state string")) { + + if (!input_state_buffer_.empty()) { + return cvm::error("Error: formatted/text and unformatted/binary input state buffers are " + "defined at the same time.\n", + COLVARS_BUG_ERROR); + } + + cvm::log(cvm::line_marker); + cvm::log("Loading state from formatted string.\n"); + read_state(proxy->input_stream("input state string")); + cvm::log(cvm::line_marker); + + proxy->delete_input_stream("input state string"); + } + + if (!input_state_buffer_.empty()) { + cvm::log(cvm::line_marker); + cvm::log("Loading state from unformatted memory.\n"); + cvm::memory_stream ms(input_state_buffer_.size(), input_state_buffer_.data()); + read_state(ms); + cvm::log(cvm::line_marker); + + input_state_buffer_.clear(); + } + + default_input_state_file_.clear(); + + return get_error(); } @@ -1344,36 +1471,39 @@ int colvarmodule::setup_output() std::string(proxy->restart_output_prefix()+".colvars.state") : std::string(""); + std::string const state_file_format(binary_restart ? " (binary format)" : ""); + if (restart_out_name.size()) { - cvm::log("The restart output state file will be \""+ + cvm::log("The restart output state file" + state_file_format + " will be \""+ restart_out_name+"\".\n"); } - output_prefix() = proxy->output_prefix(); - if (output_prefix().size()) { - cvm::log("The final output state file will be \""+ - (output_prefix().size() ? - std::string(output_prefix()+".colvars.state") : - std::string("colvars.state"))+"\".\n"); - // cvm::log (cvm::line_marker); + if (output_prefix() != proxy->output_prefix()) { + output_prefix() = proxy->output_prefix(); + if (output_prefix().size()) { + cvm::log("The final output state file will be \"" + + (output_prefix().size() ? std::string(output_prefix() + ".colvars.state") + : std::string("colvars.state")) + + "\".\n"); + } + + if (proxy->output_stream_exists(cv_traj_name)) { + // Close old file + proxy->close_output_stream(cv_traj_name); + cv_traj_write_labels = true; + } + + cv_traj_name = + (output_prefix().size() ? std::string(output_prefix() + ".colvars.traj") : std::string("")); + + for (std::vector::iterator bi = biases.begin(); + bi != biases.end(); + bi++) { + error_code |= (*bi)->setup_output(); + } } - cv_traj_name = - (output_prefix().size() ? - std::string(output_prefix()+".colvars.traj") : - std::string("")); - - for (std::vector::iterator bi = biases.begin(); - bi != biases.end(); - bi++) { - error_code |= (*bi)->setup_output(); - } - - if (error_code != COLVARS_OK || cvm::get_error()) { - set_error_bits(COLVARS_FILE_ERROR); - } - - return cvm::get_error(); + return error_code; } @@ -1390,8 +1520,7 @@ std::string colvarmodule::state_file_prefix(char const *filename) } - -std::istream & colvarmodule::read_restart(std::istream &is) +template IST & colvarmodule::read_state_template_(IST &is) { bool warn_total_forces = false; @@ -1417,8 +1546,11 @@ std::istream & colvarmodule::read_restart(std::istream &is) } if (restart_version() != version()) { - cvm::log("This state file was generated with version "+ - restart_version()+"\n"); + cvm::log("This state file was generated with version " + restart_version() + "\n"); + if (std::is_same::value) { + cvm::log("Warning: compatibility between differetn Colvars versions is not " + "guaranteed for unformatted (binary) state files.\n"); + } } if (restart_version_number() < 20160810) { @@ -1453,35 +1585,73 @@ std::istream & colvarmodule::read_restart(std::istream &is) } +std::istream & colvarmodule::read_state(std::istream &is) +{ + return read_state_template_(is); +} + + +cvm::memory_stream &colvarmodule::read_state(cvm::memory_stream &is) +{ + uint32_t file_magic_number = 0; + if (!(is >> file_magic_number)) { + return is; + } + if (file_magic_number == colvars_magic_number) { + return read_state_template_(is); + } else { + is.setstate(std::ios::failbit); + cvm::error("Error: magic number of binary file (" + + cvm::to_str(static_cast(file_magic_number)) + + ") does not match the expected magic number for a Colvars state file (" + + cvm::to_str(static_cast(colvars_magic_number)) + ").\n", + COLVARS_INPUT_ERROR); + } + return is; +} + + +int colvarmodule::set_input_state_buffer(size_t n, unsigned char *buf) +{ + input_state_buffer_.clear(); + std::copy(buf, buf + n, std::back_inserter(input_state_buffer_)); + return COLVARS_OK; +} + + +int colvarmodule::set_input_state_buffer(std::vector &buf) +{ + input_state_buffer_ = std::move(buf); + return COLVARS_OK; +} + std::istream & colvarmodule::read_objects_state(std::istream &is) { - std::streampos pos = 0; + auto pos = is.tellg(); std::string word; - while (is.good()) { + while (is) { pos = is.tellg(); - word.clear(); - is >> word; - if (word.size()) { + if (is >> word) { - is.seekg(pos, std::ios::beg); + is.seekg(pos); if (word == "colvar") { cvm::increase_depth(); - for (std::vector::iterator cvi = colvars.begin(); - cvi != colvars.end(); - cvi++) { - if ( !((*cvi)->read_state(is)) ) { + for (std::vector::iterator cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + if (!((*cvi)->read_state(is))) { // Here an error signals that the variable is a match, but the // state is corrupt; otherwise, the variable rewinds is silently - cvm::error("Error: in reading restart configuration for " - "collective variable \""+(*cvi)->name+"\".\n", + cvm::error("Error: in reading state for collective variable \"" + + (*cvi)->name + "\" at position " + cvm::to_str(is.tellg()) + + " in stream.\n", COLVARS_INPUT_ERROR); } - if (is.tellg() > pos) break; // found it + if (is.tellg() > pos) + break; // found it } cvm::decrease_depth(); @@ -1498,11 +1668,12 @@ std::istream & colvarmodule::read_objects_state(std::istream &is) } if (!((*bi)->read_state(is))) { // Same as above, an error means a match but the state is incorrect - cvm::error("Error: in reading restart configuration for bias \""+ - (*bi)->name+"\".\n", + cvm::error("Error: in reading state for bias \"" + (*bi)->name + "\" at position " + + cvm::to_str(is.tellg()) + " in stream.\n", COLVARS_INPUT_ERROR); } - if (is.tellg() > pos) break; // found it + if (is.tellg() > pos) + break; // found it } cvm::decrease_depth(); } @@ -1521,6 +1692,25 @@ std::istream & colvarmodule::read_objects_state(std::istream &is) } +cvm::memory_stream &colvarmodule::read_objects_state(cvm::memory_stream &is) +{ + // An unformatted stream must match the objects' exact configuration + cvm::increase_depth(); + for (std::vector::iterator cvi = colvars.begin(); cvi != colvars.end(); cvi++) { + if (!(*cvi)->read_state(is)) { + return is; + } + } + for (std::vector::iterator bi = biases.begin(); bi != biases.end(); bi++) { + if (!(*bi)->read_state(is)) { + return is; + } + } + cvm::decrease_depth(); + return is; +} + + int colvarmodule::print_total_forces_errning(bool warn_total_forces) { if (warn_total_forces) { @@ -1643,18 +1833,24 @@ int colvarmodule::read_traj(char const *traj_filename, } -std::ostream & colvarmodule::write_restart(std::ostream &os) +template OST &colvarmodule::write_state_template_(OST &os) { - os.setf(std::ios::scientific, std::ios::floatfield); - os << "configuration {\n" - << " step " << std::setw(it_width) - << it << "\n" - << " dt " << dt() << "\n" - << " version " << std::string(COLVARS_VERSION) << "\n"; + bool const formatted = !std::is_same::value; + + std::ostringstream oss; + oss.setf(std::ios::scientific, std::ios::floatfield); + oss << " step " << std::setw(it_width) + << it << "\n" + << " dt " << dt() << "\n" + << " version " << std::string(COLVARS_VERSION) << "\n"; if (proxy->units.size() > 0) { - os << " units " << proxy->units << "\n"; + oss << " units " << proxy->units << "\n"; } - os << "}\n\n"; + + os << std::string("configuration"); + if (formatted) os << " {\n"; + os << oss.str(); + if (formatted) os << "}\n\n"; int error_code = COLVARS_OK; @@ -1681,7 +1877,32 @@ std::ostream & colvarmodule::write_restart(std::ostream &os) } -std::ostream & colvarmodule::write_traj_label(std::ostream &os) +std::ostream &colvarmodule::write_state(std::ostream &os) +{ + return write_state_template_(os); +} + + +cvm::memory_stream &colvarmodule::write_state(cvm::memory_stream &os) +{ + if (os << colvars_magic_number) { + write_state_template_(os); + } + return os; +} + + +int colvarmodule::write_state_buffer(std::vector &buffer) +{ + cvm::memory_stream os(buffer); + if (os << colvars_magic_number) { + write_state_template_(os); + } + return os ? COLVARS_OK : COLVARS_ERROR; +} + + +std::ostream &colvarmodule::write_traj_label(std::ostream &os) { os.setf(std::ios::scientific, std::ios::floatfield); @@ -1765,7 +1986,7 @@ size_t & colvarmodule::depth() { // NOTE: do not call log() or error() here, to avoid recursion colvarmodule *cv = cvm::main(); - if (proxy->smp_enabled() == COLVARS_OK) { + if (proxy->check_smp_enabled() == COLVARS_OK) { int const nt = proxy->smp_num_threads(); if (int(cv->depth_v.size()) != nt) { proxy->smp_lock(); @@ -1810,7 +2031,7 @@ void colvarmodule::clear_error() int colvarmodule::error(std::string const &message, int code) { - set_error_bits(code); + set_error_bits(code >= 0 ? code : COLVARS_ERROR); std::string const trailing_newline = (message.size() > 0) ? (message[message.size()-1] == '\n' ? "" : "\n") : ""; @@ -1930,15 +2151,6 @@ int colvarmodule::reset_index_groups() } -int cvm::load_atoms(char const *file_name, - cvm::atom_group &atoms, - std::string const &pdb_field, - double pdb_field_value) -{ - return proxy->load_atoms(file_name, atoms, pdb_field, pdb_field_value); -} - - int cvm::load_coords(char const *file_name, std::vector *pos, cvm::atom_group *atoms, @@ -1953,7 +2165,7 @@ int cvm::load_coords(char const *file_name, atoms->create_sorted_ids(); - std::vector sorted_pos(atoms->size(), cvm::rvector(0.0)); + std::vector sorted_pos(atoms->size(), cvm::rvector(0.0)); // Differentiate between PDB and XYZ files if (colvarparse::to_lower_cppstr(ext) == std::string(".xyz")) { @@ -1965,11 +2177,12 @@ int cvm::load_coords(char const *file_name, error_code |= cvm::main()->load_coords_xyz(file_name, &sorted_pos, atoms); } else { // Otherwise, call proxy function for PDB - error_code |= proxy->load_coords(file_name, - sorted_pos, atoms->sorted_ids(), - pdb_field, pdb_field_value); + error_code |= proxy->load_coords_pdb(file_name, sorted_pos, atoms->sorted_ids(), pdb_field, + pdb_field_value); } + if (error_code != COLVARS_OK) return error_code; + std::vector const &map = atoms->sorted_ids_map(); for (size_t i = 0; i < atoms->size(); i++) { (*pos)[map[i]] = sorted_pos[i]; @@ -1985,7 +2198,7 @@ int cvm::load_coords_xyz(char const *filename, bool keep_open) { std::istream &xyz_is = proxy->input_stream(filename, "XYZ file"); - unsigned int natoms; + size_t natoms; char symbol[256]; std::string line; cvm::real x = 0.0, y = 0.0, z = 0.0; @@ -2009,12 +2222,19 @@ int cvm::load_coords_xyz(char const *filename, cvm::getline(xyz_is, line); xyz_is.width(255); } else { + proxy->close_input_stream(filename); return cvm::error(error_msg, COLVARS_INPUT_ERROR); } + if (pos->size() > natoms) { + proxy->close_input_stream(filename); + return cvm::error("File \"" + std::string(filename) + "\" contains fewer atoms (" + cvm::to_str(natoms) + + ") than expected (" + cvm::to_str(pos->size()) + ").", COLVARS_INPUT_ERROR); + } + std::vector::iterator pos_i = pos->begin(); size_t xyz_natoms = 0; - if (pos->size() != natoms) { // Use specified indices + if (pos->size() < natoms) { // Use specified indices int next = 0; // indices are zero-based if (!atoms) { // In the other branch of this test, reading all positions from the file, @@ -2022,6 +2242,13 @@ int cvm::load_coords_xyz(char const *filename, return cvm::error("Trying to read partial positions with invalid atom group pointer", COLVARS_BUG_ERROR); } + + if (static_cast(atoms->sorted_ids().back()) > natoms) { + proxy->close_input_stream(filename); + return cvm::error("File \"" + std::string(filename) + "\" contains fewer atoms (" + cvm::to_str(natoms) + + ") than expected (" + cvm::to_str(atoms->sorted_ids().back()) + ").", COLVARS_INPUT_ERROR); + } + std::vector::const_iterator index = atoms->sorted_ids().begin(); for ( ; pos_i != pos->end() ; pos_i++, index++) { @@ -2038,6 +2265,7 @@ int cvm::load_coords_xyz(char const *filename, (*pos_i)[2] = proxy->angstrom_to_internal(z); xyz_natoms++; } else { + proxy->close_input_stream(filename); return cvm::error(error_msg, COLVARS_INPUT_ERROR); } } @@ -2053,12 +2281,14 @@ int cvm::load_coords_xyz(char const *filename, (*pos_i)[2] = proxy->angstrom_to_internal(z); xyz_natoms++; } else { + proxy->close_input_stream(filename); return cvm::error(error_msg, COLVARS_INPUT_ERROR); } } } if (xyz_natoms != pos->size()) { + proxy->close_input_stream(filename); return cvm::error("Error: The number of positions read from file \""+ std::string(filename)+"\" does not match the number of "+ "positions required: "+cvm::to_str(xyz_natoms)+" vs. "+ diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index 236d432a95..fa84b1ad75 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -10,7 +10,7 @@ #ifndef COLVARMODULE_H #define COLVARMODULE_H -#include +#include #include "colvars_version.h" @@ -19,9 +19,11 @@ #endif /*! \mainpage Main page -This is the Developer's documentation for the Collective Variables Module. +This is the Developer's documentation for the Collective Variables module (Colvars). You can browse the class hierarchy or the list of source files. + +Please note that this documentation is only supported for the master branch, and its features may differ from those in a given release of a simulation package. */ /// \file colvarmodule.h @@ -33,26 +35,15 @@ You can browse the class hierarchy or the list of source files. /// shared between all object instances) to be accessed from other /// objects. -#define COLVARS_OK 0 -#define COLVARS_ERROR 1 -#define COLVARS_NOT_IMPLEMENTED (1<<1) -#define COLVARS_INPUT_ERROR (1<<2) // out of bounds or inconsistent input -#define COLVARS_BUG_ERROR (1<<3) // Inconsistent state indicating bug -#define COLVARS_FILE_ERROR (1<<4) -#define COLVARS_MEMORY_ERROR (1<<5) -#define COLVARS_NO_SUCH_FRAME (1<<6) // Cannot load the requested frame - -#include +#include +#include #include #include -#include -#include class colvarparse; class colvar; class colvarbias; class colvarproxy; -class colvarscript; class colvarvalue; @@ -67,14 +58,6 @@ class colvarvalue; /// child objects class colvarmodule { -private: - - /// Impossible to initialize the main object without arguments - colvarmodule(); - - /// Integer representing the version string (allows comparisons) - int version_int; - public: /// Get the version string (YYYY-MM-DD format) @@ -89,9 +72,21 @@ public: return version_int; } - friend class colvarproxy; - // TODO colvarscript should be unaware of colvarmodule's internals - friend class colvarscript; + /// Get the patch version number (non-zero in patch releases of other packages) + int patch_version_number() const + { + return patch_version_int; + } + +private: + + /// Integer representing the version string (allows comparisons) + int version_int = 0; + + /// Patch version number (non-zero in patch releases of other packages) + int patch_version_int = 0; + +public: /// Use a 64-bit integer to store the step number typedef long long step_number; @@ -190,7 +185,9 @@ public: template class matrix2d; class quaternion; class rotation; + class usage; + class memory_stream; /// Residue identifier typedef int residue_id; @@ -205,8 +202,6 @@ public: // allow these classes to access protected data class atom; class atom_group; - friend class atom; - friend class atom_group; typedef std::vector::iterator atom_iter; typedef std::vector::const_iterator atom_const_iter; @@ -247,6 +242,8 @@ public: return it; } + bool binary_restart; + /// \brief Finite difference step size (if there is no dynamics, or /// if gradients need to be tested independently from the size of /// dt) @@ -342,9 +339,19 @@ public: /// \param Pointer to instance of the proxy class (communicate with engine) colvarmodule(colvarproxy *proxy); +private: + + /// Cannot initialize the main object without a proxy + colvarmodule(); + +public: + /// Destructor ~colvarmodule(); + /// Set the initial step number (it is 0 otherwise); may be overridden when reading a state + void set_initial_step(step_number it); + /// Actual function called by the destructor int reset(); @@ -449,17 +456,52 @@ public: /// (Re)initialize the output trajectory and state file (does not write it yet) int setup_output(); - /// Read a restart file - std::istream & read_restart(std::istream &is); +private: + + template IST & read_state_template_(IST &is); + + /// Default input state file; if given, it is read unless the MD engine provides it + std::string default_input_state_file_; + + /// Internal state buffer, to be read as an unformatted stream + std::vector input_state_buffer_; + +public: + + /// Read all objects' state fron a formatted (text) stream + std::istream & read_state(std::istream &is); + + /// Read all objects' state fron an unformatted (binary) stream + memory_stream & read_state(memory_stream &is); + + /// Set an internal state buffer, to be read later as an unformatted stream when ready + int set_input_state_buffer(size_t n, unsigned char *buf); + + /// Same as set_input_state_buffer() for C array, but uses std::move + int set_input_state_buffer(std::vector &buf); /// Read the states of individual objects; allows for changes std::istream & read_objects_state(std::istream &is); + /// Read the states of individual objects; allows for changes + memory_stream & read_objects_state(memory_stream &is); + /// If needed (old restart file), print the warning that cannot be ignored int print_total_forces_errning(bool warn_total_forces); - /// Write the output restart file - std::ostream & write_restart(std::ostream &os); +private: + template OST &write_state_template_(OST &os); + +public: + + /// Write the state of the module to a formatted (text) file + std::ostream & write_state(std::ostream &os); + + /// Write the state of the module to an unformatted (binary) file + memory_stream & write_state(memory_stream &os); + + /// Write the state of the module to an array of bytes (wrapped as a memory_stream object) + int write_state_buffer(std::vector &buffer); /// Strips .colvars.state from filename and checks that it is not empty static std::string state_file_prefix(char const *filename); @@ -650,7 +692,7 @@ public: static void log(std::string const &message, int min_log_level = 10); /// Print a message to the main log and set global error code - static int error(std::string const &message, int code = COLVARS_ERROR); + static int error(std::string const &message, int code = -1); private: @@ -715,17 +757,6 @@ public: /// Clear the index groups loaded so far int reset_index_groups(); - /// \brief Select atom IDs from a file (usually PDB) \param filename name of - /// the file \param atoms array into which atoms read from "filename" will be - /// appended \param pdb_field (optional) if the file is a PDB and this - /// string is non-empty, select atoms for which this field is non-zero - /// \param pdb_field_value (optional) if non-zero, select only atoms whose - /// pdb_field equals this - static int load_atoms(char const *filename, - atom_group &atoms, - std::string const &pdb_field, - double pdb_field_value = 0.0); - /// \brief Load coordinates for a group of atoms from a file (PDB or XYZ); /// if "pos" is already allocated, the number of its elements must match the /// number of entries in "filename" \param filename name of the file \param @@ -755,7 +786,7 @@ public: std::string restart_out_name; /// Pseudo-random number with Gaussian distribution - static real rand_gaussian(void); + static real rand_gaussian(); protected: @@ -838,9 +869,20 @@ public: typedef colvarmodule cvm; - std::ostream & operator << (std::ostream &os, cvm::rvector const &v); std::istream & operator >> (std::istream &is, cvm::rvector &v); +namespace { + constexpr int32_t COLVARS_OK = 0; + constexpr int32_t COLVARS_ERROR = 1; + constexpr int32_t COLVARS_NOT_IMPLEMENTED = (1<<1); + constexpr int32_t COLVARS_INPUT_ERROR = (1<<2); // out of bounds or inconsistent input + constexpr int32_t COLVARS_BUG_ERROR = (1<<3); // Inconsistent state indicating bug + constexpr int32_t COLVARS_FILE_ERROR = (1<<4); + constexpr int32_t COLVARS_MEMORY_ERROR = (1<<5); + constexpr int32_t COLVARS_NO_SUCH_FRAME = (1<<6); // Cannot load the requested frame +} + + #endif diff --git a/lib/colvars/colvarmodule_refs.h b/lib/colvars/colvarmodule_refs.h index c3fccf297c..2e9615e3b4 100644 --- a/lib/colvars/colvarmodule_refs.h +++ b/lib/colvars/colvarmodule_refs.h @@ -14,6 +14,22 @@ " url = {https://doi.org/10.1016/j.softx.2015.06.001}\n" "}\n"; + paper_count_[std::string("BouRabee2010")] = 0; + paper_url_[std::string("BouRabee2010")] = "https://doi.org/10.1137/090758842"; + paper_bibtex_[std::string("BouRabee2010")] = + "\n" + "@article{BouRabee2010,\n" + " doi = {10.1137/090758842},\n" + " url = {https://doi.org/10.1137/090758842},\n" + " year = {2010},\n" + " volume = {48},\n" + " number = {1},\n" + " pages = {278--297},\n" + " author = {Nawaf Bou-Rabee and Houman Owhadi},\n" + " title = {Long-Run Accuracy of Variational Integrators in the Stochastic Context},\n" + " journal = {{SIAM} Journal on Numerical Analysis}\n" + "}\n"; + paper_count_[std::string("Chen2021")] = 0; paper_url_[std::string("Chen2021")] = "https://doi.org/10.1021/acs.jctc.1c00103"; paper_bibtex_[std::string("Chen2021")] = @@ -182,6 +198,19 @@ " url = {https://doi.org/10.1021/ct9004432}\n" "}\n"; + paper_count_[std::string("Henin2021")] = 0; + paper_url_[std::string("Henin2021")] = "https://doi.org/10.1021/acs.jctc.1c00593"; + paper_bibtex_[std::string("Henin2021")] = + "\n" + "@Article{Henin2021,\n" + " author = {H\\'enin, J.},\n" + " journal = {J. Chem. Theory Comput.},\n" + " title = {Fast and accurate multidimensional free energy integration},\n" + " year = {2021},\n" + " doi = {10.1021/acs.jctc.1c00593},\n" + " url = {https://doi.org/10.1021/acs.jctc.1c00593},\n" + "}\n"; + paper_count_[std::string("Humphrey1996")] = 0; paper_url_[std::string("Humphrey1996")] = "https://doi.org/10.1016/0263-7855(96)00018-5"; paper_bibtex_[std::string("Humphrey1996")] = @@ -215,19 +244,6 @@ " url = {https://doi.org/10.1021/acs.jpcb.6b10055}\n" "}\n"; - paper_count_[std::string("Henin2021")] = 0; - paper_url_[std::string("Henin2021")] = "https://doi.org/10.1021/acs.jctc.1c00593"; - paper_bibtex_[std::string("Henin2021")] = - "\n" - "@Article{Henin2021,\n" - " author = {H\\'enin, J.},\n" - " journal = {J. Chem. Theory Comput.},\n" - " title = {Fast and accurate multidimensional free energy integration},\n" - " year = {2021},\n" - " doi = {10.1021/acs.jctc.1c00593},\n" - " url = {https://doi.org/10.1021/acs.jctc.1c00593},\n" - "}\n"; - paper_count_[std::string("Marinelli2015")] = 0; paper_url_[std::string("Marinelli2015")] = "https://doi.org/10.1016/j.bpj.2015.05.024"; paper_bibtex_[std::string("Marinelli2015")] = @@ -335,6 +351,9 @@ feature_count_[std::string("GROMACS engine")] = 0; feature_paper_map_[std::string("GROMACS engine")] = "Abraham2015"; + feature_count_[std::string("BAOA integrator")] = 0; + feature_paper_map_[std::string("BAOA integrator")] = "BouRabee2010"; + feature_count_[std::string("reweightaMD colvar bias implementation (NAMD)")] = 0; feature_paper_map_[std::string("reweightaMD colvar bias implementation (NAMD)")] = "Chen2021"; @@ -422,14 +441,14 @@ feature_count_[std::string("orientationAngle colvar component (derived from orientation)")] = 0; feature_paper_map_[std::string("orientationAngle colvar component (derived from orientation)")] = "Fiorin2013"; - feature_count_[std::string("orientationProj colvar component (derived from orientation)")] = 0; - feature_paper_map_[std::string("orientationProj colvar component (derived from orientation)")] = "Fiorin2013"; + feature_count_[std::string("orientationProj colvar component (derived from orientationAngle)")] = 0; + feature_paper_map_[std::string("orientationProj colvar component (derived from orientationAngle)")] = "Fiorin2013"; - feature_count_[std::string("spinAngle colvar component (derived from orientation)")] = 0; - feature_paper_map_[std::string("spinAngle colvar component (derived from orientation)")] = "Fiorin2013"; + feature_count_[std::string("spinAngle colvar component (derived from tilt)")] = 0; + feature_paper_map_[std::string("spinAngle colvar component (derived from tilt)")] = "Fiorin2013"; - feature_count_[std::string("tilt colvar component (derived from orientation)")] = 0; - feature_paper_map_[std::string("tilt colvar component (derived from orientation)")] = "Fiorin2013"; + feature_count_[std::string("tilt colvar component (derived from orientationProj)")] = 0; + feature_paper_map_[std::string("tilt colvar component (derived from orientationProj)")] = "Fiorin2013"; feature_count_[std::string("alpha colvar component")] = 0; feature_paper_map_[std::string("alpha colvar component")] = "Fiorin2013"; @@ -479,14 +498,14 @@ feature_count_[std::string("polarPhi colvar component")] = 0; feature_paper_map_[std::string("polarPhi colvar component")] = "Fu2017"; - feature_count_[std::string("eulerPhi colvar component (derived from orientation)")] = 0; - feature_paper_map_[std::string("eulerPhi colvar component (derived from orientation)")] = "Fu2017"; + feature_count_[std::string("eulerPhi colvar component (derived from orientation_angle)")] = 0; + feature_paper_map_[std::string("eulerPhi colvar component (derived from orientation_angle)")] = "Fu2017"; - feature_count_[std::string("eulerTheta colvar component (derived from orientation)")] = 0; - feature_paper_map_[std::string("eulerTheta colvar component (derived from orientation)")] = "Fu2017"; + feature_count_[std::string("eulerTheta colvar component (derived from orientation_angle)")] = 0; + feature_paper_map_[std::string("eulerTheta colvar component (derived from orientation_angle)")] = "Fu2017"; - feature_count_[std::string("eulerPsi colvar component (derived from orientation)")] = 0; - feature_paper_map_[std::string("eulerPsi colvar component (derived from orientation)")] = "Fu2017"; + feature_count_[std::string("eulerPsi colvar component (derived from orientation_angle)")] = 0; + feature_paper_map_[std::string("eulerPsi colvar component (derived from orientation_angle)")] = "Fu2017"; feature_count_[std::string("dipoleAngle colvar component")] = 0; feature_paper_map_[std::string("dipoleAngle colvar component")] = "Garate2019"; @@ -500,6 +519,9 @@ feature_count_[std::string("Internal-forces free energy estimator")] = 0; feature_paper_map_[std::string("Internal-forces free energy estimator")] = "Henin2010"; + feature_count_[std::string("Poisson integration of 2D/3D free energy surfaces")] = 0; + feature_paper_map_[std::string("Poisson integration of 2D/3D free energy surfaces")] = "Henin2021"; + feature_count_[std::string("VMD engine")] = 0; feature_paper_map_[std::string("VMD engine")] = "Humphrey1996"; @@ -509,9 +531,6 @@ feature_count_[std::string("CZAR eABF estimator")] = 0; feature_paper_map_[std::string("CZAR eABF estimator")] = "Lesage2017"; - feature_count_[std::string("Poisson integration of 2D/3D free energy surfaces")] = 0; - feature_paper_map_[std::string("Poisson integration of 2D/3D free energy surfaces")] = "Henin2021"; - feature_count_[std::string("Ensemble-biased metadynamics (ebMetaD)")] = 0; feature_paper_map_[std::string("Ensemble-biased metadynamics (ebMetaD)")] = "Marinelli2015"; @@ -539,9 +558,6 @@ feature_count_[std::string("Colvars-GROMACS interface")] = 0; feature_paper_map_[std::string("Colvars-GROMACS interface")] = "n/a"; - feature_count_[std::string("Colvars Dashboard (Colvars-VMD graphical user interface)")] = 0; - feature_paper_map_[std::string("Colvars Dashboard (Colvars-VMD graphical user interface)")] = "n/a"; - feature_count_[std::string("gspath colvar component")] = 0; feature_paper_map_[std::string("gspath colvar component")] = "n/a"; @@ -571,3 +587,6 @@ feature_count_[std::string("Scripted functions (Tcl)")] = 0; feature_paper_map_[std::string("Scripted functions (Tcl)")] = "n/a"; + + feature_count_[std::string("ABMD bias")] = 0; + feature_paper_map_[std::string("ABMD bias")] = "n/a"; diff --git a/lib/colvars/colvarparse.cpp b/lib/colvars/colvarparse.cpp index 350ec1b56b..76b5c694c1 100644 --- a/lib/colvars/colvarparse.cpp +++ b/lib/colvars/colvarparse.cpp @@ -8,12 +8,12 @@ // Colvars repository at GitHub. #include -#include #include #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" +#include "colvars_memstream.h" // space & tab @@ -100,7 +100,7 @@ bool colvarparse::get_key_string_multi_value(std::string const &conf, char const *key, std::vector& data) { bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; + size_t save_pos = 0; data.clear(); @@ -110,7 +110,6 @@ bool colvarparse::get_key_string_multi_value(std::string const &conf, if (b_found) { if (!b_found_any) b_found_any = true; - found_count++; data.push_back(data_this); } } while (b_found); @@ -786,14 +785,12 @@ bool colvarparse::key_lookup(std::string const &conf, if (line[brace] == '{') brace_count++; if (line[brace] == '}') brace_count--; if (brace_count == 0) { - data_end = brace+1; break; } brace = line.find_first_of("{}", brace+1); } if (brace_count == 0) { - data_end = brace+1; break; } @@ -869,55 +866,107 @@ colvarparse::read_block::~read_block() std::istream & operator>> (std::istream &is, colvarparse::read_block const &rb) { - std::streampos start_pos = is.tellg(); - std::string read_key, next; + auto start_pos = is.tellg(); - if ( !(is >> read_key) || !(read_key == rb.key) || - !(is >> next) ) { - // the requested keyword has not been found, or it is not possible - // to read data after it + std::string read_key; + if ( !(is >> read_key) || !(read_key == rb.key) ) { + // the requested keyword has not been found is.clear(); - is.seekg(start_pos, std::ios::beg); + is.seekg(start_pos); is.setstate(std::ios::failbit); return is; } - if (next != "{") { - if (rb.data) { - *(rb.data) = next; + std::string next; + if (is >> next) { + if (next == "{") { + // Parse a formatted brace-delimited block + rb.read_block_contents(is); + } else { + if (rb.data) { + *(rb.data) = next; + } } - return is; + } else { + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::badbit); } - size_t brace_count = 1; + return is; +} + + +std::istream &colvarparse::read_block::read_block_contents(std::istream &is, + bool block_only) const +{ + int brace_count = block_only ? 0 : 1; + auto const start_pos = is.tellg(); std::string line; while (colvarparse::getline_nocomments(is, line)) { size_t br = 0, br_old = 0; - while ( (br = line.find_first_of("{}", br)) != std::string::npos) { - if (line[br] == '{') brace_count++; - if (line[br] == '}') brace_count--; + while ((br = line.find_first_of("{}", br)) != std::string::npos) { + if (line[br] == '{') + brace_count++; + if (line[br] == '}') + brace_count--; br_old = br; br++; } - if (brace_count) { - if (rb.data) { - (rb.data)->append(line + "\n"); + if (brace_count || block_only) { + // Add whole line if (1) brace are unmatched or (2) we're reading the whole stream anyway + if (data) { + data->append(line + "\n"); } - } - else { - if (rb.data) { - (rb.data)->append(line, 0, br_old); + } else { + // Not reading whole block and braces are matched; add until before the last brace + if (data) { + data->append(line.substr(0, br_old) + "\n"); } break; } } - if (brace_count) { - // end-of-file reached - // restore initial position - is.clear(); - is.seekg(start_pos, std::ios::beg); - is.setstate(std::ios::failbit); + + if (block_only) { + if (is.rdstate() & std::ios::eofbit) { + // Clear EOF errors if we were meant to read the whole block + is.clear(); + } + } else { + if (brace_count) { + // Could not match braces, restore initial position and set fail bit + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + } } + + return is; +} + + +cvm::memory_stream &operator>>(cvm::memory_stream &is, colvarparse::read_block const &rb) +{ + auto const start_pos = is.tellg(); + + std::string read_key; + if ( !(is >> read_key) || !(read_key == rb.key) ) { + // the requested keyword has not been found + is.clear(); + is.seekg(start_pos); + is.setstate(std::ios::failbit); + return is; + } + + std::string content; + if (is >> content) { + std::istringstream iss(content); + if (!rb.read_block_contents(iss, true)) { + is.seekg(start_pos); + is.setstate(std::ios::failbit); + } + } + return is; } diff --git a/lib/colvars/colvarparse.h b/lib/colvars/colvarparse.h index d2286de6cf..105a0857a4 100644 --- a/lib/colvars/colvarparse.h +++ b/lib/colvars/colvarparse.h @@ -11,6 +11,7 @@ #define COLVARPARSE_H #include +#include #include #include "colvarmodule.h" @@ -40,7 +41,7 @@ public: void set_string(std::string const &conf); /// Default destructor - virtual ~colvarparse(); + ~colvarparse() override; /// Get the configuration string (includes comments) inline std::string const & get_config() const @@ -109,12 +110,12 @@ public: bool get_keyval(std::string const &conf, char const *key, int &value, - int const &def_value = (int)0, + int const &def_value = 0, Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, size_t &value, - size_t const &def_value = (size_t)0, + size_t const &def_value = 0, Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, @@ -134,7 +135,7 @@ public: bool get_keyval(std::string const &conf, char const *key, cvm::real &value, - cvm::real const &def_value = (cvm::real)0.0, + cvm::real const &def_value = 0.0, Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, @@ -159,17 +160,17 @@ public: bool get_keyval(std::string const &conf, char const *key, std::vector &values, - std::vector const &def_values = std::vector(0, (int)0), + std::vector const &def_values = std::vector(0, 0), Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, std::vector &values, - std::vector const &def_values = std::vector(0, (size_t)0), + std::vector const &def_values = std::vector(0, 0), Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, std::vector &values, - std::vector const &def_values = std::vector(0, (long)0), + std::vector const &def_values = std::vector(0, 0), Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, @@ -179,7 +180,7 @@ public: bool get_keyval(std::string const &conf, char const *key, std::vector &values, - std::vector const &def_values = std::vector(0, (cvm::real)0.0), + std::vector const &def_values = std::vector(0, 0.0), Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, @@ -262,33 +263,41 @@ public: { std::string out = ""; for (size_t i = 0; i < in.size(); i++) { - out.append(1, (char) ::tolower(in[i]) ); + out.append(1, static_cast( ::tolower(in[i])) ); } return out; } - /// \brief Helper class to read a block of the type "key { ... }" - /// from a stream and store it in a string + /// Helper class to read a block "key { ... }" from a stream and store it in a string /// - /// Useful on restarts, where the file is too big to be loaded in a - /// string by key_lookup; it can only check that the keyword is - /// correct and the block is properly delimited by braces, not - /// skipping other blocks + /// Useful on restarts, where the file is too big to be loaded in a string + /// by key_lookup(); it can only check that the keyword is correct and the + /// block is properly delimited by braces, not skipping other blocks class read_block { - - /// The keyword that identifies the block - std::string const key; - - /// Where to keep the data (may be NULL) - std::string * const data; - public: - read_block(std::string const &key_in, std::string *data_in = NULL); + read_block(std::string const &key, std::string *data = nullptr); ~read_block(); + /// Read block from stream, first check that key matches, then call read_contents() friend std::istream & operator >> (std::istream &is, read_block const &rb); + + /// Read block from stream, first check that key matches, then call read_contents() + friend cvm::memory_stream & operator >> (cvm::memory_stream &is, read_block const &rb); + + private: + + /// Keyword that identifies the block + std::string const key; + + /// Where to keep the data + std::string * const data; + + /// Read the contents of a formatted block after checking that the keyword matches + /// \param[in] is Stream object + /// \param[in] block_only If true, stream is assumed to contain only the block without braces + std::istream & read_block_contents(std::istream &is, bool block_only = false) const; }; @@ -304,8 +313,8 @@ public: /// within "conf", useful when doing multiple calls bool key_lookup(std::string const &conf, char const *key, - std::string *data = NULL, - size_t *save_pos = NULL); + std::string *data = nullptr, + size_t *save_pos = nullptr); /// \brief Reads a configuration line, adds it to config_string, and returns /// the stream \param is Input stream \param line String that will hold the diff --git a/lib/colvars/colvarproxy.cpp b/lib/colvars/colvarproxy.cpp index b09ea6667c..588b7c68d8 100644 --- a/lib/colvars/colvarproxy.cpp +++ b/lib/colvars/colvarproxy.cpp @@ -13,8 +13,9 @@ #include "colvarmodule.h" #include "colvarproxy.h" +#include "colvar.h" +#include "colvarbias.h" #include "colvarscript.h" -#include "colvaratoms.h" #include "colvarmodule_utils.h" @@ -23,6 +24,7 @@ colvarproxy_atoms::colvarproxy_atoms() { atoms_rms_applied_force_ = atoms_max_applied_force_ = 0.0; atoms_max_applied_force_id_ = -1; + modified_atom_list_ = false; updated_masses_ = updated_charges_ = false; } @@ -55,6 +57,7 @@ int colvarproxy_atoms::add_atom_slot(int atom_id) atoms_positions.push_back(cvm::rvector(0.0, 0.0, 0.0)); atoms_total_forces.push_back(cvm::rvector(0.0, 0.0, 0.0)); atoms_new_colvar_forces.push_back(cvm::rvector(0.0, 0.0, 0.0)); + modified_atom_list_ = true; return (atoms_ids.size() - 1); } @@ -71,6 +74,12 @@ int colvarproxy_atoms::check_atom_id(int /* atom_number */) } +int colvarproxy_atoms::check_atom_name_selections_available() +{ + return COLVARS_NOT_IMPLEMENTED; +} + + int colvarproxy_atoms::init_atom(cvm::residue_id const & /* residue */, std::string const & /* atom_name */, std::string const & /* segment_id */) @@ -112,29 +121,6 @@ size_t colvarproxy_atoms::get_num_active_atoms() const } -int colvarproxy_atoms::load_atoms(char const * /* filename */, - cvm::atom_group & /* atoms */, - std::string const & /* pdb_field */, - double) -{ - return cvm::error("Error: loading atom identifiers from a file " - "is currently not implemented.\n", - COLVARS_NOT_IMPLEMENTED); -} - - -int colvarproxy_atoms::load_coords(char const * /* filename */, - std::vector & /* pos */, - std::vector const & /* sorted_ids */, - std::string const & /* pdb_field */, - double) -{ - return cvm::error("Error: loading atomic coordinates from a file " - "is currently not implemented.\n", - COLVARS_NOT_IMPLEMENTED); -} - - void colvarproxy_atoms::compute_rms_atoms_applied_force() { atoms_rms_applied_force_ = @@ -280,7 +266,7 @@ colvarproxy_smp::~colvarproxy_smp() } -int colvarproxy_smp::smp_enabled() +int colvarproxy_smp::check_smp_enabled() { #if defined(_OPENMP) if (b_smp_active) { @@ -299,7 +285,7 @@ int colvarproxy_smp::smp_colvars_loop() colvarmodule *cv = cvm::main(); colvarproxy *proxy = cv->proxy; #pragma omp parallel for - for (size_t i = 0; i < cv->variables_active_smp()->size(); i++) { + for (int i = 0; i < static_cast(cv->variables_active_smp()->size()); i++) { colvar *x = (*(cv->variables_active_smp()))[i]; int x_item = (*(cv->variables_active_smp_items()))[i]; if (cvm::debug()) { @@ -324,7 +310,7 @@ int colvarproxy_smp::smp_biases_loop() #pragma omp parallel { #pragma omp for - for (size_t i = 0; i < cv->biases_active()->size(); i++) { + for (int i = 0; i < static_cast(cv->biases_active()->size()); i++) { colvarbias *b = (*(cv->biases_active()))[i]; if (cvm::debug()) { cvm::log("Calculating bias \""+b->name+"\" on thread "+ @@ -351,7 +337,7 @@ int colvarproxy_smp::smp_biases_script_loop() cv->calc_scripted_forces(); } #pragma omp for - for (size_t i = 0; i < cv->biases_active()->size(); i++) { + for (int i = 0; i < static_cast(cv->biases_active()->size()); i++) { colvarbias *b = (*(cv->biases_active()))[i]; if (cvm::debug()) { cvm::log("Calculating bias \""+b->name+"\" on thread "+ @@ -484,16 +470,21 @@ colvarproxy::~colvarproxy() bool colvarproxy::io_available() { - return (smp_enabled() == COLVARS_OK && smp_thread_id() == 0) || - (smp_enabled() != COLVARS_OK); + return (check_smp_enabled() == COLVARS_OK && smp_thread_id() == 0) || + (check_smp_enabled() != COLVARS_OK); } int colvarproxy::reset() { + if (cvm::debug()) { + cvm::log("colvarproxy::reset()\n"); + } int error_code = COLVARS_OK; error_code |= colvarproxy_atoms::reset(); error_code |= colvarproxy_atom_groups::reset(); + error_code |= colvarproxy_volmaps::reset(); + total_force_requested = false; return error_code; } @@ -541,6 +532,31 @@ int colvarproxy::parse_module_config() } +int colvarproxy::load_atoms_pdb(char const * /* filename */, + cvm::atom_group & /* atoms */, + std::string const & /* pdb_field */, + double /* pdb_field_value */) +{ + return cvm::error( + "Error: loading atom indices from a PDB file is currently not implemented in " + + engine_name() + ".\n", + COLVARS_NOT_IMPLEMENTED); +} + + +int colvarproxy::load_coords_pdb(char const * /* filename */, + std::vector & /* pos */, + std::vector const & /* sorted_ids */, + std::string const & /* pdb_field */, + double /* pdb_field_value */) +{ + return cvm::error( + "Error: loading atomic coordinates from a PDB file is currently not implemented in " + + engine_name() + ".\n", + COLVARS_NOT_IMPLEMENTED); +} + + int colvarproxy::update_input() { return COLVARS_OK; @@ -591,47 +607,78 @@ void colvarproxy::print_input_atomic_data() cvm::log(cvm::line_marker); cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + "atoms_ids[size = "+cvm::to_str(atoms_ids.size())+ + "] = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atoms_refcount = "+cvm::to_str(atoms_refcount)+"\n"); + "atoms_refcount[size = "+cvm::to_str(atoms_refcount.size())+ + "] = "+cvm::to_str(atoms_refcount)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atoms_masses = "+cvm::to_str(atoms_masses)+"\n"); + "atoms_masses[size = "+cvm::to_str(atoms_masses.size())+ + "] = "+cvm::to_str(atoms_masses)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atoms_charges = "+cvm::to_str(atoms_charges)+"\n"); + "atoms_charges[size = "+cvm::to_str(atoms_charges.size())+ + "] = "+cvm::to_str(atoms_charges)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atoms_positions = "+cvm::to_str(atoms_positions, - cvm::cv_width, - cvm::cv_prec)+"\n"); + "atoms_positions[size = "+cvm::to_str(atoms_positions.size())+ + "] = "+cvm::to_str(atoms_positions, + cvm::cv_width, + cvm::cv_prec)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atoms_total_forces = "+cvm::to_str(atoms_total_forces, - cvm::cv_width, - cvm::cv_prec)+"\n"); + "atoms_total_forces[size = "+ + cvm::to_str(atoms_total_forces.size())+ + "] = "+cvm::to_str(atoms_total_forces, + cvm::cv_width, + cvm::cv_prec)+"\n"); cvm::log(cvm::line_marker); cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atom_groups_ids = "+cvm::to_str(atom_groups_ids)+"\n"); + "atom_groups_ids[size = "+cvm::to_str(atom_groups_ids.size())+ + "] = "+cvm::to_str(atom_groups_ids)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atom_groups_refcount = "+cvm::to_str(atom_groups_refcount)+"\n"); + "atom_groups_refcount[size = "+ + cvm::to_str(atom_groups_refcount.size())+ + "] = "+cvm::to_str(atom_groups_refcount)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atom_groups_masses = "+cvm::to_str(atom_groups_masses)+"\n"); + "atom_groups_masses[size = "+ + cvm::to_str(atom_groups_masses.size())+ + "] = "+cvm::to_str(atom_groups_masses)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atom_groups_charges = "+cvm::to_str(atom_groups_charges)+"\n"); + "atom_groups_charges[size = "+ + cvm::to_str(atom_groups_charges.size())+ + "] = "+cvm::to_str(atom_groups_charges)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atom_groups_coms = "+cvm::to_str(atom_groups_coms, - cvm::cv_width, - cvm::cv_prec)+"\n"); + "atom_groups_coms[size = "+ + cvm::to_str(atom_groups_coms.size())+ + "] = "+cvm::to_str(atom_groups_coms, + cvm::cv_width, + cvm::cv_prec)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "atom_groups_total_forces = "+cvm::to_str(atom_groups_total_forces, - cvm::cv_width, - cvm::cv_prec)+"\n"); + "atom_groups_total_forces[size = "+ + cvm::to_str(atom_groups_total_forces.size())+ + "] = "+cvm::to_str(atom_groups_total_forces, + cvm::cv_width, + cvm::cv_prec)+"\n"); cvm::log(cvm::line_marker); cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "volmaps_ids = "+cvm::to_str(volmaps_ids)+"\n"); + "volmaps_ids[size = "+cvm::to_str(volmaps_ids.size())+ + "] = "+cvm::to_str(volmaps_ids)+"\n"); + cvm::log("Step "+cvm::to_str(cvm::step_absolute())+", "+ - "volmaps_values = "+cvm::to_str(volmaps_values)+"\n"); + "volmaps_values[size = "+cvm::to_str(volmaps_values.size())+ + "] = "+cvm::to_str(volmaps_values)+"\n"); cvm::log(cvm::line_marker); } diff --git a/lib/colvars/colvarproxy.h b/lib/colvars/colvarproxy.h index 5733b8b66d..91db6011e9 100644 --- a/lib/colvars/colvarproxy.h +++ b/lib/colvars/colvarproxy.h @@ -12,7 +12,6 @@ #include "colvarmodule.h" #include "colvartypes.h" -#include "colvarvalue.h" #include "colvarproxy_io.h" #include "colvarproxy_system.h" #include "colvarproxy_tcl.h" @@ -56,6 +55,9 @@ public: /// corresponding atom yet virtual int check_atom_id(int atom_number); + /// Check whether it is possible to select atoms by residue number name + virtual int check_atom_name_selections_available(); + /// Select this atom for collective variables calculation, using name and /// residue number. Not all programs support this: leave this function as /// is in those cases. @@ -72,31 +74,6 @@ public: /// (costly) set the corresponding atoms_refcount to zero virtual void clear_atom(int index); - /// \brief Select atom IDs from a file (usually PDB) \param filename name of - /// the file \param atoms array to which atoms read from "filename" will be - /// appended \param pdb_field (optional) if the file is a PDB and this - /// string is non-empty, select atoms for which this field is non-zero - /// \param pdb_field_value (optional) if non-zero, select only atoms whose - /// pdb_field equals this - virtual int load_atoms(char const *filename, - cvm::atom_group &atoms, - std::string const &pdb_field, - double pdb_field_value = 0.0); - - /// \brief Load a set of coordinates from a file (usually PDB); if "pos" is - /// already allocated, the number of its elements must match the number of - /// entries in "filename" \param filename name of the file \param pos array - /// of coordinates \param sorted_ids array of sorted internal IDs, used to - /// loop through the file only once \param pdb_field (optional) if the file - /// is a PDB and this string is non-empty, select atoms for which this field - /// is non-zero \param pdb_field_value (optional) if non-zero, select only - /// atoms whose pdb_field equals this - virtual int load_coords(char const *filename, - std::vector &pos, - std::vector const &sorted_ids, - std::string const &pdb_field, - double pdb_field_value = 0.0); - /// Clear atomic data int reset(); @@ -245,6 +222,18 @@ public: return atoms_max_applied_force_id_; } + /// Whether the atom list has been modified internally + inline bool modified_atom_list() const + { + return modified_atom_list_; + } + + /// Reset the modified atom list flag + inline void reset_modified_atom_list() + { + modified_atom_list_ = false; + } + /// Record whether masses have been updated inline bool updated_masses() const { @@ -284,6 +273,9 @@ protected: /// ID of the atom with the maximum norm among all applied forces int atoms_max_applied_force_id_; + /// Whether the atom list has been modified internally + bool modified_atom_list_; + /// Whether the masses and charges have been updated from the host code bool updated_masses_, updated_charges_; @@ -466,7 +458,7 @@ public: bool b_smp_active; /// Whether threaded parallelization is available (TODO: make this a cvm::deps feature) - virtual int smp_enabled(); + virtual int check_smp_enabled(); /// Distribute calculation of colvars (and their components) across threads virtual int smp_colvars_loop(); @@ -565,9 +557,9 @@ public: -/// \brief Interface between the collective variables module and -/// the simulation or analysis program (NAMD, VMD, LAMMPS...). -/// This is the base class: each interfaced program is supported by a derived class. +/// Interface between Colvars and MD engine (GROMACS, LAMMPS, NAMD, VMD...) +/// +/// This is the base class: each engine is supported by a derived class. class colvarproxy : public colvarproxy_system, public colvarproxy_atoms, @@ -589,15 +581,20 @@ public: colvarproxy(); /// Destructor - virtual ~colvarproxy(); + ~colvarproxy() override; - virtual bool io_available() /* override */; + inline std::string const &engine_name() const + { + return engine_name_; + } + + bool io_available() override; /// Request deallocation of the module (currently only implemented by VMD) virtual int request_deletion(); /// Whether deallocation was requested - inline bool delete_requested() + inline bool delete_requested() const { return b_delete_requested; } @@ -608,6 +605,26 @@ public: /// (Re)initialize the module virtual int parse_module_config(); + /// \brief Read a selection of atom IDs from a PDB coordinate file + /// \param[in] filename name of the file + /// \param[in,out] atoms array into which atoms will be read from "filename" + /// \param[in] pdb_field if the file is a PDB and this string is non-empty, + /// select atoms for which this field is non-zero + /// \param[in] pdb_field_value if non-zero, select only atoms whose pdb_field equals this + virtual int load_atoms_pdb(char const *filename, cvm::atom_group &atoms, + std::string const &pdb_field, double pdb_field_value); + + /// \brief Load a set of coordinates from a PDB file + /// \param[in] filename name of the file + /// \param[in,out] pos array of coordinates to fill; if not empty, the number of its elements must match + /// the number of entries in "filename" + /// \param[in] sorted_ids array of sorted internal IDs, used to loop through the file only once + /// \param[in] pdb_field if non-empty, only atoms for which this field is non-zero will be processed + /// \param[in] pdb_field_value if non-zero, process only atoms whose pdb_field equals this + virtual int load_coords_pdb(char const *filename, std::vector &pos, + std::vector const &sorted_ids, std::string const &pdb_field, + double pdb_field_value); + /// (Re)initialize required member data (called after the module) virtual int setup(); @@ -703,7 +720,10 @@ protected: /// Track which features have been acknowledged during the last run size_t features_hash; -private: +protected: + + /// Name of the simulation engine that the derived proxy object supports + std::string engine_name_ = "standalone"; /// Queue of config strings or files to be fed to the module void *config_queue_; diff --git a/lib/colvars/colvarproxy_io.cpp b/lib/colvars/colvarproxy_io.cpp index 225ca40bef..4cfdfeec26 100644 --- a/lib/colvars/colvarproxy_io.cpp +++ b/lib/colvars/colvarproxy_io.cpp @@ -29,7 +29,6 @@ colvarproxy_io::colvarproxy_io() { - input_buffer_ = NULL; restart_frequency_engine = 0; input_stream_error_ = new std::istringstream(); input_stream_error_->setstate(std::ios::badbit); @@ -135,7 +134,9 @@ int colvarproxy_io::rename_file(char const *filename, char const *newfilename) int error_code = COLVARS_OK; #if defined(_WIN32) && !defined(__CYGWIN__) // On straight Windows, must remove the destination before renaming it - error_code |= remove_file(newfilename); + if (_access(newfilename, 00) == 0) { + error_code |= remove_file(newfilename); + } #endif int rename_exit_code = 0; while ((rename_exit_code = std::rename(filename, newfilename)) != 0) { @@ -151,6 +152,51 @@ int colvarproxy_io::rename_file(char const *filename, char const *newfilename) } +int colvarproxy_io::set_input_prefix(std::string const &prefix) +{ + // set input restart name and strip the extension, if present + input_prefix_str = prefix; + if (input_prefix_str.rfind(".colvars.state") != std::string::npos) { + input_prefix_str.erase(input_prefix_str.rfind(".colvars.state"), + std::string(".colvars.state").size()); + } + return COLVARS_OK; +} + + +int colvarproxy_io::set_output_prefix(std::string const &prefix) +{ + // set input restart name and strip the extension, if present + output_prefix_str = prefix; + if (output_prefix_str.rfind(".colvars.state") != std::string::npos) { + output_prefix_str.erase(output_prefix_str.rfind(".colvars.state"), + std::string(".colvars.state").size()); + } + return COLVARS_OK; +} + + +int colvarproxy_io::set_restart_output_prefix(std::string const &prefix) +{ + // set input restart name and strip the extension, if present + restart_output_prefix_str = prefix; + if (restart_output_prefix_str.rfind(".colvars.state") != std::string::npos) { + restart_output_prefix_str.erase(restart_output_prefix_str.rfind(".colvars.state"), + std::string(".colvars.state").size()); + } + return COLVARS_OK; +} + + +int colvarproxy_io::set_default_restart_frequency(int freq) +{ + // TODO check for compatibility with colvarsRestartFrequency + restart_frequency_engine = freq; + return COLVARS_OK; +} + + + std::istream &colvarproxy_io::input_stream(std::string const &input_name, std::string const description, bool error_on_fail) @@ -162,14 +208,19 @@ std::istream &colvarproxy_io::input_stream(std::string const &input_name, } if (colvarproxy_io::input_stream_exists(input_name)) { - return *(input_streams_[input_name]); + std::ifstream *ifs = + dynamic_cast(input_streams_[input_name]); + if (ifs && !ifs->is_open()) { + // This file was opened before, re-open it. Using std::ios::binary to + // work around differences in line termination conventions + // See https://github.com/Colvars/colvars/commit/8236879f7de4 + ifs->open(input_name.c_str(), std::ios::binary); + } + } else { + input_streams_[input_name] = new std::ifstream(input_name.c_str(), + std::ios::binary); } - // Using binary to work around differences in line termination conventions - // See https://github.com/Colvars/colvars/commit/8236879f7de4 - input_streams_[input_name] = new std::ifstream(input_name.c_str(), - std::ios::binary); - if (input_streams_[input_name]->fail() && error_on_fail) { cvm::error("Error: cannot open "+description+" \""+input_name+"\".\n", COLVARS_FILE_ERROR); @@ -179,6 +230,41 @@ std::istream &colvarproxy_io::input_stream(std::string const &input_name, } +std::istream & +colvarproxy_io::input_stream_from_string(std::string const &input_name, + std::string const &content, + std::string const description) +{ + if (!io_available()) { + cvm::error("Error: trying to access an input file/channel " + "from the wrong thread.\n", COLVARS_BUG_ERROR); + return *input_stream_error_; + } + + if (colvarproxy_io::input_stream_exists(input_name)) { + + std::istringstream *iss = + dynamic_cast(input_streams_[input_name]); + if (iss) { + // If there is already a stringstream, replace it + delete iss; + } else { + std::ifstream *ifs = + dynamic_cast(input_streams_[input_name]); + if (ifs) { + if (ifs->is_open()) { + ifs->close(); + } + } + } + } + + input_streams_[input_name] = new std::istringstream(content); + + return *(input_streams_[input_name]); +} + + bool colvarproxy_io::input_stream_exists(std::string const &input_name) { return (input_streams_.count(input_name) > 0); @@ -188,7 +274,38 @@ bool colvarproxy_io::input_stream_exists(std::string const &input_name) int colvarproxy_io::close_input_stream(std::string const &input_name) { if (colvarproxy_io::input_stream_exists(input_name)) { - delete input_streams_[input_name]; + std::ifstream *ifs = dynamic_cast(input_streams_[input_name]); + if (ifs) { + if (ifs->is_open()) { + ifs->close(); + } + } else { + // From a string, just rewind to the begining + std::istringstream * iss = dynamic_cast(input_streams_[input_name]); + if (iss) { + iss->clear(); + iss->seekg(0); + } + } + return COLVARS_OK; + } + return cvm::error("Error: input file/channel \""+input_name+ + "\" does not exist.\n", COLVARS_FILE_ERROR); +} + + +int colvarproxy_io::delete_input_stream(std::string const &input_name) +{ + if (colvarproxy_io::close_input_stream(input_name) == COLVARS_OK) { + std::ifstream *ifs = dynamic_cast(input_streams_[input_name]); + if (ifs) { + delete ifs; + } else { + std::istringstream * iss = dynamic_cast(input_streams_[input_name]); + if (iss) { + delete iss; + } + } input_streams_.erase(input_name); return COLVARS_OK; } @@ -199,7 +316,8 @@ int colvarproxy_io::close_input_stream(std::string const &input_name) int colvarproxy_io::close_input_streams() { - for (std::map::iterator ii = input_streams_.begin(); + for (std::map::iterator ii = input_streams_.begin(); ii != input_streams_.end(); ii++) { delete ii->second; @@ -209,6 +327,19 @@ int colvarproxy_io::close_input_streams() } +std::list colvarproxy_io::list_input_stream_names() const +{ + std::list result; + for (std::map::const_iterator ii = input_streams_.begin(); + ii != input_streams_.end(); + ii++) { + result.push_back(ii->first); + } + return result; +} + + std::ostream & colvarproxy_io::output_stream(std::string const &output_name, std::string const description) { @@ -228,7 +359,7 @@ std::ostream & colvarproxy_io::output_stream(std::string const &output_name, backup_file(output_name.c_str()); - output_streams_[output_name] = new std::ofstream(output_name.c_str()); + output_streams_[output_name] = new std::ofstream(output_name.c_str(), std::ios::binary); if (!*(output_streams_[output_name])) { cvm::error("Error: cannot write to "+description+" \""+output_name+"\".\n", COLVARS_FILE_ERROR); @@ -303,6 +434,7 @@ int colvarproxy_io::close_output_streams() osi != output_streams_.end(); osi++) { (dynamic_cast(osi->second))->close(); + delete osi->second; } output_streams_.clear(); diff --git a/lib/colvars/colvarproxy_io.h b/lib/colvars/colvarproxy_io.h index ee217362d4..726f915c97 100644 --- a/lib/colvars/colvarproxy_io.h +++ b/lib/colvars/colvarproxy_io.h @@ -10,9 +10,10 @@ #ifndef COLVARPROXY_IO_H #define COLVARPROXY_IO_H +#include +#include #include #include -#include /// Methods for data input/output @@ -66,57 +67,80 @@ public: } /// Prefix of the input state file to be read next - inline std::string & input_prefix() + inline std::string const & input_prefix() const { return input_prefix_str; } + /// Initialize input_prefix (NOTE: it will be erased after state file is read) + virtual int set_input_prefix(std::string const &prefix); + /// Default prefix to be used for all output files (final configuration) - inline std::string & output_prefix() + inline std::string const & output_prefix() const { return output_prefix_str; } + /// Set default output prefix + virtual int set_output_prefix(std::string const &prefix); + /// Prefix of the restart (checkpoint) file to be written next - inline std::string & restart_output_prefix() + inline std::string const & restart_output_prefix() const { return restart_output_prefix_str; } + /// Set default restart state file prefix + virtual int set_restart_output_prefix(std::string const &prefix); + /// Default restart frequency (as set by the simulation engine) inline int default_restart_frequency() const { return restart_frequency_engine; } - /// Buffer from which the input state information may be read - inline char const * & input_buffer() - { - return input_buffer_; - } + /// Communicate/set the restart frequency of the simulation engine + virtual int set_default_restart_frequency(int freq); + + // The input stream functions below are not virtual, because they currently + // rely on the fact that either std::ifstream or std::istringstream is used /// Returns a reference to given input stream, creating it if needed /// \param input_name File name (later only a handle) /// \param description Purpose of the file /// \param error_on_fail Raise error when failing to open (allow testing) - virtual std::istream &input_stream(std::string const &input_name, - std::string const description = "file/channel", - bool error_on_fail = true); + std::istream & input_stream(std::string const &input_name, + std::string const description = "file/channel", + bool error_on_fail = true); + + /// Returns a reference to given input stream, creating it if needed + /// \param input_name Identifier of the input stream + /// \param content Set this string as the stream's buffer + /// \param description Purpose of the stream + std::istream & input_stream_from_string(std::string const &input_name, + std::string const &content, + std::string const description = "string"); /// Check if the file/channel is open (without opening it if not) - virtual bool input_stream_exists(std::string const &input_name); + bool input_stream_exists(std::string const &input_name); /// Closes the given input stream - virtual int close_input_stream(std::string const &input_name); + int close_input_stream(std::string const &input_name); /// Closes all input streams - virtual int close_input_streams(); + int close_input_streams(); + + /// Same as close_input_stream(), but also removes the corresponding entry from memory + int delete_input_stream(std::string const &input_name); + + /// List all input streams that were opened at some point + std::list list_input_stream_names() const; /// Returns a reference to the named output file/channel (open it if needed) /// \param output_name File name or identifier /// \param description Purpose of the file virtual std::ostream &output_stream(std::string const &output_name, - std::string const description = "file/channel"); + std::string const description); /// Check if the file/channel is open (without opening it if not) virtual bool output_stream_exists(std::string const &output_name); @@ -158,9 +182,6 @@ protected: /// Object whose reference is returned when write errors occur std::ostream *output_stream_error_; - - /// Buffer from which the input state information may be read - char const *input_buffer_; }; diff --git a/lib/colvars/colvarproxy_system.cpp b/lib/colvars/colvarproxy_system.cpp index 0a2769dcc9..acab5fa4c3 100644 --- a/lib/colvars/colvarproxy_system.cpp +++ b/lib/colvars/colvarproxy_system.cpp @@ -18,6 +18,7 @@ colvarproxy_system::colvarproxy_system() { angstrom_value_ = 0.0; kcal_mol_value_ = 0.0; + timestep_ = 1.0; target_temperature_ = 0.0; boltzmann_ = 0.001987191; // Default: kcal/mol/K boundaries_type = boundaries_unsupported; @@ -46,10 +47,10 @@ int colvarproxy_system::set_target_temperature(cvm::real T) } -cvm::real colvarproxy_system::dt() +int colvarproxy_system::set_integration_timestep(cvm::real dt) { - // TODO define, document and implement a user method to set the value of this - return 1.0; + timestep_ = dt; + return COLVARS_OK; } diff --git a/lib/colvars/colvarproxy_system.h b/lib/colvars/colvarproxy_system.h index be3cd346c2..67d0938e54 100644 --- a/lib/colvars/colvarproxy_system.h +++ b/lib/colvars/colvarproxy_system.h @@ -61,8 +61,14 @@ public: /// Set the current target temperature of the simulation (K units) virtual int set_target_temperature(cvm::real T); - /// \brief Time step of the simulation (fs) - virtual cvm::real dt(); + /// Time step of the simulation (fs units) + inline double dt() const + { + return timestep_; + } + + /// Set the current integration timestep of the simulation (fs units) + virtual int set_integration_timestep(cvm::real dt); /// \brief Pseudo-random number with Gaussian distribution virtual cvm::real rand_gaussian(void); @@ -137,9 +143,12 @@ protected: /// Boltzmann constant in internal Colvars units cvm::real boltzmann_; - /// Most up to date target temperature for the system (in K) + /// Most up to date target temperature (K units); default to 0.0 if undefined cvm::real target_temperature_; + /// Current integration timestep (engine units); default to 1.0 if undefined + double timestep_; + /// \brief Value of 1 Angstrom in the internal (front-end) Colvars unit for atomic coordinates /// * defaults to 0 in the base class; derived proxy classes must set it /// * in VMD proxy, can only be changed when no variables are defined diff --git a/lib/colvars/colvarproxy_tcl.cpp b/lib/colvars/colvarproxy_tcl.cpp index 5bf97a0d98..fa06b7a3c8 100644 --- a/lib/colvars/colvarproxy_tcl.cpp +++ b/lib/colvars/colvarproxy_tcl.cpp @@ -83,7 +83,7 @@ int colvarproxy_tcl::tcl_run_file(std::string const &fileName) Tcl_Interp *const interp = get_tcl_interp(); int err = Tcl_EvalFile(interp, fileName.c_str()); if (err != TCL_OK) { - cvm::log("Error while executing Tcl script file" + fileName + ":\n"); + cvm::log("Error while executing Tcl script file \"" + fileName + "\":\n"); cvm::error(Tcl_GetStringResult(interp)); return COLVARS_ERROR; } diff --git a/lib/colvars/colvarproxy_volmaps.cpp b/lib/colvars/colvarproxy_volmaps.cpp index 6c1f11e32e..3d02d8085a 100644 --- a/lib/colvars/colvarproxy_volmaps.cpp +++ b/lib/colvars/colvarproxy_volmaps.cpp @@ -21,7 +21,7 @@ colvarproxy_volmaps::colvarproxy_volmaps() colvarproxy_volmaps::~colvarproxy_volmaps() {} -int colvarproxy_volmaps::volmaps_available() +int colvarproxy_volmaps::check_volmaps_available() { return COLVARS_NOT_IMPLEMENTED; } diff --git a/lib/colvars/colvarproxy_volmaps.h b/lib/colvars/colvarproxy_volmaps.h index f8c9ba8539..6e1ffcc7c1 100644 --- a/lib/colvars/colvarproxy_volmaps.h +++ b/lib/colvars/colvarproxy_volmaps.h @@ -18,8 +18,8 @@ public: /// Clear volumetric map data int reset(); - /// \brief Whether this implementation has capability to use volumetric maps - virtual int volmaps_available(); + /// Test whether this implementation can use volumetric maps as CVs + virtual int check_volmaps_available(); /// Create a slot for a volumetric map not requested yet int add_volmap_slot(int volmap_id); diff --git a/lib/colvars/colvars_memstream.cpp b/lib/colvars/colvars_memstream.cpp new file mode 100644 index 0000000000..13cb8fb343 --- /dev/null +++ b/lib/colvars/colvars_memstream.cpp @@ -0,0 +1,102 @@ +// -*- c++ -*- + +// This file is part of the Collective Variables module (Colvars). +// The original version of Colvars and its updates are located at: +// https://github.com/Colvars/colvars +// Please update all Colvars source files before making any changes. +// If you wish to distribute your changes, please submit them to the +// Colvars repository at GitHub. + + +#include "colvarmodule.h" +#include "colvartypes.h" +#include "colvarvalue.h" +#include "colvars_memstream.h" + + +bool cvm::memory_stream::expand_output_buffer(size_t add_bytes) +{ + auto &buffer = external_output_buffer_ ? *external_output_buffer_ : internal_buffer_; + if ((buffer.size() + add_bytes) <= max_length_) { + buffer.resize((buffer.size() + add_bytes)); + } else { + setstate(std::ios::badbit); + } + return bool(*this); +} + + +template <> void cvm::memory_stream::write_object(std::string const &t) +{ + size_t const string_length = t.size(); + size_t const new_data_size = sizeof(size_t) + sizeof(char) * string_length; + if (expand_output_buffer(new_data_size)) { + std::memcpy(output_location(), &string_length, sizeof(size_t)); + incr_write_pos(sizeof(size_t)); + std::memcpy(output_location(), t.c_str(), t.size() * sizeof(char)); + incr_write_pos(t.size() * sizeof(char)); + } +} + +template <> cvm::memory_stream &operator<<(cvm::memory_stream &os, std::string const &t) +{ + os.write_object(t); + return os; +} + +template <> void cvm::memory_stream::write_object(colvarvalue const &t) +{ + *this << t; +} + +template <> void cvm::memory_stream::write_object(cvm::vector1d const &t) +{ + return write_vector(t.data_array()); +} + +template <> +cvm::memory_stream &operator<<(cvm::memory_stream &os, cvm::vector1d const &t) +{ + os.write_vector(t.data_array()); + return os; +} + + +template <> void cvm::memory_stream::read_object(std::string &t) +{ + begin_reading(); + size_t string_length = 0; + if (has_remaining(sizeof(size_t))) { + std::memcpy(&string_length, input_location(), sizeof(size_t)); + incr_read_pos(sizeof(size_t)); + if (has_remaining(string_length * sizeof(char))) { + t.assign(reinterpret_cast(input_location()), string_length); + incr_read_pos(string_length * sizeof(char)); + done_reading(); + } else { + setstate(std::ios::failbit); + } + } +} + +template <> cvm::memory_stream &operator>>(cvm::memory_stream &is, std::string &t) +{ + is.read_object(t); + return is; +} + +template <> void cvm::memory_stream::read_object(colvarvalue &t) +{ + *this >> t; +} + +template <> void cvm::memory_stream::read_object(cvm::vector1d &t) +{ + return read_vector(t.data_array()); +} + +template <> cvm::memory_stream &operator>>(cvm::memory_stream &is, cvm::vector1d &t) +{ + is.read_vector(t.data_array()); + return is; +} diff --git a/lib/colvars/colvars_memstream.h b/lib/colvars/colvars_memstream.h new file mode 100644 index 0000000000..0d80d2794d --- /dev/null +++ b/lib/colvars/colvars_memstream.h @@ -0,0 +1,289 @@ +// -*- c++ -*- + +// This file is part of the Collective Variables module (Colvars). +// The original version of Colvars and its updates are located at: +// https://github.com/Colvars/colvars +// Please update all Colvars source files before making any changes. +// If you wish to distribute your changes, please submit them to the +// Colvars repository at GitHub. + +#ifndef MEMORY_STREAM_H +#define MEMORY_STREAM_H + +#include +#include +#include +#include +#include + + +// Work around missing std::is_trivially_copyable in old GCC and Clang versions +// TODO remove this after CentOS 7 has been beyond EOL for a while +#if (defined(__GNUC__) && (__GNUC__ < 5) && !defined(__clang__)) || (defined(__clang__) && (__clang_major__ < 7)) +// Clang needs an exception, because it defines __GNUC__ as well +#define IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) +#else +#define IS_TRIVIALLY_COPYABLE(T) std::is_trivially_copyable::value +#endif + + +class cvm::memory_stream { + +public: + + /// Set up an empty stream with an internal buffer, suitable for writing to + /// \param max_length Maximum allowed capacity (default is 64 GiB) + memory_stream(size_t max_length = (static_cast(1L) << 36)) : max_length_(max_length) {} + + /// Set up a stream based on an external input buffer + memory_stream(size_t n, unsigned char const *buf) + : external_input_buffer_(buf), internal_buffer_(), data_length_(n), max_length_(data_length_) + { + } + + /// Set up a stream based on an external output buffer + memory_stream(std::vector &buf) : memory_stream() + { + external_output_buffer_ = &buf; + } + + /// Length of the buffer + inline size_t length() const { return data_length_; } + + /// Output buffer + inline unsigned char *output_buffer() + { + return (external_output_buffer_ ? external_output_buffer_->data() : internal_buffer_.data()); + } + + /// Next location to write to + inline unsigned char *output_location() { return output_buffer() + data_length_; } + + /// Input buffer + inline unsigned char const *input_buffer() const + { + return (external_input_buffer_ ? external_input_buffer_ : internal_buffer_.data()); + } + + /// Next location to read from + inline unsigned char const *input_location() const { return input_buffer() + read_pos_; } + + /// Cast operator to be used to test for errors + inline explicit operator bool() const { return state_ == std::ios::goodbit; } + + /// Write a simple object to the output buffer + template void write_object(T const &t); + + /// Wrapper to write_object() + template friend memory_stream &operator<<(memory_stream &os, T const &t); + + /// Write a vector of simple objects to the output buffer + template void write_vector(std::vector const &t); + + /// Wrapper to write_vector() + template + friend memory_stream &operator<<(memory_stream &os, std::vector const &t); + + /// Read a simple object from the buffer + template void read_object(T &t); + + /// Wrapper to read_object() + template friend memory_stream &operator>>(memory_stream &is, T &t); + + /// Read a vector of simple objects from the buffer + template void read_vector(std::vector &t); + + /// Wrapper to read_vector() + template friend memory_stream &operator>>(memory_stream &is, std::vector &t); + + + // Compatibility with STL stream functions + + /// Report the current position in the buffer + inline size_t tellg() const { return read_pos_; } + + /// Report the current position in the buffer + inline memory_stream & seekg(size_t pos) { read_pos_ = pos; return *this; } + + /// Ignore formatting operators + inline void setf(decltype(std::ios::fmtflags(0)), decltype(std::ios::floatfield)) {} + + /// Ignore formatting operators + inline void flags(decltype(std::ios::fmtflags(0))) {} + + /// Get the current formatting flags (i.e. none because this stream is unformatted) + inline decltype(std::ios::fmtflags(0)) flags() const { return std::ios::fmtflags(0); } + + /// Get the error code + inline std::ios::iostate rdstate() const { return state_; } + + /// Set the error code + inline void setstate(std::ios::iostate new_state) { state_ |= new_state; } + + /// Clear the error code + inline void clear() { state_ = std::ios::goodbit; } + +protected: + + /// External output buffer + std::vector *external_output_buffer_ = nullptr; + + /// External input buffer + unsigned char const *external_input_buffer_ = nullptr; + + /// Internal buffer (may server for both input and output) + std::vector internal_buffer_; + + /// Length of the data buffer (either internal or external) + size_t data_length_ = 0L; + + /// Largest allowed capacity of the data buffer + size_t const max_length_; + + /// Error status + std::ios::iostate state_ = std::ios::goodbit; + + /// Add the requester number of bytes to the array capacity; return false if buffer is external + bool expand_output_buffer(size_t add_bytes); + + /// Move the buffer position past the data just written + inline void incr_write_pos(size_t c) { data_length_ += c; } + + /// Current position when reading from the buffer + size_t read_pos_ = 0L; + + /// Begin an attempt to read an object; assume EOF unless there is space remaining + inline void begin_reading() { setstate(std::ios::eofbit); } + + /// Mark the reading attempt succesful + inline void done_reading() { clear(); } + + /// Move the buffer position past the data just read + inline void incr_read_pos(size_t c) { read_pos_ += c; } + + /// Check that the buffer contains enough bytes to read as the argument says, set error + /// otherwise + inline bool has_remaining(size_t c) { return c <= (data_length_ - read_pos_); } + }; + +template void cvm::memory_stream::write_object(T const &t) +{ + static_assert(IS_TRIVIALLY_COPYABLE(T), "Cannot use write_object() on complex type"); + size_t const new_data_size = sizeof(T); + if (expand_output_buffer(new_data_size)) { + std::memcpy(output_location(), &t, sizeof(T)); + incr_write_pos(new_data_size); + } +} + +template cvm::memory_stream &operator<<(cvm::memory_stream &os, T const &t) +{ + os.write_object(t); + return os; +} + +template void cvm::memory_stream::write_vector(std::vector const &t) +{ + static_assert(IS_TRIVIALLY_COPYABLE(T), "Cannot use write_vector() on complex type"); + size_t const vector_length = t.size(); + size_t const new_data_size = sizeof(size_t) + sizeof(T) * vector_length; + if (expand_output_buffer(new_data_size)) { + std::memcpy(output_location(), &vector_length, sizeof(size_t)); + incr_write_pos(sizeof(T)); + std::memcpy(output_location(), t.data(), t.size() * sizeof(T)); + incr_write_pos(t.size() * sizeof(T)); + } +} + +template +cvm::memory_stream &operator<<(cvm::memory_stream &os, std::vector const &t) +{ + os.write_vector(t); + return os; +} + +template void cvm::memory_stream::read_object(T &t) +{ + static_assert(IS_TRIVIALLY_COPYABLE(T), "Cannot use read_object() on complex type"); + begin_reading(); + if (has_remaining(sizeof(T))) { + std::memcpy(&t, input_location(), sizeof(T)); + incr_read_pos(sizeof(T)); + done_reading(); + } +} + +template cvm::memory_stream &operator>>(cvm::memory_stream &is, T &t) +{ + is.read_object(t); + return is; +} + +template void cvm::memory_stream::read_vector(std::vector &t) +{ + static_assert(IS_TRIVIALLY_COPYABLE(T), "Cannot use read_vector() on complex type"); + begin_reading(); + size_t vector_length = 0; + if (has_remaining(sizeof(size_t))) { + std::memcpy(&vector_length, input_location(), sizeof(size_t)); + incr_read_pos(sizeof(size_t)); + if (has_remaining(vector_length * sizeof(T))) { + t.resize(vector_length); + std::memcpy(t.data(), input_location(), vector_length * sizeof(T)); + incr_read_pos(vector_length * sizeof(T)); + done_reading(); + } else { + setstate(std::ios::failbit); + } + } +} + +template cvm::memory_stream &operator>>(cvm::memory_stream &is, std::vector &t) +{ + is.read_vector(t); + return is; +} + +template cvm::memory_stream &operator<<(cvm::memory_stream &os, + decltype(std::setprecision(10)) const &) +{ + return os; +} + +#if !defined(_MSC_VER) && !defined(__SUNPRO_CC) +// Visual Studio and MSVC use the same return type for both modifiers +template cvm::memory_stream &operator<<(cvm::memory_stream &os, + decltype(std::setw(10)) const &) +{ + return os; +} +#endif + +// Declare specializations + +template <> void cvm::memory_stream::write_object(std::string const &t); + +template <> cvm::memory_stream &operator<<(cvm::memory_stream &os, std::string const &t); + +template <> void cvm::memory_stream::write_object(colvarvalue const &t); + +template <> cvm::memory_stream &operator<<(cvm::memory_stream &os, colvarvalue const &x); + +template <> void cvm::memory_stream::write_object(cvm::vector1d const &t); + +template <> +cvm::memory_stream &operator<<(cvm::memory_stream &os, cvm::vector1d const &t); + +template <> void cvm::memory_stream::read_object(std::string &t); + +template <> cvm::memory_stream &operator>>(cvm::memory_stream &is, std::string &t); + +template <> void cvm::memory_stream::read_object(colvarvalue &t); + +template <> cvm::memory_stream &operator>>(cvm::memory_stream &is, colvarvalue &t); + +template <> void cvm::memory_stream::read_object(cvm::vector1d &t); + +template <> cvm::memory_stream &operator>>(cvm::memory_stream &is, cvm::vector1d &t); + +#endif diff --git a/lib/colvars/colvars_version.h b/lib/colvars/colvars_version.h index d500c0e5ec..d50a00fff5 100644 --- a/lib/colvars/colvars_version.h +++ b/lib/colvars/colvars_version.h @@ -1,3 +1,3 @@ #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2023-05-01" +#define COLVARS_VERSION "2024-06-04" #endif diff --git a/lib/colvars/colvarscript.cpp b/lib/colvars/colvarscript.cpp index 68dd218a62..085319bd40 100644 --- a/lib/colvars/colvarscript.cpp +++ b/lib/colvars/colvarscript.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include -#include #include #include "colvarproxy.h" @@ -35,6 +33,7 @@ colvarscript::colvarscript(colvarproxy *p, colvarmodule *m) : proxy_(p), colvars(m) { + cmdline_main_cmd_ = std::string("cv"); cmd_names = NULL; init_commands(); #ifdef COLVARS_TCL @@ -141,7 +140,7 @@ int colvarscript::init_command(colvarscript::command const &comm, } cmd_full_help[comm] = cmd_help[comm]+"\n"; - if (cmd_n_args_min[comm] > 0) { + if (cmd_n_args_max[comm] > 0) { cmd_full_help[comm] += "\nParameters\n"; cmd_full_help[comm] += "----------\n\n"; size_t i; @@ -281,11 +280,15 @@ std::string colvarscript::get_command_cmdline_syntax(colvarscript::Object_type t switch (t) { case use_module: - return std::string("cv "+cmdline_cmd+cmdline_args); break; + return std::string(cmdline_main_cmd_ + " " + cmdline_cmd + cmdline_args); + break; case use_colvar: - return std::string("cv colvar name "+cmdline_cmd+cmdline_args); break; + return std::string(cmdline_main_cmd_ + " colvar name " + cmdline_cmd+ + cmdline_args); + break; case use_bias: - return std::string("cv bias name "+cmdline_cmd+cmdline_args); break; + return std::string(cmdline_main_cmd_ + " bias name " + cmdline_cmd+cmdline_args); + break; default: // Already handled, but silence the warning return std::string(""); @@ -353,7 +356,7 @@ int colvarscript::run(int objc, unsigned char *const objv[]) } if (objc < 2) { - set_result_str("No commands given: use \"cv help\" " + set_result_str("No commands given: use \""+cmdline_main_cmd_+" help\" " "for a list of commands."); return COLVARSCRIPT_ERROR; } @@ -436,7 +439,8 @@ int colvarscript::run(int objc, unsigned char *const objv[]) error_code = (*cmd_fn)(obj_for_cmd, objc, objv); } else { add_error_msg("Syntax error: "+cmdline+"\n" - " Run \"cv help\" or \"cv help \" " + " Run \""+main_cmd+" help\" or \""+ + main_cmd+" help \" " "to get the correct syntax.\n"); error_code = COLVARSCRIPT_ERROR; } @@ -763,7 +767,7 @@ extern "C" int tcl_run_colvarscript_command(ClientData /* clientData */, int colvarscript::set_result_text_from_str(std::string const &x_str, unsigned char *obj) { if (obj) { - strcpy(reinterpret_cast(obj), x_str.c_str()); + std::memcpy(reinterpret_cast(obj), x_str.c_str(), x_str.size()); } else { set_result_str(x_str); } diff --git a/lib/colvars/colvarscript.h b/lib/colvars/colvarscript.h index d624d9ce38..229fe0ff39 100644 --- a/lib/colvars/colvarscript.h +++ b/lib/colvars/colvarscript.h @@ -16,7 +16,6 @@ #include "colvarmodule.h" #include "colvarvalue.h" -#include "colvarbias.h" #include "colvarproxy.h" @@ -25,6 +24,8 @@ #define COLVARSCRIPT_OK 0 +class colvardeps; + class colvarscript { private: @@ -161,6 +162,11 @@ public: /// \param cmd Name of the command's function (e.g. "cv_units") int get_command_n_args_max(char const *cmd); + /// Set the main command for the CLI, when it is not "cv" (e.g. LAMMPS) + inline void set_cmdline_main_cmd(std::string const &cmd) { + cmdline_main_cmd_ = cmd; + } + /// Get help string for a command (does not specify how it is launched) /// \param cmd Name of the command's function (e.g. "cv_units") char const *get_command_full_help(char const *cmd); @@ -263,6 +269,9 @@ private: // TODO /// Internal identifiers of command strings std::map cmd_str_map; + /// Main command used in command line ("cv" by default) + std::string cmdline_main_cmd_; + /// Inverse of cmd_str_map (to be exported outside this class) char const **cmd_names; diff --git a/lib/colvars/colvarscript_commands.cpp b/lib/colvars/colvarscript_commands.cpp index c0a28825bf..5db3b96f03 100644 --- a/lib/colvars/colvarscript_commands.cpp +++ b/lib/colvars/colvarscript_commands.cpp @@ -8,9 +8,9 @@ // Colvars repository at GitHub. #include -#include -#include +#include "colvar.h" +#include "colvarbias.h" #include "colvarproxy.h" #include "colvardeps.h" #include "colvarscript.h" diff --git a/lib/colvars/colvarscript_commands.h b/lib/colvars/colvarscript_commands.h index 6dd63d82d2..bdad74e433 100644 --- a/lib/colvars/colvarscript_commands.h +++ b/lib/colvars/colvarscript_commands.h @@ -47,14 +47,10 @@ // If CVSCRIPT is not defined, this file yields the function prototypes #ifndef CVSCRIPT -#ifdef __cplusplus #define CVSCRIPT_COMM_PROTO(COMM) \ extern "C" int CVSCRIPT_COMM_FNAME(COMM)(void *, \ - int, unsigned char *const *); -#else -#define CVSCRIPT_COMM_PROTO(COMM) \ - int CVSCRIPT_COMM_FNAME(COMM)(void *, int, unsigned char *const *); -#endif + int, \ + unsigned char *const *); #define CVSCRIPT(COMM,HELP,N_ARGS_MIN,N_ARGS_MAX,ARGS,FN_BODY) \ CVSCRIPT_COMM_PROTO(COMM) @@ -454,7 +450,8 @@ CVSCRIPT(cv_listcommands, ) CVSCRIPT(cv_listindexfiles, - "Get a list of the index files loaded in this session", + "Get a list of the index files loaded in this session\n" + "list : sequence of strings - List of index file names", 0, 0, "", int const n_files = script->module()->index_file_names.size(); @@ -467,19 +464,36 @@ CVSCRIPT(cv_listindexfiles, return COLVARS_OK; ) +CVSCRIPT(cv_listinputfiles, + "Get a list of all input/configuration files loaded in this session\n" + "list : sequence of strings - List of file names", + 0, 0, + "", + std::list const l = + script->proxy()->list_input_stream_names(); + std::string result; + for (std::list::const_iterator li = l.begin(); + li != l.end(); li++) { + if (li != l.begin()) result.append(1, ' '); + result.append(*li); + } + script->set_result_str(result); + return COLVARS_OK; + ) + CVSCRIPT(cv_load, "Load data from a state file into all matching colvars and biases", 1, 1, "prefix : string - Path to existing state file or input prefix", char const *arg = script->obj_to_str(script->get_module_cmd_arg(0, objc, objv)); - script->proxy()->input_prefix() = cvm::state_file_prefix(arg); - if (script->module()->setup_input() == COLVARS_OK) { - return COLVARS_OK; - } else { + int error_code = + script->proxy()->set_input_prefix(cvm::state_file_prefix(arg)); + error_code |= script->module()->setup_input(); + if (error_code != COLVARS_OK) { script->add_error_msg("Error loading state file"); - return COLVARSCRIPT_ERROR; } + return error_code; ) CVSCRIPT(cv_loadfromstring, @@ -488,7 +502,8 @@ CVSCRIPT(cv_loadfromstring, "buffer : string - String buffer containing the state information", char const *arg = script->obj_to_str(script->get_module_cmd_arg(0, objc, objv)); - script->proxy()->input_buffer() = arg; + script->proxy()->input_stream_from_string("input state string", + std::string(arg)); if (script->module()->setup_input() == COLVARS_OK) { return COLVARS_OK; } else { @@ -560,8 +575,7 @@ CVSCRIPT(cv_save, "prefix : string - Output prefix with trailing \".colvars.state\" gets removed)", std::string const prefix = cvm::state_file_prefix(script->obj_to_str(script->get_module_cmd_arg(0, objc, objv))); - script->proxy()->output_prefix() = prefix; - int error_code = COLVARS_OK; + int error_code = script->proxy()->set_output_prefix(prefix); error_code |= script->module()->setup_output(); error_code |= script->module()->write_restart_file(prefix+ ".colvars.state"); @@ -578,10 +592,10 @@ CVSCRIPT(cv_savetostring, ) CVSCRIPT(cv_targettemperature, - "Get/set target temperature, overriding what the MD engine provides\n" + "Get/set target temperature, overriding internally what the MD engine reports\n" "T : float - Current target temperature in K", 0, 1, - "T : float - New target temperature in K", + "T : float - New target temperature in K (internal use)", char const *Targ = script->obj_to_str(script->get_module_cmd_arg(0, objc, objv)); if (Targ == NULL) { @@ -591,6 +605,20 @@ CVSCRIPT(cv_targettemperature, } ) +CVSCRIPT(cv_timestep, + "Get/set integration timestep, overriding internally what the MD engine reports\n" + "dt : float - Current integration timestep in MD engine units", + 0, 1, + "dt : float - New integration timestep in MD engine units", + char const *arg = + script->obj_to_str(script->get_module_cmd_arg(0, objc, objv)); + if (arg == NULL) { + return script->set_result_real(script->proxy()->dt()); + } else { + return script->proxy()->set_integration_timestep(strtod(arg, NULL)); + } + ) + CVSCRIPT(cv_units, "Get or set the current Colvars unit system\n" "units : string - The current unit system", diff --git a/lib/colvars/colvarscript_commands_bias.cpp b/lib/colvars/colvarscript_commands_bias.cpp index 2a94efb07e..0efab64a59 100644 --- a/lib/colvars/colvarscript_commands_bias.cpp +++ b/lib/colvars/colvarscript_commands_bias.cpp @@ -9,11 +9,9 @@ #include -#include -#include -#include #include "colvarproxy.h" +#include "colvarbias.h" #include "colvardeps.h" #include "colvarscript.h" #include "colvarscript_commands.h" diff --git a/lib/colvars/colvarscript_commands_bias.h b/lib/colvars/colvarscript_commands_bias.h index 420bbabcc0..5cecfcacaf 100644 --- a/lib/colvars/colvarscript_commands_bias.h +++ b/lib/colvars/colvarscript_commands_bias.h @@ -9,7 +9,7 @@ CVSCRIPT(bias_bin, - "Get the current grid bin index (1D ABF only for now)\n" + "Get the current grid bin index (flattened if more than 1d)\n" "bin : integer - Bin index", 0, 0, "", @@ -17,6 +17,8 @@ CVSCRIPT(bias_bin, return COLVARS_OK; ) +/// This is deprecated in the context of mwABF; no other known uses +/// But removing it may break user scripts CVSCRIPT(bias_bincount, "Get the number of samples at the given grid bin (1D ABF only for now)\n" "samples : integer - Number of samples", @@ -36,6 +38,25 @@ CVSCRIPT(bias_bincount, return COLVARS_OK; ) +CVSCRIPT(bias_local_sample_count, + "Get the number of samples around the current bin" + "samples : integer - Number of samples", + 0, 1, + "radius : integer - Sum over radius bins around current bin", + int radius = 0; + char const *arg = + script->obj_to_str(script->get_bias_cmd_arg(0, objc, objv)); + if (arg) { + std::string const param(arg); + if (!(std::istringstream(param) >> radius)) { + script->add_error_msg("local_sample_count: error parsing radius"); + return COLVARSCRIPT_ERROR; + } + } + script->set_result_str(cvm::to_str(this_bias->local_sample_count(radius))); + return COLVARS_OK; + ) + CVSCRIPT(bias_binnum, "Get the total number of grid points of this bias (1D ABF only for now)\n" "Bins : integer - Number of grid points", diff --git a/lib/colvars/colvarscript_commands_colvar.cpp b/lib/colvars/colvarscript_commands_colvar.cpp index da1f74d11d..0d03baaa8c 100644 --- a/lib/colvars/colvarscript_commands_colvar.cpp +++ b/lib/colvars/colvarscript_commands_colvar.cpp @@ -11,8 +11,8 @@ #include #include #include -#include +#include "colvar.h" #include "colvarproxy.h" #include "colvardeps.h" #include "colvarscript.h" diff --git a/lib/colvars/colvarscript_commands_colvar.h b/lib/colvars/colvarscript_commands_colvar.h index 103ff22daf..f6bb6b8c98 100644 --- a/lib/colvars/colvarscript_commands_colvar.h +++ b/lib/colvars/colvarscript_commands_colvar.h @@ -9,7 +9,7 @@ CVSCRIPT(colvar_addforce, - "Apply the given force onto this colvar and return the same\n" + "Apply the given force onto this colvar (no effects outside run)\n" "force : float or array - Applied force; matches colvar dimensionality", 1, 1, "force : float or array - Applied force; must match colvar dimensionality", diff --git a/lib/colvars/colvartypes.cpp b/lib/colvars/colvartypes.cpp index 04e007cbc0..f51791d015 100644 --- a/lib/colvars/colvartypes.cpp +++ b/lib/colvars/colvartypes.cpp @@ -7,12 +7,10 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include -#include - #include "colvarmodule.h" #include "colvartypes.h" -#include "colvarparse.h" +#include "colvaratoms.h" +#include "colvar_rotation_derivative.h" #ifdef COLVARS_LAMMPS // Use open-source Jacobi implementation @@ -204,14 +202,6 @@ cvm::quaternion::position_derivative_inner(cvm::rvector const &pos, return result; } - - - -// Calculate the optimal rotation between two groups, and implement it -// as a quaternion. Uses the method documented in: Coutsias EA, -// Seok C, Dill KA. Using quaternions to calculate RMSD. J Comput -// Chem. 25(15):1849-57 (2004) DOI: 10.1002/jcc.20110 PubMed: 15376254 - #ifdef COLVARS_LAMMPS namespace { inline void *new_Jacobi_solver(int size) { @@ -226,7 +216,7 @@ namespace { int colvarmodule::rotation::init() { b_debug_gradients = false; - lambda = 0.0; + // lambda = 0.0; cvm::main()->cite_feature("Optimal rotation via flexible fitting"); return COLVARS_OK; } @@ -300,6 +290,25 @@ void colvarmodule::rotation::build_correlation_matrix( } } +void colvarmodule::rotation::build_correlation_matrix( + std::vector const &pos1, + std::vector const &pos2) +{ + // build the correlation matrix + size_t i; + for (i = 0; i < pos1.size(); i++) { + C.xx += pos1[i].pos.x * pos2[i].x; + C.xy += pos1[i].pos.x * pos2[i].y; + C.xz += pos1[i].pos.x * pos2[i].z; + C.yx += pos1[i].pos.y * pos2[i].x; + C.yy += pos1[i].pos.y * pos2[i].y; + C.yz += pos1[i].pos.y * pos2[i].z; + C.zx += pos1[i].pos.z * pos2[i].x; + C.zy += pos1[i].pos.z * pos2[i].y; + C.zz += pos1[i].pos.z * pos2[i].z; + } +} + void colvarmodule::rotation::compute_overlap_matrix() { @@ -325,28 +334,26 @@ void colvarmodule::rotation::compute_overlap_matrix() #ifndef COLVARS_LAMMPS -namespace { +namespace NR { -void diagonalize_matrix(cvm::matrix2d &m, - cvm::vector1d &eigval, - cvm::matrix2d &eigvec) +void diagonalize_matrix(cvm::real m[4][4], + cvm::real eigval[4], + cvm::real eigvec[4][4]) { - eigval.resize(4); - eigval.reset(); - eigvec.resize(4, 4); - eigvec.reset(); + std::memset(eigval, 0, sizeof(cvm::real) * 4); + std::memset(eigvec, 0, sizeof(cvm::real) * 4 * 4); // diagonalize int jac_nrot = 0; - if (NR_Jacobi::jacobi(m.c_array(), eigval.c_array(), eigvec.c_array(), &jac_nrot) != + if (NR_Jacobi::jacobi(m, eigval, eigvec, &jac_nrot) != COLVARS_OK) { cvm::error("Too many iterations in jacobi diagonalization.\n" "This is usually the result of an ill-defined set of atoms for " "rotational alignment (RMSD, rotateReference, etc).\n"); } - NR_Jacobi::eigsrt(eigval.c_array(), eigvec.c_array()); + NR_Jacobi::eigsrt(eigval, eigvec); // jacobi saves eigenvectors by columns - NR_Jacobi::transpose(eigvec.c_array()); + NR_Jacobi::transpose(eigvec); // normalize eigenvectors for (size_t ie = 0; ie < 4; ie++) { @@ -375,27 +382,51 @@ void colvarmodule::rotation::calc_optimal_rotation( C.reset(); build_correlation_matrix(pos1, pos2); - S.resize(4, 4); - S.reset(); + calc_optimal_rotation_impl(); + + if (b_debug_gradients) debug_gradients(*this, pos1, pos2); +} + +void colvarmodule::rotation::calc_optimal_rotation( + std::vector const &pos1, + std::vector const &pos2) +{ + C.reset(); + build_correlation_matrix(pos1, pos2); + + calc_optimal_rotation_impl(); + + if (b_debug_gradients) debug_gradients(*this, pos1, pos2); +} + +// Calculate the optimal rotation between two groups, and implement it +// as a quaternion. Uses the method documented in: Coutsias EA, +// Seok C, Dill KA. Using quaternions to calculate RMSD. J Comput +// Chem. 25(15):1849-57 (2004) DOI: 10.1002/jcc.20110 PubMed: 15376254 +void colvarmodule::rotation::calc_optimal_rotation_impl() { compute_overlap_matrix(); - S_backup.resize(4, 4); - S_backup = S; + // S_backup = S; + std::memcpy(&S_backup[0][0], &S, 4*4*sizeof(cvm::real)); if (b_debug_gradients) { - cvm::log("S = "+cvm::to_str(S_backup, cvm::cv_width, cvm::cv_prec)+"\n"); + cvm::matrix2d S_backup_out(4, 4); + for (size_t i = 0; i < 4; ++i) { + for (size_t j = 0; j < 4; ++j) { + S_backup_out[i][j] = S_backup[i][j]; + } + } + cvm::log("S = "+cvm::to_str(S_backup_out, cvm::cv_width, cvm::cv_prec)+"\n"); } - S_eigval.resize(4); - S_eigvec.resize(4, 4); #ifdef COLVARS_LAMMPS MathEigen::Jacobi &, - cvm::matrix2d &> *ecalc = + cvm::real[4], + cvm::real[4][4]> *ecalc = reinterpret_cast &, - cvm::matrix2d &> *>(jacobi); + cvm::real[4], + cvm::real[4][4]> *>(jacobi); int ierror = ecalc->Diagonalize(S, S_eigval, S_eigvec); if (ierror) { @@ -404,22 +435,9 @@ void colvarmodule::rotation::calc_optimal_rotation( "rotational alignment (RMSD, rotateReference, etc).\n"); } #else - diagonalize_matrix(S, S_eigval, S_eigvec); + NR::diagonalize_matrix(S, S_eigval, S_eigvec); #endif - - - // eigenvalues and eigenvectors - cvm::real const L0 = S_eigval[0]; - cvm::real const L1 = S_eigval[1]; - cvm::real const L2 = S_eigval[2]; - cvm::real const L3 = S_eigval[3]; - cvm::quaternion const Q0(S_eigvec[0]); - cvm::quaternion const Q1(S_eigvec[1]); - cvm::quaternion const Q2(S_eigvec[2]); - cvm::quaternion const Q3(S_eigvec[3]); - - lambda = L0; - q = Q0; + q = cvm::quaternion{S_eigvec[0][0], S_eigvec[0][1], S_eigvec[0][2], S_eigvec[0][3]}; if (cvm::rotation::monitor_crossings) { if (q_old.norm2() > 0.0) { @@ -431,178 +449,4 @@ void colvarmodule::rotation::calc_optimal_rotation( } q_old = q; } - - if (b_debug_gradients) { - cvm::log("L0 = "+cvm::to_str(L0, cvm::cv_width, cvm::cv_prec)+ - ", Q0 = "+cvm::to_str(Q0, cvm::cv_width, cvm::cv_prec)+ - ", Q0*Q0 = "+cvm::to_str(Q0.inner(Q0), cvm::cv_width, cvm::cv_prec)+ - "\n"); - cvm::log("L1 = "+cvm::to_str(L1, cvm::cv_width, cvm::cv_prec)+ - ", Q1 = "+cvm::to_str(Q1, cvm::cv_width, cvm::cv_prec)+ - ", Q0*Q1 = "+cvm::to_str(Q0.inner(Q1), cvm::cv_width, cvm::cv_prec)+ - "\n"); - cvm::log("L2 = "+cvm::to_str(L2, cvm::cv_width, cvm::cv_prec)+ - ", Q2 = "+cvm::to_str(Q2, cvm::cv_width, cvm::cv_prec)+ - ", Q0*Q2 = "+cvm::to_str(Q0.inner(Q2), cvm::cv_width, cvm::cv_prec)+ - "\n"); - cvm::log("L3 = "+cvm::to_str(L3, cvm::cv_width, cvm::cv_prec)+ - ", Q3 = "+cvm::to_str(Q3, cvm::cv_width, cvm::cv_prec)+ - ", Q0*Q3 = "+cvm::to_str(Q0.inner(Q3), cvm::cv_width, cvm::cv_prec)+ - "\n"); - } - - // calculate derivatives of L0 and Q0 with respect to each atom in - // either group; note: if dS_1 is a null vector, nothing will be - // calculated - size_t ia; - for (ia = 0; ia < dS_1.size(); ia++) { - - cvm::real const &a2x = pos2[ia].x; - cvm::real const &a2y = pos2[ia].y; - cvm::real const &a2z = pos2[ia].z; - - cvm::matrix2d &ds_1 = dS_1[ia]; - - // derivative of the S matrix - ds_1.reset(); - ds_1[0][0].set( a2x, a2y, a2z); - ds_1[1][0].set( 0.0, a2z, -a2y); - ds_1[0][1] = ds_1[1][0]; - ds_1[2][0].set(-a2z, 0.0, a2x); - ds_1[0][2] = ds_1[2][0]; - ds_1[3][0].set( a2y, -a2x, 0.0); - ds_1[0][3] = ds_1[3][0]; - ds_1[1][1].set( a2x, -a2y, -a2z); - ds_1[2][1].set( a2y, a2x, 0.0); - ds_1[1][2] = ds_1[2][1]; - ds_1[3][1].set( a2z, 0.0, a2x); - ds_1[1][3] = ds_1[3][1]; - ds_1[2][2].set(-a2x, a2y, -a2z); - ds_1[3][2].set( 0.0, a2z, a2y); - ds_1[2][3] = ds_1[3][2]; - ds_1[3][3].set(-a2x, -a2y, a2z); - - cvm::rvector &dl0_1 = dL0_1[ia]; - cvm::vector1d &dq0_1 = dQ0_1[ia]; - - // matrix multiplications; derivatives of L_0 and Q_0 are - // calculated using Hellmann-Feynman theorem (i.e. exploiting the - // fact that the eigenvectors Q_i form an orthonormal basis) - - dl0_1.reset(); - for (size_t i = 0; i < 4; i++) { - for (size_t j = 0; j < 4; j++) { - dl0_1 += Q0[i] * ds_1[i][j] * Q0[j]; - } - } - - dq0_1.reset(); - for (size_t p = 0; p < 4; p++) { - for (size_t i = 0; i < 4; i++) { - for (size_t j = 0; j < 4; j++) { - dq0_1[p] += - (Q1[i] * ds_1[i][j] * Q0[j]) / (L0-L1) * Q1[p] + - (Q2[i] * ds_1[i][j] * Q0[j]) / (L0-L2) * Q2[p] + - (Q3[i] * ds_1[i][j] * Q0[j]) / (L0-L3) * Q3[p]; - } - } - } - } - - // do the same for the second group - for (ia = 0; ia < dS_2.size(); ia++) { - - cvm::real const &a1x = pos1[ia].x; - cvm::real const &a1y = pos1[ia].y; - cvm::real const &a1z = pos1[ia].z; - - cvm::matrix2d &ds_2 = dS_2[ia]; - - ds_2.reset(); - ds_2[0][0].set( a1x, a1y, a1z); - ds_2[1][0].set( 0.0, -a1z, a1y); - ds_2[0][1] = ds_2[1][0]; - ds_2[2][0].set( a1z, 0.0, -a1x); - ds_2[0][2] = ds_2[2][0]; - ds_2[3][0].set(-a1y, a1x, 0.0); - ds_2[0][3] = ds_2[3][0]; - ds_2[1][1].set( a1x, -a1y, -a1z); - ds_2[2][1].set( a1y, a1x, 0.0); - ds_2[1][2] = ds_2[2][1]; - ds_2[3][1].set( a1z, 0.0, a1x); - ds_2[1][3] = ds_2[3][1]; - ds_2[2][2].set(-a1x, a1y, -a1z); - ds_2[3][2].set( 0.0, a1z, a1y); - ds_2[2][3] = ds_2[3][2]; - ds_2[3][3].set(-a1x, -a1y, a1z); - - cvm::rvector &dl0_2 = dL0_2[ia]; - cvm::vector1d &dq0_2 = dQ0_2[ia]; - - dl0_2.reset(); - for (size_t i = 0; i < 4; i++) { - for (size_t j = 0; j < 4; j++) { - dl0_2 += Q0[i] * ds_2[i][j] * Q0[j]; - } - } - - dq0_2.reset(); - for (size_t p = 0; p < 4; p++) { - for (size_t i = 0; i < 4; i++) { - for (size_t j = 0; j < 4; j++) { - dq0_2[p] += - (Q1[i] * ds_2[i][j] * Q0[j]) / (L0-L1) * Q1[p] + - (Q2[i] * ds_2[i][j] * Q0[j]) / (L0-L2) * Q2[p] + - (Q3[i] * ds_2[i][j] * Q0[j]) / (L0-L3) * Q3[p]; - } - } - } - - if (b_debug_gradients) { - - cvm::matrix2d S_new(4, 4); - cvm::vector1d S_new_eigval(4); - cvm::matrix2d S_new_eigvec(4, 4); - - // make an infitesimal move along each cartesian coordinate of - // this atom, and solve again the eigenvector problem - for (size_t comp = 0; comp < 3; comp++) { - - S_new = S_backup; - // diagonalize the new overlap matrix - for (size_t i = 0; i < 4; i++) { - for (size_t j = 0; j < 4; j++) { - S_new[i][j] += - colvarmodule::debug_gradients_step_size * ds_2[i][j][comp]; - } - } - - // cvm::log("S_new = "+cvm::to_str(cvm::to_str (S_new), cvm::cv_width, cvm::cv_prec)+"\n"); - -#ifdef COLVARS_LAMMPS - ecalc->Diagonalize(S_new, S_new_eigval, S_new_eigvec); -#else - diagonalize_matrix(S_new, S_new_eigval, S_new_eigvec); -#endif - - cvm::real const &L0_new = S_new_eigval[0]; - cvm::quaternion const Q0_new(S_new_eigvec[0]); - - cvm::real const DL0 = (dl0_2[comp]) * colvarmodule::debug_gradients_step_size; - cvm::quaternion const DQ0(dq0_2[0][comp] * colvarmodule::debug_gradients_step_size, - dq0_2[1][comp] * colvarmodule::debug_gradients_step_size, - dq0_2[2][comp] * colvarmodule::debug_gradients_step_size, - dq0_2[3][comp] * colvarmodule::debug_gradients_step_size); - - cvm::log( "|(l_0+dl_0) - l_0^new|/l_0 = "+ - cvm::to_str(cvm::fabs(L0+DL0 - L0_new)/L0, cvm::cv_width, cvm::cv_prec)+ - ", |(q_0+dq_0) - q_0^new| = "+ - cvm::to_str((Q0+DQ0 - Q0_new).norm(), cvm::cv_width, cvm::cv_prec)+ - "\n"); - } - } - } } - - - diff --git a/lib/colvars/colvartypes.h b/lib/colvars/colvartypes.h index 13b6a5bdb3..455e628f1b 100644 --- a/lib/colvars/colvartypes.h +++ b/lib/colvars/colvartypes.h @@ -10,8 +10,14 @@ #ifndef COLVARTYPES_H #define COLVARTYPES_H +#include // TODO specialize templates and replace this with iosfwd #include +#ifdef COLVARS_LAMMPS +// Use open-source Jacobi implementation +#include "math_eigen_impl.h" +#endif + #include "colvarmodule.h" #ifndef PI @@ -53,6 +59,12 @@ public: } } + /// Explicit Copy constructor + inline vector1d(const vector1d&) = default; + + /// Explicit Copy assignement + inline vector1d& operator=(const vector1d&) = default; + /// Return a pointer to the data location inline T * c_array() { @@ -69,6 +81,12 @@ public: return data; } + /// Return a reference to the data + inline std::vector const &data_array() const + { + return data; + } + inline ~vector1d() { data.clear(); @@ -493,6 +511,12 @@ public: return data; } + /// Return a reference to the data + inline std::vector const &data_array() const + { + return data; + } + inline row & operator [] (size_t const i) { return rows[i]; @@ -896,9 +920,6 @@ public: zz = zzi; } - /// Destructor - inline ~rmatrix() - {} inline void reset() { @@ -1278,59 +1299,50 @@ public: }; +#ifndef COLVARS_LAMMPS +namespace NR { +void diagonalize_matrix(cvm::real m[4][4], + cvm::real eigval[4], + cvm::real eigvec[4][4]); +} +#endif + /// \brief A rotation between two sets of coordinates (for the moment /// a wrapper for colvarmodule::quaternion) class colvarmodule::rotation { -public: - - /// \brief The rotation itself (implemented as a quaternion) - cvm::quaternion q; - - /// \brief Eigenvalue corresponding to the optimal rotation - cvm::real lambda; - - /// \brief Perform gradient tests - bool b_debug_gradients; - +private: /// Correlation matrix C (3, 3) cvm::rmatrix C; /// Overlap matrix S (4, 4) - cvm::matrix2d S; + cvm::real S[4][4]; /// Eigenvalues of S - cvm::vector1d S_eigval; + cvm::real S_eigval[4]; /// Eigenvectors of S - cvm::matrix2d S_eigvec; + cvm::real S_eigvec[4][4]; /// Used for debugging gradients - cvm::matrix2d S_backup; + cvm::real S_backup[4][4]; - /// Derivatives of S - std::vector< cvm::matrix2d > dS_1, dS_2; - /// Derivatives of leading eigenvalue - std::vector< cvm::rvector > dL0_1, dL0_2; - /// Derivatives of leading eigenvector - std::vector< cvm::vector1d > dQ0_1, dQ0_2; +public: + /// \brief Perform gradient tests + bool b_debug_gradients; - /// Allocate space for the derivatives of the rotation - inline void request_group1_gradients(size_t n) - { - dS_1.resize(n, cvm::matrix2d(4, 4)); - dL0_1.resize(n, cvm::rvector(0.0, 0.0, 0.0)); - dQ0_1.resize(n, cvm::vector1d(4)); - } + /// \brief The rotation itself (implemented as a quaternion) + cvm::quaternion q; - /// Allocate space for the derivatives of the rotation - inline void request_group2_gradients(size_t n) - { - dS_2.resize(n, cvm::matrix2d(4, 4)); - dL0_2.resize(n, cvm::rvector(0.0, 0.0, 0.0)); - dQ0_2.resize(n, cvm::vector1d(4)); - } + template + friend struct rotation_derivative; + + template + friend void debug_gradients( + cvm::rotation &rot, + const std::vector &pos1, + const std::vector &pos2); /// \brief Calculate the optimal rotation and store the /// corresponding eigenvalue and eigenvector in the arguments l0 and @@ -1344,6 +1356,8 @@ public: /// DOI: 10.1002/jcc.20110 PubMed: 15376254 void calc_optimal_rotation(std::vector const &pos1, std::vector const &pos2); + void calc_optimal_rotation(std::vector const &pos1, + std::vector const &pos2); /// Initialize member data int init(); @@ -1478,6 +1492,11 @@ protected: /// Build the correlation matrix C (used by calc_optimal_rotation()) void build_correlation_matrix(std::vector const &pos1, std::vector const &pos2); + void build_correlation_matrix(std::vector const &pos1, + std::vector const &pos2); + + /// \brief Actual implementation of `calc_optimal_rotation` (and called by it) + void calc_optimal_rotation_impl(); /// Compute the overlap matrix S (used by calc_optimal_rotation()) void compute_overlap_matrix(); diff --git a/lib/colvars/colvarvalue.cpp b/lib/colvars/colvarvalue.cpp index e57859dfa3..3b8077d2e7 100644 --- a/lib/colvars/colvarvalue.cpp +++ b/lib/colvars/colvarvalue.cpp @@ -8,11 +8,10 @@ // Colvars repository at GitHub. #include -#include -#include #include "colvarmodule.h" #include "colvarvalue.h" +#include "colvars_memstream.h" @@ -721,29 +720,43 @@ int colvarvalue::from_simple_string(std::string const &s) return COLVARS_ERROR; } -std::ostream & operator << (std::ostream &os, colvarvalue const &x) + +template void colvarvalue::write_to_stream_template_(OST &os) const { - switch (x.type()) { + switch (type()) { case colvarvalue::type_scalar: - os << x.real_value; + os << real_value; break; case colvarvalue::type_3vector: case colvarvalue::type_unit3vector: case colvarvalue::type_unit3vectorderiv: - os << x.rvector_value; + os << rvector_value; break; case colvarvalue::type_quaternion: case colvarvalue::type_quaternionderiv: - os << x.quaternion_value; + os << quaternion_value; break; case colvarvalue::type_vector: - os << x.vector1d_value; + os << vector1d_value; break; case colvarvalue::type_notset: default: os << "not set"; break; } +} + + +std::ostream & operator << (std::ostream &os, colvarvalue const &x) +{ + x.write_to_stream_template_(os); + return os; +} + + +cvm::memory_stream & operator << (cvm::memory_stream &os, colvarvalue const &x) +{ + x.write_to_stream_template_(os); return os; } @@ -758,44 +771,55 @@ std::ostream & operator << (std::ostream &os, std::vector const &v) } -std::istream & operator >> (std::istream &is, colvarvalue &x) +template void colvarvalue::read_from_stream_template_(IST &is) { - if (x.type() == colvarvalue::type_notset) { + if (type() == colvarvalue::type_notset) { cvm::error("Trying to read from a stream a colvarvalue, " "which has not yet been assigned a data type.\n"); - return is; } - switch (x.type()) { + switch (type()) { case colvarvalue::type_scalar: - is >> x.real_value; + is >> real_value; break; case colvarvalue::type_3vector: case colvarvalue::type_unit3vectorderiv: - is >> x.rvector_value; + is >> rvector_value; break; case colvarvalue::type_unit3vector: - is >> x.rvector_value; - x.apply_constraints(); + is >> rvector_value; + apply_constraints(); break; case colvarvalue::type_quaternion: - is >> x.quaternion_value; - x.apply_constraints(); + is >> quaternion_value; + apply_constraints(); break; case colvarvalue::type_quaternionderiv: - is >> x.quaternion_value; + is >> quaternion_value; break; case colvarvalue::type_vector: - is >> x.vector1d_value; + is >> vector1d_value; break; case colvarvalue::type_notset: default: - x.undef_op(); + undef_op(); } +} + + +std::istream & operator >> (std::istream &is, colvarvalue &x) +{ + x.read_from_stream_template_(is); return is; } +cvm::memory_stream & operator >> (cvm::memory_stream &is, colvarvalue &x) +{ + x.read_from_stream_template_(is); + return is; +} + size_t colvarvalue::output_width(size_t const &real_width) const { switch (this->value_type) { diff --git a/lib/colvars/colvarvalue.h b/lib/colvars/colvarvalue.h index 9ab8dbe31d..e8a6a849d3 100644 --- a/lib/colvars/colvarvalue.h +++ b/lib/colvars/colvarvalue.h @@ -10,6 +10,8 @@ #ifndef COLVARVALUE_H #define COLVARVALUE_H +#include + #include "colvarmodule.h" #include "colvartypes.h" @@ -120,7 +122,8 @@ public: /// number and always behaves like it unless you change its type colvarvalue(); - /// Constructor from a type specification + /// Constructor from a type flag (note: type_vector also needs the vector length to be set) + /// \param[in] vti Value of the \link Type \endlink enum colvarvalue(Type const &vti); /// Copy constructor from real base type @@ -297,12 +300,31 @@ public: /// Undefined operation void undef_op() const; +private: - /// \brief Formatted output operator - friend std::ostream & operator << (std::ostream &os, colvarvalue const &q); + /// Generic stream writing function (formatted and not) + template void write_to_stream_template_(OST &os) const; - /// \brief Formatted input operator - friend std::istream & operator >> (std::istream &is, colvarvalue &q); +public: + + /// Formatted output operator + friend std::ostream & operator << (std::ostream &os, colvarvalue const &x); + + /// Unformatted output operator + friend cvm::memory_stream & operator << (cvm::memory_stream &os, colvarvalue const &x); + +private: + + /// Generic stream reading function (formatted and not) + template void read_from_stream_template_(IST &is); + +public: + + /// Formatted input operator + friend std::istream & operator >> (std::istream &is, colvarvalue &x); + + /// Unformatted input operator + friend cvm::memory_stream & operator >> (cvm::memory_stream &is, colvarvalue &x); /// Give the number of characters required to output this /// colvarvalue, given the current type assigned and the number of