ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/math/RectMatrix.hpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/math/RectMatrix.hpp (file contents):
Revision 1644 by tim, Mon Oct 25 22:46:19 2004 UTC vs.
Revision 2069 by tim, Tue Mar 1 20:10:14 2005 UTC

# Line 1 | Line 1
1 < /*
2 < * Copyright (C) 2000-2004  Object Oriented Parallel Simulation Engine (OOPSE) project
3 < *
4 < * Contact: oopse@oopse.org
5 < *
6 < * This program is free software; you can redistribute it and/or
7 < * modify it under the terms of the GNU Lesser General Public License
8 < * as published by the Free Software Foundation; either version 2.1
9 < * of the License, or (at your option) any later version.
10 < * All we ask is that proper credit is given for our work, which includes
11 < * - but is not limited to - adding the above copyright notice to the beginning
12 < * of your source code files, and to any copyright notice that you may distribute
13 < * with programs based on this work.
14 < *
15 < * This program is distributed in the hope that it will be useful,
16 < * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 < * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 < * GNU Lesser General Public License for more details.
19 < *
20 < * You should have received a copy of the GNU Lesser General Public License
21 < * along with this program; if not, write to the Free Software
22 < * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
1 > /*
2 > * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3   *
4 + * 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 + * 1. Acknowledgement of the program authors must be made in any
10 + *    publication of scientific results based in part on use of the
11 + *    program.  An acceptable form of acknowledgement is citation of
12 + *    the article in which the program was described (Matthew
13 + *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 + *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 + *    Parallel Simulation Engine for Molecular Dynamics,"
16 + *    J. Comput. Chem. 26, pp. 252-271 (2005))
17 + *
18 + * 2. Redistributions of source code must retain the above copyright
19 + *    notice, this list of conditions and the following disclaimer.
20 + *
21 + * 3. Redistributions in binary form must reproduce the above copyright
22 + *    notice, this list of conditions and the following disclaimer in the
23 + *    documentation and/or other materials provided with the
24 + *    distribution.
25 + *
26 + * This software is provided "AS IS," without a warranty of any
27 + * kind. All express or implied conditions, representations and
28 + * warranties, including any implied warranty of merchantability,
29 + * fitness for a particular purpose or non-infringement, are hereby
30 + * excluded.  The University of Notre Dame and its licensors shall not
31 + * be liable for any damages suffered by licensee as a result of
32 + * using, modifying or distributing the software or its
33 + * derivatives. In no event will the University of Notre Dame or its
34 + * licensors be liable for any lost revenue, profit or data, or for
35 + * direct, indirect, special, consequential, incidental or punitive
36 + * damages, however caused and regardless of the theory of liability,
37 + * arising out of the use of or inability to use software, even if the
38 + * University of Notre Dame has been advised of the possibility of
39 + * such damages.
40   */
41 <
26 <
41 >
42   /**
43   * @file RectMatrix.hpp
44   * @author Teng Lin
# Line 33 | Line 48
48  
49   #ifndef MATH_RECTMATRIX_HPP
50   #define MATH_RECTMATRIX_HPP
51 <
51 > #include <math.h>
52   #include <cmath>
53   #include "Vector.hpp"
54  
# Line 53 | Line 68 | namespace oopse {
68              RectMatrix() {
69                  for (unsigned int i = 0; i < Row; i++)
70                      for (unsigned int j = 0; j < Col; j++)
71 <                        data_[i][j] = 0.0;
71 >                        this->data_[i][j] = 0.0;
72               }
73  
74              /** Constructs and initializes every element of this matrix to a scalar */
75              RectMatrix(Real s) {
76                  for (unsigned int i = 0; i < Row; i++)
77                      for (unsigned int j = 0; j < Col; j++)
78 <                        data_[i][j] = s;
78 >                        this->data_[i][j] = s;
79              }
80  
81              RectMatrix(Real* array) {
82                  for (unsigned int i = 0; i < Row; i++)
83                      for (unsigned int j = 0; j < Col; j++)
84 <                        data_[i][j] = array[i * Row + j];
84 >                        this->data_[i][j] = array[i * Row + j];
85              }
86  
87              /** copy constructor */
# Line 84 | Line 99 | namespace oopse {
99                  
100                  for (unsigned int i = 0; i < Row; i++)
101                      for (unsigned int j = 0; j < Col; j++)
102 <                        data_[i][j] = m.data_[i][j];
102 >                        this->data_[i][j] = m.data_[i][j];
103                  return *this;
104              }
105              
# Line 92 | Line 107 | namespace oopse {
107               * Return the reference of a single element of this matrix.
108               * @return the reference of a single element of this matrix
109               * @param i row index
110 <             * @param j colum index
110 >             * @param j Column index
111               */
112              Real& operator()(unsigned int i, unsigned int j) {
113                  //assert( i < Row && j < Col);
114 <                return data_[i][j];
114 >                return this->data_[i][j];
115              }
116  
117              /**
118               * Return the value of a single element of this matrix.
119               * @return the value of a single element of this matrix
120               * @param i row index
121 <             * @param j colum index
121 >             * @param j Column index
122               */        
123              Real operator()(unsigned int i, unsigned int j) const  {
124                  
125 <                return data_[i][j];  
125 >                return this->data_[i][j];  
126              }
127  
128              /**
# Line 117 | Line 132 | namespace oopse {
132              void getArray(Real* array) {
133                  for (unsigned int i = 0; i < Row; i++) {
134                      for (unsigned int j = 0; j < Col; j++) {
135 <                        array[i * Row + j] = data_[i][j];
135 >                        array[i * Row + j] = this->data_[i][j];
136                      }
137                  }
138              }
# Line 125 | Line 140 | namespace oopse {
140  
141              /** Returns the pointer of internal array */
142              Real* getArrayPointer() {
143 <                return &data_[0][0];
143 >                return &this->data_[0][0];
144              }
145  
146              /**
# Line 137 | Line 152 | namespace oopse {
152                  Vector<Real, Row> v;
153  
154                  for (unsigned int i = 0; i < Row; i++)
155 <                    v[i] = data_[row][i];
155 >                    v[i] = this->data_[row][i];
156  
157                  return v;
158              }
# Line 150 | Line 165 | namespace oopse {
165               void setRow(unsigned int row, const Vector<Real, Row>& v) {
166  
167                  for (unsigned int i = 0; i < Row; i++)
168 <                    data_[row][i] = v[i];
168 >                    this->data_[row][i] = v[i];
169               }
170  
171              /**
# Line 158 | Line 173 | namespace oopse {
173               * @return a column of  this matrix as a vector
174               * @param col the column index
175               */                
176 <            Vector<Real, Col> getColum(unsigned int col) {
176 >            Vector<Real, Col> getColumn(unsigned int col) {
177                  Vector<Real, Col> v;
178  
179                  for (unsigned int j = 0; j < Col; j++)
180 <                    v[j] = data_[j][col];
180 >                    v[j] = this->data_[j][col];
181  
182                  return v;
183              }
# Line 172 | Line 187 | namespace oopse {
187               * @param col the column index
188               * @param v the vector to be set
189               */                
190 <             void setColum(unsigned int col, const Vector<Real, Col>& v){
190 >             void setColumn(unsigned int col, const Vector<Real, Col>& v){
191  
192                  for (unsigned int j = 0; j < Col; j++)
193 <                    data_[j][col] = v[j];
193 >                    this->data_[j][col] = v[j];
194               }        
195  
196              /**
# Line 187 | Line 202 | namespace oopse {
202                      assert(i < Row && j < Row);
203  
204                      for (unsigned int k = 0; k < Col; k++)
205 <                        std::swap(data_[i][k], data_[j][k]);
205 >                        std::swap(this->data_[i][k], this->data_[j][k]);
206              }
207  
208             /**
209 <             * swap two colums of this matrix
210 <             * @param i the first colum
211 <             * @param j the second colum
209 >             * swap two Columns of this matrix
210 >             * @param i the first Column
211 >             * @param j the second Column
212               */
213 <            void swapColum(unsigned int i, unsigned int j){
213 >            void swapColumn(unsigned int i, unsigned int j){
214                      assert(i < Col && j < Col);
215                      
216                      for (unsigned int k = 0; k < Row; k++)
217 <                        std::swap(data_[k][i], data_[k][j]);
217 >                        std::swap(this->data_[k][i], this->data_[k][j]);
218              }
219  
220              /**
# Line 212 | Line 227 | namespace oopse {
227              bool operator ==(const RectMatrix<Real, Row, Col>& m) {
228                  for (unsigned int i = 0; i < Row; i++)
229                      for (unsigned int j = 0; j < Col; j++)
230 <                        if (!equal(data_[i][j], m.data_[i][j]))
230 >                        if (!equal(this->data_[i][j], m.data_[i][j]))
231                              return false;
232  
233                  return true;
# Line 231 | Line 246 | namespace oopse {
246              inline void negate() {
247                  for (unsigned int i = 0; i < Row; i++)
248                      for (unsigned int j = 0; j < Col; j++)
249 <                        data_[i][j] = -data_[i][j];
249 >                        this->data_[i][j] = -this->data_[i][j];
250              }
251              
252              /**
# Line 241 | Line 256 | namespace oopse {
256              inline void negate(const RectMatrix<Real, Row, Col>& m) {
257                  for (unsigned int i = 0; i < Row; i++)
258                      for (unsigned int j = 0; j < Col; j++)
259 <                        data_[i][j] = -m.data_[i][j];        
259 >                        this->data_[i][j] = -m.data_[i][j];        
260              }
261              
262              /**
# Line 251 | Line 266 | namespace oopse {
266              inline void add( const RectMatrix<Real, Row, Col>& m ) {
267                  for (unsigned int i = 0; i < Row; i++)
268                      for (unsigned int j = 0; j < Col; j++)        
269 <                    data_[i][j] += m.data_[i][j];
269 >                    this->data_[i][j] += m.data_[i][j];
270              }
271              
272              /**
# Line 262 | Line 277 | namespace oopse {
277              inline void add( const RectMatrix<Real, Row, Col>& m1, const RectMatrix<Real, Row, Col>& m2 ) {
278                  for (unsigned int i = 0; i < Row; i++)
279                      for (unsigned int j = 0; j < Col; j++)        
280 <                    data_[i][j] = m1.data_[i][j] + m2.data_[i][j];
280 >                    this->data_[i][j] = m1.data_[i][j] + m2.data_[i][j];
281              }
282              
283              /**
# Line 272 | Line 287 | namespace oopse {
287              inline void sub( const RectMatrix<Real, Row, Col>& m ) {
288                  for (unsigned int i = 0; i < Row; i++)
289                      for (unsigned int j = 0; j < Col; j++)        
290 <                        data_[i][j] -= m.data_[i][j];
290 >                        this->data_[i][j] -= m.data_[i][j];
291              }
292              
293              /**
# Line 283 | Line 298 | namespace oopse {
298              inline void sub( const RectMatrix<Real, Row, Col>& m1, const RectMatrix<Real, Row, Col>& m2){
299                  for (unsigned int i = 0; i < Row; i++)
300                      for (unsigned int j = 0; j < Col; j++)        
301 <                        data_[i][j] = m1.data_[i][j] - m2.data_[i][j];
301 >                        this->data_[i][j] = m1.data_[i][j] - m2.data_[i][j];
302              }
303  
304              /**
# Line 293 | Line 308 | namespace oopse {
308              inline void mul( Real s ) {
309                  for (unsigned int i = 0; i < Row; i++)
310                      for (unsigned int j = 0; j < Col; j++)  
311 <                        data_[i][j] *= s;
311 >                        this->data_[i][j] *= s;
312              }
313  
314              /**
# Line 304 | Line 319 | namespace oopse {
319              inline void mul( Real s, const RectMatrix<Real, Row, Col>& m ) {
320                  for (unsigned int i = 0; i < Row; i++)
321                      for (unsigned int j = 0; j < Col; j++)  
322 <                        data_[i][j] = s * m.data_[i][j];
322 >                        this->data_[i][j] = s * m.data_[i][j];
323              }
324  
325              /**
# Line 314 | Line 329 | namespace oopse {
329              inline void div( Real s) {
330                  for (unsigned int i = 0; i < Row; i++)
331                      for (unsigned int j = 0; j < Col; j++)  
332 <                        data_[i][j] /= s;
332 >                        this->data_[i][j] /= s;
333              }
334  
335              /**
# Line 325 | Line 340 | namespace oopse {
340              inline void div( Real s, const RectMatrix<Real, Row, Col>& m ) {
341                  for (unsigned int i = 0; i < Row; i++)
342                      for (unsigned int j = 0; j < Col; j++)  
343 <                        data_[i][j] = m.data_[i][j] / s;
343 >                        this->data_[i][j] = m.data_[i][j] / s;
344              }
345  
346              /**
# Line 365 | Line 380 | namespace oopse {
380              }
381  
382              /** Return the transpose of this matrix */
383 <            RectMatrix<Real,  Col, Row> transpose(){
383 >            RectMatrix<Real,  Col, Row> transpose() const{
384                  RectMatrix<Real,  Col, Row> result;
385                  
386                  for (unsigned int i = 0; i < Row; i++)
387                      for (unsigned int j = 0; j < Col; j++)              
388 <                        result(j, i) = data_[i][j];
388 >                        result(j, i) = this->data_[i][j];
389  
390                  return result;
391              }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines