X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/33ee1f81e21dbb384b48c8083aff790ca313558e..c819c7a5996c18a6b1c5501c1984245840ddc8ca:/o815/o815.cpp diff --git a/o815/o815.cpp b/o815/o815.cpp index f078db3..648dbb3 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,7 +125,7 @@ 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() { @@ -142,6 +144,8 @@ void o815::mainLoop() { *out->log << ">" << endl << flush; Sim->_newParas(); + + Sim->resetConfig(); progress measProg(comargs.nmeas); @@ -236,6 +240,9 @@ void o815::parseArgs(int argc, char **argv, comoption specOps[]) { case 'W': comargs.outdir = optarg; break; + case 'X': + comargs.startconfig = optarg; + break; default: if ( opt != 0) { comoption* thisop = getOptionByVal(opt); @@ -274,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(); } @@ -338,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; +}