Files
FESADev/include/fesa/Math/DenseMatrix.hpp
T
2026-05-05 01:16:26 +09:00

54 lines
1.2 KiB
C++

#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