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