Фон
Традиционно я использовал инструмент SAM NREL для оценки солнечного излучения. Я экспериментировал с PVLIB, который великолепен благодаря открытой природе и гибкости, однако я не могу согласовать оценки солнечного производства между PVLIB и NREL SAM.
Что я сделал
Я моделирую гипотетическую солнечную ферму около Гимпа ie QLD. Я зашел на веб-сайт Climate.onebuiling и загрузил zip-папку / epw для " AUS_QLD_Gymp ie .AP.945660_TMYx.2003-2017 ". Затем я использовал этот файл погоды в инструменте SAM NREL с использованием PVwatts со следующими характеристиками:
- 200 000 КВт c
- Тип модуля = Стандартный
- От 1,2 D C до A C Отношение
- 96% КПД инвертора
- Отклонение по 1 оси
- Наклон = 26 градусов
- Азимут = 0 градусов
- GCR = 0,4
- потери, затенение и сокращение = по умолчанию
В NREL SAM я получаю годовой выход энергии (A C ГВтч) в 415,96 ГВтч pa
Затем я взял этот же файл epw и преобразовал его в csv, сохранив только столбцы для ghi, dni, dhi, temp_air & wind_speed ( Ссылка Google Диска на файл CSV ). Я использовал этот файл для импорта в PVLIB. Я использую c систему PVLIB, описанную выше, с добавлением альбедо = 0,2 и максимального угла = 90 градусов (код ниже).
Результат, который я получаю в PVLIB, составляет 395,61 ГВтч.
Задача
Полученные результаты довольно разные. PVLIB = ~ 395 ГВтч в год против SAM = ~ 415 ГВтч в год. Я ожидал, что разница составит около 1-2%, но не 5%.
Цифры еще хуже, когда я сравниваю систему PVLIB с использованием clearsky.ineichen ( корректируется с помощью linke_turbidity), что дает ~ 475 ГВтч в год
Требуется помощь
Кто-нибудь знает, почему мои результаты так отличаются? Что я могу сделать, чтобы сократить разрыв?
Код PVLIB
# **********************************************************
# IMPORT LIBRARIES
# **********************************************************
import pandas as pd
from pvlib.pvsystem import PVSystem
from pvlib import clearsky, atmosphere, solarposition, irradiance
from pvlib.location import Location
from pvlib.tracking import SingleAxisTracker
from pvlib.modelchain import ModelChain
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS
# **********************************************************
# LOCATION & SOLAR SIZE INPUTS
# **********************************************************
# Lat and Long desired
lat = -26.18
lon = 152.63
# Set Location
tz, altitude, name = 'Australia/Queensland', 10, 'Gympie/QLD'
# Set location details for model
latitude, longitude, = lat, lon
location = Location(latitude, longitude, tz, altitude, name)
# load some module and inverter specifications
module_parameters = {'pdc0': 200000000, 'gamma_pdc': -0.004}
inverter_parameters = {'pdc': 166666666, 'pdc0': 166666666, 'eta_inv_nom': 0.96}
temperature_model_parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']
# **********************************************************
# ONEBUILDING DATA
# **********************************************************
df = pd.read_csv('weather import.csv')
df['time'] = df['time'].astype('datetime64[ns]')
df.set_index(['time'], inplace=True)
df.index = df.index.tz_localize(tz=tz)
df = df.asfreq(freq='1h')
onebuilding = df
# **********************************************************
# INEICHEN CLEAR SKIES ADJUSTED FOR TURBIDITY
# **********************************************************
# Create PVLib inputs
times = df.index
solpos = solarposition.get_solarposition(times, latitude, longitude)
apparent_zenith = solpos['zenith']
rel_airmass = atmosphere.get_relative_airmass(apparent_zenith)
pressure = atmosphere.alt2pres(altitude)
abs_airmass = atmosphere.get_absolute_airmass(rel_airmass, pressure)
linke_turbidity = clearsky.lookup_linke_turbidity(times, latitude, longitude)
dni_extra = irradiance.get_extra_radiation(times)
ineichen = clearsky.ineichen(apparent_zenith, abs_airmass, linke_turbidity, altitude, dni_extra)
ineichen.to_csv('ineichen.csv')
# **********************************************************
# SELECT WHICH WEATHER DATA TO USE (ineichen v onebuilding)
# **********************************************************
# Select which version we wish to use (onebuilding, ineichen)
selected_irrad = onebuilding
print(selected_irrad)
# Create Weather File
weather = pd.DataFrame(data={'ghi': selected_irrad.ghi, 'dni': selected_irrad.dni,
'dhi': selected_irrad.dhi, 'temp_air': df['temp_air'],
'wind_speed': df['wind_speed']})
# **********************************************************
# CREATE PV SYSTEM AND PV MODEL CHAIN
# **********************************************************
# Define the specs for the PV System (fixed system)
f_system = PVSystem(
surface_tilt=abs(lat),
surface_azimuth=0,
albedo=0.2,
module='pvwatts_dc',
inverter='pvwatts_ac',
module_parameters=module_parameters,
inverter_parameters=inverter_parameters,
racking_model='open_rack_glass_glass',
name='fixed',
temperature_model_parameters=temperature_model_parameters
)
# Define the specs for the PV System (1 axis tracking system)
t_system = SingleAxisTracker(
axis_tilt=0,
axis_azimuth=0,
max_angle=90,
backtrack=True,
module='pvwatts_dc',
inverter='pvwatts_ac',
module_parameters=module_parameters,
inverter_parameters=inverter_parameters,
name='tracking',
gcr=.40,
)
# build model chain
mc = ModelChain(
system=t_system,
location=location,
name='pvwatts',
dc_model='pvwatts',
ac_model='pvwatts',
losses_model='pvwatts',
aoi_model='physical',
spectral_model='no_loss',
temperature_model='sapm')
# run model chain
mc.run_model(weather=weather)
print(mc.ac.sum())