Garden with Insight v1.0 Help: Weather - Precipitation
The EPIC precipitation model developed by Nicks (1974) is a first-order Markov-chain model. Thus,
input for the model must include monthly probabilities of receiving precipitation. On any given day, the
input must include information as to whether the previous day was dry or wet. A random number (0-1) is
generated and compared with the appropriate wet-dry probability. If the random number is less than or
equal to the wet-dry probability, precipitation occurs on that day. Random numbers greater than the wet-
dry probability give no precipitation. Since the wet-dry state of the first day is established, the process can
be repeated for the next day and so on throughout the simulation period.
If wet-dry probabilities are not available, the average monthly number of rainy days may be substituted.
The probability of a wet day is calculated directly from the number of wet days: [Equation 95] where PW
is the probability of a wet day, NWD is the number of rainy days, and ND is the number of days, in a
PW = NWD / ND
PW = ProbWetDayFromNumWetDays_frn
NWD = numWetDaysForMonth
ND = numDaysInMonth
The probability of a wet day after a dry day can be estimated as a fraction of PW [Equation 96] where
P(W/D) is the probability of a wet day following a dry day and where beta is a fraction usually in the
range of 0.6 to 0.9.
P(W/D) = beta * PW
P(W/D) = ProbWetDayAfterDryDayFromProbWetDay_frn
beta = kProbWetDayGivenDryDayCoeff_frn
PW = probWetDayFromNumWetDays_frn
beta = coeffForWetDryProbsGivenNumWetDays_frn
The probability of a wet day following a wet day can be calculated directly using the equation [Equation
97] where P(W/W) is the probability of a wet day after a wet day.
P(W/W) = 1.0 - beta + P(W/D)
P(W/W) = ProbWetDayAfterDryDayFromProbWetDay_frn
P(W/D) = probWetDayAfterDryDay_frn
When beta approaches 1.0, wet days do not affect probability of rainfall -- P(W/D) = P(W/W) = PW.
Conversely, low beta values give strong wet day effects -- when beta approaches 0.0, P(W/W) approaches
1.0. Thus, beta controls the interval between rainfall events but has no effect on the number of wet days.
For many locations, beta = 0.75 gives satisfactory estimates of P(W/D). Although equations 96 and 97
may give slightly different probabilities than those estimated from rainfall records, they do guarantee
correct simulation of the number of rainfall events.
When a precipitation event occurs, the amount is generated from a skewed normal daily precipitation
distribution [Equation 98] where R is the amount of rainfall for day i in mm, SND is the standard normal
deviate for day I, SCF is the skew coefficient, RSDV is the standard deviation of daily rainfall in mm, and
R(k) is the mean daily rainfall in month k.
R = (pow(((SND - SCF/6.0) * (SCF/6.0) + 1.0), 3) - 1.0) * RSDV / SCF + Rbar
R = 2.0 * (pow(((SND - SCF/6.0) * (SCF/6.0) + 1.0), 3) - 1.0) * RSDV / SCF + Rbar
also code adds lower bound of aResult at 0.01
R = DailyRainfallBySkewedNormal_mm
SND = stdNormDeviateForRainfall
SCF = skewCoeffForRainfallForMonth
RSDV = stdDevDailyRainfallForMonth_mm
Rbar = dailyMeanRainfallForMonth_mm
If the standard deviation and skew coefficient are not available, the model simulates daily rainfall by using
a modified exponential distribution [Equation 99] where mu is a uniform random number (0.0-1.0) and
zeta is a parameter usually in the range of 1.0 to 2.0. The larger the zeta value, the more extreme the
rainfall events. The denominator of equation 99 assures that the mean long-term simulated rainfall is
correct. The modified exponential is usually a satisfactory substitute and requires only the monthly mean
rainfall as input.
R = power(- ln(mu), zeta) * Rbar / (integral from 0.0 to 1.0)power((- ln(chi), zeta) dx
R = Rbar * power(- ln(mu), zeta)
We think the integral is incorporated in the code when the dailyMeanRainfallForMonth_mm is
multiplied at input by rainfallNormalizingFactorForModExpDist
We do not completely understand this section of code.
R = DailyRainfallByModifiedExponential_mm
mu = uniformRandomNumber
zeta = coeffRainfallModExpDist
Rbar = dailyMeanRainfallForMonth_mm
Daily precipitation is partitioned between rainfall and snowfall using a combination of maximum daily air
temperature (T(mx)) and surface layer soil temperature (T(1)). If the average of T(mx) and T(1) is zero
degrees C or below, the precipitation is snowfall, otherwise, it is rainfall.
T(mx) = maxTempForDay_degC
T(1) = soilSurfaceTempWithCover_degC