]> git.treefish.org Git - phys/latlib.git/commitdiff
...
authorAlex Schmidt <alex@treefish.org>
Wed, 19 Jun 2013 09:12:59 +0000 (11:12 +0200)
committerAlex Schmidt <alex@treefish.org>
Wed, 19 Jun 2013 09:12:59 +0000 (11:12 +0200)
configcache.cpp
hypercache.cpp
hypercache.h

index b6edc173fd26faea06606df901fd01b03754275f..4c7963d310b63740e4a051163352cc749fb6f699 100644 (file)
@@ -193,7 +193,6 @@ void configcache::readConfig(bool& readnewconfig, int& nequileft, vector<unsigne
       int iDidVirtualSkips;
 
       if( (!inFile.is_open()) && inFileIt == inFiles.end() ) {
       int iDidVirtualSkips;
 
       if( (!inFile.is_open()) && inFileIt == inFiles.end() ) {
-       cout << "RETURNING..." << endl;
        nequileft = nequileft_internal;
        return;
       }
        nequileft = nequileft_internal;
        return;
       }
@@ -223,8 +222,6 @@ void configcache::readConfig(bool& readnewconfig, int& nequileft, vector<unsigne
       if( inFile.is_open() ) 
        {
          if (doVirtualEquilibration) {
       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++) {
            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;
              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;
              }
                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;
                  nequileft_internal = NEQUI - openFileDesc.nequi;
              }
              nequileft_internal -= openFileDesc.nskip;
-             cout << "sadasd:" << nequileft_internal << endl;
              nequileft = nequileft_internal;
              return;
            }
              nequileft = nequileft_internal;
              return;
            }
index 1648a843cc83ff64e17d26ab0fbf44a70e5353e7..b2a0b256f4671ac59830a4e212f1c103f866a5a7 100644 (file)
@@ -10,6 +10,7 @@ vector<configcache*> hypercache::Os;
 int hypercache::NEQUI;
 int hypercache::NSKIP;
 int hypercache::nequileft;
 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, 
 
 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;
     (*osit)->setPara(parid, val);
 
   nequileft = NEQUI;
+  mostEquilibratedConfig.first = NEQUI;
 }
 
 void hypercache::finalize() {
 }
 
 void hypercache::finalize() {
@@ -76,7 +78,6 @@ bool hypercache::readC() {
   C->readConfig(readnewconfig_nonex, nequileftReadConfig_nonex, &parentConfigs);
 
   if (readnewconfig_nonex) {
   C->readConfig(readnewconfig_nonex, nequileftReadConfig_nonex, &parentConfigs);
 
   if (readnewconfig_nonex) {
-    cout << ":" << nequileftReadConfig_nonex << endl;
     nequileft = nequileftReadConfig_nonex;
     readAtLeastOneConfig = true;
   }
     nequileft = nequileftReadConfig_nonex;
     readAtLeastOneConfig = true;
   }
@@ -117,6 +118,22 @@ bool hypercache::readC() {
     free(tmpconfig);
   }
 
     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;
 }
 
   return readAtLeastOneConfig;
 }
 
index 79fe825884a2c0982553ed5b740a8d8d4f51674f..20ce840c7bd7e40cfba78207bff7a76221a8cfdd 100644 (file)
@@ -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);
   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; }
   }
 
   static int getNEquiLeft() { return nequileft; }
@@ -65,6 +66,8 @@ class hypercache {
   static int NEQUI;
   static int NSKIP;
   static int nequileft;
   static int NEQUI;
   static int NSKIP;
   static int nequileft;
+
+  static pair<int, char*> mostEquilibratedConfig;
 };
 
 #endif
 };
 
 #endif