Как получить чистое небо с горизонтом в PVLib?

Есть ли способ учесть горизонт в PVLib?

У меня есть фотоэлектрические системы в горах, поэтому высокие соседние горы влияют на горизонт. Я смоделировал освещенность ясного неба с помощью PVLib, PVGis с горизонтом и без него (см. следующий рисунок). Мы видим, что разница существенная.

  • Можно ли учитывать горизонт Location при вызове функции Location.get_clearsky()?
  • Если нет, есть ли другой способ учесть влияние горизонта с помощью PVLib?
  • Если нет, то можно запустить ModelChain (который использует модели pvwatts AC и DC) только с помощью Clearsky GHI+Horizon, поступающего из PVGIS, даже если DNI и DHI не предусмотрены?


PS: Это мой код для получения освещенности ясного неба и мощности переменного тока фотоэлектрической системы:

# Location
locationValley = Location(latitude=46.179, longitude=7.602, altitude=1431, tz='Europe/Zurich', name='Valley')

# Weather
datetime = pd.date_range(start='2022-01-01', end='2022-01-02', freq='5min', tz=locationValley.tz, inclusive='left')
csPowerValley = locationValley.get_clearsky(datetime)  # ineichen with climatology table by default

# ModelChain
array1 = Array(
        mount=FixedMount(surface_tilt=30, surface_azimuth=241, racking_model = 'open_rack'),
        module_parameters = {'pdc0': 55, 'gamma_pdc' : -0.004},
        module_type = 'glass_polymer',
        modules_per_string = 445, # 445 modules for 1 string or 89 modules for 5 strings is the same
        strings = 1,
        temperature_model_parameters=pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_polymer'],
    )
system = PVSystem(arrays=[array1], inverter_parameters = {'pdc0': 24475, 'eta_inv_nom': 0.96})
modelChain = ModelChain(system, locationValley, clearsky_model = 'ineichen', aoi_model='no_loss', spectral_model = "no_loss")

modelChain.run_model(csPowerValley)

Пожалуйста, отредактируйте свой вопрос, чтобы решить одну проблему. Как написано, у вас есть несколько вопросов.

itprorh66 10.05.2024 01:21

Вы смотрели этот пример сценария из документации pvlib? pvlib-python.readthedocs.io/en/stable/gallery/shading/…

kevinsa5 10.05.2024 04:31

Спасибо @kevinsa5! Я попробую это решение, и если оно сработает в моем случае, я опубликую ответ на свой вопрос.

Maxime Charrière 10.05.2024 16:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы учесть горизонт при расчете освещенности ясного неба с помощью PVLib, вы можете воспользоваться подходом, продемонстрированным в примере документации PVLib. Этот метод предполагает использование данных профиля горизонта для корректировки глобального излучения прямой нормальной освещенности (DNI) и плоскости решетки (POA) на основе углов возвышения горизонта.

Вот краткая реализация:

  1. Импортируйте необходимые библиотеки и определите местоположение/время:
import numpy as np
import pandas as pd
import pvlib

# Define location (Golden, CO) and time range
latitude, longitude = 39.76, -105.22
tz = 'MST'
times = pd.date_range('2020-12-20 6:30', '2020-12-20 9:00', freq='1T', tz=tz)
location = pvlib.location.Location(latitude, longitude, tz)

# Get solar position and clearsky data
solar_position = location.get_solarposition(times)
clearsky = location.get_clearsky(times)
  1. Определите профиль горизонта и интерполируйте:
# Example horizon profile (azimuth: 0° to 360° in 7.5° increments)
horizon_profile = pd.Series([
    10.7, 11.8, 11.5, 10.3, 8.0, 6.5, 3.8, 2.3, 2.3, 2.3, 4.6, 8.0, 10.3, 11.1,
    10.7, 10.3, 9.2, 6.1, 5.3, 2.3, 3.1, 1.9, 1.9, 2.7, 3.8, 5.3, 6.5, 8.4,
    8.8, 8.4, 8.4, 8.4, 6.5, 6.1, 6.5, 6.1, 7.3, 9.2, 8.4, 8.0, 5.7, 5.3, 5.3,
    4.2, 4.2, 4.2, 7.3, 9.5
], index=np.arange(0, 360, 7.5))

# Interpolate horizon elevation data to the solar azimuth
horizon_elevation_data = np.interp(
    solar_position.azimuth, horizon_profile.index, horizon_profile
)
  1. Отрегулируйте DNI и GHI в зависимости от горизонта:
# Adjust DNI based on horizon data
dni_adjusted = np.where(solar_position.apparent_elevation > horizon_elevation_data, clearsky.dni, 0)
ghi_adjusted = np.where(dni_adjusted == 0, clearsky.dhi, clearsky.ghi)

# Calculate irradiance before and after adjustment
surface_tilt, surface_azimuth = 30, 180
irrad_pre_adj = pvlib.irradiance.get_total_irradiance(
    surface_tilt, surface_azimuth, solar_position.apparent_zenith, solar_position.azimuth,
    clearsky.dni, clearsky.ghi, clearsky.dhi
)

irrad_post_adj = pvlib.irradiance.get_total_irradiance(
    surface_tilt, surface_azimuth, solar_position.apparent_zenith, solar_position.azimuth,
    dni_adjusted, ghi_adjusted, clearsky.dhi
)

Следуя этому подходу, вы можете настроить значения освещенности ясного неба с учетом профиля горизонта, предоставляя более точные данные об освещенности для мест со значительным окружающим рельефом.

Другие вопросы по теме