RuntimeWarning: деление на ноль, встречающееся в журнале при использовании pvlib

Я использую PVLib для моделирования PV системы. Я довольно новичок в программировании и Python, и я впервые использую PVLib, поэтому неудивительно, что я столкнулся с некоторыми трудностями.

В частности, я создал следующий код, используя обширные примеры readthedocs по адресу http://pvlib-python.readthedocs.io/en/latest/index.html

import pandas as pd
import numpy as np
from numpy import isnan
import datetime
import pytz

# pvlib imports
import pvlib
from pvlib.forecast import GFS, NAM, NDFD, HRRR, RAP
from pvlib.pvsystem import PVSystem, retrieve_sam
from pvlib.modelchain import ModelChain

# set location (Royal Greenwich Observatory, London, UK)
latitude, longitude, tz = 51.4769, 0.0005, 'Europe/London'

# specify time range.
start = pd.Timestamp(datetime.date.today(), tz=tz)
end = start + pd.Timedelta(days=5)
periods = 8 # number of periods that the GFS model and/or the model chain allows us to forecast power output.

# specify what irradiance variables we want
irrad_vars = ['ghi', 'dni', 'dhi']

# Use Global Forecast System model. The GFS is the US model that provides forecasts for the entire globe.
fx_model = GFS() # note: gives output in 3-hourly intervals

# retrieve data in processed format (convert temps from Kelvin to Celsius, combine elements of wind speed, complete irradiance data)
# Returns pandas.DataFrame object
fx_data = fx_model.get_processed_data(latitude, longitude, start, end)

# load module and inverter specifications
sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod')
cec_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')

module = sandia_modules['SolarWorld_Sunmodule_250_Poly__2013_'] 
inverter = cec_inverters['ABB__PVI_3_0_OUTD_S_US_Z_M_A__240_V__240V__CEC_2014_'] 

# model a fixed system in the UK. 10 strings of 250W panels, with 40 panels per string. Gives a nominal 100kW array
system = PVSystem(module_parameters=module, inverter_parameters=inverter, modules_per_string=40, strings_per_inverter=10)

# use a ModelChain object to calculate modelling intermediates
mc = ModelChain(system, fx_model.location, orientation_strategy='south_at_latitude_tilt')

# extract relevant data for model chain
mc.run_model(fx_data.index, weather=fx_data)

# OTHER CODE AFTER THIS TO DO SOMETHING WITH THE DATA

Использовав в консоли много операторов print() для отладки, я вижу это в последней строке

mc.run_model(fx_data.index....

Я получаю следующую ошибку:

/opt/pyenv/versions/3.6.0/lib/python3.6/site-packages/pvlib/pvsystem.py:1317: 
RuntimeWarning: divide by zero encountered in log
  module['Voco'] + module['Cells_in_Series']*delta*np.log(Ee) +
/opt/pyenv/versions/3.6.0/lib/python3.6/site-packages/pvlib/pvsystem.py:1323: 
RuntimeWarning: divide by zero encountered in log
  module['C3']*module['Cells_in_Series']*((delta*np.log(Ee)) ** 2) +

В результате, когда я продолжаю смотреть на выходные данные ac_power, я получаю то, что выглядит как ошибочные данные (каждый час с прогнозом, который не NaN = 3000 Вт).

Я бы очень признателен за любую помощь, которую вы можете оказать, поскольку я не знаю, что является причиной этого. Может я неправильно указываю систему?

Спасибо Мэтт

1 ответ

Решение

Я думаю, что предупреждения, которые вы видите, можно игнорировать. Горстка алгоритмов pvlib выдает предупреждения из-за таких вещей, как 0 значений ночью.

Я думаю, что ваша проблема со значениями, отличными от NaN, не связана с предупреждениями. Изучите другие результаты моделирования (хранящиеся в виде атрибутов mc - см. Документацию и исходный код), чтобы узнать, сможете ли вы отследить источник вашей проблемы.

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