12 virtual double&
operator()(
size_t i,
size_t j) = 0;
13 virtual double operator()(
size_t i,
size_t j)
const = 0;
14 virtual double dot(
const std::vector<double> &x,
size_t r)
const = 0;
27 for (
size_t i=0;i<
nu;i++)
28 a[i] =
new double[nu];
31 for (
size_t i=0;i<
nu;i++)
32 for (
size_t j=0;j<
nu;j++)
37 for (
size_t i=0;i<
nu;i++)
44 double operator()(
size_t i,
size_t j)
const {
return a[i][j];}
47 double dot(
const std::vector<double> &x,
size_t r)
const {
49 for (
size_t c=0;c<
nu;c++)
70 for (
size_t i=0;i<
nu;i++)
71 a[i] =
new double[max_vals];
75 for (
size_t i=0;i<
nu;i++)
76 c[i] =
new int[max_vals];
79 for (
size_t i=0;i<
nu;i++)
80 for (
size_t j=0;j<max_vals;j++) {
87 for (
size_t i=0;i<
nu;i++)
91 for (
size_t i=0;i<
nu;i++)
100 for (
int v=0;v<max_vals;v++) {
102 if (c[i][v]<0) c[i][v] = j;
105 if (c[i][v]==j)
return a[i][v];
109 std::runtime_error(
"Sparse matrix too small!");
115 for (
int v=0;v<max_vals;v++) {
117 if (c[i][v]<0) c[i][v] = j;
120 if (c[i][v]==j)
return a[i][v];
124 std::runtime_error(
"Sparse matrix too small!");
128 double dot(
const std::vector<double> &x,
size_t r)
const {
131 for (
size_t v=0;v<max_vals && c[r][v]>=0;v++)
132 sum+=a[r][v]*x[c[r][v]];
140 static constexpr
size_t max_vals = 7;
virtual double dot(const std::vector< double > &x, size_t r) const =0
virtual double & operator()(size_t i, size_t j)=0
int ** c
columns in full matrix, [nu][7], -1 if not set
Definition: Mat.h:142
double dot(const std::vector< double > &x, size_t r) const
Definition: Mat.h:128
double & operator()(size_t i, size_t j)
Definition: Mat.h:43
~DenseMat()
Definition: Mat.h:36
DenseMat(size_t nu)
Definition: Mat.h:24
Mat(size_t nu)
Definition: Mat.h:11
size_t memsize()
matrix size in bytes
Definition: Mat.h:137
size_t memsize()
matrix size in bytes
Definition: Mat.h:55
double operator()(size_t i, size_t j) const
Definition: Mat.h:44
double ** a
Definition: Mat.h:58
double dot(const std::vector< double > &x, size_t r) const
Definition: Mat.h:47
double operator()(size_t i, size_t j) const
Definition: Mat.h:113
double & operator()(size_t i, size_t j)
Definition: Mat.h:98
~SparseMat()
Definition: Mat.h:86
matrix base class, specifies the interface to be implemented
Definition: Mat.h:9
SparseMat(size_t nu)
Definition: Mat.h:66
const size_t nu
number of rows (unknowns)
Definition: Mat.h:16
double ** a
coefficients, [nu][7]
Definition: Mat.h:141
virtual size_t memsize()=0
matrix size in bytes