Warn about near-zero mass atoms in Colvars 58/4558/1
authorGiacomo Fiorin <giacomo.fiorin@gmail.com>
Sat, 8 Sep 2018 00:39:43 +0000 (20:39 -0400)
committerGiacomo Fiorin <giacomo.fiorin@gmail.com>
Sat, 8 Sep 2018 00:39:43 +0000 (20:39 -0400)
Change-Id: Ie686f3950cb94c19926e7ec6aeb8b05f900719f7

colvars/src/colvarproxy.h
src/colvarproxy_namd.C
src/colvarproxy_namd.h

index 9f636d8..3ff5f3c 100644 (file)
@@ -184,8 +184,7 @@ public:
   /// Get the mass of the given atom
   inline cvm::real get_atom_mass(int index) const
   {
-    cvm::real m = atoms_masses[index];
-    return ( m > 0. ? m : 1.0); // Avoid atoms with zero mass
+    return atoms_masses[index];
   }
 
   /// Get the charge of the given atom
index 22e1f6e..fce639f 100644 (file)
@@ -677,6 +677,22 @@ void colvarproxy_namd::clear_atom(int index)
 }
 
 
+void colvarproxy_namd::update_atom_properties(int index)
+{
+  Molecule *mol = Node::Object()->molecule;
+  // update mass
+  double const mass = mol->atommass(atoms_ids[index]);
+  if (mass <= 0.001) {
+    this->log("Warning: near-zero mass for atom "+
+              cvm::to_str(atoms_ids[index]+1)+
+              "; expect unstable dynamics if you apply forces to it.\n");
+  }
+  atoms_masses[index] = mass;
+  // update charge
+  atoms_charges[index] = mol->atomcharge(atoms_ids[index]);
+}
+
+
 cvm::rvector colvarproxy_namd::position_distance(cvm::atom_pos const &pos1,
                                                  cvm::atom_pos const &pos2)
   const
index 36e7bbb..1ca6a59 100644 (file)
@@ -244,14 +244,7 @@ public:
                     std::string const     &segment_id);
   void clear_atom(int index);
 
-  inline void update_atom_properties(int index)
-  {
-    Molecule *mol = Node::Object()->molecule;
-    // update mass
-    atoms_masses[index] = mol->atommass(atoms_ids[index]);
-    // update charge
-    atoms_charges[index] = mol->atomcharge(atoms_ids[index]);
-  }
+  void update_atom_properties(int index);
 
   cvm::rvector position_distance(cvm::atom_pos const &pos1,
                                  cvm::atom_pos const &pos2) const;