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