Commit 84d805ce authored by de Lavenne Alban's avatar de Lavenne Alban
Browse files

fix: reduce precision in Fortran similarity functions to avoid issues with self similarity

No related merge requests found
Showing with 8 additions and 4 deletions
+8 -4
......@@ -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
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment