diff --git a/Cell2Fire/Cell2Fire.cpp b/Cell2Fire/Cell2Fire.cpp index d5eb2f10..501a6090 100644 --- a/Cell2Fire/Cell2Fire.cpp +++ b/Cell2Fire/Cell2Fire.cpp @@ -18,6 +18,7 @@ __maintainer__ = "Jaime Carrasco, Cristobal Pais, David Woodruff, David Palacios // Include libraries #include +#include #include #include #include @@ -48,6 +49,7 @@ std::unordered_map> BBOFactors; std::unordered_map> HarvestedCells; std::vector NFTypesCells; std::unordered_map IgnitionHistory; +std::vector initialPoints; /****************************************************************************** Utils @@ -289,7 +291,7 @@ Cell2Fire::Cell2Fire(arguments _args) : CSVWeather(_args.InFolder + "Weather.csv std::vector IgnitionPoints; if(this->args.Ignitions){ - //DEBUGstd::cout << "\nWe have specific ignition points:" << std::endl; + //DEBUG std::cout << "\nWe have specific ignition points:" << std::endl; /* Ignition points */ std::string ignitionFile = args.InFolder + "Ignitions.csv"; @@ -310,9 +312,11 @@ Cell2Fire::Cell2Fire(arguments _args) : CSVWeather(_args.InFolder + "Weather.csv // Ignition points this->IgnitionPoints = std::vector(IgnitionYears, 0); + //std::cout << this->IgnitionPoints[1] << std::endl; + CSVIgnitions.parseIgnitionDF(this->IgnitionPoints, IgnitionsDF, IgnitionYears); //this->IgnitionSets = std::vector>(this->IgnitionPoints.size()); - this->IgnitionSets = std::vector>(this->args.TotalYears); + this->IgnitionSets = std::vector>(args.TotalYears); // Ignition radius @@ -850,7 +854,18 @@ bool Cell2Fire::RunIgnition(std::default_random_engine generator, int ep){ // Ignitions with provided points from CSV else { - int temp = IgnitionPoints[this->year-1]; + + if (initialPoints.empty()) { + initialPoints = this->IgnitionPoints; + } + + std::random_device dev; + std::mt19937 rng(dev()); + std::uniform_int_distribution dist(1,initialPoints.size()); + int rd = dist(rng); + + int temp = initialPoints[rd-1]; + initialPoints.erase(initialPoints.begin() + rd-1); // If ignition Radius != 0, sample from the Radius set if (this->args.IgnitionRadius > 0){ @@ -909,8 +924,6 @@ bool Cell2Fire::RunIgnition(std::default_random_engine generator, int ep){ } - - // If ignition occurs, we update the forest status if (!this->noIgnition) { int newId = it->second.realId; diff --git a/Cell2Fire/Cell2Fire.h b/Cell2Fire/Cell2Fire.h index 4ee04159..46e4315e 100644 --- a/Cell2Fire/Cell2Fire.h +++ b/Cell2Fire/Cell2Fire.h @@ -106,6 +106,7 @@ class Cell2Fire { std::vectorRateOfSpreads; std::vectorFlameLengths; std::vector> IgnitionSets; + std::vector initialPoints; // std::vector IgnitionHistory; // Sets diff --git a/Cell2Fire/FuelModelKitral.cpp b/Cell2Fire/FuelModelKitral.cpp index fbc181d9..713b9121 100644 --- a/Cell2Fire/FuelModelKitral.cpp +++ b/Cell2Fire/FuelModelKitral.cpp @@ -587,8 +587,10 @@ float rate_of_spread_k(inputs *data, fuel_coefs *ptr, main_outs *at) //incluir e p2 = 0.04316; p3 = 13.8; ch = (-2.97374 + 0.262 * rh - 0.00982 * tmp); + // ch = max(1.0, -2.97374 + 0.262 * rh - 0.00982 * tmp); fmc = fmcs[data->nftype][0]*60; //factor de propagacion en m/min - fch = (389.1624 + 14.3 * ch + 0.02 * pow(ch, 2.0)) / (3.559 + 1.6615 * ch + 2.62392 * pow(ch, 2.0)); //es -14.3 segun el libro + // fch = (389.1624 + 14.3 * ch + 0.02 * pow(ch, 2.0)) / (3.559 + 1.6615 * ch + 2.62392 * pow(ch, 2.0)); //es -14.3 segun el libro + fch = min(51.43, 52.3342 * pow(ch, -1.3035)); fv = p1 * exp(-p2 * ws) + p3; if (ps==0){ at->rss = fmc*fch*(fv); diff --git a/Cell2Fire/ReadCSV.cpp b/Cell2Fire/ReadCSV.cpp index 61eceb4c..db6e15e7 100644 --- a/Cell2Fire/ReadCSV.cpp +++ b/Cell2Fire/ReadCSV.cpp @@ -454,7 +454,7 @@ void CSVReader::parseIgnitionDF(std::vector & ig, std::vector test_results/$model-$format/log.txt + for ignition_mode in random raster; do + echo running $model-$format + output_folder=test_results/$model-$format + mkdir -p $output_folder + rm -rf $output_folder/* + if [ "$model" == "fbp" ]; then + additional_args="--cros" + sim_code="C" + elif [ "$model" == "sb" ]; then + additional_args="--scenario 1" + sim_code="S" + elif [ "$model" == "kitral" ]; then + additional_args="" + sim_code="K" + fi + Cell2Fire$1 --input-instance-folder model/$model-$format --output-folder $output_folder --nsims 113 --ignitions-$ignition_mode --output-messages --grids --out-ros --out-intensity --sim ${sim_code} --seed 123 --ignitionsLog $additional_args > test_results/$model-$format-$ignition_mode/log.txt done done set +x # disable debug tracing