NAMD
Output.h
Go to the documentation of this file.
1 
7 /*
8  This object outputs the data collected on the master node
9 */
10 
11 #ifndef OUTPUT_H
12 #define OUTPUT_H
13 
14 #include "common.h"
15 #include <string>
16 #include <map>
17 
18 class Vector;
19 class FloatVector;
20 class Lattice;
21 class ReplicaDcdInitMsg;
22 class ReplicaDcdDataMsg;
23 
24 // semaphore "steps", must be negative
25 #define FILE_OUTPUT -1
26 #define END_OF_RUN -2
27 #define EVAL_MEASURE -3
28 #define FORCE_OUTPUT -4
29 
30 #define OUTPUT_SINGLE_FILE 1
31 #define OUTPUT_MAGIC_NUMBER 123456
32 #define OUTPUT_FILE_VERSION 1.00
33 
34 
35 class Output
36 {
37 
38 private:
39 
40 friend class SimParameters;
41 
42  // output coords to dcd file
43  // Pass non-NULL Lattice to include unit cell in the timesteps.
44  int output_dcdfile(int, int, FloatVector *, const Lattice *, int dcdIndex);
45  void output_veldcdfile(int, int, Vector *); // output velocities to
46  // dcd file
47  void output_forcedcdfile(int, int, Vector *); // output forces to
48  // dcd file
49 
50  void output_restart_coordinates(Vector *, int, int);
51  // output coords to
52  // restart file
53  void output_restart_velocities(int, int, Vector *);
54  // output velocities to
55  // restart file
56  void output_final_coordinates(Vector *, int, int);// output final coordinates
57  void output_final_velocities(int, int, Vector *); // output final coordinates
58  void output_forces(int, int, Vector *); // output forces
59 
60  void scale_vels(Vector *, int, Real); // scale velocity vectors before output
61  void write_binary_file(char *, int, Vector *); // Write a binary restart file with
62  // coordinates or velocities
63 
64  struct replicaDcdFile {
65  std::string filename;
66  int fileid;
67  replicaDcdFile() : fileid(0) { ; }
68  };
69  std::map<int,replicaDcdFile> replicaDcdFiles;
70  std::map<std::pair<int,uint16_t>,replicaDcdFile> replicaDcdSelectFiles;
71  int replicaDcdActive;
72  int replicaDcdIndex;
73 
74 public :
75  Output(); // Constructor
76  ~Output(); // Destructor
77  void energy(int, BigReal *); // Output energies
78 
79  static std::pair<int,int> coordinateNeeded(int);
80  void coordinate(int, int, Vector *, FloatVector *, Lattice &);
81  // Produce appropriate
82  // coordinate output for
83  // the current timestep
84  static int velocityNeeded(int);
85  void velocity(int, int, Vector *); // Produce appropriate velocity
86  // output for the current
87  // timestep
88  static int forceNeeded(int);
89  void force(int, int, Vector *); // Produce appropriate force
90  // output for the current
91  // timestep
92 
93  void replicaDcdOff() { replicaDcdActive = 0; }
94  void setReplicaDcdIndex(int index);
95  void replicaDcdInit(int index, const char *filename);
96  void replicaDcdSelectInit(int index, const char *tag, const char *filename);
99 };
100 
101 #ifdef MEM_OPT_VERSION
102 class ParOutput{
103 private:
104  void output_veldcdfile_master(int timestep, int n);
105  void output_veldcdfile_slave(int timestep, int fID, int tID, Vector *vecs);
106  void output_restart_velocities_master(int timestep, int n);
107  void output_restart_velocities_slave(int timestep, int fID, int tID, Vector *vecs, int64 offset);
108  void output_final_velocities_master(int n);
109  void output_final_velocities_slave(int fID, int tID, Vector *vecs, int64 offset);
110 
111  void output_forcedcdfile_master(int timestep, int n);
112  void output_forcedcdfile_slave(int timestep, int fID, int tID, Vector *vecs);
113  void output_forces_master(int n);
114  void output_forces_slave(int fID, int tID, Vector *vecs, int64 offset);
115 
116  void output_dcdfile_master(int timestep, int n, const Lattice *lat);
117  void output_dcdfile_slave(int timestep, int fID, int tID, FloatVector *fvecs);
118  void output_restart_coordinates_master(int timestep, int n);
119  void output_restart_coordinates_slave(int timestep, int fID, int tID, Vector *vecs, int64 offset);
120  void output_final_coordinates_master(int n);
121  void output_final_coordinates_slave(int fID, int tID, Vector *vecs, int64 offset);
122 
123  void write_binary_file_master(char *fname, int n);
124  void write_binary_file_slave(char *fname, int fID, int tID, Vector *vecs, int64 offset);
125 
126  #if !OUTPUT_SINGLE_FILE
127  char *buildFileName(OUTPUTFILETYPE type, int timestep=-9999);
128  #endif
129 
130  int dcdFileID;
131  Bool dcdFirst;
132  float *dcdX, *dcdY, *dcdZ;
133 
134  int veldcdFileID;
135  Bool veldcdFirst;
136  float *veldcdX, *veldcdY, *veldcdZ;
137 
138  int forcedcdFileID;
139  Bool forcedcdFirst;
140  float *forcedcdX, *forcedcdY, *forcedcdZ;
141 
142  int outputID; //the sequence of this output
143 
144 public:
145  ParOutput(int oid=-1){
146  dcdFileID=veldcdFileID=-99999;
147  forcedcdFileID=-99999;
148  dcdFirst=veldcdFirst=TRUE;
149  forcedcdFirst=TRUE;
150  dcdX=dcdY=dcdZ=veldcdX=veldcdY=veldcdZ=NULL;
151  forcedcdX=forcedcdY=forcedcdZ=NULL;
152  outputID=oid;
153  }
154  ~ParOutput() {}
155 
156  void velocityMaster(int timestep, int n);
157  void velocitySlave(int timestep, int fID, int tID, Vector *vecs);
158 
159  void forceMaster(int timestep, int n);
160  void forceSlave(int timestep, int fID, int tID, Vector *vecs);
161 
162  void coordinateMaster(int timestep, int n, Lattice &lat);
163  void coordinateSlave(int timestep, int fID, int tID, Vector *vecs, FloatVector *fvecs);
164 };
165 #endif
166 
167 #endif
168 
static int velocityNeeded(int)
Definition: Output.C:500
void setReplicaDcdIndex(int index)
Definition: Output.C:838
Definition: Vector.h:72
~Output()
Definition: Output.C:179
float Real
Definition: common.h:118
void replicaDcdOff()
Definition: Output.h:93
void coordinate(int, int, Vector *, FloatVector *, Lattice &)
Definition: Output.C:345
void replicaDcdSelectInit(int index, const char *tag, const char *filename)
Definition: Output.C:855
static int forceNeeded(int)
Definition: Output.C:595
void recvReplicaDcdInit(ReplicaDcdInitMsg *msg)
Definition: Output.C:869
Definition: Output.h:35
void replicaDcdInit(int index, const char *filename)
Definition: Output.C:843
int Bool
Definition: common.h:142
void velocity(int, int, Vector *)
Definition: Output.C:531
void recvReplicaDcdData(ReplicaDcdDataMsg *msg)
Definition: Output.C:880
static std::pair< int, int > coordinateNeeded(int)
Definition: Output.C:199
void energy(int, BigReal *)
OUTPUTFILETYPE
Definition: common.h:247
Output()
Definition: Output.C:169
int64_t int64
Definition: common.h:39
#define TRUE
Definition: common.h:128
void force(int, int, Vector *)
Definition: Output.C:621
double BigReal
Definition: common.h:123