我正在使用pvlib来计算表面的漫反射和直接入射太阳辐射,效果很好。在计算入射到地面的短波总辐射时,我考虑了云、反照率、海冰等因素。
....
transmittance = (1.0 - cloud_covers) * 0.75
# irrads is a DataFrame containing ghi, dni, dhi
irrads = pvlib.irradiance.liujordan(solpos['apparent_zenith'].to_numpy(), transmittance, am_abs_array)
total_irrad = pvlib.irradiance.get_total_irradiance(surface_tilt,
surface_azimuth,
apparent_zenith,
azimuth,
irrads['dni'],
irrads['ghi'],
irrads['dhi'],
albedo=albedo)
sw_dr = total_irrad['poa_direct']
sw_df = total_irrad['poa_diffuse']现在,使用直接(sw_dr)和漫反射(sw_df)短波辐射,我想通过以下方法计算UV指数: 1)通过乘以太阳光谱来计算入射太阳辐射的光谱分布2)仅考虑280-400 nm波长(sw_dr_λ_280-400)中的辐射贡献。
在标准太阳光谱ASTM E-490 AM0 (Shanmugam and Ahn, 2007)下,每个波长间隔dλ对直接和漫反射短波辐射的贡献是由其太阳能量加权的,该标准太阳光谱可以在200-4000 nm波长的ASTM中以表格的形式获得。我的理解是,这给了我直接和漫反射短波辐射作为波长的函数在10纳米的间隔。为了计算紫外线指数,我使用了方程式here
uvi = np.sum(sw_dr_λ_280_400*erythema_spectrum_λ) * 40.0其中erythema_spectrum是红斑效应的每个波长带(10 nm)的权重。
当我使用这种方法计算UVI值时,值太高了,我想知道我的方法是否有缺陷,或者我在这里做错了什么。还有没有人用pvlib计算过UVI?
我很感谢你的帮助。干杯,Trond
更新:我修复了上面的函数,使其更加正确。当我计算1月15日北纬30度(0-360E)以北的UVI时,我得到的平均UVI为14,但最大值为264。它看起来是这样的:

更新2:基于@Cliff H下面的评论,我将我的值除以25。新值在UVI的范围内,因此这似乎是正确的。请参见2015年6月UVI的绘图。

发布于 2020-12-03 00:26:01
我没有意识到概念上的错误。当你积分光谱直接辐照度时,你得到了什么?我希望能恢复sw_dr宽带的价值。一些需要检查的东西。计算uvi的代码行看起来很奇怪。来自total_irrad的sw_dr是一个系列,sw_dr(λ280:400)表明sw_dr是一个函数。
https://stackoverflow.com/questions/65111670
复制相似问题