Hi Arnav,
I'd like to hear other folks' opinions on this topic, but here's something to get the ball rolling:
Yes, there is currently not much
pvlib support for modeling the effect of direct shading. Nonuniform
shading is in general a pretty complex phenomenon to model, but if the system and shadow geometry satisfy a few conditions, a simple loss model
can be surprisingly accurate. Here is one "quick and dirty"
approach that might be a place to start. It assumes that self-shading
affects all modules equally so module-module mismatch can be
neglected, the array is racked 1-in-portrait so that the row shaded
fraction is the same as the module shaded fraction, and that the module
has the typical 60/72 Silicon cell layout (no half-cells, cross-ties, etc). For thin films you might just reduce the in-plane direct component by the module shaded fraction and call that good enough.
1)
Calculate the shaded fraction of each row using solar position, array
geometry, and module orientation. Section 6 in this report has a
formula to calculate the shaded fraction:
https://www.nrel.gov/docs/fy20osti/76626.pdf2) Use pvlib to find the in-plane diffuse component (poa_diffuse in pvlib lingo) and calculate the in-plane diffuse fraction.
3) A very simple shading power
loss model is to assume that the performance of each cell in a submodule cell string
is equal to that of the most shaded cell in the cell string -- the most
shaded cell acts as a bottleneck. So in the case of
row-to-row shading, the shadow moves up from the bottom of the module,
meaning the cells in the bottom row are the ones of interest. Assuming that the
cell's output is proportional to the total irradiance incident on the cell, you
can figure out what fraction of that bottom cell the shadow covers and
reduce poa_direct proportionally to get the cell's output power. This means that, as shaded fraction increases, there is an initial steep decline in power output that levels out once the bottom row of cells is fully covered by the shadow -- once that bottom row of cells is fully shaded, shading additional cells makes no difference. The leveled-out loss is determined by the diffuse fraction of in-plane irradiance. Here's a plot showing this model, assuming a module 12 cells high (so the corner is at 1/12 = 0.083) and a diffuse fraction of 0.3:
I don't have any good suggestions for modeling cell temperature under partial shade conditions, other than the speculation that a poor cell temp model might not be worth worrying about if you're already losing 80% of the production to self-shading anyway.