1 #ifndef KATOPTRON_TMATRIX_H
2 #define KATOPTRON_TMATRIX_H
4 #include "Stokhos_Tpetra_MP_Vector.hpp"
6 template <
class T,
int rows>
9 template <
class T,
int rows,
int cols>
15 for (
auto i = 0; i < rows; ++i)
16 for (
auto j = 0; j < cols; ++j)
17 data[i * cols + j] = (T)0;
31 for (
auto i = 0; i < rows; ++i)
32 for (
auto j = 0; j < cols; ++j)
33 data[i * cols + j] = (T)0;
44 template <
class T,
int rows,
int cols>
49 for (
auto i = 0; i < rows; ++i)
50 for (
auto j = 0; j < cols; ++j)
51 results(i) += data[i * cols + j] * rhs(j);
55 template <
class T,
int rows,
int cols>
59 for (
auto i = 0; i < rows; ++i)
60 for (
auto j = 0; j < cols; ++j)
61 results(i, j) = data[i * cols + j] + rhs(i, j);
65 template <
class T,
int rows,
int cols>
68 for (
auto i = 0; i < rows; ++i)
69 for (
auto j = 0; j < cols; ++j)
70 data[i * cols + j] += rhs(i, j);
73 template <
class T,
int rows,
int cols>
77 for (
auto i = 0; i < rows; ++i)
78 for (
auto j = 0; j < rows; ++j)
79 for (
auto k = 0; k < rows; ++k)
80 results(i, j) += data[i * cols + k] * rhs(k, j);
84 template <
class T,
int rows,
int cols>
87 return data[row * cols + col];
90 template <
class T,
int rows,
int cols>
93 return data[0 * cols + 0] * (data[1 * cols + 1] * data[2 * cols + 2] - data[1 * cols + 2] * data[2 * cols + 1]) - data[0 * cols + 1] * (data[1 * cols + 0] * data[2 * cols + 2] - data[1 * cols + 2] * data[2 * cols + 0]) + data[0 * cols + 2] * (data[1 * cols + 0] * data[2 * cols + 1] - data[1 * cols + 1] * data[2 * cols + 0]);
96 template <
class T,
int rows,
int cols>
101 results(0, 0) = (1. / det) * (data[1 * cols + 1] * data[2 * cols + 2] - data[1 * cols + 2] * data[2 * cols + 1]);
102 results(0, 1) = (1. / det) * (data[0 * cols + 2] * data[2 * cols + 1] - data[2 * cols + 2] * data[0 * cols + 1]);
103 results(0, 2) = (1. / det) * (data[0 * cols + 1] * data[1 * cols + 2] - data[1 * cols + 1] * data[0 * cols + 2]);
105 results(1, 0) = (1. / det) * (data[1 * cols + 2] * data[2 * cols + 0] - data[2 * cols + 2] * data[1 * cols + 0]);
106 results(1, 1) = (1. / det) * (data[0 * cols + 0] * data[2 * cols + 2] - data[2 * cols + 0] * data[0 * cols + 2]);
107 results(1, 2) = (1. / det) * (data[0 * cols + 2] * data[1 * cols + 0] - data[1 * cols + 2] * data[0 * cols + 0]);
109 results(2, 0) = (1. / det) * (data[1 * cols + 0] * data[2 * cols + 1] - data[2 * cols + 0] * data[1 * cols + 1]);
110 results(2, 1) = (1. / det) * (data[0 * cols + 1] * data[2 * cols + 0] - data[2 * cols + 1] * data[0 * cols + 0]);
111 results(2, 2) = (1. / det) * (data[0 * cols + 0] * data[1 * cols + 1] - data[1 * cols + 0] * data[0 * cols + 1]);
115 template <
class T,
int rows,
int cols>
119 for (
auto i = 0; i < rows; ++i)
120 for (
auto j = 0; j < cols; ++j)
121 results(i) += data[i * cols + j] * rhs(j);
125 template <
class T,
int rows,
int cols>
128 for (
auto i = 0; i < rows; ++i)
130 for (
auto j = 0; j < cols; ++j)
131 std::cout << data[i * cols + j] <<
" ";
132 std::cout << std::endl;
136 template <
class T,
int rows>
142 for (
auto i = 0; i < rows; ++i)
155 for (
auto i = 0; i < rows; ++i)
165 template <
class T,
int rows>
171 template <
class T,
int rows>
175 for (
auto i = 0; i < rows; ++i)
176 results(i) = data[i] + rhs(i);
180 template <
class T,
int rows>
183 for (
auto i = 0; i < rows; ++i)
187 template <
class T,
int rows>
191 for (
auto i = 0; i < rows; ++i)
192 result += data[i] * rhs(i);
196 template <
class T,
int rows>
200 typename Sacado::Promote<T, U>::type result = 0;
201 for (
auto i = 0; i < rows; ++i)
202 result += data[i] * rhs(i);
206 template <
class T,
int rows>
210 for (
auto i = 0; i < rows; ++i)
211 for (
auto j = 0; j < rows; ++j)
212 results(i, j) = data[i] * rhs(j);
216 template <
class T,
int rows>
219 for (
auto i = 0; i < rows; ++i)
220 std::cout << data[i] << std::endl;
223 #endif //KATOPTRON_TMATRIX_H