diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index b762372ae7..783d2541b0 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -1008,10 +1008,13 @@ def _infer_temperature_model_params(self): return temperature._temperature_model_params('sapm', param_set) elif 'freestanding' in param_set: return temperature._temperature_model_params('pvsyst', - 'freestanding') + 'freestanding') elif 'insulated' in param_set: # after SAPM to avoid confusing keys return temperature._temperature_model_params('pvsyst', - 'insulated') + 'insulated') + elif 'semi_integrated' in param_set: # Add this condition + return temperature._temperature_model_params('pvsyst', + 'semi_integrated') else: return {} @@ -1395,12 +1398,10 @@ class FixedMount(AbstractMount): West=270. [degrees] racking_model : str, optional - Valid strings are ``'open_rack'``, ``'close_mount'``, - ``'insulated_back'``, ``'freestanding'`` and ``'insulated'``. + Valid strings are 'open_rack', 'close_mount', 'insulated_back', + 'freestanding', 'insulated', and 'semi_integrated'. Used to identify a parameter set for the SAPM or PVsyst cell temperature model. - See :py:func:`~pvlib.temperature.sapm_module` and - :py:func:`~pvlib.temperature.pvsyst_cell` for definitions. module_height : float, optional The height above ground of the center of the module [m]. Used for diff --git a/pvlib/temperature.py b/pvlib/temperature.py index ab31ffaf56..b30ba1c531 100644 --- a/pvlib/temperature.py +++ b/pvlib/temperature.py @@ -21,7 +21,8 @@ 'insulated_back_glass_polymer': {'a': -2.81, 'b': -.0455, 'deltaT': 0}, }, 'pvsyst': {'freestanding': {'u_c': 29.0, 'u_v': 0}, - 'insulated': {'u_c': 15.0, 'u_v': 0}} + 'insulated': {'u_c': 15.0, 'u_v': 0}, + 'semi_integrated': {'u_c': 20.0, 'u_v': 0}} } """Dictionary of temperature parameters organized by model. @@ -365,6 +366,16 @@ def pvsyst_cell(poa_global, temp_air, wind_speed=1.0, u_c=29.0, u_v=0.0, alpha_absorption : numeric, default 0.9 Absorption coefficient. Parameter :math:`\alpha` in :eq:`pvsyst`. + freestanding : Uc = 29 W/(m^2*C), Uv = 0 W/(m^2*C*m/s) + + insulated : Uc = 15 W/(m^2*C), Uv = 0 W/(m^2*C*m/s) + + semi_integrated : Uc = 20 W/(m^2*C), Uv = 0 W/(m^2*C*m/s) + (for roof mounted systems with air flow beneath modules) + + PVUSA : Uc = 25 W/(m^2*C), Uv = 1.2 W/(m^2*C*m/s) + + Returns ------- numeric, values in degrees Celsius diff --git a/tests/test_pvsystem.py b/tests/test_pvsystem.py index ebd015d348..9735e11504 100644 --- a/tests/test_pvsystem.py +++ b/tests/test_pvsystem.py @@ -2504,3 +2504,21 @@ def test_Array_temperature_missing_parameters(model, keys): array.temperature_model_parameters = params with pytest.raises(KeyError, match=match): array.get_cell_temperature(irrads, temps, winds, model) + +def test_pvsyst_semi_integrated_params(): + """Test that semi_integrated racking model correctly gets PVsyst parameters.""" + # Create a mount with semi_integrated racking model + mount = pvsystem.FixedMount(surface_tilt=30, surface_azimuth=180, + racking_model='semi_integrated') + + # Create an array with this mount + array = pvsystem.Array(mount=mount, module_type='glass_glass') + + # Get the inferred temperature model parameters + params = array._infer_temperature_model_params() + + # Check that the correct parameters were returned + assert 'u_c' in params + assert 'u_v' in params + assert params['u_c'] == 20.0 + assert params['u_v'] == 0.0 \ No newline at end of file