From 7ceecca05bb5985fa0e55815f27642e0fe5d02bc Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Tue, 13 May 2025 21:22:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B2=D0=BE=D1=81=D0=BF=D1=80=D0=B8=D1=8F=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=BE=D0=B2=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Mesh.hpp | 9 ++++--- include/Object.hpp | 1 - src/Mesh.cpp | 62 ++++++++++++++++++++++------------------------ src/Solver.cpp | 12 +++++---- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/include/Mesh.hpp b/include/Mesh.hpp index 4a9500c..0a8bed2 100644 --- a/include/Mesh.hpp +++ b/include/Mesh.hpp @@ -18,11 +18,12 @@ class Mesh{ public: Mesh(Object&, double); - void ShowLinks(); - std::vector>& Nodes(); - std::vector& LineX(); - std::vector& LineY(); ~Mesh(); + //void ShowLinks(); + + std::vector>& Nodes() { return _mesh; } + std::vector& LineX() { return _hlines; } + std::vector& LineY() { return _vlines; } }; #endif diff --git a/include/Object.hpp b/include/Object.hpp index 61151e4..9381987 100644 --- a/include/Object.hpp +++ b/include/Object.hpp @@ -22,7 +22,6 @@ public: std::pair Filly(double, double); std::pair Fillx(double, double); - //std::vector Get_IDs(); Form* Who(double, double); }; diff --git a/src/Mesh.cpp b/src/Mesh.cpp index a030436..884364f 100644 --- a/src/Mesh.cpp +++ b/src/Mesh.cpp @@ -53,35 +53,6 @@ void Mesh::Adapt() { } } -void Mesh::ShowLinks() { - for (auto line : _mesh) { - for (auto node : line) { - if (node->d()) - std::cout << "| "; - } - std::cout << '\n'; - for (auto node : line) { - if (node->l()) { - std::cout << '-'; - } - std::cout << 'N'; - if (node->r()) { - std::cout << '-'; - } - else { - std::cout << '\n'; - } - } - for (auto node : line) { - if (node->u()) - std::cout << "|"; - std::cout << " "; - - } - std::cout << '\n'; - } -} - void Mesh::Delnode(int i, int j) { Node* node = _mesh[i][j]; double bndX1 = _obj.Fillx(node->X(), node->Y()).first; @@ -152,14 +123,39 @@ void Mesh::Delnode(int i, int j) { _mesh[i].erase(_mesh[i].begin() + j); delete node; } -std::vector>& Mesh::Nodes() { return _mesh; } -std::vector& Mesh::LineX() { return _hlines; } -std::vector& Mesh::LineY() { return _vlines; } + Mesh::~Mesh() { for (auto line : _mesh) for (auto node : line) delete node; } - +//void Mesh::ShowLinks() { + // for (auto line : _mesh) { + // for (auto node : line) { + // if (node->d()) + // std::cout << "| "; + // } + // std::cout << '\n'; + // for (auto node : line) { + // if (node->l()) { + // std::cout << '-'; + // } + // std::cout << 'N'; + // if (node->r()) { + // std::cout << '-'; + // } + // else { + // std::cout << '\n'; + // } + // } + // for (auto node : line) { + // if (node->u()) + // std::cout << "|"; + // std::cout << " "; + // + // } + // std::cout << '\n'; + // } + //} diff --git a/src/Solver.cpp b/src/Solver.cpp index 6c16709..145d41f 100644 --- a/src/Solver.cpp +++ b/src/Solver.cpp @@ -117,11 +117,13 @@ std::vector Solver::ThomasMethod(std::vector>& A, st beta[0] = b[0] / A[0][0]; for (int i = 1; i < row; i++) { - double a = A[i][0]; - double b1 = A[i][1]; - double c = A[i][2]; - alpha[i] = -c / (a * alpha[i - 1] + b1); - beta[i] = (b[i] - a * beta[i - 1]) / (a * alpha[i - 1] + b1); + double a_i = A[i][0]; + double b_i = A[i][1]; + double c_i = A[i][2]; + double y_i = b_i + a_i * alpha[i - 1]; + + alpha[i] = -c_i / y_i; + beta[i] = (b[i] - a_i * beta[i - 1]) / y_i; } std::vector result(b.size());