]> git.treefish.org Git - phys/latlib.git/blob - o815/o815.h
467eca9030d8ffe7ea0940e01cb8ea65137d0cb4
[phys/latlib.git] / o815 / o815.h
1 #ifndef O815_H
2 #define O815_H
3
4 #include <string>
5 #include <vector>
6 #include <mpi.h>
7 #include <stdlib.h>
8
9 #include "latlib/paraq.h"
10 #include "latlib/writeout.h"
11 #include "latlib/hypercache.h"
12
13 using namespace std;
14
15 class obs;
16
17 class o815 {
18  public:
19
20   class obs {
21   public:
22     obs(const string& _obsid, const string& _datadesc, o815 *_O815, const int& _obsmemSize);
23     void finish();
24     void meas(bool loadedobs);
25     void start();
26     string getDataDesc() { return datadesc; };
27     int ocid;
28   private:
29     virtual void _meas(bool loadedobs)=0;
30     virtual void _finish()=0;
31     virtual void _start()=0;
32   protected:
33     o815 *O815;
34     char *obsMem;
35     string obsid, simid, datadesc;
36     ostream *out, *log;
37   };
38
39   class sim {
40   public:
41     sim(o815 *_O815, const int& _confmemSize);
42     void nextConfig();
43     bool toEquilibrate;
44     char *confMem;
45   private:
46     virtual void _reset()=0;
47     virtual void _makeSweep(int nsweep)=0;
48   protected:
49     o815 *O815;
50     ostream *log;
51     int nequi, nskip;
52   };
53
54   struct {
55     int nmeas;
56     int nskip;
57     int nequi;
58     int lsize[2];
59     pair<string,int> obscache;
60     pair<string,int> confcache;
61     string outdir;
62     bool idonly;
63     bool showjobnum;
64   } comargs;
65
66   o815(int argc, char **argv, const string& programid);
67   ~o815();
68   paraq *paraQ;
69   writeout *out;
70   vector<obs*> observables;
71   sim* Sim;
72   void mainLoop();
73   string headMaster();
74   void addPara(const string& paraid, const double& paraDefault);
75
76 private:
77   MPI_Status mpiStatus;
78   int numprocs, rank;
79   static void listArg(int *target, int tlen, char *listarg);
80   void parseArgs(int argc, char **argv);
81   string programid;
82   int nextParas();
83 };
84
85 #endif