ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/utils/Dump2XYZ.cpp
Revision: 1126
Committed: Tue Apr 20 05:39:38 2004 UTC (21 years ago) by tim
File size: 5867 byte(s)
Log Message:
DUMP2XYZ 0.99 version

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

Properties

Name Value
svn:executable *