Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
2 changes: 1 addition & 1 deletion docs/sphinx/source/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ PV temperature models
temperature.pvsyst_cell
temperature.faiman
temperature.fuentes
pvsystem.PVSystem.sapm_celltemp
temperature.ross

Temperature Model Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down
2 changes: 2 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 Down
51 changes: 48 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,50 @@ 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 that difference betwen cell temperature
and ambient temperature is proportional to the plane of array irradiance,
and ignores the effects of wind.

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

temp_air : numeric
Ambient dry bulb temperature [C].

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

Returns
-------
numeric, values in degrees Celsius

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`.

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