00001
00003 inline zgematrix::zgematrix()
00004 : m(M), n(N), array(Array), darray(Darray)
00005 {
00006 #ifdef CPPL_VERBOSE
00007 std::cerr << "# [MARK] zgematrix::zgematrix()"
00008 << std::endl;
00009 #endif//CPPL_VERBOSE
00010
00012 M =0;
00013 N =0;
00014 Array =NULL;
00015 Darray =NULL;
00016
00017 #ifdef CPPL_DEBUG
00018 std::cerr << "# [NOTE] zgematrix::zgematrix() "
00019 << "A new 0x0 matrix at " << Array
00020 << " has been made." << std::endl;
00021 #endif//CPPL_DEBUG
00022 }
00023
00024
00026 inline zgematrix::zgematrix(const zgematrix& mat)
00027 : m(M), n(N), array(Array), darray(Darray)
00028 {
00029 #ifdef CPPL_VERBOSE
00030 std::cerr << "# [MARK] zgematrix::zgematrix(const zgematrix&)"
00031 << std::endl;
00032 #endif//CPPL_VERBOSE
00033
00035 M =mat.M;
00036 N =mat.N;
00037 Array =new std::complex<double>[M*N];
00038 Darray =new std::complex<double>*[N];
00039 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00040
00042 zcopy_(M*N, mat.Array, 1, Array, 1);
00043
00044 #ifdef CPPL_DEBUG
00045 std::cerr << "# [NOTE] zgematrix::zgematrix(const zgematrix&) "
00046 << "A new matrix at " << Array << " has been made." << std::endl;
00047 #endif//CPPL_DEBUG
00048 }
00049
00050
00052 inline zgematrix::zgematrix(const _zgematrix& mat)
00053 : m(M), n(N), array(Array), darray(Darray)
00054 {
00055 #ifdef CPPL_VERBOSE
00056 std::cerr << "# [MARK] zgematrix::zgematrix(const _zgematrix&)"
00057 << std::endl;
00058 #endif//CPPL_VERBOSE
00059
00060 M =mat.M;
00061 N =mat.N;
00062 Array =mat.Array;
00063 Darray =mat.Darray;
00064
00065 #ifdef CPPL_DEBUG
00066 std::cerr << "# [NOTE] zgematrix::zgematrix(const _zgematrix&) "
00067 << "A new matrix pointing at " << Array << " has been made."
00068 << std::endl;
00069 #endif//CPPL_DEBUG
00070 }
00071
00072
00074 inline zgematrix::zgematrix(const zgbmatrix& mat)
00075 : m(M), n(N), array(Array), darray(Darray)
00076 {
00077 #ifdef CPPL_VERBOSE
00078 std::cerr << "# [MARK] zgematrix::zgematrix(const zgbmatrix&)"
00079 << std::endl;
00080 #endif//CPPL_VERBOSE
00081
00083 M =mat.M;
00084 N =mat.N;
00085 Array =new std::complex<double>[M*N];
00086 Darray =new std::complex<double>*[N];
00087 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00088
00090 zero();
00091 for(long i=0; i<mat.M; i++){
00092 for(long j=max(0,i-mat.KL); j<min(N,i+mat.KU+1); j++){
00093 operator()(i,j) =mat(i,j);
00094 }
00095 }
00096 #ifdef CPPL_DEBUG
00097 std::cerr << "# [NOTE] zgematrix::zgematrix(const zgbmatrix&) "
00098 << "A new matrix at " << Array << " has been made." << std::endl;
00099 #endif//CPPL_DEBUG
00100 }
00101
00102
00104 inline zgematrix::zgematrix(const _zgbmatrix& mat)
00105 : m(M), n(N), array(Array), darray(Darray)
00106 {
00107 #ifdef CPPL_VERBOSE
00108 std::cerr << "# [MARK] zgematrix::zgematrix(const _zgbmatrix&)"
00109 << std::endl;
00110 #endif//CPPL_VERBOSE
00111
00113 M =mat.M;
00114 N =mat.N;
00115 Array =new std::complex<double>[M*N];
00116 Darray =new std::complex<double>*[N];
00117 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00118
00120 zero();
00121 for(long i=0; i<mat.M; i++){
00122 for(long j=max(0,i-mat.KL); j<min(N,i+mat.KU+1); j++){
00123 operator()(i,j) =mat(i,j);
00124 }
00125 }
00126
00127 mat.destroy();
00128
00129 #ifdef CPPL_DEBUG
00130 std::cerr << "# [NOTE] zgematrix::zgematrix(const zgbmatrix&) "
00131 << "A new matrix at " << Array << " has been made." << std::endl;
00132 #endif//CPPL_DEBUG
00133 }
00134
00135
00137 inline zgematrix::zgematrix(const zhematrix& mat)
00138 : m(M), n(N), array(Array), darray(Darray)
00139 {
00140 #ifdef CPPL_VERBOSE
00141 std::cerr << "# [MARK] zgematrix::zgematrix(const zhematrix&)"
00142 << std::endl;
00143 #endif//CPPL_VERBOSE
00144
00146 M =mat.N;
00147 N =mat.N;
00148 Array =new std::complex<double>[N*N];
00149 Darray =new std::complex<double>*[N];
00150 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00151
00153 zero();
00154 for(long i=0; i<mat.N; i++){
00155 for(long j=0; j<mat.N; j++ ){
00156 operator()(i,j) =mat(i,j);
00157 }
00158 }
00159 #ifdef CPPL_DEBUG
00160 std::cerr << "# [NOTE] zgematrix::zgematrix(const zhematrix&) "
00161 << "A new matrix at " << Array << " has been made." << std::endl;
00162 #endif//CPPL_DEBUG
00163 }
00164
00165
00167 inline zgematrix::zgematrix(const _zhematrix& mat)
00168 : m(M), n(N), array(Array), darray(Darray)
00169 {
00170 #ifdef CPPL_VERBOSE
00171 std::cerr << "# [MARK] zgematrix::zgematrix(const _zhematrix&)"
00172 << std::endl;
00173 #endif//CPPL_VERBOSE
00174
00176 M =mat.N;
00177 N =mat.N;
00178 Array =mat.Array;
00179 Darray =mat.Darray;
00180
00181
00182
00184 for(long i=0; i<mat.N; i++){ for(long j=0; j<i; j++){
00185 operator()(j,i) =std::conj(operator()(i,j));
00186 }}
00187
00188 #ifdef CPPL_DEBUG
00189 std::cerr << "# [NOTE] zgematrix::zgematrix(const _zhematrix&) "
00190 << "A matrix at " << Array << " has been transformed into "
00191 << "zgematrix." << std::endl;
00192 #endif//CPPL_DEBUG
00193 }
00194
00195
00197 inline zgematrix::zgematrix(const zssmatrix& mat)
00198 : m(M), n(N), array(Array), darray(Darray)
00199 {
00200 #ifdef CPPL_VERBOSE
00201 std::cerr << "# [MARK] zgematrix::zgematrix(const zssmatrix&)"
00202 << std::endl;
00203 #endif//CPPL_VERBOSE
00204
00206 M =mat.M;
00207 N =mat.N;
00208 Array =new std::complex<double>[M*N];
00209 Darray =new std::complex<double>*[N];
00210 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00211
00213 zero();
00214 for(long c=0; c<mat.VOL; c++) {
00215 operator()(mat.Indx[c],mat.Jndx[c]) =mat.Array[c];
00216 }
00217
00218 #ifdef CPPL_DEBUG
00219 std::cerr << "# [NOTE] zgematrix::zgematrix(const zssmatrix&) "
00220 << "A new matrix at " << Array << " has been made." << std::endl;
00221 #endif//CPPL_DEBUG
00222 }
00223
00224
00226 inline zgematrix::zgematrix(const _zssmatrix& mat)
00227 : m(M), n(N), array(Array), darray(Darray)
00228 {
00229 #ifdef CPPL_VERBOSE
00230 std::cerr << "# [MARK] zgematrix::zgematrix(const _zssmatrix&)"
00231 << std::endl;
00232 #endif//CPPL_VERBOSE
00233
00235 M =mat.M;
00236 N =mat.N;
00237 Array =new std::complex<double>[M*N];
00238 Darray =new std::complex<double>*[N];
00239 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00240
00242 zero();
00243 for(long c=0; c<mat.VOL; c++){
00244 operator()(mat.Indx[c],mat.Jndx[c]) =mat.Array[c];
00245 }
00246
00247 mat.destroy();
00248
00249 #ifdef CPPL_DEBUG
00250 std::cerr << "# [NOTE] zgematrix::zgematrix(const _zssmatrix&) "
00251 << "A new matrix at " << Array << " has been made." << std::endl;
00252 #endif//CPPL_DEBUG
00253 }
00254
00255
00257 inline zgematrix::zgematrix(const long& _m, const long& _n)
00258 : m(M), n(N), array(Array), darray(Darray)
00259 {
00260 #ifdef CPPL_VERBOSE
00261 std::cerr << "# [MARK] zgematrix::zgematrix(const long&, const long&)"
00262 << std::endl;
00263 #endif//CPPL_VERBOSE
00264
00265 #ifdef CPPL_DEBUG
00266 if( _m<0 || _n<0 ){
00267 std::cerr << "[ERROR] zgematrix::zgematrix(const long, const long)"
00268 << std::endl
00269 << "Matrix sizes must be positive integers. " << std::endl
00270 << "Your input was (" << _m << "," << _n << ")." << std::endl;
00271 exit(1);
00272 }
00273 #endif//CPPL_DEBUG
00274
00276 M =_m;
00277 N =_n;
00278 Array =new std::complex<double>[M*N];
00279 Darray =new std::complex<double>*[N];
00280 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00281
00282 #ifdef CPPL_DEBUG
00283 std::cerr << "# [NOTE] zgematrix(long,long) "
00284 << "A new matrix at " << Array << " has been made." << std::endl;
00285 #endif//CPPL_DEBUG
00286 }
00287
00288
00290 inline zgematrix::zgematrix(const char* filename)
00291 : m(M), n(N), array(Array), darray(Darray)
00292 {
00293 #ifdef CPPL_VERBOSE
00294 std::cerr << "# [MARK] zgematrix::zgematrix(const char*)"
00295 << std::endl;
00296 #endif//CPPL_VERBOSE
00297
00298 Array =NULL;
00299 Darray =NULL;
00300
00302 read(filename);
00303
00304 #ifdef CPPL_DEBUG
00305 std::cerr << "# [NOTE] zgematrix::zgematrix(const char*) "
00306 << "A new matrix at " << Array << " has been made." << std::endl;
00307 #endif//CPPL_DEBUG
00308 }
00309
00313
00314
00316 inline zgematrix::~zgematrix()
00317 {
00318 #ifdef CPPL_VERBOSE
00319 std::cerr << "# [MARK] zgematrix::~zgematrix()"
00320 << std::endl;
00321 #endif//CPPL_VERBOSE
00322
00323 #ifdef CPPL_DEBUG
00324 std::cerr << "# [NOTE] zgematrix::~zgematrix() "
00325 << "A matrix at " << Array << " is going to be deleted." << std::endl;
00326 #endif//CPPL_DEBUG
00328 delete [] Array;
00329 delete [] Darray;
00330 }