32 const Ffmc& ffmc_previous)
noexcept;
37 static const Ffmc Invalid;
60 const Dmc& dmc_previous,
62 MathSize latitude)
noexcept;
67 static const Dmc Invalid;
88 const Dc& dc_previous,
90 MathSize latitude)
noexcept;
95 static const Dc Invalid;
109 Isi(MathSize value,
const Speed& ws,
const Ffmc& ffmc)
noexcept;
120 static const Isi Invalid;
138 Bui(MathSize value,
const Dmc& dmc,
const Dc& dc)
noexcept;
144 Bui(
const Dmc& dmc,
const Dc& dc)
noexcept;
149 static const Bui Invalid;
167 Fwi(MathSize value,
const Isi& isi,
const Bui& bui)
noexcept;
173 Fwi(
const Isi& isi,
const Bui& bui)
noexcept;
178 static const Fwi Invalid;
197 explicit Dsr(
const Fwi& fwi)
noexcept;
202 static const Dsr Invalids;
239 const MathSize latitude,
304 const
Dc&
dc) noexcept;
350 [[nodiscard]]
constexpr const Dmc&
dmc()
const
358 [[nodiscard]]
constexpr const Dc&
dc()
const
366 [[nodiscard]]
constexpr const Isi&
isi()
const
374 [[nodiscard]]
constexpr const Bui&
bui()
const
382 [[nodiscard]]
constexpr const Fwi&
fwi()
const
406 [[nodiscard]]
constexpr MathSize
mcFfmc()
const
414 [[nodiscard]]
constexpr MathSize
mcDmc()
const
486 if (lhs.
rh() == rhs.
rh())
494 if (lhs.
dmc() == rhs.
dmc())
496 if (lhs.
dc() == rhs.
dc())
498 assert(lhs.
isi() == rhs.
isi());
499 assert(lhs.
bui() == rhs.
bui());
500 assert(lhs.
fwi() == rhs.
fwi());
502 return lhs.
dc() < rhs.
dc();
504 return lhs.
dmc() < rhs.
dmc();
512 return lhs.
rh() < rhs.
rh();
516[[nodiscard]]
constexpr bool operator!=(
const FwiWeather& lhs,
const FwiWeather& rhs)
518 return lhs.temp() != rhs.temp()
519 || lhs.rh() != rhs.rh()
520 || lhs.wind() != rhs.wind()
521 || lhs.prec() != rhs.prec()
522 || lhs.ffmc() != rhs.ffmc()
523 || lhs.dmc() != rhs.dmc()
524 || lhs.dc() != rhs.dc()
525 || lhs.isi() != rhs.isi()
526 || lhs.bui() != rhs.bui()
527 || lhs.fwi() != rhs.fwi();
529[[nodiscard]]
constexpr bool operator==(
const FwiWeather& lhs,
const FwiWeather& rhs)
531 return !(lhs != rhs);
533constexpr auto FFMC_MOISTURE_CONSTANT = 147.27723;
534constexpr MathSize ffmc_to_moisture(
const MathSize ffmc)
noexcept
536 return FFMC_MOISTURE_CONSTANT * (101.0 - ffmc) / (59.5 + ffmc);
538constexpr MathSize ffmc_to_moisture(
const Ffmc& ffmc)
noexcept
540 return ffmc_to_moisture(ffmc.asValue());
542constexpr MathSize moisture_to_ffmc(
const MathSize m)
noexcept
544 return (59.5 * (250.0 - m) / (FFMC_MOISTURE_CONSTANT + m));
546constexpr Ffmc ffmc_from_moisture(
const MathSize m)
noexcept
548 return Ffmc(moisture_to_ffmc(m));
A wrapper around a MathSize to ensure correct types are used.
Definition Index.h:15
constexpr Index() noexcept
Construct with a value of 0.
Definition Index.h:28
Build-up Index value.
Definition FWI.h:130
static const Bui Zero
Build-up Index of 0.
Definition FWI.h:148
Bui(MathSize value, const Dmc &dmc, const Dc &dc) noexcept
Calculate Build-up Index and verify previous value is within tolerance of calculated value.
Definition FWI.cpp:498
Drought Code value.
Definition FWI.h:73
Dc(const Temperature &temperature, const Precipitation &prec, const Dc &dc_previous, int month, MathSize latitude) noexcept
Calculate Drought Code.
Definition FWI.cpp:403
static const Dc Zero
Drought Code of 0.
Definition FWI.h:94
Duff Moisture Code value.
Definition FWI.h:43
Dmc(const Temperature &temperature, const RelativeHumidity &rh, const Precipitation &prec, const Dmc &dmc_previous, int month, MathSize latitude) noexcept
Duff Moisture Code.
Definition FWI.cpp:354
static const Dmc Zero
Duff Moisture Code of 0.
Definition FWI.h:66
Danger Severity Rating value.
Definition FWI.h:188
static const Dsr Zero
Danger Severity Rating of 0.
Definition FWI.h:201
Dsr(const Fwi &fwi) noexcept
Calculate Danger Severity Rating.
Definition FWI.cpp:615
Fine Fuel Moisture Code value.
Definition FWI.h:15
static const Ffmc Zero
Fine Fuel Moisture Code of 0.
Definition FWI.h:36
Ffmc(const Temperature &temperature, const RelativeHumidity &rh, const Speed &ws, const Precipitation &prec, const Ffmc &ffmc_previous) noexcept
Calculate Fine Fuel Moisture Code.
Definition FWI.cpp:297
A Weather value with calculated FWI indices.
Definition FWI.h:209
constexpr const Bui & bui() const
Build-up Index.
Definition FWI.h:374
FwiWeather() noexcept
Construct with 0 for all values.
Definition FWI.cpp:737
constexpr MathSize ffmcEffect() const
Ffmc effect used for spread.
Definition FWI.h:422
constexpr const Dmc & dmc() const
Duff Moisture Code.
Definition FWI.h:350
Fwi fwi_
Fire Weather Index.
Definition FWI.h:468
constexpr const Isi & isi() const
Initial Spread Index.
Definition FWI.h:366
constexpr const Ffmc & ffmc() const
Fine Fuel Moisture Code.
Definition FWI.h:342
Ffmc ffmc_
Fine Fuel Moisture Code.
Definition FWI.h:448
Isi isi_
Initial Spread Index.
Definition FWI.h:460
MathSize mc_ffmc_pct_
Moisture content (ratio) based on Ffmc.
Definition FWI.h:472
constexpr const Fwi & fwi() const
Fire Weather Index.
Definition FWI.h:382
constexpr MathSize mcFfmcPct() const
Moisture content (%) based on Ffmc.
Definition FWI.h:390
static const FwiWeather Zero
FwiWeather with 0 for all Indices.
Definition FWI.h:214
Bui bui_
Build-up Index.
Definition FWI.h:464
MathSize ffmc_effect_
Ffmc effect used for spread.
Definition FWI.h:480
constexpr MathSize mcFfmc() const
Moisture content (ratio) based on Ffmc.
Definition FWI.h:406
Dc dc_
Drought Code.
Definition FWI.h:456
Dmc dmc_
Duff Moisture Code.
Definition FWI.h:452
constexpr MathSize mcDmcPct() const
Moisture content (%) based on Dmc.
Definition FWI.h:398
MathSize mc_dmc_pct_
Moisture content (ratio) based on Dmc.
Definition FWI.h:476
constexpr MathSize mcDmc() const
Moisture content (ratio) based on Dmc.
Definition FWI.h:414
constexpr const Dc & dc() const
Drought Code.
Definition FWI.h:358
Fire Weather Index value.
Definition FWI.h:159
Fwi(MathSize value, const Isi &isi, const Bui &bui) noexcept
Calculate Fire Weather Index and verify previous value is within tolerance of calculated value.
Definition FWI.cpp:563
static const Fwi Zero
Fire Weather Index of 0.
Definition FWI.h:177
Initial Spread Index value.
Definition FWI.h:101
static const Isi Zero
Initial Spread Index of 0.
Definition FWI.h:119
Isi(MathSize value, const Speed &ws, const Ffmc &ffmc) noexcept
Calculate Initial Spread Index and verify previous value is within tolerance of calculated value.
Definition FWI.cpp:437
Precipitation (1hr accumulation) (mm)
Definition Weather.h:287
Relative humidity as a percentage.
Definition Weather.h:34
Speed in kilometers per hour.
Definition Weather.h:49
Temperature in degrees Celsius.
Definition Weather.h:19
Collection of weather indices used for calculating FwiWeather.
Definition Weather.h:302
constexpr const Temperature & temp() const noexcept
Temperature (Celsius)
Definition Weather.h:352
constexpr const Wind & wind() const noexcept
Wind (km/h)
Definition Weather.h:368
constexpr const RelativeHumidity & rh() const noexcept
Relative Humidity (%)
Definition Weather.h:360
constexpr const Precipitation & prec() const noexcept
Precipitation (1hr accumulation) (mm)
Definition Weather.h:376
Wind with a Speed and Direction.
Definition Weather.h:139