My Project
zgematrix-zgematrix.hpp
1 //=============================================================================
3 inline zgematrix& zgematrix::operator=(const zgematrix& mat)
4 {
5 #ifdef CPPL_VERBOSE
6  std::cerr << "# [MARK] zgematrix::operator=(const zgematrix&)"
7  << std::endl;
8 #endif//CPPL_VERBOSE
9 
10  if(Array!=mat.Array){ // if it is NOT self substitution
11  copy(mat);
12  }
13  return *this;
14 }
15 
19 
20 //=============================================================================
22 inline zgematrix& zgematrix::operator+=(const zgematrix& mat)
23 {
24 #ifdef CPPL_VERBOSE
25  std::cerr << "# [MARK] zgematrix::operator+=(const zgematrix&)"
26  << std::endl;
27 #endif//CPPL_VERBOSE
28 
29 #ifdef CPPL_DEBUG
30  if(N!=mat.N || M!=mat.M){
31  std::cerr << "[ERROR] zgematrix::operator+=(zgematrix&)" << std::endl
32  << "These two matrises can not make a summation." << std::endl
33  << "Your input was (" << M << "x" << N << ") += ("
34  << mat.M << "x" << mat.N << ")." << std::endl;
35  exit(1);
36  }
37 #endif//CPPL_DEBUG
38 
39  for(long i=0; i<M*N; i++){ Array[i]+=mat.Array[i]; }
40  return *this;
41 }
42 
43 //=============================================================================
45 inline zgematrix& zgematrix::operator-=(const zgematrix& mat)
46 {
47 #ifdef CPPL_VERBOSE
48  std::cerr << "# [MARK] zgematrix::operator-=(const zgematrix&)"
49  << std::endl;
50 #endif//CPPL_VERBOSE
51 
52 #ifdef CPPL_DEBUG
53  if(N!=mat.N || M!=mat.M){
54  std::cerr << "[ERROR] zgematrix::operator-=(zgematrix&)" << std::endl
55  << "These two matrises can not make a sutraction." << std::endl
56  << "Your input was (" << M << "x" << N << ") -= ("
57  << mat.M << "x" << mat.N << ")." << std::endl;
58  exit(1);
59  }
60 #endif//CPPL_DEBUG
61 
62  for(long i=0; i<M*N; i++){ Array[i]-=mat.Array[i]; }
63  return *this;
64 }
65 
66 //=============================================================================
68 inline zgematrix& zgematrix::operator*=(const zgematrix& mat)
69 {
70 #ifdef CPPL_VERBOSE
71  std::cerr << "# [MARK] zgematrix::operator*=(const zgematrix&)"
72  << std::endl;
73 #endif//CPPL_VERBOSE
74 
75 #ifdef CPPL_DEBUG
76  if(N!=mat.M){
77  std::cerr << "[ERROR] zgematrix::operator*=(zgematrix&)" << std::endl
78  << "These two matrises can not make a product." << std::endl
79  << "Your input was (" << M << "x" << N << ") *= ("
80  << mat.M << "x" << mat.N << ")." << std::endl;
81  exit(1);
82  }
83 #endif//CPPL_DEBUG
84 
85  zgematrix newmat( M, mat.N );
86  zgemm_( 'N', 'N', M, mat.N, N, std::complex<double>(1.0,0.0), Array, M,
87  mat.Array, mat.M, std::complex<double>(0.0,0.0), newmat.array, M );
88 
89  swap(*this,newmat);
90  return *this;
91 }
92 
96 
97 //=============================================================================
99 inline _zgematrix operator+(const zgematrix& matA, const zgematrix& matB)
100 {
101 #ifdef CPPL_VERBOSE
102  std::cerr << "# [MARK] operator+(const zgematrix&, const zgematrix&)"
103  << std::endl;
104 #endif//CPPL_VERBOSE
105 
106 #ifdef CPPL_DEBUG
107  if(matA.N!=matB.N || matA.M!=matB.M){
108  std::cerr << "[ERROR] operator+(zgematrix&, zgematrix&)" << std::endl
109  << "These two matrises can not make a summation." << std::endl
110  << "Your input was (" << matA.M << "x" << matA.N << ") + ("
111  << matB.M << "x" << matB.N << ")." << std::endl;
112  exit(1);
113  }
114 #endif//CPPL_DEBUG
115 
116  zgematrix newmat(matA.M,matA.N);
117  for(long i=0; i<newmat.m*newmat.n; i++){
118  newmat.Array[i] =matA.Array[i]+matB.Array[i];
119  }
120 
121  return _(newmat);
122 }
123 
124 //=============================================================================
126 inline _zgematrix operator-(const zgematrix& matA, const zgematrix& matB)
127 {
128 #ifdef CPPL_VERBOSE
129  std::cerr << "# [MARK] operator-(const zgematrix&, const zgematrix&)"
130  << std::endl;
131 #endif//CPPL_VERBOSE
132 
133 #ifdef CPPL_DEBUG
134  if(matA.N!=matB.N || matA.M!=matB.M){
135  std::cerr << "[ERROR] operator-(zgematrix&, zgematrix&)" << std::endl
136  << "These two matrises can not make a subtraction." << std::endl
137  << "Your input was (" << matA.M << "x" << matA.N << ") - ("
138  << matB.M << "x" << matB.N << ")." << std::endl;
139  exit(1);
140  }
141 #endif//CPPL_DEBUG
142 
143  zgematrix newmat(matA.M,matA.N);
144  for(long i=0; i<newmat.m*newmat.n; i++){
145  newmat.Array[i] =matA.Array[i]-matB.Array[i];
146  }
147 
148  return _(newmat);
149 }
150 
151 //=============================================================================
153 inline _zgematrix operator*(const zgematrix& matA, const zgematrix& matB)
154 {
155 #ifdef CPPL_VERBOSE
156  std::cerr << "# [MARK] operator*(const zgematrix&, const zgematrix&)"
157  << std::endl;
158 #endif//CPPL_VERBOSE
159 
160 #ifdef CPPL_DEBUG
161  if(matA.N!=matB.M){
162  std::cerr << "[ERROR] operator*(zgematrix&, zgematrix&)" << std::endl
163  << "These two matrises can not make a product." << std::endl
164  << "Your input was (" << matA.M << "x" << matA.N << ") * ("
165  << matB.M << "x" << matB.N << ")." << std::endl;
166  exit(1);
167  }
168 #endif//CPPL_DEBUG
169 
170  zgematrix newmat( matA.M, matB.N );
171  zgemm_( 'N', 'N', matA.M, matB.N, matA.N, std::complex<double>(1.0,0.0),
172  matA.Array, matA.M, matB.Array, matB.M,
173  std::complex<double>(0.0,0.0), newmat.array, matA.M );
174 
175  return _(newmat);
176 }
void copy(const zgematrix &)
Definition: zgematrix-misc.hpp:72
zgematrix & operator-=(const zgematrix &)
Definition: zgematrix-zgematrix.hpp:45
friend _zrovector operator-(const _zrovector &)
Definition: _zrovector-unary.hpp:15
zgematrix & operator=(const zgematrix &)
Definition: zgematrix-zgematrix.hpp:3
friend _zgematrix i(const zgematrix &)
Definition: zgematrix-calc.hpp:21
zgematrix & operator*=(const zgematrix &)
Definition: zgematrix-zgematrix.hpp:68
Complex Double-precision General Dence Matrix Class.
Definition: zgematrix.hpp:3
(DO NOT USE) Smart-temporary Complex Double-precision General Dence Matrix Class
Definition: _zgematrix.hpp:3
friend _zrovector operator*(const zrovector &, const zgematrix &)
Definition: zrovector-zgematrix.hpp:3
zgematrix & operator+=(const zgematrix &)
Definition: zgematrix-zgematrix.hpp:22
friend void swap(zgematrix &, zgematrix &)
Definition: zgematrix-misc.hpp:154
friend const _zrovector & operator+(const _zrovector &)
Definition: _zrovector-unary.hpp:3
std::complex< double > * Array
1D Array to store vector data
Definition: _zrovector.hpp:8