]> git.treefish.org Git - phys/latlib.git/commitdiff
...
authorAlex Schmidt <alex@treefish.org>
Thu, 18 Apr 2013 18:32:50 +0000 (20:32 +0200)
committerAlex Schmidt <alex@treefish.org>
Thu, 18 Apr 2013 18:32:50 +0000 (20:32 +0200)
o815/o815.cpp
o815/o815.h
o815/obs.cpp

index 9cd3f7b4a78d4c79155c1c3621e99fe828a1b976..29f5fd3c9830d3cf56996b410528c72969ac9e57 100644 (file)
@@ -2,6 +2,8 @@
 
 #include <sstream>
 
+#include "latlib/progress.h"
+
 o815::o815(int argc, char **argv, const string& _programid) {
   long timestamp;
 
@@ -57,18 +59,35 @@ void o815::mainLoop() {
     (*obsit)->start();
 
   while( nextParas() ) {
+    *out->log << endl << "O815: < ";
+    for (vector<string>::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 measurements." << endl << flush;
+
+    for( int imeas=0; imeas<comargs.nmeas; imeas++ ) {
+      bool nextAlready = false;
+      for (vector<obs*>::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<obs*>::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit)
+      (*obsit)->finish();
   }
-  
-  /*
-  for (int i=0; i<100; i++) {
-    for (vector<obs*>::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit) {
-      (*obsit)->meas();
-    } 
-  }
-  */
-
-  for (vector<obs*>::iterator obsit = observables.begin(); obsit != observables.end(); ++obsit)
-    (*obsit)->finish();
 }
 
 void o815::parseArgs(int argc, char **argv) {
@@ -148,6 +167,7 @@ o815::~o815() {
     if(rank==0)
       cout << "#end" << endl << flush;
   }
+  hypercache::finalize();
   delete out;
   MPI_Finalize();
 }
@@ -162,3 +182,8 @@ int o815::nextParas()
   else
     return 0;
 }
+
+void o815::addPara(const string& paraid, const double& paraDefault) {
+  hypercache::addPara(paraid);
+  paraQ->setDefault(paraid, paraDefault);
+}
index 33693b002aaceba341c488662d1666e10990788b..467eca9030d8ffe7ea0940e01cb8ea65137d0cb4 100644 (file)
@@ -21,9 +21,10 @@ class o815 {
   public:
     obs(const string& _obsid, const string& _datadesc, o815 *_O815, const int& _obsmemSize);
     void finish();
-    void meas();
+    void meas(bool loadedobs);
     void start();
     string getDataDesc() { return datadesc; };
+    int ocid;
   private:
     virtual void _meas(bool loadedobs)=0;
     virtual void _finish()=0;
@@ -33,7 +34,6 @@ class o815 {
     char *obsMem;
     string obsid, simid, datadesc;
     ostream *out, *log;
-    int ocid;
   };
 
   class sim {
@@ -71,6 +71,7 @@ class o815 {
   sim* Sim;
   void mainLoop();
   string headMaster();
+  void addPara(const string& paraid, const double& paraDefault);
 
 private:
   MPI_Status mpiStatus;
index 70aa8b646a6c116b575c75a09bfc7bc16c224f4b..ee785a73a75a3597d8a2b40b29149e39e7a5279e 100644 (file)
@@ -18,8 +18,8 @@ void o815::obs::start() {
   _start();
 }
 
-void o815::obs::meas() {
-  _meas(true);
+void o815::obs::meas(bool loadedobs) {
+  _meas(loadedobs);
 }
 
 o815::obs::obs(const string& _obsid, const string& _datadesc, o815 *_O815, const int& obsmemSize) {