Note
Click here to download the full example code
Insolation by orientationΒΆ
Transposing across the entire sky dome (and then some!)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pvlib
lat, lon = 40, -80
metadata, weather = pvlib.iotools.get_psm3(lat, lon, 'DEMO_KEY',
email='kevin.anderson@nrel.gov',
names='2019', interval=5)
dni_extra = pvlib.irradiance.get_extra_radiation(weather.index)
solpos = pvlib.solarposition.get_solarposition(weather.index, lat, lon)
results = []
for surface_azimuth in np.arange(0, 360, 5):
for surface_tilt in np.arange(0, 180, 5):
transposed = pvlib.irradiance.get_total_irradiance(
surface_tilt=surface_tilt,
surface_azimuth=surface_azimuth,
solar_zenith=solpos['apparent_zenith'],
solar_azimuth=solpos['azimuth'],
dni=weather['DNI'],
ghi=weather['GHI'],
dhi=weather['DHI'],
dni_extra=dni_extra,
albedo=weather['Surface Albedo'],
model='haydavies',
)
total_insolation = transposed['poa_global'].resample('h').mean().sum()
results.append({
'surface_tilt': surface_tilt,
'surface_azimuth': surface_azimuth,
'annual_insolation': total_insolation,
})
df = pd.DataFrame(results)
df2 = df.pivot_table(index='surface_azimuth',
columns='surface_tilt',
values='annual_insolation')
plt.figure()
plt.pcolormesh(df2.columns, df2.index, df2, shading='auto')
plt.colorbar()
plt.contour(df2.columns, df2.index, df2, levels=15, colors='k')
plt.ylabel(r'Surface Azimuth [$\degree$]')
plt.xlabel(r'Surface Tilt [$\degree$]')
plt.title('POA Insolation [Whm^-2]')
plt.show()
Total running time of the script: ( 1 minutes 56.519 seconds)