CESM实验记录-修改太阳辐射

1 实验要求

在指定时间和区域进行改变太阳入射短波辐射的耦合实验。太阳短波辐射在CAM模式中的变量名为SOLIN

float SOLIN(time, lat, lon) ;
        SOLIN:Sampling_Sequence = "rad_lwsw" ;
        SOLIN:units = "W/m2" ;
        SOLIN:long_name = "Solar insolation" ;
        SOLIN:cell_methods = "time: mean" ;

2 代码修改

要完成如上实验,只需找到CAM代码中SOLIN的计算代码并进行修改即可。
SOLIN的相关代码位于cam/src/physics/rrtmg/radsw.F90:

real(r8), intent(out) :: solin(pcols)     ! Incident solar flux
solin(1:ncol)    = 0.0_r8
call CmpDayNite(E_coszrs, coszrs,    Nday, IdxDay, Nnite, IdxNite, 1, pcols)
! Define solar incident radiation
do i = 1, Nday
   solin(i)  = sum(sfac(:)*solar_band_irrad(:)) * eccf * coszrs(i)
end do

为了确定与代码中solin在当前进程下相对应的时空范围,需要使用cam/src/physics/cam/phys_grid.F90get_rlat_all_pget_rlon_all_p以及cam/src/utils/time_manager.F90get_curr_date,具体语法为:
call get_rlat_all_p(lchnk, ncol, clat),其中输入变量lchnk,ncol分别为当前大气物理模块的chunk idcolumn number,在计算SOLIN的函数rad_rrtmg_sw是输入,直接使用即可,输出纬度clat,经度同理;
call get_curr_date(yr, mon, day, tod, offset),前四个输出变量分别为年月日秒,offset为与当前时刻之差,这里取0

还需要注意的是,clon, clat的排列顺序与solin计算中所用的太阳入射角余弦值coszrs不同,coszrs经过CmpDayNite函数被调整为前Nday个值均为当前有日照的位置。因此,我们也需要将clon, clat通过CmpDayNite得到相同排列:

call CmpDayNite(clat, clat_day, Nday, IdxDay, Nnite, IdxNite, 1, pcols)
call CmpDayNite(clon, clon_day, Nday, IdxDay, Nnite, IdxNite, 1, pcols)

这样就可以根据clon_day, clat_day, yr, mon, day, tod进行条件判断确定solin如何被修改(注意经纬度均为弧度),例如:

! Define solar incident radiation
do i = 1, Nday
   solin(i)  = sum(sfac(:)*solar_band_irrad(:)) * eccf * coszrs(i)
   if (clat_day(i)/3.1415926*180>30) then
     solin(i) = solin(i) + 1000
   endif
end do

完整代码位于github

参考:http://people.envsci.rutgers.edu/jlc449/NuclearNino/experiment.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值