monolish  0.14.2
MONOlithic LIner equation Solvers for Highly-parallel architecture
linearoperator_constructor.cpp
Go to the documentation of this file.
1 #include "../../include/common/monolish_logger.hpp"
2 #include "../../include/common/monolish_matrix.hpp"
3 #include "../../include/common/monolish_vector.hpp"
4 #include "../../include/monolish_blas.hpp"
5 #include "../internal/monolish_internal.hpp"
6 
7 #include <fstream>
8 #include <iomanip>
9 #include <limits>
10 #include <sstream>
11 
12 namespace monolish {
13 namespace matrix {
14 
15 // constructor //
16 template <typename T>
17 LinearOperator<T>::LinearOperator(const size_t M, const size_t N) {
18  Logger &logger = Logger::get_instance();
19  logger.util_in(monolish_func);
20  rowN = M;
21  colN = N;
22  gpu_status = false;
23  logger.util_out();
24 }
25 template LinearOperator<double>::LinearOperator(const size_t M, const size_t N);
26 template LinearOperator<float>::LinearOperator(const size_t M, const size_t N);
27 
28 template <typename T>
30  const size_t M, const size_t N,
31  const std::function<vector<T>(const vector<T> &)> &MATVEC) {
32  Logger &logger = Logger::get_instance();
33  logger.util_in(monolish_func);
34  rowN = M;
35  colN = N;
36  gpu_status = false;
37  matvec = MATVEC;
38  logger.util_out();
39 }
40 
42  const size_t M, const size_t N,
43  const std::function<vector<double>(const vector<double> &)> &MATVEC);
45  const size_t M, const size_t N,
46  const std::function<vector<float>(const vector<float> &)> &MATVEC);
47 
48 template <typename T>
50  const size_t M, const size_t N,
51  const std::function<vector<T>(const vector<T> &)> &MATVEC,
52  const std::function<vector<T>(const vector<T> &)> &RMATVEC) {
53  Logger &logger = Logger::get_instance();
54  logger.util_in(monolish_func);
55  rowN = M;
56  colN = N;
57  gpu_status = false;
58  matvec = MATVEC;
59  rmatvec = RMATVEC;
60  logger.util_out();
61 }
62 
64  const size_t M, const size_t N,
65  const std::function<vector<double>(const vector<double> &)> &MATVEC,
66  const std::function<vector<double>(const vector<double> &)> &RMATVEC);
68  const size_t M, const size_t N,
69  const std::function<vector<float>(const vector<float> &)> &MATVEC,
70  const std::function<vector<float>(const vector<float> &)> &RMATVEC);
71 
72 template <typename T>
74  const size_t M, const size_t N,
75  const std::function<Dense<T>(const Dense<T> &)> &MATMUL) {
76  Logger &logger = Logger::get_instance();
77  logger.util_in(monolish_func);
78  rowN = M;
79  colN = N;
80  gpu_status = false;
81  matmul_dense = MATMUL;
82  logger.util_out();
83 }
84 
86  const size_t M, const size_t N,
87  const std::function<Dense<double>(const Dense<double> &)> &MATMUL);
89  const size_t M, const size_t N,
90  const std::function<Dense<float>(const Dense<float> &)> &MATMUL);
91 
92 template <typename T>
94  const size_t M, const size_t N,
95  const std::function<Dense<T>(const Dense<T> &)> &MATMUL,
96  const std::function<Dense<T>(const Dense<T> &)> &RMATMUL) {
97  Logger &logger = Logger::get_instance();
98  logger.util_in(monolish_func);
99  rowN = M;
100  colN = N;
101  gpu_status = false;
102  matmul_dense = MATMUL;
103  rmatmul_dense = RMATMUL;
104  logger.util_out();
105 }
106 
108  const size_t M, const size_t N,
109  const std::function<Dense<double>(const Dense<double> &)> &MATMUL,
110  const std::function<Dense<double>(const Dense<double> &)> &RMATMUL);
112  const size_t M, const size_t N,
113  const std::function<Dense<float>(const Dense<float> &)> &MATMUL,
114  const std::function<Dense<float>(const Dense<float> &)> &RMATMUL);
115 
116 // copy constructor
117 template <typename T>
118 LinearOperator<T>::LinearOperator(const LinearOperator<T> &linearoperator) {
119  Logger &logger = Logger::get_instance();
120  logger.util_in(monolish_func);
121 
122  rowN = linearoperator.get_row();
123  colN = linearoperator.get_col();
124 
125  gpu_status = linearoperator.get_device_mem_stat();
126 
127  matvec = linearoperator.get_matvec();
128  rmatvec = linearoperator.get_rmatvec();
129 }
130 
132  const LinearOperator<double> &linearoperator);
134  const LinearOperator<float> &linearoperator);
135 
136 template <typename T>
138  const std::function<vector<T>(const vector<T> &)> &MATVEC) {
139  matvec = MATVEC;
140 }
141 
143  const std::function<vector<double>(const vector<double> &)> &MATVEC);
145  const std::function<vector<float>(const vector<float> &)> &MATVEC);
146 
147 template <typename T>
149  const std::function<vector<T>(const vector<T> &)> &RMATVEC) {
150  rmatvec = RMATVEC;
151 }
152 
154  const std::function<vector<double>(const vector<double> &)> &RMATVEC);
156  const std::function<vector<float>(const vector<float> &)> &RMATVEC);
157 
158 template <typename T>
160  const std::function<Dense<T>(const Dense<T> &)> &MATMUL) {
161  matmul_dense = MATMUL;
162 }
163 
165  const std::function<Dense<double>(const Dense<double> &)> &MATMUL);
167  const std::function<Dense<float>(const Dense<float> &)> &MATMUL);
168 
169 template <typename T>
171  const std::function<Dense<T>(const Dense<T> &)> &RMATMUL) {
172  rmatmul_dense = RMATMUL;
173 }
174 
176  const std::function<Dense<double>(const Dense<double> &)> &RMATMUL);
178  const std::function<Dense<float>(const Dense<float> &)> &RMATMUL);
179 
180 } // namespace matrix
181 } // namespace monolish
monolish::matrix::LinearOperator::set_rmatvec
void set_rmatvec(const std::function< vector< Float >(const vector< Float > &)> &RMATVEC)
set multiplication function of (Hermitian) transposed matrix and vector
Definition: linearoperator_constructor.cpp:148
monolish::blas::rmatvec
void rmatvec(const matrix::LinearOperator< double > &A, const vector< double > &x, vector< double > &y)
matrix (LinearOperator) and vector multiplication: y = Ax
Definition: matvec_blas.cpp:250
monolish_func
#define monolish_func
Definition: monolish_logger.hpp:9
monolish::Logger
logger class (singleton, for developper class)
Definition: monolish_logger.hpp:19
monolish::matrix::Dense
Dense format Matrix.
Definition: monolish_coo.hpp:35
monolish::matrix::LinearOperator::LinearOperator
LinearOperator()
Definition: monolish_linearoperator.hpp:77
monolish::Logger::util_out
void util_out()
Definition: logger_utils.cpp:123
monolish::Logger::util_in
void util_in(const std::string func_name)
Definition: logger_utils.cpp:113
monolish
Definition: monolish_matrix_blas.hpp:10
monolish::blas::matvec
void matvec(const matrix::Dense< double > &A, const vector< double > &x, vector< double > &y)
Dense matrix and vector multiplication: y = Ax.
Definition: matvec_blas.cpp:10
monolish::matrix::LinearOperator::set_matmul_dense
void set_matmul_dense(const std::function< matrix::Dense< Float >(const matrix::Dense< Float > &)> &MATMUL)
set multiplication function of matrix and matrix dense
Definition: linearoperator_constructor.cpp:159
monolish::vector
vector class
Definition: monolish_coo.hpp:32
monolish::matrix::LinearOperator::set_matvec
void set_matvec(const std::function< vector< Float >(const vector< Float > &)> &MATVEC)
set multiplication function of matrix and vector
Definition: linearoperator_constructor.cpp:137
monolish::Logger::get_instance
static Logger & get_instance()
Definition: monolish_logger.hpp:42
monolish::matrix::LinearOperator::set_rmatmul_dense
void set_rmatmul_dense(const std::function< matrix::Dense< Float >(const matrix::Dense< Float > &)> &RMATMUL)
set multiplication function of (Hermitian) transposed matrix and matrix dense
Definition: linearoperator_constructor.cpp:170