]> git.treefish.org Git - phys/latlib.git/commitdiff
Implemented startconfig.
authorAlexander Schmidt <alex@treefish.org>
Fri, 5 Dec 2014 13:36:20 +0000 (14:36 +0100)
committerAlexander Schmidt <alex@treefish.org>
Fri, 5 Dec 2014 13:36:20 +0000 (14:36 +0100)
o815/CMakeLists.txt
o815/o815.cpp
o815/o815.h
o815/sim.cpp

index f941c103702ea2c515b9aa5a551307a0b87f47e7..60daa3b030a45dd8927b1b0cdc96f2fc3ec4e6f2 100644 (file)
@@ -14,7 +14,7 @@ endif()
 SET(CMAKE_BUILD_TYPE Release)
 
 add_library(o815 o815.cpp obs.cpp sim.cpp)
-target_link_libraries(o815 ${MPI_LIBRARIES} lat_paraq lat_writeout lat_hypercache lat_progress)
+target_link_libraries(o815 ${MPI_LIBRARIES} lat_paraq lat_writeout lat_hypercache lat_progress lat_datread)
 if(DEFINED ENV{MPI_DISABLED})
   set_target_properties(o815 PROPERTIES COMPILE_DEFINITIONS "MPI_DISABLED")
 endif()
index 36d9fb00877098956293a61945fc7bf627eddf35..648dbb3ce59d10827bee4baa7fc52a10bf78d8bf 100644 (file)
@@ -145,7 +145,7 @@ void o815::mainLoop() {
 
     Sim->_newParas();
 
-    Sim->_resetConfig();
+    Sim->resetConfig();
     
     progress measProg(comargs.nmeas);
 
index 05053871c1ca302e58625c46639b10e34d8fb4c0..0e2a611af71e064e8b55bb5b93577466dab5424d 100644 (file)
@@ -42,13 +42,16 @@ class o815 {
   class sim {
   public:
     sim(o815 *_O815, const int& _confmemSize);
+    ~sim ();
     void nextConfig();
     char *confMem;
     virtual void _newParas()=0;
-    virtual void _resetConfig()=0;
     int nequi, nskip;
+    void resetConfig();
   private:
     virtual void _makeSweep()=0;
+    virtual void _resetConfig()=0;
+    char *startConfiguration;
   protected:
     o815 *O815;
     ostream *log;
index ec1ca89bcbecf959148d5caffeaf47ec42dcf39a..70fe482316eca43eccf90075fed2e9a44081c9a5 100644 (file)
@@ -3,6 +3,8 @@
 #include "latlib/hypercache.h"
 #include "latlib/progress.h"
 
+#include "latlib/datread.h"
+
 o815::sim::sim(o815 *_O815, const int& _confmemSize) {
   O815 = _O815;
   log = O815->out->log;
@@ -10,6 +12,35 @@ o815::sim::sim(o815 *_O815, const int& _confmemSize) {
   nequi = O815->comargs.nequi;
   nskip = O815->comargs.nskip;
   confmemSize = confmemSize;
+
+  startConfiguration = NULL;
+  
+  if ( O815->comargs.startconfig != "" ) {
+    *log << "SIM: Fetching startconfig from " << O815->comargs.startconfig << endl;
+    
+    datread dataReader(confmemSize);
+    dataReader.openFile(O815->comargs.startconfig);
+    
+    if ( dataReader.fisopen() ) {
+      startConfiguration = new char[confmemSize];
+      
+      if ( dataReader.readFullBlock(startConfiguration) < 0 ) {
+       *log << "SIM: Error while reading config from " << O815->comargs.startconfig << endl;
+       delete[] startConfiguration;
+       startConfiguration = NULL;
+      }     
+    }
+    else {
+      *log << "SIM: Could not open startconfigfile " << O815->comargs.startconfig << endl;
+    }
+  }
+  
+}
+
+o815::sim::~sim ()
+{
+  if (startConfiguration != NULL)
+    delete[] startConfiguration;
 }
 
 void o815::sim::nextConfig() {
@@ -35,3 +66,10 @@ void o815::sim::nextConfig() {
     hypercache::writeC();
   }
 }
+
+void o815::sim::resetConfig() {
+  if ( startConfiguration != NULL )
+    memcpy(confMem, startConfiguration, confmemSize);
+  else
+    _resetConfig();
+}