source: src/vector.hpp@ 5be0eb

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 5be0eb was b84d5d, checked in by Frederik Heber <heber@…>, 15 years ago

FIX: operator implementation of Vector algebra was wrong and caused memory leaks.

  • operator+, operator- and operator* were implemented as creating new Vectors and returning its pointer instead of creating an object and returning it as constant. This would cause memory leaks, as these pointers in complex algebraic expressions would never get free'd.
  • return values of operatorx= with x in {+,-,*} have been made const (suggested by Meyers' Effective C++)
  • Property mode set to 100755
File size: 4.0 KB
Line 
1#ifndef VECTOR_HPP_
2#define VECTOR_HPP_
3
4using namespace std;
5
6/*********************************************** includes ***********************************/
7
8// include config.h
9#ifdef HAVE_CONFIG_H
10#include <config.h>
11#endif
12
13#include <iostream>
14#include <gsl/gsl_vector.h>
15#include <gsl/gsl_multimin.h>
16
17#include "defs.hpp"
18
19/********************************************** declarations *******************************/
20
21/** Single vector.
22 * basically, just a x[3] but with helpful functions
23 */
24class Vector {
25 public:
26 double x[NDIM];
27
28 Vector();
29 Vector(const double x1, const double x2, const double x3);
30 ~Vector();
31
32 double Distance(const Vector * const y) const;
33 double DistanceSquared(const Vector * const y) const;
34 double DistanceToPlane(const Vector * const PlaneNormal, const Vector * const PlaneOffset) const;
35 double PeriodicDistance(const Vector * const y, const double * const cell_size) const;
36 double PeriodicDistanceSquared(const Vector * const y, const double * const cell_size) const;
37 double ScalarProduct(const Vector * const y) const;
38 double Norm() const;
39 double NormSquared() const;
40 double Angle(const Vector * const y) const;
41 bool IsZero() const;
42 bool IsOne() const;
43 bool IsNormalTo(const Vector * const normal) const;
44 bool IsEqualTo(const Vector * const a) const;
45
46 void AddVector(const Vector * const y);
47 void SubtractVector(const Vector * const y);
48 void CopyVector(const Vector * const y);
49 void CopyVector(const Vector &y);
50 void RotateVector(const Vector * const y, const double alpha);
51 void VectorProduct(const Vector * const y);
52 void ProjectOntoPlane(const Vector * const y);
53 void ProjectIt(const Vector * const y);
54 Vector Projection(const Vector * const y) const;
55 void Zero();
56 void One(const double one);
57 void Init(const double x1, const double x2, const double x3);
58 void Normalize();
59 void Translate(const Vector * const x);
60 void Mirror(const Vector * const x);
61 void Scale(const double ** const factor);
62 void Scale(const double * const factor);
63 void Scale(const double factor);
64 void MatrixMultiplication(const double * const M);
65 void InverseMatrixMultiplication(const double * const M);
66 void KeepPeriodic(const double * const matrix);
67 void LinearCombinationOfVectors(const Vector * const x1, const Vector * const x2, const Vector * const x3, const double * const factors);
68 double CutsPlaneAt(const Vector * const A, const Vector * const B, const Vector * const C) const;
69 bool GetIntersectionWithPlane(const Vector * const PlaneNormal, const Vector * const PlaneOffset, const Vector * const Origin, const Vector * const LineVector);
70 bool GetIntersectionOfTwoLinesOnPlane(const Vector * const Line1a, const Vector * const Line1b, const Vector * const Line2a, const Vector * const Line2b, const Vector *Normal = NULL);
71 bool GetOneNormalVector(const Vector * const x1);
72 bool MakeNormalVector(const Vector * const y1);
73 bool MakeNormalVector(const Vector * const y1, const Vector * const y2);
74 bool MakeNormalVector(const Vector * const x1, const Vector * const x2, const Vector * const x3);
75 bool SolveSystem(Vector * x1, Vector * x2, Vector * y, const double alpha, const double beta, const double c);
76 bool LSQdistance(const Vector ** vectors, int dim);
77 void AskPosition(const double * const cell_size, const bool check);
78 void Output() const;
79 bool IsInParallelepiped(const Vector &offset, const double * const parallelepiped) const;
80 void WrapPeriodically(const double * const M, const double * const Minv);
81
82};
83
84ostream & operator << (ostream& ost, const Vector &m);
85bool operator==(const Vector& a, const Vector& b);
86const Vector& operator+=(Vector& a, const Vector& b);
87const Vector& operator-=(Vector& a, const Vector& b);
88const Vector& operator*=(Vector& a, const double m);
89Vector const operator*(const Vector& a, const double m);
90Vector const operator*(const double m, const Vector& a);
91Vector const operator+(const Vector& a, const Vector& b);
92Vector const operator-(const Vector& a, const Vector& b);
93
94
95#endif /*VECTOR_HPP_*/
Note: See TracBrowser for help on using the repository browser.