Skip to content

add Ross temperature model #1045

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Oct 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/sphinx/source/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,10 @@ PV temperature models
temperature.pvsyst_cell
temperature.faiman
temperature.fuentes
temperature.ross
pvsystem.PVSystem.sapm_celltemp
pvsystem.PVSystem.pvsyst_celltemp
pvsystem.PVSystem.faiman_celltemp

Temperature Model Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down
4 changes: 4 additions & 0 deletions docs/sphinx/source/whatsnew/v0.8.1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Deprecations

Enhancements
~~~~~~~~~~~~
* Added :py:func:`pvlib.temperature.ross` for cell temperature modeling using
only NOCT. (:pull:`1045`)


Bug fixes
Expand All @@ -36,3 +38,5 @@ Requirements
Contributors
~~~~~~~~~~~~
* Kevin Anderson (:ghuser:`kanderso-nrel`)
* Will Holmgren (:ghuser:`wholmgren`)
* Cliff Hansen (:ghuser:`cwhanse`)
54 changes: 51 additions & 3 deletions pvlib/temperature.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,9 +377,10 @@ def pvsyst_cell(poa_global, temp_air, wind_speed=1.0, u_c=29.0, u_v=0.0,

def faiman(poa_global, temp_air, wind_speed=1.0, u0=25.0, u1=6.84):
r'''
Calculate cell or module temperature using the Faiman model. The Faiman
model uses an empirical heat loss factor model [1]_ and is adopted in the
IEC 61853 standards [2]_ and [3]_.
Calculate cell or module temperature using the Faiman model.

The Faiman model uses an empirical heat loss factor model [1]_ and is
adopted in the IEC 61853 standards [2]_ and [3]_.

Usage of this model in the IEC 61853 standard does not distinguish
between cell and module temperature.
Expand Down Expand Up @@ -443,6 +444,53 @@ def faiman(poa_global, temp_air, wind_speed=1.0, u0=25.0, u1=6.84):
return temp_air + temp_difference


def ross(poa_global, temp_air, noct):
r'''
Calculate cell temperature using the Ross model.

The Ross model [1]_ assumes the difference between cell temperature
and ambient temperature is proportional to the plane of array irradiance,
and assumes wind speed of 1 m/s. The model implicitly assumes steady or
slowly changing irradiance conditions.

Parameters
----------
poa_global : numeric
Total incident irradiance. [W/m^2]

temp_air : numeric
Ambient dry bulb temperature. [C]

noct : numeric
Nominal operating cell temperature [C], determined at conditions of
800 W/m^2 irradiance, 20 C ambient air temperature and 1 m/s wind.

Returns
-------
cell_temperature : numeric
Cell temperature. [C]

Notes
-----
The Ross model for cell temperature :math:`T_{C}` is given in [1]_ as

.. math::

T_{C} = T_{a} + \frac{NOCT - 20}{80} S

where :math:`S` is the plane of array irradiance in :math:`mW/{cm}^2`.
This function expects irradiance in :math:`W/m^2`.

References
----------
.. [1] Ross, R. G. Jr., (1981). "Design Techniques for Flat-Plate
Photovoltaic Arrays". 15th IEEE Photovoltaic Specialist Conference,
Orlando, FL.
'''
# factor of 0.1 converts irradiance from W/m2 to mW/cm2
return temp_air + (noct - 20.) / 80. * poa_global * 0.1


def _fuentes_hconv(tave, windmod, tinoct, temp_delta, xlen, tilt,
check_reynold):
# Calculate the convective coefficient as in Fuentes 1987 -- a mixture of
Expand Down
8 changes: 8 additions & 0 deletions pvlib/tests/test_temperature.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,14 @@ def test_faiman_ndarray():
assert_allclose(expected, result, 3)


def test_ross():
result = temperature.ross(np.array([1000., 600., 1000.]),
np.array([20., 40., 60.]),
np.array([40., 100., 20.]))
expected = np.array([45., 100., 60.])
assert_allclose(expected, result)


def test_faiman_series():
times = pd.date_range(start="2015-01-01", end="2015-01-02", freq="12H")
temps = pd.Series([0, 10, 5], index=times)
Expand Down