Skip to content

Commit b105021

Browse files
authored
add Ross temperature model (#1045)
* add Ross temperature model * remove file added by mistake * add PR number * review * review * change docstring to say 1 m/s
1 parent f8b9c04 commit b105021

File tree

4 files changed

+66
-3
lines changed

4 files changed

+66
-3
lines changed

docs/sphinx/source/api.rst

+3
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,10 @@ PV temperature models
236236
temperature.pvsyst_cell
237237
temperature.faiman
238238
temperature.fuentes
239+
temperature.ross
239240
pvsystem.PVSystem.sapm_celltemp
241+
pvsystem.PVSystem.pvsyst_celltemp
242+
pvsystem.PVSystem.faiman_celltemp
240243

241244
Temperature Model Parameters
242245
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Deprecations
1313

1414
Enhancements
1515
~~~~~~~~~~~~
16+
* Added :py:func:`pvlib.temperature.ross` for cell temperature modeling using
17+
only NOCT. (:pull:`1045`)
1618

1719

1820
Bug fixes
@@ -36,3 +38,5 @@ Requirements
3638
Contributors
3739
~~~~~~~~~~~~
3840
* Kevin Anderson (:ghuser:`kanderso-nrel`)
41+
* Will Holmgren (:ghuser:`wholmgren`)
42+
* Cliff Hansen (:ghuser:`cwhanse`)

pvlib/temperature.py

+51-3
Original file line numberDiff line numberDiff line change
@@ -377,9 +377,10 @@ def pvsyst_cell(poa_global, temp_air, wind_speed=1.0, u_c=29.0, u_v=0.0,
377377

378378
def faiman(poa_global, temp_air, wind_speed=1.0, u0=25.0, u1=6.84):
379379
r'''
380-
Calculate cell or module temperature using the Faiman model. The Faiman
381-
model uses an empirical heat loss factor model [1]_ and is adopted in the
382-
IEC 61853 standards [2]_ and [3]_.
380+
Calculate cell or module temperature using the Faiman model.
381+
382+
The Faiman model uses an empirical heat loss factor model [1]_ and is
383+
adopted in the IEC 61853 standards [2]_ and [3]_.
383384
384385
Usage of this model in the IEC 61853 standard does not distinguish
385386
between cell and module temperature.
@@ -443,6 +444,53 @@ def faiman(poa_global, temp_air, wind_speed=1.0, u0=25.0, u1=6.84):
443444
return temp_air + temp_difference
444445

445446

447+
def ross(poa_global, temp_air, noct):
448+
r'''
449+
Calculate cell temperature using the Ross model.
450+
451+
The Ross model [1]_ assumes the difference between cell temperature
452+
and ambient temperature is proportional to the plane of array irradiance,
453+
and assumes wind speed of 1 m/s. The model implicitly assumes steady or
454+
slowly changing irradiance conditions.
455+
456+
Parameters
457+
----------
458+
poa_global : numeric
459+
Total incident irradiance. [W/m^2]
460+
461+
temp_air : numeric
462+
Ambient dry bulb temperature. [C]
463+
464+
noct : numeric
465+
Nominal operating cell temperature [C], determined at conditions of
466+
800 W/m^2 irradiance, 20 C ambient air temperature and 1 m/s wind.
467+
468+
Returns
469+
-------
470+
cell_temperature : numeric
471+
Cell temperature. [C]
472+
473+
Notes
474+
-----
475+
The Ross model for cell temperature :math:`T_{C}` is given in [1]_ as
476+
477+
.. math::
478+
479+
T_{C} = T_{a} + \frac{NOCT - 20}{80} S
480+
481+
where :math:`S` is the plane of array irradiance in :math:`mW/{cm}^2`.
482+
This function expects irradiance in :math:`W/m^2`.
483+
484+
References
485+
----------
486+
.. [1] Ross, R. G. Jr., (1981). "Design Techniques for Flat-Plate
487+
Photovoltaic Arrays". 15th IEEE Photovoltaic Specialist Conference,
488+
Orlando, FL.
489+
'''
490+
# factor of 0.1 converts irradiance from W/m2 to mW/cm2
491+
return temp_air + (noct - 20.) / 80. * poa_global * 0.1
492+
493+
446494
def _fuentes_hconv(tave, windmod, tinoct, temp_delta, xlen, tilt,
447495
check_reynold):
448496
# Calculate the convective coefficient as in Fuentes 1987 -- a mixture of

pvlib/tests/test_temperature.py

+8
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ def test_faiman_ndarray():
124124
assert_allclose(expected, result, 3)
125125

126126

127+
def test_ross():
128+
result = temperature.ross(np.array([1000., 600., 1000.]),
129+
np.array([20., 40., 60.]),
130+
np.array([40., 100., 20.]))
131+
expected = np.array([45., 100., 60.])
132+
assert_allclose(expected, result)
133+
134+
127135
def test_faiman_series():
128136
times = pd.date_range(start="2015-01-01", end="2015-01-02", freq="12H")
129137
temps = pd.Series([0, 10, 5], index=times)

0 commit comments

Comments
 (0)