From 2a29cf09faa7b4cf095181cb6346abb853009d4d Mon Sep 17 00:00:00 2001 From: HanatoK Date: Fri, 13 Sep 2024 10:26:28 -0500 Subject: [PATCH] fix: change the setting of force in group_force_object to accumulation This should better match what the existing apply_force does. --- src/colvaratoms.cpp | 6 +++--- src/colvaratoms.h | 2 +- src/colvarcomp_distances.cpp | 2 +- src/colvarcomp_rotations.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/colvaratoms.cpp b/src/colvaratoms.cpp index 78d3047cb..c0c2bba39 100644 --- a/src/colvaratoms.cpp +++ b/src/colvaratoms.cpp @@ -1482,7 +1482,7 @@ void cvm::atom_group::apply_force(cvm::rvector const &force) auto ag_force = get_group_force_object(); for (size_t i = 0; i < size(); ++i) { - ag_force.set_atom_force(i, atoms[i].mass / total_mass * force); + ag_force.add_atom_force(i, atoms[i].mass / total_mass * force); } } @@ -1515,9 +1515,9 @@ cvm::atom_group::group_force_object::~group_force_object() { } } -void cvm::atom_group::group_force_object::set_atom_force(size_t i, const cvm::rvector& force) { +void cvm::atom_group::group_force_object::add_atom_force(size_t i, const cvm::rvector& force) { if (m_has_fitting_force) { - m_ag->group_forces[i] = force; + m_ag->group_forces[i] += force; } else { // Apply the force directly if we don't use fitting (*m_ag)[i].apply_force(force); diff --git a/src/colvaratoms.h b/src/colvaratoms.h index bdc46cceb..5c96b307e 100644 --- a/src/colvaratoms.h +++ b/src/colvaratoms.h @@ -266,7 +266,7 @@ class colvarmodule::atom_group public: group_force_object(cvm::atom_group* ag); ~group_force_object(); - void set_atom_force(size_t i, const cvm::rvector& force); + void add_atom_force(size_t i, const cvm::rvector& force); private: cvm::atom_group* m_ag; cvm::atom_group* m_group_for_fit; diff --git a/src/colvarcomp_distances.cpp b/src/colvarcomp_distances.cpp index f56d0d35b..f297fe3db 100644 --- a/src/colvarcomp_distances.cpp +++ b/src/colvarcomp_distances.cpp @@ -1408,7 +1408,7 @@ void colvar::cartesian::apply_force(colvarvalue const &force) for (j = 0; j < dim; j++) { f[axes[j]] = force.vector1d_value[dim*ia + j]; } - ag_force.set_atom_force(ia, f); + ag_force.add_atom_force(ia, f); } } } diff --git a/src/colvarcomp_rotations.cpp b/src/colvarcomp_rotations.cpp index 7073b4230..12dd90e33 100644 --- a/src/colvarcomp_rotations.cpp +++ b/src/colvarcomp_rotations.cpp @@ -144,7 +144,7 @@ void colvar::orientation::apply_force(colvarvalue const &force) FQ[1] * dq0_2[1] + FQ[2] * dq0_2[2] + FQ[3] * dq0_2[3]; - ag_force.set_atom_force(ia, f_ia); + ag_force.add_atom_force(ia, f_ia); } } }