ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-1.0/utils/Dump2XYZ.cpp
Revision: 1334
Committed: Fri Jul 16 18:58:03 2004 UTC (19 years, 11 months ago) by gezelter
File size: 5928 byte(s)
Log Message:
Initial import of OOPSE-1.0 source tree

File Contents

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

Properties

Name Value
svn:executable *