Changeset 4455f4 for src/atom.hpp


Ignore:
Timestamp:
Oct 19, 2009, 1:09:29 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:
c75de1
Parents:
9eefda
Message:

Huge Refactoring: class atom split up into several inherited classes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/atom.hpp

    r9eefda r4455f4  
    2828/****************************************** forward declarations *****************************/
    2929
     30class atom;
    3031class bond;
    3132class config;
     
    3839/********************************************** declarations *******************************/
    3940
     41class AtomInfo {
     42public:
     43  Vector x;       //!< coordinate vector of atom, giving last position within cell
     44  Vector v;       //!< velocity vector of atom, giving last velocity within cell
     45  Vector F;       //!< Force vector of atom, giving last force within cell
     46  element *type;  //!< pointing to element
     47
     48  AtomInfo();
     49  ~AtomInfo();
     50
     51private:
     52};
     53
     54class TrajectoryParticleInfo {
     55public:
     56  struct
     57  {
     58    vector<Vector> R;  //!< position vector
     59    vector<Vector> U;  //!< velocity vector
     60    vector<Vector> F;  //!< last force vector
     61  } Trajectory;
     62  int FixedIon;   //!< config variable that states whether forces act on the ion or not
     63
     64  TrajectoryParticleInfo();
     65  ~TrajectoryParticleInfo();
     66
     67private:
     68};
     69
     70class TrajectoryParticle :  public TrajectoryParticleInfo, public virtual AtomInfo, public virtual ParticleInfo {
     71public:
     72
     73  TrajectoryParticle();
     74  virtual ~TrajectoryParticle();
     75
     76  // constraint potential and dynamics stuff
     77  void AddKineticToTemperature(double *temperature, int step) const;
     78  void EvaluateConstrainedForce(int startstep, int endstep, atom **PermutationMap, ForceMatrix *Force);
     79  void CorrectVelocity(double *ActualTemp, int Step, Vector *CoGVelocity);
     80
     81  // trajectory stuff
     82  void ResizeTrajectory(int MaxSteps);
     83  void CopyStepOnStep(int dest, int src);
     84  void VelocityVerletUpdate(int MDSteps, config *configuration, ForceMatrix *Force);
     85  void SumUpKineticEnergy( int Step, double *TotalMass, Vector *TotalVelocity );
     86
     87  // thermostats
     88  void Thermostat_Woodcock(double ScaleTempFactor, int Step, double *ekin);
     89  void Thermostat_Gaussian_init(int Step, double *G, double *E);
     90  void Thermostat_Gaussian_least_constraint(int Step, double G_over_E, double *ekin, config *configuration);
     91  void Thermostat_Langevin(int Step, gsl_rng * r, double *ekin, config *configuration);
     92  void Thermostat_Berendsen(int Step, double ScaleTempFactor, double *ekin, config *configuration);
     93  void Thermostat_NoseHoover_init(int Step, double *delta_alpha);
     94  void Thermostat_NoseHoover_scale(int Step, double *ekin, config *configuration);
     95
     96private:
     97
     98};
     99
     100class GraphNode;
     101
     102class GraphNodeInfo {
     103public:
     104
     105  int GraphNr;      //!< unique number, given in DepthFirstSearchAnalysis()
     106  int *ComponentNr;//!< belongs to this non-separable components, given in DepthFirstSearchAnalysis() (if more than one, then is SeparationVertex)
     107  int LowpointNr; //!< needed in DepthFirstSearchAnalysis() to detect non-separable components, is the lowest possible number of an atom to reach via tree edges only followed by at most one back edge.
     108  bool SeparationVertex; //!< whether this atom separates off subsets of atoms or not, determined in DepthFirstSearchAnalysis()
     109  bool IsCyclic;        //!< whether atom belong to as cycle or not, determined in DepthFirstSearchAnalysis()
     110  atom *Ancestor; //!< "Father" in Depth-First-Search
     111
     112  GraphNodeInfo();
     113  ~GraphNodeInfo();
     114private:
     115
     116};
     117
     118
     119class GraphNode : public GraphNodeInfo, public virtual ParticleInfo {
     120public:
     121
     122  GraphNode();
     123  virtual ~GraphNode();
     124
     125  void OutputGraphInfo(ofstream *out) const;
     126  void OutputComponentNumber(ofstream *out) const;
     127
     128private:
     129
     130};
     131
     132class BondedParticleInfo {
     133public:
     134  unsigned char AdaptiveOrder;  //!< current present bond order at site (0 means "not set")
     135  bool MaxOrder;  //!< whether this atom as a root in fragmentation still creates more fragments on higher orders or not
     136  BondList ListOfBonds; //!< list of all bonds
     137
     138  BondedParticleInfo();
     139  ~BondedParticleInfo();
     140
     141private:
     142
     143};
     144
     145class BondedParticle : public BondedParticleInfo, public virtual ParticleInfo, public virtual AtomInfo {
     146public:
     147  BondedParticle();
     148  virtual ~BondedParticle();
     149
     150  bool RegisterBond(bond *Binder);
     151  bool UnregisterBond(bond *Binder);
     152  void UnregisterAllBond();
     153  int CountBonds() const;
     154  int CorrectBondDegree(ofstream *out);
     155  bool OutputBondOfAtom(ofstream *out) const;
     156  void OutputAdjacency(ofstream *AdjacencyFile) const;
     157  void OutputOrder(ofstream *file);
     158
     159private:
     160
     161};
     162
    40163/** Single atom.
    41164 * Class incorporates position, type
    42165 */
    43 class atom : public TesselPoint {
     166class atom : public TesselPoint, public TrajectoryParticle, public GraphNode, public BondedParticle, public virtual ParticleInfo, public virtual AtomInfo {
    44167  public:
    45     struct
    46     {
    47       vector<Vector> R;  //!< position vector
    48       vector<Vector> U;  //!< velocity vector
    49       vector<Vector> F;  //!< last force vector
    50     } Trajectory;
    51 
    52     Vector x;       //!< coordinate vector of atom, giving last position within cell
    53     Vector v;       //!< velocity vector of atom, giving last velocity within cell
    54     Vector F;       //!< Force vector of atom, giving last force within cell
    55     BondList ListOfBonds; //!< list of all bonds
    56     element *type;  //!< pointing to element
    57168    atom *previous; //!< previous atom in molecule list
    58169    atom *next;     //!< next atom in molecule list
    59170    atom *father;   //!< In many-body bond order fragmentations points to originating atom
    60     atom *Ancestor; //!< "Father" in Depth-First-Search
    61     //char *Name;      //!< unique name used during many-body bond-order fragmentation, comes from TesselPoint
    62     int FixedIon;   //!< config variable that states whether forces act on the ion or not
    63171    int *sort;      //!< sort criteria
    64     //int nr;         //!< continuous, unique number, comes from TesselPoint
    65     int GraphNr;      //!< unique number, given in DepthFirstSearchAnalysis()
    66     int *ComponentNr;//!< belongs to this nonseparable components, given in DepthFirstSearchAnalysis() (if more than one, then is SeparationVertex)
    67     int LowpointNr; //!< needed in DepthFirstSearchAnalysis() to detect nonseparable components, is the lowest possible number of an atom to reach via tree edges only followed by at most one back edge.
    68     bool SeparationVertex; //!< whether this atom separates off subsets of atoms or not, determined in DepthFirstSearchAnalysis()
    69     bool IsCyclic;        //!< whether atom belong to as cycle or not, determined in DepthFirstSearchAnalysis()
    70     unsigned char AdaptiveOrder;  //!< current present bond order at site (0 means "not set")
    71     bool MaxOrder;  //!< whether this atom as a root in fragmentation still creates more fragments on higher orders or not
    72172
    73173  atom();
     
    80180  bool OutputTrajectory(ofstream *out, int *ElementNo, int *AtomNo, int step) const;
    81181  bool OutputTrajectoryXYZ(ofstream *out, int step) const;
    82   bool OutputBondOfAtom(ofstream *out) const;
    83   void OutputAdjacency(ofstream *AdjacencyFile) const;
     182  void OutputMPQCLine(ofstream *out, Vector *center, int *AtomNo) const;
    84183
     184  void InitComponentNr();
    85185
    86186  void EqualsFather ( atom *ptr, atom **res );
     
    89189  bool Compare(const atom &ptr);
    90190
    91   // trajectory stuff
    92   void ResizeTrajectory(int MaxSteps);
    93   void CopyStepOnStep(int dest, int src);
    94   void VelocityVerletUpdate(int MDSteps, config *configuration, ForceMatrix *Force);
    95   void SumUpKineticEnergy( int Step, double *TotalMass, Vector *TotalVelocity );
    96 
    97191  double DistanceToVector(Vector &origin);
    98192  double DistanceSquaredToVector(Vector &origin);
    99 
    100193  bool IsInParallelepiped(Vector offset, double *parallelepiped);
    101 
    102   // bond order stuff
    103   void OutputOrder(ofstream *file);
    104   void OutputGraphInfo(ofstream *out) const;
    105   void OutputComponentNumber(ofstream *out) const;
    106   void InitComponentNr();
    107   int CountBonds() const;
    108   int CorrectBondDegree(ofstream *out);
    109 
    110   bool RegisterBond(bond *Binder);
    111   bool UnregisterBond(bond *Binder);
    112   void UnregisterAllBond();
    113 
    114   // constraint potential and dynamics stuff
    115   void AddKineticToTemperature(double *temperature, int step) const;
    116   void EvaluateConstrainedForce(int startstep, int endstep, atom **PermutationMap, ForceMatrix *Force);
    117   void CorrectVelocity(double *ActualTemp, int Step, Vector *CoGVelocity);
    118 
    119   // thermostats
    120   void Thermostat_Woodcock(double ScaleTempFactor, int Step, double *ekin);
    121   void Thermostat_Gaussian_init(int Step, double *G, double *E);
    122   void Thermostat_Gaussian_least_constraint(int Step, double G_over_E, double *ekin, config *configuration);
    123   void Thermostat_Langevin(int Step, gsl_rng * r, double *ekin, config *configuration);
    124   void Thermostat_Berendsen(int Step, double ScaleTempFactor, double *ekin, config *configuration);
    125   void Thermostat_NoseHoover_init(int Step, double *delta_alpha);
    126   void Thermostat_NoseHoover_scale(int Step, double *ekin, config *configuration);
    127 
    128 
    129   ostream & operator << (ostream &ost);
    130194
    131195  private:
    132196};
    133197
    134 ostream & operator << (ostream &ost, const atom &a);
    135 
    136198#endif /* ATOM_HPP_ */
Note: See TracChangeset for help on using the changeset viewer.