def SurfaceLoad_1_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed, FilterWidth, PctStrmBuf): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu - NRur, Nqual)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adjurbanqtotal = AdjUrbanQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil) surfaceload = SurfaceLoad_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed) retentioneff = RetentionEff_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, Qretention, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, PctAreaInfil)[:, :, :, None, None] retentioneff = repeat(repeat(retentioneff, nlu - NRur, axis=3), Nqual, axis=4) filtereff = FilterEff_f(FilterWidth) nonzero = where((Temp > 0) & (water > 0.01) & (adjurbanqtotal > 0.001)) result[nonzero] = surfaceload[nonzero] * (1 - retentioneff[nonzero]) * ( 1 - (filtereff * PctStrmBuf)) return result
def WashImperv_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNI_0, AntMoist_0, Grow_0, NRur, NUrb): nlu = NLU(NRur, NUrb) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) qruni = QrunI_f(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNI_0, AntMoist_0, Grow_0) return WashImperv_inner(NYrs, DaysMonth, Temp, NRur, nlu, water, qruni)
def NetSolidLoad_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed, DisFract, FilterWidth, PctStrmBuf): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu - NRur, Nqual)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adjurbanqtotal = AdjUrbanQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil) dissurfaceload = DisSurfLoad_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, Nqual, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed, DisFract, FilterWidth, PctStrmBuf) surfaceload_1 = SurfaceLoad_1_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed, FilterWidth, PctStrmBuf) nonzero = where((Temp > 0) & (water > 0.01) & (adjurbanqtotal > 0.001)) result[nonzero] = surfaceload_1[nonzero] - dissurfaceload[nonzero] return sum(result, axis=3)
def CNumPerv_f(NYrs, DaysMonth, Temp, NRur, NUrb, CNP_0, InitSnow_0, Prec, Grow_0, AntMoist_0): nlu = NLU(NRur, NUrb) cnp = CNP_f(NRur, NUrb, CNP_0) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) melt = Melt_1_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) grow_factor = GrowFactor(Grow_0) # TODO: some bug in cnumperv_inner causes an error if this is switched to _f amc5 = AMC5_yesterday(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0) return CNumPerv_inner(NYrs, DaysMonth, Temp, NRur, nlu, cnp, water, melt, grow_factor, amc5)
def AdjUrbanQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil): water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urban_q_total = UrbanQTotal_f(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) urb_area_total = UrbAreaTotal_f(NRur, NUrb, Area) area_total = AreaTotal_f(Area) return AdjUrbanQTotal_inner(NYrs, DaysMonth, Temp, Qretention, PctAreaInfil, water, urban_q_total, urb_area_total, area_total)
def CNum_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, CN, NRur, NUrb, Grow_0): melt_pest = Melt_1_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) newcn = NewCN_f(NRur, NUrb, CN) amc5 = AMC5_yesterday(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0) grow_factor = GrowFactor_f(Grow_0) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) return CNum_inner(NYrs, DaysMonth, Temp, CN, NRur, melt_pest, newcn, amc5, grow_factor, water)
def Infiltration_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, CN): result = zeros((NYrs, 12, 31)) qtotal = QTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, CN) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) result[where(qtotal < water)] = water[where( qtotal < water)] - qtotal[where(qtotal < water)] return result
def AgRunoff_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, AntMoist_0, NUrb, Grow_0, Landuse, Area): result = zeros((NYrs, 12, 31)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) ag_q_total = AgQTotal_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, CN, AntMoist_0, NUrb, Grow_0, Landuse, Area) result[where((Temp > 0) & (water > 0.01))] = ag_q_total[where((Temp > 0) & (water > 0.01))] return sum(result, axis=2)
def CNumImperv_f(NYrs, NRur, NUrb, DaysMonth, InitSnow_0, Temp, Prec, CNI_0, Grow_0, AntMoist_0): nlu = NLU(NRur, NUrb) cni = CNI_f(NRur, NUrb, CNI_0) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) melt = Melt_1_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) grow_factor = GrowFactor_f(Grow_0) amc5 = AMC5_yesterday(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0) return CNumImperv_inner(NYrs, NRur, DaysMonth, Temp, nlu, cni, water, melt, grow_factor, amc5)
def SedTrans_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN): water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adjqtotal = AdjQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN) return sum(where(logical_and(Temp > 0, water > 0.01), adjqtotal**1.67, 0), axis=2)
def DisLoad_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed, DisFract, FilterWidth, PctStrmBuf): water = repeat(Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec)[:, :, :, None], Nqual, axis=3) temp = repeat(Temp[:, :, :, None], Nqual, axis=3) netdisload = NetDisLoad_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed, DisFract, FilterWidth, PctStrmBuf) result = sum(where((temp > 0) & (water > 0.01), netdisload, 0), axis=2) result[result < 0] = 0 return result
def RurQRunoff_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, AntMoist_0, NRur, NUrb, CN, Grow_0): water = reshape( repeat(Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec), repeats=NRur, axis=2), (NYrs, 12, 31, NRur)) retention = Retention_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0)[:, :, :, :NRur] qrun = Qrun_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, CN, AntMoist_0, Grow_0)[:, :, :, :NRur] return sum(where((water >= 0.2 * retention) & (CN[:NRur] > 0), qrun, 0), axis=2)
def RurEros_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area): erosiv = repeat(Erosiv_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef)[:, :, :, None], NRur, axis=3) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) water = water[:, :, :, None] resized_temp = repeat(Temp[:, :, :, None], NRur, axis=3) water_r = repeat(water, NRur, axis=3) temp = KF * LS * C * P * Area return where((resized_temp > 0) & (water_r > 0.01), 1.32 * erosiv * temp[:NRur], 0.)
def QTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, CN): result = zeros((NYrs, 12, 31)) urban_q_total_1 = UrbanQTotal_1_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) rural_q_total = RuralQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, NUrb, AntMoist_0, Grow_0, Area) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) result[where((Temp > 0) & (water > 0))] = urban_q_total_1[where( (Temp > 0) & (water > 0))] + rural_q_total[where((Temp > 0) & (water > 0))] return result
def AdjQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN): result = zeros((NYrs, 12, 31)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adj_urban_q_total = AdjUrbanQTotal_1_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil) rural_q_total = RuralQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, NUrb, AntMoist_0, Grow_0, Area) result[where((Temp > 0) & (water > 0.01))] = ( adj_urban_q_total[where((Temp > 0) & (water > 0.01))] * (1 - (n25b * 0.2))) + rural_q_total[where((Temp > 0) & (water > 0.01))] return result
def Retention_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu)) c_num = CNum_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, CN, NRur, NUrb, Grow_0) cnrur = tile(CN[:NRur][None, None, None, :], (NYrs, 12, 31, 1)) water = repeat(Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec)[:, :, :, None], NRur, axis=3) TempE = repeat(Temp[:, :, :, None], NRur, axis=3) result[where((TempE > 0) & (water > 0.01) & (cnrur > 0))] = 2540 / c_num[where( (TempE > 0) & (water > 0.01) & (cnrur > 0))] - 25.4 result[where(result < 0)] = 0 return result
def CNumImpervReten_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CNI_0, Grow_0): cni = CNI_f(NRur, NUrb, CNI_0) cni_1 = tile(cni[1][None, None, None, :], (NYrs, 12, 31, 1)) c_num_imperv = CNumImperv_f(NYrs, NRur, NUrb, DaysMonth, InitSnow_0, Temp, Prec, CNI_0, Grow_0, AntMoist_0) nlu = NLU(NRur, NUrb) water = repeat(Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec)[:, :, :, None], nlu, axis=3) result = zeros((NYrs, 12, 31, nlu)) TempE = repeat(Temp[:, :, :, None], nlu, axis=3) result[where((TempE > 0) & (water >= 0.05) & (cni_1 > 0))] = 2540 / c_num_imperv[where( (TempE > 0) & (water >= 0.05) & (cni_1 > 0))] - 25.4 result[where(result < 0)] = 0 return result
def Qrun_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, CN, AntMoist_0, Grow_0): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu)) water = repeat(Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec)[:, :, :, None], nlu, axis=3) TempE = repeat(Temp[:, :, :, None], nlu, axis=3) cnrur = tile(CN[None, None, None, :], (NYrs, 12, 31, 1)) retention = Retention_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0) retention02 = 0.2 * retention nonzero = where((TempE > 0) & (water > 0.01) & (water >= retention02) & (cnrur > 0)) result[nonzero] = (water[nonzero] - retention02[nonzero])**2 / ( water[nonzero] + 0.8 * retention[nonzero]) return result
def RetentionEff_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, Qretention, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, PctAreaInfil): result = zeros((NYrs, 12, 31)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urbanqtotal = UrbanQTotal_f(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) result[where((Temp > 0) & (water > 0.05) & (Qretention > 0) & (urbanqtotal > 0) & (urbanqtotal <= Qretention * PctAreaInfil))] = 1 result[where((Temp > 0) & (water > 0.05) & (Qretention > 0) & (urbanqtotal > 0) & ( urbanqtotal > Qretention * PctAreaInfil))] = \ Qretention * PctAreaInfil / urbanqtotal[where( (Temp > 0) & (water > 0.05) & (Qretention > 0) & (urbanqtotal > 0) & ( urbanqtotal > Qretention * PctAreaInfil))] return result
def DayRunoff_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN): result = zeros((NYrs, 12, 31)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adj_q_total = AdjQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN) q_total = QTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, CN) result[where((Temp > 0) & (water > 0.01) & (adj_q_total > 0))] = adj_q_total[where( (Temp > 0) & (water > 0) & (adj_q_total > 0))] result[where((Temp > 0) & (water > 0.01) & (q_total > 0))] = q_total[where((Temp > 0) & (water > 0) & (q_total > 0))] return result
def QrunP_f(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNP_0, AntMoist_0, Grow_0): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu)) water = repeat(Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec)[:, :, :, None], nlu, axis=3) TempE = repeat(Temp[:, :, :, None], nlu, axis=3) c_num_perv_reten = CNumPervReten_f(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CNP_0, Grow_0) c_num_perv_reten02 = 0.2 * c_num_perv_reten cnp = CNP_f(NRur, NUrb, CNP_0) cnp_1 = tile(cnp[1][None, None, None, :], (NYrs, 12, 31, 1)) nonzero = where((TempE > 0) & (water >= 0.05) & (cnp_1 > 0) & (water >= c_num_perv_reten02)) result[nonzero] = (water[nonzero] - c_num_perv_reten02[nonzero])**2 / ( water[nonzero] + 0.8 * c_num_perv_reten[nonzero]) return result
def SurfaceLoad_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, LoadRatePerv, Storm, UrbBMPRed): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu - NRur, Nqual)) water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adjurbanqtotal = AdjUrbanQTotal_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil) nonzeroday = where((Temp > 0) & (water > 0.01) & (adjurbanqtotal > 0.001)) washimperv = reshape( repeat(WashImperv_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNI_0, AntMoist_0, Grow_0, NRur, NUrb)[:, :, :, NRur:], repeats=Nqual, axis=3), (NYrs, 12, 31, nlu - NRur, Nqual)) washperv = reshape( repeat(WashPerv_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNP_0, AntMoist_0, Grow_0, NRur, NUrb)[:, :, :, NRur:], repeats=Nqual, axis=3), (NYrs, 12, 31, nlu - NRur, Nqual)) urbloadred = UrbLoadRed_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, Storm, UrbBMPRed)[:, :, :, NRur:] temp = reshape( repeat(Imper[NRur:] * (1 - ISRR) * (1 - ISRA), repeats=Nqual, axis=0), (-1, Nqual)) # making an assumption that Area cannot be negative. Therefor where area = 0 result will be <= 0 and will be set to zero before returned (eliminating an if) result[nonzeroday] = (washimperv[nonzeroday] * LoadRateImp[NRur:] * temp + washperv[nonzeroday] * LoadRatePerv[NRur:] * (1 - temp)) * reshape( repeat(Area[NRur:], repeats=Nqual, axis=0), (nlu - NRur, Nqual)) - urbloadred[nonzeroday] return maximum(result, 0)
def Erosion_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area): water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) rureros = RurEros_f(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area) return sum(sum(rureros, axis=3), axis=2)
def AMC5_yesterday(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0): water = Water_f(NYrs, DaysMonth, InitSnow_0, Temp, Prec) return AMC5_yesterday_inner(NYrs, DaysMonth, AntMoist_0, water)