Skip to content
Snippets Groups Projects
Commit 695b6090 authored by Omar Valsson's avatar Omar Valsson
Browse files

Fixed a problem with updating of VES bias

parent b90c2826
No related branches found
No related tags found
No related merge requests found
...@@ -287,10 +287,14 @@ private: ...@@ -287,10 +287,14 @@ private:
LinearBasisSetExpansion* bias_expansion_pntr_; LinearBasisSetExpansion* bias_expansion_pntr_;
size_t ncoeffs_; size_t ncoeffs_;
Value* valueForce2_; Value* valueForce2_;
bool all_values_inside;
std::vector<double> bf_values;
bool bf_values_set;
public: public:
explicit VesLinearExpansion(const ActionOptions&); explicit VesLinearExpansion(const ActionOptions&);
~VesLinearExpansion(); ~VesLinearExpansion();
void calculate(); void calculate();
void update();
void updateTargetDistributions(); void updateTargetDistributions();
void restartTargetDistributions(); void restartTargetDistributions();
// //
...@@ -334,7 +338,10 @@ VesLinearExpansion::VesLinearExpansion(const ActionOptions&ao): ...@@ -334,7 +338,10 @@ VesLinearExpansion::VesLinearExpansion(const ActionOptions&ao):
nargs_(getNumberOfArguments()), nargs_(getNumberOfArguments()),
basisf_pntrs_(0), basisf_pntrs_(0),
bias_expansion_pntr_(NULL), bias_expansion_pntr_(NULL),
valueForce2_(NULL) valueForce2_(NULL),
all_values_inside(true),
bf_values(0),
bf_values_set(false)
{ {
std::vector<std::string> basisf_labels; std::vector<std::string> basisf_labels;
parseMultipleValues("BASIS_FUNCTIONS",basisf_labels,nargs_); parseMultipleValues("BASIS_FUNCTIONS",basisf_labels,nargs_);
...@@ -367,6 +374,7 @@ VesLinearExpansion::VesLinearExpansion(const ActionOptions&ao): ...@@ -367,6 +374,7 @@ VesLinearExpansion::VesLinearExpansion(const ActionOptions&ao):
bias_expansion_pntr_->linkVesBias(this); bias_expansion_pntr_->linkVesBias(this);
bias_expansion_pntr_->setGridBins(this->getGridBins()); bias_expansion_pntr_->setGridBins(this->getGridBins());
// //
bf_values.assign(ncoeffs_,0.0);
...@@ -410,17 +418,16 @@ void VesLinearExpansion::calculate() { ...@@ -410,17 +418,16 @@ void VesLinearExpansion::calculate() {
std::vector<double> cv_values(nargs_); std::vector<double> cv_values(nargs_);
std::vector<double> forces(nargs_); std::vector<double> forces(nargs_);
std::vector<double> coeffsderivs_values(ncoeffs_);
for(unsigned int k=0; k<nargs_; k++) { for(unsigned int k=0; k<nargs_; k++) {
cv_values[k]=getArgument(k); cv_values[k]=getArgument(k);
} }
bool all_inside = true; all_values_inside = true;
double bias = bias_expansion_pntr_->getBiasAndForces(cv_values,all_inside,forces,coeffsderivs_values); double bias = bias_expansion_pntr_->getBiasAndForces(cv_values,all_values_inside,forces,bf_values);
if(biasCutoffActive()) { if(biasCutoffActive()) {
applyBiasCutoff(bias,forces,coeffsderivs_values); applyBiasCutoff(bias,forces,bf_values);
coeffsderivs_values[0]=1.0; bf_values[0]=1.0;
} }
double totalForce2 = 0.0; double totalForce2 = 0.0;
for(unsigned int k=0; k<nargs_; k++) { for(unsigned int k=0; k<nargs_; k++) {
...@@ -430,12 +437,24 @@ void VesLinearExpansion::calculate() { ...@@ -430,12 +437,24 @@ void VesLinearExpansion::calculate() {
setBias(bias); setBias(bias);
valueForce2_->set(totalForce2); valueForce2_->set(totalForce2);
if(all_inside) {
addToSampledAverages(coeffsderivs_values); bf_values_set = true;
}
void VesLinearExpansion::update() {
plumed_assert(bf_values_set);
if(all_values_inside && bf_values_set) {
addToSampledAverages(bf_values);
} }
bf_values_set = false;
} }
void VesLinearExpansion::updateTargetDistributions() { void VesLinearExpansion::updateTargetDistributions() {
bias_expansion_pntr_->updateTargetDistribution(); bias_expansion_pntr_->updateTargetDistribution();
setTargetDistAverages(bias_expansion_pntr_->TargetDistAverages()); setTargetDistAverages(bias_expansion_pntr_->TargetDistAverages());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment