Changeset 4455f4 for src/atom.hpp
- Timestamp:
- Oct 19, 2009, 1:09:29 PM (16 years ago)
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/atom.hpp
r9eefda r4455f4 28 28 /****************************************** forward declarations *****************************/ 29 29 30 class atom; 30 31 class bond; 31 32 class config; … … 38 39 /********************************************** declarations *******************************/ 39 40 41 class AtomInfo { 42 public: 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 51 private: 52 }; 53 54 class TrajectoryParticleInfo { 55 public: 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 67 private: 68 }; 69 70 class TrajectoryParticle : public TrajectoryParticleInfo, public virtual AtomInfo, public virtual ParticleInfo { 71 public: 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 96 private: 97 98 }; 99 100 class GraphNode; 101 102 class GraphNodeInfo { 103 public: 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(); 114 private: 115 116 }; 117 118 119 class GraphNode : public GraphNodeInfo, public virtual ParticleInfo { 120 public: 121 122 GraphNode(); 123 virtual ~GraphNode(); 124 125 void OutputGraphInfo(ofstream *out) const; 126 void OutputComponentNumber(ofstream *out) const; 127 128 private: 129 130 }; 131 132 class BondedParticleInfo { 133 public: 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 141 private: 142 143 }; 144 145 class BondedParticle : public BondedParticleInfo, public virtual ParticleInfo, public virtual AtomInfo { 146 public: 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 159 private: 160 161 }; 162 40 163 /** Single atom. 41 164 * Class incorporates position, type 42 165 */ 43 class atom : public TesselPoint {166 class atom : public TesselPoint, public TrajectoryParticle, public GraphNode, public BondedParticle, public virtual ParticleInfo, public virtual AtomInfo { 44 167 public: 45 struct46 {47 vector<Vector> R; //!< position vector48 vector<Vector> U; //!< velocity vector49 vector<Vector> F; //!< last force vector50 } Trajectory;51 52 Vector x; //!< coordinate vector of atom, giving last position within cell53 Vector v; //!< velocity vector of atom, giving last velocity within cell54 Vector F; //!< Force vector of atom, giving last force within cell55 BondList ListOfBonds; //!< list of all bonds56 element *type; //!< pointing to element57 168 atom *previous; //!< previous atom in molecule list 58 169 atom *next; //!< next atom in molecule list 59 170 atom *father; //!< In many-body bond order fragmentations points to originating atom 60 atom *Ancestor; //!< "Father" in Depth-First-Search61 //char *Name; //!< unique name used during many-body bond-order fragmentation, comes from TesselPoint62 int FixedIon; //!< config variable that states whether forces act on the ion or not63 171 int *sort; //!< sort criteria 64 //int nr; //!< continuous, unique number, comes from TesselPoint65 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 not72 172 73 173 atom(); … … 80 180 bool OutputTrajectory(ofstream *out, int *ElementNo, int *AtomNo, int step) const; 81 181 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; 84 183 184 void InitComponentNr(); 85 185 86 186 void EqualsFather ( atom *ptr, atom **res ); … … 89 189 bool Compare(const atom &ptr); 90 190 91 // trajectory stuff92 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 97 191 double DistanceToVector(Vector &origin); 98 192 double DistanceSquaredToVector(Vector &origin); 99 100 193 bool IsInParallelepiped(Vector offset, double *parallelepiped); 101 102 // bond order stuff103 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 stuff115 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 // thermostats120 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);130 194 131 195 private: 132 196 }; 133 197 134 ostream & operator << (ostream &ost, const atom &a);135 136 198 #endif /* ATOM_HPP_ */
Note:
See TracChangeset
for help on using the changeset viewer.