refactor: extract math solver boundary
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
|
||||
#include "fesa/Core/Types.hpp"
|
||||
|
||||
#include <cstddef>
|
||||
#include <vector>
|
||||
|
||||
namespace fesa {
|
||||
|
||||
class DenseMatrix {
|
||||
public:
|
||||
DenseMatrix() = default;
|
||||
DenseMatrix(LocalIndex rows, LocalIndex cols) : rows_(rows), cols_(cols), values_(static_cast<std::size_t>(rows * cols), 0.0) {}
|
||||
|
||||
LocalIndex rows() const {
|
||||
return rows_;
|
||||
}
|
||||
|
||||
LocalIndex cols() const {
|
||||
return cols_;
|
||||
}
|
||||
|
||||
Real& operator()(LocalIndex row, LocalIndex col) {
|
||||
return values_[static_cast<std::size_t>(row * cols_ + col)];
|
||||
}
|
||||
|
||||
Real operator()(LocalIndex row, LocalIndex col) const {
|
||||
return values_[static_cast<std::size_t>(row * cols_ + col)];
|
||||
}
|
||||
|
||||
void add(LocalIndex row, LocalIndex col, Real value) {
|
||||
(*this)(row, col) += value;
|
||||
}
|
||||
|
||||
std::vector<Real> multiply(const std::vector<Real>& x) const {
|
||||
std::vector<Real> y(static_cast<std::size_t>(rows_), 0.0);
|
||||
for (LocalIndex i = 0; i < rows_; ++i) {
|
||||
Real sum = 0.0;
|
||||
for (LocalIndex j = 0; j < cols_; ++j) {
|
||||
sum += (*this)(i, j) * x[static_cast<std::size_t>(j)];
|
||||
}
|
||||
y[static_cast<std::size_t>(i)] = sum;
|
||||
}
|
||||
return y;
|
||||
}
|
||||
|
||||
private:
|
||||
LocalIndex rows_ = 0;
|
||||
LocalIndex cols_ = 0;
|
||||
std::vector<Real> values_;
|
||||
};
|
||||
|
||||
} // namespace fesa
|
||||
Reference in New Issue
Block a user