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