From 03b70679ffa72d97f291fbd426781c4cfed4fe85 Mon Sep 17 00:00:00 2001
From: faridm69 <faridmohammadi69@gmail.com>
Date: Sat, 19 Sep 2020 12:50:38 +0200
Subject: [PATCH] [PostProcessing] fixed the Sobol indiex function.

---
 BayesValidRox/PostProcessing/PostProcessing.py | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/BayesValidRox/PostProcessing/PostProcessing.py b/BayesValidRox/PostProcessing/PostProcessing.py
index 35eec30ad..334c9ad7d 100644
--- a/BayesValidRox/PostProcessing/PostProcessing.py
+++ b/BayesValidRox/PostProcessing/PostProcessing.py
@@ -891,14 +891,20 @@ class PostProcessing:
                            subsubbasis = subbasis[:, Zq]
                            subidx = np.prod(subsubbasis, axis=1)>0
                            sum_ind = nzidx[idx[0][subidx]]
-                           sobol_cell_array[i_order][q, PointIdx] = np.sum(np.square(PCECoeffs[sum_ind])) /TotalVariance[PointIdx]
+                           if TotalVariance[PointIdx] == 0.0:
+                               sobol_cell_array[i_order][q, PointIdx] = 0.0
+                           else:
+                               sobol_cell_array[i_order][q, PointIdx] = np.sum(np.square(PCECoeffs[sum_ind])) /TotalVariance[PointIdx]
                     
                     # Compute the TOTAL Sobol indices.
                     for ParIdx in range(NofPa):
                         idx = nz_basis[:, ParIdx] > 0
                         sum_ind = nzidx[idx]
                         
-                        total_sobol_array[ParIdx,PointIdx] = np.sum(np.square(PCECoeffs[sum_ind])) / TotalVariance[PointIdx]
+                        if TotalVariance[PointIdx] == 0.0:
+                            total_sobol_array[ParIdx,PointIdx] = 0.0
+                        else:
+                            total_sobol_array[ParIdx,PointIdx] = np.sum(np.square(PCECoeffs[sum_ind])) / TotalVariance[PointIdx]
                 
                 # ----- if PCA selected: Compute covariance # -----
                 if PCEModel.DimRedMethod.lower() == 'pca':
@@ -923,7 +929,7 @@ class PostProcessing:
                                 cov_Z_p_q[ParIdx] = np.sum(PCECoeffs[sum_ind] * nextPCECoeffs[sum_ind])
                             except:
                                 cov_Z_p_q[ParIdx] = 0.0
-                                
+                            
             # Compute the sobol indices according to Ref. 2
             if PCEModel.DimRedMethod.lower() == 'pca':
                 ntMeasurements = PCEModel.ExpDesign.Y[Output].shape[1]
-- 
GitLab