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

butterflies: misc fixes

parent 10c8de56
No related branches found
No related tags found
No related merge requests found
...@@ -66,9 +66,9 @@ void bf_add_actions(struct cats_configuration *conf) ...@@ -66,9 +66,9 @@ void bf_add_actions(struct cats_configuration *conf)
bf_add_generation_action(conf, bf_action_generation_start, "start generation", generation); bf_add_generation_action(conf, bf_action_generation_start, "start generation", generation);
bf_add_generation_action(conf, bf_action_maturation, "transition eggs to adults", bf_add_generation_action(conf, bf_action_maturation, "transition eggs to adults",
generation); generation);
bf_add_generation_action(conf, bf_action_save_grid, "output", generation);
bf_add_generation_action(conf, bf_action_stats_gather, "gather stats", generation); bf_add_generation_action(conf, bf_action_stats_gather, "gather stats", generation);
bf_add_generation_action(conf, bf_action_dispersal, "dispersal", generation); bf_add_generation_action(conf, bf_action_dispersal, "dispersal", generation);
bf_add_generation_action(conf, bf_action_save_grid, "output", generation);
bf_add_generation_action(conf, bf_action_generation_finish, "finish generation", generation); bf_add_generation_action(conf, bf_action_generation_finish, "finish generation", generation);
bf_add_generation_action(conf, bf_action_stats_write, "write stats", generation); bf_add_generation_action(conf, bf_action_stats_write, "write stats", generation);
} }
......
...@@ -72,7 +72,7 @@ void butterflies_area_dispersal(struct cats_grid *grid, struct cats_thread_info ...@@ -72,7 +72,7 @@ void butterflies_area_dispersal(struct cats_grid *grid, struct cats_thread_info
butterflies_cell_dispersal(grid, ts, row, col, false); butterflies_cell_dispersal(grid, ts, row, col, false);
} }
} }
// if (ts->temp) printf("thread %d: %ld random walks (%ld cells) avg %f\n", ts->id, ts->temp, ts->temp1, (float) ts->temp / (float) ts->temp1); if (ts->temp) printf("thread %d: %ld random walks (%ld cells) avg %f\n", ts->id, ts->temp, ts->temp1, (float) ts->temp / (float) ts->temp1);
} }
...@@ -95,6 +95,8 @@ enum action_status bf_action_save_grid(struct cats_grid *grid, struct cats_confi ...@@ -95,6 +95,8 @@ enum action_status bf_action_save_grid(struct cats_grid *grid, struct cats_confi
} }
enum action_status bf_action_dispersal(struct cats_grid *grid, struct cats_configuration *conf) enum action_status bf_action_dispersal(struct cats_grid *grid, struct cats_configuration *conf)
{ {
threaded_action(&butterflies_area_dispersal, grid, conf, TS_DISPERSAL); threaded_action(&butterflies_area_dispersal, grid, conf, TS_DISPERSAL);
...@@ -105,7 +107,7 @@ enum action_status bf_action_dispersal(struct cats_grid *grid, struct cats_confi ...@@ -105,7 +107,7 @@ enum action_status bf_action_dispersal(struct cats_grid *grid, struct cats_confi
printf("%s: %ld\n", bf_get_stats_field_name(which), grid->stats.stats[stat_id]); printf("%s: %ld\n", bf_get_stats_field_name(which), grid->stats.stats[stat_id]);
} }
exit_cats(EXIT_SUCCESS);
return ACTION_RUN; return ACTION_RUN;
} }
......
...@@ -76,9 +76,10 @@ static void inline single_random_walk(struct cats_thread_info *ts, struct cats_g ...@@ -76,9 +76,10 @@ static void inline single_random_walk(struct cats_thread_info *ts, struct cats_g
continue; continue;
} }
int32_t eggs_to_deposit = (int32_t) ceilf((float) (eggs_left * egg_fraction_step)); int32_t eggs_to_deposit = (int32_t) ceilf((float) (eggs_left * egg_fraction_step));
assert(eggs_to_deposit >= 0); assert(eggs_to_deposit >= 0);
//printf("x %d %d -> %d %d: %d of %d / %Lf\n", source_row, source_col, row, col, eggs_to_deposit, eggs, egg_fraction_step);
if (eggs_to_deposit > eggs_left) { if (eggs_to_deposit > eggs_left) {
eggs_to_deposit = eggs_left; eggs_to_deposit = eggs_left;
} }
......
...@@ -16,7 +16,8 @@ char *bf_population_filename(struct cats_configuration *conf, struct cats_grid * ...@@ -16,7 +16,8 @@ char *bf_population_filename(struct cats_configuration *conf, struct cats_grid *
assert(grid != NULL); assert(grid != NULL);
assert(conf != NULL); assert(conf != NULL);
assert(conf->grid_count == 1); assert(conf->grid_count == 1);
struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
int32_t max_generation = module_conf->generations_max;
int module_id = CATS_MODULE_ID; int module_id = CATS_MODULE_ID;
struct grid_data_butterflies *data = grid->grid_modules[module_id].module_data; struct grid_data_butterflies *data = grid->grid_modules[module_id].module_data;
...@@ -25,7 +26,7 @@ char *bf_population_filename(struct cats_configuration *conf, struct cats_grid * ...@@ -25,7 +26,7 @@ char *bf_population_filename(struct cats_configuration *conf, struct cats_grid *
char *extension = get_extension(conf, "adults"); char *extension = get_extension(conf, "adults");
struct string_array *name = standard_output_file_name(conf, NULL, NULL, NULL); struct string_array *name = standard_output_file_name(conf, NULL, NULL, NULL);
string_array_add_int(name, data->generation_current, "g%03d"); string_array_add_int(name, max_generation - data->generation_current, "g%03d");
char *filename = assemble_filename(path, name, "_", extension); char *filename = assemble_filename(path, name, "_", extension);
......
...@@ -24,6 +24,7 @@ void *butterfly_grid_init(__attribute__((unused)) struct cats_configuration *con ...@@ -24,6 +24,7 @@ void *butterfly_grid_init(__attribute__((unused)) struct cats_configuration *con
data->info_layer = new_raw_2d_array_from_dimension(grid->dimension, sizeof(int32_t)); data->info_layer = 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;
data->eggs = new_raw_2d_array_from_dimension(grid->dimension, sizeof(float)); data->eggs = new_raw_2d_array_from_dimension(grid->dimension, sizeof(float));
...@@ -66,6 +67,17 @@ void load_butterflies_species_params(struct cats_configuration *conf, struct cat ...@@ -66,6 +67,17 @@ void load_butterflies_species_params(struct cats_configuration *conf, struct cat
load_conf_vital_rate(&data->butterfly_egg_to_adult_survival, conf, ini, section_name, param); load_conf_vital_rate(&data->butterfly_egg_to_adult_survival, conf, ini, section_name, param);
load_conf_value(true, ini, section_name, "butterflies random walk steps maximum", &data->animal_dispersal_max_radius); load_conf_value(true, ini, section_name, "butterflies random walk steps maximum", &data->animal_dispersal_max_radius);
bool l = load_conf_value(false, ini, section_name, "egg fraction step", &data->egg_fraction_step);
if (! l) {
data->egg_fraction_step = 0.5;
log_message(LOG_INFO, "using default value for egg fraction step: %Lf\n", data->egg_fraction_step);
}
if (data->egg_fraction_step <= 0.0 || data->egg_fraction_step > 1.0) {
log_message(LOG_ERROR, "egg fraction step must be in (0, 1], is %Lf", data->egg_fraction_step);
exit_cats(EXIT_FAILURE);
}
if (data->animal_dispersal_max_radius <= 0) { if (data->animal_dispersal_max_radius <= 0) {
log_message(LOG_ERROR, "butterflies random walk steps maximum must be > 0, is %d", data->animal_dispersal_max_radius); log_message(LOG_ERROR, "butterflies random walk steps maximum must be > 0, is %d", data->animal_dispersal_max_radius);
......
...@@ -68,7 +68,7 @@ void bf_cell_maturation(struct cats_grid *grid, struct cats_thread_info *ts, cat ...@@ -68,7 +68,7 @@ void bf_cell_maturation(struct cats_grid *grid, struct cats_thread_info *ts, cat
if (eggs > data->eggs[row][col]) { if (eggs > data->eggs[row][col]) {
log_message(LOG_ERROR, "Removing more eggs than present: %d %d: %f/%f", row, col, data->eggs[row][col], log_message(LOG_ERROR, "Removing more eggs than present: %d %d: %f/%f", row, col, data->eggs[row][col],
eggs); eggs);
exit(EXIT_FAILURE); exit_cats(EXIT_FAILURE);
} }
data->eggs[row][col] -= eggs; data->eggs[row][col] -= eggs;
......
...@@ -93,7 +93,6 @@ struct string_array *bf_assemble_stats(struct cats_configuration *conf, struct c ...@@ -93,7 +93,6 @@ struct string_array *bf_assemble_stats(struct cats_configuration *conf, struct c
} }
void bf_stats_write(struct cats_configuration *conf, struct cats_grid *grid) void bf_stats_write(struct cats_configuration *conf, struct cats_grid *grid)
{ {
struct conf_data_butterflies *module_conf = CATS_MODULE_DATA; struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
...@@ -116,10 +115,6 @@ void bf_stats_write(struct cats_configuration *conf, struct cats_grid *grid) ...@@ -116,10 +115,6 @@ void bf_stats_write(struct cats_configuration *conf, struct cats_grid *grid)
free_string_array(&data); free_string_array(&data);
exit_cats(EXIT_FAILURE);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment