Changeset fcd7b6 for src/molecule.cpp


Ignore:
Timestamp:
Oct 7, 2009, 1:11:28 PM (16 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:
681a8a
Parents:
e9f8f9
git-author:
Frederik Heber <heber@…> (10/07/09 12:14:15)
git-committer:
Frederik Heber <heber@…> (10/07/09 13:11:28)
Message:

In molecule::OutputTrajectories() ActOnAllAtoms() with new function atom::OutputTrajectory() is used.

For this to work, I had to change the Trajectory struct that was so far included in molecule.hpp to be incorporated directly into the class atom.
NOTE: This incorporation is incomplete and a ticket (#34) has been filed to remind of this issue.
However, the trajectory is better suited to reside in atom anyway and was probably just put in molecule due to memory prejudices against STL vector<>.
Functions in molecule.cpp, config.cpp, molecule_geometry.cpp and molecule_dynamics.cpp were adapted (changed from Trajectories[atom *] to atom *->Trajectory).
And the atom pointer in the Trajectory structure was removed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/molecule.cpp

    re9f8f9 rfcd7b6  
    458458      Walker->type = elemente->FindElement(1);
    459459    }
    460     if (Trajectories[Walker].R.size() <= (unsigned int)MDSteps) {
    461       Trajectories[Walker].R.resize(MDSteps+10);
    462       Trajectories[Walker].U.resize(MDSteps+10);
    463       Trajectories[Walker].F.resize(MDSteps+10);
     460    if (Walker->Trajectory.R.size() <= (unsigned int)MDSteps) {
     461      Walker->Trajectory.R.resize(MDSteps+10);
     462      Walker->Trajectory.U.resize(MDSteps+10);
     463      Walker->Trajectory.F.resize(MDSteps+10);
    464464    }
    465465    for(j=NDIM;j--;) {
    466466      Walker->x.x[j] = x[j];
    467       Trajectories[Walker].R.at(MDSteps-1).x[j] = x[j];
    468       Trajectories[Walker].U.at(MDSteps-1).x[j] = 0;
    469       Trajectories[Walker].F.at(MDSteps-1).x[j] = 0;
     467      Walker->Trajectory.R.at(MDSteps-1).x[j] = x[j];
     468      Walker->Trajectory.U.at(MDSteps-1).x[j] = 0;
     469      Walker->Trajectory.F.at(MDSteps-1).x[j] = 0;
    470470    }
    471471    AddAtom(Walker);  // add to molecule
     
    624624  if (ElementsInMolecule[pointer->type->Z] == 0)  // was last atom of this element?
    625625    ElementCount--;
    626   Trajectories.erase(pointer);
    627626  return remove(pointer, start, end);
    628627};
     
    642641  if (ElementsInMolecule[pointer->type->Z] == 0)  // was last atom of this element?
    643642    ElementCount--;
    644   Trajectories.erase(pointer);
    645643  unlink(pointer);
    646644  return true;
     
    726724        ElementNo[i] = current++;
    727725    }
    728     ActOnAllAtoms( &atom::Output, ElementNo, AtomNo, out, (const char *) NULL ); // (bool (atom::*)(int *, int *, ofstream *, const char *))
     726    ActOnAllAtoms( &atom::Output, out, ElementNo, AtomNo, (const char *) NULL ); // (bool (atom::*)(int *, int *, ofstream *, const char *))
    729727    return true;
    730728  }
     
    759757          ElementNo[i] = current++;
    760758      }
    761       walker = start;
    762       while (walker->next != end) { // go through every atom of this element
    763         walker = walker->next;
    764         AtomNo[walker->type->Z]++;
    765         *out << "Ion_Type" << ElementNo[walker->type->Z] << "_" << AtomNo[walker->type->Z] << "\t"  << fixed << setprecision(9) << showpoint;
    766         *out << Trajectories[walker].R.at(step).x[0] << "\t" << Trajectories[walker].R.at(step).x[1] << "\t" << Trajectories[walker].R.at(step).x[2];
    767         *out << "\t" << walker->FixedIon;
    768         if (Trajectories[walker].U.at(step).Norm() > MYEPSILON)
    769           *out << "\t" << scientific << setprecision(6) << Trajectories[walker].U.at(step).x[0] << "\t" << Trajectories[walker].U.at(step).x[1] << "\t" << Trajectories[walker].U.at(step).x[2] << "\t";
    770         if (Trajectories[walker].F.at(step).Norm() > MYEPSILON)
    771           *out << "\t" << scientific << setprecision(6) << Trajectories[walker].F.at(step).x[0] << "\t" << Trajectories[walker].F.at(step).x[1] << "\t" << Trajectories[walker].F.at(step).x[2] << "\t";
    772         *out << "\t# Number in molecule " << walker->nr << endl;
    773       }
     759      ActOnAllAtoms( &atom::OutputTrajectory, out, ElementNo, AtomNo, step ); // (bool (atom::*)(int *, int *, ofstream *, const char *))
    774760    }
    775761    return true;
     
    829815      while (walker->next != end) { // go through every atom of this element
    830816        walker = walker->next;
    831         *out << walker->type->symbol << "\t" << Trajectories[walker].R.at(step).x[0] << "\t" << Trajectories[walker].R.at(step).x[1] << "\t" << Trajectories[walker].R.at(step).x[2] << endl;
     817        *out << walker->type->symbol << "\t" << walker->Trajectory.R.at(step).x[0] << "\t" << walker->Trajectory.R.at(step).x[1] << "\t" << walker->Trajectory.R.at(step).x[2] << endl;
    832818      }
    833819    }
     
    12371223      Walker = Walker->next;
    12381224      for (int i=NDIM;i--;)
    1239         temperature += Walker->type->mass * Trajectories[Walker].U.at(step).x[i]* Trajectories[Walker].U.at(step).x[i];
     1225        temperature += Walker->type->mass * Walker->Trajectory.U.at(step).x[i]* Walker->Trajectory.U.at(step).x[i];
    12401226    }
    12411227    *output << step << "\t" << temperature*AtomicEnergyToKelvin << "\t" << temperature << endl;
Note: See TracChangeset for help on using the changeset viewer.