From 8c0513ba8ece11602a9d540845c71db02f0b0fc1 Mon Sep 17 00:00:00 2001
From: sandipde <1sandipde@gmail.com>
Date: Thu, 18 Aug 2016 14:20:04 +0200
Subject: [PATCH] Added lowmem option to Euclidean dissimilarity stuff to lower
 memory requirements

---
 src/analysis/EuclideanDissimilarityMatrix.cpp | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/analysis/EuclideanDissimilarityMatrix.cpp b/src/analysis/EuclideanDissimilarityMatrix.cpp
index 60a5903e5..4ce620338 100644
--- a/src/analysis/EuclideanDissimilarityMatrix.cpp
+++ b/src/analysis/EuclideanDissimilarityMatrix.cpp
@@ -37,6 +37,7 @@ namespace analysis {
 
 class EuclideanDissimilarityMatrix : public AnalysisWithDataCollection {
 private:
+  bool lowmem;
   Matrix<double> dissimilarities;
 public:
   static void registerKeywords( Keywords& keys );
@@ -56,22 +57,29 @@ PLUMED_REGISTER_ACTION(EuclideanDissimilarityMatrix,"EUCLIDEAN_DISSIMILARITIES")
 void EuclideanDissimilarityMatrix::registerKeywords( Keywords& keys ){
   AnalysisWithDataCollection::registerKeywords( keys );
   keys.reset_style("METRIC","atoms-1"); keys.use("FRAMES");
+  keys.addFlag("LOWMEM",false,"lower the memory requirements of the calculation");
 }
 
 EuclideanDissimilarityMatrix::EuclideanDissimilarityMatrix( const ActionOptions& ao ):
 Action(ao),
 AnalysisWithDataCollection(ao)
 {
+  parseFlag("LOWMEM",lowmem);
+  if( lowmem ) log.printf("  lowering memory requirements \n");
 }
 
 void EuclideanDissimilarityMatrix::performAnalysis(){
   // Resize dissimilarities matrix and set all elements to zero
-  dissimilarities.resize( getNumberOfDataPoints(), getNumberOfDataPoints() ); dissimilarities=0;
+  if( !lowmem ){
+     dissimilarities.resize( getNumberOfDataPoints(), getNumberOfDataPoints() ); dissimilarities=0;
+  }
 }
 
 double EuclideanDissimilarityMatrix::getDissimilarity( const unsigned& iframe, const unsigned& jframe ){
-  plumed_dbg_assert( iframe<dissimilarities.nrows() && jframe<dissimilarities.ncols() );
-  if( dissimilarities(iframe,jframe)>0. ){ return dissimilarities(iframe,jframe); }
+  plumed_dbg_assert( iframe<getNumberOfDataPoints() && jframe<getNumberOfDataPoints() );
+  if( !lowmem ){
+      if( dissimilarities(iframe,jframe)>0. ){ return dissimilarities(iframe,jframe); }
+  }
   if( iframe!=jframe ){
      ReferenceConfiguration* myref1; ReferenceConfiguration* myref2; 
      if( mydata ){ myref1=AnalysisBase::getReferenceConfiguration(iframe,true); myref2=AnalysisBase::getReferenceConfiguration(jframe,true); }
-- 
GitLab