1 #ifndef SUPER_MATRIX_CPP_H 2 #define SUPER_MATRIX_CPP_H 4 #include "parallel.hpp" 20 virtual size_t nnz()
const = 0;
31 void fail(
const char* msg)
const{
38 typedef STD_TR1::shared_ptr<super_Matrix_iterator_factory> p_iterator_factory;
39 typedef STD_TR1::shared_ptr<const super_Matrix_iterator_factory> p_const_iterator_factory;
41 enum status {SetUp, Baked, Multiply, Factorized, Factorized_dist};
43 virtual void addmyselfto(
Matrix& m)
const = 0;
48 virtual void obtain_Diagonal(complex *) = 0;
50 virtual void Insert(
row,
column, complex) = 0;
51 virtual void Add(
row,
column, complex) = 0;
52 virtual complex Get(
row,
column)
const = 0;
54 virtual void Apply(
const complex* ,
56 virtual void Apply(complex*)
const = 0;
58 virtual void Scale(complex) = 0;
60 virtual void Output(std::ostream& os)
const = 0;
63 virtual p_iterator_factory provide_iterator() = 0;
64 virtual p_const_iterator_factory provide_const_iterator()
const = 0;
66 virtual std::unique_ptr<super_Matrix_strategy> deep_copy(
67 STD_TR1::shared_ptr<super_Matrix> new_mat)
const = 0;
69 virtual status my_status()
const = 0;
108 typedef STD_TR1::shared_ptr<super_Matrix_iterator_factory> p_iterator_factory;
109 typedef STD_TR1::shared_ptr<const super_Matrix_iterator_factory> p_const_iterator_factory;
111 typedef std::pair<int,int> indexpair;
113 typedef super_Matrix_strategy::status status;
115 typedef STD_TR1::shared_ptr<super_Matrix> ref;
116 typedef STD_TR1::shared_ptr<const super_Matrix> const_ref;
128 p_const_iterator_factory provide_const_iterator()
const {
return strategy->provide_const_iterator();};
131 void set_param(
const std::string&,
double);
132 void set_param(
const std::string&,
int);
134 bool get_double_param(
const std::string&,
double&)
const;
135 bool get_int_param(
const std::string&,
int&)
const;
138 void obtain_Diagonal(complex *);
141 void Add_To(
Matrix& m)
const;
144 void Output(std::ostream& os)
const {strategy->Output(os);};
147 void Bake_to_Multiply(
bool use_mkl =
true);
149 void Bake_to_Distributed_Multiply();
151 void Bake_to_Factorize(
bool distributed =
false);
159 ref deep_copy()
const;
170 std::map<std::string, int> iparams;
171 std::map<std::string, double> dparams;
173 std::unique_ptr<super_Matrix_strategy> strategy;
177 void scale(complex v) { strategy->Scale(v);};
178 void insert(
row r,
column c, complex v){ strategy->Insert(r,c,v);};
179 void add(
row r,
column c, complex v){ strategy->Add(r,c,v);};
180 complex
get(
row r,
column c)
const {
return strategy->Get(r,c);};
182 void apply_two(
const complex* phi,
183 complex* result)
const {strategy->Apply(phi, result);};
184 void apply_one(complex* phi)
const {strategy->Apply(phi);};
186 size_t num_rows()
const {
return NN;};
187 size_t num_cols()
const {
return NN;};
196 typedef std::pair<int,int> indexpair;
198 const std::map<indexpair, complex>& data;
203 size_t nnz()
const{
return data.size();};
205 std::map<std::pair<int,int>,complex>::const_iterator begin()
const {
return data.begin();};
206 std::map<std::pair<int,int>,complex>::const_iterator end()
const {
return data.end();};
212 typedef std::pair<int,int> indexpair;
213 std::map<indexpair, complex> data;
216 indexpair index(
row r,
column c)
const {
return std::pair<int,int>(r.get(),c.get());};
218 int get_row(
const indexpair& i)
const {
return i.first;};
219 int get_col(
const indexpair& i)
const {
return i.second;};
223 void Scale(complex v);
228 p_iterator_factory provide_iterator();
229 p_const_iterator_factory provide_const_iterator()
const;
233 NN(m->num_of_cols()){};
237 void addmyselfto(
Matrix&)
const;
243 void obtain_Diagonal(complex* diag);
245 void Apply(
const complex*,
247 fail(
"Apply not valid in SetUp Phase!\n");
249 void Apply( complex*)
const{
250 fail(
"Apply not valid in SetUp Phase!\n");
253 std::unique_ptr<super_Matrix_strategy> deep_copy(
254 STD_TR1::shared_ptr<super_Matrix> new_mat
257 void Output(std::ostream& os)
const;
259 status my_status()
const {
return SetUp;};
p_iterator_factory provide_iterator()
Return an iterator factory over non-zero elements.
Definition: supermatrix.hpp:127
Definition: supermatrix_MUMPS.hpp:304
Definition: supermatrix.hpp:18
void Output(std::ostream &os) const
Output the matrix.
Definition: supermatrix.hpp:144
General interface to inversion of large, sparse Matrices.
Definition: supermatrix.hpp:106
An invalid request for matrix inversion.
Definition: exceptions.hpp:13
MPI_Comm get_comm() const
Return MPI Communicator.
Definition: supermatrix.hpp:162
Definition: supermatrix.hpp:209
Base Matrix class for access to 2D number grids.
Definition: matrix.hpp:82
Definition: supermatrix.hpp:194
status get_status()
Return the current phase.
Definition: supermatrix.hpp:124
This Base-Class offers Matrix-Vector multiplication and scaling.
Definition: matrix.hpp:322
Definition: supermatrix.hpp:23