46
46
}
47
47
48
48
49
- TEMP_MODELS = {
49
+ TEMP_MODEL_PARAMS = {
50
50
'sapm' : {'open_rack_cell_glassback' : (- 3.47 , - .0594 , 3 ),
51
51
'roof_mount_cell_glassback' : (- 2.98 , - .0471 , 1 ),
52
52
'open_rack_cell_polymerback' : (- 3.56 , - .0750 , 3 ),
@@ -521,7 +521,7 @@ def sapm_effective_irradiance(self, poa_direct, poa_diffuse,
521
521
poa_direct , poa_diffuse , airmass_absolute , aoi ,
522
522
self .module_parameters , reference_irradiance = reference_irradiance )
523
523
524
- def pvsyst_celltemp (self , poa_global , wind_speed , temp_air ):
524
+ def pvsyst_celltemp (self , poa_global , temp_air , wind_speed = 1.0 ):
525
525
"""Uses :py:func:`pvsyst_celltemp` to calculate module temperatures
526
526
based on ``self.racking_model`` and the input parameters.
527
527
@@ -535,8 +535,8 @@ def pvsyst_celltemp(self, poa_global, wind_speed, temp_air):
535
535
"""
536
536
kwargs = _build_kwargs (['eta_m' , 'alpha_absorption' ],
537
537
self .module_parameters )
538
- return pvsyst_celltemp (poa_global , wind_speed , temp_air ,
539
- temp_model = self .racking_model , ** kwargs )
538
+ return pvsyst_celltemp (poa_global , temp_air , wind_speed ,
539
+ model_params = self .racking_model , ** kwargs )
540
540
541
541
def first_solar_spectral_loss (self , pw , airmass_absolute ):
542
542
@@ -1887,7 +1887,7 @@ def sapm_celltemp(poa_global, wind_speed, temp_air,
1887
1887
sapm
1888
1888
'''
1889
1889
1890
- temp_models = TEMP_MODELS ['sapm' ]
1890
+ temp_models = TEMP_MODEL_PARAMS ['sapm' ]
1891
1891
1892
1892
if isinstance (model , str ):
1893
1893
model = temp_models [model .lower ()]
@@ -1908,30 +1908,37 @@ def sapm_celltemp(poa_global, wind_speed, temp_air,
1908
1908
return pd .DataFrame ({'temp_cell' : temp_cell , 'temp_module' : temp_module })
1909
1909
1910
1910
1911
- def pvsyst_celltemp (poa_global , wind_speed , temp_air , eta_m = 0.1 ,
1912
- alpha_absorption = 0.9 , temp_model = " freestanding" ):
1911
+ def pvsyst_celltemp (poa_global , temp_air , wind_speed = 1.0 , eta_m = 0.1 ,
1912
+ alpha_absorption = 0.9 , model_params = ' freestanding' ):
1913
1913
"""
1914
- Calculate cell temperature using the PVSyst model.
1914
+ Calculate cell temperature using an emperical heat loss factor model
1915
+ as implemented in PVsyst.
1916
+
1917
+ The heat loss factors provided through the 'model_params' argument
1918
+ represent the combined effect of convection, radiation and conduction,
1919
+ and their values are experimentally determined.
1915
1920
1916
1921
Parameters
1917
1922
----------
1918
1923
poa_global : numeric
1919
1924
Total incident irradiance in W/m^2.
1920
1925
1921
- wind_speed : numeric
1922
- Wind speed in m/s at a height of 10 meters.
1923
-
1924
1926
temp_air : numeric
1925
1927
Ambient dry bulb temperature in degrees C.
1926
1928
1927
- eta_m : numeric
1929
+ wind_speed : numeric, default 1.0
1930
+ Wind speed in m/s measured at the same height for which the wind loss
1931
+ factor was determined. The default value is 1.0, which is the wind
1932
+ speed at module height used to determine NOCT.
1933
+
1934
+ eta_m : numeric, default 0.1
1928
1935
Module external efficiency as a fraction, i.e., DC power / poa_global.
1929
1936
1930
- alpha_absorption : float
1931
- Absorption coefficient, default is 0.9.
1937
+ alpha_absorption : numeric, default 0.9
1938
+ Absorption coefficient
1932
1939
1933
- temp_model : string, tuple, or list, default 'freestanding' (no dict)
1934
- Model to be used.
1940
+ model_params : string, tuple, or list (no dict) , default 'freestanding'
1941
+ Heat loss factors to be used.
1935
1942
1936
1943
If string, can be:
1937
1944
@@ -1944,12 +1951,12 @@ def pvsyst_celltemp(poa_global, wind_speed, temp_air, eta_m=0.1,
1944
1951
1945
1952
If tuple/list, supply parameters in the following order:
1946
1953
1947
- * natural_convenction_coeff : float
1948
- Natural convection coefficient. Freestanding default is 29,
1949
- fully insulated arrays is 15.
1954
+ * constant_loss_factor : float
1955
+ Combined heat loss factor coefficient. Freestanding
1956
+ default is 29, fully insulated arrays is 15.
1950
1957
1951
- * forced_convection_coeff : float
1952
- Forced convection coefficient, default is 0.
1958
+ * wind_loss_factor : float
1959
+ Combined heat loss factor influenced by wind. Default is 0.
1953
1960
1954
1961
Returns
1955
1962
-------
@@ -1965,25 +1972,21 @@ def pvsyst_celltemp(poa_global, wind_speed, temp_air, eta_m=0.1,
1965
1972
photovoltaic modules." Progress in Photovoltaics 16(4): 307-315.
1966
1973
"""
1967
1974
1968
- temp_models = TEMP_MODELS ['pvsyst' ]
1975
+ pvsyst_presets = TEMP_MODEL_PARAMS ['pvsyst' ]
1969
1976
1970
- if isinstance (temp_model , str ):
1971
- natural_convenction_coeff , forced_convection_coeff = temp_models [
1972
- temp_model .lower ()
1973
- ]
1974
- elif isinstance (temp_model , (tuple , list )):
1975
- natural_convenction_coeff , forced_convection_coeff = temp_model
1977
+ if isinstance (model_params , str ):
1978
+ model_params = model_params .lower ()
1979
+ constant_loss_factor , wind_loss_factor = pvsyst_presets [model_params ]
1980
+ elif isinstance (model_params , (tuple , list )):
1981
+ constant_loss_factor , wind_loss_factor = model_params
1976
1982
else :
1977
1983
raise TypeError (
1978
- "Please format temp_model as a str, or tuple/list."
1984
+ "Please provide model_params as a str, or tuple/list."
1979
1985
)
1980
1986
1981
- combined_convection_coeff = (
1982
- forced_convection_coeff * wind_speed
1983
- ) + natural_convenction_coeff
1984
-
1985
- absorption_coeff = alpha_absorption * poa_global * (1 - eta_m )
1986
- temp_difference = absorption_coeff / combined_convection_coeff
1987
+ total_loss_factor = wind_loss_factor * wind_speed + constant_loss_factor
1988
+ heat_input = poa_global * alpha_absorption * (1 - eta_m )
1989
+ temp_difference = heat_input / total_loss_factor
1987
1990
temp_cell = temp_air + temp_difference
1988
1991
1989
1992
return temp_cell
0 commit comments