diff --git a/src/cats/debug/debug_vital_rates.h b/src/cats/debug/debug_vital_rates.h index 442e19712f0d92a2fa61655e3ed38fd17f78df87..c5c1b4f05b1adf6964f106ae6897a23c68f943e4 100644 --- a/src/cats/debug/debug_vital_rates.h +++ b/src/cats/debug/debug_vital_rates.h @@ -27,6 +27,7 @@ #include "configuration/configuration.h" void debug_vital_rates(struct cats_configuration *conf, const struct program_options *command_line_options); - +struct cats_environment *minimal_suitability_environment(void); +struct cats_grid *minimal_grid(struct cats_configuration *conf, struct cats_environment *env); #endif //CATS_DEBUG_VITAL_RATES_H diff --git a/src/cats/grids/dimensions.c b/src/cats/grids/dimensions.c index 7445ed5b332af4edb6387723555a305ca7c579b0..b0d24ec853bcf363a7a72738e69c4c15cf61adba 100644 --- a/src/cats/grids/dimensions.c +++ b/src/cats/grids/dimensions.c @@ -1,4 +1,3 @@ -#include <assert.h> #include "dimensions.h" @@ -9,17 +8,6 @@ void copy_dimensions_from_to(const struct cats_dimension *from, struct cats_dime } -bool valid_coordinates(const struct cats_dimension *dim, cats_dt_coord row, cats_dt_coord col) -{ - assert(dim != NULL); - assert(row >= 0 && row < dim->rows); - assert(col >= 0 && col < dim->cols); - if (row < 0 || col < 0) return false; - if (row >= dim->rows || col >= dim->cols) return false; - return true; -} - - bool dimensions_match(const struct cats_dimension *dim1, const struct cats_dimension *dim2) { if (dim1->rows == dim2->rows && dim1->cols == dim2->cols) { diff --git a/src/cats/grids/dimensions.h b/src/cats/grids/dimensions.h index b25912c1dc6f3416dd070d0f4a5e018df15a054b..064b644742842db90b7f50316bbc01081370778d 100644 --- a/src/cats/grids/dimensions.h +++ b/src/cats/grids/dimensions.h @@ -2,6 +2,19 @@ #define CATS_DIMENSIONS_H #include "memory/arrays.h" +#include "assert.h" + + +static inline bool valid_coordinates(const struct cats_dimension *dim, cats_dt_coord row, cats_dt_coord col) +{ + assert(dim != NULL); + assert(row >= 0 && row < dim->rows); + assert(col >= 0 && col < dim->cols); + if (row < 0 || col < 0) return false; + if (row >= dim->rows || col >= dim->cols) return false; + return true; +} + void copy_dimensions_from_to(const struct cats_dimension *from, struct cats_dimension *to); diff --git a/src/cats/inline.h b/src/cats/inline.h index 2f3f406deb97c0f9e1ceaea9448ec70ef8392333..5c17dc4cb8e3ba439395e5c6baabec92972e5f3e 100644 --- a/src/cats/inline.h +++ b/src/cats/inline.h @@ -52,6 +52,15 @@ static inline bool valid_dispersed_seed_grid(const struct cats_grid *grid, cats_ return true; } +static inline bool valid_produced_seed_grid(const struct cats_grid *grid, cats_dt_coord row) +{ + if (grid == NULL) return false; + if (grid->seeds_produced == NULL) return false; + if (grid->seeds_produced[row] == NULL) return false; // validator [valid_produced_seed_grid] + return true; +} + + static inline cats_dt_environment get_suitability_from_env(const struct cats_environment *set, cats_dt_coord row, cats_dt_coord col) @@ -70,6 +79,14 @@ get_dispersed_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coo return grid->dispersed_seeds[row][col]; // get [get_dispersed_seeds] } +static inline cats_dt_seeds +get_produced_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col) +{ + assert(valid_coordinates(&grid->dimension, row, col)); + assert(valid_produced_seed_grid(grid, row)); + return grid->seeds_produced[row][col]; // get [get_produced_seeds] +} + static inline void set_suitability(struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, cats_dt_environment value) diff --git a/src/cats/inline_overlays.h b/src/cats/inline_overlays.h index 5f7316745f96046be1532d6f322988b4bae7dc42..1de2612958c8c58229d7b91d7716316fa42b0b79 100644 --- a/src/cats/inline_overlays.h +++ b/src/cats/inline_overlays.h @@ -64,5 +64,17 @@ cell_excluded_by_overlay(const struct cats_configuration *config, cats_dt_coord exit_cats(EXIT_FAILURE); } +static inline double get_overlay_habitat_cc_value(const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col) +{ + assert(conf->overlays.overlay[OL_HABITAT_TYPE_CC].enabled); + return conf->overlays.habitat_cc->data[row][col]; // getter [get_overlay_habitat_cc_value] +} + +static inline double get_overlay_resource_value(const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col) +{ + assert(conf->overlays.overlay[OL_RESOURCE].enabled); + return conf->overlays.resources->data[row][col]; // getter [get_overlay_resource_value] +} + #endif //CATS_INLINE_OVERLAYS_H diff --git a/src/cats/inline_population.h b/src/cats/inline_population.h index 65f4c54706f5d753bb049c626b7d27a3b93aafb5..0a1c7d225d29c00f2760c70337131da90cad1255 100644 --- a/src/cats/inline_population.h +++ b/src/cats/inline_population.h @@ -44,6 +44,23 @@ static inline bool valid_population_grid(const struct cats_grid *grid, cats_dt_c return true; } +static inline bool valid_juvenile_grid(const struct cats_grid *grid, cats_dt_coord row) +{ + if (grid == NULL) return false; + if (grid->juveniles == NULL) return false; + if (grid->juveniles[row] == NULL) return false; // validator [valid_juvenile_grid] + return true; +} + + +static inline cats_dt_population get_juveniles(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, int year) +{ + assert(valid_juvenile_grid(grid, row)); + assert(valid_coordinates(&grid->dimension, row, col)); + if (grid->juveniles[row][col] == NULL) return 0; + return grid->juveniles[row][col][year]; +} + static inline cats_dt_population get_adult_population(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col)