Ignore:
Timestamp:
Feb 24, 2011, 5:56:03 PM (14 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:
6b020f
Parents:
6625c3
Message:

Suffixed getters and setters for AtomInfo trajecories with AtStep.

  • AtomInfo:: getters are now const members
  • added lots of ASSERTS to getters with time step to assure no out-of-bounds access.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/atom_atominfo.cpp

    r6625c3 r056e70  
    8080const double& AtomInfo::operator[](size_t i) const
    8181{
     82  ASSERT(AtomicPosition.size() > 0,
     83      "AtomInfo::operator[]() - Access out of range.");
    8284  return AtomicPosition[0][i];
    8385}
     
    8587const double& AtomInfo::at(size_t i) const
    8688{
     89  ASSERT(AtomicPosition.size() > 0,
     90      "AtomInfo::at() - Access out of range.");
    8791  return AtomicPosition[0].at(i);
    8892}
    8993
     94const double& AtomInfo::atStep(size_t i, int _step) const
     95{
     96  ASSERT(AtomicPosition.size() > _step,
     97      "AtomInfo::atStep() - Access out of range.");
     98  return AtomicPosition[_step].at(i);
     99}
     100
    90101void AtomInfo::set(size_t i, const double value)
    91102{
     103  ASSERT(AtomicPosition.size() > 0,
     104      "AtomInfo::set() - Access out of range.");
    92105  AtomicPosition[0].at(i) = value;
    93106}
     
    95108const Vector& AtomInfo::getPosition() const
    96109{
     110  ASSERT(AtomicPosition.size() > 0,
     111      "AtomInfo::getPosition() - Access out of range.");
    97112  return AtomicPosition[0];
    98113}
    99114
    100 const Vector& AtomInfo::getPosition(const int _step) const
     115const Vector& AtomInfo::getPositionAtStep(const int _step) const
    101116{
    102117  ASSERT(_step < AtomicPosition.size(),
    103       "AtomInfo::getPosition() - Access out of range.");
     118      "AtomInfo::getPositionAtStep() - Access out of range.");
    104119  return AtomicPosition[_step];
    105120}
     
    114129}
    115130
    116 Vector& AtomInfo::getAtomicVelocity()
    117 {
     131//Vector& AtomInfo::getAtomicVelocity()
     132//{
     133//  return AtomicVelocity[0];
     134//}
     135
     136//Vector& AtomInfo::getAtomicVelocity(const int _step)
     137//{
     138//  ASSERT(_step < AtomicVelocity.size(),
     139//      "AtomInfo::getAtomicVelocity() - Access out of range.");
     140//  return AtomicVelocity[_step];
     141//}
     142
     143const Vector& AtomInfo::getAtomicVelocity() const
     144{
     145  ASSERT(AtomicVelocity.size() > 0,
     146      "AtomInfo::getAtomicVelocity() - Access out of range.");
    118147  return AtomicVelocity[0];
    119148}
    120149
    121 Vector& AtomInfo::getAtomicVelocity(const int _step)
     150const Vector& AtomInfo::getAtomicVelocityAtStep(const int _step) const
    122151{
    123152  ASSERT(_step < AtomicVelocity.size(),
     
    126155}
    127156
    128 const Vector& AtomInfo::getAtomicVelocity() const
    129 {
    130   return AtomicVelocity[0];
    131 }
    132 
    133 const Vector& AtomInfo::getAtomicVelocity(const int _step) const
    134 {
    135   ASSERT(_step < AtomicVelocity.size(),
    136       "AtomInfo::getAtomicVelocity() - Access out of range.");
    137   return AtomicVelocity[_step];
    138 }
    139 
    140157void AtomInfo::setAtomicVelocity(const Vector &_newvelocity)
    141158{
     159  ASSERT(0 < AtomicVelocity.size(),
     160      "AtomInfo::setAtomicVelocity() - Access out of range.");
    142161  AtomicVelocity[0] = _newvelocity;
    143162}
    144163
    145 void AtomInfo::setAtomicVelocity(const int _step, const Vector &_newvelocity)
     164void AtomInfo::setAtomicVelocityAtStep(const int _step, const Vector &_newvelocity)
    146165{
    147166  ASSERT(_step <= AtomicVelocity.size(),
    148       "AtomInfo::setAtomicVelocity() - Access out of range.");
     167      "AtomInfo::setAtomicVelocityAtStep() - Access out of range.");
    149168  if(_step < (int)AtomicVelocity.size()) {
    150169    AtomicVelocity[_step] = _newvelocity;
     
    156175const Vector& AtomInfo::getAtomicForce() const
    157176{
     177  ASSERT(0 < AtomicForce.size(),
     178      "AtomInfo::getAtomicForce() - Access out of range.");
    158179  return AtomicForce[0];
    159180}
    160181
    161 const Vector& AtomInfo::getAtomicForce(const int _step) const
     182const Vector& AtomInfo::getAtomicForceAtStep(const int _step) const
    162183{
    163184  ASSERT(_step < AtomicForce.size(),
     
    168189void AtomInfo::setAtomicForce(const Vector &_newforce)
    169190{
     191  ASSERT(0 < AtomicForce.size(),
     192      "AtomInfo::setAtomicForce() - Access out of range.");
    170193  AtomicForce[0] = _newforce;
    171194}
    172195
    173 void AtomInfo::setAtomicForce(const int _step, const Vector &_newforce)
    174 {
    175   ASSERT(_step <= AtomicForce.size(),
     196void AtomInfo::setAtomicForceAtStep(const int _step, const Vector &_newforce)
     197{
     198  const int size = AtomicForce.size();
     199  ASSERT(_step <= size,
    176200      "AtomInfo::setAtomicForce() - Access out of range.");
    177   if(_step < (int)AtomicForce.size()) {
     201  if(_step < size) {
    178202    AtomicForce[_step] = _newforce;
    179   } else if (_step == (int)AtomicForce.size()) {
     203  } else if (_step == size) {
    180204    AtomicForce.push_back(_newforce);
    181205  }
     
    194218void AtomInfo::setPosition(const Vector& _vector)
    195219{
     220  ASSERT(0 < AtomicPosition.size(),
     221      "AtomInfo::setPosition() - Access out of range.");
    196222  AtomicPosition[0] = _vector;
    197223  //cout << "AtomInfo::setPosition: " << getType()->symbol << " at " << getPosition() << endl;
    198224}
    199225
    200 void AtomInfo::setPosition(int _step, const Vector& _vector)
     226void AtomInfo::setPositionAtStep(int _step, const Vector& _vector)
    201227{
    202228  ASSERT(_step <= AtomicPosition.size(),
     
    212238const VectorInterface& AtomInfo::operator+=(const Vector& b)
    213239{
     240  ASSERT(0 < AtomicPosition.size(),
     241      "AtomInfo::operator+=() - Access out of range.");
    214242  AtomicPosition[0] += b;
    215243  return *this;
     
    218246const VectorInterface& AtomInfo::operator-=(const Vector& b)
    219247{
     248  ASSERT(0 < AtomicPosition.size(),
     249      "AtomInfo::operator-=() - Access out of range.");
    220250  AtomicPosition[0] -= b;
    221251  return *this;
     
    224254Vector const AtomInfo::operator+(const Vector& b) const
    225255{
     256  ASSERT(0 < AtomicPosition.size(),
     257      "AtomInfo::operator+() - Access out of range.");
    226258  Vector a(AtomicPosition[0]);
    227259  a += b;
     
    231263Vector const AtomInfo::operator-(const Vector& b) const
    232264{
     265  ASSERT(0 < AtomicPosition.size(),
     266      "AtomInfo::operator-() - Access out of range.");
    233267  Vector a(AtomicPosition[0]);
    234268  a -= b;
     
    238272double AtomInfo::distance(const Vector &point) const
    239273{
     274  ASSERT(0 < AtomicPosition.size(),
     275      "AtomInfo::distance() - Access out of range.");
    240276  return AtomicPosition[0].distance(point);
    241277}
     
    243279double AtomInfo::DistanceSquared(const Vector &y) const
    244280{
     281  ASSERT(0 < AtomicPosition.size(),
     282      "AtomInfo::DistanceSquared() - Access out of range.");
    245283  return AtomicPosition[0].DistanceSquared(y);
    246284}
     
    248286double AtomInfo::distance(const VectorInterface &_atom) const
    249287{
     288  ASSERT(0 < AtomicPosition.size(),
     289      "AtomInfo::distance() - Access out of range.");
    250290  return _atom.distance(AtomicPosition[0]);
    251291}
     
    253293double AtomInfo::DistanceSquared(const VectorInterface &_atom) const
    254294{
     295  ASSERT(0 < AtomicPosition.size(),
     296      "AtomInfo::DistanceSquared() - Access out of range.");
    255297  return _atom.DistanceSquared(AtomicPosition[0]);
    256298}
     
    258300VectorInterface &AtomInfo::operator=(const Vector& _vector)
    259301{
     302  ASSERT(0 < AtomicPosition.size(),
     303      "AtomInfo::operator=() - Access out of range.");
    260304  AtomicPosition[0] = _vector;
    261305  return *this;
     
    264308void AtomInfo::ScaleAll(const double *factor)
    265309{
     310  ASSERT(0 < AtomicPosition.size(),
     311      "AtomInfo::ScaleAll() - Access out of range.");
    266312  AtomicPosition[0].ScaleAll(factor);
    267313}
     
    269315void AtomInfo::ScaleAll(const Vector &factor)
    270316{
     317  ASSERT(0 < AtomicPosition.size(),
     318      "AtomInfo::ScaleAll() - Access out of range.");
    271319  AtomicPosition[0].ScaleAll(factor);
    272320}
     
    274322void AtomInfo::Scale(const double factor)
    275323{
     324  ASSERT(0 < AtomicPosition.size(),
     325      "AtomInfo::Scale() - Access out of range.");
    276326  AtomicPosition[0].Scale(factor);
    277327}
     
    279329void AtomInfo::Zero()
    280330{
     331  ASSERT(0 < AtomicPosition.size(),
     332      "AtomInfo::Zero() - Access out of range.");
    281333  AtomicPosition[0].Zero();
    282334}
     
    284336void AtomInfo::One(const double one)
    285337{
     338  ASSERT(0 < AtomicPosition.size(),
     339      "AtomInfo::One() - Access out of range.");
    286340  AtomicPosition[0].One(one);
    287341}
     
    289343void AtomInfo::LinearCombinationOfVectors(const Vector &x1, const Vector &x2, const Vector &x3, const double * const factors)
    290344{
     345  ASSERT(0 < AtomicPosition.size(),
     346      "AtomInfo::LinearCombinationOfVectors() - Access out of range.");
    291347  AtomicPosition[0].LinearCombinationOfVectors(x1,x2,x3,factors);
    292348}
     
    295351 *  returns the kinetic energy of this atom at a given time step
    296352 */
    297 double AtomInfo::getKineticEnergy(unsigned int step) const{
    298   return getMass() * AtomicVelocity[step].NormSquared();
    299 }
    300 
    301 Vector AtomInfo::getMomentum(unsigned int step) const{
    302   return getMass()*AtomicVelocity[step];
     353double AtomInfo::getKineticEnergy(unsigned int _step) const{
     354  ASSERT(_step < AtomicPosition.size(),
     355      "AtomInfo::getKineticEnergy() - Access out of range.");
     356  return getMass() * AtomicVelocity[_step].NormSquared();
     357}
     358
     359Vector AtomInfo::getMomentum(unsigned int _step) const{
     360  ASSERT(_step < AtomicPosition.size(),
     361      "AtomInfo::getMomentum() - Access out of range.");
     362  return getMass()*AtomicVelocity[_step];
    303363}
    304364
     
    354414void AtomInfo::VelocityVerletUpdate(int nr, int NextStep, config *configuration, ForceMatrix *Force, const size_t offset)
    355415{
    356   //a = configuration.Deltat*0.5/walker->type->mass;        // (F+F_old)/2m = a and thus: v = (F+F_old)/2m * t = (F + F_old) * a
    357   if ((int)AtomicPosition.size() <= NextStep)
    358     ResizeTrajectory(NextStep+10);
    359   for (int d=0; d<NDIM; d++) {
    360     AtomicForce.at(NextStep)[d] = -Force->Matrix[0][nr][d+offset]*(configuration->GetIsAngstroem() ? AtomicLengthToAngstroem : 1.);
    361     AtomicPosition.at(NextStep)[d] = AtomicPosition.at(NextStep-1)[d];
    362     AtomicPosition.at(NextStep)[d] += configuration->Deltat*(AtomicVelocity.at(NextStep-1)[d]);     // s(t) = s(0) + v * deltat + 1/2 a * deltat^2
    363     AtomicPosition.at(NextStep)[d] += 0.5*configuration->Deltat*configuration->Deltat*(AtomicForce.at(NextStep)[d]/getMass());     // F = m * a and s =
    364   }
     416  // update force
     417  // (F+F_old)/2m = a and thus: v = (F+F_old)/2m * t = (F + F_old) * a
     418  Vector tempVector;
     419  for (int d=0; d<NDIM; d++)
     420    tempVector[d] = -Force->Matrix[0][nr][d+offset]*(configuration->GetIsAngstroem() ? AtomicLengthToAngstroem : 1.);
     421  setAtomicForceAtStep(NextStep, tempVector);
     422
     423  // update position
     424  tempVector = getPositionAtStep(NextStep-1);
     425  tempVector += configuration->Deltat*(getAtomicVelocityAtStep(NextStep-1));     // s(t) = s(0) + v * deltat + 1/2 a * deltat^2
     426  tempVector += 0.5*configuration->Deltat*configuration->Deltat*(getAtomicForceAtStep(NextStep))*(1./getMass());     // F = m * a and s =
     427  setPositionAtStep(NextStep, tempVector);
     428
    365429  // Update U
    366   for (int d=0; d<NDIM; d++) {
    367     AtomicVelocity.at(NextStep)[d] = AtomicVelocity.at(NextStep-1)[d];
    368     AtomicVelocity.at(NextStep)[d] += configuration->Deltat * (AtomicForce.at(NextStep)[d]+AtomicForce.at(NextStep-1)[d]/getMass()); // v = F/m * t
    369   }
    370   // Update R (and F)
    371 //      out << "Integrated position&velocity of step " << (NextStep) << ": (";
    372 //      for (int d=0;d<NDIM;d++)
    373 //        out << AtomicPosition.at(NextStep).x[d] << " ";          // next step
    374 //      out << ")\t(";
    375 //      for (int d=0;d<NDIM;d++)
    376 //        Log() << Verbose(0) << AtomicVelocity.at(NextStep).x[d] << " ";          // next step
    377 //      out << ")" << endl;
     430  tempVector = getAtomicVelocityAtStep(NextStep-1);
     431  tempVector += configuration->Deltat * (getAtomicForceAtStep(NextStep)+getAtomicForceAtStep(NextStep-1))*(1./getMass()); // v = F/m * t
     432  setAtomicVelocityAtStep(NextStep, tempVector);
     433
     434  // some info for debugging
     435  DoLog(2) && (Log() << Verbose(2)
     436      << "Integrated position&velocity of step " << (NextStep) << ": ("
     437      << getPositionAtStep(NextStep) << ")\t("
     438      << getAtomicVelocityAtStep(NextStep) << ")" << std::endl);
    378439};
    379440
Note: See TracChangeset for help on using the changeset viewer.