背景
传统上,我使用NREL SAM工具来估计太阳的输出。我一直在试验PVLIB,这是很好的,因为开放的性质和灵活性,但我似乎不能调和PVLIB和NREL SAM之间的太阳产量估计。
我做了什么,
我在金皮QLD附近模拟一个假想的太阳能农场。我访问了climate.onebuiling网站,下载了"AUS_QLD_Gympie.AP.945660_TMYx.2003-2017“的zip文件夹/ epw文件。然后,我在NREL的SAM工具中使用了这个天气文件,并使用了以下规范: PVwatts;
在NREL中,年能源产量(AC GWh)为415.96 GWh /a。
然后,我将相同的epw文件转换为csv,只为ghi、dni、dhi、temp_air & wind_speed (Google链接到CSV文件)保留列。我已将此文件用作PVLIB的导入。我规范了一个PVLIB系统,上面有相同的规格,加上反照率= 0.2和最大角度= 90度(代码如下)。
我在PVLIB中得到的结果是395.61 GWh。
问题
我得到的结果很不一样。PVLIB = ~395 GWh p.a.相对于SAM = ~415 GWH p.我预计差别在1-2%左右,但不是5%。
与使用clearsky.ineichen (用linke_turbidity调整)的PVLIB系统相比,数字更糟糕,该系统产生~475 GWh p.a。
帮助请求
有人知道为什么我的结果会如此不同吗?我能做些什么来缩小差距吗?
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())发布于 2020-02-14 23:36:46
如果不对中间结果进行详细的比较,很难确切地说明为什么年度能量是不同的。一个因素似乎是换位模型(GHI、DHI和DNI到平面数组):pvlib ModelChain默认为Hay/Davies模型,我相信相同的默认使用Perez 1990模型。这两个模型每年的阵列面辐照度将相差几个百分点,这取决于扩散和直接辐照度的相对水平;参见Lave等人图6。
您可以通过向transposition_model = 'perez',实例添加mc来选择pvlib中的Perez 1990模型。我希望这将缩小pvlib和SAM结果之间的差异,并对您的发现感兴趣。
使用TMY天气文件进行的计算不会给出与使用晴空模式的辐照度计算结果相同的结果,因为TMY是根据历史天气记录组装的,因此包括多云周期。
https://stackoverflow.com/questions/60218037
复制相似问题