From: Alex Schmidt <alex@treefish.org>
Date: Wed, 19 Jun 2013 09:12:59 +0000 (+0200)
Subject: ...
X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/commitdiff_plain/a477390b3aa6eea3a7d822a0499816eb0e2bf499?hp=6ad2fe3a6550b77888c46b17f81d8ab74406649d

...
---

diff --git a/configcache.cpp b/configcache.cpp
index b6edc17..4c7963d 100644
--- a/configcache.cpp
+++ b/configcache.cpp
@@ -193,7 +193,6 @@ void configcache::readConfig(bool& readnewconfig, int& nequileft, vector<unsigne
       int iDidVirtualSkips;
 
       if( (!inFile.is_open()) && inFileIt == inFiles.end() ) {
-	cout << "RETURNING..." << endl;
 	nequileft = nequileft_internal;
 	return;
       }
@@ -223,8 +222,6 @@ void configcache::readConfig(bool& readnewconfig, int& nequileft, vector<unsigne
       if( inFile.is_open() ) 
 	{
 	  if (doVirtualEquilibration) {
-	    cout << nequileft_internal << endl;
-
 	    if(log) *log << "CCACHE: Trying virtual equilibration." << endl << flush;
 	    doVirtualEquilibration = false;
 	    for (iDidVirtualSkips=0; iDidVirtualSkips < (NEQUI-openFileDesc.nequi)/openFileDesc.nskip; iDidVirtualSkips++) {
@@ -233,7 +230,6 @@ void configcache::readConfig(bool& readnewconfig, int& nequileft, vector<unsigne
 	      else if ( (NEQUI-openFileDesc.nequi) - (iDidVirtualSkips+1)*openFileDesc.nskip < nequileft_internal ) {
 		memcpy(configMem, tmpConfig, configSize);
 		nequileft_internal = NEQUI - openFileDesc.nequi - (iDidVirtualSkips+1)*openFileDesc.nskip;
-		cout << "blabla:" << nequileft_internal << endl;
 		readnewconfig = true;
 		firstUsedConfig = false;
 	      }
@@ -252,7 +248,6 @@ void configcache::readConfig(bool& readnewconfig, int& nequileft, vector<unsigne
 		  nequileft_internal = NEQUI - openFileDesc.nequi;
 	      }
 	      nequileft_internal -= openFileDesc.nskip;
-	      cout << "sadasd:" << nequileft_internal << endl;
 	      nequileft = nequileft_internal;
 	      return;
 	    }
diff --git a/hypercache.cpp b/hypercache.cpp
index 1648a84..b2a0b25 100644
--- a/hypercache.cpp
+++ b/hypercache.cpp
@@ -10,6 +10,7 @@ vector<configcache*> hypercache::Os;
 int hypercache::NEQUI;
 int hypercache::NSKIP;
 int hypercache::nequileft;
+pair<int, char*> hypercache::mostEquilibratedConfig;
 
 void hypercache::initCache(configcache **cache,
 			   const string& cacheid, const int& nequi, const int& nskip, const string& datadir, 
@@ -55,6 +56,7 @@ void hypercache::setPara(const string& parid, const double& val) {
     (*osit)->setPara(parid, val);
 
   nequileft = NEQUI;
+  mostEquilibratedConfig.first = NEQUI;
 }
 
 void hypercache::finalize() {
@@ -76,7 +78,6 @@ bool hypercache::readC() {
   C->readConfig(readnewconfig_nonex, nequileftReadConfig_nonex, &parentConfigs);
 
   if (readnewconfig_nonex) {
-    cout << ":" << nequileftReadConfig_nonex << endl;
     nequileft = nequileftReadConfig_nonex;
     readAtLeastOneConfig = true;
   }
@@ -117,6 +118,22 @@ bool hypercache::readC() {
     free(tmpconfig);
   }
 
+  /* storing most equilibrated config */
+  if ( nequileft < mostEquilibratedConfig.first && readAtLeastOneConfig ) {
+    *log << "HYPERCACHE: Storing a copy of so far most equilibrated config with nequileft = " << nequileft << endl << flush;
+    mostEquilibratedConfig.first = nequileft;
+    memcpy(mostEquilibratedConfig.second, C->getConfigMem(), C->getConfigSize());
+  }
+
+  
+  /* injecting back most equilibrated config if nothing could be used anymore */
+  if ( nequileft > 0 && mostEquilibratedConfig.first < nequileft ) {
+    *log << "HYPERCACHE: Injecting back most equilibrated stored config with nequileft = " << mostEquilibratedConfig.first << endl << flush;
+    nequileft = mostEquilibratedConfig.first;
+    memcpy(C->getConfigMem(), mostEquilibratedConfig.second, C->getConfigSize());
+    readAtLeastOneConfig = false;
+  }
+
   return readAtLeastOneConfig;
 }
 
diff --git a/hypercache.h b/hypercache.h
index 79fe825..20ce840 100644
--- a/hypercache.h
+++ b/hypercache.h
@@ -19,6 +19,7 @@ class hypercache {
   static void initC(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, 
 		    char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL, ostream *_log=NULL) {
     initCache(&C, cacheid, nequi, nskip, datadir, configmem, configMemSize, cachemode, _log);
+    mostEquilibratedConfig.second = new char[configMemSize];
   }
 
   static int getNEquiLeft() { return nequileft; }
@@ -65,6 +66,8 @@ class hypercache {
   static int NEQUI;
   static int NSKIP;
   static int nequileft;
+
+  static pair<int, char*> mostEquilibratedConfig;
 };
 
 #endif