X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/4d1416455c49f0ba19954ca80a72b72f9dfcd33e..f46daea04f594f9f386ac6514733ec1eff860462:/o815/sim.cpp?ds=sidebyside diff --git a/o815/sim.cpp b/o815/sim.cpp index 2e68ae2..4e885b5 100644 --- a/o815/sim.cpp +++ b/o815/sim.cpp @@ -3,31 +3,55 @@ #include "latlib/hypercache.h" #include "latlib/progress.h" -o815::sim::sim(o815 *_O815, const int& confmemSize) { +o815::sim::sim(o815 *_O815, const int& _confmemSize) { O815 = _O815; log = O815->out->log; - hypercache::initC(O815->programid, O815->comargs.nequi, O815->comargs.nskip, O815->comargs.confcache.first, &confMem, confmemSize, O815->comargs.confcache.second, log); + hypercache::initC(O815->programid, O815->comargs.nequi, O815->comargs.nskip, O815->comargs.confcache.first, &confMem, _confmemSize, O815->comargs.confcache.second, log); toEquilibrate = true; nequi = O815->comargs.nequi; nskip = O815->comargs.nskip; + confmemSize = confmemSize; } void o815::sim::nextConfig() { int nequileft = hypercache::readC(); if ( nequileft != -1 ) { - if(toEquilibrate) { + /* try to use excluded config-file for equilibration */ + if (toEquilibrate && hypercache::CFilesLeft() > 0) { + int exnequileft; + char *tmpconfig = (char*) malloc(confmemSize); + + memcpy (tmpconfig, confMem, confmemSize); + exnequileft = hypercache::read1CForEqui(); + + if (exnequileft < nequileft) { + *log << "SIM: Found suitable excluded config-file configuration for equilibration." << endl << flush; + nequileft = exnequileft; + } + else { + *log << "SIM: Could not find suitable excluded config-file configuration for equilibration." << endl << flush; + memcpy (confMem, tmpconfig, confmemSize); + } + + free(tmpconfig); + } + + if(toEquilibrate && nequileft > 0) { _reset(); *log << "SIM: Starting equilibration." << endl << flush; if (nequileft != nequi) *log << "SIM: " << nequileft << " of " << nequi << " equilibration steps left after virtual equilibration." << endl << flush; progress equiProg(nequileft); for( int iequi=0; iequi