From 1c056e1aa1063f3c58677f0a1fa9aa49ed9be6cc Mon Sep 17 00:00:00 2001 From: Andreas Gattringer <andreas.gattringer@univie.ac.at> Date: Thu, 13 Jul 2023 15:18:59 +0200 Subject: [PATCH] vital rates: make setting vital rate minimum value more consistent --- src/cats/configuration/load_vital_rates.c | 4 +++- src/cats/vital_rates/setup_rates.c | 19 +++++++++++++++++++ src/cats/vital_rates/setup_rates.h | 4 +++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/cats/configuration/load_vital_rates.c b/src/cats/configuration/load_vital_rates.c index 228326b..d2d4d2b 100644 --- a/src/cats/configuration/load_vital_rates.c +++ b/src/cats/configuration/load_vital_rates.c @@ -251,7 +251,9 @@ void conf_load_vital_rate_extended(struct cats_vital_rate *vr, struct cats_confi conf_load_vital_rates_density(vr, conf, ini, species_section, param); char *vital_rate_minimum = compound_string(vr_name, "minimum", sep); - load_conf_value(false, ini, species_section, vital_rate_minimum, &vr->min_rate); + cats_dt_rates min_rate; + load_conf_value(false, ini, species_section, vital_rate_minimum, &min_rate); + set_vital_rate_minimum(vr, min_rate); free(vital_rate_minimum); switch (param->parametrization) { diff --git a/src/cats/vital_rates/setup_rates.c b/src/cats/vital_rates/setup_rates.c index 4e07efe..b826e25 100644 --- a/src/cats/vital_rates/setup_rates.c +++ b/src/cats/vital_rates/setup_rates.c @@ -109,6 +109,25 @@ void set_vital_rate_maximum(struct cats_vital_rate *vital, cats_dt_rates max_rat } +void set_vital_rate_minimum(struct cats_vital_rate *vital, cats_dt_rates minimum) +{ + assert(vital != NULL); + if (minimum < 0) { + log_message(LOG_ERROR, "%s (%s): vital rate minimum %Lf must not be negative ", __func__, + vital->name, minimum); + exit_cats(EXIT_FAILURE); + } + + if (minimum > vital->max_rate) { + log_message(LOG_ERROR, "%s (%s): vital rate minimum %Lf must be less or equal to maximum %Lf " + , __func__, vital->name, minimum, vital->max_rate); + exit_cats(EXIT_FAILURE); + } + + vital->min_rate = minimum; + +} + void set_vital_density(struct cats_vital_rate *vital, enum cats_density_dependence density) { assert(vital != NULL); diff --git a/src/cats/vital_rates/setup_rates.h b/src/cats/vital_rates/setup_rates.h index f700b88..3ea94f6 100644 --- a/src/cats/vital_rates/setup_rates.h +++ b/src/cats/vital_rates/setup_rates.h @@ -45,7 +45,7 @@ void set_vital_density(struct cats_vital_rate *vital, enum cats_density_dependen void load_vital_rates(struct cats_configuration *conf); -void set_vital_cutoff(struct cats_vital_rate *vital, const cats_dt_rates value, +void set_vital_cutoff(struct cats_vital_rate *vital, cats_dt_rates value, const struct cats_species_param *param); enum cats_rate_function_type get_function_type(const struct cats_configuration *conf, const char *short_name); @@ -60,4 +60,6 @@ void set_vital_rate_link_hybrid_function(struct cats_vital_rate *vr, struct cats void set_vital_density(struct cats_vital_rate *vital, enum cats_density_dependence density); +void set_vital_rate_minimum(struct cats_vital_rate *vital, cats_dt_rates minimum); + #endif //CATS_SETUP_RATES_H -- GitLab