From 9e575232f0e1ced96af6392ead6d6207fcc37fb2 Mon Sep 17 00:00:00 2001 From: Dominik Laux Date: Fri, 30 May 2025 15:50:12 +0200 Subject: [PATCH 1/2] feat: implement trigger for resolution --- src/Command.cpp | 26 ++++++++++++++++++++++++++ src/DataBroker.cpp | 2 +- src/FireDomain.cpp | 6 ++++++ src/FireDomain.h | 3 +++ src/SimulationParameters.cpp | 1 - 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/Command.cpp b/src/Command.cpp index 04f46070..e75363f3 100644 --- a/src/Command.cpp +++ b/src/Command.cpp @@ -2003,6 +2003,32 @@ namespace libforefire return normal; } } + if (tmpArgs[0] == "resolution") + { + double newPerimRes = getFloat("perimeterResolution", arg); + double newSpatialInc = getFloat("spatialIncrement", arg); + + FireDomain* domain = getDomain(); + if (domain != nullptr) + { + if (newPerimRes != FLOATERROR) + { + domain->setPerimeterResolution(newPerimRes); + cout << "Updated perimeterResolution to " << newPerimRes << endl; + } + if (newSpatialInc != FLOATERROR) + { + domain->setSpatialIncrement(newSpatialInc); + cout << "Updated spatialIncrement to " << newSpatialInc << endl; + } + return normal; + } + else + { + cout << "Error: No FireDomain available to update resolution parameters." << endl; + return error; + } + } return error; } int Command::include(const string &arg, size_t &numTabs) diff --git a/src/DataBroker.cpp b/src/DataBroker.cpp index 11d586ca..fd5e9c7e 100644 --- a/src/DataBroker.cpp +++ b/src/DataBroker.cpp @@ -1264,7 +1264,7 @@ namespace libforefire if (varName == "altitude" && domain->getDomainID() == 0) { - cout << "HHHHHHHHHHHHHHH read Altitude " << domain->getDomainID() << endl; + cout << "Reading Altitude " << domain->getDomainID() << endl; auto altLayer = constructXYZTLayer(currentVar, SWCorner, spatialExtent, timeOrigin, Lt, -1); registerLayer(varName, altLayer); } diff --git a/src/FireDomain.cpp b/src/FireDomain.cpp index 901baa29..64c94110 100644 --- a/src/FireDomain.cpp +++ b/src/FireDomain.cpp @@ -412,6 +412,12 @@ } return buffer.st_size; } + void FireDomain::setPerimeterResolution(double res) { + this->perimeterResolution = res; + } + void FireDomain::setSpatialIncrement(double inc) { + this->spatialIncrement = inc; + } void FireDomain::pushMultiDomainMetadataInList(size_t id, double lastTime, size_t atmoNX, size_t atmoNY, double nswx, double nswy, double nnex, double nney) { distributedDomainInfo *currentInfo = new distributedDomainInfo; currentInfo->ID = id; diff --git a/src/FireDomain.h b/src/FireDomain.h index 1b1de939..cf0e409a 100644 --- a/src/FireDomain.h +++ b/src/FireDomain.h @@ -326,6 +326,9 @@ class FireDomain: public ForeFireAtom, Visitable { size_t getFreeFluxModelIndex(); + void setPerimeterResolution(double res); + void setSpatialIncrement(double inc); + // Getter for the reference latitude. double getRefLatitude() ; diff --git a/src/SimulationParameters.cpp b/src/SimulationParameters.cpp index e38b32a3..691d4e40 100644 --- a/src/SimulationParameters.cpp +++ b/src/SimulationParameters.cpp @@ -370,7 +370,6 @@ std::string landCoverIndexedCSV = R"(Index;Rhod;Rhol;Md;Ml;sd;sl;e;Sigmad;Sigmal parameters.insert(make_pair("spatialCFLmax", "0.3")); parameters.insert(make_pair("spatialIncrement", "2")); parameters.insert(make_pair("spatialCFLmax", "0.3")); - parameters.insert(make_pair("spatialIncrement", "2")); parameters.insert(make_pair("watchedProc", "-2")); parameters.insert(make_pair("CommandOutputs", "0")); parameters.insert(make_pair("FireDomainOutputs", "0")); From 5d3698e681f3ac4bff9e7485efb55211a4cef6ca Mon Sep 17 00:00:00 2001 From: Dominik Laux Date: Tue, 3 Jun 2025 10:52:29 +0200 Subject: [PATCH 2/2] add: check input validity --- src/Command.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Command.cpp b/src/Command.cpp index e75363f3..a963c2a4 100644 --- a/src/Command.cpp +++ b/src/Command.cpp @@ -2007,6 +2007,18 @@ namespace libforefire { double newPerimRes = getFloat("perimeterResolution", arg); double newSpatialInc = getFloat("spatialIncrement", arg); + + bool valid = true; + + if (newPerimRes != FLOATERROR && newPerimRes <= 0.0) { + cout << "Error: perimeterResolution must be greater than 0." << endl; + valid = false; + } + if (newSpatialInc != FLOATERROR && newSpatialInc <= 0.0) { + cout << "Error: spatialIncrement must be greater than 0." << endl; + valid = false; + } + if (!valid) return error; FireDomain* domain = getDomain(); if (domain != nullptr)