From b0c7f35c1197792c8539696650d4474bfb858c0b Mon Sep 17 00:00:00 2001
From: Philipp Suffa <philipp.suffa@fau.de>
Date: Tue, 9 May 2023 15:46:42 +0200
Subject: [PATCH] [Fix] Initialise FlagField with one flag exclusively

---
 .../BoundarySetterFlagFieldSpecialization.h    | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/geometry/initializer/BoundarySetterFlagFieldSpecialization.h b/src/geometry/initializer/BoundarySetterFlagFieldSpecialization.h
index 8e3ee37ee..e154678f0 100644
--- a/src/geometry/initializer/BoundarySetterFlagFieldSpecialization.h
+++ b/src/geometry/initializer/BoundarySetterFlagFieldSpecialization.h
@@ -136,22 +136,30 @@ namespace initializer {
    template<typename Flag_T>
    void BoundarySetter<FlagField<Flag_T>>::set( cell_idx_t x, cell_idx_t y, cell_idx_t z )
    {
-      flagField_->addFlag( x, y, z, flag_ );
+      //Check if no flag is set yet to avoid multiple flags per cell on initialization
+      if(flagField_->get(x,y,z) == Flag_T(0))
+         flagField_->addFlag( x, y, z, flag_ );
    }
 
    template<typename Flag_T>
    void BoundarySetter<FlagField<Flag_T>>::set( const CellInterval & ci )
    {
-      for( auto it = flagField_->beginSliceXYZ(ci); it != flagField_->end(); ++it )
-         field::addFlag(it, flag_);
+      for( auto it = flagField_->beginSliceXYZ(ci); it != flagField_->end(); ++it ) {
+         //Check if no flag is set yet to avoid multiple flags per cell on initialization
+         if(*it == Flag_T(0))
+            field::addFlag(it, flag_);
+      }
    }
 
    template<typename Flag_T>
    template< typename CellIterator >
    void BoundarySetter<FlagField<Flag_T> >::set( const CellIterator & begin, const CellIterator & end )
    {
-      for(auto it = begin; it != end; ++it)
-         flagField_->addFlag(it->x(), it->y(), it->z(), flag_);
+      for(auto it = begin; it != end; ++it) {
+         //Check if no flag is set yet to avoid multiple flags per cell on initialization
+         if(flagField_->get(it->x(),it->y(),it->z()) == Flag_T(0))
+            flagField_->addFlag(it->x(), it->y(), it->z(), flag_);
+      }
    }
 
 } // namespace initializer
-- 
GitLab