ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/applications/dump2Xyz/Dump2XYZ.cpp
Revision: 1718
Committed: Fri Nov 5 21:45:14 2004 UTC (19 years, 8 months ago) by chrisfen
File size: 5919 byte(s)
Log Message:
Added the linear visitor

File Contents

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

Properties

Name Value
svn:executable *