From afb9c2add8eb268e041c04716024763b165956b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=BB=D1=8C=D1=8F=20=D0=91=D0=BE=D0=B3=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Tue, 5 Oct 2021 13:47:10 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=BE=20MeshLoader.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeshLoader.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/MeshLoader.cpp b/MeshLoader.cpp index 5ffee90..15f08d5 100644 --- a/MeshLoader.cpp +++ b/MeshLoader.cpp @@ -14,7 +14,7 @@ vector MeshLoader::Get_FE_by_nodes(int id1, int id2, int id3) { vector ans; auto it = finiteelements.begin(); while (it != finiteelements.end()){ - it = find_if(it, finiteelements.end(), [id1, id2, id3](FiniteElement x) { + it = find_if(it, finiteelements.end(), [id1, id2, id3](FiniteElement x) { //!!! Копирование x на каждой итерации внутри find_if return ((find(x.nodes_id.begin(), x.nodes_id.end(), id1) != x.nodes_id.end()) && (find(x.nodes_id.begin(), x.nodes_id.end(), id2) != x.nodes_id.end()) && (find(x.nodes_id.begin(), x.nodes_id.end(), id3) != x.nodes_id.end()) @@ -31,7 +31,7 @@ vector MeshLoader::Get_FE_by_edge(int id1, int id2) { vector ans; auto it = finiteelements.begin(); while (it != finiteelements.end()) { - it = find_if(it, finiteelements.end(), [id1, id2](FiniteElement x) { + it = find_if(it, finiteelements.end(), [id1, id2](FiniteElement x) { //!!! Копирование x на каждой итерации внутри find_if return ((find(x.nodes_id.begin(), x.nodes_id.end(), id1) != x.nodes_id.end()) && (find(x.nodes_id.begin(), x.nodes_id.end(), id2) != x.nodes_id.end()) ); @@ -48,7 +48,7 @@ vector MeshLoader::Get_nodes_by_border(int id) { vector ans; auto it = bfes.begin(); while(it != bfes.end()){ - it = find_if(it, bfes.end(), [id](BoundaryFiniteElement x){ + it = find_if(it, bfes.end(), [id](BoundaryFiniteElement x){ //!!! Копирование x на каждой итерации внутри find_if return x.border_id = id;}); for (const auto& x : it->nodes_id) ans.push_back(nodes[x]); @@ -60,7 +60,7 @@ vectorMeshLoader::Get_FE_by_material(int id) { vector ans; auto it = finiteelements.begin(); while (it != finiteelements.end()) { - it = find_if(it, finiteelements.end(), [id](FiniteElement x) { + it = find_if(it, finiteelements.end(), [id](FiniteElement x) { //!!! Копирование x на каждой итерации внутри find_if return x.mat_id == id; }); if (it != finiteelements.end()) { ans.push_back(*it); @@ -73,7 +73,7 @@ vector MeshLoader::Get_BFE_by_border(int id) { vector ans; auto it = bfes.begin(); while (it != bfes.end()) { - it = find_if(it, bfes.end(), [id](BoundaryFiniteElement x) { + it = find_if(it, bfes.end(), [id](BoundaryFiniteElement x) { //!!! Копирование x на каждой итерации внутри find_if return x.border_id == id; }); if (it != bfes.end()) { ans.push_back(*it); @@ -83,7 +83,9 @@ vector MeshLoader::Get_BFE_by_border(int id) { return ans; } -void MeshLoader::Insertion(Node node, FiniteElement& fe) { +//!!! Узлы нужно вставлять сразу во все элементы +//!!! При этом учитывая, что на ребре данного элемента ранее мог быть создан узел при обходе соседнего элемента. +void MeshLoader::Insertion(Node node, FiniteElement& fe) { //!!! node по ссылке на константу int p = fe.nodes_id.size() / 2; auto it = fe.nodes_id.begin(); advance(it, p); @@ -105,6 +107,8 @@ void MeshLoader::Insertion(Node node, FiniteElement& fe) { return *it; }*/ map > MeshLoader::Get_neighbors(){ + + //!!! Лучше std::vector map > ans; for (const auto& itfe : finiteelements) { @@ -128,6 +132,7 @@ void MeshLoader::printFE(const FiniteElement &fe) { void MeshLoader::printBFE(const BoundaryFiniteElement &bfe) { std::cout << bfe; } + vector MeshLoader::getBoundaryNodesId() { std::vector res; for (const auto &it: bfes) { -- GitLab