diff --git a/MeshLoader.cpp b/MeshLoader.cpp index 5ffee9042f8bd21b97551eaaf9965eff9a5e7518..15f08d57cb685a58a4f0df9334346f2f2953af01 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) {