ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/integrators/VelocityVerletIntegrator.cpp
(Generate patch)

Comparing branches/development/src/integrators/VelocityVerletIntegrator.cpp (file contents):
Revision 1665 by gezelter, Tue Nov 22 20:38:56 2011 UTC vs.
Revision 1773 by gezelter, Tue Aug 7 18:26:40 2012 UTC

# Line 54 | Line 54 | namespace OpenMD {
54   #include "utils/ProgressBar.hpp"
55  
56   namespace OpenMD {
57 <  VelocityVerletIntegrator::VelocityVerletIntegrator(SimInfo *info) : Integrator(info), rotAlgo(NULL) {
57 >  VelocityVerletIntegrator::VelocityVerletIntegrator(SimInfo *info) : Integrator(info) {
58      dt2 = 0.5 * dt;
59    rotAlgo = new DLM();
60    rattle = new Rattle(info);
59    }
60    
61    VelocityVerletIntegrator::~VelocityVerletIntegrator() {
64    delete rotAlgo;
65    delete rattle;
62    }
63    
64    void VelocityVerletIntegrator::initialize(){
# Line 72 | Line 68 | namespace OpenMD {
68      // remove center of mass drift velocity (in case we passed in a
69      // configuration that was drifting)
70      velocitizer_->removeComDrift();
71 +
72 +    // find the initial fluctuating charges.
73 +    flucQ_->initialize();
74      
75      // initialize the forces before the first step
76      calcForce();
# Line 79 | Line 78 | namespace OpenMD {
78      // execute the constraint algorithm to make sure that the system is
79      // constrained at the very beginning  
80      if (info_->getNGlobalConstraints() > 0) {
81 <      rattle->constraintA();
81 >      rattle_->constraintA();
82        calcForce();
83 <      rattle->constraintB();      
83 >      rattle_->constraintB();      
84        //copy the current snapshot to previous snapshot
85        info_->getSnapshotManager()->advance();
86      }
# Line 99 | Line 98 | namespace OpenMD {
98      progressBar = new ProgressBar();
99  
100      //save statistics, before writeStat,  we must save statistics
102    thermo.saveStat();
101      saveConservedQuantity();
102 <    if (simParams->getUseRNEMD())
102 >    stats->collectStats();
103 >
104 >    if (simParams->getRNEMDParameters()->getUseRNEMD())
105        rnemd_->getStarted();
106  
107 <    statWriter->writeStat(currentSnapshot_->statData);
107 >    statWriter->writeStat();
108      
109 <    currSample = sampleTime + currentSnapshot_->getTime();
110 <    currStatus =  statusTime + currentSnapshot_->getTime();
111 <    currThermal = thermalTime + currentSnapshot_->getTime();
109 >    currSample = sampleTime + snap->getTime();
110 >    currStatus =  statusTime + snap->getTime();
111 >    currThermal = thermalTime + snap->getTime();
112      if (needReset) {
113 <      currReset = resetTime + currentSnapshot_->getTime();
113 >      currReset = resetTime + snap->getTime();
114      }
115 <    if (simParams->getUseRNEMD()){
116 <      currRNEMD = RNEMD_exchangeTime + currentSnapshot_->getTime();
115 >    if (simParams->getRNEMDParameters()->getUseRNEMD()){
116 >      currRNEMD = RNEMD_exchangeTime + snap->getTime();
117      }
118      needPotential = false;
119      needStress = false;      
# Line 122 | Line 122 | namespace OpenMD {
122  
123    void VelocityVerletIntegrator::doIntegrate() {
124    
125  
125      initialize();
126    
127 <    while (currentSnapshot_->getTime() < runTime) {
128 <    
129 <      preStep();
130 <    
131 <      integrateStep();
133 <    
134 <      postStep();
135 <      
136 <    }
137 <  
127 >    while (snap->getTime() < runTime) {    
128 >      preStep();    
129 >      integrateStep();    
130 >      postStep();      
131 >    }  
132      finalize();
139  
133    }
134  
135  
136    void VelocityVerletIntegrator::preStep() {
137 <    RealType difference = currentSnapshot_->getTime() + dt - currStatus;
137 >    RealType difference = snap->getTime() + dt - currStatus;
138    
139      if (difference > 0 || fabs(difference) < OpenMD::epsilon) {
140        needPotential = true;
# Line 155 | Line 148 | namespace OpenMD {
148      info_->getSnapshotManager()->advance();
149    
150      //increase time
151 <    currentSnapshot_->increaseTime(dt);        
151 >    snap->increaseTime(dt);        
152    
153      if (needVelocityScaling) {
154 <      if (currentSnapshot_->getTime() >= currThermal) {
154 >      if (snap->getTime() >= currThermal) {
155          velocitizer_->velocitize(targetScalingTemp);
156          currThermal += thermalTime;
157        }
158      }
159      if (useRNEMD) {
160 <      if (currentSnapshot_->getTime() >= currRNEMD) {
160 >      if (snap->getTime() >= currRNEMD) {
161          rnemd_->doRNEMD();
162          currRNEMD += RNEMD_exchangeTime;
163        }
164        rnemd_->collectData();
165      }
166      
167 <    if (currentSnapshot_->getTime() >= currSample) {
167 >    if (snap->getTime() >= currSample) {
168        dumpWriter->writeDumpAndEor();
169        
170        currSample += sampleTime;
171      }
172      
173 <    if (currentSnapshot_->getTime() >= currStatus) {
173 >    if (snap->getTime() >= currStatus) {
174        //save statistics, before writeStat,  we must save statistics
175 <      thermo.saveStat();
175 >      stats->collectStats();
176        saveConservedQuantity();
177  
178 <      if (simParams->getUseRNEMD()) {
179 <        rnemd_->getStatus();
178 >      if (simParams->getRNEMDParameters()->getUseRNEMD()) {
179 >        rnemd_->writeOutputFile();
180        }
181  
182 <      statWriter->writeStat(currentSnapshot_->statData);
182 >      statWriter->writeStat();
183  
184 <      progressBar->setStatus(currentSnapshot_->getTime(), runTime);
184 >      progressBar->setStatus(snap->getTime(), runTime);
185        progressBar->update();
186  
187        needPotential = false;
# Line 196 | Line 189 | namespace OpenMD {
189        currStatus += statusTime;
190      }
191      
192 <    if (needReset && currentSnapshot_->getTime() >= currReset) {    
192 >    if (needReset && snap->getTime() >= currReset) {    
193        resetIntegrator();
194        currReset += resetTime;
195      }        
# Line 205 | Line 198 | namespace OpenMD {
198  
199    void VelocityVerletIntegrator::finalize() {
200      dumpWriter->writeEor();
201 +    rnemd_->writeOutputFile();
202    
203      delete dumpWriter;
204      delete statWriter;
205    
206      dumpWriter = NULL;
207      statWriter = NULL;
214  
208    }
209  
210    void VelocityVerletIntegrator::integrateStep() {
# Line 224 | Line 217 | namespace OpenMD {
217  
218    void VelocityVerletIntegrator::calcForce() {
219      forceMan_->calcForces();
220 +    flucQ_->applyConstraints();
221    }
222  
223    DumpWriter* VelocityVerletIntegrator::createDumpWriter() {
# Line 231 | Line 225 | namespace OpenMD {
225    }
226  
227    StatWriter* VelocityVerletIntegrator::createStatWriter() {
234
235    std::string statFileFormatString = simParams->getStatFileFormat();
236    StatsBitSet mask = parseStatFileFormat(statFileFormatString);
237  
238    // if we're doing a thermodynamic integration, we'll want the raw
239    // potential as well as the full potential:
240
241
242    if (simParams->getUseThermodynamicIntegration())
243      mask.set(Stats::VRAW);
244
245    // if we've got restraints turned on, we'll also want a report of the
246    // total harmonic restraints
247    if (simParams->getUseRestraints()){
248      mask.set(Stats::VHARM);
249    }
250
251    if (simParams->havePrintPressureTensor() &&
252        simParams->getPrintPressureTensor()){
253      mask.set(Stats::PRESSURE_TENSOR_XX);
254      mask.set(Stats::PRESSURE_TENSOR_XY);
255      mask.set(Stats::PRESSURE_TENSOR_XZ);
256      mask.set(Stats::PRESSURE_TENSOR_YX);
257      mask.set(Stats::PRESSURE_TENSOR_YY);
258      mask.set(Stats::PRESSURE_TENSOR_YZ);
259      mask.set(Stats::PRESSURE_TENSOR_ZX);
260      mask.set(Stats::PRESSURE_TENSOR_ZY);
261      mask.set(Stats::PRESSURE_TENSOR_ZZ);
262    }
228      
229 <    if (simParams->getAccumulateBoxDipole()) {
230 <      mask.set(Stats::BOX_DIPOLE_X);
266 <      mask.set(Stats::BOX_DIPOLE_Y);
267 <      mask.set(Stats::BOX_DIPOLE_Z);
268 <    }
269 <  
270 <    if (simParams->haveTaggedAtomPair() && simParams->havePrintTaggedPairDistance()) {
271 <      if (simParams->getPrintTaggedPairDistance()) {
272 <        mask.set(Stats::TAGGED_PAIR_DISTANCE);
273 <      }
274 <    }
275 <
276 <    if (simParams->getUseRNEMD()) {
277 <      mask.set(Stats::RNEMD_EXCHANGE_TOTAL);
278 <    }
229 >    stats = new Stats(info_);
230 >    statWriter = new StatWriter(info_->getStatFileName(), stats);
231      
232 <
281 <    return new StatWriter(info_->getStatFileName(), mask);
232 >    return statWriter;
233    }
234  
284
235   } //end namespace OpenMD

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines