def test_sandia_float(cec_inverter_parameters): vdcs = 25. idcs = 5.5 pdcs = idcs * vdcs pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters) assert_allclose(pacs, 132.004278, 5) # test at low power condition vdcs = 25. idcs = 0 pdcs = idcs * vdcs pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters) assert_allclose(pacs, -1. * cec_inverter_parameters['Pnt'], 5)
def test_sandia_Pnt_micro(): """ Test for issue #140, where some microinverters were giving a positive AC power output when the DC power was 0. """ inverter_parameters = { 'Name': 'Enphase Energy: M250-60-2LL-S2x (-ZC) (-NA) 208V [CEC 2013]', 'Vac': 208.0, 'Paco': 240.0, 'Pdco': 250.5311318, 'Vdco': 32.06160667, 'Pso': 1.12048857, 'C0': -5.76E-05, 'C1': -6.24E-04, 'C2': 8.09E-02, 'C3': -0.111781106, 'Pnt': 0.043, 'Vdcmax': 48.0, 'Idcmax': 9.8, 'Mppt_low': 27.0, 'Mppt_high': 39.0, } vdcs = pd.Series(np.linspace(0, 50, 3)) idcs = pd.Series(np.linspace(0, 11, 3)) pdcs = idcs * vdcs pacs = inverter.sandia(vdcs, pdcs, inverter_parameters) assert_series_equal(pacs, pd.Series([-0.043, 132.545914746, 240.0]))
def test_sandia(cec_inverter_parameters): vdcs = pd.Series(np.linspace(0, 50, 3)) idcs = pd.Series(np.linspace(0, 11, 3)) pdcs = idcs * vdcs pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters) assert_series_equal(pacs, pd.Series([-0.020000, 132.004308, 250.000000]))
def test_sandia_float(cec_inverter_parameters): vdcs = 25. idcs = 5.5 pdcs = idcs * vdcs pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters) assert_allclose(pacs, 132.004278, 5)
def basic_chain(times, latitude, longitude, module_parameters, temperature_model_parameters, inverter_parameters, irradiance=None, weather=None, surface_tilt=None, surface_azimuth=None, orientation_strategy=None, transposition_model='haydavies', solar_position_method='nrel_numpy', airmass_model='kastenyoung1989', altitude=None, pressure=None, **kwargs): """ An experimental function that computes all of the modeling steps necessary for calculating power or energy for a PV system at a given location. Parameters ---------- times : DatetimeIndex Times at which to evaluate the model. latitude : float. Positive is north of the equator. Use decimal degrees notation. longitude : float. Positive is east of the prime meridian. Use decimal degrees notation. module_parameters : None, dict or Series Module parameters as defined by the SAPM. See pvsystem.sapm for details. temperature_model_parameters : None, dict or Series. Temperature model parameters as defined by the SAPM. See temperature.sapm_cell for details. inverter_parameters : None, dict or Series Inverter parameters as defined by the CEC. See :py:func:`inverter.sandia` for details. irradiance : None or DataFrame, default None If None, calculates clear sky data. Columns must be 'dni', 'ghi', 'dhi'. weather : None or DataFrame, default None If None, assumes air temperature is 20 C and wind speed is 0 m/s. Columns must be 'wind_speed', 'temp_air'. surface_tilt : None, float or Series, default None Surface tilt angles in decimal degrees. The tilt angle is defined as degrees from horizontal (e.g. surface facing up = 0, surface facing horizon = 90) surface_azimuth : None, float or Series, default None Surface azimuth angles in decimal degrees. The azimuth convention is defined as degrees east of north (North=0, South=180, East=90, West=270). orientation_strategy : None or str, default None The strategy for aligning the modules. If not None, sets the ``surface_azimuth`` and ``surface_tilt`` properties of the ``system``. Allowed strategies include 'flat', 'south_at_latitude_tilt'. Ignored for SingleAxisTracker systems. transposition_model : str, default 'haydavies' Passed to system.get_irradiance. solar_position_method : str, default 'nrel_numpy' Passed to solarposition.get_solarposition. airmass_model : str, default 'kastenyoung1989' Passed to atmosphere.relativeairmass. altitude : None or float, default None If None, computed from pressure. Assumed to be 0 m if pressure is also None. pressure : None or float, default None If None, computed from altitude. Assumed to be 101325 Pa if altitude is also None. **kwargs Arbitrary keyword arguments. See code for details. Returns ------- output : (dc, ac) Tuple of DC power (with SAPM parameters) (DataFrame) and AC power (Series). """ # use surface_tilt and surface_azimuth if provided, # otherwise set them using the orientation_strategy if surface_tilt is not None and surface_azimuth is not None: pass elif orientation_strategy is not None: surface_tilt, surface_azimuth = \ get_orientation(orientation_strategy, latitude=latitude) else: raise ValueError('orientation_strategy or surface_tilt and ' 'surface_azimuth must be provided') if altitude is None and pressure is None: altitude = 0. pressure = 101325. elif altitude is None: altitude = atmosphere.pres2alt(pressure) elif pressure is None: pressure = atmosphere.alt2pres(altitude) solar_position = solarposition.get_solarposition( times, latitude, longitude, altitude=altitude, pressure=pressure, method=solar_position_method, **kwargs) # possible error with using apparent zenith with some models airmass = atmosphere.get_relative_airmass( solar_position['apparent_zenith'], model=airmass_model) airmass = atmosphere.get_absolute_airmass(airmass, pressure) dni_extra = pvlib.irradiance.get_extra_radiation(solar_position.index) aoi = pvlib.irradiance.aoi(surface_tilt, surface_azimuth, solar_position['apparent_zenith'], solar_position['azimuth']) if irradiance is None: linke_turbidity = clearsky.lookup_linke_turbidity( solar_position.index, latitude, longitude) irradiance = clearsky.ineichen(solar_position['apparent_zenith'], airmass, linke_turbidity, altitude=altitude, dni_extra=dni_extra) total_irrad = pvlib.irradiance.get_total_irradiance( surface_tilt, surface_azimuth, solar_position['apparent_zenith'], solar_position['azimuth'], irradiance['dni'], irradiance['ghi'], irradiance['dhi'], model=transposition_model, dni_extra=dni_extra) if weather is None: weather = {'wind_speed': 0, 'temp_air': 20} cell_temperature = temperature.sapm_cell( total_irrad['poa_global'], weather['temp_air'], weather['wind_speed'], temperature_model_parameters['a'], temperature_model_parameters['b'], temperature_model_parameters['deltaT']) effective_irradiance = pvsystem.sapm_effective_irradiance( total_irrad['poa_direct'], total_irrad['poa_diffuse'], airmass, aoi, module_parameters) dc = pvsystem.sapm(effective_irradiance, cell_temperature, module_parameters) ac = inverter.sandia(dc['v_mp'], dc['p_mp'], inverter_parameters) return dc, ac
def forecast_ac_power(dc_out, invertermodel): p_ac = inverter.sandia(dc_out.v_mp, dc_out.p_mp, invertermodel) return p_ac