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 
41 };
42 
43 class Output
44 {
45 
46 private:
47 
48 friend class SimParameters;
49 
50  // output coords to dcd file
51  // Pass non-NULL Lattice to include unit cell in the timesteps.
52  int output_dcdfile(int, int, FloatVector *, const Lattice *);
53  void output_veldcdfile(int, int, Vector *); // output velocities to
54  // dcd file
55  void output_forcedcdfile(int, int, Vector *); // output forces to
56  // dcd file
57 
58  void output_restart_coordinates(Vector *, int, int);
59  // output coords to
60  // restart file
61  void output_restart_velocities(int, int, Vector *);
62  // output velocities to
63  // restart file
64  void output_final_coordinates(Vector *, int, int);// output final coordinates
65  void output_final_velocities(int, int, Vector *); // output final coordinates
66  void output_forces(int, int, Vector *); // output forces
67 
68  void scale_vels(Vector *, int, Real); // scale velocity vectors before output
69  void write_binary_file(char *, int, Vector *); // Write a binary restart file with
70  // coordinates or velocities
71 
72  struct replicaDcdFile {
73  std::string filename;
74  int fileid;
75  replicaDcdFile() : fileid(0) { ; }
76  };
77  std::map<int,replicaDcdFile> replicaDcdFiles;
78  int replicaDcdActive;
79  int replicaDcdIndex;
80 
81 public :
82  Output(); // Constructor
83  ~Output(); // Destructor
84  void energy(int, BigReal *); // Output energies
85 
86  static int coordinateNeeded(int);
87  void coordinate(int, int, Vector *, FloatVector *, Lattice &);
88  // Produce appropriate
89  // coordinate output for
90  // the current timestep
91  static int velocityNeeded(int);
92  void velocity(int, int, Vector *); // Produce appropriate velocity
93  // output for the current
94  // timestep
95  static int forceNeeded(int);
96  void force(int, int, Vector *); // Produce appropriate force
97  // output for the current
98  // timestep
99 
100  void replicaDcdOff() { replicaDcdActive = 0; }
101  void setReplicaDcdIndex(int index);
102  void replicaDcdInit(int index, const char *filename);
105 };
106 
107 #ifdef MEM_OPT_VERSION
108 class ParOutput{
109 private:
110  void output_veldcdfile_master(int timestep, int n);
111  void output_veldcdfile_slave(int timestep, int fID, int tID, Vector *vecs);
112  void output_restart_velocities_master(int timestep, int n);
113  void output_restart_velocities_slave(int timestep, int fID, int tID, Vector *vecs, int64 offset);
114  void output_final_velocities_master(int n);
115  void output_final_velocities_slave(int fID, int tID, Vector *vecs, int64 offset);
116 
117  void output_forcedcdfile_master(int timestep, int n);
118  void output_forcedcdfile_slave(int timestep, int fID, int tID, Vector *vecs);
119  void output_forces_master(int n);
120  void output_forces_slave(int fID, int tID, Vector *vecs, int64 offset);
121 
122  void output_dcdfile_master(int timestep, int n, const Lattice *lat);
123  void output_dcdfile_slave(int timestep, int fID, int tID, FloatVector *fvecs);
124  void output_restart_coordinates_master(int timestep, int n);
125  void output_restart_coordinates_slave(int timestep, int fID, int tID, Vector *vecs, int64 offset);
126  void output_final_coordinates_master(int n);
127  void output_final_coordinates_slave(int fID, int tID, Vector *vecs, int64 offset);
128 
129  void write_binary_file_master(char *fname, int n);
130  void write_binary_file_slave(char *fname, int fID, int tID, Vector *vecs, int64 offset);
131 
132  #if !OUTPUT_SINGLE_FILE
133  char *buildFileName(OUTPUTFILETYPE type, int timestep=-9999);
134  #endif
135 
136  int dcdFileID;
137  Bool dcdFirst;
138  float *dcdX, *dcdY, *dcdZ;
139 
140  int veldcdFileID;
141  Bool veldcdFirst;
142  float *veldcdX, *veldcdY, *veldcdZ;
143 
144  int forcedcdFileID;
145  Bool forcedcdFirst;
146  float *forcedcdX, *forcedcdY, *forcedcdZ;
147 
148  int outputID; //the sequence of this output
149 
150 public:
151  ParOutput(int oid=-1){
152  dcdFileID=veldcdFileID=-99999;
153  forcedcdFileID=-99999;
154  dcdFirst=veldcdFirst=TRUE;
155  forcedcdFirst=TRUE;
156  dcdX=dcdY=dcdZ=veldcdX=veldcdY=veldcdZ=NULL;
157  forcedcdX=forcedcdY=forcedcdZ=NULL;
158  outputID=oid;
159  }
160  ~ParOutput() {}
161 
162  void velocityMaster(int timestep, int n);
163  void velocitySlave(int timestep, int fID, int tID, Vector *vecs);
164 
165  void forceMaster(int timestep, int n);
166  void forceSlave(int timestep, int fID, int tID, Vector *vecs);
167 
168  void coordinateMaster(int timestep, int n, Lattice &lat);
169  void coordinateSlave(int timestep, int fID, int tID, Vector *vecs, FloatVector *fvecs);
170 };
171 #endif
172 
173 #endif
174 
static int velocityNeeded(int)
Definition: Output.C:365
OUTPUTFILETYPE
Definition: Output.h:34
static int coordinateNeeded(int)
Definition: Output.C:198
void setReplicaDcdIndex(int index)
Definition: Output.C:673
Definition: Vector.h:64
~Output()
Definition: Output.C:178
float Real
Definition: common.h:109
void replicaDcdOff()
Definition: Output.h:100
void coordinate(int, int, Vector *, FloatVector *, Lattice &)
Definition: Output.C:277
static int forceNeeded(int)
Definition: Output.C:460
void recvReplicaDcdInit(ReplicaDcdInitMsg *msg)
Definition: Output.C:689
Definition: Output.h:43
void replicaDcdInit(int index, const char *filename)
Definition: Output.C:678
int Bool
Definition: common.h:133
void velocity(int, int, Vector *)
Definition: Output.C:396
void recvReplicaDcdData(ReplicaDcdDataMsg *msg)
Definition: Output.C:700
Definition: Output.h:40
void energy(int, BigReal *)
long long int64
Definition: common.h:34
Output()
Definition: Output.C:168
Definition: Output.h:35
#define TRUE
Definition: common.h:119
void force(int, int, Vector *)
Definition: Output.C:486
double BigReal
Definition: common.h:114