From 101f52394b078d8d1ac2b28fc8a34f4419e6aba0 Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-braunschweig.de>
Date: Wed, 13 Sep 2023 08:35:54 +0000
Subject: [PATCH] Update test for periodic cells in file writer

---
 src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp | 14 ++++++++------
 src/gpu/VirtualFluids_GPU/Output/FileWriter.h   |  3 ++-
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp b/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
index 9d4173b22..0efbda442 100644
--- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
@@ -117,11 +117,12 @@ void FileWriter::writeTimestep(std::shared_ptr<Parameter> para, unsigned int tim
     }
 }
 
-bool FileWriter::isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number2, unsigned int number1, unsigned int number3, unsigned int number5)
+bool FileWriter::isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number1, unsigned int number7)
 {
-    return (para->getParH(level)->coordinateX[number2] < para->getParH(level)->coordinateX[number1]) ||
-           (para->getParH(level)->coordinateY[number3] < para->getParH(level)->coordinateY[number1]) ||
-           (para->getParH(level)->coordinateZ[number5] < para->getParH(level)->coordinateZ[number1]);
+    real distance = sqrt(pow(para->getParH(level)->coordinateX[number7] - para->getParH(level)->coordinateX[number1], 2.) +
+                         pow(para->getParH(level)->coordinateY[number7] - para->getParH(level)->coordinateY[number1], 2.) +
+                         pow(para->getParH(level)->coordinateZ[number7] - para->getParH(level)->coordinateZ[number1], 2.));
+    return distance > 1.01 * sqrt(3 * para->getParH(level)->gridSpacing);
 }
 
 std::vector<std::string> FileWriter::getNodeDataNames(std::shared_ptr<Parameter> para)
@@ -328,8 +329,9 @@ std::vector<std::string> FileWriter::writeUnstructuredGridLT(std::shared_ptr<Par
                 dn7 = number7 - startPosition;
                 dn8 = number8 - startPosition;
                 //////////////////////////////////////////////////////////////////////////
-                if (isPeriodicCell(para, level, number2, number1, number3, number5))
+                if (isPeriodicCell(para, level, number1, number7)){
                     continue;
+                }
                 //////////////////////////////////////////////////////////////////////////
                 if (neighborsAreFluid)
                     cells.push_back(makeUbTuple(dn1, dn2, dn3, dn4, dn5, dn6, dn7, dn8));
@@ -436,7 +438,7 @@ std::vector<std::string> FileWriter::writeUnstructuredGridMedianLT(std::shared_p
                 dn7 = number7 - startPosition;
                 dn8 = number8 - startPosition;
                 //////////////////////////////////////////////////////////////////////////
-                if (isPeriodicCell(para, level, number2, number1, number3, number5))
+                if (isPeriodicCell(para, level, number1, number7))
                     continue;
                 //////////////////////////////////////////////////////////////////////////
                 if (neighborsFluid == true) cells.push_back(makeUbTuple(dn1, dn2, dn3, dn4, dn5, dn6, dn7, dn8));
diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h b/src/gpu/VirtualFluids_GPU/Output/FileWriter.h
index c30e33b17..0f0e68910 100644
--- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h
+++ b/src/gpu/VirtualFluids_GPU/Output/FileWriter.h
@@ -23,7 +23,8 @@ private:
     std::vector<std::string> writeUnstructuredGridLT(std::shared_ptr<Parameter> para, int level,
                                                          std::vector<std::string> &fname);
     std::vector<std::string> writeUnstructuredGridMedianLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
-    bool isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number2, unsigned int number1, unsigned int number3, unsigned int number5);
+
+    bool isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number1, unsigned int number7);
 
     std::string writeCollectionFile( std::shared_ptr<Parameter> para, unsigned int timestep );
 
-- 
GitLab