Garden with Insight v1.0 Help: Weather  Precipitation
The EPIC precipitation model developed by Nicks (1974) is a firstorder Markovchain 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 (01) is
generated and compared with the appropriate wetdry probability. If the random number is less than or
equal to the wetdry probability, precipitation occurs on that day. Random numbers greater than the wet
dry probability give no precipitation. Since the wetdry state of the first day is established, the process can
be repeated for the next day and so on throughout the simulation period.
If wetdry 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
month.
Equation 95
PW = NWD / ND
Code:
same
Variables:
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.
Equation 96
P(W/D) = beta * PW
Code:
same
Variables:
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.
Equation 97
P(W/W) = 1.0  beta + P(W/D)
Code:
same
Variables:
P(W/W) = ProbWetDayAfterDryDayFromProbWetDay_frn
beta =
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.
Equation 98:
R = (pow(((SND  SCF/6.0) * (SCF/6.0) + 1.0), 3)  1.0) * RSDV / SCF + Rbar
Code:
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
Variables:
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.01.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 longterm simulated rainfall is
correct. The modified exponential is usually a satisfactory substitute and requires only the monthly mean
rainfall as input.
Equation 99:
R = power( ln(mu), zeta) * Rbar / (integral from 0.0 to 1.0)power(( ln(chi), zeta) dx
Code:
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.
Variables:
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
