ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.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

# User Rev Content
1 tim 1501 #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 chrisfen 1718 LinearAtomVisitor* linearVisitor;
35 tim 1501 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 chrisfen 1718 linearVisitor = new LinearAtomVisitor(info);
119     compositeVisitor->addVisitor(linearVisitor, 750);
120 tim 1501
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 *