Skip to content

Commit 6f5afa9

Browse files
IoannisSifnaioscwhanseechedey-lskandersolarRDaxini
authored
Floating PV gallery example (#2110)
* floating PV gallery example * fixed linter * fixed toc * formatting * formatting vol.2 * formatting vol.3 * formatting vol.4 * fixed linter * formatting vol.5 * formatting vol.6 * fixed linter * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Cliff Hansen <cwhanse@sandia.gov> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Cliff Hansen <cwhanse@sandia.gov> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Cliff Hansen <cwhanse@sandia.gov> * Cliff's suggestions * plot all sets of coefficients in a figure * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Echedey Luis <80125792+echedey-ls@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Echedey Luis <80125792+echedey-ls@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Echedey Luis <80125792+echedey-ls@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Echedey Luis <80125792+echedey-ls@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Echedey Luis <80125792+echedey-ls@users.noreply.github.com> * Added watsnew * Cliff's review vol.2 * Update table and plot with extra coeffs * Formatting * add math mode to Tamb * typo fix * leo's suggestion vol.2 * update whatsnew * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Kevin Anderson <kevin.anderso@gmail.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> * fixed linter and removed last sentence * minor edit * text edits * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/sphinx/source/whatsnew/v0.11.1.rst Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update docs/examples/floating-pv/plot_floating_pv_cell_temperature.py Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com> * Update plot_floating_pv_cell_temperature.py * update text --------- Co-authored-by: Cliff Hansen <cwhanse@sandia.gov> Co-authored-by: Echedey Luis <80125792+echedey-ls@users.noreply.github.com> Co-authored-by: Kevin Anderson <kevin.anderso@gmail.com> Co-authored-by: RDaxini <143435106+RDaxini@users.noreply.github.com> Co-authored-by: Adam R. Jensen <39184289+AdamRJensen@users.noreply.github.com>
1 parent 2e8f576 commit 6f5afa9

File tree

3 files changed

+238
-1
lines changed

3 files changed

+238
-1
lines changed

docs/examples/floating-pv/README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Floating PV Systems Modelling
2+
-----------------------------
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
r"""
2+
Temperature modeling for floating PV
3+
================================================
4+
5+
This example uses the PVSyst temperature model to calculate
6+
cell temperature for floating photovoltaic (FPV) systems.
7+
8+
One of the primary benefits attributed to FPV systems is the potential
9+
for lower operating temperatures, which are expected to increase the
10+
operating efficiency. In general, the temperature at which a photovoltaic
11+
module operates is influenced by various factors including solar radiation,
12+
ambient temperature, wind speed and direction, and the characteristics of the
13+
cell and module materials, as well as the mounting structure.
14+
15+
A popular model for calculating PV cell temperature is the
16+
empirical heat loss factor model suggested by Faiman
17+
(:py:func:`pvlib.temperature.faiman`). A modified version of this model is
18+
has been proposed by PVSyst (:py:func:`~pvlib.temperature.pvsyst_cell`).
19+
The PVSyst model for cell temperature :math:`T_{C}` is given by:
20+
21+
.. math::
22+
:label: pvsyst
23+
24+
T_{C} = T_{a} + \frac{\alpha \cdot E \cdot (1 - \eta_{m})}{U_{c} + U_{v} \cdot WS},
25+
26+
where :math:`E` is the plane-of-array irradiance, :math:`T_{a}` is the
27+
ambient air temperature, :math:`WS` is the wind speed, :math:`\alpha` is the
28+
absorbed fraction of the incident irradiance, :math:`\eta_{m}` is the
29+
electrical efficiency of the module, :math:`U_{c}` is the wind-independent heat
30+
loss coefficient, and :math:`U_{v}` is the wind-dependent heat loss coefficient.
31+
It should be noted that in many cases, similar to land-based PV systems,
32+
the wind-dependent heat loss coefficient (:math:`U_{v}`) can be set to zero,
33+
and the denominator is thus reduced to a single combined U-value
34+
(:math:`U_{c}`).
35+
36+
However, the default heat loss coefficient values of the PVSyst model were
37+
specified for land-based PV systems and are not necessarily representative
38+
of FPV systems.
39+
40+
For FPV systems, the module's operating temperature, much like in land-based
41+
systems, is mainly influenced by the mounting structure (which significantly
42+
affects both U-value coefficients), wind, and air temperature. Thus, factors
43+
that help reduce operating temperatures in such systems include lower air
44+
temperatures and changes in air flow beneath the modules (wind/convection).
45+
In some designs, where the modules are in direct thermal contact with water,
46+
cooling effectiveness is largely dictated by the water temperature.
47+
48+
Systems with closely packed modules and restricted airflow behind the modules
49+
generally exhibit lower heat loss coefficients compared to those with better
50+
airflow behind the modules.
51+
52+
The table below gives heat loss coefficients derived for different FPV systems
53+
and locations as found in the literature. It should be noted that, for some
54+
systems, there are two sets of coefficients, where the second set uses only
55+
one heat loss coefficient (i.e., only :math:`U_{c}`).
56+
57+
.. table:: Heat transfer coefficients for different PV systems
58+
:widths: 40 15 15 15 15
59+
60+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
61+
| System | Location |:math:`U_{c}` | :math:`U_{v}` | Reference |
62+
| | |:math:`[\frac{W}{m^2 \cdot K}]` | :math:`[\frac{W}{m^3 \cdot K \cdot s}]`| |
63+
+==========================+=============+================================+========================================+===========+
64+
| - Monofacial module | Netherlands | 24.4 | 6.5 | [1]_ |
65+
| - Open structure | | | | |
66+
| - Two-axis tracking | | 57 | 0 | |
67+
| - Small water footprint | | | | |
68+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
69+
| - Monofacial module | Netherlands | 25.2 | 3.7 | [1]_ |
70+
| - Closed structure | | | | |
71+
| - Large water footprint | | 37 | 0 | |
72+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
73+
| - Monofacial module | Singapore | 34.8 | 0.8 | [1]_ |
74+
| - Closed structure | | | | |
75+
| - Large water footprint | | 36 | 0 | |
76+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
77+
| - Monofacial module | Singapore | 18.9 | 8.9 | [1]_ |
78+
| - Closed structure | | | | |
79+
| - Medium water footprint | | 41 | 0 | |
80+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
81+
| - Monofacial module | Singapore | 35.3 | 8.9 | [1]_ |
82+
| - Open structure | | | | |
83+
| - Free-standing | | 55 | 0 | |
84+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
85+
| - Monofacial module | Norway | 71 | 0 | [2]_ |
86+
| - In contact with water | | | | |
87+
| - Calculated using water | | | | |
88+
| temperature as | | | | |
89+
| :math:`T_{amb}` | | | | |
90+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
91+
| - Monofacial module | South Italy | 31.9 | 1.5 | [3]_ |
92+
| - Open structure | | | | |
93+
| - Free-standing | | | | |
94+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
95+
| - Bifacial module | South Italy | 35.2 | 1.5 | [3]_ |
96+
| - Open structure | | | | |
97+
| - Free-standing | | | | |
98+
+--------------------------+-------------+--------------------------------+----------------------------------------+-----------+
99+
100+
References
101+
----------
102+
.. [1] Dörenkämper M., Wahed A., Kumar A., de Jong M., Kroon J., Reindl T.
103+
(2021), 'The cooling effect of floating PV in two different climate zones:
104+
A comparison of field test data from the Netherlands and Singapore'
105+
Solar Energy, vol. 214, pp. 239-247, :doi:`10.1016/j.solener.2020.11.029`.
106+
107+
.. [2] Kjeldstad T., Lindholm D., Marstein E., Selj J. (2021), 'Cooling of
108+
floating photovoltaics and the importance of water temperature', Solar
109+
Energy, vol. 218, pp. 544-551, :doi:`10.1016/j.solener.2021.03.022`.
110+
111+
.. [3] Tina G.M., Scavo F.B., Merlo L., Bizzarri F. (2021), 'Comparative
112+
analysis of monofacial and bifacial photovoltaic modules for floating
113+
power plants', Applied Energy, vol 281, pp. 116084,
114+
:doi:`10.1016/j.apenergy.2020.116084`.
115+
""" # noqa: E501
116+
117+
# %%
118+
# Read example weather data
119+
# ^^^^^^^^^^^^^^^^^^^^^^^^^
120+
# Read weather data from a TMY3 file and calculate the solar position and
121+
# the plane-of-array irradiance.
122+
123+
import pvlib
124+
import matplotlib.pyplot as plt
125+
from pathlib import Path
126+
127+
# Assume a FPV system on a lake with the following specifications
128+
tilt = 30 # degrees
129+
azimuth = 180 # south-facing
130+
131+
# Datafile found in the pvlib distribution
132+
data_file = Path(pvlib.__path__[0]).joinpath('data', '723170TYA.CSV')
133+
134+
tmy, metadata = pvlib.iotools.read_tmy3(
135+
data_file, coerce_year=2002, map_variables=True
136+
)
137+
tmy = tmy.filter(
138+
['ghi', 'dni', 'dni_extra', 'dhi', 'temp_air', 'wind_speed', 'pressure']
139+
) # remaining columns are not needed
140+
tmy = tmy['2002-06-06 00:00':'2002-06-06 23:59'] # select period
141+
142+
solar_position = pvlib.solarposition.get_solarposition(
143+
# TMY timestamp is at end of hour, so shift to center of interval
144+
tmy.index.shift(freq='-30T'),
145+
latitude=metadata['latitude'],
146+
longitude=metadata['longitude'],
147+
altitude=metadata['altitude'],
148+
pressure=tmy['pressure'] * 100, # convert from millibar to Pa
149+
temperature=tmy['temp_air'],
150+
)
151+
solar_position.index = tmy.index # reset index to end of the hour
152+
153+
# Albedo calculation for inland water bodies
154+
albedo = pvlib.albedo.inland_water_dvoracek(
155+
solar_elevation=solar_position['elevation'],
156+
surface_condition='clear_water_no_waves'
157+
)
158+
159+
# Use transposition model to find plane-of-array irradiance
160+
irradiance = pvlib.irradiance.get_total_irradiance(
161+
surface_tilt=tilt,
162+
surface_azimuth=azimuth,
163+
solar_zenith=solar_position['apparent_zenith'],
164+
solar_azimuth=solar_position['azimuth'],
165+
dni=tmy['dni'],
166+
dni_extra=tmy['dni_extra'],
167+
ghi=tmy['ghi'],
168+
dhi=tmy['dhi'],
169+
albedo=albedo,
170+
model='haydavies'
171+
)
172+
173+
# %%
174+
# Calculate and plot cell temperature
175+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
176+
# The temperature of the PV cell is calculated for lake-based floating PV
177+
# systems.
178+
179+
# Make a dictionary containing all the sets of coefficients presented in the
180+
# above table.
181+
heat_loss_coeffs = {
182+
'open_structure_small_footprint_tracking_NL': [24.4, 6.5, 'C0', 'solid'],
183+
'open_structure_small_footprint_tracking_NL_2': [57, 0, 'C0', 'dashed'],
184+
'closed_structure_large_footprint_NL': [25.2, 3.7, 'C1', 'solid'],
185+
'closed_structure_large_footprint_NL_2': [37, 0, 'C1', 'dashed'],
186+
'closed_structure_large_footprint_SG': [34.8, 0.8, 'C2', 'solid'],
187+
'closed_structure_large_footprint_SG_2': [36, 0, 'C2', 'dashed'],
188+
'closed_structure_medium_footprint_SG': [18.9, 8.9, 'C3', 'solid'],
189+
'closed_structure_medium_footprint_SG_2': [41, 0, 'C3', 'dashed'],
190+
'open_structure_free_standing_SG': [35.3, 8.9, 'C4', 'solid'],
191+
'open_structure_free_standing_SG_2': [55, 0, 'C4', 'dashed'],
192+
'in_contact_with_water_NO': [71, 0, 'C5', 'solid'],
193+
'open_structure_free_standing_IT': [31.9, 1.5, 'C6', 'solid'],
194+
'open_structure_free_standing_bifacial_IT': [35.2, 1.5, 'C7', 'solid'],
195+
'default_PVSyst_coeffs_for_land_systems': [29.0, 0, 'C8', 'solid']
196+
}
197+
198+
# Plot the cell temperature for each set of the above heat loss coefficients
199+
for coeffs in heat_loss_coeffs:
200+
T_cell = pvlib.temperature.pvsyst_cell(
201+
poa_global=irradiance['poa_global'],
202+
temp_air=tmy['temp_air'],
203+
wind_speed=tmy['wind_speed'],
204+
u_c=heat_loss_coeffs[coeffs][0],
205+
u_v=heat_loss_coeffs[coeffs][1]
206+
)
207+
# Convert Dataframe Indexes to Hour format to make plotting easier
208+
T_cell.index = T_cell.index.strftime("%H")
209+
plt.plot(T_cell, label=coeffs, c=heat_loss_coeffs[coeffs][2],
210+
ls=heat_loss_coeffs[coeffs][3], alpha=0.8)
211+
212+
plt.xlabel('Hour')
213+
plt.ylabel('PV cell temperature [°C]')
214+
plt.ylim(10, 45)
215+
plt.xlim('06', '20')
216+
plt.grid()
217+
plt.legend(loc='upper left', frameon=False, ncols=2, fontsize='x-small',
218+
bbox_to_anchor=(0, -0.2))
219+
plt.tight_layout()
220+
plt.show()
221+
222+
# %%
223+
# The figure above illustrates the necessity of choosing appropriate heat loss
224+
# coefficients when using the PVSyst model for calculating the cell temperature
225+
# for floating PV systems. A difference of up to 10.3 °C was obtained when
226+
# using the default PVSyst coefficients versus using coefficients for systems
227+
# where panels are in contact with water.
228+
#
229+
# It should be noted that, using the single combined U-value versus the
230+
# :math:`U_c` and :math:`U_v` gives significantly different results, even
231+
# when using the coefficients derived from the same system.

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,16 @@ Testing
2525

2626
Documentation
2727
~~~~~~~~~~~~~
28-
28+
* Added gallery example on calculating cell temperature for
29+
floating PV. (:pull:`2110`)
2930

3031
Requirements
3132
~~~~~~~~~~~~
3233

3334

3435
Contributors
3536
~~~~~~~~~~~~
37+
* Ioannis Sifnaios (:ghuser:`IoannisSifnaios`)
38+
* Leonardo Micheli (:ghuser:`lmicheli`)
3639
* Echedey Luis (:ghuser:`echedey-ls`)
40+

0 commit comments

Comments
 (0)