Skip to content

Commit a89e3c4

Browse files
Add semi_integrated parameters for PVsyst temperature model (#2415)
* Enhanced the Software with Semi-Integration * Enhancement Changes Updated * cleanup * whatsnew * bit more cleanup --------- Co-authored-by: Kevin Anderson <[email protected]>
1 parent 2093264 commit a89e3c4

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

docs/sphinx/source/whatsnew/v0.12.1.rst

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ Enhancements
3131
:py:func:`~pvlib.iotools.read_nsrdb_psm4`. (:issue:`2326`, :pull:`2378`, :pull:`2445`)
3232
* :py:mod:`pvlib.bifacial.infinite_sheds` no longer emits "invalid value" warnings
3333
when supplying irradiance arrays with nighttime zero values. (:issue:`2450`, :pull:`2451`)
34+
* Add ``'semi_integrated'`` parameters for the PVsyst temperature model.
35+
(:issue:`2330`, :pull:`2415`)
3436

3537
Documentation
3638
~~~~~~~~~~~~~
@@ -63,3 +65,4 @@ Contributors
6365
* Will Hobbs (:ghuser:`williamhobbs`)
6466
* Kevin Anderson (:ghuser:`kandersolar`)
6567
* Will Holmgren (:ghuser:`wholmgren`)
68+
* Muhammad Rebaal (:ghuser:`Muhammad-Rebaal`)

pvlib/pvsystem.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,9 @@ def _infer_temperature_model_params(self):
10101010
elif 'insulated' in param_set: # after SAPM to avoid confusing keys
10111011
return temperature._temperature_model_params('pvsyst',
10121012
'insulated')
1013+
elif 'semi_integrated' in param_set:
1014+
return temperature._temperature_model_params('pvsyst',
1015+
'semi_integrated')
10131016
else:
10141017
return {}
10151018

@@ -1394,10 +1397,11 @@ class FixedMount(AbstractMount):
13941397
13951398
racking_model : str, optional
13961399
Valid strings are ``'open_rack'``, ``'close_mount'``,
1397-
``'insulated_back'``, ``'freestanding'`` and ``'insulated'``.
1400+
``'insulated_back'``, ``'freestanding'``, ``'insulated'``, and
1401+
``'semi_integrated'``.
13981402
Used to identify a parameter set for the SAPM or PVsyst cell
13991403
temperature model.
1400-
See :py:func:`~pvlib.temperature.sapm_module` and
1404+
See :py:func:`~pvlib.temperature.sapm_module` and
14011405
:py:func:`~pvlib.temperature.pvsyst_cell` for definitions.
14021406
14031407
module_height : float, optional
@@ -1475,7 +1479,8 @@ class SingleAxisTrackerMount(AbstractMount):
14751479
14761480
racking_model : str, optional
14771481
Valid strings are ``'open_rack'``, ``'close_mount'``,
1478-
``'insulated_back'``, ``'freestanding'`` and ``'insulated'``.
1482+
``'insulated_back'``, ``'freestanding'``, ``'insulated'``, and
1483+
``'semi_integrated'``.
14791484
Used to identify a parameter set for the SAPM or PVsyst cell
14801485
temperature model. ``'open_rack'`` or ``'freestanding'`` should
14811486
be used for systems with single-axis trackers.

pvlib/temperature.py

+13-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
'insulated_back_glass_polymer': {'a': -2.81, 'b': -.0455, 'deltaT': 0},
2222
},
2323
'pvsyst': {'freestanding': {'u_c': 29.0, 'u_v': 0},
24-
'insulated': {'u_c': 15.0, 'u_v': 0}}
24+
'insulated': {'u_c': 15.0, 'u_v': 0},
25+
'semi_integrated': {'u_c': 20.0, 'u_v': 0}}
2526
}
2627
"""Dictionary of temperature parameters organized by model.
2728
@@ -382,19 +383,21 @@ def pvsyst_cell(poa_global, temp_air, wind_speed=1.0, u_c=29.0, u_v=0.0,
382383
air temperature :math:`T_{a}` (C) and wind speed :math:`WS` (m/s). Model
383384
output is cell temperature :math:`T_{C}`. Model parameters depend both on
384385
the module construction and its mounting. Parameters are provided in
385-
[1]_ for open (freestanding) and close (insulated) mounting configurations,
386-
, and are coded for convenience in
386+
[1]_ for open (freestanding), close (insulated), and intermediate
387+
(semi_integrated) mounting configurations, and are coded for convenience in
387388
:data:`~pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS`. The heat loss
388389
factors provided represent the combined effect of convection, radiation and
389390
conduction, and their values are experimentally determined.
390391
391-
+--------------+---------------+---------------+
392-
| Mounting | :math:`U_{c}` | :math:`U_{v}` |
393-
+==============+===============+===============+
394-
| freestanding | 29.0 | 0.0 |
395-
+--------------+---------------+---------------+
396-
| insulated | 15.0 | 0.0 |
397-
+--------------+---------------+---------------+
392+
+-----------------+---------------+---------------+
393+
| Mounting | :math:`U_{c}` | :math:`U_{v}` |
394+
+=================+===============+===============+
395+
| freestanding | 29.0 | 0.0 |
396+
+-----------------+---------------+---------------+
397+
| insulated | 15.0 | 0.0 |
398+
+-----------------+---------------+---------------+
399+
| semi_integrated | 20.0 | 0.0 |
400+
+-----------------+---------------+---------------+
398401
399402
Mounting cases can be described in terms of air flow across and around the
400403
rear-facing surface of the module:

tests/test_pvsystem.py

+7
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,13 @@ def test_Array__infer_temperature_model_params():
710710
expected = temperature.TEMPERATURE_MODEL_PARAMETERS[
711711
'pvsyst']['insulated']
712712
assert expected == array._infer_temperature_model_params()
713+
array = pvsystem.Array(mount=FixedMount(0, 180,
714+
racking_model='semi_integrated'),
715+
module_parameters={},
716+
module_type=None)
717+
expected = temperature.TEMPERATURE_MODEL_PARAMETERS[
718+
'pvsyst']['semi_integrated']
719+
assert expected == array._infer_temperature_model_params()
713720

714721

715722
def test_Array__infer_cell_type():

0 commit comments

Comments
 (0)