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