- changed how domains are registred
authorAnatoly Titov <wapukcobaka@gmail.com>
Thu, 13 Jan 2022 12:38:32 +0000 (15:38 +0300)
committerAnatoly Titov <wapukcobaka@gmail.com>
Thu, 13 Jan 2022 12:38:32 +0000 (15:38 +0300)
src/domaintype.cpp

index cf1d666162c3ac0457c7529c277951b5f549b2e5..a0bb05aa38ff01b94131cf38edf4265621fe2848 100644 (file)
@@ -51,7 +51,7 @@ void domainType::update(const std::vector< std::vector< RVec > > &frame, const i
         }
     }
     // заполняем матрицы данных для структурных доменов для всех текущих "окон"
-    for (auto &i : graph) {
+    /*for (auto &i : graph) {
         #pragma omp parallel for
         for (size_t j = 0; j < i.size(); ++j) {
             for (size_t k1 {0}; k1 < i[j].size(); ++k1) {
@@ -68,7 +68,37 @@ void domainType::update(const std::vector< std::vector< RVec > > &frame, const i
             }
         }
         #pragma omp barrier
+    }*/
+    std::vector< std::vector< std::vector< bool > > > ifGraph;
+    ifGraph.resize(graph.size());
+    for (size_t i {0}; i < ifGraph.size(); ++i) {
+        ifGraph[i].resize(0);
+        ifGraph[i].resize(graph[i].size());
+        for (size_t j {0}; j < ifGraph[i].size(); ++j) {
+            ifGraph[i][j].resize(0);
+            ifGraph[i][j].resize(graph[i][j].size(), true);
+        }
+    }
+
+    #pragma omp parallel for
+    for (size_t i = 0; i < graph.size(); ++i) {
+        for (size_t j {0}; j < frame.size(); ++j) {
+            for (size_t k1 {0}; k1 < frame[j].size(); ++k1) {
+                for (size_t k2 {k1}; k2 < frame[j].size(); ++k2) {
+                    if ((frame[j][k1] - frame[j][k2] - refTable[k1][k2]).norm() <= static_cast< float >(eps) && ifGraph[i][k1][k2]) {
+                        ifGraph[i][k1][k2] = false;
+                        if (k1 != k2) {
+                            ++i[j][k1][k2].num;
+                            ++i[j][k2][k1].num;
+                        } else {
+                            ++i[j][k1][k2].num;
+                        }
+                    }
+                }
+            }
+        }
     }
+    #pragma omp barrier
     // обновляем число эффективных обновлений
     if (graph.size() > 0) {
         ++updateCount;