00001
00003 inline void zgematrix::clear()
00004 {
00005 #ifdef CPPL_VERBOSE
00006 std::cerr << "# [MARK] zgematrix::clear()"
00007 << std::endl;
00008 #endif//CPPL_VERBOSE
00009
00010 #ifdef CPPL_DEBUG
00011 std::cerr << "# [NOTE] zgematrix::clear() "
00012 << " An array at " << Array
00013 << " is going to be cleared." << std::endl;
00014 #endif//CPPL_DEBUG
00015
00016 M =0;
00017 N =0;
00018 delete [] Array;
00019 Array =NULL;
00020 delete [] Darray;
00021 Darray =NULL;
00022 }
00023
00024
00026 inline void zgematrix::zero()
00027 {
00028 #ifdef CPPL_VERBOSE
00029 std::cerr << "# [MARK] zgematrix::zero()"
00030 << std::endl;
00031 #endif//CPPL_VERBOSE
00032
00033 for(long i=0; i<M*N; i++){ Array[i] =std::complex<double>(0.0,0.0); }
00034 }
00035
00036
00038 inline void zgematrix::identity()
00039 {
00040 #ifdef CPPL_VERBOSE
00041 std::cerr << "# [MARK] zgematrix::identity()"
00042 << std::endl;
00043 #endif//CPPL_VERBOSE
00044
00045 #ifdef CPPL_DEBUG
00046 if(M!=N){
00047 std::cerr << "[ERROR] zgematrix::identity()" << std::endl
00048 << "Only square matrix can be a identity matrix." << std::endl
00049 << "The matrix size was " << M << "x" << N << "." << std::endl;
00050 exit(1);
00051 }
00052 #endif//CPPL_DEBUG
00053
00054 for(long i=0; i<M*N; i++){ Array[i] =std::complex<double>(0.0,0.0); }
00055 for(long i=0; i<M; i++){ operator()(i,i) =std::complex<double>(1.0,0.0); }
00056 }
00057
00058
00060 inline void zgematrix::chsign()
00061 {
00062 #ifdef CPPL_VERBOSE
00063 std::cerr << "# [MARK] zgematrix::chsign()"
00064 << std::endl;
00065 #endif//CPPL_VERBOSE
00066
00067 for(long i=0; i<M*N; i++){ Array[i] =-Array[i]; }
00068 }
00069
00070
00072 inline void zgematrix::copy(const zgematrix& mat)
00073 {
00074 #ifdef CPPL_VERBOSE
00075 std::cerr << "# [MARK] zgematrix::copy(const zgematrix&)"
00076 << std::endl;
00077 #endif//CPPL_VERBOSE
00078
00079 #ifdef CPPL_DEBUG
00080 std::cerr << "# [NOTE] zgematrix::copy(const zgematrix&) "
00081 << "A zgematrix at " << Array << " is going to be deleted.";
00082 #endif//CPPL_DEBUG
00083
00084 M =mat.M;
00085 N =mat.N;
00086 delete [] Array;
00087 Array =new std::complex<double>[M*N];
00088 delete [] Darray;
00089 Darray =new std::complex<double>*[N];
00090 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00091
00092 zcopy_(mat.M*mat.N, mat.Array, 1, Array, 1);
00093
00094 #ifdef CPPL_DEBUG
00095 std::cerr << " Then, a COPY of a zgematrix has been cleated at "
00096 << Array << "." << std::endl;
00097 #endif//CPPL_DEBUG
00098 }
00099
00100
00103 inline void zgematrix::shallow_copy(const _zgematrix& mat)
00104 {
00105 #ifdef CPPL_VERBOSE
00106 std::cerr << "# [MARK] zgematrix::shallow_copy(const _zgematrix&)"
00107 << std::endl;
00108 #endif//CPPL_VERBOSE
00109
00110 #ifdef CPPL_DEBUG
00111 std::cerr << "# [NOTE] zgematrix:shallow_copy(const _zgematrix&) "
00112 << "A zgematrix at " << Array << " is going to be deleted, "
00113 << "and point at " << mat.Array << " instead." << std::endl;
00114 #endif//CPPL_DEBUG
00115
00116 M =mat.M;
00117 N =mat.N;
00118 delete [] Array;
00119 Array =mat.Array;
00120 delete [] Darray;
00121 Darray =mat.Darray;
00122 }
00123
00124
00126 inline void zgematrix::resize(const long& _m, const long& _n)
00127 {
00128 #ifdef CPPL_VERBOSE
00129 std::cerr << "# [MARK] zgematrix::resize(const long&, const long&)"
00130 << std::endl;
00131 #endif//CPPL_VERBOSE
00132
00133 #ifdef CPPL_DEBUG
00134 if( _m<0 || _n<0 ){
00135 std::cerr << "[ERROR] zgematrix::resize(const long&, const long&)"
00136 << std::endl
00137 << "Matrix sizes must be positive integers." << std::endl
00138 << "Your input was (" << _m << "," << _n << ")." << std::endl;
00139 exit(1);
00140 }
00141 #endif//CPPL_DEBUG
00142
00143 M =_m;
00144 N =_n;
00145 delete [] Array;
00146 Array =new std::complex<double>[M*N];
00147 delete [] Darray;
00148 Darray =new std::complex<double>*[N];
00149 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00150 }
00151
00152
00154 inline void swap(zgematrix& A, zgematrix& B)
00155 {
00156 #ifdef CPPL_VERBOSE
00157 std::cerr << "# [MARK] swap(zgematrix&, zgematrix&)"
00158 << std::endl;
00159 #endif//CPPL_VERBOSE
00160
00161 long A_m(A.M), A_n(A.N);
00162 std::complex<double>* A_array(A.Array);
00163 std::complex<double>** A_darray = A.Darray;
00164 A.M=B.M; A.N=B.N; A.Array=B.Array; A.Darray=B.Darray;
00165 B.M=A_m; B.N=A_n; B.Array=A_array; B.Darray=A_darray;
00166 }
00167
00168
00170 inline _zgematrix _(zgematrix& mat)
00171 {
00172 #ifdef CPPL_VERBOSE
00173 std::cerr << "# [MARK] _(zgematrix&)"
00174 << std::endl;
00175 #endif//CPPL_VERBOSE
00176
00177 _zgematrix newmat;
00178
00179 newmat.M =mat.M;
00180 newmat.N =mat.N;
00181 newmat.Array =mat.Array;
00182 newmat.Darray =mat.Darray;
00183
00184 mat.M =0;
00185 mat.N =0;
00186 mat.Array =NULL;
00187 mat.Darray =NULL;
00188
00189 return newmat;
00190 }