Exemplo n.º 1
0
def test_SingleAxisTracker_tracking():
    with pytest.warns(pvlibDeprecationWarning):
        system = tracking.SingleAxisTracker(max_angle=90,
                                            axis_tilt=30,
                                            axis_azimuth=180,
                                            gcr=2.0 / 7.0,
                                            backtrack=True)

    apparent_zenith = pd.Series([30])
    apparent_azimuth = pd.Series([135])

    tracker_data = system.singleaxis(apparent_zenith, apparent_azimuth)

    expect = pd.DataFrame(
        {
            'aoi': 7.286245,
            'surface_azimuth': 142.65730,
            'surface_tilt': 35.98741,
            'tracker_theta': -20.88121
        },
        index=[0],
        dtype=np.float64)
    expect = expect[SINGLEAXIS_COL_ORDER]

    assert_frame_equal(expect, tracker_data)

    # results calculated using PVsyst
    pvsyst_solar_azimuth = 7.1609
    pvsyst_solar_height = 27.315
    pvsyst_axis_tilt = 20.
    pvsyst_axis_azimuth = 20.
    with pytest.warns(pvlibDeprecationWarning):
        pvsyst_system = tracking.SingleAxisTracker(max_angle=60.,
                                                   axis_tilt=pvsyst_axis_tilt,
                                                   axis_azimuth=180 +
                                                   pvsyst_axis_azimuth,
                                                   backtrack=False)
    # the definition of azimuth is different from PYsyst
    apparent_azimuth = pd.Series([180 + pvsyst_solar_azimuth])
    apparent_zenith = pd.Series([90 - pvsyst_solar_height])
    tracker_data = pvsyst_system.singleaxis(apparent_zenith, apparent_azimuth)
    expect = pd.DataFrame(
        {
            'aoi': 41.07852,
            'surface_azimuth': 180 - 18.432,
            'surface_tilt': 24.92122,
            'tracker_theta': -15.18391
        },
        index=[0],
        dtype=np.float64)
    expect = expect[SINGLEAXIS_COL_ORDER]

    assert_frame_equal(expect, tracker_data)
Exemplo n.º 2
0
def test_SingleAxisTracker___repr__():
    system = tracking.SingleAxisTracker(max_angle=45,
                                        gcr=.25,
                                        module='blah',
                                        inverter='blarg')
    expected = 'SingleAxisTracker: \n  axis_tilt: 0\n  axis_azimuth: 0\n  max_angle: 45\n  backtrack: True\n  gcr: 0.25\n  name: None\n  surface_tilt: 0\n  surface_azimuth: 180\n  module: blah\n  inverter: blarg\n  albedo: 0.25\n  racking_model: open_rack_cell_glassback'
    assert system.__repr__() == expected
Exemplo n.º 3
0
def test_SingleAxisTracker___repr__():
    system = tracking.SingleAxisTracker(
        max_angle=45,
        gcr=.25,
        module='blah',
        inverter='blarg',
        temperature_model_parameters={'a': -3.56})
    expected = """SingleAxisTracker:
  axis_tilt: 0
  axis_azimuth: 0
  max_angle: 45
  backtrack: True
  gcr: 0.25
  cross_axis_tilt: 0.0
  name: None
  Array:
    name: None
    surface_tilt: None
    surface_azimuth: None
    module: blah
    albedo: 0.25
    racking_model: None
    module_type: None
    temperature_model_parameters: {'a': -3.56}
    strings: 1
    modules_per_string: 1
  inverter: blarg"""
    assert system.__repr__() == expected
Exemplo n.º 4
0
def test_get_irradiance():
    system = tracking.SingleAxisTracker(max_angle=90, axis_tilt=30,
                                        axis_azimuth=180, gcr=2.0/7.0,
                                        backtrack=True)
    times = pd.DatetimeIndex(start='20160101 1200-0700',
                             end='20160101 1800-0700', freq='6H')
    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)
    solar_zenith = solar_position['apparent_zenith']
    solar_azimuth = solar_position['azimuth']
    tracker_data = system.singleaxis(solar_zenith, solar_azimuth)

    irradiance = system.get_irradiance(tracker_data['surface_tilt'],
                                       tracker_data['surface_azimuth'],
                                       solar_zenith,
                                       solar_azimuth,
                                       irrads['dni'],
                                       irrads['ghi'],
                                       irrads['dhi'])

    expected = pd.DataFrame(data=np.array(
        [[961.80070,   815.94490,   145.85580,   135.32820, 10.52757492],
         [nan, nan, nan, nan, nan]]),
                            columns=['poa_global', 'poa_direct',
                                     'poa_diffuse', 'poa_sky_diffuse',
                                     'poa_ground_diffuse'],
                            index=times)

    assert_frame_equal(irradiance, expected, check_less_precise=2)
Exemplo n.º 5
0
def test_SingleAxisTracker___repr__():
    system = tracking.SingleAxisTracker(max_angle=45,
                                        gcr=.25,
                                        module='blah',
                                        inverter='blarg')

    assert system.__repr__() == 'SingleAxisTracker with max_angle: 45'
Exemplo n.º 6
0
def test_SingleAxisTracker___repr__():
    with pytest.warns(pvlibDeprecationWarning):
        system = tracking.SingleAxisTracker(
            max_angle=45,
            gcr=.25,
            module='blah',
            inverter='blarg',
            temperature_model_parameters={'a': -3.56})
    expected = """SingleAxisTracker:
  axis_tilt: 0
  axis_azimuth: 0
  max_angle: 45
  backtrack: True
  gcr: 0.25
  cross_axis_tilt: 0.0
  name: None
  Array:
    name: None
    mount: SingleAxisTrackerMount(axis_tilt=0, axis_azimuth=0, max_angle=45, backtrack=True, gcr=0.25, cross_axis_tilt=0.0, racking_model=None, module_height=None)
    module: blah
    albedo: 0.25
    module_type: None
    temperature_model_parameters: {'a': -3.56}
    strings: 1
    modules_per_string: 1
  inverter: blarg"""  # noqa: E501
    assert system.__repr__() == expected
Exemplo n.º 7
0
def power_tracking(clearsky, albuquerque, system_parameters):
    """Simulated power for a pvlib SingleAxisTracker PVSystem in Albuquerque"""
    system = tracking.SingleAxisTracker(**system_parameters)
    mc = modelchain.ModelChain(system,
                               albuquerque,
                               orientation_strategy='south_at_latitude_tilt')
    mc.run_model(clearsky)
    return mc.ac
Exemplo n.º 8
0
def test_get_irradiance():
    with pytest.warns(pvlibDeprecationWarning):
        system = tracking.SingleAxisTracker(max_angle=90,
                                            axis_tilt=30,
                                            axis_azimuth=180,
                                            gcr=2.0 / 7.0,
                                            backtrack=True)
    times = pd.date_range(start='20160101 1200-0700',
                          end='20160101 1800-0700',
                          freq='6H')
    # latitude=32, longitude=-111
    solar_position = pd.DataFrame(np.array([[
        55.36421554, 55.38851771, 34.63578446, 34.61148229, 172.32003763,
        -3.44516534
    ],
                                            [
                                                96.50000401, 96.50000401,
                                                -6.50000401, -6.50000401,
                                                246.91581654, -3.56292888
                                            ]]),
                                  columns=[
                                      'apparent_zenith', 'zenith',
                                      'apparent_elevation', 'elevation',
                                      'azimuth', 'equation_of_time'
                                  ],
                                  index=times)
    irrads = pd.DataFrame({
        'dni': [900, 0],
        'ghi': [600, 0],
        'dhi': [100, 0]
    },
                          index=times)
    solar_zenith = solar_position['apparent_zenith']
    solar_azimuth = solar_position['azimuth']

    # invalid warnings already generated in horizon test above,
    # no need to clutter test output here
    with np.errstate(invalid='ignore'):
        tracker_data = system.singleaxis(solar_zenith, solar_azimuth)

    # some invalid values in irradiance.py. not our problem here
    with np.errstate(invalid='ignore'):
        irradiance = system.get_irradiance(tracker_data['surface_tilt'],
                                           tracker_data['surface_azimuth'],
                                           solar_zenith, solar_azimuth,
                                           irrads['dni'], irrads['ghi'],
                                           irrads['dhi'])

    expected = pd.DataFrame(data=np.array(
        [[961.80070, 815.94490, 145.85580, 135.32820, 10.52757492],
         [nan, nan, nan, nan, nan]]),
                            columns=[
                                'poa_global', 'poa_direct', 'poa_diffuse',
                                'poa_sky_diffuse', 'poa_ground_diffuse'
                            ],
                            index=times)

    assert_frame_equal(irradiance, expected, check_less_precise=2)
Exemplo n.º 9
0
 def setup(self):
     self.times = pd.date_range(start='20180601', freq='1min',
                                periods=14400)
     self.lat = 35.1
     self.lon = -106.6
     self.solar_position = solarposition.get_solarposition(self.times,
                                                           self.lat,
                                                           self.lon)
     self.tracker = tracking.SingleAxisTracker()
Exemplo n.º 10
0
def test_SingleAxisTracker_one_array_only():
    system = tracking.SingleAxisTracker(arrays=[
        pvsystem.Array(module='foo', surface_tilt=None, surface_azimuth=None)
    ])
    assert system.arrays[0].module == 'foo'
    with pytest.raises(ValueError,
                       match="SingleAxisTracker does not support "
                       r"multiple arrays\."):
        tracking.SingleAxisTracker(arrays=[
            pvsystem.Array(module='foo'),
            pvsystem.Array(module='bar')
        ])
    with pytest.raises(ValueError, match="Array must not have surface_tilt "):
        tracking.SingleAxisTracker(arrays=[pvsystem.Array(module='foo')])
    with pytest.raises(ValueError, match="Array must not have surface_tilt "):
        tracking.SingleAxisTracker(
            arrays=[pvsystem.Array(surface_azimuth=None)])
    with pytest.raises(ValueError, match="Array must not have surface_tilt "):
        tracking.SingleAxisTracker(arrays=[pvsystem.Array(surface_tilt=None)])
Exemplo n.º 11
0
def test_SingleAxisTracker_localize_location():
    system = tracking.SingleAxisTracker(max_angle=45, gcr=.25,
                                        module='blah', inverter='blarg')
    location = Location(latitude=32, longitude=-111)
    localized_system = system.localize(location=location)

    assert localized_system.module == 'blah'
    assert localized_system.inverter == 'blarg'
    assert localized_system.latitude == 32
    assert localized_system.longitude == -111
Exemplo n.º 12
0
def summer_power_tracking_old_pvlib(summer_clearsky, albuquerque,
                                    array_parameters, system_parameters):
    """Simulated power for a TRACKING PVSystem in Albuquerque"""
    # copy of `summer_power_tracking` but with older pvlib API
    # TODO: remove when minimum pvlib version is >= 0.9.0
    pv_system = tracking.SingleAxisTracker(**array_parameters,
                                           **system_parameters)
    mc = modelchain.ModelChain(pv_system, albuquerque)
    mc.run_model(summer_clearsky)
    return mc.ac
Exemplo n.º 13
0
def test_SingleAxisTracker_creation():
    system = tracking.SingleAxisTracker(max_angle=45,
                                        gcr=.25,
                                        module='blah',
                                        inverter='blarg')

    assert system.max_angle == 45
    assert system.gcr == .25
    assert system.module == 'blah'
    assert system.inverter == 'blarg'
Exemplo n.º 14
0
def test_get_aoi():
    system = tracking.SingleAxisTracker(max_angle=90, axis_tilt=30,
                                        axis_azimuth=180, gcr=2.0/7.0,
                                        backtrack=True)
    surface_tilt = np.array([30, 0])
    surface_azimuth = np.array([90, 270])
    solar_zenith = np.array([70, 10])
    solar_azimuth = np.array([100, 180])
    out = system.get_aoi(surface_tilt, surface_azimuth,
                         solar_zenith, solar_azimuth)
    expected = np.array([40.632115, 10.])
    assert_allclose(out, expected, atol=0.000001)
Exemplo n.º 15
0
def test_get_irradiance():
    system = tracking.SingleAxisTracker(max_angle=90,
                                        axis_tilt=30,
                                        axis_azimuth=180,
                                        gcr=2.0 / 7.0,
                                        backtrack=True)
    times = pd.date_range(start='20160101 1200-0700',
                          end='20160101 1800-0700',
                          freq='6H')
    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)
    solar_zenith = solar_position['apparent_zenith']
    solar_azimuth = solar_position['azimuth']

    # invalid warnings already generated in horizon test above,
    # no need to clutter test output here
    with np.errstate(invalid='ignore'):
        tracker_data = system.singleaxis(solar_zenith, solar_azimuth)

    # some invalid values in irradiance.py. not our problem here
    with np.errstate(invalid='ignore'):
        irradiance = system.get_irradiance(tracker_data['surface_tilt'],
                                           tracker_data['surface_azimuth'],
                                           solar_zenith, solar_azimuth,
                                           irrads['dni'], irrads['ghi'],
                                           irrads['dhi'])

    expected = pd.DataFrame(data=np.array(
        [[961.80070, 815.94490, 145.85580, 135.32820, 10.52757492],
         [nan, nan, nan, nan, nan]]),
                            columns=[
                                'poa_global', 'poa_direct', 'poa_diffuse',
                                'poa_sky_diffuse', 'poa_ground_diffuse'
                            ],
                            index=times)

    assert_frame_equal(irradiance, expected, check_less_precise=2)
Exemplo n.º 16
0
def test_get_irradiance():
    system = tracking.SingleAxisTracker(max_angle=90,
                                        axis_tilt=30,
                                        axis_azimuth=180,
                                        gcr=2.0 / 7.0,
                                        backtrack=True)
    times = pd.DatetimeIndex(start='20160101 1200-0700',
                             end='20160101 1800-0700',
                             freq='6H')
    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)
    solar_zenith = solar_position['apparent_zenith']
    solar_azimuth = solar_position['azimuth']
    tracker_data = system.singleaxis(solar_zenith, solar_azimuth)

    irradiance = system.get_irradiance(
        irrads['dni'],
        irrads['ghi'],
        irrads['dhi'],
        solar_zenith=solar_zenith,
        solar_azimuth=solar_azimuth,
        surface_tilt=tracker_data['surface_tilt'],
        surface_azimuth=tracker_data['surface_azimuth'])

    expected = pd.DataFrame(data=np.array(
        [[142.71652464, 87.50125991, 55.21526473, 44.68768982, 10.52757492],
         [nan, nan, nan, nan, nan]]),
                            columns=[
                                'poa_global', 'poa_direct', 'poa_diffuse',
                                'poa_sky_diffuse', 'poa_ground_diffuse'
                            ],
                            index=times)

    irradiance = np.round(irradiance, 4)
    expected = np.round(expected, 4)
    assert_frame_equal(irradiance, expected)
Exemplo n.º 17
0
def test_SingleAxisTracker___repr__():
    system = tracking.SingleAxisTracker(
        max_angle=45,
        gcr=.25,
        module='blah',
        inverter='blarg',
        temperature_model_parameters={'a': -3.56})
    expected = """SingleAxisTracker:
  axis_tilt: 0
  axis_azimuth: 0
  max_angle: 45
  backtrack: True
  gcr: 0.25
  name: None
  surface_tilt: None
  surface_azimuth: None
  module: blah
  inverter: blarg
  albedo: 0.25
  racking_model: open_rack
  module_type: glass_polymer
  temperature_model_parameters: {'a': -3.56}"""
    assert system.__repr__() == expected
Exemplo n.º 18
0
def test_SingleAxisTracker_tracking():
    system = tracking.SingleAxisTracker(max_angle=90,
                                        axis_tilt=30,
                                        axis_azimuth=180,
                                        gcr=2.0 / 7.0,
                                        backtrack=True)

    apparent_zenith = pd.Series([30])
    apparent_azimuth = pd.Series([135])

    tracker_data = system.singleaxis(apparent_zenith, apparent_azimuth)

    expect = pd.DataFrame(
        {
            'aoi': 7.286245,
            'surface_azimuth': 37.3427,
            'surface_tilt': 35.98741,
            'tracker_theta': -20.88121
        },
        index=[0],
        dtype=np.float64)

    assert_frame_equal(expect, tracker_data)