Changeset bcb593 for src/Dynamics


Ignore:
Timestamp:
Jul 11, 2013, 9:43:31 PM (12 years ago)
Author:
Frederik Heber <heber@…>
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)
Message:

FIX: VerletIntegrationAction now assumes forces have just been calculated.

  • according to Wikipedia's Velocity_Verlet info, we first integrate position, then calculate forces, then integrate velocity. This assumes that forces based on next time step's position are already known. This is possible when parsed from file but not if they are calculated dynamically via fragmentation. Hence, we now integrate velocity from last time step to current, then integrate position from current time step to next. Then we are in the position to calculate forces and do this cycle again.
  • for this, VelocityVerletUpdate was split into ..X() and ..U() for independent integration of position and velocity.
  • VelocityVerletIntegration::operator() now first corrects forces, then integrates velocites, corrects them too and finally integrates positions according to the above new scheme.
  • removed option MDSteps from VerletIntegrationAction.
  • TESTFIX: Had to change regression rest on VerletIntegration since the cycle sequence has changed. It was nonsense before to have the forces already in some file respective to future position that actually first need to come out of the time integration.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Dynamics/VerletForceIntegration.hpp

    r11f0fa rbcb593  
    7878
    7979  /** Performs Verlet integration.
    80    * Note that we assume the parsed forces to be in atomic units (hence, if coordinates are in angstroem, we
    81    * have to transform them).
    82    * This adds a new MD step \f$ t + \Delta t \f$ to the config file.
     80   *
     81   * We assume that forces have just been calculated. Then, we perform the velocity
     82   * and the position calculation for \f$ t + \Delta t \f$, such that forces may be
     83   * again calculated with respect to the new position.
     84   *
    8385   * \param NextStep current time step (i.e. \f$ t + \Delta t \f$ in the sense of the velocity verlet)
    8486   * \param offset offset in matrix file to the first force component
     
    100102    // make sum of forces equal zero
    101103    if (FixedCenterOfMass)
    102       correctForceMatrixForFixedCenterOfMass(offset,NextStep);
     104      correctForceMatrixForFixedCenterOfMass(offset,NextStep-1);
    103105
    104106    // solve a constrained potential if we are meant to
    105     if (DoConstrainedMD) {
    106       performConstraintMinimization(DoConstrainedMD,NextStep);
     107    if (DoConstrainedMD)
     108      performConstraintMinimization(DoConstrainedMD,NextStep-1);
     109
     110    if (NextStep > 0) {
     111      for(typename AtomSetMixin<T>::iterator iter = atoms.begin(); iter != atoms.end(); ++iter) {
     112        //std::cout << "Id of atom is " << (*iter)->getId() << std::endl;
     113        (*iter)->VelocityVerletUpdateU((*iter)->getId(), NextStep-1, Deltat, IsAngstroem);
     114      }
     115
     116      // make sum of velocities equal zero
     117      if (FixedCenterOfMass)
     118        correctVelocitiesForFixedCenterOfMass(NextStep-1);
     119
     120      // thermostat
     121      performThermostatControl(NextStep-1);
    107122    }
    108123
     
    112127    for(typename AtomSetMixin<T>::iterator iter = atoms.begin(); iter != atoms.end(); ++iter) {
    113128      //std::cout << "Id of atom is " << (*iter)->getId() << std::endl;
    114       (*iter)->VelocityVerletUpdate((*iter)->getId(), NextStep, Deltat, IsAngstroem);
    115     }
    116 
    117     // make sum of velocities equal zero
    118     if (FixedCenterOfMass)
    119       correctVelocitiesForFixedCenterOfMass(NextStep);
    120 
    121     // thermostat
    122     performThermostatControl(NextStep);
     129      (*iter)->VelocityVerletUpdateX((*iter)->getId(), NextStep, Deltat, IsAngstroem);
     130    }
    123131
    124132    // exit
Note: See TracChangeset for help on using the changeset viewer.