X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/4d1416455c49f0ba19954ca80a72b72f9dfcd33e..57120da66874b239e28824c9790a62c3556a489e:/o815/o815.cpp diff --git a/o815/o815.cpp b/o815/o815.cpp index cf461ba..4d6f047 100644 --- a/o815/o815.cpp +++ b/o815/o815.cpp @@ -2,6 +2,8 @@ #include +#include "latlib/progress.h" + o815::o815(int argc, char **argv, const string& _programid) { long timestamp; @@ -31,14 +33,6 @@ o815::o815(int argc, char **argv, const string& _programid) { exit(0); } - if( comargs.showjobnum ) { - for( int i=1; i<=paraQ->getTotalJobs(); i++ ) { - if( paraQ->getTotalJobs()%i == 0 ) cout << paraQ->getTotalJobs()/i << "@" << i << " "; - } - cout << endl; - exit(0); - } - if(rank==0) { timestamp = time(NULL); for(int idest=1; idestgetTotalJobs(); i++ ) { + if( paraQ->getTotalJobs()%i == 0 ) cout << paraQ->getTotalJobs()/i << "@" << i << " "; + } + cout << endl; + exit(0); + } + *out->log << "OBS: Starting main loop." << endl; - for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) { + for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) (*obsit)->start(); - } - - //while( nextParas() ) { - //} - - /* - for (int i=0; i<100; i++) { - for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) { - (*obsit)->meas(); - } - } - */ - for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) { - (*obsit)->finish(); + while( nextParas() ) { + *out->log << endl << "O815: < "; + for (vector::iterator parait = paraQ->allParaIds.begin(); parait != paraQ->allParaIds.end(); ++parait) + *out->log << *parait << "=" << (*paraQ)[*parait] << " "; + *out->log << ">" << endl << flush; + + progress measProg(comargs.nmeas); + + *out->log << "OBS: Starting measurement of observables:"; + for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) + *out->log << " " << (*obsit)->obsid; + *out->log << endl << flush; + + for( int imeas=0; imeas::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) { + if( hypercache::readO( (*obsit)->ocid ) != -1 ) { + if (!nextAlready) { + Sim->nextConfig(); + nextAlready = true; + } + (*obsit)->meas(false); + hypercache::writeO( (*obsit)->ocid ); + } + else + (*obsit)->meas(true); + } + while( measProg.madeStep(imeas) ) + *out->log << "O815: " << measProg.done()*100 << "% of measurements done." << endl << flush; + } + for (vector::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) + (*obsit)->finish(); } } @@ -150,6 +170,7 @@ o815::~o815() { if(rank==0) cout << "#end" << endl << flush; } + hypercache::finalize(); delete out; MPI_Finalize(); } @@ -157,16 +178,15 @@ o815::~o815() { int o815::nextParas() { if( paraQ->nextParas() ) { - /* - setB( (*paraQ)["beta"] ); - setK( (*paraQ)["kappa"] ); - setL( (*paraQ)["lambda"] ); - setM1( (*paraQ)["mu1"] ); - setM2( (*paraQ)["mu2"] ); - */ - + for (vector::iterator parait = paraQ->allParaIds.begin(); parait != paraQ->allParaIds.end(); ++parait) + hypercache::setPara(*parait, (*paraQ)[*parait]); return 1; } else return 0; } + +void o815::addPara(const string& paraid, const double& paraDefault) { + hypercache::addPara(paraid); + paraQ->setDefault(paraid, paraDefault); +}