source: src/Atom/atom_atominfo.hpp@ 7b9fe0

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 7b9fe0 was 6f0841, checked in by Frederik Heber <heber@…>, 13 years ago

Shifted all modules related to atoms into own subfolder src/Atom/

  • also created own convenience library for this. This makes unit testing on list containing TesselPoint or atom a lot easier.
  • shifted TesselPoint to src/Atom from src/Tesselation and adapted include's.
  • Property mode set to 100644
File size: 7.9 KB
Line 
1/*
2 * atom_atominfo.hpp
3 *
4 * Created on: Oct 19, 2009
5 * Author: heber
6 */
7
8#ifndef ATOM_ATOMINFO_HPP_
9#define ATOM_ATOMINFO_HPP_
10
11
12using namespace std;
13
14/*********************************************** includes ***********************************/
15
16// include config.h
17#ifdef HAVE_CONFIG_H
18#include <config.h>
19#endif
20
21#include <vector>
22
23#include "atom_observable.hpp"
24
25#include "types.hpp"
26
27#include "LinearAlgebra/Vector.hpp"
28#include "LinearAlgebra/VectorInterface.hpp"
29
30/****************************************** forward declarations *****************************/
31
32class AtomInfo;
33class element;
34class ForceMatrix;
35class RealSpaceMatrix;
36
37/********************************************** declarations *******************************/
38
39class AtomInfo : public VectorInterface, public virtual AtomObservable {
40
41public:
42 AtomInfo();
43 AtomInfo(const AtomInfo &_atom);
44 AtomInfo(const VectorInterface &_v);
45 virtual ~AtomInfo();
46
47 /** Pushes back another step in all trajectory vectors.
48 *
49 * This allows to extend all trajectories contained in different classes
50 * consistently. This is implemented by the topmost class which calls the
51 * real functions, \sa AppendTrajectoryStep(), by all necessary subclasses.
52 */
53 virtual void UpdateSteps()=0;
54
55 /** Getter for AtomicElement.
56 *
57 * @return constant reference to AtomicElement
58 */
59 const element *getType() const;
60 /** Setter for AtomicElement.
61 *
62 * @param _type new element by pointer to set
63 */
64 void setType(const element *_type);
65 /** Setter for AtomicElement.
66 *
67 * @param _typenr new element by index to set
68 */
69 void setType(const int _typenr);
70
71 /** Getter for AtomicVelocity.
72 *
73 * Current time step is used.
74 *
75 * @return constant reference to AtomicVelocity
76 */
77// Vector& getAtomicVelocity();
78 /** Getter for AtomicVelocity.
79 *
80 * @param _step time step to return
81 * @return constant reference to AtomicVelocity
82 */
83// Vector& getAtomicVelocity(const int _step);
84 /** Getter for AtomicVelocity.
85 *
86 * Current time step is used.
87 *
88 * @return constant reference to AtomicVelocity
89 */
90 const Vector& getAtomicVelocity() const;
91 /** Getter for AtomicVelocity.
92 *
93 * @param _step time step to return
94 * @return constant reference to AtomicVelocity
95 */
96 const Vector& getAtomicVelocityAtStep(const unsigned int _step) const;
97 /** Setter for AtomicVelocity.
98 *
99 * Current time step is used.
100 *
101 * @param _newvelocity new velocity to set
102 */
103 void setAtomicVelocity(const Vector &_newvelocity);
104 /** Setter for AtomicVelocity.
105 *
106 * @param _step time step to set
107 * @param _newvelocity new velocity to set
108 */
109 void setAtomicVelocityAtStep(const unsigned int _step, const Vector &_newvelocity);
110
111 /** Getter for AtomicForce.
112 *
113 * Current time step is used.
114 *
115 * @return constant reference to AtomicForce
116 */
117 const Vector& getAtomicForce() const;
118 /** Getter for AtomicForce.
119 *
120 * @param _step time step to return
121 * @return constant reference to AtomicForce
122 */
123 const Vector& getAtomicForceAtStep(const unsigned int _step) const;
124 /** Setter for AtomicForce.
125 *
126 * Current time step is used.
127 *
128 * @param _newvelocity new force vector to set
129 */
130 void setAtomicForce(const Vector &_newforce);
131 /** Setter for AtomicForce.
132 *
133 * @param _step time step to set
134 * @param _newvelocity new force vector to set
135 */
136 void setAtomicForceAtStep(const unsigned int _step, const Vector &_newforce);
137
138 /** Getter for FixedIon.
139 *
140 * @return constant reference to FixedIon
141 */
142 bool getFixedIon() const;
143 /** Setter for FixedIon.
144 *
145 * @param _fixedion new state of FixedIon
146 */
147 void setFixedIon(const bool _fixedion);
148
149 ///// manipulation of the atomic position
150
151 // Accessors ussually come in pairs... and sometimes even more than that
152 /** Getter for AtomicPosition.
153 *
154 * Current time step is used.
155 *
156 * @param i component of vector
157 * @return i-th component of atomic position
158 */
159 const double& operator[](size_t i) const;
160 /** Getter for AtomicPosition.
161 *
162 * Current time step is used.
163 *
164 * \sa operator[], this is if instance is a reference.
165 *
166 * @param i component of vector
167 * @return i-th component of atomic position
168 */
169 const double& at(size_t i) const;
170 /** Getter for AtomicPosition.
171 *
172 * \sa operator[], this is if instance is a reference.
173 *
174 * @param i index of component of AtomicPosition
175 * @param _step time step to return
176 * @return atomic position at time step _step
177 */
178 const double& atStep(size_t i, unsigned int _step) const;
179 /** Setter for AtomicPosition.
180 *
181 * Current time step is used.
182 *
183 * @param i component to set
184 * @param value value to set to
185 */
186 void set(size_t i, const double value);
187 /** Setter for AtomicPosition.
188 *
189 * @param i component to set
190 * @param _step time step to set
191 * @param value value to set to
192 */
193 void setAtStep(size_t i, unsigned int _step, const double value);
194 /** Getter for AtomicPosition.
195 *
196 * Current time step is used.
197 *
198 * @return atomic position
199 */
200 const Vector& getPosition() const;
201 /** Getter for AtomicPosition.
202 *
203 * @param _step time step to return
204 * @return atomic position at time step _step
205 */
206 const Vector& getPositionAtStep(unsigned int _step) const;
207
208 // Assignment operator
209 /** Setter for AtomicPosition.
210 *
211 * Current time step is used.
212 *
213 * @param _vector new position to set
214 */
215 void setPosition(const Vector& _vector);
216 /** Setter for AtomicPosition.
217 *
218 * @param _step time step to set
219 * @param _vector new position to set for time step _step
220 */
221 void setPositionAtStep(const unsigned int _step, const Vector& _vector);
222 class VectorInterface &operator=(const Vector& _vector);
223
224 // operators for mathematical operations
225 const VectorInterface& operator+=(const Vector& b);
226 const VectorInterface& operator-=(const Vector& b);
227 Vector const operator+(const Vector& b) const;
228 Vector const operator-(const Vector& b) const;
229
230 void Zero();
231 void One(const double one);
232 void LinearCombinationOfVectors(const Vector &x1, const Vector &x2, const Vector &x3, const double * const factors);
233
234 double distance(const Vector &point) const;
235 double DistanceSquared(const Vector &y) const;
236 double distance(const VectorInterface &_atom) const;
237 double DistanceSquared(const VectorInterface &_atom) const;
238
239 void ScaleAll(const double *factor);
240 void ScaleAll(const Vector &factor);
241 void Scale(const double factor);
242
243 // operations for trajectories
244 void ResizeTrajectory(size_t MaxSteps);
245 size_t getTrajectorySize() const;
246 void CopyStepOnStep(const unsigned int dest, const unsigned int src);
247 void VelocityVerletUpdate(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem, ForceMatrix *Force, const size_t offset);
248 double getKineticEnergy(const unsigned int step) const;
249 Vector getMomentum(const unsigned int step) const;
250 double getMass() const;
251
252 std::ostream & operator << (std::ostream &ost) const;
253
254protected:
255 /** Function used by this and inheriting classes to extend the trajectory
256 * vectors.
257 */
258 void AppendTrajectoryStep();
259
260 // make these protected only such that deriving atom class still has full
261 // access needed for clone and alike
262 std::vector<Vector> AtomicPosition; //!< coordinate vector of atom, giving last position within cell
263 std::vector<Vector> AtomicVelocity; //!< velocity vector of atom, giving last velocity within cell
264 std::vector<Vector> AtomicForce; //!< Force vector of atom, giving last force within cell
265
266private:
267 atomicNumber_t AtomicElement; //!< contains atomic number (i.e. Z of element) or "-1" if unset
268 bool FixedIon;
269};
270
271std::ostream & operator << (std::ostream &ost, const AtomInfo &a);
272
273//const AtomInfo& operator*=(AtomInfo& a, const double m);
274//AtomInfo const operator*(const AtomInfo& a, const double m);
275//AtomInfo const operator*(const double m, const AtomInfo& a);
276
277#endif /* ATOM_ATOMINFO_HPP_ */
Note: See TracBrowser for help on using the repository browser.