ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-3.0/src/applications/dump2Xyz/Dump2XYZ.cpp
(Generate patch)

Comparing branches/new_design/OOPSE-3.0/src/applications/dump2Xyz/Dump2XYZ.cpp (file contents):
Revision 1832 by tim, Thu Dec 2 05:17:10 2004 UTC vs.
Revision 1833 by tim, Thu Dec 2 16:53:56 2004 UTC

# Line 2 | Line 2
2   #include <fstream>
3   #include <string>
4  
5 #include "brains/SimSetup.hpp"
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"
# Line 11 | Line 12
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 <  char inFileName[2002];
22 <   std::string xyzFileName;
23 <  SimInfo* info;
24 <  SimSetup startMe;
25 <  DumpReader* dumpReader;
26 <  ofstream xyzStream;
25 <  int nframes;
26 <  Molecule* mol;  
27 <   std::vector<StuntDouble*> integrableObjects;
28 <   std::vector<StuntDouble*>::iterator iter;
29 <   std::vector<RigidBody*> myRigidBodies;
30 <   std::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) ;
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 <
29 <  //get the dumpfile name and meta-data file name
51 <  if (args_info.input_given){
28 >    //get the dumpfile name and meta-data file name
29 >    if (args_info.input_given){
30      dumpFileName = args_info.input_arg;
31 <  }
32 <  else{
33 <    std::cerr << "Does not have input file name" << std::endl;
34 <    exit(1);
35 <  }
36 <  mdFileName = dumpFileName;
37 <  mdFileName = mdFileName.substr(0, mdFileName.rfind(".")) + ".md";
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 <  }
42 <  else{
43 <    xyzFileName = dumpFileName;
44 <    xyzFileName = xyzFileName.substr(0, xyzFileName.rfind(".")) + ".xyz";
67 <  }
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 <  info = new SimInfo();
48 <  startMe.setSimInfo(info );
47 >    SimCreator creator;
48 >    SimInfo* info = creator.createSim(mdFileName);
49 >    
50  
51 <  strcpy(inFileName, mdFileName.c_str() );
52 <  startMe.parseFile( inFileName );
51 >  
52 >    //creat visitor list
53 >    CompositeVisitor* compositeVisitor = new CompositeVisitor();
54  
55 <  startMe.createSim();
55 >    //creat ignore visitor
56 >    if(args_info.ignore_given ||args_info.water_flag){
57  
58 <  
79 <  //creat visitor list
80 <  compositeVisitor = new CompositeVisitor();
58 >        IgnoreVisitor* ignoreVisitor = new IgnoreVisitor();
59  
60 <  //creat ignore visitor
61 <  if(args_info.ignore_given ||args_info.water_flag){
84 <    
85 <    ignoreVisitor = new IgnoreVisitor();
60 >        for(int i = 0; i < args_info.ignore_given; i++)
61 >        ignoreVisitor->addIgnoreType(args_info.ignore_arg[i]);
62  
63 <    for(int i = 0; i < args_info.ignore_given; i++)
64 <      ignoreVisitor->addIgnoreType(args_info.ignore_arg[i]);
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 <    //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");
76 >        compositeVisitor->addVisitor(ignoreVisitor, 1000);
77      }
78  
79 <     compositeVisitor->addVisitor(ignoreVisitor, 1000);
80 <  }
79 >    //creat RigidBody Visitor
80 >    if(args_info.rigidbody_flag){
81 >        RBCOMVisitor* rbCOMVisitor = new RBCOMVisitor(info);
82 >        compositeVisitor->addVisitor(rbCOMVisitor, 900);
83 >    }
84  
106  //creat RigidBody Visitor
107  if(args_info.rigidbody_flag){
108    rbCOMVisitor = new RBCOMVisitor(info);
109    compositeVisitor->addVisitor(rbCOMVisitor, 900);
110  }
111
85    //compositeVisitor->addVisitor(lipidVisitor, 900);
86  
87 <  //creat SSD atom visitor
88 <  ssdVisitor = new SSDAtomVisitor(info);
89 <  compositeVisitor->addVisitor(ssdVisitor, 800);
87 >    //creat SSD atom visitor
88 >    SSDAtomVisitor* ssdVisitor = new SSDAtomVisitor(info);
89 >    compositeVisitor->addVisitor(ssdVisitor, 800);
90  
91 <  //creat default atom visitor
92 <  defaultAtomVisitor = new DefaultAtomVisitor(info);
93 <  compositeVisitor->addVisitor(defaultAtomVisitor, 700);
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 = new WaterTypeVisitor;
98 <    compositeVisitor->addVisitor(waterTypeVisitor, 600);
99 <  }
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){
130 <    
131 <    zconsVisitor = new ZConsVisitor(info);
101 >    //create ZconsVisitor
102 >    if(args_info.zconstraint_flag){
103  
104 <    if(zconsVisitor->haveZconsMol())
134 <      compositeVisitor->addVisitor(zconsVisitor, 500);
135 <    else
136 <      delete zconsVisitor;
137 <  }
104 >        ZConsVisitor* zconsVisitor = new ZConsVisitor(info);
105  
106 <  //creat wrapping visitor
106 >        if(zconsVisitor->haveZconsMol()) {
107 >          compositeVisitor->addVisitor(zconsVisitor, 500);
108 >        } else {
109 >          delete zconsVisitor;
110 >        }
111 >    }
112  
113 <  if(args_info.periodicBox_flag){
114 <    wrappingVisitor = new WrappingVisitor(info);
115 <    compositeVisitor->addVisitor(wrappingVisitor, 400);
116 <  }
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 <    IntVec3 replicateOpt(args_info.repeatX_arg, args_info.repeatY_arg, args_info.repeatZ_arg);
123 <    replicateVisitor = new ReplicateVisitor(info, replicateOpt);
124 <    compositeVisitor->addVisitor(replicateVisitor, 300);
125 <  }
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 = new XYZVisitor(info);
129 <  compositeVisitor->addVisitor(xyzVisitor, 200);
127 >    //creat xyzVisitor
128 >    XYZVisitor* xyzVisitor = new XYZVisitor(info);
129 >    compositeVisitor->addVisitor(xyzVisitor, 200);
130  
131 <  cout << compositeVisitor->toString();
131 >    std::cout << compositeVisitor->toString();
132  
133 <  //creat prepareVisitor
134 <  prepareVisitor = new PrepareVisitor();
133 >    //creat prepareVisitor
134 >    PrepareVisitor* prepareVisitor = new PrepareVisitor();
135  
136 <  //open dump file
137 <  dumpReader = new DumpReader(dumpFileName.c_str());
138 <  nframes = dumpReader->getNframes();
136 >    //open dump file
137 >    DumpReader* dumpReader = new DumpReader(info, dumpFileName);
138 >    int nframes = dumpReader->getNFrames();
139  
140 <  xyzStream .open(xyzFileName.c_str());
141 <  
142 <  for (int i = 0; i < nframes; i += args_info.frame_arg){
169 <    dumpReader->readFrame(info, i);
140 >    
141 >    std::ofstream xyzStream;    
142 >    xyzStream .open(xyzFileName.c_str());
143  
144 <    mol = info->molecules;
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(int j = 0; j < info->n_mol; j++){
175 <      myRigidBodies = mol[j].getMyRigidBodies();
155 >        //update atoms of rigidbody
156 >        for (mol = info->beginMolecule(miter); mol != NULL; mol = info->nextMolecule(miter)) {
157  
158 <      for(rbIter = myRigidBodies.begin(); rbIter != myRigidBodies.end(); ++rbIter)
159 <        (*rbIter)->updateAtoms();
160 <    }    
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 <    
165 <    //prepare visit
166 <    for(int j = 0; j < info->n_mol; j++){
167 <      integrableObjects = mol[j].getIntegrableObjects();
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 <      for(iter = integrableObjects.begin(); iter != integrableObjects.end(); ++iter)
173 <        (*iter)->accept(prepareVisitor);
188 <    }    
172 >        //update visitor
173 >        compositeVisitor->update();
174  
175 <    //update visitor
176 <    compositeVisitor->update();
177 <    
178 <    //visit stuntdouble
179 <    for(int j = 0; j < info->n_mol; j++){
180 <      integrableObjects = mol[j].getIntegrableObjects();
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 <      for(iter = integrableObjects.begin(); iter != integrableObjects.end(); ++iter)
184 <        (*iter)->accept(compositeVisitor);
199 <    }
183 >        xyzVisitor->writeFrame(xyzStream);
184 >        xyzVisitor->clear();
185  
186 <    xyzVisitor->writeFrame(xyzStream);
202 <    xyzVisitor->clear();
203 <    
204 <  }//end for (int i = 0; i < nframes; i += args_info.frame_arg)
186 >    }//end for (int i = 0; i < nframes; i += args_info.frame_arg)
187  
188 <  xyzStream.close();
188 >    xyzStream.close();
189  
190  
191 <  delete compositeVisitor;
192 <  delete info;
191 >    delete compositeVisitor;
192 >    delete info;
193  
194  
195   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines