From fba71ad4ea8a7477a02f8d8b1bee682ce2eebb21 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 28 Jun 2017 08:10:41 +0200
Subject: [PATCH] Fix #251

Since isnan() is only available in c++11, I prefer not to backport
this so v2.3
---
 src/vatom/COM.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/vatom/COM.cpp b/src/vatom/COM.cpp
index 9e9ac4890..63fd49e69 100644
--- a/src/vatom/COM.cpp
+++ b/src/vatom/COM.cpp
@@ -23,6 +23,7 @@
 #include "ActionRegister.h"
 #include "core/PlumedMain.h"
 #include "core/Atoms.h"
+#include <cmath>
 
 using namespace std;
 
@@ -111,7 +112,16 @@ void COM::calculate() {
   if(!nopbc) makeWhole();
   double mass(0.0);
   vector<Tensor> deriv(getNumberOfAtoms());
-  for(unsigned i=0; i<getNumberOfAtoms(); i++) mass+=getMass(i);
+  for(unsigned i=0; i<getNumberOfAtoms(); i++) {
+    double m=getMass(i);
+    if(isnan(m)) {
+      error(
+        "You are trying to compute a COM but masses are not known.\n"
+        "        If you are using plumed driver, please use the --mc option"
+      );
+    }
+    mass+=m;
+  }
   if( plumed.getAtoms().chargesWereSet() ) {
     double charge(0.0);
     for(unsigned i=0; i<getNumberOfAtoms(); i++) charge+=getCharge(i);
-- 
GitLab