pvperfsolar performance modeling

Reference / Cell temperature

Model option

Fuentes

Fuentes's heat balance with the module's heat capacity

Inputs used: Thermal loss factor Uc (constant), Thermal loss factor Uv (wind), Absorptivity, Thermal inertia, Module unit mass, NOCT standoff adjustment, SAPM coefficient a, SAPM coefficient b, SAPM ΔT, CEC database parameters, Racking type, Ambient temperature, Wind speed

Method

The module absorbs 83 % of the plane irradiance and loses heat by convection to the air, free and forced by the wind, and by long-wave radiation to the sky and to the ground. Its heat capacity makes the temperature lag the weather: the balance is solved as a first-order response over the timestep, from the previous step's module temperature and absorbed sunlight (3), iterated ten times because the heat-loss coefficients depend on the module temperature. The wind at the module's 5 m height comes from the weather file's wind, taken as measured at 9.144 m, by a power law (1); the sky temperature follows the ambient temperature (2). A dark timestep returns the ambient temperature, and the next lit step starts the module from there with no stored sunlight. The irradiance is the plane irradiance after near shading, before soiling and before the glass-reflection step (in the PVWatts version 5 implementation soiling is a DC loss). Values the model fills in: the installed nominal operating cell temperature is not an input; it is 45 °C, or 49 °C on rooftop racking, as PVWatts version 5 sets it from the array type. The convection coefficients at that temperature fix the ratio of total to top-side convection and the ground temperature ratio used at every step, and the heat capacity is raised above an installed NOCT of 48 °C (Settings).

Settings

Setting Value
Installed nominal operating cell temperature 45 °C; 49 °C on rooftop racking
Absorptivity 0.83
Emissivity 0.84
Hydraulic length of the module 0.5 m
Heat capacity C0C_0 11 000 J/(m²·K), × (1 + (T_NOCT − 321.15 K)/12 K) above 48 °C
Module height; height of the file's wind 5 m; 9.144 m
Iterations per timestep 10
Module temperature before the first step 20 °C

The math

  1. Wind at module height
  2. Sky temperature
  3. Module temperature over the timestep
vm=v(59.144)0.2+0.0001(1)v_m = v\left(\frac{5}{9.144}\right)^{0.2} + 0.0001 \tag{1} Tsky=0.68⋅0.0552 Ta1.5+0.32 Ta(2)T_{sky} = 0.68 \cdot 0.0552\,T_a^{1.5} + 0.32\,T_a \tag{2} Tm=Tm,prev eΛ+(1−eΛ)(hcTa+hsTsky+hgTg+Gabs,prev+Gabs−Gabs,prevΛ)+Gabs−Gabs,prevhc+hs+hg,Λ=−(hc+hs+hg) 3600 ΔtCth(3)T_m = T_{m,prev}\,e^{\Lambda} + \frac{(1 - e^{\Lambda})\left(h_c T_a + h_s T_{sky} + h_g T_g + G_{abs,prev} + \frac{G_{abs} - G_{abs,prev}}{\Lambda}\right) + G_{abs} - G_{abs,prev}}{h_c + h_s + h_g},\qquad \Lambda = -\frac{(h_c + h_s + h_g)\,3600\,\Delta t}{C_{th}} \tag{3}

where

Symbol Meaning Unit
vmv_m the wind speed at the module m/s
vv the wind speed m/s
TskyT_{sky} the sky temperature K
TaT_a the ambient temperature K
TmT_m the module temperature at the end of the timestep K
Tm,prevT_{m,prev} the module temperature of the previous timestep K
hch_c the convection coefficient, free and forced W/(m²·K)
hsh_s the radiation coefficient to the sky W/(m²·K)
hgh_g the radiation coefficient to the ground W/(m²·K)
TgT_g the ground temperature, between the ambient and the module temperature K
GabsG_{abs} the absorbed irradiance, 0.83 times the plane irradiance W/m²
Gabs,prevG_{abs,prev} the absorbed irradiance of the previous timestep W/m²
Δt\Delta t the timestep length h
CthC_{th} the module's heat capacity per unit area J/(m²·K)

References

  1. Fuentes 1987, A Simplified Thermal Model for Flat-Plate Photovoltaic Arrays, Sandia report SAND85-0330
  2. Dobos 2014, PVWatts Version 5 Manual, NREL/TP-6A20-62641
  3. NREL SAM Simulation Core (SSC) source code, develop branch read 2026-09-29, github.com/NatLabRockies/ssc: shared/lib_pvwatts.cpp, pvwatts_celltemp; ssc/cmod_pvwattsv5.cpp, the installed NOCT of each array type and the 5 m module height
  4. pvlib-python 0.16.1 source code (github.com/pvlib/pvlib-python), reference implementation: pvlib/temperature.py, sapm_cell() and fuentes()

API

thermal.model = fuentes

Symbols follow the symbol registry.