def RuralQTotal(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, NUrb, AntMoist_0, Grow_0, Area): result = zeros((NYrs, 12, 31)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) q_run = Qrun(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, CN, AntMoist_0, Grow_0) rur_area_total = RurAreaTotal(NRur, Area) retention = Retention(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0) area_total = AreaTotal(NRur, NUrb, Area) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): result[Y][i][ j] = 0 # this does not need to be calculated daily if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): if CN[l] > 0: # TODO: CN in set to all zeros in datamodel:42 if water[Y][i][j] >= 0.2 * retention[Y][i][j][l]: result[Y][i][j] += q_run[Y][i][j][l] * Area[ l] / rur_area_total if result[Y][i][j] > 0: result[Y][i][j] *= rur_area_total / area_total else: result[Y][i][j] = 0 # TODO: this seems redundant else: pass return result
def WashImperv(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNI_0, AntMoist_0, Grow_0, NRur, NUrb): result = zeros((NYrs, 12, 31, 16)) impervaccum = zeros(16) carryover = zeros(16) nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) qruni = QrunI(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNI_0, AntMoist_0, Grow_0) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): for l in range(nlu): impervaccum[l] = carryover[l] impervaccum[l] = (impervaccum[l] * exp(-0.12) + (1 / 0.12) * (1 - exp(-0.12))) if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: pass else: for l in range(NRur, nlu): result[Y][i][j][l] = (1 - math.exp( -1.81 * qruni[Y][i][j][l])) * impervaccum[l] impervaccum[l] -= result[Y][i][j][l] else: pass for l in range(nlu): carryover[l] = impervaccum[l] return result
def WashPerv(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNP_0, AntMoist_0, Grow_0, NRur, NUrb): pervaccum = zeros(16) nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) qrunp = QrunP(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNP_0, AntMoist_0, Grow_0) washperv = zeros((NYrs, 12, 31, 16)) carryover = zeros(16) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): for l in range(nlu): pervaccum[l] = carryover[l] pervaccum[l] = (pervaccum[l] * exp(-0.12) + (1 / 0.12) * (1 - exp(-0.12))) if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: pass else: for l in range(NRur, nlu): washperv[Y][i][j][l] = (1 - math.exp( -1.81 * qrunp[Y][i][j][l])) * pervaccum[l] pervaccum[l] -= washperv[Y][i][j][l] else: pass for l in range(nlu): carryover[l] = pervaccum[l] return washperv
def UrbQRunoff(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, CNI_0, CNP_0, AntMoist_0, Grow_0, Imper, ISRR, ISRA): result = zeros((NYrs, 16, 12)) nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) qruni = QrunI(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNI_0, AntMoist_0, Grow_0) qrunp = QrunP(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNP_0, AntMoist_0, Grow_0) lu = LU(NRur, NUrb) for Y in range(NYrs): for i in range(12): for l in range(nlu): result[Y, l, i] = 0 for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: pass else: for l in range(NRur, nlu): result[Y][l][i] += (qruni[Y][i][j][l] * (Imper[l] * (1 - ISRR[lu[l]]) * (1 - ISRA[lu[l]])) + qrunp[Y][i][j][l] * (1 - (Imper[l] * (1 - ISRR[lu[l]]) * (1 - ISRA[lu[l]])))) else: pass return result
def UrbanQTotal(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urb_area_total = UrbAreaTotal(NRur, NUrb, Area) qrun_i = QrunI(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNI_0, AntMoist_0, Grow_0) qrun_p = QrunP(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNP_0, AntMoist_0, Grow_0) lu = LU(NRur, NUrb) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: pass else: for l in range(NRur, nlu): if urb_area_total > 0: result[Y][i][j] += ( (qrun_i[Y][i][j][l] * (Imper[l] * (1 - ISRR[lu[l]]) * (1 - ISRA[lu[l]])) + qrun_p[Y][i][j][l] * (1 - (Imper[l] * (1 - ISRR[lu[l]]) * (1 - ISRA[lu[l]])))) * Area[l] / urb_area_total) return result
def Runoff(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN, Landuse, TileDrainDensity): result = zeros((NYrs, 12)) adj_q_total = AdjQTotal(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(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, CN) tile_drain_ro = TileDrainRO(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, AntMoist_0, NUrb, Grow_0, Landuse, Area, TileDrainDensity) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if adj_q_total[Y][i][j] > 0: result[Y][i] += adj_q_total[Y][i][j] else: result[Y][i] += q_total[Y][i][j] # ADJUST THE SURFACE RUNOFF result[Y][i] = result[Y][i] - tile_drain_ro[Y][i] if result[Y][i] < 0: result[Y][i] = 0 return result
def LuLoad(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, FilterWidth, PctStrmBuf): result = zeros((NYrs, 16, 3)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) nlu = NLU(NRur, NUrb) adjurbanqtotal = AdjUrbanQTotal(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil) surfaceload_1 = SurfaceLoad_1(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) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if adjurbanqtotal[Y][i][j] > 0.001: for l in range(NRur, nlu): for q in range(Nqual): result[Y][l][q] += surfaceload_1[Y][i][j][l][q] else: pass else: pass return result
def RurQRunoff(NYrs, DaysMonth, InitSnow_0, Temp, Prec, AntMoist_0, NRur, NUrb, CN, Grow_0): result = zeros((NYrs, 16, 12)) nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) retention = Retention(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0) qrun = Qrun(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, CN, AntMoist_0, Grow_0) for Y in range(NYrs): for i in range(12): for l in range(nlu): result[Y, l, i] = 0.0 for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): if CN[l] > 0: if water[Y][i][j] >= 0.2 * retention[Y][i][j][l]: result[Y][l][i] += qrun[Y][i][j][l] else: pass else: pass else: pass return result
def QrunI(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, CNI_0, AntMoist_0, Grow_0): result = zeros((NYrs, 12, 31, 16)) # TODO: should this be nlu? nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) cni = CNI(NRur, NUrb, CNI_0) c_num_imperv_reten = CNumImpervReten(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CNI_0, Grow_0) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur, nlu): # TODO: what is this for? result[Y][i][j][l] = 0 if water[Y][i][j] < 0.05: pass else: for l in range(NRur, nlu): if cni[1][l] > 0: if water[Y][i][j] >= 0.2 * c_num_imperv_reten[ Y][i][j][l]: result[Y][i][j][l] = ( water[Y][i][j] - 0.2 * c_num_imperv_reten[Y][i][j][l] )**2 / (water[Y][i][j] + 0.8 * c_num_imperv_reten[Y][i][j][l]) return result
def RetentionEff(NYrs, DaysMonth, InitSnow_0, Temp, Prec, Qretention, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, PctAreaInfil): # result = 0 result = zeros((NYrs, 12, 31)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urbanqtotal = UrbanQTotal(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: pass else: if Qretention > 0: if urbanqtotal[Y][i][j] > 0: if urbanqtotal[Y][i][ j] <= Qretention * PctAreaInfil: result[Y][i][j] = 1 else: result[Y][i][ j] = Qretention * PctAreaInfil / urbanqtotal[ Y][i][j] else: pass return result
def AdjUrbanQTotal(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil): result = zeros((NYrs, 12, 31)) adj_urban_q_total = 0 # used because this is a buffered variable water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urban_q_total = UrbanQTotal(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) urb_area_total = UrbAreaTotal(NRur, NUrb, Area) area_total = AreaTotal(NRur, NUrb, Area) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: ## z.adj_urban_q_total = get_value_for_yesterday(z.adj_urban_q_total_1,0,Y,i,j,z.NYrs,z.DaysMonth) adj_urban_q_total *= urb_area_total / area_total # pass else: adj_urban_q_total = urban_q_total[Y][i][j] if Qretention > 0: if urban_q_total[Y][i][j] > 0: if urban_q_total[Y][i][j] <= Qretention * PctAreaInfil: adj_urban_q_total = 0 else: adj_urban_q_total = urban_q_total[Y][i][j] - Qretention * PctAreaInfil # if urb_area_total > 0: # adj_urban_q_total = adj_urban_q_total * urb_area_total / area_total # else: # adj_urban_q_total = 0 else: pass result[Y][i][j] = adj_urban_q_total return result
def CNum(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, CN, NRur, NUrb, Grow_0): result = zeros((NYrs, 12, 31, 10)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) melt = Melt(NYrs, DaysMonth, Temp, InitSnow_0, Prec) # I think this should be Melt_1 grow_factor = GrowFactor(Grow_0) amc5 = AMC5(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0) new_cn = NewCN(NRur, NUrb, CN) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): if CN[l] > 0: if melt[Y][i][j] <= 0: if grow_factor[i] > 0: # growing season if get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) >= 5.33: result[Y][i][j][l] = new_cn[2][l] elif get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) < 3.56: result[Y][i][j][l] = new_cn[0][l] + ( CN[l] - new_cn[0][l] ) * get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) / 3.56 else: result[Y][i][j][l] = CN[l] + ( new_cn[2][l] - CN[l]) * (get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) - 3.56) / 1.77 else: # dormant season if get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) >= 2.79: result[Y][i][j][l] = new_cn[2][l] elif get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) < 1.27: result[Y][i][j][l] = new_cn[0][l] + ( CN[l] - new_cn[0][l] ) * get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) / 1.27 else: result[Y][i][j][l] = CN[l] + ( new_cn[2][l] - CN[l]) * (get_value_for_yesterday( amc5, 0, Y, i, j, DaysMonth) - 1.27) / 1.52 else: result[Y][i][j][l] = new_cn[2][l] return result
def SurfaceLoad(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): result = zeros((NYrs, 12, 31, 16, Nqual)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adjurbanqtotal = AdjUrbanQTotal(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil) nlu = NLU(NRur, NUrb) washimperv = WashImperv(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNI_0, AntMoist_0, Grow_0, NRur, NUrb) washperv = WashPerv(NYrs, DaysMonth, InitSnow_0, Temp, Prec, CNP_0, AntMoist_0, Grow_0, NRur, NUrb) lu_1 = LU_1(NRur, NUrb) urbloadred = UrbLoadRed(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) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if adjurbanqtotal[Y][i][j] > 0.001: for l in range(NRur, nlu): for q in range(Nqual): if Area[l] > 0: result[Y][i][j][l][q] = ((( LoadRateImp[l][q] * washimperv[Y][i][j][l] * ((Imper[l] * (1 - ISRR[lu_1[l]]) * (1 - ISRA[lu_1[l]])) # * (SweepFrac[i] + ( # (1 - SweepFrac[i]) * ((1 - UrbSweepFrac) * Area[l]) / Area[l])) * 1 ) # TODO For some reason, this commented out code always needs to evaluate to 1 in order for the separation to occur + LoadRatePerv[l][q] * washperv[Y][i][j][l] * (1 - (Imper[l] * (1 - ISRR[lu_1[l]]) * (1 - ISRA[lu_1[l]])))) * Area[l]) - urbloadred[Y][i] [j][l][q]) else: result[Y][i][j][l][q] = 0 if result[Y][i][j][l][q] < 0: result[Y][i][j][l][q] = 0 else: pass else: pass else: pass return result
def Infiltration(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(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, CN) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if qtotal[Y][i][j] <= water[Y][i][j]: result[Y][i][j] = water[Y][i][j] - qtotal[Y][i][j] return result
def AgRunoff(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, AntMoist_0, NUrb, Grow_0, Landuse, Area): result = zeros((NYrs, 12)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) ag_q_total = AgQTotal(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, CN, AntMoist_0, NUrb, Grow_0, Landuse, Area) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: result[Y][i] += ag_q_total[Y][i][j] return result
def RurEros(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area): result = zeros((NYrs, 12, 31, NRur)) erosiv = Erosiv(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): result[Y][i][j][l] = 1.32 * erosiv[Y][i][j] * KF[ l] * LS[l] * C[l] * P[l] * Area[l] return result
def Erosion(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area): result = zeros((NYrs, 12)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) rureros = RurEros(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): for l in range(NRur): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: result[Y][i] = result[Y][i] + rureros[Y][i][j][l] else: pass return result
def UrbanRunoff(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA): result = zeros((NYrs, 12)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urbanqtotal_1 = UrbanQTotal_1(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: result[Y][i] += urbanqtotal_1[Y][i][j] else: pass return result
def UrbRunoffLiter(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA): result = zeros((NYrs, 12)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urbareatotal = UrbAreaTotal(NRur, NUrb, Area) urbanrunoff = UrbanRunoff(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: result[Y][i] = (urbanrunoff[Y][i] / 100) * urbareatotal * 10000 * 1000 else: pass return result
def CNumPerv(NYrs, DaysMonth, Temp, NRur, NUrb, CNP_0, InitSnow_0, Prec, Grow_0, AntMoist_0): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu)) cnp = CNP(NRur, NUrb, CNP_0) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) melt = Melt(NYrs, DaysMonth, Temp, InitSnow_0, Prec) grow_factor = GrowFactor(Grow_0) amc5 = AMC5(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if water[Y][i][j] < 0.05: pass else: for l in range(NRur, nlu): if cnp[1][l] > 0: if melt[Y][i][j] <= 0: if grow_factor[i] > 0: # Growing season if get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) >= 5.33: result[Y][i][j][l] = cnp[2][l] elif get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) < 3.56: result[Y][i][j][l] = cnp[0][l] + ( cnp[1][l] - cnp[0][l]) * \ get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) / 3.56 else: result[Y][i][j][l] = cnp[1][l] + (cnp[2][l] - cnp[1][l]) * ( get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) - 3.56) / 1.77 else: # Dormant season if get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) >= 2.79: result[Y][i][j][l] = cnp[2][l] elif get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) < 1.27: result[Y][i][j][l] = cnp[0][l] + ( cnp[1][l] - cnp[0][l]) * \ get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) / 1.27 else: result[Y][i][j][l] = cnp[1][l] + (cnp[2][l] - cnp[1][l]) * ( get_value_for_yesterday(amc5, 0, Y, i, j, DaysMonth) - 1.27) / 1.52 else: result[Y][i][j][l] = cnp[2][l] return result
def SedTrans(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)) # These used to be (NYrs,16) but it looks like a mistake water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adjqtotal = AdjQTotal(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, n25b, CN) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: result[Y][i] = result[Y][i] + adjqtotal[Y][i][j]**1.67 else: result[Y][i] = result[Y][i] return result
def QTotal(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(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) rural_q_total = RuralQTotal(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, NUrb, AntMoist_0, Grow_0, Area) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): # z.QTotal = 0 if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: result[Y][i][ j] = urban_q_total_1[Y][i][j] + rural_q_total[Y][i][j] return result
def Retention(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu)) # Why nlu ? c_num = CNum(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, CN, NRur, NUrb, Grow_0) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): if CN[l] > 0: # TODO:CN is set to zero in datamodel result[Y][i][j][ l] = 2540 / c_num[Y][i][j][l] - 25.4 if result[Y][i][j][l] < 0: result[Y][i][j][l] = 0 return result
def UrbanQTotal_1(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA): result = zeros((NYrs, 12, 31)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) urban_area_total = UrbAreaTotal(NRur, NUrb, Area) area_total = AreaTotal(NRur, NUrb, Area) urban_q_total = UrbanQTotal(NYrs, DaysMonth, NRur, NUrb, Temp, InitSnow_0, Prec, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: if urban_area_total > 0: result[Y][i][j] = urban_q_total[Y][i][ j] * urban_area_total / area_total else: result[Y][i][j] = 0 return result
def DisLoad(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, Area, CNI_0, AntMoist_0, Grow_0, CNP_0, Imper, ISRR, ISRA, Qretention, PctAreaInfil, Nqual, LoadRateImp, SweepFrac, UrbSweepFrac, LoadRatePerv, Storm, UrbBMPRed, DisFract, FilterWidth, PctStrmBuf): result = zeros((NYrs, 12, 3)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) netdisload = NetDisLoad(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) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for q in range(Nqual): result[Y][i][q] += netdisload[Y][i][j][q] if result[Y][i][q] < 0: result[Y][i][q] = 0 else: pass return result
def ErosWashoff(NYrs, DaysMonth, InitSnow_0, Temp, Prec, NRur, NUrb, Acoef, KF, LS, C, P, Area): result = zeros((NYrs, 16, 12)) nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) rureros = RurEros(NYrs, DaysMonth, Temp, InitSnow_0, Prec, Acoef, NRur, KF, LS, C, P, Area) for Y in range(NYrs): for i in range(12): for l in range(nlu): result[Y, l, i] = 0 for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): result[Y][l][i] = result[Y][l][i] + rureros[Y][i][j][l] else: pass return result
def AntMoist(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0): result = zeros((NYrs, 12, 31)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) AMC5 = 0 AntMoist = copy.deepcopy(AntMoist_0) for k in range(5): AMC5 += AntMoist[k] for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): AMC5 = AMC5 - AntMoist[4] + water[Y][i][j] AntMoist[4] = AntMoist[3] AntMoist[3] = AntMoist[2] AntMoist[2] = AntMoist[1] AntMoist[1] = AntMoist[0] AntMoist[0] = water[Y][i][j] result[Y][i][ j] = AMC5 # TODO: why did this fix the mismatch of amc5? return AntMoist
def AdjQTotal(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(NYrs, DaysMonth, InitSnow_0, Temp, Prec) adj_urban_q_total = AdjUrbanQTotal_1(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(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, CN, NUrb, AntMoist_0, Grow_0, Area) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: # Assume 20% reduction of runoff with urban wetlands result[Y][i][j] = (adj_urban_q_total[Y][i][j] * (1 - (n25b * 0.2))) + rural_q_total[Y][i][j] return result
def Qrun(NYrs, DaysMonth, Temp, InitSnow_0, Prec, NRur, NUrb, CN, AntMoist_0, Grow_0): nlu = NLU(NRur, NUrb) result = zeros((NYrs, 12, 31, nlu)) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) retention = Retention(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CN, Grow_0) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: for l in range(NRur): result[Y][i][j][l] = 0 if CN[l] > 0: if water[Y][i][j] >= 0.2 * retention[Y][i][j][l]: result[Y][i][j][l] = ( water[Y][i][j] - 0.2 * retention[Y][i][j][l])**2 / ( water[Y][i][j] + 0.8 * retention[Y][i][j][l]) return result
def CNumPervReten(NYrs, DaysMonth, Temp, Prec, InitSnow_0, AntMoist_0, NRur, NUrb, CNP_0, Grow_0): cnp = CNP(NRur, NUrb, CNP_0) c_num_perv = CNumPerv(NYrs, DaysMonth, Temp, NRur, NUrb, CNP_0, InitSnow_0, Prec, Grow_0, AntMoist_0) nlu = NLU(NRur, NUrb) water = Water(NYrs, DaysMonth, InitSnow_0, Temp, Prec) result = zeros((NYrs, 12, 31, nlu)) for Y in range(NYrs): for i in range(12): for j in range(DaysMonth[Y][i]): if Temp[Y][i][j] > 0 and water[Y][i][j] > 0.01: # missing if water[Y][i][j] < 0.05: # missing pass else: for l in range(NRur, nlu): if cnp[1][l] > 0: result[Y][i][j][ l] = 2540 / c_num_perv[Y][i][j][l] - 25.4 if result[Y][i][j][l] < 0: result[Y][i][j][l] = 0 return result