From 6f1003666c3ca543540458b7c9888f001b08b245 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Tue, 19 Jul 2022 13:50:17 -0400 Subject: [PATCH 01/11] export development pressure --- r.futures/r.futures.simulation/main.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index 8c1826f..230f32c 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -160,7 +160,9 @@ int main(int argc, char **argv) *HAND, *HAND_percentile, *floodInputFile, *floodLog, *depthDamageFunc, *ddf_subregions, *response_func, *responseStddev, *adaptations, *adaptiveCapacity, *HUCs, *outputAdaptation, - *patchFile, *numSteps, *output, *outputSeries, *seed, *memory; + *patchFile, *numSteps, *output, *outputSeries, + *outputDevPressure, + *seed, *memory; } opt; struct @@ -344,6 +346,13 @@ int main(int argc, char **argv) _("Basename for raster maps of development generated after each step"); opt.outputSeries->guisection = _("Output"); + opt.outputDevPressure = G_define_standard_option(G_OPT_R_OUTPUT); + opt.outputDevPressure->key = "output_development_pressure"; + opt.outputDevPressure->required = NO; + opt.outputDevPressure->label = + _("Output development pressure raster"); + opt.outputDevPressure->guisection = _("Development pressure"); + opt.outputDensity = G_define_standard_option(G_OPT_R_BASENAME_OUTPUT); opt.outputDensity->key = "output_density"; opt.outputDensity->required = NO; @@ -920,6 +929,10 @@ int main(int argc, char **argv) output_developed_step(&segments.developed, opt.output->answer, demand_info.years[0], demand_info.years[step-1], num_steps, segments.use_climate ? true : false); + + if (opt.outputDevPressure->answer) + output_step(&segments.devpressure, &segments.developed, opt.outputDevPressure->answer, FCELL_TYPE); + if (opt.floodLog->answer) write_flood_log(&flood_log, opt.floodLog->answer, &HUC_map); From c656a12a5e962baf7a34c294dabceba6320cccae Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Tue, 19 Jul 2022 16:26:50 -0400 Subject: [PATCH 02/11] represent undeveloped as -1000 internally, output undeveloped even when abandonment is active --- r.futures/r.futures.simulation/inputs.c | 9 ++++++--- r.futures/r.futures.simulation/inputs.h | 2 +- r.futures/r.futures.simulation/output.c | 26 ++++++++++++------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/r.futures/r.futures.simulation/inputs.c b/r.futures/r.futures.simulation/inputs.c index 3bf7606..987f977 100644 --- a/r.futures/r.futures.simulation/inputs.c +++ b/r.futures/r.futures.simulation/inputs.c @@ -35,7 +35,7 @@ int get_developed_val_from_step(int step, bool abandon) { if (abandon) - return -step - 2; + return -step - 1; else return step + 1; } @@ -275,10 +275,13 @@ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, for (col = 0; col < cols; col++) { isnull = false; /* developed */ - /* undeveloped 0 -> -1, developed 1 -> 0 */ + /* undeveloped 0 -> -1000, developed 1 -> 0 */ if (!Rast_is_null_value(&((CELL *) developed_row)[col], CELL_TYPE)) { c = ((CELL *) developed_row)[col]; - ((CELL *) developed_row)[col] = c - 1; + if (c == 0) + ((CELL *) developed_row)[col] = DEV_TYPE_UNDEVELOPED; + else + ((CELL *) developed_row)[col] = c - 1; } else isnull = true; diff --git a/r.futures/r.futures.simulation/inputs.h b/r.futures/r.futures.simulation/inputs.h index 6f9d462..7d8e13e 100644 --- a/r.futures/r.futures.simulation/inputs.h +++ b/r.futures/r.futures.simulation/inputs.h @@ -6,7 +6,7 @@ #include "map.h" enum development_type {DEV_TYPE_INITIAL = 0, - DEV_TYPE_UNDEVELOPED = -1}; + DEV_TYPE_UNDEVELOPED = -1000}; enum DDF_subregions_source {DDF_DEFAULT = 0, DDF_POTENTIAL = -1, diff --git a/r.futures/r.futures.simulation/output.c b/r.futures/r.futures.simulation/output.c index 47b4dd3..6aee95c 100644 --- a/r.futures/r.futures.simulation/output.c +++ b/r.futures/r.futures.simulation/output.c @@ -73,9 +73,9 @@ char *name_for_step(const char *basename, const int step, const int nsteps) * \param year_from year to put as timestamp * \param year_to if > 0 it is end year of timestamp interval * \param nsteps total number of steps (needed for color table) - * \param contains_abandoned If true, represent undeveloped areas as NULLS, and - * shift values <= -2 (abandoned) by +1 to represent in absolute value - * step when they were abandoned. + * \param contains_abandoned If false, undeveloped areas represented internally as -1000 + * are changed on output to -1, otherwise -1000 is kept on output + * with -1 to -nsteps representing the step in abs value when px was abandoned */ void output_developed_step(SEGMENT *developed_segment, const char *name, int year_from, int year_to, int nsteps, bool contains_abandoned) @@ -103,13 +103,9 @@ void output_developed_step(SEGMENT *developed_segment, const char *name, if (Rast_is_c_null_value(&developed)) { continue; } - if (contains_abandoned) { - if (developed < DEV_TYPE_UNDEVELOPED) { - developed += 1; - } - else if (developed == DEV_TYPE_UNDEVELOPED) { - continue; - } + if (!contains_abandoned) { + if (developed == DEV_TYPE_UNDEVELOPED) + developed = -1; } out_row[col] = developed; } @@ -122,14 +118,18 @@ void output_developed_step(SEGMENT *developed_segment, const char *name, // TODO: the map max is 36 for 36 steps, it is correct? if (contains_abandoned) { + val1 = DEV_TYPE_UNDEVELOPED; + val2 = DEV_TYPE_UNDEVELOPED; + Rast_add_c_color_rule(&val1, 180, 255, 160, &val2, 180, 255, 160, + &colors); val1 = -nsteps; val2 = -1; Rast_add_c_color_rule(&val1, 230, 163, 255, &val2, 60, 0, 80, &colors); - } + } else { - val1 = DEV_TYPE_UNDEVELOPED; - val2 = DEV_TYPE_UNDEVELOPED; + val1 = -1; + val2 = -1; Rast_add_c_color_rule(&val1, 180, 255, 160, &val2, 180, 255, 160, &colors); } From 1c908e19e84d1b5004851bf76f96e14b16828bab Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Tue, 19 Jul 2022 16:57:18 -0400 Subject: [PATCH 03/11] add option to read input development which was output from previous step --- r.futures/r.futures.simulation/inputs.c | 21 +++++++++++++++------ r.futures/r.futures.simulation/inputs.h | 3 ++- r.futures/r.futures.simulation/main.c | 12 +++++++++--- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/r.futures/r.futures.simulation/inputs.c b/r.futures/r.futures.simulation/inputs.c index 987f977..1442ce5 100644 --- a/r.futures/r.futures.simulation/inputs.c +++ b/r.futures/r.futures.simulation/inputs.c @@ -107,7 +107,7 @@ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, map_int_t *reverse_region_map, map_int_t *potential_region_map, map_int_t *HUC_map, map_float_t *max_flood_probability_map, - map_int_t *DDF_region_map) + map_int_t *DDF_region_map, bool steering) { int row, col; int rows, cols; @@ -275,13 +275,22 @@ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, for (col = 0; col < cols; col++) { isnull = false; /* developed */ - /* undeveloped 0 -> -1000, developed 1 -> 0 */ if (!Rast_is_null_value(&((CELL *) developed_row)[col], CELL_TYPE)) { c = ((CELL *) developed_row)[col]; - if (c == 0) - ((CELL *) developed_row)[col] = DEV_TYPE_UNDEVELOPED; - else - ((CELL *) developed_row)[col] = c - 1; + if (steering) { + if (!segments->use_climate) { + /* undeveloped -1 -> -1000 */ + if (c == -1) + ((CELL *) developed_row)[col] = DEV_TYPE_UNDEVELOPED; + } + } + /* undeveloped 0 -> -1000, developed 1 -> 0 */ + else { + if (c == 0) + ((CELL *) developed_row)[col] = DEV_TYPE_UNDEVELOPED; + else + ((CELL *) developed_row)[col] = c - 1; + } } else isnull = true; diff --git a/r.futures/r.futures.simulation/inputs.h b/r.futures/r.futures.simulation/inputs.h index 7d8e13e..1bd8113 100644 --- a/r.futures/r.futures.simulation/inputs.h +++ b/r.futures/r.futures.simulation/inputs.h @@ -175,7 +175,8 @@ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, map_int_t *reverse_region_map, map_int_t *potential_region_map, map_int_t *HUC_map, map_float_t *max_flood_probability_map, - map_int_t *DDF_region_map); + map_int_t *DDF_region_map, + bool steering); void read_predictors(struct RasterInputs inputs, struct Segments *segments, const struct Potential *potential, const struct SegmentMemory segment_info); diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index 230f32c..86d0b9b 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -167,7 +167,7 @@ int main(int argc, char **argv) struct { - struct Flag *generateSeed; + struct Flag *generateSeed, *steering; } flg; int i; @@ -351,7 +351,7 @@ int main(int argc, char **argv) opt.outputDevPressure->required = NO; opt.outputDevPressure->label = _("Output development pressure raster"); - opt.outputDevPressure->guisection = _("Development pressure"); + opt.outputDevPressure->guisection = _("Steering"); opt.outputDensity = G_define_standard_option(G_OPT_R_BASENAME_OUTPUT); opt.outputDensity->key = "output_density"; @@ -593,6 +593,11 @@ int main(int argc, char **argv) opt.memory->required = NO; opt.memory->description = _("Memory in GB"); + flg.steering = G_define_flag(); + flg.steering->key = 'r'; + flg.steering->description = _("Use steering"); + flg.steering->guisection = _("Steering"); + // TODO: add mutually exclusive? // TODO: add flags or options to control values in series and final rasters @@ -608,6 +613,7 @@ int main(int argc, char **argv) G_option_requires(opt.outputAdaptation, opt.adaptiveCapacity, NULL); G_option_requires(opt.HAND, opt.HAND_percentile, NULL); G_option_requires(opt.floodLog, opt.floodInputFile, NULL); + G_option_requires_all(flg.steering, opt.outputDevPressure, NULL); if (G_parser(argc, argv)) exit(EXIT_FAILURE); @@ -781,7 +787,7 @@ int main(int argc, char **argv) read_input_rasters(raster_inputs, &segments, segment_info, ®ion_map, &reverse_region_map, &potential_region_map, &HUC_map, &max_flood_probability_map, - &DDF_region_map); + &DDF_region_map, flg.steering->answer); if (flood_inputs.array) { create_bboxes(&segments.HUC, &segments.developed, &bboxes); } From a593da76cc90b21be2a56beb9c9b5071c7aa21e3 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Tue, 2 Aug 2022 15:01:17 -0400 Subject: [PATCH 04/11] continue steering implementation: demand --- r.futures/r.futures.simulation/inputs.h | 2 + r.futures/r.futures.simulation/main.c | 68 +++++++++++++------ r.futures/r.futures.simulation/output.c | 42 ++++++++++++ r.futures/r.futures.simulation/output.h | 5 ++ .../testsuite/test_r_futures_simulation.py | 48 ++++++++++++- 5 files changed, 145 insertions(+), 20 deletions(-) diff --git a/r.futures/r.futures.simulation/inputs.h b/r.futures/r.futures.simulation/inputs.h index 1bd8113..d015568 100644 --- a/r.futures/r.futures.simulation/inputs.h +++ b/r.futures/r.futures.simulation/inputs.h @@ -16,6 +16,8 @@ struct Demand { const char *cells_filename; const char *population_filename; + const char *cells_output_filename; + const char *population_output_filename; float **cells_table; float **population_table; int *years; diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index 86d0b9b..e4e7984 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -161,7 +161,7 @@ int main(int argc, char **argv) *depthDamageFunc, *ddf_subregions, *response_func, *responseStddev, *adaptations, *adaptiveCapacity, *HUCs, *outputAdaptation, *patchFile, *numSteps, *output, *outputSeries, - *outputDevPressure, + *steering_step, *outputDevPressure, *outputCellDemandFile, *seed, *memory; } opt; @@ -173,6 +173,9 @@ int main(int argc, char **argv) int i; int num_predictors; int num_steps; + int max_steps; + int steering_step; + int internal_step; int nseg; unsigned region; int *region_id; @@ -384,6 +387,13 @@ int main(int argc, char **argv) _("CSV file with population size to accommodate"); opt.populationDemandFile->guisection = _("Demand"); + opt.outputCellDemandFile = G_define_standard_option(G_OPT_F_OUTPUT); + opt.outputCellDemandFile->key = "output_demand"; + opt.outputCellDemandFile->required = NO; + opt.outputCellDemandFile->description = + _("Output CSV file with number of cells to convert for each step and subregion"); + opt.outputCellDemandFile->guisection = _("Steering"); + opt.separator = G_define_standard_option(G_OPT_F_SEP); opt.separator->answer = "comma"; opt.separator->description = @@ -546,6 +556,15 @@ int main(int argc, char **argv) _("Number of steps to be simulated"); opt.numSteps->guisection = _("Basic input"); + opt.steering_step = G_define_option(); + opt.steering_step->key = "steering_step"; + opt.steering_step->type = TYPE_INTEGER; + opt.steering_step->required = NO; + opt.steering_step->options = "0-1000"; + opt.steering_step->description = + _("Steering step"); + opt.steering_step->guisection = _("Steering"); + opt.potentialWeight = G_define_standard_option(G_OPT_R_INPUT); opt.potentialWeight->key = "potential_weight"; opt.potentialWeight->required = NO; @@ -613,7 +632,8 @@ int main(int argc, char **argv) G_option_requires(opt.outputAdaptation, opt.adaptiveCapacity, NULL); G_option_requires(opt.HAND, opt.HAND_percentile, NULL); G_option_requires(opt.floodLog, opt.floodInputFile, NULL); - G_option_requires_all(flg.steering, opt.outputDevPressure, NULL); + G_option_requires_all(flg.steering, opt.outputDevPressure, + opt.outputCellDemandFile, opt.steering_step, NULL); if (G_parser(argc, argv)) exit(EXIT_FAILURE); @@ -657,11 +677,12 @@ int main(int argc, char **argv) patch_info.strategy = SKIP; if (opt.redevelopmentLag->answer) patch_info.redevelopment_lag = atoi(opt.redevelopmentLag->answer); - - num_steps = 0; - if (opt.numSteps->answer) - num_steps = atoi(opt.numSteps->answer); - + + step = 0; + if (opt.steering_step->answer) { + steering_step = atoi(opt.steering_step->answer); + step = steering_step; + } num_predictors = 0; for (i = 0; opt.predictors->answers[i]; i++) num_predictors++; @@ -827,15 +848,22 @@ int main(int argc, char **argv) demand_info.has_population = true; demand_info.population_filename = opt.populationDemandFile->answer; } + if (opt.outputCellDemandFile->answer) + demand_info.cells_output_filename = opt.outputCellDemandFile->answer; demand_info.separator = G_option_to_separator(opt.separator); read_demand_file(&demand_info, ®ion_map); - if (num_steps == 0) - num_steps = demand_info.max_steps; + + max_steps = demand_info.max_steps; + internal_step = 0; + num_steps = max_steps; + if (opt.numSteps->answer) + num_steps = atoi(opt.numSteps->answer); + /* check redistribution matrix output files */ if (opt.redistributionMatrixOutput->answer) { redistr_matrix.output_basename = opt.redistributionMatrixOutput->answer; - if (check_matrix_filenames_exist(&redistr_matrix, num_steps)) { + if (check_matrix_filenames_exist(&redistr_matrix, max_steps)) { if (!G_check_overwrite(argc, argv)) G_fatal_error(_("At least one of the requested matrix output files exists. Use --o to overwrite.")); } @@ -881,16 +909,16 @@ int main(int argc, char **argv) overgrow = true; G_verbose_message("Starting simulation..."); leaving_population = 0; - for (step = 0; step < num_steps; step++) { + for (; step < max_steps && internal_step < num_steps; step++, internal_step++) { recompute_probabilities(undev_cells, &segments, &potential_info, false); if (segments.use_density) recompute_probabilities(dev_cells, &segments, &redev_potential_info, true); - if (step == num_steps - 1) + if (step == max_steps - 1) overgrow = false; for (region = 0; region < map_nitems(®ion_map); region++) { region_id = map_get_int(&reverse_region_map, region); G_verbose_message("Computing step %d (out of %d), region %d (%d out of %d)", - step + 1, num_steps, *region_id, + step + 1, max_steps, *region_id, region + 1, map_nitems(®ion_map)); compute_step(undev_cells, dev_cells, &demand_info, search_alg, &segments, &patch_sizes, &patch_info, &devpressure_info, patch_overflow, @@ -910,31 +938,33 @@ int main(int argc, char **argv) &max_flood_probability_map, &flood_inputs, &flood_log, &DDF, &response_relation, HUC); if (opt.redistributionMatrixOutput->answer) - write_redistribution_matrix(&redistr_matrix, step, num_steps); + write_redistribution_matrix(&redistr_matrix, step, max_steps); } /* export developed for that step */ if (opt.outputSeries->answer) { - name_step = name_for_step(opt.outputSeries->answer, step, num_steps); + name_step = name_for_step(opt.outputSeries->answer, step, max_steps); output_developed_step(&segments.developed, name_step, - demand_info.years[step], -1, num_steps, + demand_info.years[step], -1, max_steps, segments.use_climate ? true : false); } /* export density for that step */ if (opt.outputDensity->answer) { - name_step = name_for_step(opt.outputDensity->answer, step, num_steps); + name_step = name_for_step(opt.outputDensity->answer, step, max_steps); output_step(&segments.density, &segments.developed, name_step, FCELL_TYPE); } /* export density for that step */ if (opt.outputAdaptation->answer) { - name_step = name_for_step(opt.outputAdaptation->answer, step, num_steps); + name_step = name_for_step(opt.outputAdaptation->answer, step, max_steps); output_step(&segments.adaptation, &segments.developed, name_step, CELL_TYPE); } + if (opt.outputCellDemandFile->answer) + output_demand_file(&demand_info, &reverse_region_map, patch_overflow, step); } /* write */ output_developed_step(&segments.developed, opt.output->answer, demand_info.years[0], demand_info.years[step-1], - num_steps, segments.use_climate ? true : false); + max_steps, segments.use_climate ? true : false); if (opt.outputDevPressure->answer) output_step(&segments.devpressure, &segments.developed, opt.outputDevPressure->answer, FCELL_TYPE); diff --git a/r.futures/r.futures.simulation/output.c b/r.futures/r.futures.simulation/output.c index 6aee95c..353161b 100644 --- a/r.futures/r.futures.simulation/output.c +++ b/r.futures/r.futures.simulation/output.c @@ -23,6 +23,7 @@ #include "output.h" #include "inputs.h" +#include "map.h" static void create_timestamp(int year, struct TimeStamp* timestamp) @@ -207,3 +208,44 @@ void output_step(SEGMENT *output_segment, SEGMENT *developed_segment, G_message(_("Raster map <%s> created"), name); } + +void output_demand_file(struct Demand *demandInfo, map_int_t *reverse_region_map, + int *patch_overflow, int step) +{ + FILE *fp_cell = NULL; + if ((fp_cell = fopen(demandInfo->cells_output_filename, "w")) == NULL) + G_fatal_error(_("Cannot open area demand file <%s> for writing"), + demandInfo->cells_output_filename); + fprintf(fp_cell, "year"); + /* wtite region header */ + for (int region = 0; region < map_nitems(reverse_region_map); region++) { + int *region_id = map_get_int(reverse_region_map, region); + fprintf(fp_cell, ",%d", *region_id); + } + fprintf(fp_cell, "\n"); + + int *patch_overflow_copy = G_calloc(map_nitems(reverse_region_map), sizeof(int)); + memcpy(patch_overflow_copy, patch_overflow, sizeof(int) * map_nitems(reverse_region_map)); + for (int row = 0; row < demandInfo->max_steps; row++) { + /* write year */ + fprintf(fp_cell, "%d", demandInfo->years[row]); + for (int region = 0; region < map_nitems(reverse_region_map); region++) { + /* resolve patch overflow */ + int n_to_convert = lroundf(demandInfo->cells_table[region][row]); + + if ((row == step + 1) && patch_overflow_copy[region] > 0) { + if (n_to_convert - patch_overflow_copy[region] > 0) { + n_to_convert -= patch_overflow_copy[region]; + } + else { + patch_overflow_copy[region] -= n_to_convert; + n_to_convert = 0; + } + } + fprintf(fp_cell, ",%d", n_to_convert); + } + fprintf(fp_cell, "\n"); + } + G_free(patch_overflow_copy); + fclose(fp_cell); +} diff --git a/r.futures/r.futures.simulation/output.h b/r.futures/r.futures.simulation/output.h index 23854c4..7e38533 100644 --- a/r.futures/r.futures.simulation/output.h +++ b/r.futures/r.futures.simulation/output.h @@ -5,6 +5,9 @@ #include #include +#include "map.h" +#include "inputs.h" + char *name_for_step(const char *basename, const int step, const int nsteps); @@ -12,4 +15,6 @@ void output_developed_step(SEGMENT *developed_segment, const char *name, int yea int nsteps, bool contains_abandoned); void output_step(SEGMENT *output_segment, SEGMENT *developed_segment, const char *name, RASTER_MAP_TYPE data_type); +void output_demand_file(struct Demand *demandInfo, map_int_t *reverse_region_map, + int *patch_overflow, int step); #endif // FUTURES_OUTPUT_H diff --git a/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation.py b/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation.py index 1dbf0b6..0e6c3af 100755 --- a/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation.py +++ b/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation.py @@ -10,6 +10,8 @@ class TestPGA(TestCase): output = "pga_output" result = "result" potential_test = "data/potential_test.csv" + output_demand = "data/output_demand_file.csv" + output_development_pressure = "output_development_pressure" @classmethod def setUpClass(cls): @@ -109,6 +111,9 @@ def setUpClass(cls): cls.runModule( "r.mapcalc", expression="acapacity = rand(-100, 100) * 0.01", seed=1 ) + cls.runModule( + "r.mapcalc", expression="urban_2002_steered = if (urban_2002 == 0, -1, 0)" + ) @classmethod def tearDownClass(cls): @@ -138,14 +143,21 @@ def tearDownClass(cls): "flood_probability", "acapacity", "basin", + "urban_2002_steered", cls.result, ], ) cls.del_temp_region() gs.try_remove(cls.potential_test) + gs.try_remove(cls.output_demand) def tearDown(self): - self.runModule("g.remove", flags="f", type="raster", name=self.output) + self.runModule( + "g.remove", + flags="f", + type="raster", + name=[self.output, self.output_development_pressure], + ) def test_pga_run(self): """Test if results is in expected limits""" @@ -340,6 +352,40 @@ def test_pga_flooding_DDF(self): output=self.output, ) + def test_pga_run_steering(self): + """Test if results is in expected limits""" + for i in range(0, 7): + self.assertModule( + "r.futures.simulation", + developed="urban_2002_steered" if i == 0 else self.output, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.txt", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="zipcodes", + demand="data/demand.csv" if i == 0 else self.output_demand, + output=self.output, + flags="r", + output_development_pressure=self.output_development_pressure, + output_demand=self.output_demand, + num_steps=1, + steering_step=i, + verbose=True, + overwrite=True, + ) + if __name__ == "__main__": test() From 8989e2e55dbaa64d6cd93ec95524de720dc5de5d Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Wed, 3 Aug 2022 14:47:40 -0400 Subject: [PATCH 05/11] allow demand to read in data from tables outside of study area --- r.futures/r.futures.simulation/inputs.c | 43 ++++++++++++++----------- r.futures/r.futures.simulation/inputs.h | 2 +- r.futures/r.futures.simulation/main.c | 2 +- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/r.futures/r.futures.simulation/inputs.c b/r.futures/r.futures.simulation/inputs.c index 1442ce5..31daabc 100644 --- a/r.futures/r.futures.simulation/inputs.c +++ b/r.futures/r.futures.simulation/inputs.c @@ -580,11 +580,11 @@ void read_predictors(struct RasterInputs inputs, struct Segments *segments, static int _read_demand_file(FILE *fp, const char *separator, - float **table, int *demand_years, - map_int_t *region_map) + float ***table, int n_years, int *demand_years, + map_int_t *region_map, map_int_t *reverse_region_map) { - size_t buflen = 4000; + size_t buflen = 35000; char buf[buflen]; // read in the first row (header) if (G_getl2(buf, buflen, fp) == 0) @@ -605,9 +605,23 @@ static int _read_demand_file(FILE *fp, const char *separator, int count; // skip first column which does not contain id of the region unsigned i; + int count_regions = map_nitems(region_map); for (i = 1; i < ntokens; i++) { G_chop(tokens[i]); - G_ilist_add(ids, atoi(tokens[i])); + int region_ID = atoi(tokens[i]); + G_ilist_add(ids, region_ID); + /* include subregions outside of subregion map too */ + int *idx = map_get_int(region_map, region_ID); + if (!idx) { + map_set_int(region_map, region_ID, count_regions); + map_set_int(reverse_region_map, count_regions, region_ID); + count_regions++; + } + } + /* once we know how big the table is, allocate it */ + *table = (float **) G_malloc(map_nitems(region_map) * sizeof(float *)); + for (unsigned i = 0; i < map_nitems(region_map); i++) { + (*table)[i] = (float *) G_malloc(n_years * sizeof(float)); } int years = 0; @@ -628,7 +642,7 @@ static int _read_demand_file(FILE *fp, const char *separator, int *idx = map_get_int(region_map, ids->value[count]); if (idx) { G_chop(tokens[i]); - table[*idx][years] = atof(tokens[i]); + (*table)[*idx][years] = atof(tokens[i]); } count++; } @@ -640,7 +654,8 @@ static int _read_demand_file(FILE *fp, const char *separator, return years; } -void read_demand_file(struct Demand *demandInfo, map_int_t *region_map) +void read_demand_file(struct Demand *demandInfo, map_int_t *region_map, + map_int_t *reverse_region_map) { FILE *fp_cell = NULL, *fp_population = NULL; if ((fp_cell = fopen(demandInfo->cells_filename, "r")) == NULL) @@ -670,13 +685,9 @@ void read_demand_file(struct Demand *demandInfo, map_int_t *region_map) } demandInfo->years = (int *) G_malloc(countlines * sizeof(int)); - demandInfo->cells_table = (float **) G_malloc(map_nitems(region_map) * sizeof(float *)); - for (unsigned i = 0; i < map_nitems(region_map); i++) { - demandInfo->cells_table[i] = (float *) G_malloc(countlines * sizeof(float)); - } int num_years = _read_demand_file(fp_cell, demandInfo->separator, - demandInfo->cells_table, - demandInfo->years, region_map); + &(demandInfo->cells_table), countlines, + demandInfo->years, region_map, reverse_region_map); demandInfo->max_subregions = map_nitems(region_map); demandInfo->max_steps = num_years; G_verbose_message("Number of steps in area demand file: %d", num_years); @@ -684,13 +695,9 @@ void read_demand_file(struct Demand *demandInfo, map_int_t *region_map) if (demandInfo->has_population) { int *years2 = (int *) G_malloc(countlines * sizeof(int)); - demandInfo->population_table = (float **) G_malloc(map_nitems(region_map) * sizeof(float *)); - for (unsigned i = 0; i < map_nitems(region_map); i++) { - demandInfo->population_table[i] = (float *) G_malloc(countlines * sizeof(float)); - } int num_years2 = _read_demand_file(fp_population, demandInfo->separator, - demandInfo->population_table, - years2, region_map); + &(demandInfo->population_table), countlines, + years2, region_map, reverse_region_map); // check files for consistency if (num_years != num_years2) G_fatal_error(_("Area and population demand files (<%s> and <%s>) " diff --git a/r.futures/r.futures.simulation/inputs.h b/r.futures/r.futures.simulation/inputs.h index d015568..80710ee 100644 --- a/r.futures/r.futures.simulation/inputs.h +++ b/r.futures/r.futures.simulation/inputs.h @@ -182,7 +182,7 @@ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, void read_predictors(struct RasterInputs inputs, struct Segments *segments, const struct Potential *potential, const struct SegmentMemory segment_info); -void read_demand_file(struct Demand *demandInfo, map_int_t *region_map); +void read_demand_file(struct Demand *demandInfo, map_int_t *region_map, map_int_t *reverse_region_map); void fill_predictor_map(struct RasterInputs inputs, map_int_t *predictor_map, int num_predictors); void read_potential_file(struct Potential *potentialInfo, map_int_t *region_map, map_int_t *predictor_map); diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index e4e7984..08ee470 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -851,7 +851,7 @@ int main(int argc, char **argv) if (opt.outputCellDemandFile->answer) demand_info.cells_output_filename = opt.outputCellDemandFile->answer; demand_info.separator = G_option_to_separator(opt.separator); - read_demand_file(&demand_info, ®ion_map); + read_demand_file(&demand_info, ®ion_map, &reverse_region_map); max_steps = demand_info.max_steps; internal_step = 0; From 7eb5102c1347f4f1cbe31a4b0db3f8cb2cdb2627 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Fri, 5 Aug 2022 15:22:45 -0400 Subject: [PATCH 06/11] allow distributed redistribution --- r.futures/r.futures.simulation/inputs.c | 3 +- r.futures/r.futures.simulation/inputs.h | 2 +- r.futures/r.futures.simulation/main.c | 27 ++++++++++-- r.futures/r.futures.simulation/redistribute.c | 42 +++++++++++++------ r.futures/r.futures.simulation/redistribute.h | 8 ++-- r.futures/r.futures.simulation/simulation.c | 3 +- r.futures/r.futures.simulation/simulation.h | 2 +- 7 files changed, 64 insertions(+), 23 deletions(-) diff --git a/r.futures/r.futures.simulation/inputs.c b/r.futures/r.futures.simulation/inputs.c index 31daabc..f413158 100644 --- a/r.futures/r.futures.simulation/inputs.c +++ b/r.futures/r.futures.simulation/inputs.c @@ -104,7 +104,7 @@ void initialize_incentive(struct Potential *potential_info, float exponent) */ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, struct SegmentMemory segment_info, map_int_t *region_map, - map_int_t *reverse_region_map, + map_int_t *reverse_region_map, map_int_t *internal_region_map, map_int_t *potential_region_map, map_int_t *HUC_map, map_float_t *max_flood_probability_map, map_int_t *DDF_region_map, bool steering) @@ -300,6 +300,7 @@ void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, region_pindex = map_get_int(region_map, c); if (!region_pindex) { map_set_int(region_map, c, count_regions); + map_set_int(internal_region_map, c, count_regions); map_set_int(reverse_region_map, count_regions, c); region_index = count_regions; count_regions++; diff --git a/r.futures/r.futures.simulation/inputs.h b/r.futures/r.futures.simulation/inputs.h index 80710ee..82a95d9 100644 --- a/r.futures/r.futures.simulation/inputs.h +++ b/r.futures/r.futures.simulation/inputs.h @@ -174,7 +174,7 @@ size_t estimate_undev_size(struct RasterInputs inputs); void initialize_incentive(struct Potential *potential_info, float exponent); void read_input_rasters(struct RasterInputs inputs, struct Segments *segments, struct SegmentMemory segment_info, map_int_t *region_map, - map_int_t *reverse_region_map, + map_int_t *reverse_region_map, map_int_t *internal_region_map, map_int_t *potential_region_map, map_int_t *HUC_map, map_float_t *max_flood_probability_map, map_int_t *DDF_region_map, diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index 08ee470..921bd29 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -157,6 +157,7 @@ int main(int argc, char **argv) *cellDemandFile, *populationDemandFile, *separator, *density, *densityCapacity, *outputDensity, *redevelopmentLag, *redevelopmentPotentialFile, *redistributionMatrix, *redistributionMatrixOutput, + *redistributionMatrixExternalOutput, *HAND, *HAND_percentile, *floodInputFile, *floodLog, *depthDamageFunc, *ddf_subregions, *response_func, *responseStddev, *adaptations, *adaptiveCapacity, *HUCs, *outputAdaptation, @@ -188,6 +189,7 @@ int main(int argc, char **argv) struct RasterInputs raster_inputs; map_int_t region_map; map_int_t reverse_region_map; + map_int_t internal_region_map; map_int_t potential_region_map; map_int_t predictor_map; map_float_t max_flood_probability_map; @@ -418,6 +420,12 @@ int main(int argc, char **argv) opt.redistributionMatrixOutput->description = _("Base name for output file containing matrix of pixels moved from one subregion to another"); opt.redistributionMatrixOutput->guisection = _("Climate scenarios"); + opt.redistributionMatrixExternalOutput = G_define_standard_option(G_OPT_F_OUTPUT); + opt.redistributionMatrixExternalOutput->key = "redistribution_external_output"; + opt.redistributionMatrixExternalOutput->required = NO; + opt.redistributionMatrixExternalOutput->description = _("Base name for output file containing matrix of pixels moved from one subregion to another"); + opt.redistributionMatrixExternalOutput->guisection = _("Steering"); + opt.HAND = G_define_standard_option(G_OPT_R_INPUT); opt.HAND->key = "hand"; opt.HAND->required = NO; @@ -801,12 +809,13 @@ int main(int argc, char **argv) // read Subregions layer map_init(®ion_map); map_init(&reverse_region_map); + map_init(&internal_region_map); map_init(&potential_region_map); map_init(&predictor_map); map_init(&DDF_region_map); G_verbose_message("Reading input rasters..."); read_input_rasters(raster_inputs, &segments, segment_info, ®ion_map, - &reverse_region_map, &potential_region_map, + &reverse_region_map, &internal_region_map, &potential_region_map, &HUC_map, &max_flood_probability_map, &DDF_region_map, flg.steering->answer); if (flood_inputs.array) { @@ -863,7 +872,14 @@ int main(int argc, char **argv) /* check redistribution matrix output files */ if (opt.redistributionMatrixOutput->answer) { redistr_matrix.output_basename = opt.redistributionMatrixOutput->answer; - if (check_matrix_filenames_exist(&redistr_matrix, max_steps)) { + if (check_matrix_filenames_exist(&redistr_matrix, false, max_steps)) { + if (!G_check_overwrite(argc, argv)) + G_fatal_error(_("At least one of the requested matrix output files exists. Use --o to overwrite.")); + } + } + if (opt.redistributionMatrixExternalOutput->answer) { + redistr_matrix.output_external_basename = opt.redistributionMatrixExternalOutput->answer; + if (check_matrix_filenames_exist(&redistr_matrix, true, max_steps)) { if (!G_check_overwrite(argc, argv)) G_fatal_error(_("At least one of the requested matrix output files exists. Use --o to overwrite.")); } @@ -932,13 +948,15 @@ int main(int argc, char **argv) update_flood_probability(step, &flood_inputs, &segments, &HUC_map, &max_flood_probability_map); for (HUC = 0; HUC < map_nitems(&HUC_map); HUC++) climate_step(&segments, &demand_info, &bboxes, - &redistr_matrix, ®ion_map, &reverse_region_map, + &redistr_matrix, ®ion_map, &reverse_region_map, &internal_region_map, step, &leaving_population, &HUC_bbox_vals, HAND_percentile, &max_flood_probability_map, &flood_inputs, &flood_log, &DDF, &response_relation, HUC); if (opt.redistributionMatrixOutput->answer) - write_redistribution_matrix(&redistr_matrix, step, max_steps); + write_redistribution_matrix(&redistr_matrix, false, step, max_steps); + if (opt.redistributionMatrixExternalOutput->answer) + write_redistribution_matrix(&redistr_matrix, true, step, max_steps); } /* export developed for that step */ if (opt.outputSeries->answer) { @@ -1009,6 +1027,7 @@ int main(int argc, char **argv) } map_deinit(®ion_map); map_deinit(&reverse_region_map); + map_deinit(&internal_region_map); map_deinit(&predictor_map); map_deinit(&potential_region_map); map_deinit(&DDF_region_map); diff --git a/r.futures/r.futures.simulation/redistribute.c b/r.futures/r.futures.simulation/redistribute.c index 21e0c50..953ea08 100644 --- a/r.futures/r.futures.simulation/redistribute.c +++ b/r.futures/r.futures.simulation/redistribute.c @@ -1,4 +1,4 @@ -/*! +/*! \file redistribute.c \brief Functions to redistribute population @@ -63,7 +63,7 @@ int pick_region(const float *probabilities, int size) * \param leaving_population population leaving outside of study area */ void redistribute(struct RedistributionMatrix *matrix, struct Demand *demand, - int regionID, int num_px, map_int_t *region_map, + int regionID, int num_px, map_int_t *region_map, map_int_t *internal_region_map, int step, float *leaving_population) { int to_idx; @@ -71,6 +71,7 @@ void redistribute(struct RedistributionMatrix *matrix, struct Demand *demand, int *to_ID; int *demand_to_idx; int *demand_from_idx; + int *internal_to_idx; float density_from, density_to; float to_px; @@ -97,7 +98,13 @@ void redistribute(struct RedistributionMatrix *matrix, struct Demand *demand, to_px = num_px * density_from / density_to; /* increase number of px to grow next step */ if (step + 1 < demand->max_steps) { - demand->cells_table[*demand_to_idx][step + 1] += to_px; + internal_to_idx = map_get_int(internal_region_map, *to_ID); + /* if destination is inside study area, apply to demand + otherwise record in external matrix */ + if (internal_to_idx) + demand->cells_table[*demand_to_idx][step + 1] += to_px; + else + matrix->external_px[*from_idx][to_idx] += to_px; G_debug(2, "%f cells moved from %d to %d in step %d", to_px, regionID, *to_ID, step); matrix->moved_px[*from_idx][to_idx] += to_px; } @@ -162,6 +169,7 @@ void read_redistribution_matrix(struct RedistributionMatrix *matrix) matrix->dim_from = matrix->dim_to; matrix->probabilities = (float **) G_malloc(matrix->dim_from * sizeof(float *)); matrix->moved_px = (float **) G_malloc(matrix->dim_from * sizeof(float *)); + matrix->external_px = (float **) G_malloc(matrix->dim_from * sizeof(float *)); matrix->max_dim_from = matrix->dim_from; row = 0; @@ -175,6 +183,7 @@ void read_redistribution_matrix(struct RedistributionMatrix *matrix) /* allocate row */ matrix->probabilities[row] = (float *) G_malloc(matrix->dim_to * sizeof(float)); matrix->moved_px[row] = (float *) G_malloc(matrix->dim_to * sizeof(float)); + matrix->external_px[row] = (float *) G_malloc(matrix->dim_to * sizeof(float)); for (col = 0; col < ntokens2; col++) { if (col == 0) { map_set(&matrix->from_map, tokens2[col], row); @@ -184,6 +193,7 @@ void read_redistribution_matrix(struct RedistributionMatrix *matrix) /* convert from % */ matrix->probabilities[row][col - 1] = atof(tokens2[col]) / 100.; matrix->moved_px[row][col - 1] = 0; + matrix->external_px[row][col - 1] = 0; } } row++; @@ -191,6 +201,7 @@ void read_redistribution_matrix(struct RedistributionMatrix *matrix) new_size = 2 * matrix->max_dim_from; matrix->probabilities = (float **) G_realloc(matrix->probabilities, new_size * sizeof(float *)); matrix->moved_px = (float **) G_realloc(matrix->moved_px, new_size * sizeof(float *)); + matrix->external_px = (float **) G_realloc(matrix->external_px, new_size * sizeof(float *)); matrix->max_dim_from = new_size; } @@ -210,14 +221,14 @@ void read_redistribution_matrix(struct RedistributionMatrix *matrix) * \param nsteps Number of steps in simulation * \return */ -static char* get_matrix_filename(const struct RedistributionMatrix *matrix, int step, int nsteps) +static char* get_matrix_filename(const struct RedistributionMatrix *matrix, bool external, int step, int nsteps) { const char *name; const char *ext; char *filename; ext = ".csv"; - name = name_for_step(matrix->output_basename, step, nsteps); + name = name_for_step(external ? matrix->output_external_basename : matrix->output_basename, step, nsteps); filename = G_malloc((strlen(name) + strlen(ext) + 1) * sizeof(char)); sprintf(filename, "%s%s", name, ext); return filename; @@ -229,12 +240,12 @@ static char* get_matrix_filename(const struct RedistributionMatrix *matrix, int * \param nsteps Number of steps in simulation * \return True if any of the files exist otherwise false */ -bool check_matrix_filenames_exist(const struct RedistributionMatrix *matrix, int nsteps) +bool check_matrix_filenames_exist(const struct RedistributionMatrix *matrix, bool external, int nsteps) { char *filename; int step; for (step = 0; step < nsteps; step++) { - filename = get_matrix_filename(matrix, step, nsteps); + filename = get_matrix_filename(matrix, external, step, nsteps); if (access(filename, F_OK) != -1) { G_free(filename); return true; @@ -247,11 +258,12 @@ bool check_matrix_filenames_exist(const struct RedistributionMatrix *matrix, int /*! * \brief Write redistribution matrix (number of moved pixels among counties) * \param matrix structure + * \param external if write external moved px (for steered distributed runs) * \param step step number * \param nsteps total number of steps (for file name padding) */ void write_redistribution_matrix(struct RedistributionMatrix *matrix, - int step, int nsteps) + bool external, int step, int nsteps) { FILE *fp; const char *name; @@ -261,7 +273,10 @@ void write_redistribution_matrix(struct RedistributionMatrix *matrix, int *ID; ext = ".csv"; - name = name_for_step(matrix->output_basename, step, nsteps); + if (external) + name = name_for_step(matrix->output_external_basename, step, nsteps); + else + name = name_for_step(matrix->output_basename, step, nsteps); filename = G_malloc((strlen(name) + strlen(ext) + 1) * sizeof(char)); sprintf(filename, "%s%s", name, ext); fp = fopen(filename, "w+"); @@ -271,14 +286,15 @@ void write_redistribution_matrix(struct RedistributionMatrix *matrix, fprintf(fp, ",%d", *ID); } fprintf(fp, "\n"); + float **matrix_px = external ? matrix->external_px : matrix->moved_px; for (row = 0; row < matrix->dim_from; row++) { ID = map_get_int(&matrix->reverse_from_map, row); fprintf(fp, "%d", *ID); for (col = 0; col < matrix->dim_to; col++) { - if (matrix->moved_px[row][col] > 0) - fprintf(fp, ",%f", matrix->moved_px[row][col]); + if (matrix_px[row][col] > 0) + fprintf(fp, ",%f", matrix_px[row][col]); else - fprintf(fp, ",%d", (int)matrix->moved_px[row][col]); + fprintf(fp, ",%d", (int)matrix_px[row][col]); } fprintf(fp, "\n"); } @@ -292,9 +308,11 @@ void free_redistribution_matrix(struct RedistributionMatrix *matrix) for (i = 0; i < matrix->dim_from; i++) { G_free(matrix->probabilities[i]); G_free(matrix->moved_px[i]); + G_free(matrix->external_px[i]); } G_free(matrix->probabilities); G_free(matrix->moved_px); + G_free(matrix->external_px); map_deinit(&matrix->from_map); map_deinit(&matrix->to_map); map_deinit(&matrix->reverse_from_map); diff --git a/r.futures/r.futures.simulation/redistribute.h b/r.futures/r.futures.simulation/redistribute.h index 8cdac5f..8447899 100644 --- a/r.futures/r.futures.simulation/redistribute.h +++ b/r.futures/r.futures.simulation/redistribute.h @@ -8,8 +8,10 @@ struct RedistributionMatrix { const char *filename; const char *output_basename; + const char *output_external_basename; float **probabilities; float **moved_px; + float **external_px; int dim_from; int dim_to; int max_dim_from; @@ -19,10 +21,10 @@ struct RedistributionMatrix }; void redistribute(struct RedistributionMatrix *matrix, struct Demand *demand, - int regionID, int num_px, map_int_t *region_map, + int regionID, int num_px, map_int_t *region_map, map_int_t *internal_region_map, int step, float *leaving_population); void read_redistribution_matrix(struct RedistributionMatrix *matrix); -bool check_matrix_filenames_exist(const struct RedistributionMatrix *matrix, int nsteps); -void write_redistribution_matrix(struct RedistributionMatrix *matrix, int step, int nsteps); +bool check_matrix_filenames_exist(const struct RedistributionMatrix *matrix, bool external, int nsteps); +void write_redistribution_matrix(struct RedistributionMatrix *matrix, bool external, int step, int nsteps); void free_redistribution_matrix(struct RedistributionMatrix *matrix); #endif // FUTURES_REDISTRIBUTE_H diff --git a/r.futures/r.futures.simulation/simulation.c b/r.futures/r.futures.simulation/simulation.c index f2911c5..203094f 100644 --- a/r.futures/r.futures.simulation/simulation.c +++ b/r.futures/r.futures.simulation/simulation.c @@ -444,6 +444,7 @@ void compute_step(struct Developables *undev_cells, struct Developables *dev_cel void climate_step(struct Segments *segments, struct Demand *demand, struct BBoxes *bboxes, struct RedistributionMatrix *matrix, map_int_t *region_map, map_int_t *reverse_region_map, + map_int_t *internal_region_map, int step, float *leaving_population, struct HAND_bbox_values *HAND_bbox_vals, float percentile, @@ -519,7 +520,7 @@ void climate_step(struct Segments *segments, struct Demand *demand, Segment_get(&segments->subregions, (void *)®ion_from_idx, row, col); region_from_ID = map_get_int(reverse_region_map, region_from_idx); redistribute(matrix, demand, *region_from_ID, 1, - region_map, step, leaving_population); + region_map, internal_region_map, step, leaving_population); } else if (response == Adapt) { adapt(&segments->adaptation, flood_probability, row, col); diff --git a/r.futures/r.futures.simulation/simulation.h b/r.futures/r.futures.simulation/simulation.h index 86b5311..5e69f3f 100644 --- a/r.futures/r.futures.simulation/simulation.h +++ b/r.futures/r.futures.simulation/simulation.h @@ -45,7 +45,7 @@ void compute_step(struct Developables *undev_cells, struct Developables *dev_cel bool overgrow); void climate_step(struct Segments *segments, struct Demand *demand, struct BBoxes *bboxes, struct RedistributionMatrix *matrix, - map_int_t *region_map, map_int_t *reverse_region_map, + map_int_t *region_map, map_int_t *reverse_region_map, map_int_t *internal_region_map, int step, float *leaving_population, struct HAND_bbox_values *HAND_bbox_vals, float percentile, map_float_t *flood_probability_map, const struct FloodInputs *flood_inputs, From d15923a9c031312936832fdcab857d222bae0d51 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Wed, 26 Oct 2022 11:12:42 -0400 Subject: [PATCH 07/11] run simulation only over counties existing in subregions map --- r.futures/r.futures.simulation/main.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index 921bd29..b69443d 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -907,15 +907,15 @@ int main(int argc, char **argv) /* read Patch sizes file */ G_verbose_message("Reading patch size file..."); patch_sizes.filename = opt.patchFile->answer; - read_patch_sizes(&patch_sizes, ®ion_map, discount_factor); + read_patch_sizes(&patch_sizes, &internal_region_map, discount_factor); - undev_cells = initialize_developables(map_nitems(®ion_map), undev_estimate); - patch_overflow = G_calloc(map_nitems(®ion_map), sizeof(int)); + undev_cells = initialize_developables(map_nitems(&internal_region_map), undev_estimate); + patch_overflow = G_calloc(map_nitems(&internal_region_map), sizeof(int)); /* redevelopment */ if (segments.use_density) { - dev_cells = initialize_developables(map_nitems(®ion_map), undev_estimate); - population_overflow = G_calloc(map_nitems(®ion_map), sizeof(float)); + dev_cells = initialize_developables(map_nitems(&internal_region_map), undev_estimate); + population_overflow = G_calloc(map_nitems(&internal_region_map), sizeof(float)); } else { dev_cells = NULL; @@ -931,11 +931,12 @@ int main(int argc, char **argv) recompute_probabilities(dev_cells, &segments, &redev_potential_info, true); if (step == max_steps - 1) overgrow = false; - for (region = 0; region < map_nitems(®ion_map); region++) { + for (region = 0; region < map_nitems(&internal_region_map); region++) { + /* Indices of regions present in subregions always start with 0 because they are read in first */ region_id = map_get_int(&reverse_region_map, region); G_verbose_message("Computing step %d (out of %d), region %d (%d out of %d)", step + 1, max_steps, *region_id, - region + 1, map_nitems(®ion_map)); + region + 1, map_nitems(&internal_region_map)); compute_step(undev_cells, dev_cells, &demand_info, search_alg, &segments, &patch_sizes, &patch_info, &devpressure_info, patch_overflow, population_overflow, &redistr_matrix, step, region, &reverse_region_map, overgrow); From 4bf8f4ce87a445ab53ab8d9cf991492635e71ac5 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Wed, 26 Oct 2022 11:16:14 -0400 Subject: [PATCH 08/11] add steering tests --- .../testsuite/data/result_steering.pack | Bin 0 -> 113023 bytes .../data/result_steering_distributed.pack | Bin 0 -> 113202 bytes .../test_r_futures_simulation_steering.py | 352 ++++++++++++++++++ 3 files changed, 352 insertions(+) create mode 100644 r.futures/r.futures.simulation/testsuite/data/result_steering.pack create mode 100644 r.futures/r.futures.simulation/testsuite/data/result_steering_distributed.pack create mode 100644 r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py diff --git a/r.futures/r.futures.simulation/testsuite/data/result_steering.pack b/r.futures/r.futures.simulation/testsuite/data/result_steering.pack new file mode 100644 index 0000000000000000000000000000000000000000..22d25ab6d4582a5378602d0f86b21203f3d937ac GIT binary patch literal 113023 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

BlkuexP1eheZh~H5C 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 literal 0 HcmV?d00001 diff --git a/r.futures/r.futures.simulation/testsuite/data/result_steering_distributed.pack b/r.futures/r.futures.simulation/testsuite/data/result_steering_distributed.pack new file mode 100644 index 0000000000000000000000000000000000000000..73841f75c95aa6f9979bc3992e63541a0da6cc75 GIT binary patch literal 113202 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 Gzx@xur=PC? literal 0 HcmV?d00001 diff --git a/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py b/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py new file mode 100644 index 0000000..4ffd0b7 --- /dev/null +++ b/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python3 + +from grass.gunittest.case import TestCase +from grass.gunittest.main import test +import grass.script as gs +import unittest + + +def compare_base_stats(reference, output_map): + def stats(input_map): + data = gs.read_command( + "r.stats", flags="cn", input=["zipcodes", input_map], separator="comma" + ) + cell_list = [] + for line in data.strip().splitlines(): + zipcode, step, cells = line.split(",") + if step == "-1": + cell_list.append(int(cells)) + return cell_list + + reference_stats = stats(reference) + output_stats = stats(output_map) + return [ + 100 * abs(r - o) / (r if r > o else o) + for r, o in zip(reference_stats, output_stats) + ] + + +class TestSteering(TestCase): + + output = "pga_output" + output_1 = "pga_output_1" + output_2 = "pga_output_2" + result = "result" + result_steering = "result_steering" + result_steering_distributed = "result_steering_distributed" + output_demand = "output_demand_file.csv" + output_demand_1 = "output_demand_file_1.csv" + output_demand_2 = "output_demand_file_2.csv" + output_development_pressure = "output_development_pressure" + output_development_pressure_1 = "output_development_pressure_1" + output_development_pressure_2 = "output_development_pressure_2" + + @classmethod + def setUpClass(cls): + cls.use_temp_region() + cls.runModule("g.region", raster="lsat7_2002_30@PERMANENT") + cls.runModule("r.unpack", input="data/result.pack", output=cls.result) + cls.runModule( + "r.unpack", input="data/result_steering.pack", output=cls.result_steering + ) + cls.runModule( + "r.unpack", + input="data/result_steering_distributed.pack", + output=cls.result_steering_distributed, + ) + cls.runModule( + "r.mapcalc", + expression="ndvi_2002 = double(lsat7_2002_40@PERMANENT - lsat7_2002_30@PERMANENT) / double(lsat7_2002_40@PERMANENT + lsat7_2002_30@PERMANENT)", + ) + cls.runModule( + "r.mapcalc", + expression="ndvi_1987 = double(lsat5_1987_40@landsat - lsat5_1987_30@landsat) / double(lsat5_1987_40@landsat + lsat5_1987_30@landsat)", + ) + cls.runModule( + "r.mapcalc", + expression="urban_1987 = if(ndvi_1987 <= 0.1 && isnull(lakes), 1, if(isnull(lakes), 0, null()))", + ) + cls.runModule( + "r.mapcalc", + expression="urban_2002 = if(ndvi_2002 <= 0.1 && isnull(lakes), 1, if(isnull(lakes), 0, null()))", + ) + cls.runModule("r.slope.aspect", elevation="elevation", slope="slope") + cls.runModule("r.grow.distance", input="lakes", distance="lakes_dist") + cls.runModule("r.mapcalc", expression="lakes_dist_km = lakes_dist/1000.") + cls.runModule("v.to.rast", input="streets_wake", output="streets", use="val") + cls.runModule("r.grow.distance", input="streets", distance="streets_dist") + cls.runModule("r.mapcalc", expression="streets_dist_km = streets_dist/1000.") + cls.runModule( + "r.futures.devpressure", + input="urban_2002", + output="devpressure", + method="gravity", + size=15, + flags="n", + ) + cls.runModule( + "r.watershed", + elevation="elevation", + drainage="drainage", + stream="streams", + threshold=1000, + ) + cls.runModule( + "r.watershed", elevation="elevation", basin="basin", threshold=5000 + ) + cls.runModule("r.null", map="basin", null=1000) + cls.runModule( + "r.stream.distance", + stream_rast="streams", + direction="drainage", + elevation="elevation", + method="downstream", + difference="HAND", + ) + cls.runModule("r.grow.distance", input="HAND", value="HAND_filled") + cls.runModule( + "r.lake", + elevation="HAND_filled", + water_level=8, + lake="flood_1", + seed="streams", + ) + cls.runModule( + "r.lake", + elevation="HAND_filled", + water_level=4, + lake="flood_2", + seed="streams", + ) + cls.runModule( + "r.lake", + elevation="HAND_filled", + water_level=2, + lake="flood_3", + seed="streams", + ) + cls.runModule( + "r.mapcalc", + expression="flood_1 = if (flood_1, 0.05, null())", + overwrite=True, + ) + cls.runModule( + "r.mapcalc", + expression="flood_2 = if (flood_2, 0.1, null())", + overwrite=True, + ) + cls.runModule( + "r.mapcalc", + expression="flood_3 = if (flood_3, 0.2, null())", + overwrite=True, + ) + cls.runModule( + "r.patch", input="flood_3,flood_2,flood_1", output="flood_probability" + ) + cls.runModule("r.null", map="flood_probability", null=0) + cls.runModule( + "r.mapcalc", expression="acapacity = rand(-100, 100) * 0.01", seed=1 + ) + cls.runModule( + "r.mapcalc", expression="urban_2002_steered = if (urban_2002 == 0, -1, 0)" + ) + rules_1 = """27511 = 27511 + 27513 = 27513 + 27518 = 27518 + 27539 = 27539 + 27606 = 27606 + 27607 = 27607""" + gs.write_command( + "r.reclass", + input="zipcodes", + output="subregions_1", + rules="-", + stdin=rules_1, + ) + rules_2 = """27529 = 27529 + 27601 =27601 + 27603 = 27603 + 27604 = 27604 + 27605 = 27605 + 27608 = 27608 + 27610 = 27610""" + gs.write_command( + "r.reclass", + input="zipcodes", + output="subregions_2", + rules="-", + stdin=rules_2, + ) + + @classmethod + def tearDownClass(cls): + cls.runModule( + "g.remove", + flags="f", + type="raster", + name=[ + "slope", + "lakes_dist", + "lakes_dist_km", + "streets", + "streets_dist", + "streets_dist_km", + "devpressure", + "ndvi_2002", + "ndvi_1987", + "urban_1987", + "urban_2002", + "drainage", + "HAND", + "HAND_filled", + "streams", + "flood_1", + "flood_2", + "flood_3", + "flood_probability", + "acapacity", + "basin", + "urban_2002_steered", + "subregions_1", + "subregions_2", + cls.result, + cls.result_steering, + cls.result_steering_distributed, + ], + ) + cls.del_temp_region() + gs.try_remove(cls.output_demand) + gs.try_remove(cls.output_demand_1) + gs.try_remove(cls.output_demand_2) + + def tearDown(self): + self.runModule( + "g.remove", + flags="f", + type="raster", + name=[ + self.output, + self.output_1, + self.output_2, + self.output_development_pressure, + self.output_development_pressure_1, + self.output_development_pressure_2, + ], + ) + + # @unittest.skip + def test_pga_run_simple_steering(self): + """Test if results is in expected limits""" + for i in range(0, 7): + self.assertModule( + "r.futures.simulation", + developed="urban_2002_steered" if i == 0 else self.output, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.csv", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="zipcodes", + demand="data/demand.csv" if i == 0 else self.output_demand, + output=self.output, + flags="r", + output_development_pressure=self.output_development_pressure, + output_demand=self.output_demand, + num_steps=1, + steering_step=i, + overwrite=True, + ) + differences = compare_base_stats(self.result, self.output) + for difference in differences: + self.assertLess(difference, 5, "Cell count differs too much.") + self.assertRastersNoDifference( + actual=self.output, reference=self.result_steering, precision=1e-6 + ) + + def test_pga_run_distributed_steering(self): + """Test if results is in expected limits""" + for i in range(0, 7): + self.assertModule( + "r.futures.simulation", + developed="urban_2002_steered" if i == 0 else self.output_1, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure_1, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.csv", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="subregions_1", + demand="data/demand.csv" if i == 0 else self.output_demand_1, + output=self.output_1, + flags="r", + output_development_pressure=self.output_development_pressure_1, + output_demand=self.output_demand_1, + num_steps=1, + steering_step=i, + overwrite=True, + ) + self.assertModule( + "r.futures.simulation", + developed="urban_2002_steered" if i == 0 else self.output_2, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure_2, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.csv", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="subregions_2", + demand="data/demand.csv" if i == 0 else self.output_demand_2, + output=self.output_2, + flags="r", + output_development_pressure=self.output_development_pressure_2, + output_demand=self.output_demand_2, + num_steps=1, + steering_step=i, + overwrite=True, + ) + self.runModule( + "r.patch", input=[self.output_1, self.output_2], output=self.output + ) + differences = compare_base_stats(self.result, self.output) + for difference in differences: + self.assertLess(difference, 6, "Cell count differs too much.") + self.assertRastersNoDifference( + actual=self.output, + reference=self.result_steering_distributed, + precision=1e-6, + ) + + +if __name__ == "__main__": + test() From 796b798601e307290594cd83066dd062a6818469 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Thu, 27 Oct 2022 12:16:40 -0400 Subject: [PATCH 09/11] output demand in the same column order, add test for distributed and steered version --- r.futures/r.futures.simulation/inputs.c | 20 +-- r.futures/r.futures.simulation/inputs.h | 3 + r.futures/r.futures.simulation/main.c | 9 +- r.futures/r.futures.simulation/output.c | 26 +-- r.futures/r.futures.simulation/output.h | 3 +- .../test_r_futures_simulation_steering.py | 149 +++++++++++++++++- 6 files changed, 181 insertions(+), 29 deletions(-) diff --git a/r.futures/r.futures.simulation/inputs.c b/r.futures/r.futures.simulation/inputs.c index f413158..b653950 100644 --- a/r.futures/r.futures.simulation/inputs.c +++ b/r.futures/r.futures.simulation/inputs.c @@ -581,7 +581,8 @@ void read_predictors(struct RasterInputs inputs, struct Segments *segments, static int _read_demand_file(FILE *fp, const char *separator, - float ***table, int n_years, int *demand_years, + float ***table, struct ilist **header, + int n_years, int *demand_years, map_int_t *region_map, map_int_t *reverse_region_map) { @@ -602,7 +603,7 @@ static int _read_demand_file(FILE *fp, const char *separator, if (ntokens == 0) G_fatal_error("No columns in the header row"); - struct ilist *ids = G_new_ilist(); + *header = G_new_ilist(); int count; // skip first column which does not contain id of the region unsigned i; @@ -610,7 +611,7 @@ static int _read_demand_file(FILE *fp, const char *separator, for (i = 1; i < ntokens; i++) { G_chop(tokens[i]); int region_ID = atoi(tokens[i]); - G_ilist_add(ids, region_ID); + G_ilist_add(*header, region_ID); /* include subregions outside of subregion map too */ int *idx = map_get_int(region_map, region_ID); if (!idx) { @@ -640,7 +641,7 @@ static int _read_demand_file(FILE *fp, const char *separator, demand_years[years] = atoi(tokens[0]); for (unsigned i = 1; i < ntokens; i++) { // skip first column which is the year which we ignore - int *idx = map_get_int(region_map, ids->value[count]); + int *idx = map_get_int(region_map, (*header)->value[count]); if (idx) { G_chop(tokens[i]); (*table)[*idx][years] = atof(tokens[i]); @@ -650,7 +651,6 @@ static int _read_demand_file(FILE *fp, const char *separator, // each line is a year years++; } - G_free_ilist(ids); G_free_tokens(tokens); return years; } @@ -687,8 +687,8 @@ void read_demand_file(struct Demand *demandInfo, map_int_t *region_map, demandInfo->years = (int *) G_malloc(countlines * sizeof(int)); int num_years = _read_demand_file(fp_cell, demandInfo->separator, - &(demandInfo->cells_table), countlines, - demandInfo->years, region_map, reverse_region_map); + &(demandInfo->cells_table), &(demandInfo->cells_header), + countlines, demandInfo->years, region_map, reverse_region_map); demandInfo->max_subregions = map_nitems(region_map); demandInfo->max_steps = num_years; G_verbose_message("Number of steps in area demand file: %d", num_years); @@ -697,8 +697,8 @@ void read_demand_file(struct Demand *demandInfo, map_int_t *region_map, if (demandInfo->has_population) { int *years2 = (int *) G_malloc(countlines * sizeof(int)); int num_years2 = _read_demand_file(fp_population, demandInfo->separator, - &(demandInfo->population_table), countlines, - years2, region_map, reverse_region_map); + &(demandInfo->population_table), &(demandInfo->population_header), + countlines, years2, region_map, reverse_region_map); // check files for consistency if (num_years != num_years2) G_fatal_error(_("Area and population demand files (<%s> and <%s>) " @@ -1184,6 +1184,8 @@ void read_flood_file(struct FloodInputs *flood_inputs) /* read to get length and checks */ i = 0; while (G_getl2(buf, buflen, fp)) { + if (buf[0] == '\0') + continue; // process each column in row tokens = G_tokenize2(buf, flood_inputs->separator, td); ntokens = G_number_of_tokens(tokens); diff --git a/r.futures/r.futures.simulation/inputs.h b/r.futures/r.futures.simulation/inputs.h index 82a95d9..b100ec0 100644 --- a/r.futures/r.futures.simulation/inputs.h +++ b/r.futures/r.futures.simulation/inputs.h @@ -3,6 +3,7 @@ #include #include +#include #include "map.h" enum development_type {DEV_TYPE_INITIAL = 0, @@ -20,6 +21,8 @@ struct Demand const char *population_output_filename; float **cells_table; float **population_table; + struct ilist *cells_header; + struct ilist *population_header; int *years; int max_subregions; int max_steps; diff --git a/r.futures/r.futures.simulation/main.c b/r.futures/r.futures.simulation/main.c index b69443d..0a89b7c 100644 --- a/r.futures/r.futures.simulation/main.c +++ b/r.futures/r.futures.simulation/main.c @@ -910,12 +910,13 @@ int main(int argc, char **argv) read_patch_sizes(&patch_sizes, &internal_region_map, discount_factor); undev_cells = initialize_developables(map_nitems(&internal_region_map), undev_estimate); - patch_overflow = G_calloc(map_nitems(&internal_region_map), sizeof(int)); + /* all demand related arrays need to account for external subregions, hence region_map */ + patch_overflow = G_calloc(map_nitems(®ion_map), sizeof(int)); /* redevelopment */ if (segments.use_density) { dev_cells = initialize_developables(map_nitems(&internal_region_map), undev_estimate); - population_overflow = G_calloc(map_nitems(&internal_region_map), sizeof(float)); + population_overflow = G_calloc(map_nitems(®ion_map), sizeof(float)); } else { dev_cells = NULL; @@ -977,7 +978,7 @@ int main(int argc, char **argv) output_step(&segments.adaptation, &segments.developed, name_step, CELL_TYPE); } if (opt.outputCellDemandFile->answer) - output_demand_file(&demand_info, &reverse_region_map, patch_overflow, step); + output_demand_file(&demand_info, ®ion_map, patch_overflow, step); } /* write */ @@ -1037,11 +1038,13 @@ int main(int argc, char **argv) G_free(demand_info.cells_table[i]); G_free(demand_info.cells_table); G_free(demand_info.years); + G_free_ilist(demand_info.cells_header); } if (demand_info.has_population) { for (int i = 0; i < demand_info.max_subregions; i++) G_free(demand_info.population_table[i]); G_free(demand_info.population_table); + G_free_ilist(demand_info.population_header); } if (potential_info.predictors) { for (int i = 0; i < potential_info.max_predictors; i++) diff --git a/r.futures/r.futures.simulation/output.c b/r.futures/r.futures.simulation/output.c index 353161b..d50758e 100644 --- a/r.futures/r.futures.simulation/output.c +++ b/r.futures/r.futures.simulation/output.c @@ -209,7 +209,7 @@ void output_step(SEGMENT *output_segment, SEGMENT *developed_segment, } -void output_demand_file(struct Demand *demandInfo, map_int_t *reverse_region_map, +void output_demand_file(struct Demand *demandInfo, map_int_t *region_map, int *patch_overflow, int step) { FILE *fp_cell = NULL; @@ -217,28 +217,28 @@ void output_demand_file(struct Demand *demandInfo, map_int_t *reverse_region_map G_fatal_error(_("Cannot open area demand file <%s> for writing"), demandInfo->cells_output_filename); fprintf(fp_cell, "year"); - /* wtite region header */ - for (int region = 0; region < map_nitems(reverse_region_map); region++) { - int *region_id = map_get_int(reverse_region_map, region); - fprintf(fp_cell, ",%d", *region_id); + /* write region header */ + for (int region = 0; region < demandInfo->cells_header->n_values; region++) { + fprintf(fp_cell, ",%d", demandInfo->cells_header->value[region]); } fprintf(fp_cell, "\n"); - int *patch_overflow_copy = G_calloc(map_nitems(reverse_region_map), sizeof(int)); - memcpy(patch_overflow_copy, patch_overflow, sizeof(int) * map_nitems(reverse_region_map)); + int *patch_overflow_copy = G_calloc(map_nitems(region_map), sizeof(int)); + memcpy(patch_overflow_copy, patch_overflow, sizeof(int) * map_nitems(region_map)); for (int row = 0; row < demandInfo->max_steps; row++) { /* write year */ fprintf(fp_cell, "%d", demandInfo->years[row]); - for (int region = 0; region < map_nitems(reverse_region_map); region++) { + for (int region = 0; region < demandInfo->cells_header->n_values; region++) { + int *region_idx = map_get_int(region_map, demandInfo->cells_header->value[region]); /* resolve patch overflow */ - int n_to_convert = lroundf(demandInfo->cells_table[region][row]); + int n_to_convert = lroundf(demandInfo->cells_table[*region_idx][row]); - if ((row == step + 1) && patch_overflow_copy[region] > 0) { - if (n_to_convert - patch_overflow_copy[region] > 0) { - n_to_convert -= patch_overflow_copy[region]; + if ((row == step + 1) && patch_overflow_copy[*region_idx] > 0) { + if (n_to_convert - patch_overflow_copy[*region_idx] > 0) { + n_to_convert -= patch_overflow_copy[*region_idx]; } else { - patch_overflow_copy[region] -= n_to_convert; + patch_overflow_copy[*region_idx] -= n_to_convert; n_to_convert = 0; } } diff --git a/r.futures/r.futures.simulation/output.h b/r.futures/r.futures.simulation/output.h index 7e38533..78f67c5 100644 --- a/r.futures/r.futures.simulation/output.h +++ b/r.futures/r.futures.simulation/output.h @@ -15,6 +15,5 @@ void output_developed_step(SEGMENT *developed_segment, const char *name, int yea int nsteps, bool contains_abandoned); void output_step(SEGMENT *output_segment, SEGMENT *developed_segment, const char *name, RASTER_MAP_TYPE data_type); -void output_demand_file(struct Demand *demandInfo, map_int_t *reverse_region_map, - int *patch_overflow, int step); +void output_demand_file(struct Demand *demandInfo, map_int_t *region_map, int *patch_overflow, int step); #endif // FUTURES_OUTPUT_H diff --git a/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py b/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py index 4ffd0b7..439cf00 100644 --- a/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py +++ b/r.futures/r.futures.simulation/testsuite/test_r_futures_simulation_steering.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 +import pandas as pd from grass.gunittest.case import TestCase from grass.gunittest.main import test import grass.script as gs -import unittest def compare_base_stats(reference, output_map): @@ -40,6 +40,8 @@ class TestSteering(TestCase): output_development_pressure = "output_development_pressure" output_development_pressure_1 = "output_development_pressure_1" output_development_pressure_2 = "output_development_pressure_2" + redistribution_1 = "redistribution_1" + redistribution_2 = "redistribution_2" @classmethod def setUpClass(cls): @@ -150,6 +152,9 @@ def setUpClass(cls): cls.runModule( "r.mapcalc", expression="urban_2002_steered = if (urban_2002 == 0, -1, 0)" ) + cls.runModule( + "r.mapcalc", expression="urban_2002_flooded_steered = if (urban_2002 == 0, -1000, 0)" + ) rules_1 = """27511 = 27511 27513 = 27513 27518 = 27518 @@ -207,6 +212,7 @@ def tearDownClass(cls): "acapacity", "basin", "urban_2002_steered", + "urban_2002_flooded_steered", "subregions_1", "subregions_2", cls.result, @@ -234,7 +240,7 @@ def tearDown(self): ], ) - # @unittest.skip + def test_pga_run_simple_steering(self): """Test if results is in expected limits""" for i in range(0, 7): @@ -347,6 +353,145 @@ def test_pga_run_distributed_steering(self): precision=1e-6, ) + def test_pga_run_flooding_steering(self): + """Test if results is in expected limits""" + for i in range(0, 7): + self.assertModule( + "r.futures.simulation", + developed="urban_2002_flooded_steered" if i == 0 else self.output, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.csv", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="zipcodes", + demand="data/demand.csv" if i == 0 else self.output_demand, + output=self.output, + flags="r", + output_development_pressure=self.output_development_pressure, + output_demand=self.output_demand, + redistribution_matrix="data/matrix.csv", + flood_maps_file="data/flood_depth_input_steered.csv", + adaptive_capacity="acapacity", + huc="basin", + depth_damage_functions="data/damage_curves.csv", + ddf_subregions="zipcodes", + population_demand="data/population_demand.csv", + response_func=[0.25, 0.5, 0.25, 0.5], + response_stddev=0.1, + num_steps=1, + steering_step=i, + overwrite=True, + ) + + def test_pga_run_flooding_distributed_steering(self): + """Test if results is in expected limits""" + for i in range(0, 7): + self.assertModule( + "r.futures.simulation", + developed="urban_2002_flooded_steered" if i == 0 else self.output_1, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure_1, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.csv", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="subregions_1", + demand="data/demand.csv" if i == 0 else self.output_demand_1, + output=self.output_1, + flags="r", + output_development_pressure=self.output_development_pressure_1, + output_demand=self.output_demand_1, + redistribution_matrix="data/matrix.csv", + flood_maps_file="data/flood_depth_input_steered.csv", + adaptive_capacity="acapacity", + huc="basin", + depth_damage_functions="data/damage_curves.csv", + ddf_subregions="zipcodes", + population_demand="data/population_demand.csv", + response_func=[0.25, 0.5, 0.25, 0.5], + response_stddev=0.1, + redistribution_external_output=self.redistribution_1, + num_steps=1, + steering_step=i, + overwrite=True, + ) + self.assertModule( + "r.futures.simulation", + developed="urban_2002_flooded_steered" if i == 0 else self.output_2, + development_pressure="devpressure" + if i == 0 + else self.output_development_pressure_2, + compactness_mean=0.4, + compactness_range=0.05, + discount_factor=0.1, + patch_sizes="data/patches.csv", + predictors=["slope", "lakes_dist_km", "streets_dist_km"], + n_dev_neighbourhood=15, + devpot_params="data/potential.csv", + random_seed=1, + num_neighbors=4, + seed_search="random", + development_pressure_approach="gravity", + gamma=1.5, + scaling_factor=1, + subregions="subregions_2", + demand="data/demand.csv" if i == 0 else self.output_demand_2, + output=self.output_2, + flags="r", + output_development_pressure=self.output_development_pressure_2, + output_demand=self.output_demand_2, + redistribution_matrix="data/matrix.csv", + flood_maps_file="data/flood_depth_input_steered.csv", + adaptive_capacity="acapacity", + huc="basin", + depth_damage_functions="data/damage_curves.csv", + ddf_subregions="zipcodes", + population_demand="data/population_demand.csv", + response_func=[0.25, 0.5, 0.25, 0.5], + response_stddev=0.1, + redistribution_external_output=self.redistribution_2, + num_steps=1, + steering_step=i, + overwrite=True, + ) + if i < 6: + part_1_df = pd.read_csv(f"{self.redistribution_1}_{i + 1}.csv", index_col=0) + part_2_df = pd.read_csv(f"{self.redistribution_2}_{i + 1}.csv", index_col=0) + migrants_row = (part_1_df + part_2_df).sum() + demand_1_df = pd.read_csv(self.output_demand_1, index_col=0) + demand_2_df = pd.read_csv(self.output_demand_2, index_col=0) + # add all migrants to demand for next year + demand_1_df.iloc[i + 1] += migrants_row + demand_2_df.iloc[i + 1] += migrants_row + demand_1_df.round(0).astype(int).to_csv(self.output_demand_1) + demand_2_df.round(0).astype(int).to_csv(self.output_demand_2) + + self.runModule( + "r.patch", input=[self.output_1, self.output_2], output=self.output + ) + if __name__ == "__main__": test() From 20845d4f7b4732e0337bd2cd2bb957a21a625b6b Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Thu, 27 Oct 2022 12:58:05 -0400 Subject: [PATCH 10/11] add pandas to CI for tests --- .github/workflows/ci-compiled.yml | 4 ++++ .github/workflows/ci-ppa.yml | 4 ++++ .github/workflows/requirements.txt | 1 + 3 files changed, 9 insertions(+) create mode 100644 .github/workflows/requirements.txt diff --git a/.github/workflows/ci-compiled.yml b/.github/workflows/ci-compiled.yml index 70f20bf..e8806e7 100644 --- a/.github/workflows/ci-compiled.yml +++ b/.github/workflows/ci-compiled.yml @@ -20,6 +20,10 @@ jobs: sudo apt-get install -y wget git gawk findutils xargs -a <(awk '! /^ *(#|$)/' ".github/workflows/apt.txt") -r -- \ sudo apt-get install -y --no-install-recommends --no-install-suggests + - name: Get Python dependencies + run: | + python -m pip install --upgrade pip + pip install -r ./.github/workflows/requirements.txt - name: Set up R uses: r-lib/actions/setup-r@v1 with: diff --git a/.github/workflows/ci-ppa.yml b/.github/workflows/ci-ppa.yml index 4b416ec..1720f97 100644 --- a/.github/workflows/ci-ppa.yml +++ b/.github/workflows/ci-ppa.yml @@ -23,6 +23,10 @@ jobs: sudo apt-get install -y -qq \ grass grass-dev grass-doc \ gawk findutils + - name: Get Python dependencies + run: | + python -m pip install --upgrade pip + pip install -r ./.github/workflows/requirements.txt - name: Set up R uses: r-lib/actions/setup-r@v1 with: diff --git a/.github/workflows/requirements.txt b/.github/workflows/requirements.txt new file mode 100644 index 0000000..fb6c7ed --- /dev/null +++ b/.github/workflows/requirements.txt @@ -0,0 +1 @@ +pandas From d4c163e5676c22f7ac75b6b382f1e8e3578d7d88 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Thu, 27 Oct 2022 13:41:05 -0400 Subject: [PATCH 11/11] add missing test data file --- .../data/flood_depth_input_steered.csv | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 r.futures/r.futures.simulation/testsuite/data/flood_depth_input_steered.csv diff --git a/r.futures/r.futures.simulation/testsuite/data/flood_depth_input_steered.csv b/r.futures/r.futures.simulation/testsuite/data/flood_depth_input_steered.csv new file mode 100644 index 0000000..37cd37c --- /dev/null +++ b/r.futures/r.futures.simulation/testsuite/data/flood_depth_input_steered.csv @@ -0,0 +1,22 @@ +step,return,map +1,0.05,flood_1 +1,0.1,flood_2 +1,0.2,flood_3 +2,0.05,flood_1 +2,0.1,flood_2 +2,0.2,flood_3 +3,0.05,flood_1 +3,0.1,flood_2 +3,0.2,flood_3 +4,0.05,flood_1 +4,0.1,flood_2 +4,0.2,flood_3 +5,0.05,flood_1 +5,0.1,flood_2 +5,0.2,flood_3 +6,0.05,flood_1 +6,0.1,flood_2 +6,0.2,flood_3 +7,0.05,flood_1 +7,0.1,flood_2 +7,0.2,flood_3