背景
传统上,我使用 NREL SAM 工具来估计太阳能输出。我一直在试验 PVLIB,由于其开放性和灵活性,它非常棒,但是我似乎无法协调 PVLIB 和 NREL SAM 之间的太阳能产量估计。
我做了什么
我正在为 Gympie QLD 附近的一个假设太阳能农场建模。我已经访问了climate.onebuiling网站,并下载了“ AUS_QLD_Gympie.AP.945660_TMYx.2003-2017 ”的 zip 文件夹/epw 文件。然后,我使用 PVwatts 在 NREL 的 SAM 工具中使用了该天气文件,并具有以下规格;
- 200,000千瓦直流
- 模块类型 = 标准
- 1.2 直流交流比
- 96% 逆变器效率
- 1轴回溯
- 倾斜 = 26 度
- 方位角 = 0 度
- GCR = 0.4
- 损失、阴影和缩减 = 默认
在 NREL SAM 中,我每年的能源产量 (AC GWh) 为 415.96 GWh
然后我拿了同一个 epw 文件并将其转换为 csv,只保留 ghi、dni、dhi、temp_air 和 wind_speed 的列(Google Drive 链接到 CSV 文件)。我已将此文件用作 PVLIB 的导入。我指定了一个与上述相同规格的 PVLIB 系统,并添加了反照率 = 0.2 和最大角度 = 90 度(代码如下)。
我在 PVLIB 中得到的结果是 395.61 GWh。
问题
我得到的结果完全不同。PVLIB = ~395 GWh pa vs SAM = ~415 GWH pa 我预计会有 1-2% 的差异,但不是 5%。
当我与使用 clearsky.ineichen(使用 linke_turbidity 调整)的 PVLIB 系统进行比较时,数据甚至更差,产生约 475 GWh pa
请求帮助
有人知道为什么我的结果如此不同吗?我能做些什么来缩小差距吗?
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())