diff --git a/src/similarity_module.f90 b/src/similarity_module.f90 index 67481ddb0458329e80274d259bd9a977672f8720..a6b117639a9f42125d4d6ef939ae11f290fa24fb 100644 --- a/src/similarity_module.f90 +++ b/src/similarity_module.f90 @@ -86,7 +86,7 @@ contains real(c_double) :: sum_obs, sum_sim, sum_obs2, sum_sim2, sum_obs_sim real(c_double) :: mean_obs, mean_sim, std_obs, std_sim, r, beta, gamma, diff real(c_double) :: nan_val, eps - eps = epsilon(1.0_c_double) + eps = 1.0e-12_c_double count = 0 sum_obs = 0.0_c_double @@ -144,6 +144,7 @@ contains ! Final KGE computation diff = (r - 1.0_c_double)**2 + (beta - 1.0_c_double)**2 + (gamma - 1.0_c_double)**2 kge_val = 1.0_c_double - sqrt(diff) + if (abs(kge_val - 1.0_c_double) < eps) kge_val = 1.0_c_double end function kge function rmse(sim, obs, n) result(res) @@ -152,8 +153,10 @@ contains real(c_double) :: res integer :: i, count real(c_double) :: sum_sq, diff - real(c_double) :: nan_val + real(c_double) :: nan_val, eps nan_val = ieee_value(0.0_c_double, ieee_quiet_nan) + eps = 1.0e-12_c_double + count = 0 sum_sq = 0.0_c_double do i = 1, n @@ -168,6 +171,7 @@ contains return end if res = sqrt(sum_sq / count) + if (res < eps) res = 0.0_c_double end function rmse @@ -177,7 +181,7 @@ contains real(c_double) :: rmse_val, res real(c_double) :: inf_val, eps inf_val = ieee_value(0.0_c_double, ieee_positive_inf) - eps = epsilon(1.0_c_double) + eps = 1.0e-12_c_double rmse_val = rmse(obs, sim, n) if (rmse_val < eps) then @@ -194,7 +198,7 @@ contains real(c_double) :: kge_val, res real(c_double) :: inf_val, eps inf_val = ieee_value(0.0_c_double, ieee_positive_inf) - eps = epsilon(1.0_c_double) + eps = 1.0e-12_c_double kge_val = kge(obs, sim, n) if (abs(kge_val - 1.0_c_double) < eps) then