python-3.x - 使用总辐照度计算紫外线指数
问题描述
我正在使用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) 短波辐射,我想通过 1) 计算入射太阳辐射的光谱分布乘以太阳能光谱 2) 仅考虑来自波长 280-400 nm (sw_dr_λ_280-400) 的辐照度。
每个波长间隔 dλ 对直接和漫射短波辐射的贡献由其在标准太阳光谱 ASTM E-490 AM0( Shanmugam 和 Ahn,2007 )下的太阳能量加权,该表可在塞费里安等人。2018 年适用于 200-4000 nm 波长。我的理解是,这给了我直接和漫射短波辐射,它是 10 nm 间隔波长的函数。为了计算紫外线指数,我使用了这里的公式:
uvi = np.sum(sw_dr_λ_280_400*erythema_spectrum_λ) * 40.0
其中 erythema_spectrum 是每个波段 (10 nm) 对红斑影响的加权。
当我使用这种方法计算 UVI 值时,这些值太高了,我想知道我的方法是否有缺陷,或者我在这里做错了什么。有没有其他人使用 pvlib 计算过 UVI?
我感谢您的帮助。干杯,特隆德
更新:我修复了上面的功能更正确。当我计算 1 月 15 日 30N (0-360E) 以北的 UVI 时,我得到的平均 UVI 为 14,但最大值为 264。这就是它的样子:
更新 2:根据下面@Cliff H 的评论,我将我的值除以 25。新值在 UVI 的范围内,所以这似乎是正确的。请参阅 2015 年 6 月的 UVI 图表。
解决方案
我不承认概念错误。当你整合光谱直接辐照度时,你会得到什么?我希望恢复 sw_dr 宽带值。有什么要检查的。计算 uvi 的代码行看起来很奇怪。total_irrad 中的 sw_dr 是一个 Series,sw_dr(λ[280:400]) 表示 sw_dr 是一个函数。
推荐阅读
- azure - Cosmos DB - 从索引中排除 _ts、_rid 和 _self 等系统属性是否安全?
- centos7 - 重新启动 apache 时出现此错误:[warn] 模块 php5_module 已加载,正在跳过
- css - 使用标签时如何在 Next.js 中删除移动视图中的空白?
- delphi - Outlook 不返回任何内容的限制方法
- javascript - tradingview 数据馈送数据应该是什么样子?
- python - 如何使用现有列中的数据在熊猫上创建新行?
- javascript - 在“GetElementbyID”中使用数组
- javascript - 试图在节点中发出 axios POST 请求,但来自外部服务器的响应显示我发送了一个空请求数据
- flutter - 哪个更好的静态函数返回小部件或无状态小部件
- xml - Ansible - 'dict object' 没有属性'key'