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{};
22 std::vector<std::reference_wrapper<T>> m_rhs_vector_elements{};
24 void getReferenceToElements();
42 getReferenceToElements();
53 std::pair<int, int>
mat_size{this->m_matrix_manager->lhs_matrix->size()};
58 m_lower_sub_diag_matrix_elements.emplace_back(
59 (*(this->m_matrix_manager->lhs_matrix))(
i + 1,
i));
60 m_upper_sub_diag_matrix_elements.emplace_back(
61 (*(this->m_matrix_manager->lhs_matrix))(
i,
i + 1));
63 m_diag_matrix_elements.emplace_back((*(this->m_matrix_manager->lhs_matrix))(
i,
i));
64 m_rhs_vector_elements.emplace_back(this->m_matrix_manager->rhs_vector[
i]);
76 std::valarray<T>&
solution{this->sim->m_field_map[
key]};
77 const int n = (this->m_matrix_manager->lhs_matrix->size()).
first;
80 work_arr_1[0] = m_upper_sub_diag_matrix_elements[0] / m_diag_matrix_elements[0];
81 work_arr_2[0] = m_rhs_vector_elements[0] / m_diag_matrix_elements[0];
83 for (
int i = 1;
i <
n - 1;
i++)
86 m_diag_matrix_elements[
i] - m_lower_sub_diag_matrix_elements[
i - 1] *
work_arr_1[
i - 1];
89 (m_rhs_vector_elements[
i] - m_lower_sub_diag_matrix_elements[
i - 1] *
work_arr_2[
i - 1])
98 m_diag_matrix_elements[
n - 1] - m_lower_sub_diag_matrix_elements[
n - 2] *
work_arr_1[
n - 2];
100 (m_rhs_vector_elements[
n - 1] - m_lower_sub_diag_matrix_elements[
n - 2] *
work_arr_2[
n - 2])
102 for (
int i =
n - 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
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:73
TridiagonalMatrixSolver(SimulationClassBase< T > *sim_ptr, std::shared_ptr< MatrixManager< T > > matrix_manager_ptr)
Constructor of the TDMA algorithm implementation.
Definition TridiagonalMatrixSolver.h:38