DistributedMatrix.cpp
1 #include "SeldonFlag.hxx"
2 
3 #include "SeldonSolverHeader.hxx"
4 #include "SeldonSolverInline.hxx"
5 
6 #include "SeldonComplexMatrixHeader.hxx"
7 #include "SeldonComplexMatrixInline.hxx"
8 
9 #ifdef SELDON_WITH_MPI
10 #include "SeldonDistributedHeader.hxx"
11 #include "SeldonDistributedInline.hxx"
12 #endif
13 
14 #ifndef SELDON_WITH_COMPILED_LIBRARY
15 #include "matrix_sparse/DistributedMatrix.cxx"
16 #include "matrix_sparse/DistributedMatrixFunction.cxx"
17 #endif
18 
19 namespace Seldon
20 {
21 
22  SELDON_EXTERN template class DistributedMatrix_Base<Real_wp>;
23  SELDON_EXTERN template class DistributedMatrix_Base<Complex_wp>;
24 
25  SELDON_EXTERN template void DistributedMatrix_Base<Real_wp>::AssembleVec(Vector<Real_wp>&) const;
26 
27  SELDON_EXTERN template void DistributedMatrix_Base<Real_wp>::Init(const DistributedMatrix_Base<Real_wp>&);
28  SELDON_EXTERN template void DistributedMatrix_Base<Complex_wp>::Init(const DistributedMatrix_Base<Real_wp>&);
29  SELDON_EXTERN template void DistributedMatrix_Base<Real_wp>::Init(const DistributedMatrix_Base<Complex_wp>&);
30  SELDON_EXTERN template void DistributedMatrix_Base<Complex_wp>::Init(const DistributedMatrix_Base<Complex_wp>&);
31 
32  /* ArrayRowSparse */
33 
34  SELDON_EXTERN template class DistributedMatrix<Real_wp, General, ArrayRowSparse>;
35 
36  // methods of distributed matrices
37  SELDON_EXTERN template DistributedMatrix<Real_wp, General, ArrayRowSparse>& DistributedMatrix<Real_wp, General, ArrayRowSparse>::operator *=(const Real_wp&);
38  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, ArrayRowSparse>::RemoveSmallEntry(const Real_wp&);
39  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, ArrayRowSparse>::Fill(const int&);
40  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, ArrayRowSparse>::Fill(const Real_wp&);
41  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, ArrayRowSparse>::GetDistributedRows(Matrix<Real_wp, General, ArrayRowSparse>&, Vector<IVect>& ) const;
42  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, ArrayRowSparse>::GetDistributedColumns(Matrix<Real_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
43 
44  // functions for distributed matrices
45  SELDON_EXTERN template void MltAddVector(const Real_wp&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
46  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
47  SELDON_EXTERN template void MltAddVector(const Real_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
48  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
49  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
50  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
51  SELDON_EXTERN template void MltVector(const Real_wp&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
52  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
53  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
54  SELDON_EXTERN template void MltScalar(const Real_wp&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
55  SELDON_EXTERN template void MltMin(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, IVect&, IVect&);
56  SELDON_EXTERN template void MltMin(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, IVect&, IVect&);
57  SELDON_EXTERN template void MltMin(const Matrix<Real_wp, General, ArrayRowSparse>&,
58  const IVect&, IVect&, IVect&);
59  SELDON_EXTERN template void MltMin(const Matrix<Complex_wp, General, ArrayRowSparse>&,
60  const IVect&, IVect&, IVect&);
61 
62  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
63  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
64 
65  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
66  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
67  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
68  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
69  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
70  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
71 
72  SELDON_EXTERN template void Transpose(DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
73  SELDON_EXTERN template void Conjugate(DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
74  SELDON_EXTERN template void Transpose(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
75  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
76  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
77 
78  SELDON_EXTERN template void GetRow(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, int, Vector<Real_wp, VectSparse>&);
79  SELDON_EXTERN template void GetCol(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, int, Vector<Real_wp, VectSparse>&);
80  SELDON_EXTERN template void SetRow(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
81  SELDON_EXTERN template void SetCol(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
82 
83  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<int>&, const Vector<int>&);
84  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<int>&, const Vector<int>&);
85 
86  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
87  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
88  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
89  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
90 
91  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
92  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
93  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
94 
95  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
96  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&);
97  SELDON_EXTERN template void ScaleRightMatrix(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&);
98  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
99 
100  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
101  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
102  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
103  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, ArrayRowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
104 
105  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
106  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
107 
108  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&,
109  const IVect&, const IVect&, DistributedMatrix<Real_wp, General, RowSparse>&);
110 
111  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&,
112  const IVect&, const IVect&, DistributedMatrix<Real_wp, General, ArrayRowSparse>&);
113 
114  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Real_wp, General, ArrayRowSparse>&,
115  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
116  DistributedMatrix<Real_wp, General, ArrayRowSparse>&, bool);
117 
118  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Complex_wp, General, ArrayRowSparse>&,
119  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
120  DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, bool);
121 
122  /* RowSparse */
123 
124  SELDON_EXTERN template class DistributedMatrix<Real_wp, General, RowSparse>;
125 
126  // methods of distributed matrices
127  SELDON_EXTERN template DistributedMatrix<Real_wp, General, RowSparse>& DistributedMatrix<Real_wp, General, RowSparse>::operator *=(const Real_wp&);
128  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, RowSparse>::RemoveSmallEntry(const Real_wp&);
129  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, RowSparse>::Fill(const int&);
130  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, RowSparse>::Fill(const Real_wp&);
131  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, RowSparse>::GetDistributedRows(Matrix<Real_wp, General, ArrayRowSparse>&, Vector<IVect>&) const;
132  SELDON_EXTERN template void DistributedMatrix<Real_wp, General, RowSparse>::GetDistributedColumns(Matrix<Real_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
133 
134  // functions for distributed matrices
135  SELDON_EXTERN template void MltAddVector(const Real_wp&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
136  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
137  SELDON_EXTERN template void MltAddVector(const Real_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
138  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
139  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
140  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
141  SELDON_EXTERN template void MltVector(const Real_wp&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
142  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
143  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
144  SELDON_EXTERN template void MltScalar(const Real_wp&, DistributedMatrix<Real_wp, General, RowSparse>&);
145 
146  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Real_wp, General, RowSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
147 
148  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Real_wp, General, RowSparse>&);
149  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, General, RowSparse>&);
150  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, General, RowSparse>&);
151  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Real_wp, General, RowSparse>&);
152  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Real_wp, General, RowSparse>&);
153  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Real_wp, General, RowSparse>&);
154 
155  SELDON_EXTERN template void Transpose(DistributedMatrix<Real_wp, General, RowSparse>&);
156  SELDON_EXTERN template void Conjugate(DistributedMatrix<Real_wp, General, RowSparse>&);
157  SELDON_EXTERN template void Transpose(const DistributedMatrix<Real_wp, General, RowSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
158  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Real_wp, General, RowSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
159  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Real_wp, General, RowSparse>&);
160 
161  SELDON_EXTERN template void GetRow(const DistributedMatrix<Real_wp, General, RowSparse>&, int, Vector<Real_wp, VectSparse>&);
162  SELDON_EXTERN template void GetCol(const DistributedMatrix<Real_wp, General, RowSparse>&, int, Vector<Real_wp, VectSparse>&);
163  SELDON_EXTERN template void SetRow(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, General, RowSparse>&);
164  SELDON_EXTERN template void SetCol(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, General, RowSparse>&);
165 
166  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<int>&, const Vector<int>&);
167  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<int>&, const Vector<int>&);
168 
169  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, General, RowSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
170  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, General, RowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
171  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, RowSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
172  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, General, RowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
173 
174  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, General, RowSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
175 
176  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Real_wp, General, RowSparse>&);
177  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&);
178  SELDON_EXTERN template void ScaleRightMatrix(DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&);
179  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Real_wp, General, RowSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
180 
181  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, RowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
182  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, RowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
183  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, RowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
184  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, General, RowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
185 
186  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Real_wp, General, RowSparse>&);
187  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Real_wp, General, RowSparse>&);
188 
189  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, General, RowSparse>&,
190  const IVect&, const IVect&, DistributedMatrix<Real_wp, General, RowSparse>&);
191 
192  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Real_wp, General, RowSparse>&,
193  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
194  DistributedMatrix<Real_wp, General, RowSparse>&, bool);
195 
196  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Complex_wp, General, RowSparse>&,
197  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
198  DistributedMatrix<Complex_wp, General, RowSparse>&, bool);
199 
200  /* ArrayRowSymSparse */
201 
202  SELDON_EXTERN template class DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>;
203 
204  // methods of distributed matrices
205  SELDON_EXTERN template DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>& DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>::operator *=(const Real_wp&);
206  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>::RemoveSmallEntry(const Real_wp&);
207  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>::Fill(const int&);
208  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>::Fill(const Real_wp&);
209  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>::GetDistributedRows(Matrix<Real_wp, General, ArrayRowSparse>&, Vector<IVect>& ) const;
210  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>::GetDistributedColumns(Matrix<Real_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
211 
212  // functions for distributed matrices
213  SELDON_EXTERN template void MltAddVector(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
214  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
215  SELDON_EXTERN template void MltAddVector(const Real_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
216  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
217  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
218  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
219  SELDON_EXTERN template void MltVector(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
220  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
221  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
222  SELDON_EXTERN template void MltScalar(const Real_wp&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
223  SELDON_EXTERN template void MltMin(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, IVect&, IVect&);
224  SELDON_EXTERN template void MltMin(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, IVect&, IVect&);
225  SELDON_EXTERN template void MltMin(const Matrix<Real_wp, Symmetric, ArrayRowSymSparse>&,
226  const IVect&, IVect&, IVect&);
227  SELDON_EXTERN template void MltMin(const Matrix<Complex_wp, Symmetric, ArrayRowSymSparse>&,
228  const IVect&, IVect&, IVect&);
229 
230  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
231 
232  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
233  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
234  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
235  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
236  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
237  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
238 
239  SELDON_EXTERN template void Transpose(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
240  SELDON_EXTERN template void Conjugate(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
241  SELDON_EXTERN template void Transpose(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
242  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
243  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
244 
245  SELDON_EXTERN template void GetRow(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, int, Vector<Real_wp, VectSparse>&);
246  SELDON_EXTERN template void GetCol(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, int, Vector<Real_wp, VectSparse>&);
247  SELDON_EXTERN template void SetRow(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
248  SELDON_EXTERN template void SetCol(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
249 
250  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<int>&, const Vector<int>&);
251  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<int>&, const Vector<int>&);
252 
253  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
254  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
255  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
256  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
257 
258  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
259  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
260  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
261 
262  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
263  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
264 
265  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
266  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
267  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
268  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
269 
270  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
271  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
272 
273  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&,
274  const IVect&, const IVect&, DistributedMatrix<Real_wp, General, RowSparse>&);
275 
276  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&,
277  const IVect&, const IVect&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
278 
279  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Real_wp, Symmetric, ArrayRowSymSparse>&,
280  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
281  DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, bool);
282 
283  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Complex_wp, Symmetric, ArrayRowSymSparse>&,
284  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
285  DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, bool);
286 
287  /* RowSymSparse */
288 
289  SELDON_EXTERN template class DistributedMatrix<Real_wp, Symmetric, RowSymSparse>;
290 
291  // methods of distributed matrices
292  SELDON_EXTERN template DistributedMatrix<Real_wp, Symmetric, RowSymSparse>& DistributedMatrix<Real_wp, Symmetric, RowSymSparse>::operator *=(const Real_wp&);
293  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, RowSymSparse>::RemoveSmallEntry(const Real_wp&);
294  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, RowSymSparse>::Fill(const int&);
295  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, RowSymSparse>::Fill(const Real_wp&);
296  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, RowSymSparse>::GetDistributedRows(Matrix<Real_wp, General, ArrayRowSparse>&, Vector<IVect>&) const;
297  SELDON_EXTERN template void DistributedMatrix<Real_wp, Symmetric, RowSymSparse>::GetDistributedColumns(Matrix<Real_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
298 
299  // functions for distributed matrices
300  SELDON_EXTERN template void MltAddVector(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
301  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
302  SELDON_EXTERN template void MltAddVector(const Real_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, const Real_wp&, Vector<Real_wp>&, bool);
303  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
304  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
305  SELDON_EXTERN template void MltVector(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
306  SELDON_EXTERN template void MltVector(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
307  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, Vector<Real_wp>&, bool);
308  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
309  SELDON_EXTERN template void MltScalar(const Real_wp&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
310 
311  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
312 
313  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
314  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
315  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
316  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
317  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
318  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
319 
320  SELDON_EXTERN template void Transpose(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
321  SELDON_EXTERN template void Conjugate(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
322  SELDON_EXTERN template void Transpose(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
323  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
324  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
325 
326  SELDON_EXTERN template void GetRow(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, int, Vector<Real_wp, VectSparse>&);
327  SELDON_EXTERN template void GetCol(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, int, Vector<Real_wp, VectSparse>&);
328  SELDON_EXTERN template void SetRow(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
329  SELDON_EXTERN template void SetCol(const Vector<Real_wp, VectSparse>&, int, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
330 
331  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<int>&, const Vector<int>&);
332  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<int>&, const Vector<int>&);
333 
334  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
335  SELDON_EXTERN template void SorVector(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
336  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, Vector<Real_wp>&, const Vector<Real_wp>&, const Real_wp&, int, int);
337  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
338 
339  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
340  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Real_wp, General, RowSparse>&);
341 
342  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
343  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
344 
345  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
346  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Real_wp>&, bool, bool);
347  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
348  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Real_wp>&, bool, bool);
349 
350  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
351  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
352 
353  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&,
354  const IVect&, const IVect&, DistributedMatrix<Real_wp, General, RowSparse>&);
355 
356  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&,
357  const IVect&, const IVect&, DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&);
358 
359  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Real_wp, Symmetric, RowSymSparse>&,
360  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
361  DistributedMatrix<Real_wp, Symmetric, RowSymSparse>&, bool);
362 
363  SELDON_EXTERN template void DistributeCentralizedMatrix(Matrix<Complex_wp, Symmetric, RowSymSparse>&,
364  const MPI_Comm& comm, int, const Vector<int>&, DistributedMatrixIntegerArray&,
365  DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, bool);
366 
367  /* complex ArrayRowSparse */
368 
369  SELDON_EXTERN template class DistributedMatrix<Complex_wp, General, ArrayRowSparse>;
370 
371  // methods of distributed matrices
372  SELDON_EXTERN template DistributedMatrix<Complex_wp, General, ArrayRowSparse>& DistributedMatrix<Complex_wp, General, ArrayRowSparse>::operator *=(const Complex_wp&);
373  SELDON_EXTERN template DistributedMatrix<Complex_wp, General, ArrayRowSparse>& DistributedMatrix<Complex_wp, General, ArrayRowSparse>::operator *=(const Real_wp&);
374  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, ArrayRowSparse>::RemoveSmallEntry(const Real_wp&);
375  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, ArrayRowSparse>::Fill(const int&);
376  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, ArrayRowSparse>::Fill(const Complex_wp&);
377  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, ArrayRowSparse>::GetDistributedRows(Matrix<Complex_wp, General, ArrayRowSparse>&, Vector<IVect>& ) const;
378  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, ArrayRowSparse>::GetDistributedColumns(Matrix<Complex_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
379 
380  // functions for distributed matrices
381  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
382  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
383  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
384  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
385  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
386  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
387  SELDON_EXTERN template void MltScalar(const Real_wp&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
388 
389  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
390  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
391  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
392 
393  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
394  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
395  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
396  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
397  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
398  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
399 
400  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
401  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
402  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
403  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
404  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
405 
406  SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, int, Vector<Complex_wp, VectSparse>&);
407  SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, int, Vector<Complex_wp, VectSparse>&);
408  SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
409  SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
410 
411  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<int>&, const Vector<int>&);
412  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<int>&, const Vector<int>&);
413 
414  SELDON_EXTERN template void SorVector(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
415  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
416 
417  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
418  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
419  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
420  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
421  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
422 
423  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
424  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&);
425  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Complex_wp>&);
426  SELDON_EXTERN template void ScaleRightMatrix(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&);
427  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
428 
429  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
430  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
431  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
432  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
433 
434  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
435  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
436 
437  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&,
438  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
439 
440  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&,
441  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
442 
443 
444  /* complex RowSparse */
445 
446  SELDON_EXTERN template class DistributedMatrix<Complex_wp, General, RowSparse>;
447 
448  // methods of distributed matrices
449  SELDON_EXTERN template DistributedMatrix<Complex_wp, General, RowSparse>& DistributedMatrix<Complex_wp, General, RowSparse>::operator *=(const Complex_wp&);
450  SELDON_EXTERN template DistributedMatrix<Complex_wp, General, RowSparse>& DistributedMatrix<Complex_wp, General, RowSparse>::operator *=(const Real_wp&);
451  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, RowSparse>::RemoveSmallEntry(const Real_wp&);
452  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, RowSparse>::Fill(const int&);
453  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, RowSparse>::Fill(const Complex_wp&);
454  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, RowSparse>::GetDistributedRows(Matrix<Complex_wp, General, ArrayRowSparse>&, Vector<IVect>&) const;
455  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, RowSparse>::GetDistributedColumns(Matrix<Complex_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
456 
457  // functions for distributed matrices
458  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
459  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
460  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
461  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
462  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
463  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, General, RowSparse>&);
464 
465  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Complex_wp, General, RowSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
466  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, General, RowSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
467 
468  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, General, RowSparse>&);
469  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, RowSparse>&);
470  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, RowSparse>&);
471  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, RowSparse>&);
472  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, General, RowSparse>&);
473  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, General, RowSparse>&);
474 
475  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, General, RowSparse>&);
476  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, General, RowSparse>&);
477  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, General, RowSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
478  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, General, RowSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
479  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, General, RowSparse>&);
480 
481  SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, General, RowSparse>&, int, Vector<Complex_wp, VectSparse>&);
482  SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, General, RowSparse>&, int, Vector<Complex_wp, VectSparse>&);
483  SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, RowSparse>&);
484  SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, RowSparse>&);
485 
486  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<int>&, const Vector<int>&);
487  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<int>&, const Vector<int>&);
488 
489  SELDON_EXTERN template void SorVector(const DistributedMatrix<Complex_wp, General, RowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
490  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, RowSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
491 
492  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, RowSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
493 
494  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, General, RowSparse>&);
495  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Real_wp>&);
496  SELDON_EXTERN template void ScaleRightMatrix(DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Real_wp>&);
497  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, General, RowSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
498 
499  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, RowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
500  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, RowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
501  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, RowSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
502  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, General, RowSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
503 
504  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
505  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
506 
507  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, General, RowSparse>&,
508  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
509 
510  /* complex ArrayRowSymSparse */
511 
512  SELDON_EXTERN template class DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>;
513 
514  // methods of distributed matrices
515  SELDON_EXTERN template DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>& DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::operator *=(const Complex_wp&);
516  SELDON_EXTERN template DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>& DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::operator *=(const Real_wp&);
517  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::RemoveSmallEntry(const Real_wp&);
518  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::Fill(const int&);
519  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::Fill(const Complex_wp&);
520  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::GetDistributedRows(Matrix<Complex_wp, General, ArrayRowSparse>&, Vector<IVect>& ) const;
521  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>::GetDistributedColumns(Matrix<Complex_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
522 
523  // functions for distributed matrices
524  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
525  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
526  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
527  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
528  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
529  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
530  SELDON_EXTERN template void MltScalar(const Real_wp&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
531 
532  SELDON_EXTERN template void AddMatrix(const Real_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
533  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
534  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
535  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
536  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
537  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
538 
539  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
540  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
541  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
542  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
543  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
544  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
545 
546  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
547  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
548  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
549  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
550  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
551 
552  SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, int, Vector<Complex_wp, VectSparse>&);
553  SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, int, Vector<Complex_wp, VectSparse>&);
554  SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
555  SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
556 
557  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<int>&, const Vector<int>&);
558  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<int>&, const Vector<int>&);
559 
560  SELDON_EXTERN template void SorVector(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
561  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
562 
563  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
564  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
565  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
566  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowSparse>&);
567  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
568  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
569 
570  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
571  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
572 
573  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
574  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
575  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
576  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
577 
578  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
579  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
580 
581  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&,
582  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
583 
584  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&,
585  const IVect&, const IVect&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymSparse>&);
586 
587  /* complex RowSymSparse */
588 
589  SELDON_EXTERN template class DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>;
590 
591  // methods of distributed matrices
592  SELDON_EXTERN template DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>& DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::operator *=(const Complex_wp&);
593  SELDON_EXTERN template DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>& DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::operator *=(const Real_wp&);
594  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::RemoveSmallEntry(const Real_wp&);
595  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::Fill(const int&);
596  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::Fill(const Complex_wp&);
597  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::GetDistributedRows(Matrix<Complex_wp, General, ArrayRowSparse>&, Vector<IVect>&) const;
598  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>::GetDistributedColumns(Matrix<Complex_wp, General, ArrayColSparse>&, Vector<IVect>&, bool) const;
599 
600  // functions for distributed matrices
601  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
602  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
603  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
604  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
605  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
606  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
607 
608  SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
609 
610  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
611  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
612  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
613  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
614  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
615  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
616 
617  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
618  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
619  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
620  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
621  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
622 
623  SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, int, Vector<Complex_wp, VectSparse>&);
624  SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, int, Vector<Complex_wp, VectSparse>&);
625  SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
626  SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
627 
628  SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<int>&, const Vector<int>&);
629  SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<int>&, const Vector<int>&);
630 
631  SELDON_EXTERN template void SorVector(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
632  SELDON_EXTERN template void SorVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, Vector<Complex_wp>&, const Vector<Complex_wp>&, const Real_wp&, int, int);
633 
634  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
635 
636  SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
637  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
638 
639  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
640  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<long>&, Vector<int>&, Vector<Complex_wp>&, bool, bool);
641  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, Symmetric&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
642  SELDON_EXTERN template void AssembleDistributed(DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&, General&, const MPI_Comm&, IVect&, IVect&, Vector<int64_t>&, Vector<int64_t>&, Vector<Complex_wp>&, bool, bool);
643 
644  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
645  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&);
646 
647  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, Symmetric, RowSymSparse>&,
648  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
649 
650  /* ArrayRowComplexSparse */
651 
652  SELDON_EXTERN template class DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>;
653 
654  // methods of distributed matrices
655  SELDON_EXTERN template DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>& DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>::operator *=(const Real_wp&);
656  SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>::Fill(const Complex_wp&);
658 
659  // functions for distributed matrices
660  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
661  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
662  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
663  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
664  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
665  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
666  SELDON_EXTERN template void MltMin(const Matrix<Complex_wp, General, ArrayRowComplexSparse>&,
667  const IVect&, IVect&, IVect&);
668  SELDON_EXTERN template void MltMin(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, IVect&, IVect&);
669 
670  //SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
671 
672  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
673  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
674  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
675  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
676  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
677  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
678 
679  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
680  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
681  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
682  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
683  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
684 
685  //SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
686  //SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
687  //SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
688  //SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
689 
690  //SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<int>&, const Vector<int>&);
691  //SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<int>&, const Vector<int>&);
692 
693  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
694  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
695 
696  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Real_wp>&);
697  SELDON_EXTERN template void ScaleRightMatrix(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Real_wp>&);
698  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
699 
700  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
701  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&);
702 
703  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, General, ArrayRowComplexSparse>&,
704  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
705 
706  /* ArrayRowSymComplexSparse */
707 
708  SELDON_EXTERN template class DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>;
709 
710  // methods of distributed matrices
711  SELDON_EXTERN template DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>& DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>::operator *=(const Real_wp&);
712  SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>::Fill(const Complex_wp&);
714 
715  // functions for distributed matrices
716  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
717  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
718  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
719  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
720  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
721  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
722  SELDON_EXTERN template void MltMin(const Matrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&,
723  const IVect&, IVect&, IVect&);
724  SELDON_EXTERN template void MltMin(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, IVect&, IVect&);
725 
726  //SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
727 
728  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
729  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
730  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
731  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
732  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
733  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
734 
735  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
736  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
737  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
738  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
739  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
740 
741  //SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
742  //SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
743  //SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
744  //SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
745 
746  //SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<int>&, const Vector<int>&);
747  //SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<int>&, const Vector<int>&);
748 
749  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
750  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
751  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, DistributedMatrix<Complex_wp, General, RowSparse>&);
752 
753  //SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
754  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
755 
756  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
757  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&);
758 
759  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, Symmetric, ArrayRowSymComplexSparse>&,
760  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
761 
762  /* RowComplexSparse */
763 
764  SELDON_EXTERN template class DistributedMatrix<Complex_wp, General, RowComplexSparse>;
765 
766  // methods of distributed matrices
767  SELDON_EXTERN template DistributedMatrix<Complex_wp, General, RowComplexSparse>& DistributedMatrix<Complex_wp, General, RowComplexSparse>::operator *=(const Real_wp&);
768  //SELDON_EXTERN template void DistributedMatrix<Complex_wp, General, RowComplexSparse>::RemoveSmallEntry(const Real_wp&);
769 
770  // functions for distributed matrices
771  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
772  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
773  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
774  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
775  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
776  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
777 
778  //SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
779 
780  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
781  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
782  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
783  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
784  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
785  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
786 
787  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
788  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
789  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
790  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
791  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
792 
793  //SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
794  //SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
795  //SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
796  //SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
797 
798  //SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<int>&, const Vector<int>&);
799  //SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<int>&, const Vector<int>&);
800 
801  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
802 
803  //SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
804  SELDON_EXTERN template void ScaleLeftMatrix(DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Real_wp>&);
805  SELDON_EXTERN template void ScaleRightMatrix(DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Real_wp>&);
806  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, General, RowComplexSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
807 
808  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
809  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, General, RowComplexSparse>&);
810 
811  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, General, RowComplexSparse>&,
812  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
813 
814  /* RowSymComplexSparse */
815 
816  SELDON_EXTERN template class DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>;
817 
818  // methods of distributed matrices
819  SELDON_EXTERN template DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>& DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>::operator *=(const Real_wp&);
820  //SELDON_EXTERN template void DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>::RemoveSmallEntry(const Real_wp&);
821 
822  // functions for distributed matrices
823  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
824  SELDON_EXTERN template void MltAddVector(const Complex_wp&, const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<Complex_wp>&, const Complex_wp&, Vector<Complex_wp>&, bool);
825  SELDON_EXTERN template void MltVector(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
826  SELDON_EXTERN template void MltVector(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
827  SELDON_EXTERN template void MltVector(const SeldonTranspose&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<Complex_wp>&, Vector<Complex_wp>&, bool);
828  SELDON_EXTERN template void MltScalar(const Complex_wp&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
829 
830  //SELDON_EXTERN template void AddMatrix(const Complex_wp&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
831 
832  SELDON_EXTERN template Real_wp MaxAbs(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
833  SELDON_EXTERN template void GetRowSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
834  SELDON_EXTERN template void GetColSum(Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
835  SELDON_EXTERN template void GetRowColSum(Vector<Real_wp>&, Vector<Real_wp>&, const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
836  SELDON_EXTERN template Real_wp Norm1(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
837  SELDON_EXTERN template Real_wp NormInf(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
838 
839  SELDON_EXTERN template void Transpose(DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
840  SELDON_EXTERN template void Conjugate(DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
841  SELDON_EXTERN template void Transpose(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
842  SELDON_EXTERN template void TransposeConj(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
843  SELDON_EXTERN template void TransposeConj(DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
844 
845  //SELDON_EXTERN template void GetRow(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
846  //SELDON_EXTERN template void GetCol(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, int, Vector<Complex_wp, VectSparse>&);
847  //SELDON_EXTERN template void SetRow(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
848  //SELDON_EXTERN template void SetCol(const Vector<Complex_wp, VectSparse>&, int, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
849 
850  //SELDON_EXTERN template void ApplyPermutation(DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<int>&, const Vector<int>&);
851  //SELDON_EXTERN template void ApplyInversePermutation(DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<int>&, const Vector<int>&);
852 
853  SELDON_EXTERN template void Copy(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
854 
855  SELDON_EXTERN template void Copy(const DistributedMatrix<Real_wp, General, ArrayRowSparse>&, DistributedMatrix<Real_wp, Symmetric, ArrayRowSymSparse>&);
856 
857  //SELDON_EXTERN template Real_wp NormFro(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
858  SELDON_EXTERN template void ScaleMatrix(DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&, const Vector<Real_wp>&, const Vector<Real_wp>&);
859 
860  SELDON_EXTERN template void EraseCol(const IVect&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
861  SELDON_EXTERN template void EraseRow(const IVect&, DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&);
862 
863  SELDON_EXTERN template void CopySubMatrix(const DistributedMatrix<Complex_wp, Symmetric, RowSymComplexSparse>&,
864  const IVect&, const IVect&, DistributedMatrix<Complex_wp, General, RowSparse>&);
865 
866 }
Seldon::DistributedMatrix::operator*=
DistributedMatrix< T, Prop, Storage, Allocator > & operator*=(const T0 &x)
multiplication by a scalar
Definition: DistributedMatrix.cxx:4885
Seldon::TransposeConj
void TransposeConj(const Matrix< T, Prop, Storage, Allocator > &A, Matrix< T, Prop, Storage, Allocator > &B)
Matrix transposition and conjugation.
Definition: Functions_Matrix.cxx:2925
Seldon::DistributedMatrix::GetDistributedColumns
void GetDistributedColumns(Matrix< T0, General, ArrayColSparse, Allocator0 > &rows, Vector< IVect > &, bool sym_pattern) const
grouping all the local columns of the matrix into CSC form
Definition: DistributedMatrix.cxx:5189
Seldon::DistributedMatrix_Base::Init
void Init(int n, IVect *, IVect *, IVect *, int, int, IVect *, Vector< IVect > *, const MPI_Comm &)
Initialisation of pointers.
Definition: DistributedMatrix.cxx:1750
Seldon::MltScalar
void MltScalar(const T0 &alpha, Array3D< T, Allocator > &A)
Multiplication of all elements of a 3D array by a scalar.
Definition: Array3D.cxx:539
Seldon::Norm1
ClassComplexType< T >::Treal Norm1(const VectorExpression< T, E > &X)
returns 1-norm of an expression with vectors
Definition: Functions_BaseInline.cxx:140
Seldon::DistributedMatrix::RemoveSmallEntry
void RemoveSmallEntry(const T0 &epsilon)
removes small entries of the matrix
Definition: DistributedMatrix.cxx:4945
Seldon::DistributedMatrix_Base::AssembleVec
void AssembleVec(Vector< T2 > &) const
assembles the vector (adds values of shared rows)
Definition: DistributedMatrix.cxx:1050
Seldon::DistributedMatrix::Fill
void Fill()
sets values of non-zero entries to 0, 1, 2, etc
Definition: DistributedMatrix.cxx:4991
Seldon::Conjugate
void Conjugate(Matrix< T, Prop, Storage, Allocator > &A)
A is replaced by its conjugate.
Definition: Functions_Matrix.cxx:2915
Seldon::DistributedMatrix::GetDistributedRows
void GetDistributedRows(Matrix< T0, General, ArrayRowSparse, Allocator0 > &rows, Vector< IVect > &proc) const
grouping all the local rows of the matrix into CSR form
Definition: DistributedMatrix.cxx:5172
Seldon::NormInf
ClassComplexType< T >::Treal NormInf(const Matrix< T, Prop, Storage, Allocator > &A)
Returns the infinity-norm of a matrix.
Definition: Functions_Matrix.cxx:2435
Seldon::Transpose
void Transpose(Matrix< T, Prop, Storage, Allocator > &A)
Matrix transposition.
Definition: Functions_Matrix.cxx:2699
Seldon::MaxAbs
ClassComplexType< T >::Treal MaxAbs(const Matrix< T, Prop, Storage, Allocator > &A)
Returns the maximum (in absolute value) of a matrix.
Definition: Functions_Matrix.cxx:2386
Seldon::SorVector
void SorVector(const Matrix< T0, Prop0, Storage0, Allocator0 > &M, Vector< T2, Storage2, Allocator2 > &Y, const Vector< T1, Storage1, Allocator1 > &X, const T3 &omega, int iter, int type_ssor)
Solve M Y = X with S.O.R. method.
Definition: Functions_MatVect.cxx:1638
Seldon
Seldon namespace.
Definition: Array.cxx:24
Seldon::AddMatrix
void AddMatrix(const T0 &alpha, const Matrix< T1, Prop1, Storage1, Allocator1 > &A, Matrix< T2, Prop2, Storage2, Allocator2 > &B)
Adds two matrices.
Definition: Functions_Matrix.cxx:1619