| version 1.4 | version 1.5 |
|---|
| |
| colvardeps::~colvardeps() { | colvardeps::~colvardeps() { |
| size_t i; | size_t i; |
| | |
| for (i=0; i<feature_states.size(); i++) { | |
| if (feature_states[i] != NULL) delete feature_states[i]; | |
| } | |
| // Do not delete features if it's static | // Do not delete features if it's static |
| // for (i=0; i<features.size(); i++) { | // for (i=0; i<features.size(); i++) { |
| // if (features[i] != NULL) delete features[i]; | // if (features[i] != NULL) delete features[i]; |
| |
| | |
| | |
| void colvardeps::provide(int feature_id) { | void colvardeps::provide(int feature_id) { |
| feature_states[feature_id]->available = true; | feature_states[feature_id].available = true; |
| } | } |
| | |
| | |
| void colvardeps::set_available(int feature_id, bool truefalse) { | void colvardeps::set_available(int feature_id, bool truefalse) { |
| feature_states[feature_id]->available = truefalse; | feature_states[feature_id].available = truefalse; |
| } | } |
| | |
| | |
| void colvardeps::set_enabled(int feature_id, bool truefalse) { | void colvardeps::set_enabled(int feature_id, bool truefalse) { |
| feature_states[feature_id]->enabled = truefalse; | feature_states[feature_id].enabled = truefalse; |
| } | } |
| | |
| | |
| |
| size_t i, j; | size_t i, j; |
| bool ok; | bool ok; |
| feature *f = features()[feature_id]; | feature *f = features()[feature_id]; |
| feature_state *fs = feature_states[feature_id]; | feature_state *fs = &feature_states[feature_id]; |
| | |
| if (cvm::debug()) { | if (cvm::debug()) { |
| cvm::log("DEPS: " + description + | cvm::log("DEPS: " + description + |
| |
| // Initialize feature_states for each instance | // Initialize feature_states for each instance |
| feature_states.reserve(f_cvb_ntot); | feature_states.reserve(f_cvb_ntot); |
| for (i = 0; i < f_cvb_ntot; i++) { | for (i = 0; i < f_cvb_ntot; i++) { |
| feature_states.push_back(new feature_state(true, false)); | feature_states.push_back(feature_state(true, false)); |
| // Most features are available, so we set them so | // Most features are available, so we set them so |
| // and list exceptions below | // and list exceptions below |
| } | } |
| | |
| // some biases are not history-dependent | // some biases are not history-dependent |
| feature_states[f_cvb_history_dependent]->available = false; | feature_states[f_cvb_history_dependent].available = false; |
| | |
| // some biases do not compute a PMF | // some biases do not compute a PMF |
| feature_states[f_cvb_calc_pmf]->available = false; | feature_states[f_cvb_calc_pmf].available = false; |
| | |
| // by default, biases should work with vector variables, too | // by default, biases should work with vector variables, too |
| feature_states[f_cvb_scalar_variables]->available = false; | feature_states[f_cvb_scalar_variables].available = false; |
| } | } |
| | |
| | |
| |
| // Initialize feature_states for each instance | // Initialize feature_states for each instance |
| feature_states.reserve(f_cv_ntot); | feature_states.reserve(f_cv_ntot); |
| for (i = 0; i < f_cv_ntot; i++) { | for (i = 0; i < f_cv_ntot; i++) { |
| feature_states.push_back(new feature_state(true, false)); | feature_states.push_back(feature_state(true, false)); |
| // Most features are available, so we set them so | // Most features are available, so we set them so |
| // and list exceptions below | // and list exceptions below |
| } | } |
| |
| f_cv_homogeneous | f_cv_homogeneous |
| }; | }; |
| for (i = 0; i < sizeof(unavailable_deps) / sizeof(unavailable_deps[0]); i++) { | for (i = 0; i < sizeof(unavailable_deps) / sizeof(unavailable_deps[0]); i++) { |
| feature_states[unavailable_deps[i]]->available = false; | feature_states[unavailable_deps[i]].available = false; |
| } | } |
| } | } |
| | |
| |
| // default as unavailable, not enabled | // default as unavailable, not enabled |
| feature_states.reserve(f_cvc_ntot); | feature_states.reserve(f_cvc_ntot); |
| for (i = 0; i < colvardeps::f_cvc_ntot; i++) { | for (i = 0; i < colvardeps::f_cvc_ntot; i++) { |
| feature_states.push_back(new feature_state(false, false)); | feature_states.push_back(feature_state(false, false)); |
| } | } |
| | |
| // Features that are implemented by all cvcs by default | // Features that are implemented by all cvcs by default |
| // Each cvc specifies what other features are available | // Each cvc specifies what other features are available |
| feature_states[f_cvc_active]->available = true; | feature_states[f_cvc_active].available = true; |
| feature_states[f_cvc_gradient]->available = true; | feature_states[f_cvc_gradient].available = true; |
| | |
| // Features that are implemented by default if their requirements are | // Features that are implemented by default if their requirements are |
| feature_states[f_cvc_one_site_total_force]->available = true; | feature_states[f_cvc_one_site_total_force].available = true; |
| | |
| // Features That are implemented only for certain simulation engine configurations | // Features That are implemented only for certain simulation engine configurations |
| feature_states[f_cvc_scalable_com]->available = (cvm::proxy->scalable_group_coms() == COLVARS_OK); | feature_states[f_cvc_scalable_com].available = (cvm::proxy->scalable_group_coms() == COLVARS_OK); |
| feature_states[f_cvc_scalable]->available = feature_states[f_cvc_scalable_com]->available; | feature_states[f_cvc_scalable].available = feature_states[f_cvc_scalable_com].available; |
| } | } |
| | |
| | |
| |
| // default as unavailable, not enabled | // default as unavailable, not enabled |
| feature_states.reserve(f_ag_ntot); | feature_states.reserve(f_ag_ntot); |
| for (i = 0; i < colvardeps::f_ag_ntot; i++) { | for (i = 0; i < colvardeps::f_ag_ntot; i++) { |
| feature_states.push_back(new feature_state(false, false)); | feature_states.push_back(feature_state(false, false)); |
| } | } |
| | |
| // Features that are implemented (or not) by all atom groups | // Features that are implemented (or not) by all atom groups |
| feature_states[f_ag_active]->available = true; | feature_states[f_ag_active].available = true; |
| // f_ag_scalable_com is provided by the CVC iff it is COM-based | // f_ag_scalable_com is provided by the CVC iff it is COM-based |
| feature_states[f_ag_scalable_com]->available = false; | feature_states[f_ag_scalable_com].available = false; |
| // TODO make f_ag_scalable depend on f_ag_scalable_com (or something else) | // TODO make f_ag_scalable depend on f_ag_scalable_com (or something else) |
| feature_states[f_ag_scalable]->available = true; | feature_states[f_ag_scalable].available = true; |
| } | } |
| | |
| | |
| |
| size_t i; | size_t i; |
| cvm::log("Enabled features of " + description); | cvm::log("Enabled features of " + description); |
| for (i = 0; i < feature_states.size(); i++) { | for (i = 0; i < feature_states.size(); i++) { |
| if (feature_states[i]->enabled) | if (feature_states[i].enabled) |
| cvm::log("- " + features()[i]->description); | cvm::log("- " + features()[i]->description); |
| } | } |
| for (i=0; i<children.size(); i++) { | for (i=0; i<children.size(); i++) { |