<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://cbcrespo.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://cbcrespo.github.io/" rel="alternate" type="text/html" /><updated>2026-05-27T10:18:39+00:00</updated><id>https://cbcrespo.github.io/feed.xml</id><title type="html">Carolina’s Blog - GSoC 2026</title><subtitle>This is a companion blog to my GSoC 2026 project with pvlib-python, titled &apos;Standardizing Diffuse Irradiance Components and Extending ModelChain&apos;s Optical Loss Modeling&apos;.</subtitle><author><name>Carolina Crespo</name></author><entry><title type="html">First Steps</title><link href="https://cbcrespo.github.io/2026/05/27/first-steps.html" rel="alternate" type="text/html" title="First Steps" /><published>2026-05-27T00:00:00+00:00</published><updated>2026-05-27T00:00:00+00:00</updated><id>https://cbcrespo.github.io/2026/05/27/first-steps</id><content type="html" xml:base="https://cbcrespo.github.io/2026/05/27/first-steps.html"><![CDATA[<p>This is a quick update following my kickoff meeting with my project supervisors, where we discussed the initial direction of the project and the first implementation steps.</p>

<p>I will start by tackling phase 1 of the project: standardizing the outputs of diffuse transposition models.</p>

<p>Currently, only some models, such as <a href="https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.perez.html"><code>perez</code></a>, support a <code>return_components</code> parameter. When set to <code>True</code>, the function returns an <code>OrderedDict</code> or <code>DataFrame</code> containing the different diffuse irradiance components: isotropic, circumsolar and horizon, along with the total diffuse irradiance. This is also true for <a href="https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.perez_driesse.html"><code>perez_driesse</code></a> and <a href="https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.haydavies.html"><code>haydavies</code></a>, although the horizon component for <code>haydavies</code> is always zero.</p>

<p>The remaining transposition models currently return only the total diffuse irradiance:</p>

<ul>
  <li><code>isotropic</code></li>
  <li><code>klucher</code></li>
  <li><code>reindl</code></li>
  <li><code>king</code></li>
</ul>

<p>The original idea was to fully standardize the outputs by having all functions support <code>return_components</code> and return the same four values as perez, perez_driesse, and haydavies. However, one thing to have in mind is that some transposition models do not inherently cover the three diffuse components (e.g., <code>isotropic</code> and <code>haydavies</code>). Our initial thought was to return zeros for missing components (as currently implemented for <code>haydavies</code>), but feedback from the pvlib GitHub community suggested avoiding this approach: since other transposition models that have yet to be implemented in pvlib-python may include different or additional diffuse components, it makes more sense to keep the interface flexible.</p>

<p>The approach we settled on is therefore:</p>

<ul>
  <li>All transposition models will support <code>return_components</code></li>
  <li>Each model will return whichever diffuse components it can physically represent</li>
</ul>

<p>In practice, this means:</p>

<ul>
  <li>Investigating which components can reasonably be extracted from <code>klucher</code> and <code>reindl</code></li>
  <li>Updating these functions to expose those components</li>
  <li>Removing the empty horizon component from <code>haydavies</code></li>
  <li>Having <code>isotropic</code> return an <code>OrderedDict</code> or <code>DataFrame</code> containing a single diffuse component</li>
</ul>

<p>That last point may feel a bit silly, but it is probably the cleanest path toward a more consistent interface 🤓</p>

<p>As for <code>king</code>, <a href="https://github.com/pvlib/pvlib-python/issues/2636">previous discussions</a> suggest that deprecating the model may be the best option. Its documentation is misleading, it mixes sky diffuse and ground-reflected irradiance, and it does not appear to be widely used. Adding a deprecation warning may therefore become part of this project.</p>

<p>Once these changes are in place, the next step will be updating the functions below so that they make use of the diffuse components:</p>

<ul>
  <li><a href="https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.get_sky_diffuse.html"><code>irradiance.get_sky_diffuse</code></a></li>
  <li><a href="https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.poa_components.html"><code>irradiance.poa_components</code></a></li>
  <li><a href="https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.get_total_irradiance.html"><code>irradiance.get_total_irradiance</code></a></li>
</ul>

<p>Currently, since not all transposition models return diffuse components, the functions above only consider the total diffuse.</p>

<p>More updates soon!</p>]]></content><author><name>Carolina Crespo</name></author><category term="Other" /><summary type="html"><![CDATA[This is a quick update following my kickoff meeting with my project supervisors, where we discussed the initial direction of the project and the first implementation steps.]]></summary></entry><entry><title type="html">GSoC 2026 Project Kickoff</title><link href="https://cbcrespo.github.io/2026/05/26/project-kickoff.html" rel="alternate" type="text/html" title="GSoC 2026 Project Kickoff" /><published>2026-05-26T00:00:00+00:00</published><updated>2026-05-26T00:00:00+00:00</updated><id>https://cbcrespo.github.io/2026/05/26/project-kickoff</id><content type="html" xml:base="https://cbcrespo.github.io/2026/05/26/project-kickoff.html"><![CDATA[<p>Hi everyone! 👋</p>

<p>I’m excited to share that I’ll be participating in <strong>Google Summer of Code 2026</strong> with pvlib-python, working on a project focused on improving diffuse irradiance handling and optical loss modeling within the library.</p>

<p>My mentors will be <a href="https://github.com/AdamRJensen">Adam R. Jensen</a> and <a href="https://github.com/ramaroesilva">Rodrigo Amaro e Silva</a>.</p>

<h2 id="project-summary">Project Summary</h2>

<p>The project centers around two closely related improvements in pvlib:</p>

<ul>
  <li>Standardizing the outputs of diffuse transposition models</li>
  <li>Extending <code>ModelChain</code> to support more physically consistent optical loss calculations</li>
</ul>

<p>At the moment, diffuse irradiance models in <code>pvlib.irradiance</code> return outputs with different levels of detail. Some models can provide individual diffuse components — such as circumsolar, isotropic, and horizon diffuse irradiance — while others only provide total diffuse irradiance. One of the goals of this project is to make these outputs more consistent across models through a shared framework.</p>

<p>Once all models are able to return diffuse components, component-specific optical losses can be determined, and in particular, can be implemented within the <code>ModelChain</code> framework. Therefore, I will also be working on improvements to <code>ModelChain</code> so that users can choose irradiance component-specific IAM (Incident Angle Modifier) models. This should make optical loss modeling more flexible and physically realistic, while keeping the current behavior fully backward compatible.</p>

<h2 id="motivation">Motivation</h2>

<p>Diffuse irradiance is often treated as a single quantity, but in reality it comes from different regions of the sky with different angular distributions. This makes it so that the incidence angle is also varied, and as a result, the optical losses due to reflection at the PV module surface.</p>

<p>By exposing and handling these components more consistently, pvlib users will be able to:</p>
<ul>
  <li>Access richer irradiance information from transposition models</li>
  <li>Use more advanced optical loss workflows</li>
  <li>Apply all existing IAM models more naturally within the <code>ModelChain</code></li>
</ul>

<h2 id="looking-forward">Looking Forward</h2>

<p>I’m excited to contribute to pvlib-python and work with the community over the summer. I’ve used pvlib in both teaching and research, so it’s very rewarding to now contribute back to the project.</p>

<p>I will be posting bi-weekly updates throughout the summer to share progress, implementation details, and lessons learned.</p>

<p>Feel free to look at my full work plan and join the discussion over on <a href="https://github.com/pvlib/pvlib-python/issues/2750">GitHub</a>.</p>

<p>Looking forward to collaborating with everyone!</p>]]></content><author><name>Carolina Crespo</name></author><category term="Other" /><summary type="html"><![CDATA[Hi everyone! 👋]]></summary></entry></feed>