source: src/atom.hpp@ 4455f4

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
Last change on this file since 4455f4 was 4455f4, checked in by Frederik Heber <heber@…>, 16 years ago

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

  • Property mode set to 100644
File size: 5.9 KB
Line 
1/*
2 * atom.hpp
3 *
4 * Created on: Aug 3, 2009
5 * Author: heber
6 */
7
8#ifndef ATOM_HPP_
9#define ATOM_HPP_
10
11using namespace std;
12
13/*********************************************** includes ***********************************/
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include <iostream>
21#include <list>
22#include <vector>
23
24#include <gsl/gsl_randist.h>
25
26#include "tesselation.hpp"
27
28/****************************************** forward declarations *****************************/
29
30class atom;
31class bond;
32class config;
33class element;
34class ForceMatrix;
35class Vector;
36
37#define BondList list<bond *>
38
39/********************************************** declarations *******************************/
40
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
163/** Single atom.
164 * Class incorporates position, type
165 */
166class atom : public TesselPoint, public TrajectoryParticle, public GraphNode, public BondedParticle, public virtual ParticleInfo, public virtual AtomInfo {
167 public:
168 atom *previous; //!< previous atom in molecule list
169 atom *next; //!< next atom in molecule list
170 atom *father; //!< In many-body bond order fragmentations points to originating atom
171 int *sort; //!< sort criteria
172
173 atom();
174 atom(class atom *pointer);
175 virtual ~atom();
176
177 bool Output(ofstream *out, int ElementNo, int AtomNo, const char *comment = NULL) const;
178 bool Output(ofstream *out, int *ElementNo, int *AtomNo, const char *comment = NULL);
179 bool OutputXYZLine(ofstream *out) const;
180 bool OutputTrajectory(ofstream *out, int *ElementNo, int *AtomNo, int step) const;
181 bool OutputTrajectoryXYZ(ofstream *out, int step) const;
182 void OutputMPQCLine(ofstream *out, Vector *center, int *AtomNo) const;
183
184 void InitComponentNr();
185
186 void EqualsFather ( atom *ptr, atom **res );
187 void CorrectFather();
188 atom *GetTrueFather();
189 bool Compare(const atom &ptr);
190
191 double DistanceToVector(Vector &origin);
192 double DistanceSquaredToVector(Vector &origin);
193 bool IsInParallelepiped(Vector offset, double *parallelepiped);
194
195 private:
196};
197
198#endif /* ATOM_HPP_ */
Note: See TracBrowser for help on using the repository browser.