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: 1846
Committed: Sat Dec 4 00:01:32 2004 UTC (19 years, 8 months ago) by tim
File size: 6275 byte(s)
Log Message:
Dump2Xyz is also working, energy of NVE is not conserved

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

Properties

Name Value
svn:executable *