def test_HybridSystem_singlediode(): from collections import OrderedDict static_hybsystem = cpvsystem.StaticHybridSystem( module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate) diode_parameters_cpv = (0.768, 6.021260125175771e-09, 0.01, 5355.728196448678, 1.973560253332227) diode_parameters_flat = (0.90375, 1.4707860128864193e-07, 0.5, 605.1508364413314, 0.35922505316643616) dc_cpv, dc_flat = static_hybsystem.singlediode(diode_parameters_cpv, diode_parameters_flat) assert dc_cpv == OrderedDict([('i_sc', 0.7679985660005298), ('v_oc', 36.81679129270333), ('i_mp', 0.7169288240780115), ('v_mp', 31.238496992958595), ('p_mp', 22.395778915126304), ('i_x', 0.7644934769583084), ('i_xx', 0.5758846117534837)]) assert dc_flat == OrderedDict([('i_sc', 0.903003532284735), ('v_oc', 5.6113766436897095), ('i_mp', 0.8210320675081583), ('v_mp', 4.310035383000505), ('p_mp', 3.5386772615382216), ('i_x', 0.8971082731548178), ('i_xx', 0.5712911044697004)])
def test_StaticHybridSystem_get_effective_irradiance(): static_hybsystem = cpvsystem.StaticHybridSystem( surface_tilt=32, surface_azimuth=135, module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate) times = pd.date_range(start='20160101 1200-0700', end='20160101 1800-0700', freq='6H') location = pvlib.location.Location(latitude=32, longitude=-111) solar_position = location.get_solarposition(times) irrads = pd.DataFrame({ 'dni': [900, 0], 'ghi': [600, 0], 'dhi': [100, 0] }, index=times) eff_irr_cpv, wff_irr_flat = static_hybsystem.get_effective_irradiance( solar_position['apparent_zenith'], solar_position['azimuth'], irrads['dni'], irrads['ghi'], irrads['dhi']) expected_cpv = pd.Series(data=np.array([637.964408, 0.0]), index=times) expected_flat = pd.Series(data=np.array([137.794154, 0.0]), index=times) pd.testing.assert_series_equal(eff_irr_cpv, expected_cpv, rtol=0.0001) pd.testing.assert_series_equal(wff_irr_flat, expected_flat, rtol=0.0001)
def test_HybridSystem_calcparams_pvsyst(): static_hybsystem = cpvsystem.StaticHybridSystem( module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate) irrad_cpv = 800 irrad_flat = 150 temp_cell_cpv = 65 temp_cell_flat = 50 diode_parameters_cpv, diode_parameters_flat = static_hybsystem.calcparams_pvsyst( irrad_cpv, irrad_flat, temp_cell_cpv, temp_cell_flat) assert diode_parameters_cpv == (0.768, 6.021260125175771e-09, 0.01, 5355.728196448678, 1.973560253332227) assert diode_parameters_flat == (0.90375, 1.4707860128864193e-07, 0.5, 605.1508364413314, 0.35922505316643616)
def test_HybridSystem_get_global_utilization_factor_cpv(): static_hybsystem = cpvsystem.StaticHybridSystem( module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate) times = pd.date_range(start='20160101 1200', end='20160101 1500', freq='3H') airmass_absolute = pd.Series(data=np.array([2.056997, 3.241064]), index=times) temp_air = pd.Series(data=np.array([5, 35]), index=times) uf_global = static_hybsystem.get_global_utilization_factor_cpv( airmass_absolute, temp_air) expected = pd.Series(data=np.array([0.822522, 0.940439]), index=times) pd.testing.assert_series_equal(uf_global, expected, rtol=0.0001)
def test_HybridSystem_pvsyst_celltemp(): parameter_set = 'freestanding' temp_model_params_cpv = pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS[ 'pvsyst'][parameter_set] temp_model_params_flat = pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS[ 'pvsyst'][parameter_set] static_hybsystem = cpvsystem.StaticHybridSystem( module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate, temperature_model_parameters_cpv=temp_model_params_cpv, temperature_model_parameters_flatplate=temp_model_params_flat) irrad_cpv = 800 irrad_flat = 150 temp = 45 wind = 0.5 out_cpv, out_flat = static_hybsystem.pvsyst_celltemp( irrad_cpv, irrad_flat, temp, wind) assert np.round(out_cpv, 4) == 61.8828 assert np.round(out_flat, 4) == 49.1897
altitude=695, tz='utc') solar_zenith = location.get_solarposition(data.index).zenith solar_azimuth = location.get_solarposition(data.index).azimuth #%% # StaticHybridSystem static_hybrid_sys = cpvsystem.StaticHybridSystem( surface_tilt=30, surface_azimuth=180, module_cpv=None, module_flatplate=None, module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate, modules_per_string=1, strings_per_inverter=1, inverter=None, inverter_parameters=None, racking_model="insulated", losses_parameters=None, name=None, ) # get_effective_irradiance data['dii_effective'], data[ 'poa_flatplate_static_effective'] = static_hybrid_sys.get_effective_irradiance( solar_zenith, solar_azimuth, # iam_param=0.7, # aoi_limit=55,
def test_StaticHybridSystem_composicion_2019_05(data): location = pvlib.location.Location(latitude=40.4, longitude=-3.7, altitude=695, tz='Europe/Madrid') solar_zenith = location.get_solarposition(data.index).zenith solar_azimuth = location.get_solarposition(data.index).azimuth # StaticCPVSystem static_cpv_sys = cpvsystem.StaticCPVSystem( surface_tilt=30, surface_azimuth=180, module=None, module_parameters=mod_params_cpv, temperature_model_parameters=pvlib.temperature. TEMPERATURE_MODEL_PARAMETERS['pvsyst']['insulated'], modules_per_string=1, strings_per_inverter=1, inverter=None, inverter_parameters=None, racking_model="insulated", losses_parameters=None, name=None, ) data['aoi'] = static_cpv_sys.get_aoi(solar_zenith, solar_azimuth) data['dii_effective'] = data['dii'] * pvlib.iam.ashrae(data['aoi'], b=0.7) diode_parameters_cpv = static_cpv_sys.calcparams_pvsyst( data['dii_effective'], data['temp_cell_35']) dc_cpv = static_cpv_sys.singlediode(*diode_parameters_cpv) airmass_absolute = location.get_airmass(data.index).airmass_absolute # OJO uf_global NO incluye uf_aoi!! uf_global = static_cpv_sys.get_global_utilization_factor( airmass_absolute, data['temp_air']) # StaticFlatPlateSystem static_flatplate_sys = cpvsystem.StaticFlatPlateSystem( surface_tilt=30, surface_azimuth=180, module=None, module_parameters=mod_params_flatplate, modules_per_string=1, strings_per_inverter=1, inverter=None, inverter_parameters=None, racking_model="insulated", losses_parameters=None, name=None, ) # el aoi de difusa es el mismo que cpv data['poa_flatplate_static'] = static_flatplate_sys.get_irradiance( solar_zenith, solar_azimuth, aoi=data['aoi'], # aoi_limit=55, # ahora pasa por module_params # dii_effective no aplica, ya que si no el calculo de difusa es artificialmente alto! dii=data['dii'], gii=data['gii']) celltemp_flatplate = static_flatplate_sys.pvsyst_celltemp( data['poa_flatplate_static'], data['temp_air'], data['wind_speed']) diode_parameters_flatplate = static_flatplate_sys.calcparams_pvsyst( data['poa_flatplate_static'], celltemp_flatplate) dc_flatplate = static_flatplate_sys.singlediode( *diode_parameters_flatplate) # StaticHybridSystem static_hybrid_sys = cpvsystem.StaticHybridSystem( surface_tilt=30, surface_azimuth=180, module_cpv=None, module_flatplate=None, module_parameters_cpv=mod_params_cpv, module_parameters_flatplate=mod_params_flatplate, modules_per_string=1, strings_per_inverter=1, inverter=None, inverter_parameters=None, racking_model="insulated", losses_parameters=None, name=None, ) # get_effective_irradiance dii_effective_h, poa_flatplate_static_h = static_hybrid_sys.get_effective_irradiance( solar_zenith, solar_azimuth, dni=data['dni'], dii= None, # dii_effective no aplica, ya que si no el calculo de difusa es artificialmente alto! gii=data['gii'], ) assert np.allclose(data['dii_effective'], dii_effective_h, atol=1) is True assert np.allclose( data['poa_flatplate_static'], poa_flatplate_static_h, atol=1) is True # pvsyst_celltemp _, celltemp_flatplate_h = static_hybrid_sys.pvsyst_celltemp( dii=dii_effective_h, poa_flatplate_static=poa_flatplate_static_h, temp_air=data['temp_air'], wind_speed=data['wind_speed']) assert np.allclose(celltemp_flatplate, celltemp_flatplate_h, atol=1) is True # calcparams_pvsyst diode_parameters_cpv_h, diode_parameters_flatplate_h = static_hybrid_sys.calcparams_pvsyst( dii=dii_effective_h, poa_flatplate_static=poa_flatplate_static_h, temp_cell_cpv=data['temp_cell_35'], temp_cell_flatplate=celltemp_flatplate_h, ) for diode_param, diode_param_h in zip(diode_parameters_cpv, diode_parameters_cpv_h): assert np.allclose(diode_param, diode_param_h, atol=10) is True # singlediode airmass_absolute = location.get_airmass(data.index).airmass_absolute dc_cpv_h, dc_flatplate_h = static_hybrid_sys.singlediode( diode_parameters_cpv_h, diode_parameters_flatplate_h) for dc_param in dc_cpv: assert np.allclose(dc_cpv[dc_param], dc_cpv_h[dc_param], atol=1) is True for dc_param in dc_cpv: assert np.allclose(dc_flatplate[dc_param].fillna(0), dc_flatplate_h[dc_param].fillna(0), atol=100) is True # uf_global airmass_absolute = location.get_airmass(data.index).airmass_absolute uf_global_h = static_hybrid_sys.get_global_utilization_factor_cpv( airmass_absolute, data['temp_air']) assert np.allclose(uf_global, uf_global_h, atol=0.001) is True