diff --git a/BayesValidRox/PostProcessing/PostProcessing.py b/BayesValidRox/PostProcessing/PostProcessing.py index 35eec30adf3c72d504bfe5a3d8ba953de9941d49..334c9ad7d375cfec98da22b278609ea0a8d51add 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]