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 (20 years, 5 months ago) by tim
File size: 5867 byte(s)
Log Message:
DUMP2XYZ 0.99 version

File Contents

# User Rev Content
1 tim 1118 #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 tim 1119 vector<RigidBody*> myRigidBodies;
29     vector<RigidBody*>::iterator rbIter;
30 tim 1118
31     CompositeVisitor* compositeVisitor;
32     SSDAtomVisitor* ssdVisitor;
33     DefaultAtomVisitor* defaultAtomVisitor;
34     LipidHeadVisitor* lipidVisitor;
35 tim 1126 RBCOMVisitor* rbCOMVisitor;
36 tim 1118 ReplicateVisitor* replicateVisitor;
37     WrappingVisitor* wrappingVisitor;
38     IgnoreVisitor* ignoreVisitor;
39     XYZVisitor* xyzVisitor;
40     ZConsVisitor* zconsVisitor;
41     PrepareVisitor* prepareVisitor;
42 tim 1126 WaterTypeVisitor* waterTypeVisitor;
43 tim 1118
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 tim 1126 if(args_info.rigidbody_flag){
106     rbCOMVisitor = new RBCOMVisitor(info);
107     compositeVisitor->addVisitor(rbCOMVisitor, 900);
108     }
109     //creat RigidBody Visitor
110 tim 1119 //lipidVisitor = new LipidHeadVisitor(info);
111 tim 1118
112     //adding names of lipid head group
113 tim 1119 //lipidVisitor->addLipidHeadName("PC_RB_0");
114     //lipidVisitor->addLipidHeadName("PE_RB_0");
115 tim 1118
116 tim 1119 //compositeVisitor->addVisitor(lipidVisitor, 900);
117 tim 1118
118     //creat SSD atom visitor
119 tim 1126 ssdVisitor = new SSDAtomVisitor(info);
120     compositeVisitor->addVisitor(ssdVisitor, 800);
121 tim 1118
122     //creat default atom visitor
123     defaultAtomVisitor = new DefaultAtomVisitor(info);
124 tim 1119 compositeVisitor->addVisitor(defaultAtomVisitor, 700);
125 tim 1118
126 tim 1126 //creat waterType visitor
127     if(args_info.watertype_flag){
128     waterTypeVisitor = new WaterTypeVisitor;
129     compositeVisitor->addVisitor(waterTypeVisitor, 600);
130     }
131    
132 tim 1118 //create ZconsVisitor
133 tim 1126 if(args_info.zconstraint_flag){
134 tim 1118
135     zconsVisitor = new ZConsVisitor(info);
136    
137     if(zconsVisitor->haveZconsMol())
138 tim 1126 compositeVisitor->addVisitor(zconsVisitor, 500);
139 tim 1118 else
140     delete zconsVisitor;
141     }
142    
143     //creat wrapping visitor
144    
145     if(args_info.periodicBox_flag){
146     wrappingVisitor = new WrappingVisitor(info);
147 tim 1126 compositeVisitor->addVisitor(wrappingVisitor, 400);
148 tim 1118 }
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 tim 1126 compositeVisitor->addVisitor(replicateVisitor, 300);
155 tim 1118 }
156    
157     //creat xyzVisitor
158     xyzVisitor = new XYZVisitor(info);
159 tim 1126 compositeVisitor->addVisitor(xyzVisitor, 200);
160 tim 1118
161 tim 1119 cout << compositeVisitor->toString();
162 tim 1118
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 tim 1119
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 tim 1118
186     //prepare visit
187     for(int j = 0; j < info->n_mol; j++){
188 tim 1119 integrableObjects = mol[j].getIntegrableObjects();
189 tim 1118
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 tim 1119 integrableObjects = mol[j].getIntegrableObjects();
200 tim 1118
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 *