ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/applications/dump2Xyz/Dump2XYZ.cpp
Revision: 2065
Committed: Tue Mar 1 14:45:45 2005 UTC (19 years, 4 months ago) by tim
File size: 9324 byte(s)
Log Message:
adding MersenneTwister random number generator

File Contents

# User Rev Content
1 gezelter 1930 /*
2     * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3     *
4     * The University of Notre Dame grants you ("Licensee") a
5     * non-exclusive, royalty free, license to use, modify and
6     * redistribute this software in source and binary code form, provided
7     * that the following conditions are met:
8     *
9     * 1. Acknowledgement of the program authors must be made in any
10     * publication of scientific results based in part on use of the
11     * program. An acceptable form of acknowledgement is citation of
12     * the article in which the program was described (Matthew
13     * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14     * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15     * Parallel Simulation Engine for Molecular Dynamics,"
16     * J. Comput. Chem. 26, pp. 252-271 (2005))
17     *
18     * 2. Redistributions of source code must retain the above copyright
19     * notice, this list of conditions and the following disclaimer.
20     *
21     * 3. Redistributions in binary form must reproduce the above copyright
22     * notice, this list of conditions and the following disclaimer in the
23     * documentation and/or other materials provided with the
24     * distribution.
25     *
26     * This software is provided "AS IS," without a warranty of any
27     * kind. All express or implied conditions, representations and
28     * warranties, including any implied warranty of merchantability,
29     * fitness for a particular purpose or non-infringement, are hereby
30     * excluded. The University of Notre Dame and its licensors shall not
31     * be liable for any damages suffered by licensee as a result of
32     * using, modifying or distributing the software or its
33     * derivatives. In no event will the University of Notre Dame or its
34     * licensors be liable for any lost revenue, profit or data, or for
35     * direct, indirect, special, consequential, incidental or punitive
36     * damages, however caused and regardless of the theory of liability,
37     * arising out of the use of or inability to use software, even if the
38     * University of Notre Dame has been advised of the possibility of
39     * such damages.
40     */
41    
42 tim 1501 #include <iostream>
43     #include <fstream>
44     #include <string>
45    
46     #include "applications/dump2Xyz/Dump2XYZCmd.h"
47 gezelter 1930 #include "brains/Register.hpp"
48     #include "brains/SimCreator.hpp"
49     #include "brains/SimInfo.hpp"
50     #include "io/DumpReader.hpp"
51     #include "utils/simError.h"
52 tim 1501 #include "visitors/AtomVisitor.hpp"
53     #include "visitors/CompositeVisitor.hpp"
54     #include "visitors/RigidBodyVisitor.hpp"
55     #include "visitors/OtherVisitor.hpp"
56     #include "visitors/ZconsVisitor.hpp"
57 tim 1975 #include "selection/SelectionEvaluator.hpp"
58 tim 2008 #include "selection/SelectionManager.hpp"
59 tim 2053 #include "visitors/LipidTransVisitor.hpp"
60    
61 gezelter 1930 using namespace oopse;
62 tim 1501
63     int main(int argc, char* argv[]){
64 gezelter 1930
65     //register force fields
66     registerForceFields();
67    
68 tim 1501 gengetopt_args_info args_info;
69 gezelter 1930 std::string dumpFileName;
70     std::string mdFileName;
71     std::string xyzFileName;
72 tim 1501
73 gezelter 1930 //parse the command line option
74     if (cmdline_parser (argc, argv, &args_info) != 0) {
75     exit(1) ;
76     }
77 tim 1501
78     //get the dumpfile name and meta-data file name
79     if (args_info.input_given){
80     dumpFileName = args_info.input_arg;
81 gezelter 1930 } else {
82     std::cerr << "Does not have input file name" << std::endl;
83 tim 1501 exit(1);
84     }
85 gezelter 1930
86 tim 1501 mdFileName = dumpFileName;
87     mdFileName = mdFileName.substr(0, mdFileName.rfind(".")) + ".md";
88 tim 1957
89 tim 1501 if (args_info.output_given){
90     xyzFileName = args_info.output_arg;
91 gezelter 1930 } else {
92 tim 1501 xyzFileName = dumpFileName;
93     xyzFileName = xyzFileName.substr(0, xyzFileName.rfind(".")) + ".xyz";
94     }
95 gezelter 1930
96 tim 1501 //parse md file and set up the system
97 gezelter 1930 SimCreator creator;
98 tim 1957 SimInfo* info = creator.createSim(mdFileName, false);
99 tim 1501
100 gezelter 1930
101    
102 tim 1501 //creat visitor list
103 gezelter 1930 CompositeVisitor* compositeVisitor = new CompositeVisitor();
104    
105 tim 1501 //creat ignore visitor
106     if(args_info.ignore_given ||args_info.water_flag){
107    
108 tim 1975 IgnoreVisitor* ignoreVisitor = new IgnoreVisitor(info);
109 gezelter 1930
110 tim 1501 for(int i = 0; i < args_info.ignore_given; i++)
111     ignoreVisitor->addIgnoreType(args_info.ignore_arg[i]);
112 gezelter 1930
113 tim 1501 //ignore water
114     if(args_info.water_flag){
115     ignoreVisitor->addIgnoreType("SSD");
116     ignoreVisitor->addIgnoreType("SSD1");
117     ignoreVisitor->addIgnoreType("SSD_E");
118     ignoreVisitor->addIgnoreType("SSD_RF");
119     ignoreVisitor->addIgnoreType("TIP3P_RB_0");
120     ignoreVisitor->addIgnoreType("TIP4P_RB_0");
121     ignoreVisitor->addIgnoreType("TIP5P_RB_0");
122     ignoreVisitor->addIgnoreType("SPCE_RB_0");
123     ignoreVisitor->addIgnoreType("DPD_RB_0");
124     }
125 gezelter 1930
126     compositeVisitor->addVisitor(ignoreVisitor, 1000);
127 tim 1501 }
128 gezelter 1930
129 tim 1501 //creat RigidBody Visitor
130     if(args_info.rigidbody_flag){
131 gezelter 1930 RBCOMVisitor* rbCOMVisitor = new RBCOMVisitor(info);
132 tim 1501 compositeVisitor->addVisitor(rbCOMVisitor, 900);
133     }
134 gezelter 1930
135 tim 1975 //create selection visitor
136     //if (args_info.selection_given){
137     // SelectionVisitor* selectionVisitor = new SelectionVisitor(info, args_info.selection_arg);
138     // compositeVisitor->addVisitor(selectionVisitor, 850);
139     //}
140    
141     SelectionEvaluator* evaluator = NULL;
142     if (args_info.selection_given) {
143     evaluator = new SelectionEvaluator(info);
144     assert(evaluator);
145     evaluator->loadScriptString( args_info.selection_arg);
146    
147     }
148 gezelter 1930
149 tim 1501 //creat SSD atom visitor
150 gezelter 1930 SSDAtomVisitor* ssdVisitor = new SSDAtomVisitor(info);
151 tim 1501 compositeVisitor->addVisitor(ssdVisitor, 800);
152 gezelter 1930
153 tim 1934 LinearAtomVisitor* linearVisitor = new LinearAtomVisitor(info);
154 chrisfen 1718 compositeVisitor->addVisitor(linearVisitor, 750);
155 gezelter 1930
156 tim 1501 //creat default atom visitor
157 gezelter 1930 DefaultAtomVisitor* defaultAtomVisitor = new DefaultAtomVisitor(info);
158 tim 1501 compositeVisitor->addVisitor(defaultAtomVisitor, 700);
159 gezelter 1930
160 tim 1501 //creat waterType visitor
161     if(args_info.watertype_flag){
162 gezelter 1930 WaterTypeVisitor* waterTypeVisitor = new WaterTypeVisitor;
163 tim 1501 compositeVisitor->addVisitor(waterTypeVisitor, 600);
164     }
165 gezelter 1930
166 tim 1501 //create ZconsVisitor
167     if(args_info.zconstraint_flag){
168 gezelter 1930
169     ZConsVisitor* zconsVisitor = new ZConsVisitor(info);
170 tim 1501
171 gezelter 1930 if(zconsVisitor->haveZconsMol()) {
172 tim 1501 compositeVisitor->addVisitor(zconsVisitor, 500);
173 gezelter 1930 } else {
174 tim 1501 delete zconsVisitor;
175 gezelter 1930 }
176 tim 1501 }
177 gezelter 1930
178 tim 1501 //creat wrapping visitor
179 gezelter 1930
180 tim 1501 if(args_info.periodicBox_flag){
181 gezelter 1930 WrappingVisitor* wrappingVisitor = new WrappingVisitor(info);
182 tim 1501 compositeVisitor->addVisitor(wrappingVisitor, 400);
183     }
184 tim 2053
185 tim 1501 //creat replicate visitor
186     if(args_info.repeatX_given > 0 || args_info.repeatY_given > 0 ||args_info.repeatY_given > 0){
187 gezelter 1930 Vector3i replicateOpt(args_info.repeatX_arg, args_info.repeatY_arg, args_info.repeatZ_arg);
188     ReplicateVisitor* replicateVisitor = new ReplicateVisitor(info, replicateOpt);
189 tim 1501 compositeVisitor->addVisitor(replicateVisitor, 300);
190     }
191 tim 2053
192    
193     //create rotation visitor
194     if (args_info.refsele_given&& args_info.originsele_given) {
195     compositeVisitor->addVisitor(new LipidTransVisitor(info, args_info.originsele_arg, args_info.refsele_arg), 250);
196     } else if (args_info.refsele_given || args_info.originsele_given) {
197 tim 2065 std::cerr << "Both of --refsele and --originsele should appear by pair" << std::endl;
198 tim 2053 exit(1);
199     }
200    
201 tim 1501 //creat xyzVisitor
202 gezelter 1930 XYZVisitor* xyzVisitor = new XYZVisitor(info);
203 tim 1501 compositeVisitor->addVisitor(xyzVisitor, 200);
204 gezelter 1930
205     std::cout << compositeVisitor->toString();
206    
207 tim 1501 //creat prepareVisitor
208 gezelter 1930 PrepareVisitor* prepareVisitor = new PrepareVisitor();
209    
210 tim 1501 //open dump file
211 gezelter 1930 DumpReader* dumpReader = new DumpReader(info, dumpFileName);
212     int nframes = dumpReader->getNFrames();
213    
214    
215     std::ofstream xyzStream;
216 tim 1501 xyzStream .open(xyzFileName.c_str());
217    
218 gezelter 1930
219     SimInfo::MoleculeIterator miter;
220     Molecule::IntegrableObjectIterator iiter;
221     Molecule::RigidBodyIterator rbIter;
222     Molecule* mol;
223     StuntDouble* integrableObject;
224     RigidBody* rb;
225 tim 1975
226     if (evaluator && !evaluator->isDynamic()) {
227     info->getSelectionManager()->setSelectionSet(evaluator->evaluate());
228     }
229 gezelter 1930
230 tim 1501 for (int i = 0; i < nframes; i += args_info.frame_arg){
231 gezelter 1930 dumpReader->readFrame(i);
232    
233 tim 1501 //update atoms of rigidbody
234 gezelter 1930 for (mol = info->beginMolecule(miter); mol != NULL; mol = info->nextMolecule(miter)) {
235    
236     //change the positions of atoms which belong to the rigidbodies
237     for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) {
238     rb->updateAtoms();
239     }
240     }
241 tim 1501
242     //prepare visit
243 gezelter 1930 for (mol = info->beginMolecule(miter); mol != NULL; mol = info->nextMolecule(miter)) {
244     for (integrableObject = mol->beginIntegrableObject(iiter); integrableObject != NULL;
245     integrableObject = mol->nextIntegrableObject(iiter)) {
246     integrableObject->accept(prepareVisitor);
247     }
248     }
249    
250 tim 1501 //update visitor
251     compositeVisitor->update();
252 tim 1975
253     //if dynamic, we need to re-evaluate the selection
254     if (evaluator && evaluator->isDynamic()) {
255     info->getSelectionManager()->setSelectionSet(evaluator->evaluate());
256     }
257 tim 1501
258     //visit stuntdouble
259 gezelter 1930 for (mol = info->beginMolecule(miter); mol != NULL; mol = info->nextMolecule(miter)) {
260     for (integrableObject = mol->beginIntegrableObject(iiter); integrableObject != NULL;
261     integrableObject = mol->nextIntegrableObject(iiter)) {
262     integrableObject->accept(compositeVisitor);
263     }
264 tim 1501 }
265 gezelter 1930
266 tim 1501 xyzVisitor->writeFrame(xyzStream);
267     xyzVisitor->clear();
268    
269     }//end for (int i = 0; i < nframes; i += args_info.frame_arg)
270 gezelter 1930
271 tim 1501 xyzStream.close();
272 gezelter 1930
273    
274 tim 1501 delete compositeVisitor;
275     delete info;
276 gezelter 1930
277 tim 1501 }

Properties

Name Value
svn:executable *