Changeset 72e7fa for src


Ignore:
Timestamp:
Apr 9, 2010, 2:45:49 PM (15 years ago)
Author:
Tillmann Crueger <crueger@…>
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:
273382
Parents:
0a4f7f
Message:

Started work on the VectorComposites

Location:
src
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • src/Makefile.am

    r0a4f7f r72e7fa  
    122122                 periodentafel.cpp \
    123123                 Plane.cpp \
     124                 SingleVector.cpp \
    124125                 tesselation.cpp \
    125126                 tesselationhelpers.cpp \
     
    157158         periodentafel.hpp \
    158159         Plane.hpp \
     160         SingleVector.hpp \
    159161         stackclass.hpp \
    160162         tesselation.hpp \
  • src/Plane.cpp

    r0a4f7f r72e7fa  
    7373  normalVector(new Vector(_normalVector)),
    7474  offset(_offset)
    75 {}
     75{
     76  ASSERT(normalVector->Norm()>MYEPSILON,"Normalvector was zero when constructing a plane.");
     77  double factor = 1/normalVector->Norm();
     78  // normalize the plane parameters
     79  (*normalVector)*=factor;
     80  offset*=factor;
     81}
    7682
    7783Plane::Plane(const Vector &_normalVector, const Vector &_offsetVector) :
     
    9197double Plane::getOffset(){
    9298  return offset;
     99}
     100
     101Vector Plane::getOffsetVector() {
     102  return getOffset()*getNormal();
    93103}
    94104
  • src/Plane.hpp

    r0a4f7f r72e7fa  
    2424
    2525  // Accessor Functions
     26  /**
     27   * returns normal Vector for a plane
     28   */
    2629  Vector getNormal();
     30  /**
     31   * returns the distance of the plane from the origin
     32   */
    2733  double getOffset();
     34  /**
     35   * returns a vector that points on the plane.
     36   * Same as getOffset()*getNormal();
     37   */
     38  Vector getOffsetVector();
    2839
    2940  // some calculations
  • src/vector.cpp

    r0a4f7f r72e7fa  
    431431 * \return a == b
    432432 */
    433 bool operator==(const Vector& a, const Vector& b)
     433bool Vector::operator==(const Vector& b) const
    434434{
    435435  bool status = true;
    436436  for (int i=0;i<NDIM;i++)
    437     status = status && (fabs(a[i] - b[i]) < MYEPSILON);
     437    status = status && (fabs((*this)[i] - b[i]) < MYEPSILON);
    438438  return status;
    439439};
     
    444444 * \return lhs + a
    445445 */
    446 const Vector& operator+=(Vector& a, const Vector& b)
    447 {
    448   a.AddVector(&b);
    449   return a;
     446const Vector& Vector::operator+=(const Vector& b)
     447{
     448  this->AddVector(&b);
     449  return *this;
    450450};
    451451
     
    455455 * \return lhs - a
    456456 */
    457 const Vector& operator-=(Vector& a, const Vector& b)
    458 {
    459   a.SubtractVector(&b);
    460   return a;
     457const Vector& Vector::operator-=(const Vector& b)
     458{
     459  this->SubtractVector(&b);
     460  return *this;
    461461};
    462462
     
    477477 * \return a + b
    478478 */
    479 Vector const operator+(const Vector& a, const Vector& b)
    480 {
    481   Vector x(a);
     479Vector const Vector::operator+(const Vector& b) const
     480{
     481  Vector x = *this;
    482482  x.AddVector(&b);
    483483  return x;
     
    489489 * \return a - b
    490490 */
    491 Vector const operator-(const Vector& a, const Vector& b)
    492 {
    493   Vector x(a);
     491Vector const Vector::operator-(const Vector& b) const
     492{
     493  Vector x = *this;
    494494  x.SubtractVector(&b);
    495495  return x;
  • src/vector.hpp

    r0a4f7f r72e7fa  
    2323 */
    2424class Vector {
     25protected:
     26  // this struct is used to indicate calls to the Baseconstructor from inside vectors.
     27  struct Baseconstructor{};
    2528  public:
    2629
     
    2831  Vector(const double x1, const double x2, const double x3);
    2932  Vector(const Vector& src);
    30   ~Vector();
     33  virtual ~Vector();
    3134
    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;
     35  virtual double Distance(const Vector * const y) const;
     36  virtual double DistanceSquared(const Vector * const y) const;
     37  virtual double DistanceToPlane(const Vector * const PlaneNormal, const Vector * const PlaneOffset) const;
     38  virtual double PeriodicDistance(const Vector * const y, const double * const cell_size) const;
     39  virtual double PeriodicDistanceSquared(const Vector * const y, const double * const cell_size) const;
     40  virtual double ScalarProduct(const Vector * const y) const;
     41  virtual double Norm() const;
     42  virtual double NormSquared() const;
     43  virtual double Angle(const Vector * const y) const;
     44  virtual bool IsZero() const;
     45  virtual bool IsOne() const;
     46  virtual bool IsNormalTo(const Vector * const normal) const;
     47  virtual bool IsEqualTo(const Vector * const a) const;
    4548
    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 VectorProduct(const Vector * const y);
    51   void ProjectOntoPlane(const Vector * const y);
    52   void ProjectIt(const Vector * const y);
    53   Vector Projection(const Vector * const y) const;
    54   void Zero();
    55   void One(const double one);
    56   void Init(const double x1, const double x2, const double x3);
    57   void Normalize();
    58   void Translate(const Vector * const x);
    59   void Mirror(const Vector * const x);
    60   void Scale(const double ** const factor);
    61   void Scale(const double * const factor);
    62   void Scale(const double factor);
    63   void MatrixMultiplication(const double * const M);
    64   bool InverseMatrixMultiplication(const double * const M);
    65   void KeepPeriodic(const double * const matrix);
    66   void LinearCombinationOfVectors(const Vector * const x1, const Vector * const x2, const Vector * const x3, const double * const factors);
    67   double CutsPlaneAt(const Vector * const A, const Vector * const B, const Vector * const C) const;
    68   bool GetOneNormalVector(const Vector * const x1);
    69   bool MakeNormalTo(const Vector &y1);
     49  virtual void AddVector(const Vector * const y);
     50  virtual void SubtractVector(const Vector * const y);
     51  virtual void CopyVector(const Vector * const y);
     52  virtual void CopyVector(const Vector &y);
     53  virtual void VectorProduct(const Vector * const y);
     54  virtual void ProjectOntoPlane(const Vector * const y);
     55  virtual void ProjectIt(const Vector * const y);
     56  virtual Vector Projection(const Vector * const y) const;
     57  virtual void Zero();
     58  virtual void One(const double one);
     59  virtual void Init(const double x1, const double x2, const double x3);
     60  virtual void Normalize();
     61  virtual void Translate(const Vector * const x);
     62  virtual void Mirror(const Vector * const x);
     63  virtual void Scale(const double ** const factor);
     64  virtual void Scale(const double * const factor);
     65  virtual void Scale(const double factor);
     66  virtual void MatrixMultiplication(const double * const M);
     67  virtual bool InverseMatrixMultiplication(const double * const M);
     68  virtual void KeepPeriodic(const double * const matrix);
     69  virtual void LinearCombinationOfVectors(const Vector * const x1, const Vector * const x2, const Vector * const x3, const double * const factors);
     70  virtual double CutsPlaneAt(const Vector * const A, const Vector * const B, const Vector * const C) const;
     71  virtual bool GetOneNormalVector(const Vector * const x1);
     72  virtual bool MakeNormalTo(const Vector &y1);
    7073  //bool SolveSystem(Vector * x1, Vector * x2, Vector * y, const double alpha, const double beta, const double c);
    71   bool IsInParallelepiped(const Vector &offset, const double * const parallelepiped) const;
    72   void WrapPeriodically(const double * const M, const double * const Minv);
     74  virtual bool IsInParallelepiped(const Vector &offset, const double * const parallelepiped) const;
     75  virtual void WrapPeriodically(const double * const M, const double * const Minv);
    7376
    7477  // Accessors ussually come in pairs... and sometimes even more than that
    75   double& operator[](size_t i);
    76   const double& operator[](size_t i) const;
    77   double& at(size_t i);
    78   const double& at(size_t i) const;
     78  virtual double& operator[](size_t i);
     79  virtual const double& operator[](size_t i) const;
     80  virtual double& at(size_t i);
     81  virtual const double& at(size_t i) const;
    7982
    8083  // Assignment operator
    81   Vector &operator=(const Vector& src);
     84  virtual Vector &operator=(const Vector& src);
    8285
    8386  // Access to internal structure
    84   double* get();
     87  virtual double* get();
     88
     89  // operators for mathematical operations
     90  bool operator==(const Vector& b) const;
     91  const Vector& operator+=(const Vector& b);
     92  const Vector& operator-=(const Vector& b);
     93  Vector const operator+(const Vector& b) const;
     94  Vector const operator-(const Vector& b) const;
    8595
    8696private:
     
    90100
    91101ostream & operator << (ostream& ost, const Vector &m);
    92 bool operator==(const Vector& a, const Vector& b);
    93 const Vector& operator+=(Vector& a, const Vector& b);
    94 const Vector& operator-=(Vector& a, const Vector& b);
    95102const Vector& operator*=(Vector& a, const double m);
    96103Vector const operator*(const Vector& a, const double m);
    97104Vector const operator*(const double m, const Vector& a);
    98 Vector const operator+(const Vector& a, const Vector& b);
    99 Vector const operator-(const Vector& a, const Vector& b);
    100 
    101105
    102106#endif /*VECTOR_HPP_*/
Note: See TracChangeset for help on using the changeset viewer.