pvlib-python icon indicating copy to clipboard operation
pvlib-python copied to clipboard

bifacial.infinite_sheds.get_irradiance_poa: use of height to pitch ratio instead of height and pitch

Open kdebrab opened this issue 2 years ago • 3 comments

Currently, bifacial.infinite_sheds.get_irradiance_poa requires both height and pitch as inputs, but it's relatively easy to non-dimensionalize the calculations such that only the ratio of both is needed. This is very similar to the use of the ground coverage ratio gcr instead of pitch and collector width.

This would result in a more general (non-dimensionalized) function with one argument less.

As a side effect, it could also allow to naturally support the case of a plant with single shed, for which the effective pitch is infinite, or gcr=0 and height_pitch_ratio=0 (though that would require first resolving https://github.com/pvlib/pvlib-python/issues/1576 and ensuring that the internal variable max_rows is at least 1).

[EDIT]

A better alternative would be to use 'height to width ratio' instead of 'height to pitch ratio' as that doesn't go to zero as gcr goes to zero and allows keeping into account the effect of the row's own shadow when gcr goes to zero.

kdebrab avatar Oct 26 '22 09:10 kdebrab

@kdebrab this makes sense, although it would involve changing some public functions so may need a deprecation cycle. The parameters were implemented separately because the implementer (me) struggled a bit to map from the reference paper to code.

cwhanse avatar Oct 26 '22 13:10 cwhanse

A superficial reading of these issues brings to mind the atan2 function. Sometimes two arguments are better than one. Anyway, GCR=0 means no PV to me!

adriesse avatar Oct 26 '22 13:10 adriesse

I realize I overlooked a few things when proposing to use 'height to pitch ratio'.

First of all, a better alternative would have been to use instead the 'height to width ratio' (i.e., the ratio of the height of the center point of the row above the ground to the row slant length), as that doesn't go to zero as gcr goes to zero and (theoretically) should be sufficient to calculate the irradiance on the backside for gcr equal to zero (I think).

Secondly, as pointed out by @kanderso-nrel in https://github.com/pvlib/pvlib-python/issues/1576#issuecomment-1292125420, the infinite_sheds method in its current implementation dilutes the row's own shadow to nothing as the pitch approaches infinity (and thus gcr approaches zero). If I understand well, this is due to the calculation of the ground-reflected irradiance, where the infinite_sheds method uses (1) the average 'view factor from the ground to the sky' of the ground between the rows, and (2) the average 'fraction of ground between rows that is unshaded', both of which approach 1 as the pitch approaches infinity.

I think an improved method would not take the average, but some kind of weighted average, considering that the reflection from the ground right in front of the surface is more important than the reflection from the ground further away from the surface. In that case, I would assume that the dilution of the row's own shadow with gcr approaching zero would no longer happen.

kdebrab avatar Oct 27 '22 08:10 kdebrab