在physpkg.F90引入理想加热廓线,设定为第32个calday(2月1日)在整个垂直层面上加入0.2K/kg/s的加热率,随同深对流update入环境场,结果运行到第46天某个时候down掉了,log输出为
BalanceCheck: soil balance error nstep = 2176 point = 4646 imbalance = -0.000000 W/m2 QNEG3 from vertical diffusion/SO2:m= 8 lat/lchnk= 682 Min. mixing ratio violated at 1 points. Reset to 1.0E-36 Worst =-5.1E-12 at i,k= 4 30 QNEG3 from convtran2/DMS:m= 9 lat/lchnk= 825 Min. mixing ratio violated at 1 points. Reset to 1.0E-36 Worst =-1.8E-12 at i,k= 9 30 filew failed, worst i, j, qtmp, q = 1 66 -21885.3982648784 5.567182215867588E-009 QNEG3 from TPHYSBCb:m= 4 lat/lchnk= 220 Min. mixing ratio violated at 2 points. Reset to 0.0E+00 Worst =-3.9E+00 at i,k= 12 17 urban net longwave radiation balance error -4.05656153273048 clm model is stopping
城市长波出问题?小怀疑了一下。后面clm先停掉了,莫非与surface交换有问题,想起来这个加热率其实下面几层都是没有的,第一次尝试将下面几10层的加热强迫情况设置为0,结果还是不行,不到45day就down掉了。后来发现居然是有个北纬30°以南的判定条件忘了化成弧度制!!坑爹啊,换弧度后,为了响应较快,将强迫加入时间调整为day3到day30,居然没有断掉。Okay!3day后全年加入!
#Up to 20140802#
接上回。全年加入后断掉了。ncl看前一组3-30day强迫的响应,发现加热源位置强度都没问题,但是T的响应位置有点偏北,很奇怪。U风看到了气旋式响应貌似正常。何老师也对此表示奇怪,但是认为基本问题不大,可能是量级太高造成,大气层顶响应都到了20+℃了,后面太高可能因此崩掉。建议减小量级,并且把400-500hPa左右设置为最大值,关注injection的位置分别在deep convection前后有什么不同。简单起见我先把量级缩小到0.05K/kg/s,从day3到day365加了接近一整年,居然没有出问题,顺利积分完成。打算回学校再按照何老师的说法试试。
#Up to 20140815#
继续接上回。会学校后各种杂事,倒是正巧超算各种不稳定。这两天终于的空,机器可用了。将加热量级最大值缩小到0.05K/kg/s,最大值固定在500ha附近,两侧线性递减到0。分别测试将这个forcing profile加在deep convection前后以及shallow convection后,强迫时间JJA,区域90-120E,0-30N;除了加在deep convection前模式SIGFAULT崩溃外(没有找到原因,可能进入物理包后模式才会进行tendency变量分配?所以加前面会造成数组越 界?),加在shallow后或deep后仅一年月平均的结果就无本质区别,可以确信做ensemble后更相差更小,与我们之前讨论时的预想一致,结果 详见附件。目前在测试加在PBL过程后,预料差别应该也不会大。终于看到期望中的结果啦~
加在deep convection与shallow convection后6月响应的对比如下图
总结一下修改方法。
1.输出,按照addfld add_default outfld 三个步骤来,在cam_diagnostics.F90中依葫芦画瓢,在physpkg.F90中响应的位置outfld。
2.加热强迫的加入在physpkg.F90中做injection,有两个module记得引入,一个是time_manager,应用get_curr_calday返回日序数,控制加热强迫的作用时间。另一个就是outfld对应的cam_history的module。
physics_state里的lon和lat成员控制空间位置,注意弧度制。其所在的physics_types这一module物理包运算时一定会引入,因此不必再做重复工作。
3.pver控制垂直层面,chunk目前还是可以当黑箱的,知道它是若干columns的集合即可,作用时需要遍历chunk中的每个column。
core injction code:
1499 calday = get_curr_calday(); 1500 if (calday > 151 .and. calday < 244) then 1501 do i = 1,ncol 1502 if ((state%lon(i) < (2._r8/3._r8)*3.14159265 ) .and. & 1503 (state%lon(i) >0.5*3.14159265) .and. & 1504 (state%lat(i) > 0._r8) .and. & 1505 (state%lat(i) < 3.14159265/6._r8)) then 1506 ptend%s(i,17) = ptend%s(i,17) + 0.01 1507 ptend%s(i,18) = ptend%s(i,18) + 0.03 1508 ptend%s(i,19) = ptend%s(i,19) + 0.05 1509 ptend%s(i,20) = ptend%s(i,20) + 0.03 1510 ptend%s(i,21) = ptend%s(i,21) + 0.01 1511 end if 1512 end do 1513 end if
#Up to 20140825#
前两天终于把SEN和CON两组试验跑完,终于可以把真正的试验廓线差求出来,正式做HEATING试验了。还没有画图,看了下数值大概分布,基本合理。具体试验设计
incSCS组
0-30N, 105-150E, JJA, CON SST & CO2
outSCS组
0-30N, 120-150E, JJA, CON SST & CO2
承诺下周给何老师结果。囧zn
#Up to 20140903#