def test_deprecated_08(): # explicit system creation call because fail_on_pvlib_version # does not support decorators. # does not matter what the parameters are, just fake it until we make it module_parameters = {'R_sh_ref': 1, 'a_ref': 1, 'I_o_ref': 1, 'alpha_sc': 1, 'I_L_ref': 1, 'R_s': 1} # do not assign PVSystem.temperature_model_parameters system = PVSystem(module_parameters=module_parameters) with pytest.warns(pvlibDeprecationWarning): ModelChain(system, location, dc_model='desoto', aoi_model='no_loss', spectral_model='no_loss', temp_model='sapm', ac_model='snlinverter') system = PVSystem(module_parameters=module_parameters) with pytest.warns(pvlibDeprecationWarning): ModelChain(system, location, dc_model='desoto', aoi_model='no_loss', spectral_model='no_loss', temperature_model='sapm', temp_model='sapm', ac_model='snlinverter') system = PVSystem(module_parameters=module_parameters) with pytest.raises(ValueError): ModelChain(system, location, dc_model='desoto', aoi_model='no_loss', spectral_model='no_loss', temperature_model='pvsyst', temp_model='sapm', ac_model='snlinverter')
def pvwatts_dc_snl_ac_system(sam_data): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} inverters = sam_data['cecinverter'] inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() system = PVSystem(module_parameters=module_parameters, inverter_parameters=inverter) return system
def pvwatts_dc_snl_ac_system(cec_inverter_parameters): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, inverter_parameters=cec_inverter_parameters) return system
def _init_CEC(self): """Configure PV system based on actual components available in pvlib CEC database""" try: moduleName = self.config[self._cfg].get('ModuleName') inverterName = self.config[self._cfg].get('InverterName') tempModel = self.config[self._cfg].get('TemperatureModel') self._pvsystem = PVSystem( surface_tilt=self.config[self._cfg].getfloat('Tilt'), surface_azimuth=self.config[self._cfg].getfloat('Azimuth'), module_parameters=pvlib.pvsystem.retrieve_sam( 'cecmod')[moduleName], inverter_parameters=pvlib.pvsystem.retrieve_sam( 'cecinverter')[inverterName], strings_per_inverter=self.config[self._cfg].getint( 'NumStrings'), modules_per_string=self.config[self._cfg].getint('NumPanels'), temperature_model_parameters=TEMPERATURE_MODEL_PARAMETERS[ 'sapm'][tempModel]) self._mc = ModelChain(self._pvsystem, self._location, aoi_model='physical', spectral_model='no_loss') self.pv_model = 'CEC' except Exception as e: print("init_CEC: " + str(e)) sys.exit(1)
def pvwatts_dc_pvwatts_ac_system(sam_data): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} inverter_parameters = {'eta_inv_nom': 0.95} system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, inverter_parameters=inverter_parameters) return system
def test_deprecated_08(): # explicit system creation call because fail_on_pvlib_version # does not support decorators. # does not matter what the parameters are, just fake it until we make it module_parameters = {'R_sh_ref': 1, 'a_ref': 1, 'I_o_ref': 1, 'alpha_sc': 1, 'I_L_ref': 1, 'R_s': 1} # do not assign PVSystem.temperature_model_parameters # leave out PVSystem.racking_model and PVSystem.module_type system = PVSystem(module_parameters=module_parameters) # deprecated temp_model kwarg warn_txt = 'temp_model keyword argument is deprecated' with pytest.warns(pvlibDeprecationWarning, match=warn_txt): ModelChain(system, location, dc_model='desoto', aoi_model='no_loss', spectral_model='no_loss', ac_model='sandia', temp_model='sapm') # provide both temp_model and temperature_model kwargs warn_txt = 'Provide only one of temperature_model' with pytest.warns(pvlibDeprecationWarning, match=warn_txt): ModelChain(system, location, dc_model='desoto', aoi_model='no_loss', spectral_model='no_loss', ac_model='sandia', temperature_model='sapm', temp_model='sapm') # conflicting temp_model and temperature_model kwargs exc_text = 'Conflicting temperature_model' with pytest.raises(ValueError, match=exc_text): ModelChain(system, location, dc_model='desoto', aoi_model='no_loss', spectral_model='no_loss', ac_model='sandia', temperature_model='pvsyst', temp_model='sapm')
def cec_dc_native_snl_ac_system(cec_module_cs5p_220m, cec_inverter_parameters): module_parameters = cec_module_cs5p_220m.copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module_parameters['Name'], module_parameters=module_parameters, inverter_parameters=cec_inverter_parameters) return system
def system(sam_data): modules = sam_data['sandiamod'] module_parameters = modules['Canadian_Solar_CS5P_220M___2009_'].copy() inverters = sam_data['cecinverter'] inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() system = PVSystem(module_parameters=module_parameters, inverter_parameters=inverter) return system
def pvwatts_dc_pvwatts_ac_system(sapm_temperature_cs5p_220m): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} temp_model_params = sapm_temperature_cs5p_220m.copy() inverter_parameters = {'pdc0': 220, 'eta_inv_nom': 0.95} system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=inverter_parameters) return system
def get_pv_feedin(filename='data/Lifuka_weather_2005.csv'): """ This function converts the FeedinWeather object built in Scrip_Merra2 into a feed-in-timeseries (PV_feedin) of a PV module with the help of PVLib's ModelChain, Location, PVSystem parameters: filename as string (including the full path of the Merra2- FeedinWeather object) out/res: PV_feedin as Pandas.Series [W/Wp] """ weather = pd.read_csv(filename) weather.rename(columns={'v_wind': 'wind_speed'}, inplace=True) weather.set_index(pd.to_datetime(weather['timestamp']), inplace=True) times = weather.index # Initialize PV Module sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod') sapm_inverters = pvlib.pvsystem.retrieve_sam('sandiainverter') # own module parameters invertername = 'ABB__MICRO_0_25_I_OUTD_US_240_240V__CEC_2014_' yingli230 = { 'module_parameters': sandia_modules['Yingli_Solar_YL230_29b_Module__2009__E__'], 'inverter_parameters': sapm_inverters[invertername], 'surface_azimuth': 0, 'surface_tilt': 25, 'albedo': 0.2 } location = { 'latitude': -20, 'longitude': -174.375, 'tz': 'Pacific/Tongatapu', 'altitude': 9.90, 'name': 'Lifuka' } mc = ModelChain(PVSystem(**yingli230), Location(**location), orientation_strategy='south_at_latitude_tilt') mc.complete_irradiance(times=times, weather=weather) mc.run_model() nominal_module_capacity = 230 res = pd.DataFrame() res['pv'] = mc.dc.p_mp.fillna(0) / nominal_module_capacity return res
def power_output(self): """calculates the power output of PV Returns: df -- power output """ if self.multiplier == 0: data = np.zeros(8760) df = pd.Series(data) return df location = Location(latitude=self.latitude, longitude=self.longitude) system = PVSystem(surface_tilt=self.surface_tilt, surface_azimuth=self.surface_azimuth, module_parameters=self.module, inverter_parameters=self.inverter) mc = ModelChain(system, location) weather = self.weather_data() weather.index = pd.date_range(start='01/01/2017', end='01/01/2018', freq='1h', tz='Europe/London', closed='left') # times = naive_times.tz_localize('Europe/London') # print weather # weather = pd.DataFrame( # [[1050, 1000, 100, 30, 5]], # columns=['ghi', 'dni', 'dhi', 'temp_air', 'wind_speed'], # index=[pd.Timestamp('20170401 1200', tz='Europe/London')]) mc.run_model(weather=weather) # multiply by system losses # also multiply by correction factor power = (mc.ac.fillna(value=0).round(2) * self.multiplier * 0.001 * 0.85 * 0.85) # remove negative values power[power < 0] = 0 # multiply by monthly correction factors # for correcting MEERA solar data set cf = [ 1.042785944, 1.059859907, 1.037299072, 0.984286745, 0.995849527, 0.973795815, 1.003315908, 1.014427134, 1.046833, 1.091837017, 1.039504694, 0.95520793 ] # multiply by correction factor for each hour for hour in range(8760): month = int(math.floor(hour / 730)) power[hour] = power[hour] * cf[month] power = power.reset_index(drop=True) return power
def pvwatts_dc_pvwatts_ac_faiman_temp_system(): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} temp_model_params = {'u0': 25.0, 'u1': 6.84} inverter_parameters = {'pdc0': 220, 'eta_inv_nom': 0.95} system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=inverter_parameters) return system
def system_no_temp(cec_module_cs5p_220m, cec_inverter_parameters): module_parameters = cec_module_cs5p_220m.copy() module_parameters['EgRef'] = 1.121 module_parameters['dEgdT'] = -0.0002677 inverter_parameters = cec_inverter_parameters.copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, inverter_parameters=inverter_parameters) return system
def pvwatts_dc_pvwatts_ac_fuentes_temp_system(): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} temp_model_params = {'noct_installed': 45} inverter_parameters = {'pdc0': 220, 'eta_inv_nom': 0.95} system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=inverter_parameters) return system
def pvsyst_dc_snl_ac_system(pvsyst_module_params, cec_inverter_parameters): module = 'PVsyst test module' module_parameters = pvsyst_module_params module_parameters['b'] = 0.05 system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, inverter_parameters=cec_inverter_parameters) return system
def cec_dc_native_snl_ac_system(sam_data): module = 'Canadian_Solar_CS5P_220M' module_parameters = sam_data['cecmod'][module].copy() inverters = sam_data['cecinverter'] inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, inverter_parameters=inverter) return system
def pvwatts_dc_pvwatts_ac_pvsyst_temp_system(): module_parameters = {'pdc0': 220, 'gamma_pdc': -0.003} temp_model_params = {'u_c': 29.0, 'u_v': 0.0, 'eta_m': 0.1, 'alpha_absorption': 0.9} inverter_parameters = {'pdc0': 220, 'eta_inv_nom': 0.95} system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=inverter_parameters) return system
def system(sam_data, cec_inverter_parameters): modules = sam_data['sandiamod'] module = 'Canadian_Solar_CS5P_220M___2009_' module_parameters = modules[module].copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, inverter_parameters=cec_inverter_parameters) return system
def run_orientation_strategy(strategy, expected): system = PVSystem() location = Location(32.2, -111, altitude=700) mc = ModelChain(system, location, orientation_strategy=strategy) # the || accounts for the coercion of 'None' to None assert (mc.orientation_strategy == strategy or mc.orientation_strategy == None) assert system.surface_tilt == expected[0] assert system.surface_azimuth == expected[1]
def cec_dc_snl_ac_system(sam_data): modules = sam_data['cecmod'] module_parameters = modules['Canadian_Solar_CS5P_220M'].copy() module_parameters['b'] = 0.05 module_parameters['EgRef'] = 1.121 module_parameters['dEgdT'] = -0.0002677 inverters = sam_data['cecinverter'] inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() system = PVSystem(module_parameters=module_parameters, inverter_parameters=inverter) return system
def system(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): modules = sam_data['sandiamod'] module = 'Canadian_Solar_CS5P_220M___2009_' module_parameters = modules[module].copy() temp_model_params = sapm_temperature_cs5p_220m.copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=cec_inverter_parameters) return system
def system(sam_data): modules = sam_data['sandiamod'] module = 'Canadian_Solar_CS5P_220M___2009_' module_parameters = modules[module].copy() inverters = sam_data['cecinverter'] inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, inverter_parameters=inverter) return system
def pvsyst_dc_snl_ac_system(sam_data): module = 'PVsyst test module' module_parameters = pvsyst_module_params() module_parameters['b'] = 0.05 inverters = sam_data['cecinverter'] inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, inverter_parameters=inverter) return system
def cec_dc_adr_ac_system(sam_data): modules = sam_data['cecmod'] module_parameters = modules['Canadian_Solar_CS5P_220M'].copy() module_parameters['b'] = 0.05 module_parameters['EgRef'] = 1.121 module_parameters['dEgdT'] = -0.0002677 inverters = sam_data['adrinverter'] inverter = inverters['Zigor__Sunzet_3_TL_US_240V__CEC_2011_'].copy() system = PVSystem(module_parameters=module_parameters, inverter_parameters=inverter) return system
def cec_dc_snl_ac_system(cec_module_cs5p_220m, cec_inverter_parameters): module_parameters = cec_module_cs5p_220m.copy() module_parameters['b'] = 0.05 module_parameters['EgRef'] = 1.121 module_parameters['dEgdT'] = -0.0002677 system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module_parameters['Name'], module_parameters=module_parameters, inverter_parameters=cec_inverter_parameters) return system
def pvsyst_dc_snl_ac_system(pvsyst_module_params, cec_inverter_parameters, sapm_temperature_cs5p_220m): module = 'PVsyst test module' module_parameters = pvsyst_module_params module_parameters['b'] = 0.05 temp_model_params = sapm_temperature_cs5p_220m.copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=cec_inverter_parameters) return system
def test_deprecated_07(): # explicit system creation call because fail_on_pvlib_version # does not support decorators. # does not matter what the parameters are, just fake it until we make it module_parameters = {'R_sh_ref': 1, 'a_ref': 1, 'I_o_ref': 1, 'alpha_sc': 1, 'I_L_ref': 1, 'R_s': 1} system = PVSystem(module_parameters=module_parameters) with pytest.warns(pvlibDeprecationWarning): mc = ModelChain(system, location, dc_model='singlediode', # this should fail after 0.7 aoi_model='no_loss', spectral_model='no_loss', ac_model='snlinverter')
def system_no_aoi(cec_module_cs5p_220m, sapm_temperature_cs5p_220m, cec_inverter_parameters): module_parameters = cec_module_cs5p_220m.copy() module_parameters['EgRef'] = 1.121 module_parameters['dEgdT'] = -0.0002677 temp_model_params = sapm_temperature_cs5p_220m.copy() inverter_parameters = cec_inverter_parameters.copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module_parameters=module_parameters, temperature_model_parameters=temp_model_params, inverter_parameters=inverter_parameters) return system
def cec_dc_adr_ac_system(sam_data, cec_module_cs5p_220m): module_parameters = cec_module_cs5p_220m.copy() module_parameters['b'] = 0.05 module_parameters['EgRef'] = 1.121 module_parameters['dEgdT'] = -0.0002677 inverters = sam_data['adrinverter'] inverter = inverters['Zigor__Sunzet_3_TL_US_240V__CEC_2011_'].copy() system = PVSystem(surface_tilt=32.2, surface_azimuth=180, module=module_parameters['Name'], module_parameters=module_parameters, inverter_parameters=inverter) return system
def test_ModelChain___repr__(): system = PVSystem() location = Location(32.2, -111, altitude=700) strategy = 'south_at_latitude_tilt' mc = ModelChain(system, location, orientation_strategy=strategy) # the || accounts for the coercion of 'None' to None assert mc.__repr__() == ( 'ModelChain for: PVSystem with tilt:32.2 and ' + 'azimuth: 180 with Module: None and Inverter: None ' + 'orientation_startegy: south_at_latitude_tilt clearsky_model: ' + 'ineichentransposition_model: haydavies solar_position_method: ' + 'nrel_numpyairmass_model: kastenyoung1989')