Photovoltaic power
Using the API, or indeed the CLI interface in a programmatic way, however, we can generate photovoltaic power series. To do so, we need to define the location and time of interest, import some PVGIS-native data classes and naturally the corresponding API or CLI functions.
Really long outputs !
Using the API functions directly and printing out PVGIS' native data models leads to long and complex outputs. Nonetheless, there are many methods and attributes to work with, using Python's . syntax. For example, recall the .value attribute with which you can get the output values from an object !
Following is a how-to example, using however an interactive i/python session. So, it's recommended to launch an ipython interpreter :
and follow along.
Rich output
rich is installed by default along with PVGIS. In case, however, it isn't installed, you may want to install it for a great visual experience when printing out Python objects.
First, import the print function from the rich library. This will prettify our output !
Where ?¶
Define the geographic location and the positioning of our solar surface
>>> latitude = 1
>>> longitude = 1
>>> elevation = 214
>>> surface_orientation = 1
>>> surface_tilt = 1
When ?¶
Prepate a series of timestamps as a Pandas DatetimeIndex, using our helper function generate_datetime_series
>>> from pvgisprototype.api.datetime.datetimeindex import generate_datetime_series
>>> timestamps = generate_datetime_series(start_time="2010-01-27 08:00:00", end_time="2010-01-27 18:00:00", frequency="h")
and the default UTC timezone as a ZoneInfo object
Let's confirm the generation of the timestamps and the timezone :
timestamps=DatetimeIndex(['2010-01-27 08:00:00', '2010-01-27 09:00:00', '2010-01-27 10:00:00', '2010-01-27 11:00:00', '2010-01-27 12:00:00', '2010-01-27 13:00:00', '2010-01-27 14:00:00', '2010-01-27 15:00:00', '2010-01-27 16:00:00', '2010-01-27 17:00:00', '2010-01-27 18:00:00'], dtype='datetime64[ns]', freq='h')
utc_zone=zoneinfo.ZoneInfo(key='UTC')
Important parameters¶
First, import required modules and custom data classes
Linke turbidity
>>> from pvgisprototype import LinkeTurbidityFactor
>>> linke_turbidity_factor_series = LinkeTurbidityFactor(value=1)
Type of the photovoltaic module
>>> from pvgisprototype.algorithms.huld.photovoltaic_module import PhotovoltaicModuleModel
>>> photovoltaic_module = PhotovoltaicModuleModel.CIS_FREE_STANDING
Temperature and Wind Speed
>>> from pvgisprototype import TemperatureSeries, WindSpeedSeries
>>> temperature_series = TemperatureSeries(value=14)
>>> wind_speed_series = WindSpeedSeries(value=0)
Spectral factor series
>>> from pvgisprototype import SpectralFactorSeries
>>> spectral_factor_series=SpectralFactorSeries(value=1)
Power¶
Now we can use the API function calculate_photovoltaic_power_output_series :
>>> from pvgisprototype.api.power.broadband import (calculate_photovoltaic_power_output_series)
>>> power = calculate_photovoltaic_power_output_series(
>>> longitude=longitude,
>>> latitude=latitude,
>>> elevation=elevation,
>>> surface_orientation=surface_orientation,
>>> surface_tilt=surface_tilt,
>>> timestamps=timestamps,
>>> timezone=utc_zone,
>>> linke_turbidity_factor_series=linke_turbidity_factor_series,
>>> photovoltaic_module=photovoltaic_module,
>>> spectral_factor_series=spectral_factor_series,
>>> temperature_series=temperature_series,
>>> wind_speed_series=wind_speed_series,
>>> )
Inspect the power output
Photovoltaic power components : OrderedDict([('Elevation', {}), ('Core', OrderedDict([('Name', 'Photovoltaic Power data model'), ('Title', 'Power'), ('Description', 'Photovoltaic Power based on a variant of King0s model (1998, 2004)'), ('Symbol', '⌁'), ('Power ⌁', array([4.5511003, 4.425904 , 3.2437537, 1.3269994, 0. , 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32)), ('Unit', 'W'), ('Equation', 'P(G₀, T₀) = G₀(P₀ₛₜ₃, m + k₁G₀) + k₂G₀)² + k₃T₀ + k₄T₀G₀ + k₅T₀G₀² + k₆T₀²')])), ('Context', {}), ('Metadata', {}), ('Out-of-range', {}), ('Sources', {}), ('References', {}), ('Fingerprint', {}), ('Surface Position', {})])
or indeed, some of the most important components like the values
Photovoltaic power series : [4.5511003 4.425904 3.2437537 1.3269994 0. 0. 0. 0. 0. 0. 0. ]
Structured output
The full object is really long and complex. debug from the devtools library comes handy to print long objects in a structured way, making it easier to read.
Install it
Note that this specific function might not render properly or at all the output in the HTML documentation you are reading !
Verbosity¶
With extra verbosity, which means more details
Level 1¶
Set verbosity=1
>>> power = calculate_photovoltaic_power_output_series(
>>> longitude=longitude,
>>> latitude=latitude,
>>> elevation=elevation,
>>> surface_orientation=surface_orientation,
>>> surface_tilt=surface_tilt,
>>> timestamps=timestamps,
>>> timezone=utc_zone,
>>> linke_turbidity_factor_series=linke_turbidity_factor_series,
>>> photovoltaic_module=photovoltaic_module,
>>> spectral_factor_series=spectral_factor_series,
>>> temperature_series=temperature_series,
>>> wind_speed_series=wind_speed_series,
>>> verbose=1, # or 2 or 3 and so on...
>>> )
and again inspect the power output
Photovoltaic Power -- Longer output
power=PhotovoltaicPower(diffuse_horizontal_irradiance=DiffuseSkyReflectedHorizontalIrradiance(angle_output_units=None, linke_turbidity_factor=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=1.0, unit='unitless', minimum=0, maximum=8), adjusted_for_atmospheric_refraction=None, adjust_for_atmospheric_refraction=True, solar_incidence_definition=None, solar_incidence_model=None, solar_incidence=None, azimuth_difference=array([], dtype=float64), solar_azimuth=None, solar_timing_algorithm=None, solar_positioning_algorithm='NOAA', location=None, extraterrestrial_normal_irradiance=ExtraterrestrialNormalIrradiance(fingerprint=False, quality='Not validated!', solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source=None, equation='Extraterrestrial Normal Irradiance = Solar Constant * Eccentricity Correction Factor', algorithm='The beam irradiance (solar energy) outside the atmosphere and at mean solar distance, is roughly constant at is 1367 W.m-2. However, the orbit of the earth around the sun is lightly eccentric hence its distance to the sun varies slightly across the year. In order to take into account the varying solar distance, the calculation of the extraterrestrial irradiance normal to the solar beam, considers an "eccentricity correction factor" ε.', unit='W/m²', value=array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32), symbol='⍖ ⦜', description='Extraterrestrial irradiance', label='⍖ ⦜ Extraterrestrial Normal Irradiance', title='Extraterrestrial Normal Irradiance', supertitle='Simulated Extraterrestrial Normal Irradiance Series', shortname='Extra', name='Extraterrestrial Normal Irradiance', day_of_year=array([27., 27., 27., 27., 27., 27., 27., 27., 27., 27., 27.], dtype=float32), day_angle=array([0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358], dtype=float32), distance_correction_factor=array([1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891], dtype=float32), output=OrderedDict([('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {}), ('Extraterrestrial Normal Irradiance', OrderedDict([('Unit', 'W/m²'), ('Extra ⍖ ⦜', array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32)), ('Symbol', '⍖ ⦜'), ('Description', 'Extraterrestrial irradiance'), ('Title', 'Extraterrestrial Normal Irradiance'), ('Name', 'Extraterrestrial Normal Irradiance')])), ('Solar Radiation Model', {})])), direct_horizontal_irradiance=None, global_horizontal_irradiance=array([], dtype=float64), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=SolarAltitude(out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), adjusted_for_atmospheric_refraction=True, solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', data_source=None, equation=None, algorithm=None, unit='radians', value=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⦩', description='Solar altitude data for a location and period in time', label=None, title='Solar Altitude', supertitle='Solar Irradiance', shortname='Altitude', name='Solar Altitude', refracted_value=array([], dtype=float64), min_radians=-1.5707963267948966, max_radians=1.5707963267948966, low_angle_threshold_radians=0.04, min_degrees=-90, max_degrees=90, low_angle_threshold_degrees=2.291831180523293, output={}), eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1367.0, data_source='PVGIS', equation='Dₕc = G₀ ⋅ Tₙ(Tₗₖ) ⋅ F_d(h₀)', algorithm='The estimate of the clear-sky diffuse sky-reflected horizontal irradiance is the product of the normal extraterrestrial irradiance G0, a diffuse transmission function Tn dependent only on the Linke turbidity factor TLK, and a diffuse solar altitude function Fd dependent only on the solar altitude.', unit='W/m²', value=array([13.23528183, 13.11557816, 11.90453171, 9.50004449, 5.84247296, 0. , 0. , 0. , 0. , 0. , 0. ]), symbol='🗤⭳', description='Clear-sky diffuse sky-reflected horizontal irradiance is a solar power component received per unit area at a given moment, expressed in watts per square meter (W/m²). The values concern a specific location and a moment or period in time.', label='🗤⭳ Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance', title='Sky-Diffuse Horizontal', supertitle='Sky-Diffuse Horizontal Irradiance', shortname='Clear-Sky-Diffuse Horizontal', name='Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance Data', output={}), direct_horizontal_irradiance=DirectHorizontalIrradiance(elevation=214.0, references="Scharmer, K., Greif, J., eds., 2000, The European solar radiation atlas. Vol. 2: Database and exploitation software. Paris (Les Presses de l'École des Mines).", solar_timing_algorithm=None, solar_positioning_algorithm=None, visible=array([], dtype=float64), surface_in_shade=LocationShading(horizon_height=HorizonHeight(out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='radians', value=array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), symbol='🏔', description='The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.', label='Horizon Height', title='Horizon Height', supertitle='Horizon Height data', shortname='Horizon', name='Horizon Height', min_radians=-1.5707963267948966, max_radians=1.5707963267948966, min_degrees=-90, max_degrees=90, output=OrderedDict([('Horizon Height', OrderedDict([('Name', 'Horizon Height'), ('Title', 'Horizon Height'), ('Description', 'The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.'), ('Symbol', '🏔'), ('Horizon 🏔', array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)), ('Unit', 'radians')])), ('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {})])), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=None, shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, solar_azimuth=array([3.0674548, 3.285377 , 3.5437274, 3.784806 , 4.0082417, 4.235689 , 4.449775 , 4.664314 , 4.889352 , 5.1368117, 5.420652 ], dtype=float32), solar_altitude=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='Unitless', value=array([False, False, False, False, False, True, True, True, True, True, True]), symbol='🮞', description=None, label='Location Shading', title='Location Shading', supertitle='Location Shading', shortname='Shading', name='Location Shading', output={}), shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', rayleigh_optical_thickness=None, optical_air_mass=OpticalAirMass(name='Relative optical air mass', title='Optical Air Mass', description='The relative optical air mass', value=array([3.9949794e+00, 4.0587072e+00, 4.8042397e+00, 7.1687570e+00, 1.8926144e+01, 2.8382838e+00, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17], dtype=float32), unit='Unitless', algorithm=None, equation='m = (p/p0)/(sin h0 ref + 0.50572 (h0 ref + 6.07995)-1.6364)', references='Kasten, F., Young, A.T., 1989, Revised optical air mass tables and approximation formula. Applied Optics, 28: 4735-4738.'), adjusted_for_atmospheric_refraction=None, direct_normal_irradiance=DirectNormalIrradiance(optical_air_mass=OpticalAirMass(name='Relative optical air mass', title='Optical Air Mass', description='The relative optical air mass', value=array([3.9949794e+00, 4.0587072e+00, 4.8042397e+00, 7.1687570e+00, 1.8926144e+01, 2.8382838e+00, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17], dtype=float32), unit='Unitless', algorithm=None, equation='m = (p/p0)/(sin h0 ref + 0.50572 (h0 ref + 6.07995)-1.6364)', references='Kasten, F., Young, A.T., 1989, Revised optical air mass tables and approximation formula. Applied Optics, 28: 4735-4738.'), rayleigh_optical_thickness=RayleighThickness(value=array([0.08272015, 0.08225811, 0.07739661, 0.06640826, 0.0414848 , 0.09283191, 0.15083866, 0.15083866, 0.15083866, 0.15083866, 0.15083866], dtype=float32), unit='Unitless'), linke_turbidity_factor_adjusted=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=-0.8661999702453613, unit='unitless', minimum=0, maximum=8), linke_turbidity_factor=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=1.0, unit='unitless', minimum=0, maximum=8), extraterrestrial_normal_irradiance=ExtraterrestrialNormalIrradiance(fingerprint=False, quality='Not validated!', solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source=None, equation='Extraterrestrial Normal Irradiance = Solar Constant * Eccentricity Correction Factor', algorithm='The beam irradiance (solar energy) outside the atmosphere and at mean solar distance, is roughly constant at is 1367 W.m-2. However, the orbit of the earth around the sun is lightly eccentric hence its distance to the sun varies slightly across the year. In order to take into account the varying solar distance, the calculation of the extraterrestrial irradiance normal to the solar beam, considers an "eccentricity correction factor" ε.', unit='W/m²', value=array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32), symbol='⍖ ⦜', description='Extraterrestrial irradiance', label='⍖ ⦜ Extraterrestrial Normal Irradiance', title='Extraterrestrial Normal Irradiance', supertitle='Simulated Extraterrestrial Normal Irradiance Series', shortname='Extra', name='Extraterrestrial Normal Irradiance', day_of_year=array([27., 27., 27., 27., 27., 27., 27., 27., 27., 27., 27.], dtype=float32), day_angle=array([0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358], dtype=float32), distance_correction_factor=array([1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891], dtype=float32), output={}), direct_horizontal_irradiance=array([], dtype=float64), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source='[Source of the direct normal irradiance data]', equation='B0c = G0 exp {-0.8662 TLK m δR(m)}', algorithm='The direct (beam) irradiance normal to the solar beam B0c [W.m-2], attenuated by the cloudless atmosphere, is calculated as follows: B0c = G0 exp {-0.8662 TLK m δR(m)}.', unit='W/m²', value=array([1053.3276 , 1050.2334 , 1016.25323, 928.5195 , 710.4255 , 1116.2491 , 1402.4257 , 1402.4257 , 1402.4257 , 1402.4257 , 1402.4257 ], dtype=float32), symbol='⇣ ⦜', description='Direct Normal Irradiance data model', label='⇣ ⦜ Simulated Direct Normal Irradiance', title='Normal Irradiance', supertitle='Direct Normal Irradiance', shortname='Normal', name='Direct Normal Irradiance Data', output={}), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([ 13.903087 , 13.672772 , 11.4355955, 7.4022927, 2.0039055, -4.976128 , -12.552813 , -20.545034 , -28.611061 , -36.32998 , -43.15196 ], dtype=float32), solar_altitude=SolarAltitude(out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), adjusted_for_atmospheric_refraction=True, solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', data_source=None, equation=None, algorithm=None, unit='radians', value=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⦩', description='Solar altitude data for a location and period in time', label=None, title='Solar Altitude', supertitle='Solar Irradiance', shortname='Altitude', name='Solar Altitude', refracted_value=array([], dtype=float64), min_radians=-1.5707963267948966, max_radians=1.5707963267948966, low_angle_threshold_radians=0.04, min_degrees=-90, max_degrees=90, low_angle_threshold_degrees=2.291831180523293, output={}), eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1367.0, data_source='Hofierka 2002', equation='Direct Horizontal = Direct Normal * Solar Altitude', algorithm='The direct (beam) irradiance on a horizontal surface is calculated as Direct horizontal irradiance = Direct normal irradiance * sin (solar altitude).', unit='W/m²', value=array([253.09335 , 248.24986 , 201.48816 , 119.6253 , 24.840155, 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32), symbol='⇣ ⭳', description='Direct horizontal irradiance', label='⇣ ⭳ Simulated Direct Horizontal Irradiance', title='Direct Horizontal Irradiance', supertitle='Clear-Sky Direct Horizontal Irradiance', shortname='Direct Horizontal', name='Direct Horizontal Irradiance Data', output={}), fingerprint=False, references='D.L. King, J.A. Kratochvil, W.E. Boyson, W.I. Bower, Field experience with a new performance characterization procedure for photovoltaic arrays, in: Proceedings of the second World Conference and Exhibition on Photovoltaic Solar Energy Conversion, Vienna, 1998, pp. 1947–1952.. D.L. King, W.E. Boyson, J.A. Kratochvil, Photovoltaic Array Performance Model, SAND2004-3535, Sandia National Laboratories, 2004.', quality=None, solar_radiation_model='Hofierka 2002', solar_constant=1367.0, angle_output_units='radians', wind_speed=WindSpeedSeries(value=0.0, unit='㎧', symbol='🌬', description=None, data_source=None, average_wind_speed=1), temperature=TemperatureSeries(value=14.0, unit='℃', symbol='🌡', description=None, data_source=None, average_air_temperature=14, standard_test_temperature=25), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=LocationShading(horizon_height=HorizonHeight(out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='radians', value=array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), symbol='🏔', description='The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.', label='Horizon Height', title='Horizon Height', supertitle='Horizon Height data', shortname='Horizon', name='Horizon Height', min_radians=-1.5707963267948966, max_radians=1.5707963267948966, min_degrees=-90, max_degrees=90, output=OrderedDict([('Horizon Height', OrderedDict([('Name', 'Horizon Height'), ('Title', 'Horizon Height'), ('Description', 'The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.'), ('Symbol', '🏔'), ('Horizon 🏔', array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)), ('Unit', 'radians')])), ('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {})])), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=None, shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, solar_azimuth=array([3.0674548, 3.285377 , 3.5437274, 3.784806 , 4.0082417, 4.235689 , 4.449775 , 4.664314 , 4.889352 , 5.1368117, 5.420652 ], dtype=float32), solar_altitude=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='Unitless', value=array([False, False, False, False, False, True, True, True, True, True, True]), symbol='🮞', description=None, label='Location Shading', title='Location Shading', supertitle='Location Shading', shortname='Shading', name='Location Shading', output={}), shading_state=array(['Sunlit', 'Sunlit', 'Sunlit', 'Sunlit', 'Potentially-sunlit', 'In-shade', 'In-shade', 'In-shade', 'In-shade', 'In-shade', 'In-shade'], dtype=object), shading_states={
Level 2 and 3¶
>>> power_2 = calculate_photovoltaic_power_output_series(
>>> longitude=longitude,
>>> latitude=latitude,
>>> elevation=elevation,
>>> surface_orientation=surface_orientation,
>>> surface_tilt=surface_tilt,
>>> timestamps=timestamps,
>>> timezone=utc_zone,
>>> linke_turbidity_factor_series=linke_turbidity_factor_series,
>>> photovoltaic_module=photovoltaic_module,
>>> spectral_factor_series=spectral_factor_series,
>>> temperature_series=temperature_series,
>>> wind_speed_series=wind_speed_series,
>>> verbose=2, # or 2 or 3 and so on...
>>> )
>>> power_3 = calculate_photovoltaic_power_output_series(
>>> longitude=longitude,
>>> latitude=latitude,
>>> elevation=elevation,
>>> surface_orientation=surface_orientation,
>>> surface_tilt=surface_tilt,
>>> timestamps=timestamps,
>>> timezone=utc_zone,
>>> linke_turbidity_factor_series=linke_turbidity_factor_series,
>>> photovoltaic_module=photovoltaic_module,
>>> spectral_factor_series=spectral_factor_series,
>>> temperature_series=temperature_series,
>>> wind_speed_series=wind_speed_series,
>>> verbose=2, # or 2 or 3 and so on...
>>> )
Photovoltaic Power -- Even longer outputs
power_2=PhotovoltaicPower(diffuse_horizontal_irradiance=DiffuseSkyReflectedHorizontalIrradiance(angle_output_units=None, linke_turbidity_factor=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=1.0, unit='unitless', minimum=0, maximum=8), adjusted_for_atmospheric_refraction=None, adjust_for_atmospheric_refraction=True, solar_incidence_definition=None, solar_incidence_model=None, solar_incidence=None, azimuth_difference=array([], dtype=float64), solar_azimuth=None, solar_timing_algorithm=None, solar_positioning_algorithm='NOAA', location=None, extraterrestrial_normal_irradiance=ExtraterrestrialNormalIrradiance(fingerprint=False, quality='Not validated!', solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source=None, equation='Extraterrestrial Normal Irradiance = Solar Constant * Eccentricity Correction Factor', algorithm='The beam irradiance (solar energy) outside the atmosphere and at mean solar distance, is roughly constant at is 1367 W.m-2. However, the orbit of the earth around the sun is lightly eccentric hence its distance to the sun varies slightly across the year. In order to take into account the varying solar distance, the calculation of the extraterrestrial irradiance normal to the solar beam, considers an "eccentricity correction factor" ε.', unit='W/m²', value=array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32), symbol='⍖ ⦜', description='Extraterrestrial irradiance', label='⍖ ⦜ Extraterrestrial Normal Irradiance', title='Extraterrestrial Normal Irradiance', supertitle='Simulated Extraterrestrial Normal Irradiance Series', shortname='Extra', name='Extraterrestrial Normal Irradiance', day_of_year=array([27., 27., 27., 27., 27., 27., 27., 27., 27., 27., 27.], dtype=float32), day_angle=array([0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358], dtype=float32), distance_correction_factor=array([1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891], dtype=float32), output=OrderedDict([('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {}), ('Extraterrestrial Normal Irradiance', OrderedDict([('Unit', 'W/m²'), ('Extra ⍖ ⦜', array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32)), ('Symbol', '⍖ ⦜'), ('Description', 'Extraterrestrial irradiance'), ('Title', 'Extraterrestrial Normal Irradiance'), ('Name', 'Extraterrestrial Normal Irradiance')])), ('Solar Radiation Model', {})])), direct_horizontal_irradiance=None, global_horizontal_irradiance=array([], dtype=float64), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=SolarAltitude(out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), adjusted_for_atmospheric_refraction=True, solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', data_source=None, equation=None, algorithm=None, unit='radians', value=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⦩', description='Solar altitude data for a location and period in time', label=None, title='Solar Altitude', supertitle='Solar Irradiance', shortname='Altitude', name='Solar Altitude', refracted_value=array([], dtype=float64), min_radians=-1.5707963267948966, max_radians=1.5707963267948966, low_angle_threshold_radians=0.04, min_degrees=-90, max_degrees=90, low_angle_threshold_degrees=2.291831180523293, output={}), eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1367.0, data_source='PVGIS', equation='Dₕc = G₀ ⋅ Tₙ(Tₗₖ) ⋅ F_d(h₀)', algorithm='The estimate of the clear-sky diffuse sky-reflected horizontal irradiance is the product of the normal extraterrestrial irradiance G0, a diffuse transmission function Tn dependent only on the Linke turbidity factor TLK, and a diffuse solar altitude function Fd dependent only on the solar altitude.', unit='W/m²', value=array([13.23528183, 13.11557816, 11.90453171, 9.50004449, 5.84247296, 0. , 0. , 0. , 0. , 0. , 0. ]), symbol='🗤⭳', description='Clear-sky diffuse sky-reflected horizontal irradiance is a solar power component received per unit area at a given moment, expressed in watts per square meter (W/m²). The values concern a specific location and a moment or period in time.', label='🗤⭳ Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance', title='Sky-Diffuse Horizontal', supertitle='Sky-Diffuse Horizontal Irradiance', shortname='Clear-Sky-Diffuse Horizontal', name='Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance Data', output={}), direct_horizontal_irradiance=DirectHorizontalIrradiance(elevation=214.0, references="Scharmer, K., Greif, J., eds., 2000, The European solar radiation atlas. Vol. 2: Database and exploitation software. Paris (Les Presses de l'École des Mines).", solar_timing_algorithm=None, solar_positioning_algorithm=None, visible=array([], dtype=float64), surface_in_shade=LocationShading(horizon_height=HorizonHeight(out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='radians', value=array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), symbol='🏔', description='The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.', label='Horizon Height', title='Horizon Height', supertitle='Horizon Height data', shortname='Horizon', name='Horizon Height', min_radians=-1.5707963267948966, max_radians=1.5707963267948966, min_degrees=-90, max_degrees=90, output=OrderedDict([('Horizon Height', OrderedDict([('Name', 'Horizon Height'), ('Title', 'Horizon Height'), ('Description', 'The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.'), ('Symbol', '🏔'), ('Horizon 🏔', array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)), ('Unit', 'radians')])), ('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {})])), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=None, shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, solar_azimuth=array([3.0674548, 3.285377 , 3.5437274, 3.784806 , 4.0082417, 4.235689 , 4.449775 , 4.664314 , 4.889352 , 5.1368117, 5.420652 ], dtype=float32), solar_altitude=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='Unitless', value=array([False, False, False, False, False, True, True, True, True, True, True]), symbol='🮞', description=None, label='Location Shading', title='Location Shading', supertitle='Location Shading', shortname='Shading', name='Location Shading', output={}), shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', rayleigh_optical_thickness=None, optical_air_mass=OpticalAirMass(name='Relative optical air mass', title='Optical Air Mass', description='The relative optical air mass', value=array([3.9949794e+00, 4.0587072e+00, 4.8042397e+00, 7.1687570e+00, 1.8926144e+01, 2.8382838e+00, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17], dtype=float32), unit='Unitless', algorithm=None, equation='m = (p/p0)/(sin h0 ref + 0.50572 (h0 ref + 6.07995)-1.6364)', references='Kasten, F., Young, A.T., 1989, Revised optical air mass tables and approximation formula. Applied Optics, 28: 4735-4738.'), adjusted_for_atmospheric_refraction=None, direct_normal_irradiance=DirectNormalIrradiance(optical_air_mass=OpticalAirMass(name='Relative optical air mass', title='Optical Air Mass', description='The relative optical air mass', value=array([3.9949794e+00, 4.0587072e+00, 4.8042397e+00, 7.1687570e+00, 1.8926144e+01, 2.8382838e+00, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17, 8.3381765e-17], dtype=float32), unit='Unitless', algorithm=None, equation='m = (p/p0)/(sin h0 ref + 0.50572 (h0 ref + 6.07995)-1.6364)', references='Kasten, F., Young, A.T., 1989, Revised optical air mass tables and approximation formula. Applied Optics, 28: 4735-4738.'), rayleigh_optical_thickness=RayleighThickness(value=array([0.08272015, 0.08225811, 0.07739661, 0.06640826, 0.0414848 , 0.09283191, 0.15083866, 0.15083866, 0.15083866, 0.15083866, 0.15083866], dtype=float32), unit='Unitless'), linke_turbidity_factor_adjusted=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=-0.8661999702453613, unit='unitless', minimum=0, maximum=8), linke_turbidity_factor=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=1.0, unit='unitless', minimum=0, maximum=8), extraterrestrial_normal_irradiance=ExtraterrestrialNormalIrradiance(fingerprint=False, quality='Not validated!', solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source=None, equation='Extraterrestrial Normal Irradiance = Solar Constant * Eccentricity Correction Factor', algorithm='The beam irradiance (solar energy) outside the atmosphere and at mean solar distance, is roughly constant at is 1367 W.m-2. However, the orbit of the earth around the sun is lightly eccentric hence its distance to the sun varies slightly across the year. In order to take into account the varying solar distance, the calculation of the extraterrestrial irradiance normal to the solar beam, considers an "eccentricity correction factor" ε.', unit='W/m²', value=array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32), symbol='⍖ ⦜', description='Extraterrestrial irradiance', label='⍖ ⦜ Extraterrestrial Normal Irradiance', title='Extraterrestrial Normal Irradiance', supertitle='Simulated Extraterrestrial Normal Irradiance Series', shortname='Extra', name='Extraterrestrial Normal Irradiance', day_of_year=array([27., 27., 27., 27., 27., 27., 27., 27., 27., 27., 27.], dtype=float32), day_angle=array([0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358], dtype=float32), distance_correction_factor=array([1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891], dtype=float32), output={}), direct_horizontal_irradiance=array([], dtype=float64), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source='[Source of the direct normal irradiance data]', equation='B0c = G0 exp {-0.8662 TLK m δR(m)}', algorithm='The direct (beam) irradiance normal to the solar beam B0c [W.m-2], attenuated by the cloudless atmosphere, is calculated as follows: B0c = G0 exp {-0.8662 TLK m δR(m)}.', unit='W/m²', value=array([1053.3276 , 1050.2334 , 1016.25323, 928.5195 , 710.4255 , 1116.2491 , 1402.4257 , 1402.4257 , 1402.4257 , 1402.4257 , 1402.4257 ], dtype=float32), symbol='⇣ ⦜', description='Direct Normal Irradiance data model', label='⇣ ⦜ Simulated Direct Normal Irradiance', title='Normal Irradiance', supertitle='Direct Normal Irradiance', shortname='Normal', name='Direct Normal Irradiance Data', output={}), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([ 13.903087 , 13.672772 , 11.4355955, 7.4022927, 2.0039055, -4.976128 , -12.552813 , -20.545034 , -28.611061 , -36.32998 , -43.15196 ], dtype=float32), solar_altitude=SolarAltitude(out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), adjusted_for_atmospheric_refraction=True, solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', data_source=None, equation=None, algorithm=None, unit='radians', value=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⦩', description='Solar altitude data for a location and period in time', label=None, title='Solar Altitude', supertitle='Solar Irradiance', shortname='Altitude', name='Solar Altitude', refracted_value=array([], dtype=float64), min_radians=-1.5707963267948966, max_radians=1.5707963267948966, low_angle_threshold_radians=0.04, min_degrees=-90, max_degrees=90, low_angle_threshold_degrees=2.291831180523293, output={}), eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1367.0, data_source='Hofierka 2002', equation='Direct Horizontal = Direct Normal * Solar Altitude', algorithm='The direct (beam) irradiance on a horizontal surface is calculated as Direct horizontal irradiance = Direct normal irradiance * sin (solar altitude).', unit='W/m²', value=array([253.09335 , 248.24986 , 201.48816 , 119.6253 , 24.840155, 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32), symbol='⇣ ⭳', description='Direct horizontal irradiance', label='⇣ ⭳ Simulated Direct Horizontal Irradiance', title='Direct Horizontal Irradiance', supertitle='Clear-Sky Direct Horizontal Irradiance', shortname='Direct Horizontal', name='Direct Horizontal Irradiance Data', output={}), fingerprint=False, references='D.L. King, J.A. Kratochvil, W.E. Boyson, W.I. Bower, Field experience with a new performance characterization procedure for photovoltaic arrays, in: Proceedings of the second World Conference and Exhibition on Photovoltaic Solar Energy Conversion, Vienna, 1998, pp. 1947–1952.. D.L. King, W.E. Boyson, J.A. Kratochvil, Photovoltaic Array Performance Model, SAND2004-3535, Sandia National Laboratories, 2004.', quality=None, solar_radiation_model='Hofierka 2002', solar_constant=1367.0, angle_output_units='radians', wind_speed=WindSpeedSeries(value=0.0, unit='㎧', symbol='🌬', description=None, data_source=None, average_wind_speed=1), temperature=TemperatureSeries(value=14.0, unit='℃', symbol='🌡', description=None, data_source=None, average_air_temperature=14, standard_test_temperature=25), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=LocationShading(horizon_height=HorizonHeight(out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='radians', value=array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), symbol='🏔', description='The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.', label='Horizon Height', title='Horizon Height', supertitle='Horizon Height data', shortname='Horizon', name='Horizon Height', min_radians=-1.5707963267948966, max_radians=1.5707963267948966, min_degrees=-90, max_degrees=90, output=OrderedDict([('Horizon Height', OrderedDict([('Name', 'Horizon Height'), ('Title', 'Horizon Height'), ('Description', 'The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.'), ('Symbol', '🏔'), ('Horizon 🏔', array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)), ('Unit', 'radians')])), ('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {})])), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=None, shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, solar_azimuth=array([3.0674548, 3.285377 , 3.5437274, 3.784806 , 4.0082417, 4.235689 , 4.449775 , 4.664314 , 4.889352 , 5.1368117, 5.420652 ], dtype=float32), solar_altitude=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='Unitless', value=array([False, False, False, False, False, True, True, True, True, True, True]), symbol='🮞', description=None, label='Location Shading', title='Location Shading', supertitle='Location Shading', shortname='Shading', name='Location Shading', output={}), shading_state=array(['Sunlit', 'Sunlit', 'Sunlit', 'Sunlit', 'Potentially-sunlit', 'In-shade', 'In-shade', 'In-shade', 'In-shade', 'In-shade', 'In-shade'], dtype=object), shading_states={
All in one¶
The easier way to replicate the above examples is an all-in-one code-block :
>>> from pvgisprototype.api.datetime.datetimeindex import generate_datetime_series
>>> from zoneinfo import ZoneInfo
>>> from pvgisprototype import LinkeTurbidityFactor
>>> from pvgisprototype import TemperatureSeries, WindSpeedSeries
>>> from pvgisprototype import SpectralFactorSeries
>>> from pvgisprototype.algorithms.huld.photovoltaic_module import PhotovoltaicModuleModel
>>> from pvgisprototype.api.power.broadband import calculate_photovoltaic_power_output_series
>>> latitude = 1
>>> longitude = 1
>>> elevation = 214
>>> surface_orientation = 1
>>> surface_tilt = 1
>>> timestamps = generate_datetime_series(start_time="2010-01-27 08:00:00", end_time="2010-01-27 18:00:00", frequency="h")
>>> utc_zone = ZoneInfo("UTC")
>>> linke_turbidity_factor_series = LinkeTurbidityFactor(value=1)
>>> photovoltaic_module = PhotovoltaicModuleModel.CIS_FREE_STANDING
>>> temperature_series = TemperatureSeries(value=14)
>>> wind_speed_series = WindSpeedSeries(value=0)
>>> spectral_factor_series=SpectralFactorSeries(value=1)
>>> power = calculate_photovoltaic_power_output_series(
>>> longitude=longitude,
>>> latitude=latitude,
>>> elevation=elevation,
>>> surface_orientation=surface_orientation,
>>> surface_tilt=surface_tilt,
>>> timestamps=timestamps,
>>> timezone=utc_zone,
>>> linke_turbidity_factor_series=linke_turbidity_factor_series,
>>> photovoltaic_module=photovoltaic_module,
>>> spectral_factor_series=spectral_factor_series,
>>> temperature_series=temperature_series,
>>> wind_speed_series=wind_speed_series,
>>> )
Photovoltaic Power -- Very long output !
power=PhotovoltaicPower(diffuse_horizontal_irradiance=DiffuseSkyReflectedHorizontalIrradiance(angle_output_units=None, linke_turbidity_factor=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=1.0, unit='unitless', minimum=0, maximum=8), adjusted_for_atmospheric_refraction=None, adjust_for_atmospheric_refraction=True, solar_incidence_definition=None, solar_incidence_model=None, solar_incidence=None, azimuth_difference=array([], dtype=float64), solar_azimuth=None, solar_timing_algorithm=None, solar_positioning_algorithm='NOAA', location=None, extraterrestrial_normal_irradiance=ExtraterrestrialNormalIrradiance(fingerprint=False, quality='Not validated!', solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source=None, equation='Extraterrestrial Normal Irradiance = Solar Constant * Eccentricity Correction Factor', algorithm='The beam irradiance (solar energy) outside the atmosphere and at mean solar distance, is roughly constant at is 1367 W.m-2. However, the orbit of the earth around the sun is lightly eccentric hence its distance to the sun varies slightly across the year. In order to take into account the varying solar distance, the calculation of the extraterrestrial irradiance normal to the solar beam, considers an "eccentricity correction factor" ε.', unit='W/m²', value=array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32), symbol='⍖ ⦜', description='Extraterrestrial irradiance', label='⍖ ⦜ Extraterrestrial Normal Irradiance', title='Extraterrestrial Normal Irradiance', supertitle='Simulated Extraterrestrial Normal Irradiance Series', shortname='Extra', name='Extraterrestrial Normal Irradiance', day_of_year=array([27., 27., 27., 27., 27., 27., 27., 27., 27., 27., 27.], dtype=float32), day_angle=array([0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358], dtype=float32), distance_correction_factor=array([1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891], dtype=float32), output=OrderedDict([('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {}), ('Extraterrestrial Normal Irradiance', OrderedDict([('Unit', 'W/m²'), ('Extra ⍖ ⦜', array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32)), ('Symbol', '⍖ ⦜'), ('Description', 'Extraterrestrial irradiance'), ('Title', 'Extraterrestrial Normal Irradiance'), ('Name', 'Extraterrestrial Normal Irradiance')])), ('Solar Radiation Model', {})])), direct_horizontal_irradiance=None, global_horizontal_irradiance=array([], dtype=float64), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=SolarAltitude(out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), adjusted_for_atmospheric_refraction=True, solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', data_source=None, equation=None, algorithm=None, unit='radians', value=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⦩', description='Solar altitude data for a location and period in time', label=None, title='Solar Altitude', supertitle='Solar Irradiance', shortname='Altitude', name='Solar Altitude', refracted_value=array([], dtype=float64), min_radians=-1.5707963267948966, max_radians=1.5707963267948966, low_angle_threshold_radians=0.04, min_degrees=-90, max_degrees=90, low_angle_threshold_degrees=2.291831180523293, output={}), eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1367.0, data_source='PVGIS', equation='Dₕc = G₀ ⋅ Tₙ(Tₗₖ) ⋅ F_d(h₀)', algorithm='The estimate of the clear-sky diffuse sky-reflected horizontal irradiance is the product of the normal extraterrestrial irradiance G0, a diffuse transmission function Tn dependent only on the Linke turbidity factor TLK, and a diffuse solar altitude function Fd dependent only on the solar altitude.', unit='W/m²', value=array([13.23528183, 13.11557816, 11.90453171, 9.50004449, 5.84247296, 0. , 0. , 0. , 0. , 0. , 0. ]), symbol='🗤⭳', description='Clear-sky diffuse sky-reflected horizontal irradiance is a solar power component received per unit area at a given moment, expressed in watts per square meter (W/m²). The values concern a specific location and a moment or period in time.', label='🗤⭳ Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance', title='Sky-Diffuse Horizontal', supertitle='Sky-Diffuse Horizontal Irradiance', shortname='Clear-Sky-Diffuse Horizontal', name='Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance Data', output=OrderedDict([('Diffuse Sky-Reflected Horizontal Irradiance', OrderedDict([('Name', 'Clear-Sky Diffuse Sky-Reflected Horizontal Irradiance Data'), ('Title', 'Sky-Diffuse Horizontal'), ('Description', 'Clear-sky diffuse sky-reflected horizontal irradiance is a solar power component received per unit area at a given moment, expressed in watts per square meter (W/m²). The values concern a specific location and a moment or period in time.'), ('Symbol', '🗤⭳'), ('Clear-Sky-Diffuse Horizontal 🗤⭳', array([13.23528183, 13.11557816, 11.90453171, 9.50004449, 5.84247296, 0. , 0. , 0. , 0. , 0. , 0. ])), ('Unit', 'W/m²'), ('Equation', 'Dₕc = G₀ ⋅ Tₙ(Tₗₖ) ⋅ F_d(h₀)')])), ('Core', {}), ('Context', {}), ('Metadata', {}), ('Out-of-range', {}), ('Sources', {}), ('References', {}), ('Fingerprint', {}), ('Angular Unit', {})])), direct_horizontal_irradiance=DirectHorizontalIrradiance(elevation=214.0, references="Scharmer, K., Greif, J., eds., 2000, The European solar radiation atlas. Vol. 2: Database and exploitation software. Paris (Les Presses de l'École des Mines).", solar_timing_algorithm=None, solar_positioning_algorithm=None, visible=array([], dtype=float64), surface_in_shade=LocationShading(horizon_height=HorizonHeight(out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='radians', value=array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), symbol='🏔', description='The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.', label='Horizon Height', title='Horizon Height', supertitle='Horizon Height data', shortname='Horizon', name='Horizon Height', min_radians=-1.5707963267948966, max_radians=1.5707963267948966, min_degrees=-90, max_degrees=90, output=OrderedDict([('Horizon Height', OrderedDict([('Name', 'Horizon Height'), ('Title', 'Horizon Height'), ('Description', 'The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.'), ('Symbol', '🏔'), ('Horizon 🏔', array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)), ('Unit', 'radians')])), ('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {})])), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=None, shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, solar_azimuth=array([3.0674548, 3.285377 , 3.5437274, 3.784806 , 4.0082417, 4.235689 , 4.449775 , 4.664314 , 4.889352 , 5.1368117, 5.420652 ], dtype=float32), solar_altitude=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='Unitless', value=array([False, False, False, False, False, True, True, True, True, True, True]), symbol='🮞', description=None, label='Location Shading', title='Location Shading', supertitle='Location Shading', shortname='Shading', name='Location Shading', output={}), shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', rayleigh_optical_thickness=None, optical_air_mass=OpticalAirMass(name='Relative optical air mass', title='Optical Air Mass', description='The relative optical air mass', value=array([ 3.9949794, 4.058707 , 4.8042397, 7.168757 , 18.926144 , nan, nan, nan, nan, nan, nan], dtype=float32), unit='Unitless', algorithm=None, equation='m = (p/p0)/(sin h0 ref + 0.50572 (h0 ref + 6.07995)-1.6364)', references='Kasten, F., Young, A.T., 1989, Revised optical air mass tables and approximation formula. Applied Optics, 28: 4735-4738.'), adjusted_for_atmospheric_refraction=None, direct_normal_irradiance=DirectNormalIrradiance(optical_air_mass=OpticalAirMass(name='Relative optical air mass', title='Optical Air Mass', description='The relative optical air mass', value=array([ 3.9949794, 4.058707 , 4.8042397, 7.168757 , 18.926144 , nan, nan, nan, nan, nan, nan], dtype=float32), unit='Unitless', algorithm=None, equation='m = (p/p0)/(sin h0 ref + 0.50572 (h0 ref + 6.07995)-1.6364)', references='Kasten, F., Young, A.T., 1989, Revised optical air mass tables and approximation formula. Applied Optics, 28: 4735-4738.'), rayleigh_optical_thickness=RayleighThickness(value=array([0.08272015, 0.08225811, 0.07739661, 0.06640826, 0.0414848 , 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32), unit='Unitless'), linke_turbidity_factor_adjusted=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=-0.8661999702453613, unit='unitless', minimum=0, maximum=8), linke_turbidity_factor=LinkeTurbidityFactor(name=None, title='Linke Turbidity', description='The Linke Turbidity Factor describes the attenuation of the extraterrestrial solar radiation by solid and liquid particles under cloudless sky conditions. It indicates the optical density of hazy and humid atmosphere in relation to a clean and dry atmosphere. In other words TLK is the number of clean dry air masses that would result in the same extinction then real hazy and humid air. Due to a dynamic nature of the turbidity factor, its calculation and subsequent averaging leads to a certain degree of generalisation. There are clear seasonal changes of the turbidity (lowest values in winter, highest in summer), the values of turbidity factor always differ from place to place in a similar degree of magnitude and these differences are also correlated with the terrain elevation. It increases with an intensity of industrialisation and urbanisation. The values of Linke turbidity for different landscapes or world regions can be found in literature [e.g. 16, 19, 30] or in http://www.soda-is.com/ [20]).', symbol='⋅', value=1.0, unit='unitless', minimum=0, maximum=8), extraterrestrial_normal_irradiance=ExtraterrestrialNormalIrradiance(fingerprint=False, quality='Not validated!', solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source=None, equation='Extraterrestrial Normal Irradiance = Solar Constant * Eccentricity Correction Factor', algorithm='The beam irradiance (solar energy) outside the atmosphere and at mean solar distance, is roughly constant at is 1367 W.m-2. However, the orbit of the earth around the sun is lightly eccentric hence its distance to the sun varies slightly across the year. In order to take into account the varying solar distance, the calculation of the extraterrestrial irradiance normal to the solar beam, considers an "eccentricity correction factor" ε.', unit='W/m²', value=array([1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257, 1402.4257], dtype=float32), symbol='⍖ ⦜', description='Extraterrestrial irradiance', label='⍖ ⦜ Extraterrestrial Normal Irradiance', title='Extraterrestrial Normal Irradiance', supertitle='Simulated Extraterrestrial Normal Irradiance Series', shortname='Extra', name='Extraterrestrial Normal Irradiance', day_of_year=array([27., 27., 27., 27., 27., 27., 27., 27., 27., 27., 27.], dtype=float32), day_angle=array([0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358, 0.46478358], dtype=float32), distance_correction_factor=array([1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891, 1.0305891], dtype=float32), output={}), direct_horizontal_irradiance=array([], dtype=float64), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([], dtype=float64), solar_altitude=None, eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1360.8, data_source='[Source of the direct normal irradiance data]', equation='B0c = G0 exp {-0.8662 TLK m δR(m)}', algorithm='The direct (beam) irradiance normal to the solar beam B0c [W.m-2], attenuated by the cloudless atmosphere, is calculated as follows: B0c = G0 exp {-0.8662 TLK m δR(m)}.', unit='W/m²', value=array([1053.3276 , 1050.2334 , 1016.25323, 928.5195 , 710.4255 , nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⇣ ⦜', description='Direct Normal Irradiance data model', label='⇣ ⦜ Simulated Direct Normal Irradiance', title='Normal Irradiance', supertitle='Direct Normal Irradiance', shortname='Normal', name='Direct Normal Irradiance Data', output={}), fingerprint=False, quality=None, solar_radiation_model='Hofierka 2002', refracted_solar_altitude=array([13.903087 , 13.672772 , 11.4355955, 7.4022927, 2.0039055, nan, nan, nan, nan, nan, nan], dtype=float32), solar_altitude=SolarAltitude(out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), adjusted_for_atmospheric_refraction=True, solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', data_source=None, equation=None, algorithm=None, unit='radians', value=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), symbol='⦩', description='Solar altitude data for a location and period in time', label=None, title='Solar Altitude', supertitle='Solar Irradiance', shortname='Altitude', name='Solar Altitude', refracted_value=array([], dtype=float64), min_radians=-1.5707963267948966, max_radians=1.5707963267948966, low_angle_threshold_radians=0.04, min_degrees=-90, max_degrees=90, low_angle_threshold_degrees=2.291831180523293, output={}), eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, out_of_range_index=array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]), out_of_range=array([False, False, False, False, False, False, False, False, False, False, False]), upper_physically_possible_limit=2000, lower_physically_possible_limit=-4, solar_constant=1367.0, data_source='Hofierka 2002', equation='Direct Horizontal = Direct Normal * Solar Altitude', algorithm='The direct (beam) irradiance on a horizontal surface is calculated as Direct horizontal irradiance = Direct normal irradiance * sin (solar altitude).', unit='W/m²', value=array([253.09335 , 248.24986 , 201.48816 , 119.6253 , 24.840155, 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32), symbol='⇣ ⭳', description='Direct horizontal irradiance', label='⇣ ⭳ Simulated Direct Horizontal Irradiance', title='Direct Horizontal Irradiance', supertitle='Clear-Sky Direct Horizontal Irradiance', shortname='Direct Horizontal', name='Direct Horizontal Irradiance Data', output=OrderedDict([('Core', {}), ('Context', {}), ('Metadata', {}), ('Out-of-range', {}), ('Sources', {}), ('References', {}), ('Fingerprint', {}), ('Direct Horizontal Irradiance', OrderedDict([('Unit', 'W/m²'), ('Direct Horizontal ⇣ ⭳', array([253.09335 , 248.24986 , 201.48816 , 119.6253 , 24.840155, 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32)), ('Symbol', '⇣ ⭳'), ('Description', 'Direct horizontal irradiance'), ('Title', 'Direct Horizontal Irradiance'), ('Name', 'Direct Horizontal Irradiance Data')])), ('Atmospheric Properties', {}), ('Elevation', {})])), fingerprint=False, references='D.L. King, J.A. Kratochvil, W.E. Boyson, W.I. Bower, Field experience with a new performance characterization procedure for photovoltaic arrays, in: Proceedings of the second World Conference and Exhibition on Photovoltaic Solar Energy Conversion, Vienna, 1998, pp. 1947–1952.. D.L. King, W.E. Boyson, J.A. Kratochvil, Photovoltaic Array Performance Model, SAND2004-3535, Sandia National Laboratories, 2004.', quality=None, solar_radiation_model='Hofierka 2002', solar_constant=1367.0, angle_output_units='radians', wind_speed=WindSpeedSeries(value=0.0, unit='㎧', symbol='🌬', description=None, data_source=None, average_wind_speed=1), temperature=TemperatureSeries(value=14.0, unit='℃', symbol='🌡', description=None, data_source=None, average_air_temperature=14, standard_test_temperature=25), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=LocationShading(horizon_height=HorizonHeight(out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='radians', value=array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), symbol='🏔', description='The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.', label='Horizon Height', title='Horizon Height', supertitle='Horizon Height data', shortname='Horizon', name='Horizon Height', min_radians=-1.5707963267948966, max_radians=1.5707963267948966, min_degrees=-90, max_degrees=90, output=OrderedDict([('Horizon Height', OrderedDict([('Name', 'Horizon Height'), ('Title', 'Horizon Height'), ('Description', 'The horizon height angle from of a geographic point of observation, a solar surface in the context of solar positioning.'), ('Symbol', '🏔'), ('Horizon 🏔', array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)), ('Unit', 'radians')])), ('Fingerprint', {}), ('References', {}), ('Sources', {}), ('Out-of-range', {}), ('Metadata', {}), ('Context', {}), ('Core', {})])), visible=array([ True, True, True, True, True, False, False, False, False, False, False]), surface_in_shade=None, shading_state=array([], dtype=float64), shading_states='all', shading_algorithm='PVGIS', solar_timing_algorithm='NOAA', solar_positioning_algorithm='NOAA', eccentricity_amplitude=0.03344, eccentricity_phase_offset=0.048869, solar_azimuth=array([3.0674548, 3.285377 , 3.5437274, 3.784806 , 4.0082417, 4.235689 , 4.449775 , 4.664314 , 4.889352 , 5.1368117, 5.420652 ], dtype=float32), solar_altitude=array([0.24265409, 0.23863435, 0.19958818, 0.12919354, 0.03497231, nan, nan, nan, nan, nan, nan], dtype=float32), out_of_range_index=array([], dtype=float64), out_of_range=array([], dtype=float64), data_source=None, equation=None, algorithm=None, unit='Unitless', value=array([False, False, False, False, False, True, True, True, True, True, True]), symbol='🮞', description=None, label='Location Shading', title='Location Shading', supertitle='Location Shading', shortname='Shading', name='Location Shading', output={}), shading_state=array(['Sunlit', 'Sunlit', 'Sunlit', 'Sunlit', 'Potentially-sunlit', 'In-shade', 'In-shade', 'In-shade', 'In-shade', 'In-shade', 'In-shade'], dtype=object), shading_states={