ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/math/Vector3.hpp
Revision: 1665
Committed: Tue Nov 22 20:38:56 2011 UTC (13 years, 5 months ago) by gezelter
File size: 5370 byte(s)
Log Message:
updated copyright notices

File Contents

# User Rev Content
1 gezelter 507 /*
2 gezelter 246 * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 tim 70 *
4 gezelter 246 * The University of Notre Dame grants you ("Licensee") a
5     * non-exclusive, royalty free, license to use, modify and
6     * redistribute this software in source and binary code form, provided
7     * that the following conditions are met:
8     *
9 gezelter 1390 * 1. Redistributions of source code must retain the above copyright
10 gezelter 246 * notice, this list of conditions and the following disclaimer.
11     *
12 gezelter 1390 * 2. Redistributions in binary form must reproduce the above copyright
13 gezelter 246 * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the
15     * distribution.
16     *
17     * This software is provided "AS IS," without a warranty of any
18     * kind. All express or implied conditions, representations and
19     * warranties, including any implied warranty of merchantability,
20     * fitness for a particular purpose or non-infringement, are hereby
21     * excluded. The University of Notre Dame and its licensors shall not
22     * be liable for any damages suffered by licensee as a result of
23     * using, modifying or distributing the software or its
24     * derivatives. In no event will the University of Notre Dame or its
25     * licensors be liable for any lost revenue, profit or data, or for
26     * direct, indirect, special, consequential, incidental or punitive
27     * damages, however caused and regardless of the theory of liability,
28     * arising out of the use of or inability to use software, even if the
29     * University of Notre Dame has been advised of the possibility of
30     * such damages.
31 gezelter 1390 *
32     * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33     * research, please cite the appropriate papers when you publish your
34     * work. Good starting points are:
35     *
36     * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37     * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38     * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).
39 gezelter 1665 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40     * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 tim 70 */
42 gezelter 246
43 tim 70 /**
44     * @file Vector3.hpp
45     * @author Teng Lin
46     * @date 09/14/2004
47     * @version 1.0
48     */
49    
50     #ifndef MATH_VECTOR3_HPP
51     #define MATH_VECTOR3_HPP
52    
53     #include <cassert>
54     #include <cmath>
55    
56     #include "Vector.hpp"
57    
58 gezelter 1390 namespace OpenMD {
59 gezelter 97
60     /**
61     * @class Vector3 Vector3.hpp "math/Vector3.hpp"
62     * @brief
63     */
64    
65     template<typename Real>
66     class Vector3 : public Vector<Real, 3>{
67     public:
68 tim 137 typedef Real ElemType;
69     typedef Real* ElemPoinerType;
70 gezelter 97 Vector3() : Vector<Real, 3>(){}
71    
72     /** Constructs and initializes a Vector3 from x, y, z coordinates */
73 gezelter 246 inline Vector3( Real x, Real y, Real z) {
74 tim 385 this->data_[0] = x;
75     this->data_[1] = y;
76     this->data_[2] = z;
77 gezelter 97 }
78 tim 151
79     /** Constructs and initializes from an array*/
80 gezelter 246 inline Vector3(Real* array) : Vector<Real, 3>(array) {}
81 gezelter 97
82     inline Vector3(const Vector<Real, 3>& v) : Vector<Real, 3>(v) {}
83    
84     inline Vector3<Real>& operator = (const Vector<Real, 3>& v) {
85     if (this == &v) { return *this; }
86     Vector<Real, 3>::operator=(v);
87     return *this;
88     }
89    
90 tim 70 /**
91 gezelter 97 * Retunrs reference of the first element of Vector3.
92     * @return reference of the first element of Vector3
93 tim 70 */
94 tim 385 inline Real& x() { return this->data_[0];}
95 tim 70
96     /**
97 gezelter 97 * Retunrs the first element of Vector3.
98     * @return the first element of Vector3
99 tim 70 */
100 tim 385 inline Real x() const { return this->data_[0];}
101 gezelter 97
102     /**
103     * Retunrs reference of the second element of Vector3.
104     * @return reference of the second element of Vector3
105     */
106 tim 385 inline Real& y() { return this->data_[1];}
107 gezelter 97
108     /**
109     * Retunrs the second element of Vector3.
110     * @return c the second element of Vector3
111     */
112 tim 385 inline Real y() const { return this->data_[1];}
113 gezelter 97
114     /**
115     * Retunrs reference of the third element of Vector3.
116     * @return reference of the third element of Vector3
117     */
118 tim 385 inline Real& z() { return this->data_[2];}
119 gezelter 97
120     /**
121     * Retunrs the third element of Vector3.
122     * @return f the third element of Vector3
123     */
124 tim 385 inline Real z() const { return this->data_[2];}
125 gezelter 97
126     };
127    
128     /**
129     * Returns the cross product of two Vectors
130     * @param v1 first vector
131     * @param v2 second vector
132     * @return the cross product of v1 and v2
133     * @see #vector::dot
134     */
135     template<typename Real>
136 gezelter 1562 inline Vector3<Real> cross( const Vector3<Real>& v1, const Vector3<Real>& v2 ) {
137 gezelter 97 Vector3<Real> result;
138    
139     result.x() = v1.y() * v2.z() - v1.z() * v2.y();
140     result.y() = v1.z() * v2.x() - v1.x() * v2.z();
141     result.z() = v1.x() * v2.y() - v1.y() * v2.x();
142    
143     return result;
144     }
145 gezelter 246
146 gezelter 1562
147     /**
148     * Returns the linear indexing for integer vectors. Compare to
149     * Rapaport's VLinear
150     *
151     * @param p first vector
152     * @param s second vector
153     */
154     template<typename Real>
155     inline Real Vlinear( const Vector3<Real>& p, const Vector3<Real>& s ) {
156     return (p.z() * s.y() + p.y()) * s.x() + p.x();
157     }
158    
159 gezelter 246 typedef Vector3<int> Vector3i;
160    
161 tim 963 typedef Vector3<RealType> Vector3d;
162 gezelter 246
163 gezelter 507 const Vector3d V3Zero(0.0 , 0.0, 0.0);
164     const Vector3d V3X( 1.0, 0.0, 0.0 ) ;
165     const Vector3d V3Y( 0.0, 1.0, 0.0 ) ;
166 gezelter 1562 const Vector3d V3Z ( 0.0, 0.0, 1.0 ) ;
167    
168 tim 70 }
169    
170     #endif

Properties

Name Value
svn:keywords Author Id Revision Date