From 39d26a9cf2bf1d18377ada92c0c04b2b86435398 Mon Sep 17 00:00:00 2001
From: Andreas Gattringer <andreas.gattringer@univie.ac.at>
Date: Wed, 11 Jan 2023 17:23:12 +0100
Subject: [PATCH] sigmoid vital rate: ensure density dependence correctness for
 edge cases

---
 src/cats/vital_rates/hybrid_functions.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/cats/vital_rates/hybrid_functions.c b/src/cats/vital_rates/hybrid_functions.c
index ceb1968..10615bf 100644
--- a/src/cats/vital_rates/hybrid_functions.c
+++ b/src/cats/vital_rates/hybrid_functions.c
@@ -143,7 +143,7 @@ sigmoid(const struct cats_vital_rate *rate_info,
                 K = K - K * rate_info->density_ts;
                 assert(N >= 0);
                 assert(K >= 0);
-
+                cats_dt_rates old_rate = rate;
                 switch (rate_info->density) {
 
                         case DENSITY_DEP_NEGATIVE:
@@ -152,10 +152,12 @@ sigmoid(const struct cats_vital_rate *rate_info,
                                 if (K == 0) return 0.0;
 
                                 rate = rate * density + (N / K) * rate_at_OT; // was: max_rate * scale;
+                                if (rate > old_rate) rate = old_rate;
                                 break;
                         case DENSITY_DEP_POSITIVE:
                                 if (K == 0) return 0.0;
                                 rate = rate * density + (1.0 - (N / K)) * rate_at_OT; // was: max_rate * scale;
+                                if (rate < old_rate) rate = old_rate;
                                 break;
                         case NO_DENSITY_DEP:
                                 break;
-- 
GitLab