1 #ifndef flexFullMatrix_H 2 #define flexFullMatrix_H 4 #include "flexLinearOperator.h" 14 typedef thrust::device_vector<T> Tdata;
16 typedef std::vector<T> Tdata;
38 A->valueList = valueList;
43 void times(
bool transposed,
const Tdata &input, Tdata &output)
48 void timesPlus(
bool transposed,
const Tdata &input, Tdata &output)
52 doTimesCPU(transposed, input, output,MINUS);
56 doTimesCPU(transposed, input, output,PLUS);
60 void timesMinus(
bool transposed,
const Tdata &input, Tdata &output)
64 doTimesCPU(transposed, input, output,PLUS);
68 doTimesCPU(transposed, input, output,MINUS);
73 void insertElement(
int i,
int j, T val)
75 this->valueList[index2DtoLinear(i,j)] = val;
78 void insertElement(
int i, T val)
80 this->valueList[i] = val;
83 int index2DtoLinear(
int i,
int j)
92 return *std::max_element(rowSum.begin(), rowSum.end());
100 std::vector<T> result(this->
getNumCols(), (T)0);
106 result[j] += std::abs(valueList[index2DtoLinear(i,j)]);
119 std::vector<T> result(this->
getNumRows(),(T)0);
125 result[i] += std::abs(valueList[index2DtoLinear(i, j)]);
146 printf(
"(%d,%d,%f)|", i, j, valueList[index2DtoLinear(i, j)]);
165 thrust::device_vector<T> result(this->
getNumRows(), (T)1);
172 void doTimesCPU(
bool transposed,
const Tdata &input, Tdata &output,
const mySign s)
176 #pragma omp parallel for 179 T tmp =
static_cast<T
>(0);
183 tmp += input[i] * valueList[index2DtoLinear(i, j)];
206 #pragma omp parallel for 213 output[i] += tmp * valueList[index2DtoLinear(i, j)];
218 output[i] -= tmp * valueList[index2DtoLinear(i, j)];
std::vector< T > getAbsRowSum(bool transposed)
returns a vector of sum of absolute values per row used for preconditioning
Definition: flexFullMatrix.h:96
represents a full (non-CUDA) matrix
Definition: flexFullMatrix.h:10
int getNumRows() const
returns number of rows of the linear operator
Definition: flexLinearOperator.h:57
void timesMinus(bool transposed, const Tdata &input, Tdata &output)
applies linear operator on vector and substracts its result from y
Definition: flexFullMatrix.h:60
flexFullMatrix(int aNumRows, int aNumCols, bool aMinus)
initializes a matrix
Definition: flexFullMatrix.h:32
flexFullMatrix()
initializes an empty matrix
Definition: flexFullMatrix.h:24
T getMaxRowSumAbs(bool transposed)
returns the maximum sum of absolute values per row used for preconditioning
Definition: flexFullMatrix.h:88
bool isMinus
determines if operator is negated
Definition: flexLinearOperator.h:25
void times(bool transposed, const Tdata &input, Tdata &output)
applies linear operator on vector
Definition: flexFullMatrix.h:43
int getNumCols() const
returns number of columns of the linear operator
Definition: flexLinearOperator.h:48
void printRow(int i)
prints requested row
Definition: flexFullMatrix.h:142
void timesPlus(bool transposed, const Tdata &input, Tdata &output)
applies linear operator on vector and adds its result to y
Definition: flexFullMatrix.h:48
void printMatrix()
prints the whole matrix
Definition: flexFullMatrix.h:153
flexFullMatrix< T > * copy()
copies the linear operator
Definition: flexFullMatrix.h:34
abstract base class for linear operators
Definition: flexLinearOperator.h:12
thrust::device_vector< T > getAbsRowSumCUDA(bool transposed)
same function as getAbsRowSum() but implemented in CUDA
Definition: flexFullMatrix.h:163