- Timestamp:
- Jul 11, 2013, 9:43:31 PM (12 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 9c1324
- Parents:
- 11f0fa
- git-author:
- Frederik Heber <heber@…> (06/18/13 14:35:36)
- git-committer:
- Frederik Heber <heber@…> (07/11/13 21:43:31)
- Location:
- src/Atom
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Atom/atom_atominfo.cpp
r11f0fa rbcb593 279 279 { 280 280 OBSERVE; 281 NOTIFY(AtomObservable:: VelocityChanged);281 NOTIFY(AtomObservable::ForceChanged); 282 282 ASSERT(WorldTime::getTime() < AtomicForce.size(), 283 283 "AtomInfo::setAtomicForce() - Access out of range: " … … 291 291 OBSERVE; 292 292 if (WorldTime::getTime() == _step) 293 NOTIFY(AtomObservable:: VelocityChanged);293 NOTIFY(AtomObservable::ForceChanged); 294 294 const unsigned int size = AtomicForce.size(); 295 295 ASSERT(_step <= size, … … 579 579 }; 580 580 581 /** Performs a velocity verlet update of the trajectory. 582 * Parameters are according to those in configuration class. 581 /** Performs a velocity verlet update of the position at \a NextStep from \a LastStep information only. 582 * 583 * We calculate \f$x(t + \delta t) = x(t) + v(t)* \delta t + .5 * \delta t * \delta t * F(t)/m \f$. 584 * 585 * 583 586 * \param NextStep index of sequential step to set 584 587 * \param Deltat time step width 585 588 * \param IsAngstroem whether the force's underlying unit of length is angstroem or bohr radii 586 589 */ 587 void AtomInfo::VelocityVerletUpdate (int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem)590 void AtomInfo::VelocityVerletUpdateX(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem) 588 591 { 589 592 const unsigned int LastStep = NextStep == 0 ? 0 : NextStep-1; 590 593 591 594 LOG(2, "INFO: Particle that currently " << *this); 592 LOG(2, "INFO: Integrating with mass=" << getMass() << " and Deltat="595 LOG(2, "INFO: Integrating position with mass=" << getMass() << " and Deltat=" 593 596 << Deltat << " at NextStep=" << NextStep); 594 // update force595 // (F+F_old)/2m = a and thus: v = (F+F_old)/2m * t = (F + F_old) * a596 LOG(3, "INFO: Force at step " << NextStep << " is " << getAtomicForceAtStep(NextStep));597 597 598 598 // update position … … 603 603 LOG(4, "INFO: position with velocity " << getAtomicVelocityAtStep(LastStep) << " from last step " << tempVector); 604 604 tempVector += .5*Deltat*Deltat*(getAtomicForceAtStep(LastStep))*(1./getMass()); // F = m * a and s = 605 LOG(4, "INFO: position with force " << getAtomicForceAtStep( NextStep) << " from last step " << tempVector);605 LOG(4, "INFO: position with force " << getAtomicForceAtStep(LastStep) << " from last step " << tempVector); 606 606 setPositionAtStep(NextStep, tempVector); 607 607 LOG(3, "INFO: Position at step " << NextStep << " set to " << tempVector); 608 608 } 609 }; 610 611 /** Performs a velocity verlet update of the velocity at \a NextStep. 612 * 613 * \note forces at NextStep should have been calculated based on position at NextStep prior 614 * to calling this function. 615 * 616 * We calculate \f$v(t) = v(t - \delta t) + \delta _t * .5 * (F(t - \delta t) + F(t))/m \f$. 617 * 618 * Parameters are according to those in configuration class. 619 * \param NextStep index of sequential step to set 620 * \param Deltat time step width 621 * \param IsAngstroem whether the force's underlying unit of length is angstroem or bohr radii 622 */ 623 void AtomInfo::VelocityVerletUpdateU(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem) 624 { 625 const unsigned int LastStep = NextStep == 0 ? 0 : NextStep-1; 626 627 LOG(2, "INFO: Particle that currently " << *this); 628 LOG(2, "INFO: Integrating velocity with mass=" << getMass() << " and Deltat=" 629 << Deltat << " at NextStep=" << NextStep); 609 630 610 631 // Update U -
src/Atom/atom_atominfo.hpp
r11f0fa rbcb593 267 267 size_t getTrajectorySize() const; 268 268 void CopyStepOnStep(const unsigned int dest, const unsigned int src); 269 void VelocityVerletUpdate(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem); 269 void VelocityVerletUpdateX(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem); 270 void VelocityVerletUpdateU(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem); 270 271 double getKineticEnergy(const unsigned int step) const; 271 272 Vector getMomentum(const unsigned int step) const;
Note:
See TracChangeset
for help on using the changeset viewer.