def OF(Qobs, Qout, q_uz_routed, q_lz_trans, coordinates): all_errors = [] # error for all internal stations for i in range(len(coordinates) - 1): Quz = np.reshape( q_uz_routed[int(coordinates.loc[coordinates.index[i], "cell_row"]), int(coordinates.loc[coordinates.index[i], "cell_col"]), :-1], len(Qobs)) Qlz = np.reshape( q_lz_trans[int(coordinates.loc[coordinates.index[i], "cell_row"]), int(coordinates.loc[coordinates.index[i], "cell_col"]), :-1], len(Qobs)) Q = Quz + Qlz all_errors.append((PC.RMSE(Qobs[:, i], Q)) * coordinates.loc[coordinates.index[i], 'weight']) #outlet observed discharge is at the end of the array all_errors.append((PC.RMSE(Qobs[:, -1], Qout)) * coordinates.loc[coordinates.index[-1], 'weight']) print(all_errors) error = sum(all_errors) return error
Qobs = Jiboa.QGauges[Jiboa.GaugesTable.loc[0, 'id']] gaugeid = Jiboa.GaugesTable.loc[0, 'id'] WS = {} WS['type'] = 1 WS['N'] = 3 ModelMetrics = dict() ModelMetrics['Calib_RMSEHF'] = round( Pf.RMSEHF(Qobs, Jiboa.Qsim[gaugeid], WS['type'], WS['N'], 0.75), 3) ModelMetrics['Calib_RMSELF'] = round( Pf.RMSELF(Qobs, Jiboa.Qsim[gaugeid], WS['type'], WS['N'], 0.75), 3) ModelMetrics['Calib_NSEHf'] = round(Pf.NSE(Qobs, Jiboa.Qsim[gaugeid]), 3) ModelMetrics['Calib_NSELf'] = round( Pf.NSE(np.log(Qobs), np.log(Jiboa.Qsim[gaugeid])), 3) ModelMetrics['Calib_RMSE'] = round(Pf.RMSE(Qobs, Jiboa.Qsim[gaugeid]), 3) ModelMetrics['Calib_KGE'] = round(Pf.KGE(Qobs, Jiboa.Qsim[gaugeid]), 3) ModelMetrics['Calib_WB'] = round(Pf.WB(Qobs, Jiboa.Qsim[gaugeid]), 3) print(ModelMetrics) #%% plot gaugei = 0 plotstart = "2012-06-16" plotend = "2013-12-23" Jiboa.PlotHydrograph(plotstart, plotend, gaugei) #%% """ ============================================================================= AnimateArray(Arr, Time, NoElem, TicksSpacing = 2, Figsize=(8,8), PlotNumbers=True, NumSize= 8, Title = 'Total Discharge',titlesize = 15, Backgroundcolorthreshold=None,
#%% run the model Sim =pd.DataFrame(index = lakeCalib.index) st, Sim['Q'], q_uz_routed, q_lz_trans = RunHAPIwithLake(HBV, Paths, ParPath, p2, init_st, snow, lakeCalibArray, StageDischargeCurve, LakeParameters, lakecell,Lake_init_st) #%% calculate some metrics WS = {} WS['type'] = 1 WS['N'] = 3 ModelMetrics=dict() ModelMetrics['Calib_RMSEHF'] = round(Pf.RMSEHF(lakeCalib['Q'],Sim['Q'],WS['type'],WS['N'],0.75),3) ModelMetrics['Calib_RMSELF'] = round(Pf.RMSELF(lakeCalib['Q'],Sim['Q'],WS['type'],WS['N'],0.75),3) ModelMetrics['Calib_NSEHf'] = round(Pf.NSE(lakeCalib['Q'],Sim['Q']),3) ModelMetrics['Calib_NSELf'] = round(Pf.NSE(np.log(lakeCalib['Q']),np.log(Sim['Q'])),3) ModelMetrics['Calib_RMSE'] = round(Pf.RMSE(lakeCalib['Q'],Sim['Q']),3) ModelMetrics['Calib_KGE'] = round(Pf.KGE(lakeCalib['Q'],Sim['Q']),3) ModelMetrics['Calib_WB'] = round(Pf.WB(lakeCalib['Q'],Sim['Q']),3) print(ModelMetrics) #%% plotting plt.figure(50,figsize=(15,8)) Sim.Q.plot(color=[(0,0.3,0.7)],linewidth=2.5,label="Observed data", zorder = 10) ax1=lakeCalib['Q'].plot(color='#DC143C',linewidth=2.8,label='Simulated Calibration data') ax1.annotate("Model performance" ,xy=('2012-12-01 00:00:00',20),fontsize=15) ax1.annotate("RMSE = " + str(round(ModelMetrics['Calib_RMSE'],3)),xy=('2012-12-01 00:00:00',20-1.5),fontsize=15) ax1.annotate("NSE = " + str(round(ModelMetrics['Calib_NSEHf'],2)),xy=('2012-12-01 00:00:00',20-3),fontsize=15) plt.legend() #ax1.annotate("RMSELF = " + str(round(committee['c_rmself'],3)),xy=('2013-01-01 00:00:00',max(calib['Q'])-3),fontsize=15) #ax2=single_valid['Q'].plot(color='orange',linewidth=2.8,label='Simulated Validation')
st, Sim['Q'], q_uz_routed, q_lz_trans = RunHAPIwithLake( HBV, Paths, ParPath, p2, init_st, snow, lakeCalibArray, StageDischargeCurve, LakeParameters, lakecell, Lake_init_st) #%% calculate some metrics WS = {} WS['type'] = 1 WS['N'] = 3 ModelMetrics = dict() ModelMetrics['CalibErrorHf'] = Pf.RMSEHF(lakeCalib['Q'], Sim['Q'], WS['type'], WS['N'], 0.75) ModelMetrics['CalibErrorLf'] = Pf.RMSELF(lakeCalib['Q'], Sim['Q'], WS['type'], WS['N'], 0.75) ModelMetrics['CalibNSEHf'] = Pf.NSE(lakeCalib['Q'], Sim['Q']) ModelMetrics['CalibNSELf'] = Pf.NSE(np.log(lakeCalib['Q']), np.log(Sim['Q'])) ModelMetrics['CalibRMSE'] = Pf.RMSE(lakeCalib['Q'], Sim['Q']) ModelMetrics['CalibKGE'] = Pf.KGE(lakeCalib['Q'], Sim['Q']) ModelMetrics['CalibWB'] = Pf.WB(lakeCalib['Q'], Sim['Q']) #%% plotting plt.figure(50, figsize=(15, 8)) Sim.Q.plot(color=[(0, 0.3, 0.7)], linewidth=2.5, label="Observed data", zorder=10) ax1 = lakeCalib['Q'].plot(color='#DC143C', linewidth=2.8, label='Simulated Calibration data') ax1.annotate("Model performance", xy=('2012-12-01 00:00:00', 20), fontsize=15) ax1.annotate("RMSE = " + str(round(ModelMetrics['CalibRMSE'], 3)), xy=('2012-12-01 00:00:00', 20 - 1.5), fontsize=15)