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