From 62045a589c41df87eb1cca570ea3925139a20434 Mon Sep 17 00:00:00 2001 From: jason-rpkt Date: Thu, 23 Jan 2025 17:14:17 +0800 Subject: [PATCH 1/6] Issue #2245 Infinite sheds beam fraction on ground zenith guardrail syntax bug Set unshaded ground fraction to zero for solar_zenith> max_zenith --- pvlib/bifacial/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvlib/bifacial/utils.py b/pvlib/bifacial/utils.py index 6027155319..4f5b0fcf6f 100644 --- a/pvlib/bifacial/utils.py +++ b/pvlib/bifacial/utils.py @@ -87,7 +87,7 @@ def _unshaded_ground_fraction(surface_tilt, surface_azimuth, solar_zenith, surface_azimuth) f_gnd_beam = 1.0 - np.minimum( 1.0, gcr * np.abs(cosd(surface_tilt) + sind(surface_tilt) * tan_phi)) - np.where(solar_zenith > max_zenith, 0., f_gnd_beam) # [1], Eq. 4 + f_gnd_beam=np.where(solar_zenith > max_zenith, 0., f_gnd_beam) # [1], Eq. 4 return f_gnd_beam # 1 - min(1, abs()) < 1 always From 23dd57ee41caf49c55a288f0e676aece15e32bde Mon Sep 17 00:00:00 2001 From: jason-rpkt Date: Fri, 24 Jan 2025 15:57:51 +0800 Subject: [PATCH 2/6] Issue #2245 - Linting/ PEP8 --- pvlib/bifacial/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pvlib/bifacial/utils.py b/pvlib/bifacial/utils.py index 4f5b0fcf6f..4f8d32ae17 100644 --- a/pvlib/bifacial/utils.py +++ b/pvlib/bifacial/utils.py @@ -87,7 +87,8 @@ def _unshaded_ground_fraction(surface_tilt, surface_azimuth, solar_zenith, surface_azimuth) f_gnd_beam = 1.0 - np.minimum( 1.0, gcr * np.abs(cosd(surface_tilt) + sind(surface_tilt) * tan_phi)) - f_gnd_beam=np.where(solar_zenith > max_zenith, 0., f_gnd_beam) # [1], Eq. 4 + f_gnd_beam = np.where(solar_zenith > max_zenith, 0., f_gnd_beam) + # [1], Eq. 4 return f_gnd_beam # 1 - min(1, abs()) < 1 always From 59d6581f68c547a58bdf81bcc28068b8581ddc76 Mon Sep 17 00:00:00 2001 From: jason-rpkt Date: Mon, 27 Jan 2025 18:46:07 +0800 Subject: [PATCH 3/6] Revert "Issue #2245 utils.py" This reverts commit 8b67a41500dfcf428d700cef47d347b4dfbea7e0. --- pvlib/bifacial/infinite_sheds.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pvlib/bifacial/infinite_sheds.py b/pvlib/bifacial/infinite_sheds.py index 9f8a3787ae..bd47c46ee0 100644 --- a/pvlib/bifacial/infinite_sheds.py +++ b/pvlib/bifacial/infinite_sheds.py @@ -260,7 +260,10 @@ def get_irradiance_poa(surface_tilt, surface_azimuth, solar_zenith, Returns ------- output : dict or DataFrame - Output is a DataFrame when input ghi is a Series. See Notes for + Output is a DataFrame when solar_zenith is a Series. + solar_zenith is the one that sets the output type. + See Issue #2245 + See Notes for descriptions of content. Notes @@ -372,7 +375,7 @@ def get_irradiance_poa(surface_tilt, surface_azimuth, solar_zenith, 'poa_global': poa_global, 'poa_direct': poa_direct, 'poa_diffuse': poa_diffuse, 'poa_ground_diffuse': poa_gnd_pv, 'poa_sky_diffuse': poa_sky_pv, 'shaded_fraction': f_x} - if isinstance(poa_global, pd.Series): + if isinstance(solar_zenith, pd.Series): output = pd.DataFrame(output) return output From dae732612294fd0defd424907abd0d96bedc61eb Mon Sep 17 00:00:00 2001 From: jason-rpkt Date: Tue, 28 Jan 2025 12:01:12 +0800 Subject: [PATCH 4/6] Update from solar_zenith to ghi Update docs\sphinx\source\whatsnew\v0.11.3.rst --- docs/sphinx/source/whatsnew/v0.11.3.rst | 3 ++- pvlib/bifacial/infinite_sheds.py | 9 ++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.11.3.rst b/docs/sphinx/source/whatsnew/v0.11.3.rst index 0c4c55ad97..4368b1679e 100644 --- a/docs/sphinx/source/whatsnew/v0.11.3.rst +++ b/docs/sphinx/source/whatsnew/v0.11.3.rst @@ -10,7 +10,7 @@ Deprecations Enhancements ~~~~~~~~~~~~ - +Fix syntax for unshaded ground fraction (:issue:`2245`, :pull:`2359`) Documentation ~~~~~~~~~~~~~ @@ -36,3 +36,4 @@ Contributors ~~~~~~~~~~~~ * Rajiv Daxini (:ghuser:`RDaxini`) * Mark Campanelli (:ghuser:`markcampanelli`) +* Jason Lun Leung (:ghuser:`jason-rpkt`) diff --git a/pvlib/bifacial/infinite_sheds.py b/pvlib/bifacial/infinite_sheds.py index bd47c46ee0..8ca070b0e9 100644 --- a/pvlib/bifacial/infinite_sheds.py +++ b/pvlib/bifacial/infinite_sheds.py @@ -260,11 +260,10 @@ def get_irradiance_poa(surface_tilt, surface_azimuth, solar_zenith, Returns ------- output : dict or DataFrame - Output is a DataFrame when solar_zenith is a Series. - solar_zenith is the one that sets the output type. + Output is a "pandas.DataFrame" when "ghi" is a Series. + Otherwise it is a dict of "numpy.ndarray" See Issue #2245 - See Notes for - descriptions of content. + See Notes for descriptions of content. Notes ----- @@ -375,7 +374,7 @@ def get_irradiance_poa(surface_tilt, surface_azimuth, solar_zenith, 'poa_global': poa_global, 'poa_direct': poa_direct, 'poa_diffuse': poa_diffuse, 'poa_ground_diffuse': poa_gnd_pv, 'poa_sky_diffuse': poa_sky_pv, 'shaded_fraction': f_x} - if isinstance(solar_zenith, pd.Series): + if isinstance(ghi, pd.Series): output = pd.DataFrame(output) return output From dbb8afcb3be6c816ce23b08abacc40f6eb942e31 Mon Sep 17 00:00:00 2001 From: jason-rpkt Date: Tue, 4 Feb 2025 09:40:48 +0800 Subject: [PATCH 5/6] series input for ghi in test_infinite_sheds.py --- docs/sphinx/source/whatsnew/v0.11.3.rst | 3 ++- pvlib/bifacial/infinite_sheds.py | 5 ++--- pvlib/bifacial/utils.py | 2 +- pvlib/tests/bifacial/test_infinite_sheds.py | 1 + 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.11.3.rst b/docs/sphinx/source/whatsnew/v0.11.3.rst index 4368b1679e..3f4ec2a007 100644 --- a/docs/sphinx/source/whatsnew/v0.11.3.rst +++ b/docs/sphinx/source/whatsnew/v0.11.3.rst @@ -10,7 +10,8 @@ Deprecations Enhancements ~~~~~~~~~~~~ -Fix syntax for unshaded ground fraction (:issue:`2245`, :pull:`2359`) +Fix bug in :py:func:`pvlib.bifacial.get_irradiance_poa` which may had yielded non-zero ground +irradiance with sun below horizon (:issue:`2245`, :pull:`2359`) Documentation ~~~~~~~~~~~~~ diff --git a/pvlib/bifacial/infinite_sheds.py b/pvlib/bifacial/infinite_sheds.py index 8ca070b0e9..c1a5d91468 100644 --- a/pvlib/bifacial/infinite_sheds.py +++ b/pvlib/bifacial/infinite_sheds.py @@ -260,9 +260,8 @@ def get_irradiance_poa(surface_tilt, surface_azimuth, solar_zenith, Returns ------- output : dict or DataFrame - Output is a "pandas.DataFrame" when "ghi" is a Series. - Otherwise it is a dict of "numpy.ndarray" - See Issue #2245 + Output is a ``pandas.DataFrame`` when ``ghi`` is a Series. + Otherwise it is a dict of ``numpy.ndarray`` See Notes for descriptions of content. Notes diff --git a/pvlib/bifacial/utils.py b/pvlib/bifacial/utils.py index 4f8d32ae17..a69a3e18d4 100644 --- a/pvlib/bifacial/utils.py +++ b/pvlib/bifacial/utils.py @@ -87,8 +87,8 @@ def _unshaded_ground_fraction(surface_tilt, surface_azimuth, solar_zenith, surface_azimuth) f_gnd_beam = 1.0 - np.minimum( 1.0, gcr * np.abs(cosd(surface_tilt) + sind(surface_tilt) * tan_phi)) - f_gnd_beam = np.where(solar_zenith > max_zenith, 0., f_gnd_beam) # [1], Eq. 4 + f_gnd_beam = np.where(solar_zenith > max_zenith, 0., f_gnd_beam) return f_gnd_beam # 1 - min(1, abs()) < 1 always diff --git a/pvlib/tests/bifacial/test_infinite_sheds.py b/pvlib/tests/bifacial/test_infinite_sheds.py index 1f6dadfd5f..23de27e428 100644 --- a/pvlib/tests/bifacial/test_infinite_sheds.py +++ b/pvlib/tests/bifacial/test_infinite_sheds.py @@ -130,6 +130,7 @@ def test_get_irradiance_poa(): # series inputs surface_tilt = pd.Series(surface_tilt) surface_azimuth = pd.Series(data=surface_azimuth, index=surface_tilt.index) + ghi = pd.Series(data=ghi, index=surface_tilt.index) solar_zenith = pd.Series(solar_zenith, index=surface_tilt.index) solar_azimuth = pd.Series(data=solar_azimuth, index=surface_tilt.index) expected_diffuse = pd.Series( From eb88655591f81b83974b4e2077b745954d528885 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 3 Feb 2025 19:35:44 -0700 Subject: [PATCH 6/6] Update docs/sphinx/source/whatsnew/v0.11.3.rst --- docs/sphinx/source/whatsnew/v0.11.3.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.11.3.rst b/docs/sphinx/source/whatsnew/v0.11.3.rst index 38d7b29988..5a847c01de 100644 --- a/docs/sphinx/source/whatsnew/v0.11.3.rst +++ b/docs/sphinx/source/whatsnew/v0.11.3.rst @@ -10,8 +10,8 @@ Deprecations Enhancements ~~~~~~~~~~~~ -Fix bug in :py:func:`pvlib.bifacial.get_irradiance_poa` which may had yielded non-zero ground -irradiance with sun below horizon (:issue:`2245`, :pull:`2359`) +* Fix a bug in :py:func:`pvlib.bifacial.get_irradiance_poa` which may have yielded non-zero + ground irradiance when the sun was below the horizon. (:issue:`2245`, :pull:`2359`) Documentation ~~~~~~~~~~~~~