From 0a37e466a58aa563459e914e573e5cc471e8e456 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 27 Jan 2016 15:06:03 +0100
Subject: [PATCH] Added cmd("readInputLine")

Allows to feed plumed with a single input line directly
from the MD code.
---
 src/core/PlumedMain.cpp | 15 ++++++++++++++-
 src/core/PlumedMain.h   |  7 +++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/core/PlumedMain.cpp b/src/core/PlumedMain.cpp
index ba0c1c535..12d1784d8 100644
--- a/src/core/PlumedMain.cpp
+++ b/src/core/PlumedMain.cpp
@@ -47,7 +47,7 @@
 
 using namespace std;
 
-enum { SETBOX, SETPOSITIONS, SETMASSES, SETCHARGES, SETPOSITIONSX, SETPOSITIONSY, SETPOSITIONSZ, SETVIRIAL, SETENERGY, SETFORCES, SETFORCESX, SETFORCESY, SETFORCESZ, CALC, PREPAREDEPENDENCIES, SHAREDATA, PREPARECALC, PERFORMCALC, SETSTEP, SETSTEPLONG, SETATOMSNLOCAL, SETATOMSGATINDEX, SETATOMSFGATINDEX, SETATOMSCONTIGUOUS, CREATEFULLLIST, GETFULLLIST, CLEARFULLLIST, READ, CLEAR, GETAPIVERSION, INIT, SETREALPRECISION, SETMDLENGTHUNITS, SETMDENERGYUNITS, SETMDTIMEUNITS, SETMDCHARGEUNITS, SETMDMASSUNITS, SETNATURALUNITS, SETNOVIRIAL, SETPLUMEDDAT, SETMPICOMM, SETMPIFCOMM, SETMPIMULTISIMCOMM, SETNATOMS, SETTIMESTEP, SETMDENGINE, SETLOG, SETLOGFILE, SETSTOPFLAG, GETEXCHANGESFLAG, SETEXCHANGESSEED, SETNUMBEROFREPLICAS, GETEXCHANGESLIST, RUNFINALJOBS, ISENERGYNEEDED, GETBIAS, SETKBT, SETRESTART };
+enum { SETBOX, SETPOSITIONS, SETMASSES, SETCHARGES, SETPOSITIONSX, SETPOSITIONSY, SETPOSITIONSZ, SETVIRIAL, SETENERGY, SETFORCES, SETFORCESX, SETFORCESY, SETFORCESZ, CALC, PREPAREDEPENDENCIES, SHAREDATA, PREPARECALC, PERFORMCALC, SETSTEP, SETSTEPLONG, SETATOMSNLOCAL, SETATOMSGATINDEX, SETATOMSFGATINDEX, SETATOMSCONTIGUOUS, CREATEFULLLIST, GETFULLLIST, CLEARFULLLIST, READ, CLEAR, GETAPIVERSION, INIT, SETREALPRECISION, SETMDLENGTHUNITS, SETMDENERGYUNITS, SETMDTIMEUNITS, SETMDCHARGEUNITS, SETMDMASSUNITS, SETNATURALUNITS, SETNOVIRIAL, SETPLUMEDDAT, SETMPICOMM, SETMPIFCOMM, SETMPIMULTISIMCOMM, SETNATOMS, SETTIMESTEP, SETMDENGINE, SETLOG, SETLOGFILE, SETSTOPFLAG, GETEXCHANGESFLAG, SETEXCHANGESSEED, SETNUMBEROFREPLICAS, GETEXCHANGESLIST, RUNFINALJOBS, ISENERGYNEEDED, GETBIAS, SETKBT, SETRESTART, READINPUTLINE };
 
 namespace PLMD{
 
@@ -137,6 +137,7 @@ PlumedMain::PlumedMain():
   word_map["getBias"]=GETBIAS;
   word_map["setKbT"]=SETKBT;
   word_map["setRestart"]=SETRESTART;
+  word_map["readInputLine"]=READINPUTLINE;
 }
 
 PlumedMain::~PlumedMain(){
@@ -297,6 +298,11 @@ void PlumedMain::cmd(const std::string & word,void*val){
         if(val)readInputFile(static_cast<char*>(val));
         else   readInputFile("plumed.dat");
         break;
+      case READINPUTLINE:
+        CHECK_INIT(initialized,word);
+        CHECK_NULL(val,word);
+        readInputLine(static_cast<char*>(val));
+        break;
       case CLEAR:
         CHECK_INIT(initialized,word);
         actionSet.clearDelete();
@@ -533,6 +539,13 @@ void PlumedMain::readInputFile(std::string str){
   pilots=actionSet.select<ActionPilot*>();
 }
 
+void PlumedMain::readInputLine(const std::string & str){
+  plumed_assert(initialized);
+  if(str.empty()) return;
+  std::vector<std::string> words=Tools::getWords(str);
+  readInputWords(words);
+}
+
 void PlumedMain::readInputWords(const std::vector<std::string> & words){
   plumed_assert(initialized);
   if(words.empty())return;
diff --git a/src/core/PlumedMain.h b/src/core/PlumedMain.h
index d66fd3c3f..7cfa1e528 100644
--- a/src/core/PlumedMain.h
+++ b/src/core/PlumedMain.h
@@ -196,6 +196,13 @@ public:
 */
   void readInputWords(const std::vector<std::string> &  str);
 
+/**
+  Read an input string.
+  \param str name of the string
+  At variance with readInputWords(), this is splitting the string into words
+*/
+  void readInputLine(const std::string & str);
+
 /**
   Initialize the object.
   Should be called once.
-- 
GitLab