Pvlib/Bird1984模型下北向光伏组件出现负辐照度问题咨询
问题解答
负辐照度是否为预期行为?
这不是符合物理规则的预期结果,属于SPECTRL2模型超出使用边界产生的数值计算异常。
SPECTRL2是针对常规朝向光伏组件设计的经验光谱模型,仅在入射角(AOI)小于90°、太阳可照射到组件正面的场景下输出有效结果。你当前的测试场景为北半球高纬度(北纬49.88°)冬季,太阳全天处于南侧天空,而组件设置为正北朝向、45°倾角,大部分时段入射角远大于90°,直射光完全无法落到组件正面,模型在这种非设计输入下拟合出了无意义的负值。
是否需要将负值截断为0?
需要,且建议按优先级做两层处理,避免后续计算出错:
- 先做前置参数过滤:调用
spectrl2前先判断AOI数值,当AOI>90°时直接将直射光谱分量置0,从输入侧避免异常 - 再对输出结果做截断:所有光谱辐照度数值小于0的统一设置为0,完全符合辐照度不可能为负的物理规则
代码修改参考
你可以在原有代码基础上增加以下逻辑:
import numpy as np # 原有AOI计算逻辑后增加过滤 aoi = irradiance.aoi(tilt, azimuth, solpos.apparent_zenith, solpos.azimuth) # 入射角大于90度时,模型直射分量无意义,后续处理直接跳过直射贡献 aoi_invalid = aoi > 90 # 得到spectra结果后增加截断逻辑 spectra = spectrum.spectrl2( apparent_zenith=solpos.apparent_zenith, aoi=aoi, surface_tilt=tilt, ground_albedo=albedo, surface_pressure=pressure, relative_airmass=relative_airmass, precipitable_water=water_vapor_content, ozone=ozone, aerosol_turbidity_500nm=tau500, ) # 所有辐照度分量负值截断为0 for key in ['poa_direct', 'poa_diffuse', 'poa_ground_diffuse', 'poa_global']: spectra[key] = np.clip(spectra[key], a_min=0, a_max=None)
修改后重新绘图即可看到负值完全消失,输出符合物理逻辑的光谱结果。
内容的提问来源于stack exchange,提问作者Christian W
相关产品推荐
相关产品推荐

