X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/594f56b186b5d2f5e25293d6952c9325576aa080..da120f552639e7e742161a2a4d6f88ca5277df8e:/o815/o815.cpp?ds=inline diff --git a/o815/o815.cpp b/o815/o815.cpp index 17581ec..36d9fb0 100644 --- a/o815/o815.cpp +++ b/o815/o815.cpp @@ -27,7 +27,8 @@ o815::o815(int argc, char **argv, const string& _programid, comoption specOps[], comargs.outdir=""; comargs.idonly = false; comargs.showjobnum = false; - + comargs.startconfig = ""; + #ifndef MPI_DISABLED MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); @@ -37,16 +38,17 @@ o815::o815(int argc, char **argv, const string& _programid, comoption specOps[], rank = 0; #endif - addComOption("lsize", required_argument, NULL, 'L', "define lattice size", "xsize:tsize"); - addComOption("nmeas", required_argument, NULL, 'N', "set number of measurements", "nmeas"); - addComOption("skip", required_argument, NULL, 'S', "set number of skips between configs", "nskip"); - addComOption("nequi", required_argument, NULL, 'E', "set number of equilibrations", "nequi"); - addComOption("ocache", required_argument, NULL, 'O', "set observable cache (mode=oo|ro|wo|rw)", "dir:mode"); - addComOption("ccache", required_argument, NULL, 'C', "set config cache (mode=oo|ro|wo|rw)", "dir:mode"); - addComOption("write", required_argument, NULL, 'W', "data writeout directory", "dir"); - addComOption("idonly", no_argument, &comargs.idonly, 'I', "show output-id only", ""); - addComOption("jobnum", no_argument, &comargs.showjobnum, 'J', "show jobnumber only", ""); - + addComOption("lsize", required_argument, NULL, 'L', "define lattice size", "xsize:tsize"); + addComOption("nmeas", required_argument, NULL, 'N', "set number of measurements", "nmeas"); + addComOption("skip", required_argument, NULL, 'S', "set number of skips between configs", "nskip"); + addComOption("nequi", required_argument, NULL, 'E', "set number of equilibrations", "nequi"); + addComOption("ocache", required_argument, NULL, 'O', "set observable cache (mode=oo|ro|wo|rw)", "dir:mode"); + addComOption("ccache", required_argument, NULL, 'C', "set config cache (mode=oo|ro|wo|rw)", "dir:mode"); + addComOption("write", required_argument, NULL, 'W', "data writeout directory", "dir"); + addComOption("idonly", no_argument, &comargs.idonly, 'I', "show output-id only", ""); + addComOption("jobnum", no_argument, &comargs.showjobnum, 'J', "show jobnumber only", ""); + addComOption("startconfig", required_argument, NULL, 'X', "read start config from file", "startconfigfile"); + vector::iterator lastO815Opt = comOptions.end()-1; if (specOps != NULL) @@ -111,7 +113,7 @@ void o815::postParaInit() { long timestamp; if(comargs.idonly) { - cout << programid << headMaster() << endl << flush; + cout << programid << headMaster(true) << endl << flush; exit(0); } @@ -123,12 +125,15 @@ void o815::postParaInit() { exit(0); } - out = new writeout(comargs.outdir, programid+headMaster(), rank, numprocs); + out = new writeout(comargs.outdir, programid+headMaster(true), rank, numprocs); } void o815::mainLoop() { *out->log << "OBS: Starting main loop." << endl; + if ( observables.size() == 0 ) + *out->log << "O815: Running in 0-observable-mode." << endl; + for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) (*obsit)->start(); @@ -139,6 +144,8 @@ void o815::mainLoop() { *out->log << ">" << endl << flush; Sim->_newParas(); + + Sim->_resetConfig(); progress measProg(comargs.nmeas); @@ -149,6 +156,7 @@ void o815::mainLoop() { for( int imeas=0; imeas::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) { bool readnewObs; int nequileftNewObs; @@ -165,9 +173,12 @@ void o815::mainLoop() { } (*obsit)->meas(false, imeas); hypercache::writeO( (*obsit)->ocid ); - } - + } } + + if ( observables.size() == 0 ) + Sim->nextConfig(); + while( measProg.madeStep(imeas) ) *out->log << "O815: " << measProg.done()*100 << "% of measurements done." << endl << flush; } @@ -226,9 +237,12 @@ void o815::parseArgs(int argc, char **argv, comoption specOps[]) { case 'C': readCacheArgs(optarg, comargs.confcache.first, comargs.confcache.second); break; - case 'w': + case 'W': comargs.outdir = optarg; break; + case 'X': + comargs.startconfig = optarg; + break; default: if ( opt != 0) { comoption* thisop = getOptionByVal(opt); @@ -267,12 +281,16 @@ void o815::listArg(int *target, int tlen, char *listarg) { } } -string o815::headMaster() +string o815::headMaster(bool hashedrange) { stringstream hm; - hm << "-L" << comargs.lsize[0] << "_" << comargs.lsize[1] << "-E" << comargs.nequi << "-S" << comargs.nskip << "-N" << comargs.nmeas - << paraQ->rangeString(); + hm << "_L" << comargs.lsize[0] << "x" << comargs.lsize[1] << "_E" << comargs.nequi << "_S" << comargs.nskip << "_N" << comargs.nmeas; + + if( ! hashedrange ) + hm << paraQ->rangeString(); + else + hm << "_" << hash( paraQ->rangeString() ); return hm.str(); } @@ -331,3 +349,13 @@ void o815::readCacheArgs(const string& arg, string& cachedir, int& cachemode) cachedir = arg.substr( 0, arg.rfind(":") ); } + +unsigned long o815::hash(const string& str) +{ + unsigned long hash = 5381; + + for(string::const_iterator it=str.begin();it!=str.end();it++) + hash = ((hash << 5) + hash) + *it; /* hash * 33 + character */ + + return hash; +}