Note
Click here to download the full example code
Insolation by orientationΒΆ
Transposing across the entire sky dome (and then some!)
![POA Insolation [Whm^-2]](../../_images/sphx_glr_insolation-by-orientation_001.png)
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)