You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用solaR计算斜面太阳辐照结果与实测值偏差过大问题咨询

问题原因排查
  • 单位匹配错误:ERA5陆面模式的逐小时ssrd(地表下行短波辐射)是小时累计值,单位为J/㎡,你直接当成W/㎡传入了solaR包,两者差3600倍,这是偏差极大的核心原因。1W/㎡ = 3600J/㎡/小时,需要先做单位换算。
  • 时区未对齐:ERA5数据默认使用UTC时间,而丹麦站点的实测数据使用中欧时间(UTC+1,冬季无夏令时),你在生成时间序列时未统一时区,导致辐照时间错配1小时,高纬度冬季昼短,1小时的偏移会直接导致峰值完全对不上。
  • 散射拆分与斜面转换模型不适配高纬度场景:solaR默认使用Erbs模型拆分总辐照为直射/散射、使用Hay模型计算斜面辐照,这两个模型在高纬度(57°N属于高纬度)冬季低太阳高度角场景下误差较大。
  • 反照率设置不符合冬季丹麦地表特征:calcGef默认地表反照率为0.2,丹麦1月多积雪,实际反照率可达0.5~0.8,斜面接收的地面反射辐射占比会高于默认值,进一步带来偏差。
修复代码示例
library(dplyr)
library(solaR)
library(lubridate)

# 1. 修正ERA5 ssrd单位:J/㎡转W/㎡
ssdr_correct <- ssdr / 3600

# 2. 时区统一:ERA5为UTC,站点数据转UTC对齐
sh_dat <- sh_raw %>% 
  transmute(
    # 站点原始时间为丹麦当地时间,先按当地时间解析再转UTC和ERA5对齐
    date = with_tz(dmy_hm(str_sub(date, 0, -7), tz = "Europe/Copenhagen"), tz = "UTC"),
    G0 = ssdr_correct,
    Ta = t2m - 273.15
  )

# 3. 生成Meteo对象
bdi_df = dfI2Meteo(sh_dat, lat = 57.4, time.col = 'date')

# 4. 计算斜面辐照,更换模型、调整反照率
# model参数指定斜面转换模型,选高纬度表现更好的perez模型
# albedo参数调整为冬季积雪场景的0.6
# fDif参数指定散射拆分模型,用Reindl替换默认Erbs
gef <- calcGef(
  lat = 57.4, 
  modeRad = 'bdI', 
  dataRad = bdi_df, 
  beta = 35,
  model = "perez",
  albedo = 0.6,
  fDif = fDifReindl
)
模型更换说明

calcGef函数内置了多种辐照计算模型,可直接通过参数调整:

  • 斜面辐照转换模型:修改model参数,可选值包括hay(默认)、perez、reindl、klucher等,高纬度地区优先选perez模型。
  • 总辐照散射拆分模型:修改fDif参数,可选值包括fDifErbs(默认)、fDifReindl、fDifPerez等。
  • 优化建议:如果你的ERA5数据同时下载了直接辐射、散射辐射产品,可以直接传入这两个字段,跳过拆分步骤,误差会比从总辐照拆分小很多。

内容的提问来源于stack exchange,提问作者Blaiso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:24:05