diff --git a/src/cats/configuration/load_vital_rates.c b/src/cats/configuration/load_vital_rates.c index 228326b55759940e11316bbab095808a8404c41f..d2d4d2b96d52deeff0c06b5b1b5c231d00bbf981 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 4e07efed07025f535f41fa37ff8a0bf27ba068e9..b826e2523f7fdca3b91ed392b0b3f6d494cc13ad 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 f700b88f70d11d30e091675888ada24763859c03..3ea94f64c815026bb9eb4874fd6ca8f2e971a71f 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