ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/utils/Dump2XYZ.cpp
Revision: 1119
Committed: Mon Apr 19 17:44:48 2004 UTC (21 years ago) by tim
File size: 5473 byte(s)
Log Message:
Dump2XYZ is almost working except atoms in rigidbody are double counted

File Contents

# Content
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4
5 #include "SimSetup.hpp"
6 #include "Dump2XYZCmd.h"
7 #include "AtomVisitor.hpp"
8 #include "CompositeVisitor.hpp"
9 #include "RigidBodyVisitor.hpp"
10 #include "OtherVisitor.hpp"
11 #include "ZconsVisitor.hpp"
12
13 using namespace std;
14
15 int main(int argc, char* argv[]){
16 gengetopt_args_info args_info;
17 string dumpFileName;
18 string bassFileName;
19 string xyzFileName;
20 SimInfo* info;
21 SimSetup startMe;
22 DumpReader* dumpReader;
23 ofstream xyzStream;
24 int nframes;
25 Molecule* mol;
26 vector<StuntDouble*> integrableObjects;
27 vector<StuntDouble*>::iterator iter;
28 vector<RigidBody*> myRigidBodies;
29 vector<RigidBody*>::iterator rbIter;
30
31 CompositeVisitor* compositeVisitor;
32 SSDAtomVisitor* ssdVisitor;
33 DefaultAtomVisitor* defaultAtomVisitor;
34 LipidHeadVisitor* lipidVisitor;
35 ReplicateVisitor* replicateVisitor;
36 WrappingVisitor* wrappingVisitor;
37 IgnoreVisitor* ignoreVisitor;
38 XYZVisitor* xyzVisitor;
39 ZConsVisitor* zconsVisitor;
40 PrepareVisitor* prepareVisitor;
41
42 //parse the command line option
43 if (cmdline_parser (argc, argv, &args_info) != 0)
44 exit(1) ;
45
46
47 //get the dumpfile name and bass file name
48 if (args_info.input_given){
49 dumpFileName = args_info.input_arg;
50 }
51 else{
52 cerr << "Does not have input file name" << endl;
53 exit(1);
54 }
55 bassFileName = dumpFileName;
56 bassFileName = bassFileName.substr(0, bassFileName.rfind(".")) + ".bass";
57
58 if (args_info.output_given){
59 xyzFileName = args_info.output_arg;
60 }
61 else{
62 xyzFileName = dumpFileName;
63 xyzFileName = xyzFileName.substr(0, xyzFileName.rfind(".")) + ".xyz";
64 }
65
66 //parse bass file and set up the system
67 info = new SimInfo();
68 startMe.setSimInfo(info );
69
70 startMe.parseFile( bassFileName.c_str());
71
72 startMe.createSim();
73
74
75 //creat visitor list
76 compositeVisitor = new CompositeVisitor();
77
78 //creat ignore visitor
79 if(args_info.ignore_given ||args_info.water_flag){
80
81 ignoreVisitor = new IgnoreVisitor();
82
83 for(int i = 0; i < args_info.ignore_given; i++)
84 ignoreVisitor->addIgnoreType(args_info.ignore_arg[i]);
85
86 //ignore water
87 if(args_info.water_flag){
88 ignoreVisitor->addIgnoreType("SSD");
89 ignoreVisitor->addIgnoreType("SSD1");
90 ignoreVisitor->addIgnoreType("SSD_E");
91 ignoreVisitor->addIgnoreType("SSD_RF");
92 ignoreVisitor->addIgnoreType("TIP3P_RB_0");
93 ignoreVisitor->addIgnoreType("TIP4P_RB_0");
94 ignoreVisitor->addIgnoreType("TIP5P_RB_0");
95 ignoreVisitor->addIgnoreType("SPCE_RB_0");
96 ignoreVisitor->addIgnoreType("DPD_RB_0");
97 }
98
99 compositeVisitor->addVisitor(ignoreVisitor, 1000);
100 }
101
102 //creat RigidBody Visitor
103 //lipidVisitor = new LipidHeadVisitor(info);
104
105 //adding names of lipid head group
106 //lipidVisitor->addLipidHeadName("PC_RB_0");
107 //lipidVisitor->addLipidHeadName("PE_RB_0");
108
109 //compositeVisitor->addVisitor(lipidVisitor, 900);
110
111 //creat SSD atom visitor
112 //ssdVisitor = new SSDAtomVisitor(info);
113 //compositeVisitor->addVisitor(ssdVisitor, 800);
114
115 //creat default atom visitor
116 defaultAtomVisitor = new DefaultAtomVisitor(info);
117 compositeVisitor->addVisitor(defaultAtomVisitor, 700);
118
119 //create ZconsVisitor
120 if(args_info.replace_given){
121
122 zconsVisitor = new ZConsVisitor(info);
123
124 if(zconsVisitor->haveZconsMol())
125 compositeVisitor->addVisitor(zconsVisitor, 600);
126 else
127 delete zconsVisitor;
128 }
129
130 //creat wrapping visitor
131
132 if(args_info.periodicBox_flag){
133 wrappingVisitor = new WrappingVisitor(info);
134 compositeVisitor->addVisitor(wrappingVisitor, 500);
135 }
136
137 //creat replicate visitor
138 if(args_info.repeatX_given > 0 || args_info.repeatY_given > 0 ||args_info.repeatY_given > 0){
139 IntVec3 replicateOpt(args_info.repeatX_arg, args_info.repeatY_arg, args_info.repeatZ_arg);
140 replicateVisitor = new ReplicateVisitor(info, replicateOpt);
141 compositeVisitor->addVisitor(replicateVisitor, 400);
142 }
143
144 //creat xyzVisitor
145 xyzVisitor = new XYZVisitor(info);
146 compositeVisitor->addVisitor(xyzVisitor, 300);
147
148 cout << compositeVisitor->toString();
149
150 //creat prepareVisitor
151 prepareVisitor = new PrepareVisitor();
152
153 //open dump file
154 dumpReader = new DumpReader(dumpFileName.c_str());
155 nframes = dumpReader->getNframes();
156
157 xyzStream .open(xyzFileName.c_str());
158
159 for (int i = 0; i < nframes; i += args_info.frame_arg){
160 dumpReader->readFrame(info, i);
161
162 mol = info->molecules;
163
164 //update atoms of rigidbody
165 for(int j = 0; j < info->n_mol; j++){
166 myRigidBodies = mol[j].getMyRigidBodies();
167
168 for(rbIter = myRigidBodies.begin(); rbIter != myRigidBodies.end(); ++rbIter)
169 (*rbIter)->updateAtoms();
170 }
171
172
173 //prepare visit
174 for(int j = 0; j < info->n_mol; j++){
175 integrableObjects = mol[j].getIntegrableObjects();
176
177 for(iter = integrableObjects.begin(); iter != integrableObjects.end(); ++iter)
178 (*iter)->accept(prepareVisitor);
179 }
180
181 //update visitor
182 compositeVisitor->update();
183
184 //visit stuntdouble
185 for(int j = 0; j < info->n_mol; j++){
186 integrableObjects = mol[j].getIntegrableObjects();
187
188 for(iter = integrableObjects.begin(); iter != integrableObjects.end(); ++iter)
189 (*iter)->accept(compositeVisitor);
190 }
191
192 xyzVisitor->writeFrame(xyzStream);
193 xyzVisitor->clear();
194
195 }//end for (int i = 0; i < nframes; i += args_info.frame_arg)
196
197 xyzStream.close();
198
199
200 delete compositeVisitor;
201 delete info;
202
203
204 }

Properties

Name Value
svn:executable *