From e16e992b9ab233c12d3923c74ce301cd6b27efef Mon Sep 17 00:00:00 2001
From: Sebastian Eibl <sebastian.eibl@fau.de>
Date: Wed, 20 Mar 2019 15:18:22 +0100
Subject: [PATCH] added work around to catch division by zero

---
 src/blockforest/loadbalancing/DynamicDiffusive.h | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/blockforest/loadbalancing/DynamicDiffusive.h b/src/blockforest/loadbalancing/DynamicDiffusive.h
index d9037070b..68d77e6a3 100644
--- a/src/blockforest/loadbalancing/DynamicDiffusive.h
+++ b/src/blockforest/loadbalancing/DynamicDiffusive.h
@@ -355,8 +355,13 @@ bool DynamicDiffusionBalance< PhantomData_T >::operator()( std::vector< std::pai
             if( processLevel[l] )
             {
                const double correctedOutflow = std::max( processWeight[l] - processWeightLimit[l] - inflow[l], 0.0 ); // identical to below ...
-               //const double correctedOutflow = std::max( outflow[l] - processWeightLimit[l] + diffusionAvgWeight, 0.0 );            
+               //const double correctedOutflow = std::max( outflow[l] - processWeightLimit[l] + diffusionAvgWeight, 0.0 );
                flowScaleFactor[l] = correctedOutflow / outflow[l];
+               if (std::isnan(flowScaleFactor[l]))
+               {
+                  flowScaleFactor[l] = real_t(1);
+                  continue;
+               }
                outflow[l] = correctedOutflow;
             }
          }
@@ -619,6 +624,11 @@ bool DynamicDiffusionBalance< PhantomData_T >::operator()( std::vector< std::pai
             {
                const double correctedInflow = std::max( processWeightLimit[l] - processWeight[l] + outflow[l], 0.0 );           
                flowScaleFactor[l] = correctedInflow / inflow[l];
+               if (std::isnan(flowScaleFactor[l]))
+               {
+                  flowScaleFactor[l] = real_t(1);
+                  continue;
+               }
                inflow[l] = correctedInflow;
             }
          }
-- 
GitLab