My Project
dgematrix-misc.hpp
1 //=============================================================================
3 inline void dgematrix::clear()
4 {
5 #ifdef CPPL_VERBOSE
6  std::cerr << "# [MARK] dgematrix::clear()"
7  << std::endl;
8 #endif//CPPL_VERBOSE
9 
10 #ifdef CPPL_DEBUG
11  std::cerr << "# [NOTE] dgematrix::clear() "
12  << " An array at " << Array
13  << " is going to be cleared." << std::endl;
14 #endif//CPPL_DEBUG
15 
16  M =0;
17  N =0;
18  delete [] Array;
19  Array =NULL;
20  delete [] Darray;
21  Darray =NULL;
22 }
23 
24 //=============================================================================
26 inline void dgematrix::zero()
27 {
28 #ifdef CPPL_VERBOSE
29  std::cerr << "# [MARK] dgematrix::zero()"
30  << std::endl;
31 #endif//CPPL_VERBOSE
32 
33  for(long i=0; i<M*N; i++){ Array[i] =0.0; }
34 }
35 
36 //=============================================================================
38 inline void dgematrix::identity()
39 {
40 #ifdef CPPL_VERBOSE
41  std::cerr << "# [MARK] dgematrix::identity()"
42  << std::endl;
43 #endif//CPPL_VERBOSE
44 
45 #ifdef CPPL_DEBUG
46  if(M!=N){
47  std::cerr << "[ERROR] dgematrix::identity()" << std::endl
48  << "Only square matrix can be a identity matrix." << std::endl
49  << "The matrix size was " << M << "x" << N << "." << std::endl;
50  exit(1);
51  }
52 #endif//CPPL_DEBUG
53 
54  for(long i=0; i<M*N; i++){ Array[i] =0.0; }
55  for(long i=0; i<M; i++){ operator()(i,i) =1.0; }
56 }
57 
58 //=============================================================================
60 inline void dgematrix::chsign()
61 {
62 #ifdef CPPL_VERBOSE
63  std::cerr << "# [MARK] dgematrix::chsign()"
64  << std::endl;
65 #endif//CPPL_VERBOSE
66 
67  for(long i=0; i<M*N; i++){ Array[i] =-Array[i]; }
68 }
69 
70 //=============================================================================
72 inline void dgematrix::copy(const dgematrix& mat)
73 {
74 #ifdef CPPL_VERBOSE
75  std::cerr << "# [MARK] dgematrix::copy(const dgematrix&)"
76  << std::endl;
77 #endif//CPPL_VERBOSE
78 
79 #ifdef CPPL_DEBUG
80  std::cerr << "# [NOTE] dgematrix::copy(const dgematrix&) "
81  << "A dgematrix at " << Array << " is going to be deleted.";
82 #endif//CPPL_DEBUG
83 
84  M =mat.M;
85  N =mat.N;
86  delete [] Array;
87  Array =new double[mat.M*mat.N];
88  delete [] Darray;
89  Darray =new double*[N];
90  for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
91 
92  dcopy_(mat.M*mat.N, mat.Array, 1, Array, 1);
93 
94 #ifdef CPPL_DEBUG
95  std::cerr << " Then, a COPY of a dgematrix has been cleated at "
96  << Array << "." << std::endl;
97 #endif//CPPL_DEBUG
98 }
99 
100 //=============================================================================
103 inline void dgematrix::shallow_copy(const _dgematrix& mat)
104 {
105 #ifdef CPPL_VERBOSE
106  std::cerr << "# [MARK] dgematrix::shallow_copy(const _dgematrix&)"
107  << std::endl;
108 #endif//CPPL_VERBOSE
109 
110 #ifdef CPPL_DEBUG
111  std::cerr << "# [NOTE] dgematrix:shallow_copy(const _dgematrix&) "
112  << "A dgematrix at " << Array << " is going to be deleted, "
113  << "and point at " << mat.Array << " instead." << std::endl;
114 #endif//CPPL_DEBUG
115 
116  M =mat.M;
117  N =mat.N;
118  delete [] Array;
119  Array =mat.Array;
120  delete [] Darray;
121  Darray =mat.Darray;
122 }
123 
124 //=============================================================================
126 inline void dgematrix::resize(const long& _m, const long& _n)
127 {
128 #ifdef CPPL_VERBOSE
129  std::cerr << "# [MARK] dgematrix::resize(const long&, const long&)"
130  << std::endl;
131 #endif//CPPL_VERBOSE
132 
133 #ifdef CPPL_DEBUG
134  if( _m<0 || _n<0 ){
135  std::cerr << "[ERROR] dgematrix::resize(const long&, const long&)"
136  << std::endl
137  << "Matrix sizes must be positive integers." << std::endl
138  << "Your input was (" << _m << "," << _n << ")." << std::endl;
139  exit(1);
140  }
141 #endif//CPPL_DEBUG
142 
143  M =_m;
144  N =_n;
145  delete [] Array;
146  Array =new double[M*N];
147  delete [] Darray;
148  Darray =new double*[N];
149  for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
150 }
151 
152 //=============================================================================
154 inline void swap(dgematrix& A, dgematrix& B)
155 {
156 #ifdef CPPL_VERBOSE
157  std::cerr << "# [MARK] swap(dgematrix&, dgematrix&)"
158  << std::endl;
159 #endif//CPPL_VERBOSE
160 
161  long A_m(A.M), A_n(A.N);
162  double* A_array(A.Array);
163  double** A_darray = A.Darray; // double** A_darray(A.Darray);
164  A.M=B.M;
165  A.N=B.N;
166  A.Array=B.Array;
167  A.Darray=B.Darray;
168  B.M=A_m;
169  B.N=A_n;
170  B.Array=A_array;
171  B.Darray=A_darray;
172 }
173 
174 //=============================================================================
176 inline _dgematrix _(dgematrix& mat)
177 {
178 #ifdef CPPL_VERBOSE
179  std::cerr << "# [MARK] _(dgematrix&)"
180  << std::endl;
181 #endif//CPPL_VERBOSE
182 
183  _dgematrix newmat;
184 
185  newmat.M =mat.M;
186  newmat.N =mat.N;
187  newmat.Array =mat.Array;
188  newmat.Darray =mat.Darray;
189 
190  mat.M =0;
191  mat.N =0;
192  mat.Array =NULL;
193  mat.Darray =NULL;
194 
195  return newmat;
196 }
void clear()
Definition: dgematrix-misc.hpp:3
void zero()
Definition: dgematrix-misc.hpp:26
void resize(const long &, const long &)
Definition: dgematrix-misc.hpp:126
double * Array
1D Array to store vector data
Definition: _drovector.hpp:8
double ** Darray
array of pointers of column head addresses
Definition: _dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
(DO NOT USE) Smart-temporary Real Double-precision General Dence Matrix Class
Definition: _dgematrix.hpp:3
void identity()
Definition: dgematrix-misc.hpp:38
long N
matrix column size
Definition: _dgematrix.hpp:8
void copy(const dgematrix &)
Definition: dgematrix-misc.hpp:72
void shallow_copy(const _dgematrix &)
Definition: dgematrix-misc.hpp:103
double * Array
1D array to store matrix data
Definition: _dgematrix.hpp:9
void chsign()
Definition: dgematrix-misc.hpp:60
friend _dgematrix i(const dgematrix &)
Definition: dgematrix-calc.hpp:21
long M
matrix row size
Definition: _dgematrix.hpp:7
double & operator()(const long &, const long &)
Definition: dgematrix-io.hpp:3