Skip to content
Snippets Groups Projects
Commit 8c0513ba authored by sandipde's avatar sandipde
Browse files

Added lowmem option to Euclidean dissimilarity stuff to lower memory requirements

parent 5d0ff6aa
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,7 @@ namespace analysis { ...@@ -37,6 +37,7 @@ namespace analysis {
class EuclideanDissimilarityMatrix : public AnalysisWithDataCollection { class EuclideanDissimilarityMatrix : public AnalysisWithDataCollection {
private: private:
bool lowmem;
Matrix<double> dissimilarities; Matrix<double> dissimilarities;
public: public:
static void registerKeywords( Keywords& keys ); static void registerKeywords( Keywords& keys );
...@@ -56,22 +57,29 @@ PLUMED_REGISTER_ACTION(EuclideanDissimilarityMatrix,"EUCLIDEAN_DISSIMILARITIES") ...@@ -56,22 +57,29 @@ PLUMED_REGISTER_ACTION(EuclideanDissimilarityMatrix,"EUCLIDEAN_DISSIMILARITIES")
void EuclideanDissimilarityMatrix::registerKeywords( Keywords& keys ){ void EuclideanDissimilarityMatrix::registerKeywords( Keywords& keys ){
AnalysisWithDataCollection::registerKeywords( keys ); AnalysisWithDataCollection::registerKeywords( keys );
keys.reset_style("METRIC","atoms-1"); keys.use("FRAMES"); 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 ): EuclideanDissimilarityMatrix::EuclideanDissimilarityMatrix( const ActionOptions& ao ):
Action(ao), Action(ao),
AnalysisWithDataCollection(ao) AnalysisWithDataCollection(ao)
{ {
parseFlag("LOWMEM",lowmem);
if( lowmem ) log.printf(" lowering memory requirements \n");
} }
void EuclideanDissimilarityMatrix::performAnalysis(){ void EuclideanDissimilarityMatrix::performAnalysis(){
// Resize dissimilarities matrix and set all elements to zero // 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 ){ double EuclideanDissimilarityMatrix::getDissimilarity( const unsigned& iframe, const unsigned& jframe ){
plumed_dbg_assert( iframe<dissimilarities.nrows() && jframe<dissimilarities.ncols() ); plumed_dbg_assert( iframe<getNumberOfDataPoints() && jframe<getNumberOfDataPoints() );
if( dissimilarities(iframe,jframe)>0. ){ return dissimilarities(iframe,jframe); } if( !lowmem ){
if( dissimilarities(iframe,jframe)>0. ){ return dissimilarities(iframe,jframe); }
}
if( iframe!=jframe ){ if( iframe!=jframe ){
ReferenceConfiguration* myref1; ReferenceConfiguration* myref2; ReferenceConfiguration* myref1; ReferenceConfiguration* myref2;
if( mydata ){ myref1=AnalysisBase::getReferenceConfiguration(iframe,true); myref2=AnalysisBase::getReferenceConfiguration(jframe,true); } if( mydata ){ myref1=AnalysisBase::getReferenceConfiguration(iframe,true); myref2=AnalysisBase::getReferenceConfiguration(jframe,true); }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment