Ignore:
Timestamp:
Mar 1, 2011, 10:16:39 AM (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:
5309ba
Parents:
a479fa
git-author:
Frederik Heber <heber@…> (02/22/11 00:15:33)
git-committer:
Frederik Heber <heber@…> (03/01/11 10:16:39)
Message:

ParticleInfo::ParticleInfo_nr is protected and accessed via getter/setter.

  • many changes (~400) in molecule- and tesselation-related functions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/molecule_dynamics.cpp

    ra479fa r735b1c  
    5959      break;
    6060    // determine normalized trajectories direction vector (n1, n2)
    61     Sprinter = Params.PermutationMap[Walker->ParticleInfo_nr];   // find first target point
     61    Sprinter = Params.PermutationMap[Walker->getNr()];   // find first target point
    6262    trajectory1 = Sprinter->getPositionAtStep(Params.endstep) - Walker->getPositionAtStep(Params.startstep);
    6363    trajectory1.Normalize();
    6464    Norm1 = trajectory1.Norm();
    65     Sprinter = Params.PermutationMap[(*iter)->ParticleInfo_nr];   // find second target point
     65    Sprinter = Params.PermutationMap[(*iter)->getNr()];   // find second target point
    6666    trajectory2 = Sprinter->getPositionAtStep(Params.endstep) - (*iter)->getPositionAtStep(Params.startstep);
    6767    trajectory2.Normalize();
     
    7171      tmp = Walker->getPositionAtStep(Params.startstep).distance((*iter)->getPositionAtStep(Params.startstep));
    7272    } else if (Norm1 < MYEPSILON) {
    73       Sprinter = Params.PermutationMap[Walker->ParticleInfo_nr];   // find first target point
     73      Sprinter = Params.PermutationMap[Walker->getNr()];   // find first target point
    7474      trajectory1 = Sprinter->getPositionAtStep(Params.endstep) - (*iter)->getPositionAtStep(Params.startstep);
    7575      trajectory2 *= trajectory1.ScalarProduct(trajectory2); // trajectory2 is scaled to unity, hence we don't need to divide by anything
     
    7777      tmp = trajectory1.Norm();  // remaining norm is distance
    7878    } else if (Norm2 < MYEPSILON) {
    79       Sprinter = Params.PermutationMap[(*iter)->ParticleInfo_nr];   // find second target point
     79      Sprinter = Params.PermutationMap[(*iter)->getNr()];   // find second target point
    8080      trajectory2 = Sprinter->getPositionAtStep(Params.endstep) - Walker->getPositionAtStep(Params.startstep);  // copy second offset
    8181      trajectory1 *= trajectory2.ScalarProduct(trajectory1); // trajectory1 is scaled to unity, hence we don't need to divide by anything
     
    147147  double result = 0.;
    148148  for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
    149     if ((Params.PermutationMap[Walker->ParticleInfo_nr] == Params.PermutationMap[(*iter)->ParticleInfo_nr]) && (Walker->ParticleInfo_nr < (*iter)->ParticleInfo_nr)) {
    150   //    atom *Sprinter = PermutationMap[Walker->ParticleInfo_nr];
     149    if ((Params.PermutationMap[Walker->getNr()] == Params.PermutationMap[(*iter)->getNr()]) && (Walker->getNr() < (*iter)->getNr())) {
     150  //    atom *Sprinter = PermutationMap[Walker->getNr()];
    151151  //        Log() << Verbose(0) << *Walker << " and " << *(*iter) << " are heading to the same target at ";
    152152  //        Log() << Verbose(0) << Sprinter->getPosition(endstep);
     
    182182  for (molecule::const_iterator iter = begin(); iter != end(); ++iter) {
    183183    // first term: distance to target
    184     Runner = Params.PermutationMap[(*iter)->ParticleInfo_nr];   // find target point
     184    Runner = Params.PermutationMap[(*iter)->getNr()];   // find target point
    185185    tmp = ((*iter)->getPositionAtStep(Params.startstep).distance(Runner->getPositionAtStep(Params.endstep)));
    186186    tmp *= Params.IsAngstroem ? 1. : 1./AtomicLengthToAngstroem;
     
    213213  zeile2 << "                ";
    214214  for (int i=0;i<AtomCount;i++) {
    215     Params.DoubleList[Params.PermutationMap[i]->ParticleInfo_nr]++;
     215    Params.DoubleList[Params.PermutationMap[i]->getNr()]++;
    216216    zeile1 << i << " ";
    217     zeile2 << Params.PermutationMap[i]->ParticleInfo_nr << " ";
     217    zeile2 << Params.PermutationMap[i]->getNr() << " ";
    218218  }
    219219  for (int i=0;i<AtomCount;i++)
     
    239239  for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
    240240    for (molecule::const_iterator runner = mol->begin(); runner != mol->end(); ++runner) {
    241       Params.DistanceList[(*iter)->ParticleInfo_nr]->insert( DistancePair((*iter)->getPositionAtStep(Params.startstep).distance((*runner)->getPositionAtStep(Params.endstep)), (*runner)) );
     241      Params.DistanceList[(*iter)->getNr()]->insert( DistancePair((*iter)->getPositionAtStep(Params.startstep).distance((*runner)->getPositionAtStep(Params.endstep)), (*runner)) );
    242242    }
    243243  }
     
    252252{
    253253  for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
    254     Params.StepList[(*iter)->ParticleInfo_nr] = Params.DistanceList[(*iter)->ParticleInfo_nr]->begin();    // stores the step to the next iterator that could be a possible next target
    255     Params.PermutationMap[(*iter)->ParticleInfo_nr] = Params.DistanceList[(*iter)->ParticleInfo_nr]->begin()->second;   // always pick target with the smallest distance
    256     Params.DoubleList[Params.DistanceList[(*iter)->ParticleInfo_nr]->begin()->second->ParticleInfo_nr]++;            // increase this target's source count (>1? not injective)
    257     Params.DistanceIterators[(*iter)->ParticleInfo_nr] = Params.DistanceList[(*iter)->ParticleInfo_nr]->begin();    // and remember which one we picked
    258     DoLog(2) && (Log() << Verbose(2) << **iter << " starts with distance " << Params.DistanceList[(*iter)->ParticleInfo_nr]->begin()->first << "." << endl);
     254    Params.StepList[(*iter)->getNr()] = Params.DistanceList[(*iter)->getNr()]->begin();    // stores the step to the next iterator that could be a possible next target
     255    Params.PermutationMap[(*iter)->getNr()] = Params.DistanceList[(*iter)->getNr()]->begin()->second;   // always pick target with the smallest distance
     256    Params.DoubleList[Params.DistanceList[(*iter)->getNr()]->begin()->second->getNr()]++;            // increase this target's source count (>1? not injective)
     257    Params.DistanceIterators[(*iter)->getNr()] = Params.DistanceList[(*iter)->getNr()]->begin();    // and remember which one we picked
     258    DoLog(2) && (Log() << Verbose(2) << **iter << " starts with distance " << Params.DistanceList[(*iter)->getNr()]->begin()->first << "." << endl);
    259259  }
    260260};
     
    270270{
    271271  double Potential = 0;
    272   DistanceMap::iterator NewBase = Params.DistanceIterators[Walker->ParticleInfo_nr];  // store old base
     272  DistanceMap::iterator NewBase = Params.DistanceIterators[Walker->getNr()];  // store old base
    273273  do {
    274274    NewBase++;  // take next further distance in distance to targets list that's a target of no one
    275   } while ((Params.DoubleList[NewBase->second->ParticleInfo_nr] != 0) && (NewBase != Params.DistanceList[Walker->ParticleInfo_nr]->end()));
    276   if (NewBase != Params.DistanceList[Walker->ParticleInfo_nr]->end()) {
    277     Params.PermutationMap[Walker->ParticleInfo_nr] = NewBase->second;
     275  } while ((Params.DoubleList[NewBase->second->getNr()] != 0) && (NewBase != Params.DistanceList[Walker->getNr()]->end()));
     276  if (NewBase != Params.DistanceList[Walker->getNr()]->end()) {
     277    Params.PermutationMap[Walker->getNr()] = NewBase->second;
    278278    Potential = fabs(mol->ConstrainedPotential(Params));
    279279    if (Potential > OldPotential) { // undo
    280       Params.PermutationMap[Walker->ParticleInfo_nr] = Params.DistanceIterators[Walker->ParticleInfo_nr]->second;
     280      Params.PermutationMap[Walker->getNr()] = Params.DistanceIterators[Walker->getNr()]->second;
    281281    } else {  // do
    282       Params.DoubleList[Params.DistanceIterators[Walker->ParticleInfo_nr]->second->ParticleInfo_nr]--;  // decrease the old entry in the doubles list
    283       Params.DoubleList[NewBase->second->ParticleInfo_nr]++;    // increase the old entry in the doubles list
    284       Params.DistanceIterators[Walker->ParticleInfo_nr] = NewBase;
     282      Params.DoubleList[Params.DistanceIterators[Walker->getNr()]->second->getNr()]--;  // decrease the old entry in the doubles list
     283      Params.DoubleList[NewBase->second->getNr()]++;    // increase the old entry in the doubles list
     284      Params.DistanceIterators[Walker->getNr()] = NewBase;
    285285      OldPotential = Potential;
    286286      DoLog(3) && (Log() << Verbose(3) << "Found a new permutation, new potential is " << OldPotential << "." << endl);
     
    310310    if (iter == mol->end()) // round-robin at the end
    311311      iter = mol->begin();
    312     if (Params.DoubleList[Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second->ParticleInfo_nr] <= 1)  // no need to make those injective that aren't
     312    if (Params.DoubleList[Params.DistanceIterators[(*iter)->getNr()]->second->getNr()] <= 1)  // no need to make those injective that aren't
    313313      continue;
    314314    // now, try finding a new one
     
    398398      for (; iter != end(); ++iter) {
    399399        PrintPermutationMap(getAtomCount(), Params);
    400         Sprinter = Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second;   // store initial partner
    401         Strider = Params.DistanceIterators[(*iter)->ParticleInfo_nr];  //remember old iterator
    402         Params.DistanceIterators[(*iter)->ParticleInfo_nr] = Params.StepList[(*iter)->ParticleInfo_nr];
    403         if (Params.DistanceIterators[(*iter)->ParticleInfo_nr] == Params.DistanceList[(*iter)->ParticleInfo_nr]->end()) {// stop, before we run through the list and still on
    404           Params.DistanceIterators[(*iter)->ParticleInfo_nr] == Params.DistanceList[(*iter)->ParticleInfo_nr]->begin();
     400        Sprinter = Params.DistanceIterators[(*iter)->getNr()]->second;   // store initial partner
     401        Strider = Params.DistanceIterators[(*iter)->getNr()];  //remember old iterator
     402        Params.DistanceIterators[(*iter)->getNr()] = Params.StepList[(*iter)->getNr()];
     403        if (Params.DistanceIterators[(*iter)->getNr()] == Params.DistanceList[(*iter)->getNr()]->end()) {// stop, before we run through the list and still on
     404          Params.DistanceIterators[(*iter)->getNr()] == Params.DistanceList[(*iter)->getNr()]->begin();
    405405          break;
    406406        }
    407         //Log() << Verbose(2) << "Current Walker: " << *(*iter) << " with old/next candidate " << *Sprinter << "/" << *DistanceIterators[(*iter)->ParticleInfo_nr]->second << "." << endl;
     407        //Log() << Verbose(2) << "Current Walker: " << *(*iter) << " with old/next candidate " << *Sprinter << "/" << *DistanceIterators[(*iter)->getNr()]->second << "." << endl;
    408408        // find source of the new target
    409409        molecule::const_iterator runner = begin();
    410410        for (; runner != end(); ++runner) { // find the source whose toes we might be stepping on (Walker's new target should be in use by another already)
    411           if (Params.PermutationMap[(*runner)->ParticleInfo_nr] == Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second) {
    412             //Log() << Verbose(2) << "Found the corresponding owner " << *(*runner) << " to " << *PermutationMap[(*runner)->ParticleInfo_nr] << "." << endl;
     411          if (Params.PermutationMap[(*runner)->getNr()] == Params.DistanceIterators[(*iter)->getNr()]->second) {
     412            //Log() << Verbose(2) << "Found the corresponding owner " << *(*runner) << " to " << *PermutationMap[(*runner)->getNr()] << "." << endl;
    413413            break;
    414414          }
     
    416416        if (runner != end()) { // we found the other source
    417417          // then look in its distance list for Sprinter
    418           Rider = Params.DistanceList[(*runner)->ParticleInfo_nr]->begin();
    419           for (; Rider != Params.DistanceList[(*runner)->ParticleInfo_nr]->end(); Rider++)
     418          Rider = Params.DistanceList[(*runner)->getNr()]->begin();
     419          for (; Rider != Params.DistanceList[(*runner)->getNr()]->end(); Rider++)
    420420            if (Rider->second == Sprinter)
    421421              break;
    422           if (Rider != Params.DistanceList[(*runner)->ParticleInfo_nr]->end()) { // if we have found one
    423             //Log() << Verbose(2) << "Current Other: " << *(*runner) << " with old/next candidate " << *PermutationMap[(*runner)->ParticleInfo_nr] << "/" << *Rider->second << "." << endl;
     422          if (Rider != Params.DistanceList[(*runner)->getNr()]->end()) { // if we have found one
     423            //Log() << Verbose(2) << "Current Other: " << *(*runner) << " with old/next candidate " << *PermutationMap[(*runner)->getNr()] << "/" << *Rider->second << "." << endl;
    424424            // exchange both
    425             Params.PermutationMap[(*iter)->ParticleInfo_nr] = Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second; // put next farther distance into PermutationMap
    426             Params.PermutationMap[(*runner)->ParticleInfo_nr] = Sprinter;  // and hand the old target to its respective owner
     425            Params.PermutationMap[(*iter)->getNr()] = Params.DistanceIterators[(*iter)->getNr()]->second; // put next farther distance into PermutationMap
     426            Params.PermutationMap[(*runner)->getNr()] = Sprinter;  // and hand the old target to its respective owner
    427427            PrintPermutationMap(getAtomCount(), Params);
    428428            // calculate the new potential
     
    431431            if (Potential > OldPotential) { // we made everything worse! Undo ...
    432432              //Log() << Verbose(3) << "Nay, made the potential worse: " << Potential << " vs. " << OldPotential << "!" << endl;
    433               //Log() << Verbose(3) << "Setting " << *(*runner) << "'s source to " << *Params.DistanceIterators[(*runner)->ParticleInfo_nr]->second << "." << endl;
     433              //Log() << Verbose(3) << "Setting " << *(*runner) << "'s source to " << *Params.DistanceIterators[(*runner)->getNr()]->second << "." << endl;
    434434              // Undo for Runner (note, we haven't moved the iteration yet, we may use this)
    435               Params.PermutationMap[(*runner)->ParticleInfo_nr] = Params.DistanceIterators[(*runner)->ParticleInfo_nr]->second;
     435              Params.PermutationMap[(*runner)->getNr()] = Params.DistanceIterators[(*runner)->getNr()]->second;
    436436              // Undo for Walker
    437               Params.DistanceIterators[(*iter)->ParticleInfo_nr] = Strider;  // take next farther distance target
    438               //Log() << Verbose(3) << "Setting " << *(*iter) << "'s source to " << *Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second << "." << endl;
    439               Params.PermutationMap[(*iter)->ParticleInfo_nr] = Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second;
     437              Params.DistanceIterators[(*iter)->getNr()] = Strider;  // take next farther distance target
     438              //Log() << Verbose(3) << "Setting " << *(*iter) << "'s source to " << *Params.DistanceIterators[(*iter)->getNr()]->second << "." << endl;
     439              Params.PermutationMap[(*iter)->getNr()] = Params.DistanceIterators[(*iter)->getNr()]->second;
    440440            } else {
    441               Params.DistanceIterators[(*runner)->ParticleInfo_nr] = Rider;  // if successful also move the pointer in the iterator list
     441              Params.DistanceIterators[(*runner)->getNr()] = Rider;  // if successful also move the pointer in the iterator list
    442442              DoLog(3) && (Log() << Verbose(3) << "Found a better permutation, new potential is " << Potential << " vs." << OldPotential << "." << endl);
    443443              OldPotential = Potential;
     
    453453          }
    454454        } else {
    455           Params.PermutationMap[(*iter)->ParticleInfo_nr] = Params.DistanceIterators[(*iter)->ParticleInfo_nr]->second; // new target has no source!
     455          Params.PermutationMap[(*iter)->getNr()] = Params.DistanceIterators[(*iter)->getNr()]->second; // new target has no source!
    456456        }
    457         Params.StepList[(*iter)->ParticleInfo_nr]++; // take next farther distance target
     457        Params.StepList[(*iter)->getNr()]++; // take next farther distance target
    458458      }
    459459    } while (++iter != end());
     
    486486  DoLog(1) && (Log() << Verbose(1) << "Calculating forces and adding onto ForceMatrix ... " << endl);
    487487  BOOST_FOREACH(atom *_atom, atoms) {
    488     atom *Sprinter = PermutationMap[_atom->ParticleInfo_nr];
     488    atom *Sprinter = PermutationMap[_atom->getNr()];
    489489    // set forces
    490490    for (int i=NDIM;i++;)
    491       Force->Matrix[0][_atom->ParticleInfo_nr][5+i] += 2.*constant*sqrt(_atom->getPositionAtStep(startstep).distance(Sprinter->getPositionAtStep(endstep)));
     491      Force->Matrix[0][_atom->getNr()][5+i] += 2.*constant*sqrt(_atom->getPositionAtStep(startstep).distance(Sprinter->getPositionAtStep(endstep)));
    492492  }
    493493  DoLog(1) && (Log() << Verbose(1) << "done." << endl);
     
    520520    PermutationMap = new atom *[getAtomCount()];
    521521    for(internal_iterator iter = atoms.begin(); iter != atoms.end();++iter){
    522       PermutationMap[(*iter)->ParticleInfo_nr] = (*iter);
     522      PermutationMap[(*iter)->getNr()] = (*iter);
    523523    }
    524524  }
     
    540540      Sprinter = mol->AddCopyAtom((*iter));
    541541      // add to Trajectories
    542       Vector temp = (*iter)->getPositionAtStep(startstep) + (PermutationMap[(*iter)->ParticleInfo_nr]->getPositionAtStep(endstep) - (*iter)->getPositionAtStep(startstep))*((double)step/(double)MaxSteps);
     542      Vector temp = (*iter)->getPositionAtStep(startstep) + (PermutationMap[(*iter)->getNr()]->getPositionAtStep(endstep) - (*iter)->getPositionAtStep(startstep))*((double)step/(double)MaxSteps);
    543543      Sprinter->setPosition(temp);
    544544      (*iter)->setAtomicVelocityAtStep(step, zeroVec);
     
    618618  // check size of vectors
    619619  BOOST_FOREACH(atom *_atom, atoms) {
    620     _atom->VelocityVerletUpdate(_atom->ParticleInfo_nr, MDSteps+1, &configuration, &Force, (const size_t) 0);
     620    _atom->VelocityVerletUpdate(_atom->getNr(), MDSteps+1, &configuration, &Force, (const size_t) 0);
    621621  }
    622622
Note: See TracChangeset for help on using the changeset viewer.