ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-2.0/src/applications/dump2Xyz/Dump2XYZ.cpp
Revision: 1833
Committed: Thu Dec 2 16:53:56 2004 UTC (19 years, 8 months ago) by tim
File size: 6109 byte(s)
Log Message:
oopse get built

File Contents

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

Properties

Name Value
svn:executable *