3 Created on Fri May 15 13:48:33 2020
10 from efo.rule
import RuleBase
14 def __init__(self, name, time, seepPolys, cumSeepStrat, constants):
19 self.
qSeepqSeep = np.zeros(self.T.nSteps)
20 self.
cumSeepcumSeep = np.zeros(self.T.nSteps)
25 np.argwhere(self.
cumSeepStratcumSeepStrat <= self.
cumSeepcumSeep[max(0,self.T.step-1)])[-1])
26 qSeepCur = max(0, self.
seepPolysseepPolys[idxPoly,0].item()*stor**3 +
27 self.
seepPolysseepPolys[idxPoly,1].item()*stor**2 +
28 self.
seepPolysseepPolys[idxPoly,2].item()*stor + self.
seepPolysseepPolys[idxPoly,3].item())
29 self.
qSeepqSeep[self.T.step] = qSeepCur
30 if self.T.curDT.month == 10
and self.T.curDT.day == 1:
33 self.
cumSeepcumSeep[self.T.step] = self.
cumSeepcumSeep[max(0,self.T.step-1)] + qSeepCur*self.
constantsconstants.cfs2af
38 returnDf = pd.DataFrame()
39 for j, curScen
in enumerate(scenarios):
40 storPrdo = df.xs(curScen)[
'stor_prado']
41 curDateTime = df.xs(curScen).index
42 years = np.unique(curDateTime.year)
43 elevChngMeters = np.empty(years.size)
44 idxName = np.full(years.size, scenarios[j])
45 for i, curYr
in enumerate(years):
46 iCurVirioPer = ((curDateTime.year == curYr) & (curDateTime.month == 3) & (curDateTime.day >= 21))\
47 | ((curDateTime.year == curYr) & (curDateTime.month == 4))
48 rowsCurVirioPer = np.ix_(iCurVirioPer)[0]
49 rowMaxStor = rowsCurVirioPer[0] + np.argmax(storPrdo[iCurVirioPer], axis=0)
50 storMax = storPrdo[rowMaxStor]
51 elevMax = hypso.stor2elev(storMax)
52 rowsBeforMaxStor = rowsCurVirioPer[rowsCurVirioPer < rowMaxStor]
53 storMin = np.min(storPrdo[rowsBeforMaxStor])
if rowsBeforMaxStor.size>0
else storMax
54 elevMin = hypso.stor2elev(storMin)
55 elevChngMeters[i] = (elevMax - elevMin)*0.3048
56 dfIndices = [idxName, years]
57 dfMultiIdx = pd.MultiIndex.from_arrays(dfIndices, names=(
'name_scenario',
'water_year'))
58 curDf = pd.DataFrame({
'elev_chng_meters': elevChngMeters},
59 columns = [
'elev_chng_meters'], index=dfMultiIdx)
60 returnDf = returnDf.append(curDf)
65 returnDf = pd.DataFrame()
66 for j, curScen
in enumerate(scenarios):
67 curDf = df.xs(curScen)
68 storPrdo = curDf[
'stor_prado']
69 curDateTime = df.xs(curScen).index
70 years = np.unique(curDateTime.year)
71 for i, curYr
in enumerate(years):
72 iCurVireoPer = ((curDateTime.year == curYr) & (curDateTime.month == 3) & (curDateTime.day >= 21))\
73 | ((curDateTime.year == curYr) & (curDateTime.month == 4))
74 elevCurPer = hypso.stor2elev(storPrdo[iCurVireoPer])
75 elevDiff = elevCurPer - elevCurPer[0]
76 elevDiffMeters = elevDiff*0.3048
77 dfIndices = [np.full(elevDiffMeters.size-1, scenarios[j]), curDf.index[iCurVireoPer][1:]]
78 dfMultiIdx = pd.MultiIndex.from_arrays(dfIndices, names=(
'name_scenario',
'date_time'))
79 appDf = pd.DataFrame({
'elev_chng_meters': elevDiffMeters[1:]},
80 columns = [
'elev_chng_meters'], index=dfMultiIdx)
81 returnDf = returnDf.append(appDf)
87 years = np.unique(vDate[:, 0])
88 returnDf = pd.DataFrame()
89 volNotPerc = np.empty(years.size)
90 for j, curScen
in enumerate(scenarios):
91 idxName = np.full(years.size, scenarios[j])
92 curDf = df.xs(curScen)
93 for i, curYr
in enumerate(years):
94 iCurWY = (curDf.index.year == curYr-1) & (curDf.index.month >= 10) | \
95 (curDf.index.year == curYr) & (curDf.index.month <= 9)
96 qDiff = curDf.loc[iCurWY][
'q_sar_ocwd'].to_numpy() - curDf.loc[iCurWY][
'div_ocwd'].to_numpy()
97 qNotPerc = np.amax(np.vstack((np.zeros(qDiff.size), qDiff)), axis=0)
98 volNotPerc[i] = np.sum(qNotPerc*1.983471)
99 dfIndices = [idxName, years]
100 dfMultiIdx = pd.MultiIndex.from_arrays(dfIndices, names=(
'name_scenario',
'water_year'))
101 curDf = pd.DataFrame({
'vol_not_percolated': volNotPerc},
102 columns = [
'vol_not_percolated'], index=dfMultiIdx)
103 returnDf = returnDf.append(curDf)
def calc_seepage(self, stor)
def __init__(self, name, time, seepPolys, cumSeepStrat, constants)
def calc_vireo_impacts(*hypso, T, df, scenarios)
def calc_vireo_impacts2(*hypso, T, df, scenarios)
def calc_vol_not_perc(*T, df, scenarios)