diff --git a/docs/sphinx/source/whatsnew/v0.12.1.rst b/docs/sphinx/source/whatsnew/v0.12.1.rst index 7cf1b7a76..6152f03c7 100644 --- a/docs/sphinx/source/whatsnew/v0.12.1.rst +++ b/docs/sphinx/source/whatsnew/v0.12.1.rst @@ -31,6 +31,8 @@ Enhancements :py:func:`~pvlib.iotools.read_nsrdb_psm4`. (:issue:`2326`, :pull:`2378`, :pull:`2445`) * :py:mod:`pvlib.bifacial.infinite_sheds` no longer emits "invalid value" warnings when supplying irradiance arrays with nighttime zero values. (:issue:`2450`, :pull:`2451`) +* Add ``'semi_integrated'`` parameters for the PVsyst temperature model. + (:issue:`2330`, :pull:`2415`) Documentation ~~~~~~~~~~~~~ @@ -63,3 +65,4 @@ Contributors * Will Hobbs (:ghuser:`williamhobbs`) * Kevin Anderson (:ghuser:`kandersolar`) * Will Holmgren (:ghuser:`wholmgren`) +* Muhammad Rebaal (:ghuser:`Muhammad-Rebaal`) diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index bba6f5a35..a1d93bd59 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -1010,6 +1010,9 @@ def _infer_temperature_model_params(self): elif 'insulated' in param_set: # after SAPM to avoid confusing keys return temperature._temperature_model_params('pvsyst', 'insulated') + elif 'semi_integrated' in param_set: + return temperature._temperature_model_params('pvsyst', + 'semi_integrated') else: return {} @@ -1394,10 +1397,11 @@ class FixedMount(AbstractMount): racking_model : str, optional Valid strings are ``'open_rack'``, ``'close_mount'``, - ``'insulated_back'``, ``'freestanding'`` and ``'insulated'``. + ``'insulated_back'``, ``'freestanding'``, ``'insulated'``, and + ``'semi_integrated'``. Used to identify a parameter set for the SAPM or PVsyst cell temperature model. - See :py:func:`~pvlib.temperature.sapm_module` and + See :py:func:`~pvlib.temperature.sapm_module` and :py:func:`~pvlib.temperature.pvsyst_cell` for definitions. module_height : float, optional @@ -1475,7 +1479,8 @@ class SingleAxisTrackerMount(AbstractMount): racking_model : str, optional Valid strings are ``'open_rack'``, ``'close_mount'``, - ``'insulated_back'``, ``'freestanding'`` and ``'insulated'``. + ``'insulated_back'``, ``'freestanding'``, ``'insulated'``, and + ``'semi_integrated'``. Used to identify a parameter set for the SAPM or PVsyst cell temperature model. ``'open_rack'`` or ``'freestanding'`` should be used for systems with single-axis trackers. diff --git a/pvlib/temperature.py b/pvlib/temperature.py index ab31ffaf5..6c274d79b 100644 --- a/pvlib/temperature.py +++ b/pvlib/temperature.py @@ -21,7 +21,8 @@ 'insulated_back_glass_polymer': {'a': -2.81, 'b': -.0455, 'deltaT': 0}, }, 'pvsyst': {'freestanding': {'u_c': 29.0, 'u_v': 0}, - 'insulated': {'u_c': 15.0, 'u_v': 0}} + 'insulated': {'u_c': 15.0, 'u_v': 0}, + 'semi_integrated': {'u_c': 20.0, 'u_v': 0}} } """Dictionary of temperature parameters organized by model. @@ -382,19 +383,21 @@ def pvsyst_cell(poa_global, temp_air, wind_speed=1.0, u_c=29.0, u_v=0.0, air temperature :math:`T_{a}` (C) and wind speed :math:`WS` (m/s). Model output is cell temperature :math:`T_{C}`. Model parameters depend both on the module construction and its mounting. Parameters are provided in - [1]_ for open (freestanding) and close (insulated) mounting configurations, - , and are coded for convenience in + [1]_ for open (freestanding), close (insulated), and intermediate + (semi_integrated) mounting configurations, and are coded for convenience in :data:`~pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS`. The heat loss factors provided represent the combined effect of convection, radiation and conduction, and their values are experimentally determined. - +--------------+---------------+---------------+ - | Mounting | :math:`U_{c}` | :math:`U_{v}` | - +==============+===============+===============+ - | freestanding | 29.0 | 0.0 | - +--------------+---------------+---------------+ - | insulated | 15.0 | 0.0 | - +--------------+---------------+---------------+ + +-----------------+---------------+---------------+ + | Mounting | :math:`U_{c}` | :math:`U_{v}` | + +=================+===============+===============+ + | freestanding | 29.0 | 0.0 | + +-----------------+---------------+---------------+ + | insulated | 15.0 | 0.0 | + +-----------------+---------------+---------------+ + | semi_integrated | 20.0 | 0.0 | + +-----------------+---------------+---------------+ Mounting cases can be described in terms of air flow across and around the rear-facing surface of the module: diff --git a/tests/test_pvsystem.py b/tests/test_pvsystem.py index 4473e6b0e..b58f9fd9e 100644 --- a/tests/test_pvsystem.py +++ b/tests/test_pvsystem.py @@ -710,6 +710,13 @@ def test_Array__infer_temperature_model_params(): expected = temperature.TEMPERATURE_MODEL_PARAMETERS[ 'pvsyst']['insulated'] assert expected == array._infer_temperature_model_params() + array = pvsystem.Array(mount=FixedMount(0, 180, + racking_model='semi_integrated'), + module_parameters={}, + module_type=None) + expected = temperature.TEMPERATURE_MODEL_PARAMETERS[ + 'pvsyst']['semi_integrated'] + assert expected == array._infer_temperature_model_params() def test_Array__infer_cell_type():