FireSTARR
Loading...
Searching...
No Matches
IntensityMap.h
1/* Copyright (c) Queen's Printer for Ontario, 2020. */
2/* Copyright (c) His Majesty the King in Right of Canada as represented by the Minister of Natural Resources, 2025. */
3
4/* SPDX-License-Identifier: AGPL-3.0-or-later */
5
6#pragma once
7#include <memory>
8#include <string>
9#include <bitset>
10#include "GridMap.h"
11#include "Location.h"
12namespace fs
13{
14namespace topo
15{
16class Perimeter;
17class Cell;
18}
19namespace sim
20{
22class ProbabilityMap;
23class Model;
24using BurnedData = std::bitset<static_cast<size_t>(MAX_ROWS) * MAX_COLUMNS>;
29{
33 mutable mutex mutex_{};
34public:
39 // IntensityMap(const Model& model, topo::Perimeter* perimeter) noexcept;
40 explicit IntensityMap(const Model& model) noexcept;
41 ~IntensityMap() noexcept;
42 IntensityMap(const IntensityMap& rhs);
43 IntensityMap(IntensityMap&& rhs) = delete;
44 // IntensityMap(IntensityMap&& rhs);
45 IntensityMap& operator=(const IntensityMap& rhs) = delete;
46 IntensityMap& operator=(IntensityMap&& rhs) noexcept = delete;
51 [[nodiscard]] Idx rows() const
52 {
53 return intensity_max_->rows();
54 }
59 [[nodiscard]] Idx columns() const
60 {
61 return intensity_max_->columns();
62 }
67 void applyPerimeter(const topo::Perimeter& perimeter) noexcept;
73 [[nodiscard]] bool canBurn(const Location& location) const;
74 template <class P>
75 [[nodiscard]] bool canBurn(const Position<P>& position) const
76 {
77 return canBurn(Location{position.hash()});
78 }
84 [[nodiscard]] bool hasBurned(const Location& location) const;
85 template <class P>
86 [[nodiscard]] bool hasBurned(const Position<P>& position) const
87 {
88 return hasBurned(Location{position.hash()});
89 }
95 [[nodiscard]] bool isSurrounded(const Location& location) const;
96 template <class P>
97 [[nodiscard]] bool isSurrounded(const Position<P>& position) const
98 {
99 return isSurrounded(Location{position.hash()});
100 }
105 void ignite(const Location& location);
106 template <class P>
107 void ignite(const Position<P>& position)
108 {
109 ignite(Location{position.hash()});
110 }
111public:
119 void burn(const Location& location,
120 IntensitySize intensity,
121 MathSize ros,
123 template <class P>
124 void burn(const Position<P>& position,
125 const IntensitySize intensity,
126 const MathSize ros,
127 const fs::wx::Direction& raz)
128 {
129 burn(
130 Location{position.hash()},
131 intensity,
132 ros,
133 raz);
134 }
140 void save(const string& dir, const string& base_name) const;
145 [[nodiscard]] MathSize fireSize() const;
150 [[nodiscard]] map<Location, IntensitySize>::const_iterator
151 cbegin() const noexcept;
156 [[nodiscard]] map<Location, IntensitySize>::const_iterator
157 cend() const noexcept;
158private:
162 const Model& model_;
166 unique_ptr<data::GridMap<IntensitySize>> intensity_max_;
167 // HACK: just add ROS/RAZ into this object for now
171 unique_ptr<data::GridMap<MathSize>> rate_of_spread_at_max_;
172 unique_ptr<data::GridMap<DegreesSize>> direction_of_spread_at_max_;
176 BurnedData* is_burned_;
177};
178}
179}
Represents a map of intensities that cells have burned at for a single Scenario.
Definition IntensityMap.h:29
unique_ptr< data::GridMap< IntensitySize > > intensity_max_
Map of intensity that cells have burned at.
Definition IntensityMap.h:166
MathSize fireSize() const
Size of the fire represented by this.
Definition IntensityMap.cpp:267
Idx rows() const
Number of rows in this extent.
Definition IntensityMap.h:51
IntensityMap(const Model &model) noexcept
Constructor.
Definition IntensityMap.cpp:101
void applyPerimeter(const topo::Perimeter &perimeter) noexcept
Set cells in the map to be burned based on Perimeter.
Definition IntensityMap.cpp:134
bool isSurrounded(const Location &location) const
Whether or not all Locations surrounding the given Location are burned.
Definition IntensityMap.cpp:164
Idx columns() const
Number of columns in this extent.
Definition IntensityMap.h:59
void save(const string &dir, const string &base_name) const
Save contents to an ASCII file.
Definition IntensityMap.cpp:250
void burn(const Location &location, IntensitySize intensity, MathSize ros, fs::wx::Direction raz)
Update Location with specified values.
Definition IntensityMap.cpp:194
unique_ptr< data::GridMap< MathSize > > rate_of_spread_at_max_
Map of rate of spread/direction that cells have burned with at max ros.
Definition IntensityMap.h:171
map< Location, IntensitySize >::const_iterator cend() const noexcept
Iterator for underlying GridMap.
Definition IntensityMap.cpp:273
const Model & model_
Model map is for.
Definition IntensityMap.h:162
mutex mutex_
Mutex for parallel access.
Definition IntensityMap.h:33
BurnedData * is_burned_
bitset denoting cells that can no longer burn
Definition IntensityMap.h:176
map< Location, IntensitySize >::const_iterator cbegin() const noexcept
Iterator for underlying GridMap.
Definition IntensityMap.cpp:278
bool hasBurned(const Location &location) const
Whether or not the Location with the given hash can burn.
Definition IntensityMap.cpp:153
bool canBurn(const Location &location) const
Whether or not the Cell with the given hash can burn.
Definition IntensityMap.cpp:149
void ignite(const Location &location)
Mark given location as burned.
Definition IntensityMap.cpp:190
Contains all the immutable information regarding a simulation that is common between Scenarios.
Definition Model.h:134
Definition Location.h:229
Perimeter for an existing fire to initialize a simulation with.
Definition Perimeter.h:24
A Position with a row and column.
Definition Location.h:57
constexpr HashSize hash() const noexcept
Hash derived from row and column.
Definition Location.h:80
Direction with access to degrees or radians.
Definition Weather.h:64