1#ifndef TRIDIAGONAL_MATRIX_SOLVER_H
2#define TRIDIAGONAL_MATRIX_SOLVER_H
19 std::vector<std::reference_wrapper<T>> m_lower_sub_diag_matrix_elements{};
20 std::vector<std::reference_wrapper<T>> m_diag_matrix_elements{};
21 std::vector<std::reference_wrapper<T>> m_upper_sub_diag_matrix_elements{};
24 T m_unused_element{0};
26 void getReferenceToElements();
46 getReferenceToElements();
57 std::pair<int, int>
mat_size{this->m_matrix_manager->lhs_matrix->size()};
64 m_lower_sub_diag_matrix_elements.emplace_back(
65 (*(this->m_matrix_manager->lhs_matrix))(
i + 1,
i));
69 m_lower_sub_diag_matrix_elements.emplace_back(m_unused_element);
74 m_upper_sub_diag_matrix_elements.emplace_back(
75 (*(this->m_matrix_manager->lhs_matrix))(
i,
i + 1));
79 m_upper_sub_diag_matrix_elements.emplace_back(m_unused_element);
82 m_diag_matrix_elements.emplace_back((*(this->m_matrix_manager->lhs_matrix))(
i,
i));
98 if (m_lower_sub_diag_matrix_elements.empty())
100 getReferenceToElements();
103 std::valarray<T>&
solution{this->sim->m_field_map[
key]};
104 const int dim = (this->m_matrix_manager->lhs_matrix->size()).
first;
107 work_arr_1[0] = m_upper_sub_diag_matrix_elements[0] / m_diag_matrix_elements[0];
108 work_arr_2[0] = this->m_matrix_manager->rhs_vector[0] / m_diag_matrix_elements[0];
110 for (
int i = 1;
i <
dim - 1;
i++)
113 m_diag_matrix_elements[
i] - m_lower_sub_diag_matrix_elements[
i - 1] *
work_arr_1[
i - 1];
116 - m_lower_sub_diag_matrix_elements[
i - 1] *
work_arr_2[
i - 1])
124 for (
int i =
dim - 2;
i > -1;
i--)
Error class to throw when a module chain has circular or missing dependencies. Inherits from std::exc...
Definition ChainManager.h:28
Definition GenericSolver.h:12
Error class to be thrown when a zero element is tried to be accessed as a reference.
Definition CsrMatrix.h:17
Implementation of the Tridiagonal Matrix Algorithm (TDMA) to solve 1D cases.
Definition TridiagonalMatrixSolver.h:17
void solveMatrixSystem(std::string_view field_name) override
Standard serialized implementation of the TDMA. Solves a tridiagonal linear system of equations in O(...
Definition TridiagonalMatrixSolver.h:95
TridiagonalMatrixSolver(SimulationClassBase< T > *sim_ptr, std::shared_ptr< MatrixManager< T > > matrix_manager_ptr)
Constructor of the TDMA algorithm implementation.
Definition TridiagonalMatrixSolver.h:42