|
| 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. |
0 commit comments