Skip to content

Commit

Permalink
Cap windchill heat from vapor pressure to 50C
Browse files Browse the repository at this point in the history
The model we use to approximate windchill seems to have degenerate
behavior at high "dry-bulb" temperatures; this manifests most obviously
by generating apparent temperatures in the millions of celsius for input
temperatures of ~1000C. Since most of this runaway extra temperature is
from the vapor pressure term, and since it seems unreasonable that a
given 1000C fire would actually have vapor pressure of 10MPa in its
vicinity, we cap that vapor pressure-induced extra temperature to only
100C.
  • Loading branch information
Steven Wu committed Dec 26, 2019
1 parent b7329f6 commit d4c7fbf
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/weather.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -715,8 +715,14 @@ int get_local_windchill( double temperature, double humidity, double windpower )
tmpwind = tmpwind * 0.44704;
tmptemp = temp_to_celsius( tmptemp );

windchill = 0.33 * ( humidity / 100.00 * 6.105 * exp( 17.27 * tmptemp /
( 237.70 + tmptemp ) ) ) - 0.70 * tmpwind - 4.00;
// Cap the vapor pressure term to 50C of extra heat, as this term
// otherwise grows logistically to an asymptotic value of about 2e7
// for large values of temperature. This is presumably due to the
// model being designed for reasonable ambient temperature values,
// rather than extremely high ones.
windchill = 0.33 * std::min<float>( 150.00, humidity / 100.00 * 6.105 *
exp( 17.27 * tmptemp / ( 237.70 + tmptemp ) ) ) - 0.70 *
tmpwind - 4.00;
// Convert to Fahrenheit, but omit the '+ 32' because we are only dealing with a piece of the felt air temperature equation.
windchill = windchill * 9 / 5;
}
Expand Down

0 comments on commit d4c7fbf

Please sign in to comment.