def test_sw(): """Test shortwave flux calculation""" r = meteorology.clearsky_shortwave_irradiance_year(42, 100) assert abs(r[0] - 7.20) < 0.01 assert abs(r[90] - 22.45) < 0.01 assert abs(r[182] - 32.74) < 0.01 assert abs(r[270] - 19.07) < 0.01 assert abs(r[364] - 7.16) < 0.01
def test_sw(self): """Test shortwave flux calculation""" r = meteorology.clearsky_shortwave_irradiance_year(42, 100) self.assertAlmostEquals(r[0], 7.20, 2) self.assertAlmostEquals(r[90], 22.45, 2) self.assertAlmostEquals(r[182], 32.74, 2) self.assertAlmostEquals(r[270], 19.07, 2) self.assertAlmostEquals(r[364], 7.16, 2)
def make_daily_rad_plot(ctx): """Generate a daily radiation plot""" # Get clear sky theory theory = meteorology.clearsky_shortwave_irradiance_year( ctx["_nt"].sts[ctx["station"]]["lat"], ctx["_nt"].sts[ctx["station"]]["elevation"], ) icursor = ctx["pgconn"].cursor(cursor_factory=psycopg2.extras.DictCursor) icursor.execute(""" SELECT valid, slrmj_tot_qc from sm_daily where station = '%s' and valid >= '%s' and valid <= '%s' and slrmj_tot_qc > 0 and slrmj_tot_qc < 40 ORDER by valid ASC """ % ( ctx["station"], ctx["sts"].strftime("%Y-%m-%d"), ctx["ets"].strftime("%Y-%m-%d"), )) dates = [] vals = [] tmax = [] if icursor.rowcount == 0: raise NoDataFound("No Data Found, sorry") for row in icursor: dates.append(row[0]) vals.append(row[1]) jday = int(row[0].strftime("%j")) if jday > 364: jday = 364 tmax.append(theory[jday]) df = pd.DataFrame(dict(dates=dates, vals=vals, jday=jday, tmax=tmax)) (fig, ax) = plt.subplots(1, 1) ax.bar( dates, vals, fc="tan", ec="brown", zorder=2, align="center", label="Observed", ) ax.plot(dates, tmax, label=r"Modelled Max $\tau$ =0.75", color="k", lw=1.5) ax.grid(True) ax.xaxis.set_major_formatter(mdates.DateFormatter("%-d %b\n%Y")) interval = int(len(dates) / 7.0 + 1) ax.xaxis.set_major_locator(mdates.DayLocator(interval=interval)) ax.set_ylabel("Solar Radiation $MJ m^{-2}$") ax.set_title( ("ISUSM Station: %s Timeseries\n" "Daily Solar Radiation") % (ctx["_nt"].sts[ctx["station"]]["name"], )) ax.set_ylim(0, 38) ax.legend(loc=1, ncol=2, fontsize=10) return fig, df
def make_daily_rad_plot(ctx): """Generate a daily radiation plot""" import matplotlib matplotlib.use('agg') import matplotlib.pyplot as plt import matplotlib.dates as mdates # Get clear sky theory theory = meteorology.clearsky_shortwave_irradiance_year( ctx['nt'].sts[ctx['station']]['lat'], ctx['nt'].sts[ctx['station']]['elevation']) icursor = ctx['pgconn'].cursor(cursor_factory=psycopg2.extras.DictCursor) icursor.execute("""SELECT valid, slrmj_tot_qc from sm_daily where station = '%s' and valid >= '%s' and valid <= '%s' and slrmj_tot_qc is not null ORDER by valid ASC """ % (ctx['station'], ctx['sts'].strftime("%Y-%m-%d"), ctx['ets'].strftime("%Y-%m-%d"))) dates = [] vals = [] tmax = [] if icursor.rowcount == 0: raise Exception("No Data Found, sorry") for row in icursor: dates.append(row[0]) vals.append(row[1]) jday = int(row[0].strftime("%j")) if jday > 364: jday = 364 tmax.append(theory[jday]) df = pd.DataFrame(dict(dates=dates, vals=vals, jday=jday, tmax=tmax)) (fig, ax) = plt.subplots(1, 1) ax.bar(dates, vals, fc='tan', ec='brown', zorder=2, align='center', label='Observed') ax.plot(dates, tmax, label=r"Modelled Max $\tau$ =0.75", color='k', lw=1.5) ax.grid(True) ax.xaxis.set_major_formatter(mdates.DateFormatter('%-d %b\n%Y')) interval = len(dates) / 7 + 1 ax.xaxis.set_major_locator(mdates.DayLocator(interval=interval)) ax.set_ylabel("Solar Radiation $MJ m^{-2}$") ax.set_title( ("ISUSM Station: %s Timeseries\n" "Daily Solar Radiation") % (ctx['nt'].sts[ctx['station']]['name'], )) ax.legend(loc='best', ncol=1, fontsize=10) return fig, df
def make_daily_rad_plot(station, sts, ets): """Generate a daily radiation plot""" # Get clear sky theory theory = meteorology.clearsky_shortwave_irradiance_year( nt.sts[station]['lat'], nt.sts[station]['elevation']) icursor = ISUAG.cursor(cursor_factory=psycopg2.extras.DictCursor) icursor.execute("""SELECT valid, slrmj_tot_qc from sm_daily where station = '%s' and valid >= '%s' and valid <= '%s' and slrmj_tot_qc is not null ORDER by valid ASC """ % (station, sts.strftime("%Y-%m-%d"), ets.strftime("%Y-%m-%d"))) dates = [] vals = [] tmax = [] for row in icursor: dates.append(row[0]) vals.append(row[1]) jday = int(row[0].strftime("%j")) if jday > 364: jday = 364 tmax.append(theory[jday]) (_, ax) = plt.subplots(1, 1) ax.bar(dates, vals, fc='tan', ec='brown', zorder=2, align='center', label='Observed') ax.plot(dates, tmax, label=r"Modelled Max $\tau$ =0.75", color='k', lw=1.5) ax.grid(True) ax.xaxis.set_major_formatter(mdates.DateFormatter('%-d %b\n%Y')) interval = len(dates) / 7 + 1 ax.xaxis.set_major_locator(mdates.DayLocator(interval=interval)) ax.set_ylabel("Solar Radiation $MJ m^{-2}$") ax.set_title(("ISUSM Station: %s Timeseries\n" "Daily Solar Radiation") % (nt.sts[station]['name'], )) ax.legend(loc='best', ncol=1, fontsize=10) sys.stdout.write("Content-Type: image/png\n\n") plt.savefig(sys.stdout, format='png')
def make_daily_rad_plot(station, sts, ets): """Generate a daily radiation plot""" # Get clear sky theory theory = meteorology.clearsky_shortwave_irradiance_year( nt.sts[station]['lat'], nt.sts[station]['elevation']) icursor = ISUAG.cursor(cursor_factory=psycopg2.extras.DictCursor) icursor.execute("""SELECT valid, slrmj_tot_qc from sm_daily where station = '%s' and valid >= '%s' and valid <= '%s' and slrmj_tot_qc is not null ORDER by valid ASC """ % (station, sts.strftime("%Y-%m-%d"), ets.strftime("%Y-%m-%d"))) dates = [] vals = [] tmax = [] for row in icursor: dates.append(row[0]) vals.append(row[1]) jday = int(row[0].strftime("%j")) if jday > 364: jday = 364 tmax.append(theory[jday]) (_, ax) = plt.subplots(1, 1) ax.bar(dates, vals, fc='tan', ec='brown', zorder=2, align='center', label='Observed') ax.plot(dates, tmax, label=r"Modelled Max $\tau$ =0.75", color='k', lw=1.5) ax.grid(True) ax.xaxis.set_major_formatter(mdates.DateFormatter('%-d %b\n%Y')) interval = len(dates) / 7 + 1 ax.xaxis.set_major_locator(mdates.DayLocator(interval=interval)) ax.set_ylabel("Solar Radiation $MJ m^{-2}$") ax.set_title(("ISUSM Station: %s Timeseries\n" "Daily Solar Radiation" ) % (nt.sts[station]['name'], )) ax.legend(loc='best', ncol=1, fontsize=10) sys.stdout.write("Content-Type: image/png\n\n") plt.savefig(sys.stdout, format='png')