Insolation by orientationΒΆ

Transposing across the entire sky dome (and then some!)

POA Insolation [Whm^-2]
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)

Gallery generated by Sphinx-Gallery