From af2cb1d30fa43e66d823e4d9e594c9a6f526e693 Mon Sep 17 00:00:00 2001
From: Andreas Gattringer <gattringera@a772-cvl-ws23.biodiv.univie.ac.at>
Date: Wed, 10 May 2023 14:58:07 +0200
Subject: [PATCH] butterflies: misc fixes

---
 src/modules/butterflies/butterflies_action_helpers.c |  2 +-
 src/modules/butterflies/butterflies_actions.c        |  6 ++++--
 src/modules/butterflies/butterflies_dispersal.c      |  3 ++-
 src/modules/butterflies/butterflies_filenames.c      |  5 +++--
 src/modules/butterflies/butterflies_main.c           | 12 ++++++++++++
 src/modules/butterflies/butterflies_populations.c    |  2 +-
 src/modules/butterflies/butterflies_stats.c          |  5 -----
 7 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/modules/butterflies/butterflies_action_helpers.c b/src/modules/butterflies/butterflies_action_helpers.c
index 22db214..9699b49 100644
--- a/src/modules/butterflies/butterflies_action_helpers.c
+++ b/src/modules/butterflies/butterflies_action_helpers.c
@@ -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_maturation, "transition eggs to adults",
                                          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_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_stats_write, "write stats", generation);
         }
diff --git a/src/modules/butterflies/butterflies_actions.c b/src/modules/butterflies/butterflies_actions.c
index 0416a21..0c4a2e9 100644
--- a/src/modules/butterflies/butterflies_actions.c
+++ b/src/modules/butterflies/butterflies_actions.c
@@ -72,7 +72,7 @@ void butterflies_area_dispersal(struct cats_grid *grid, struct cats_thread_info
                         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
 }
 
 
+
+
 enum action_status bf_action_dispersal(struct cats_grid *grid, struct cats_configuration *conf)
 {
         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
                 printf("%s: %ld\n", bf_get_stats_field_name(which), grid->stats.stats[stat_id]);
         }
 
-        exit_cats(EXIT_SUCCESS);
+
         return ACTION_RUN;
 }
 
diff --git a/src/modules/butterflies/butterflies_dispersal.c b/src/modules/butterflies/butterflies_dispersal.c
index d136ecd..72284eb 100644
--- a/src/modules/butterflies/butterflies_dispersal.c
+++ b/src/modules/butterflies/butterflies_dispersal.c
@@ -76,9 +76,10 @@ static void inline single_random_walk(struct cats_thread_info *ts, struct cats_g
                         continue;
                 }
 
+
                 int32_t eggs_to_deposit = (int32_t) ceilf((float) (eggs_left * egg_fraction_step));
                 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) {
                         eggs_to_deposit = eggs_left;
                 }
diff --git a/src/modules/butterflies/butterflies_filenames.c b/src/modules/butterflies/butterflies_filenames.c
index 56f0323..dd83ebd 100644
--- a/src/modules/butterflies/butterflies_filenames.c
+++ b/src/modules/butterflies/butterflies_filenames.c
@@ -16,7 +16,8 @@ char *bf_population_filename(struct cats_configuration *conf, struct cats_grid *
         assert(grid != NULL);
         assert(conf != NULL);
         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;
         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 *
 
         char *extension = get_extension(conf, "adults");
         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);
 
diff --git a/src/modules/butterflies/butterflies_main.c b/src/modules/butterflies/butterflies_main.c
index 6e8a5b8..9a7aef3 100644
--- a/src/modules/butterflies/butterflies_main.c
+++ b/src/modules/butterflies/butterflies_main.c
@@ -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));
         log_message(LOG_INFO, "done allocating data for generations");
         data->generation_current = 0;
+
         //struct conf_data_butterflies *conf_data = CATS_MODULE_DATA;
         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
         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);
+        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) {
                 log_message(LOG_ERROR, "butterflies random walk steps maximum must be > 0, is %d", data->animal_dispersal_max_radius);
diff --git a/src/modules/butterflies/butterflies_populations.c b/src/modules/butterflies/butterflies_populations.c
index f960967..4919683 100644
--- a/src/modules/butterflies/butterflies_populations.c
+++ b/src/modules/butterflies/butterflies_populations.c
@@ -68,7 +68,7 @@ void bf_cell_maturation(struct cats_grid *grid, struct cats_thread_info *ts, cat
         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],
                             eggs);
-                exit(EXIT_FAILURE);
+                exit_cats(EXIT_FAILURE);
         }
 
         data->eggs[row][col] -= eggs;
diff --git a/src/modules/butterflies/butterflies_stats.c b/src/modules/butterflies/butterflies_stats.c
index 6fe9fd2..113b880 100644
--- a/src/modules/butterflies/butterflies_stats.c
+++ b/src/modules/butterflies/butterflies_stats.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)
 {
         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)
 
         free_string_array(&data);
 
-        exit_cats(EXIT_FAILURE);
-
-
-
 
 }
 
-- 
GitLab