BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
gradient.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 // $Id: gradient.h,v 1.20.20.1 2007/05/18 12:02:44 oliver Exp $
5 //
6 // Author:
7 // Oliver Kohlbacher
8 //
9 
10 // A conjugate gradient minimizer for geometry optimisation
11 
12 #ifndef BALL_MOLMEC_COMMON_GRADIENT_H
13 #define BALL_MOLMEC_COMMON_GRADIENT_H
14 
15 #ifndef BALL_COMMON_H
16 # include <BALL/common.h>
17 #endif
18 
19 #ifndef BALL_MATHS_VECTOR3_H
20 # include <BALL/MATHS/vector3.h>
21 #endif
22 
23 #include <vector>
24 
25 namespace BALL
26 {
27  class AtomVector;
28 
44  : private std::vector<Vector3>
45  {
46  public:
47 
49 
50 
53 
56  typedef std::vector<Vector3>::iterator Iterator;
57 
60  typedef std::vector<Vector3>::const_iterator ConstIterator;
61 
64  typedef std::vector<Vector3>::reverse_iterator ReverseIterator;
65 
68  typedef std::vector<Vector3>::const_reverse_iterator ConstReverseIterator;
69 
70 
72 
75 
78  Gradient();
79 
82  Gradient(const AtomVector& atoms);
83 
86  Gradient(const Gradient& gradient, bool deep = true);
87 
90  virtual ~Gradient();
92 
96 
99  Gradient& operator = (const Gradient& rhs);
100 
103  Gradient& operator = (const AtomVector& rhs);
104 
107  void set(const Gradient& gradient);
108 
111  void set(const AtomVector& atoms);
112 
117  void negate();
118 
122  void normalize();
123 
127  double operator * (const Gradient& gradient) const;
129 
133 
134  /* Return the number of components of the gradient.
135  */
136  using std::vector<Vector3>::size;
137 
138  /* Return the component for an atom.
139  */
140  //?????: GCC3 using std::vector<Vector3>::operator [];
141  const Vector3& operator [] (int i) const { return std::vector<Vector3>::operator [] (i); }
142  Vector3& operator [] (int i) { return std::vector<Vector3>::operator [] (i); }
143 
146  void invalidate();
147 
150  bool isValid() const;
152 
153 
157 
160  //?????: GCC3 using std::vector<Vector3>::begin;
161  Iterator begin() { return vector<Vector3>::begin(); }
162  ConstIterator begin() const { return vector<Vector3>::begin(); }
163 
166  //?????: GCC3 using std::vector<Vector3>::end;
167  Iterator end() { return vector<Vector3>::end(); }
168  ConstIterator end() const { return vector<Vector3>::end(); }
169 
172  //?????: GCC3 using std::vector<Vector3>::begin;
173  ReverseIterator rbegin() { return vector<Vector3>::rbegin(); }
174  ConstReverseIterator rbegin() const { return vector<Vector3>::rbegin(); }
175 
178  //?????: GCC3 using std::vector<Vector3>::end;
179  ReverseIterator rend() { return vector<Vector3>::rend(); }
180  ConstReverseIterator rend() const { return vector<Vector3>::rend(); }
182 
186 
189  double norm;
190 
193  double inv_norm;
194 
197  double rms;
198 
200 
201  protected:
202 
203  /*_ The validity flag.
204  */
205  bool valid_;
206 
207  };
208  } // end of namespace BALL
209 
210 #endif // BALL_MOLMEC_COMMON_GRADIENT_H