Skip to content
Snippets Groups Projects
Commit cda212df authored by Andreas Gattringer's avatar Andreas Gattringer Committed by Andreas Gattringer
Browse files

butterflies: added layer to potentially speed up dispersal

parent e5ece752
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ void *butterfly_grid_init(struct cats_configuration *conf, struct cats_grid *gri ...@@ -20,6 +20,7 @@ void *butterfly_grid_init(struct cats_configuration *conf, struct cats_grid *gri
struct grid_data_butterflies *data = malloc_or_die(sizeof(struct grid_data_butterflies)); struct grid_data_butterflies *data = malloc_or_die(sizeof(struct grid_data_butterflies));
log_message(LOG_INFO, "allocating data for generations"); log_message(LOG_INFO, "allocating data for generations");
data->generations = new_raw_2d_array_from_dimension(grid->dimension, sizeof(float)); data->generations = new_raw_2d_array_from_dimension(grid->dimension, sizeof(float));
data->food = new_raw_2d_array_from_dimension(grid->dimension, sizeof(int32_t));
log_message(LOG_INFO, "done allocating data for generations"); log_message(LOG_INFO, "done allocating data for generations");
data->generation_current = 0; data->generation_current = 0;
//struct conf_data_butterflies *conf_data = CATS_MODULE_DATA; //struct conf_data_butterflies *conf_data = CATS_MODULE_DATA;
...@@ -30,13 +31,17 @@ void *butterfly_grid_init(struct cats_configuration *conf, struct cats_grid *gri ...@@ -30,13 +31,17 @@ void *butterfly_grid_init(struct cats_configuration *conf, struct cats_grid *gri
} }
void *grid_cleanup(struct cats_configuration *conf, struct cats_grid *grid, void *data) void *butterfly_grid_cleanup(struct cats_configuration *conf, struct cats_grid *grid, void *data)
{ {
log_message(LOG_INFO, "%s: grid cleanup", module_name); log_message(LOG_INFO, "%s: grid cleanup", module_name);
assert(grid != NULL); assert(grid != NULL);
struct grid_data_butterflies *grid_data = data; struct grid_data_butterflies *grid_data = data;
free_grid(&grid_data->generations, grid->dimension.rows); free_grid(&grid_data->generations, grid->dimension.rows);
free(grid_data->generations); free(grid_data->generations);
grid_data->generations = NULL;
free_grid(&grid_data->food, grid->dimension.rows);
free(grid_data->food);
grid_data->food = NULL;
grid_data->generation_current = -1; grid_data->generation_current = -1;
return NULL; return NULL;
} }
...@@ -78,7 +83,7 @@ void cats_module_init(struct cats_configuration *conf) ...@@ -78,7 +83,7 @@ void cats_module_init(struct cats_configuration *conf)
struct conf_data_butterflies *data = calloc_or_die(1,sizeof(struct conf_data_butterflies)); struct conf_data_butterflies *data = calloc_or_die(1,sizeof(struct conf_data_butterflies));
enum cats_module_flags flags = MODULE_ALTERNATE_DEMOGRAPHIC | MODULE_OVERRIDE_ACTIONS; enum cats_module_flags flags = MODULE_ALTERNATE_DEMOGRAPHIC | MODULE_OVERRIDE_ACTIONS;
int32_t id = register_module(conf, module_name, data, flags); int32_t id = register_module(conf, module_name, data, flags);
register_cats_grid_init_function(conf, butterfly_grid_init, grid_cleanup); register_cats_grid_init_function(conf, butterfly_grid_init, butterfly_grid_cleanup);
register_load_species_param_config_func(conf, load_butterflies_species_params); register_load_species_param_config_func(conf, load_butterflies_species_params);
add_vital_rates(conf, data); add_vital_rates(conf, data);
......
...@@ -9,6 +9,7 @@ struct grid_data_butterflies { ...@@ -9,6 +9,7 @@ struct grid_data_butterflies {
float **generations; float **generations;
int32_t generation_current; int32_t generation_current;
float **eggs; float **eggs;
int32_t **food;
}; };
......
...@@ -230,6 +230,41 @@ enum action_status action_butterfly_update_generations(struct cats_grid *grid, s ...@@ -230,6 +230,41 @@ enum action_status action_butterfly_update_generations(struct cats_grid *grid, s
} }
void reset_food_layer(const struct cats_grid *grid, struct grid_data_butterflies *data)
{
const cats_dt_coord rows = grid->dimension.rows;
const cats_dt_coord cols = grid->dimension.cols;
for (cats_dt_coord row = 0; row < rows; row++) {
for (cats_dt_coord col = 0; col < cols; col++) {
data->food[row][col] = 0;
}
}
}
enum action_status action_butterflies_update_overlays(struct cats_grid *grid, struct cats_configuration *conf)
{
bool run = false;
int module_id = CATS_MODULE_ID;
struct grid_data_butterflies *data = grid->grid_modules[module_id].module_data;
if (! run) {
reset_food_layer(grid, data);
}
if (conf->overlays.overlay[OL_EXCLUSION].enabled) {
run = true;
}
if (!run) return ACTION_NOT_RUN;
return ACTION_RUN;
}
enum action_status action_finish_generation(struct cats_grid *grid, struct cats_configuration *conf) enum action_status action_finish_generation(struct cats_grid *grid, struct cats_configuration *conf)
{ {
int module_id = CATS_MODULE_ID; int module_id = CATS_MODULE_ID;
...@@ -287,6 +322,9 @@ void add_actions(struct cats_configuration *conf) ...@@ -287,6 +322,9 @@ void add_actions(struct cats_configuration *conf)
register_action_function(conf, action_butterflies_maturation, "butterfly_action_egg_to_adult", register_action_function(conf, action_butterflies_maturation, "butterfly_action_egg_to_adult",
"transition eggs to adults"); "transition eggs to adults");
register_action_function(conf, action_butterflies_update_overlays, "butterfly_action_overlay_update",
"updating resource layer");
register_action_function(conf, action_butterflies_dispersal, "butterfly_action_dispersal", "egg dispersal"); register_action_function(conf, action_butterflies_dispersal, "butterfly_action_dispersal", "egg dispersal");
register_action_function(conf, action_butterflies_kill_adults, "butterfly_kill_adults", "kill adults"); register_action_function(conf, action_butterflies_kill_adults, "butterfly_kill_adults", "kill adults");
register_action_function(conf, action_butterflies_save_grid, "action_butterflies_save_grid", "output"); register_action_function(conf, action_butterflies_save_grid, "action_butterflies_save_grid", "output");
...@@ -295,6 +333,7 @@ void add_actions(struct cats_configuration *conf) ...@@ -295,6 +333,7 @@ void add_actions(struct cats_configuration *conf)
append_action(conf, action_butterfly_stats_reset, ALL_STAGES, "resetting butterfly statistics", module_name); append_action(conf, action_butterfly_stats_reset, ALL_STAGES, "resetting butterfly statistics", module_name);
append_action(conf, action_butterflies_update_overlays, ALL_STAGES, "updating resource layer", module_name);
append_action_by_name(conf, "action_load_environments", ALL_STAGES, "environment update", module_name); append_action_by_name(conf, "action_load_environments", ALL_STAGES, "environment update", module_name);
append_action_by_name(conf, "action_overlay_update", ALL_STAGES, "overlay update", module_name); append_action_by_name(conf, "action_overlay_update", ALL_STAGES, "overlay update", module_name);
append_action(conf, action_butterfly_update_generations, ALL_STAGES, "update generations", module_name); append_action(conf, action_butterfly_update_generations, ALL_STAGES, "update generations", module_name);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment