You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue tracks my work for Google Summer of Code 2026 on improving diffuse irradiance handling and optical loss modeling in pvlib. This project will be carried out under the supervision of @AdamRJensen and @ramaroesilva, and has two main goals:
Standardizing the outputs of diffuse transposition models
Extending ModelChain to support component-specific optical loss calculations, via component-specific incident angle modifiers (IAM)
Motivation
Currently, diffuse transposition models in pvlib.irradiance provide inconsistent outputs. Some models (e.g., Perez) can return individual components (circumsolar, isotropic, horizon), while others only return total diffuse irradiance. This was previously identified and discussed in issue #1553.
This inconsistency limits the ModelChain workflow, which:
Applies a single angle of incidence (AOI) model
Uses one IAM value for total irradiance
Cannot distinguish between irradiance components. Since optical losses depend strongly on incidence angle, this reduces physical accuracy.
Proposed Changes
Phase 1: Standardize diffuse component outputs
Introduce a consistent return_components parameter across all diffuse transposition models. PR Adapts irradiance.isotropic to return_components framework. #2527 has begun addressing this by modifying irradiance.isotropic to support this parameter, as previously implemented in irradiance.perez.
Ensure all models return:
Circumsolar
Isotropic
Horizon
Total diffuse irradiance
For models that lack explicit components, return zeros for missing components
Follow the structure used in pvlib.irradiance.perez
Phase 2: Extend ModelChain for component-specific IAM
Consider plane-of-array (POA) components instead of global irradiance
Add use of component-specific IAM when calculating effective $G_{POA}$
Allow users to pass a dictionary to aoi_model, specifying IAM model for each component
Maintain full backward compatibility
My name is Carolina Crespo, I am a PhD student at the University of Lisbon working on firm power in Iberia using PyPSA-Eur. I am a regular user of pvlib, which I teach (although at a superficial level) to 1st-year Bachelors students.
Any feedback on this plan will be very welcome, especially since this is my first time contributing to an open source project. Looking forward to getting started!
This issue tracks my work for Google Summer of Code 2026 on improving diffuse irradiance handling and optical loss modeling in pvlib. This project will be carried out under the supervision of @AdamRJensen and @ramaroesilva, and has two main goals:
ModelChainto support component-specific optical loss calculations, via component-specific incident angle modifiers (IAM)Motivation
Currently, diffuse transposition models in
pvlib.irradianceprovide inconsistent outputs. Some models (e.g., Perez) can return individual components (circumsolar, isotropic, horizon), while others only return total diffuse irradiance. This was previously identified and discussed in issue #1553.This inconsistency limits the
ModelChainworkflow, which:Proposed Changes
Phase 1: Standardize diffuse component outputs
return_componentsparameter across all diffuse transposition models. PR Adapts irradiance.isotropic to return_components framework. #2527 has begun addressing this by modifyingirradiance.isotropicto support this parameter, as previously implemented inirradiance.perez.pvlib.irradiance.perezPhase 2: Extend ModelChain for component-specific IAM
aoi_model, specifying IAM model for each componentMy name is Carolina Crespo, I am a PhD student at the University of Lisbon working on firm power in Iberia using PyPSA-Eur. I am a regular user of pvlib, which I teach (although at a superficial level) to 1st-year Bachelors students.
Any feedback on this plan will be very welcome, especially since this is my first time contributing to an open source project. Looking forward to getting started!