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()23Vect3::Vect3(){ 24 numrows = 3; numcols = 1; 25 } ~Vect3()26Vect3::~Vect3(){ 27 } 28 Vect3(const Vect3 & A)29Vect3::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)37Vect3::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)50double& 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) const58double Vect3::Get_1int(int i) const{ 59 return elements[i-1]; 60 } 61 Set_1int(int i,double value)62void Vect3::Set_1int(int i, double value){ 63 elements[i-1] = value; 64 } 65 BasicGet_1int(int i) const66double Vect3::BasicGet_1int(int i) const{ 67 return elements[i]; 68 } 69 BasicSet_1int(int i,double value)70void Vect3::BasicSet_1int(int i, double value){ 71 elements[i] = value; 72 } 73 BasicIncrement_1int(int i,double value)74void Vect3::BasicIncrement_1int(int i, double value){ 75 elements[i] += value; 76 } 77 Const(double value)78void Vect3::Const(double value){ 79 elements[0] = value; 80 elements[1] = value; 81 elements[2] = value; 82 } 83 GetType() const84MatrixType Vect3::GetType() const{ 85 return VECT3; 86 } 87 ReadData(istream & c)88istream& 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) const94ostream& 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)100void 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)111Vect3& 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)118Vect3& 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)130Vect3& 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)137Vect3& 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)144Vect3& 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