ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/integrators/VelocityVerletIntegrator.cpp
(Generate patch)

Comparing trunk/OOPSE-4/src/integrators/VelocityVerletIntegrator.cpp (file contents):
Revision 2019 by tim, Mon Feb 14 18:12:43 2005 UTC vs.
Revision 2101 by chrisfen, Thu Mar 10 15:10:24 2005 UTC

# Line 52 | Line 52 | VelocityVerletIntegrator::VelocityVerletIntegrator(Sim
52   #include "utils/StringUtils.hpp"
53  
54   namespace oopse {
55 < VelocityVerletIntegrator::VelocityVerletIntegrator(SimInfo *info) : Integrator(info), rotAlgo(NULL) {
55 >  VelocityVerletIntegrator::VelocityVerletIntegrator(SimInfo *info) : Integrator(info), rotAlgo(NULL) {
56      dt2 = 0.5 * dt;
57      rotAlgo = new DLM();
58      rattle = new Rattle(info);
59 < }
60 <
61 < VelocityVerletIntegrator::~VelocityVerletIntegrator() {
59 >  }
60 >  
61 >  VelocityVerletIntegrator::~VelocityVerletIntegrator() {
62      delete rotAlgo;
63      delete rattle;
64 < }
65 <
66 < void VelocityVerletIntegrator::initialize(){
67 <
64 >  }
65 >  
66 >  void VelocityVerletIntegrator::initialize(){
67 >    
68      forceMan_->init();
69 <
69 >    
70      // remove center of mass drift velocity (in case we passed in a configuration
71      // that was drifting
72      velocitizer_->removeComDrift();
73 <
73 >    
74      // initialize the forces before the first step
75      calcForce(true, true);
76 <
76 >    
77      //execute constraint algorithm to make sure at the very beginning the system is constrained  
78      if (info_->getNGlobalConstraints() > 0) {
79 <        rattle->constraintA();
80 <        calcForce(true, true);
81 <        rattle->constraintB();        
82 <        info_->getSnapshotManager()->advance();//copy the current snapshot to previous snapshot
79 >      rattle->constraintA();
80 >      calcForce(true, true);
81 >      rattle->constraintB();        
82 >      info_->getSnapshotManager()->advance();//copy the current snapshot to previous snapshot
83      }
84 <
84 >    
85      if (needVelocityScaling) {
86 <        velocitizer_->velocitize(targetScalingTemp);
86 >      velocitizer_->velocitize(targetScalingTemp);
87      }
88      
89      dumpWriter = createDumpWriter();
90 <
90 >    
91      statWriter = createStatWriter();
92
93    dumpWriter->writeDump();
92      
93 +    if (simParams->getUseSolidThermInt()) {
94 +      restWriter = createRestWriter();
95 +      restWriter->writeZangle();
96 +    }
97 +    
98 +    dumpWriter->writeDumpAndEor();
99 +    
100 +    
101      //save statistics, before writeStat,  we must save statistics
102      thermo.saveStat();
103      saveConservedQuantity();
104      statWriter->writeStat(currentSnapshot_->statData);
105 <
105 >    
106      currSample = sampleTime + currentSnapshot_->getTime();
107      currStatus =  statusTime + currentSnapshot_->getTime();;
108      currThermal = thermalTime +  + currentSnapshot_->getTime();
109      needPotential = false;
110      needStress = false;      
111 <  
111 >    
112   }
107        
108 void VelocityVerletIntegrator::doIntegrate() {
113  
114 <
115 <    initialize();
116 <
117 <    while (currentSnapshot_->getTime() < runTime) {
118 <        
119 <        preStep();
116 <
117 <        integrateStep();
118 <        
119 <        postStep();
120 <
121 <    }
122 <
123 <    finalize();
114 > void VelocityVerletIntegrator::doIntegrate() {
115 >  
116 >  
117 >  initialize();
118 >  
119 >  while (currentSnapshot_->getTime() < runTime) {
120      
121 +    preStep();
122 +    
123 +    integrateStep();
124 +    
125 +    postStep();
126 +    
127 +  }
128 +  
129 +  finalize();
130 +  
131   }
132  
133  
134   void VelocityVerletIntegrator::preStep() {
135 <        double difference = currentSnapshot_->getTime() + dt - currStatus;
136 <
137 <        if (difference > 0 || fabs(difference) < oopse::epsilon) {
138 <            needPotential = true;
139 <            needStress = true;  
140 <        }
141 <
135 >  double difference = currentSnapshot_->getTime() + dt - currStatus;
136 >  
137 >  if (difference > 0 || fabs(difference) < oopse::epsilon) {
138 >    needPotential = true;
139 >    needStress = true;  
140 >  }
141 >  
142   }
143  
144   void VelocityVerletIntegrator::postStep() {
145 <
146 <        //save snapshot
147 <        info_->getSnapshotManager()->advance();
148 <
149 <        //increase time
150 <        currentSnapshot_->increaseTime(dt);        
151 <        
152 <        if (needVelocityScaling) {
153 <            if (currentSnapshot_->getTime() >= currThermal) {
154 <                velocitizer_->velocitize(targetScalingTemp);
155 <                currThermal += thermalTime;
156 <            }
157 <        }
158 <
159 <        if (currentSnapshot_->getTime() >= currSample) {
160 <            dumpWriter->writeDump();
161 <            //eorWriter->writeDump();
162 <            currSample += sampleTime;
163 <        }
164 <
165 <        if (currentSnapshot_->getTime() >= currStatus) {
166 <            //save statistics, before writeStat,  we must save statistics
167 <            thermo.saveStat();
168 <            saveConservedQuantity();
169 <            statWriter->writeStat(currentSnapshot_->statData);
170 <
171 <            needPotential = false;
172 <            needStress = false;
173 <            currStatus += statusTime;
174 <        }
175 <
176 <        
145 >  
146 >  //save snapshot
147 >  info_->getSnapshotManager()->advance();
148 >  
149 >  //increase time
150 >  currentSnapshot_->increaseTime(dt);        
151 >  
152 >  if (needVelocityScaling) {
153 >    if (currentSnapshot_->getTime() >= currThermal) {
154 >      velocitizer_->velocitize(targetScalingTemp);
155 >      currThermal += thermalTime;
156 >    }
157 >  }
158 >  
159 >  if (currentSnapshot_->getTime() >= currSample) {
160 >    dumpWriter->writeDumpAndEor();
161 >    
162 >    if (simParams->getUseSolidThermInt())
163 >      restWriter->writeZangle();
164 >    
165 >    currSample += sampleTime;
166 >  }
167 >  
168 >  if (currentSnapshot_->getTime() >= currStatus) {
169 >    //save statistics, before writeStat,  we must save statistics
170 >    thermo.saveStat();
171 >    saveConservedQuantity();
172 >    statWriter->writeStat(currentSnapshot_->statData);
173 >    
174 >    needPotential = false;
175 >    needStress = false;
176 >    currStatus += statusTime;
177 >  }
178 >  
179 >  
180   }
181  
182  
183   void VelocityVerletIntegrator::finalize() {
184 <
185 <    delete dumpWriter;
186 <    delete statWriter;
187 <
188 <    dumpWriter = NULL;
189 <    statWriter = NULL;
190 <    
184 >  dumpWriter->writeEor();
185 >  
186 >  if (simParams->getUseSolidThermInt()) {
187 >    restWriter->writeZangle();
188 >    delete restWriter;
189 >    restWriter = NULL;
190 >  }
191 >  
192 >  delete dumpWriter;
193 >  delete statWriter;
194 >  
195 >  dumpWriter = NULL;
196 >  statWriter = NULL;
197 >  
198   }
199  
200   void VelocityVerletIntegrator::integrateStep() {
201 <
202 <    moveA();
203 <    calcForce(needPotential, needStress);
204 <    moveB();
201 >  
202 >  moveA();
203 >  calcForce(needPotential, needStress);
204 >  moveB();
205   }
206  
207  
208   void VelocityVerletIntegrator::calcForce(bool needPotential,
209                                           bool needStress) {
210 <    forceMan_->calcForces(needPotential, needStress);
210 >  forceMan_->calcForces(needPotential, needStress);
211   }
212  
213   DumpWriter* VelocityVerletIntegrator::createDumpWriter() {
214 <    return new DumpWriter(info_, info_->getDumpFileName());
214 >  return new DumpWriter(info_);
215   }
216  
217   StatWriter* VelocityVerletIntegrator::createStatWriter() {
218 <    return new StatWriter(info_->getStatFileName());
218 >  // if solidThermInt is true, add extra information to the statfile
219 >  if (simParams->getUseSolidThermInt()){
220 >    StatsBitSet mask;
221 >    mask.set(Stats::TIME);
222 >    mask.set(Stats::TOTAL_ENERGY);
223 >    mask.set(Stats::POTENTIAL_ENERGY);
224 >    mask.set(Stats::KINETIC_ENERGY);
225 >    mask.set(Stats::TEMPERATURE);
226 >    mask.set(Stats::PRESSURE);
227 >    mask.set(Stats::CONSERVED_QUANTITY);
228 >    mask.set(Stats::VRAW);
229 >    mask.set(Stats::VHARM);
230 >    return new StatWriter(info_->getStatFileName(), mask);
231 >  }
232 >  
233 >  return new StatWriter(info_->getStatFileName());
234   }
235  
236 + RestWriter* VelocityVerletIntegrator::createRestWriter(){
237 +  return new RestWriter(info_);
238 + }
239  
240 +
241   } //end namespace oopse

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines