1 /*
2  *_________________________________________________________________________*
3  *      POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE     *
4  *      DESCRIPTION: SEE READ-ME                                           *
5  *      FILE NAME: vect3.cpp                                               *
6  *      AUTHORS: See Author List                                           *
7  *      GRANTS: See Grants List                                            *
8  *      COPYRIGHT: (C) 2005 by Authors as listed in Author's List          *
9  *      LICENSE: Please see License Agreement                              *
10  *      DOWNLOAD: Free at www.rpi.edu/~anderk5                             *
11  *      ADMINISTRATOR: Prof. Kurt Anderson                                 *
12  *                     Computational Dynamics Lab                          *
13  *                     Rensselaer Polytechnic Institute                    *
14  *                     110 8th St. Troy NY 12180                           *
15  *      CONTACT:        anderk5@rpi.edu                                    *
16  *_________________________________________________________________________*/
17 
18 #include "vect3.h"
19 #include <cstdlib>
20 
21 using namespace std;
22 
Vect3()23 Vect3::Vect3(){
24   numrows = 3; numcols = 1;
25 }
~Vect3()26 Vect3::~Vect3(){
27 }
28 
Vect3(const Vect3 & A)29 Vect3::Vect3(const Vect3& A){  // copy constructor
30   numrows = 3; numcols = 1;
31 
32   elements[0] = A.elements[0];
33   elements[1] = A.elements[1];
34   elements[2] = A.elements[2];
35 }
36 
Vect3(const VirtualMatrix & A)37 Vect3::Vect3(const VirtualMatrix& A){  // copy constructor
38   numrows = 3; numcols = 1;
39 
40   // error check
41   if( (A.GetNumRows() != 3) || (A.GetNumCols() != 1) ){
42     cerr << "illegal matrix size" << endl;
43     exit(0);
44   }
45 
46   for(int i=0;i<3;i++)
47     elements[i] = A.BasicGet(i,0);
48 }
49 
operator_1int(int i)50 double& Vect3::operator_1int (int i){ // array access
51 	if(i<1 || i>3){
52 		cerr << "matrix index invalid in operator ()" << endl;
53 		exit(1);
54 	}
55   return elements[i-1];
56 }
57 
Get_1int(int i) const58 double Vect3::Get_1int(int i) const{
59   return elements[i-1];
60 }
61 
Set_1int(int i,double value)62 void Vect3::Set_1int(int i, double value){
63   elements[i-1] = value;
64 }
65 
BasicGet_1int(int i) const66 double Vect3::BasicGet_1int(int i) const{
67   return elements[i];
68 }
69 
BasicSet_1int(int i,double value)70 void Vect3::BasicSet_1int(int i, double value){
71   elements[i] = value;
72 }
73 
BasicIncrement_1int(int i,double value)74 void Vect3::BasicIncrement_1int(int i, double value){
75   elements[i] += value;
76 }
77 
Const(double value)78 void Vect3::Const(double value){
79   elements[0] = value;
80   elements[1] = value;
81   elements[2] = value;
82 }
83 
GetType() const84 MatrixType Vect3::GetType() const{
85   return VECT3;
86 }
87 
ReadData(istream & c)88 istream& Vect3::ReadData(istream& c){  //input
89   for(int i=0;i<3;i++)
90     c >> elements[i];
91   return c;
92 }
93 
WriteData(ostream & c) const94 ostream& Vect3::WriteData(ostream& c) const{  //output
95   for(int i=0;i<3;i++)
96     c << elements[i] << ' ';
97   return c;
98 }
99 
AssignVM(const VirtualMatrix & A)100 void Vect3::AssignVM(const VirtualMatrix& A){
101   // error check
102   if( (A.GetNumRows() != 3) || (A.GetNumCols() != 1) ){
103     cerr << "illegal matrix size" << endl;
104     exit(0);
105   }
106 
107   for(int i=0;i<numrows;i++)
108     elements[i] = A.BasicGet(i,0);
109 }
110 
operator =(const Vect3 & A)111 Vect3& Vect3::operator=(const Vect3& A){ // assignment operator
112   elements[0] = A.elements[0];
113   elements[1] = A.elements[1];
114   elements[2] = A.elements[2];
115   return *this;
116 }
117 
operator =(const VirtualMatrix & A)118 Vect3& Vect3::operator=(const VirtualMatrix& A){ // overloaded =
119   // error check
120   if( (A.GetNumRows() != 3) || (A.GetNumCols() != 1) ){
121     cerr << "illegal matrix size" << endl;
122     exit(0);
123   }
124 
125   for(int i=0;i<numrows;i++)
126     elements[i] = A.BasicGet(i,0);
127   return *this;
128 }
129 
operator *=(double b)130 Vect3& Vect3::operator*=(double b){
131   elements[0] *= b;
132   elements[1] *= b;
133   elements[2] *= b;
134   return *this;
135 }
136 
operator +=(const Vect3 & A)137 Vect3& Vect3::operator+=(const Vect3& A){
138   elements[0] += A.elements[0];
139   elements[1] += A.elements[1];
140   elements[2] += A.elements[2];
141   return *this;
142 }
143 
operator -=(const Vect3 & A)144 Vect3& Vect3::operator-=(const Vect3& A){
145   elements[0] -= A.elements[0];
146   elements[1] -= A.elements[1];
147   elements[2] -= A.elements[2];
148   return *this;
149 }
150