- 积分
- 5306
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-11-30
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 清宵逝水 于 2020-5-1 09:47 编辑
在用论坛的程序(http://bbs.06climate.com/forum.php?mod=viewthread&tid=18894)计算高原地区大气视热源时,遇到与前辈们同样的问题,即量级不对或者差三倍。在论坛进一步搜索发现了@LiuJiawei在改编ncl版(http://bbs.06climate.com/forum.php?mod=viewthread&tid=40487&extra=&page=1)时提出了一些问题,根据他的意见我对原始程序进行修改后,数值仍然不对。在单步调试原始程序后,发现最大的问题在平流项的计算,原始代码为:- ug(i,j,l)=(u(i,j,l)*(t(i+1,j,l)-t(i-1,j,l))/dx +(v(i,j,l)*(t(i,j+1,l)-t(i,j-1,l))))/dy
复制代码 通过编辑器的括号匹配功能可以发现,x,y方向的差分并不是平级的,正确写法应为- (u(i,j,l)*(t(i+1,j,l)-t(i-1,j,l))/dx + (v(i,j,l)*(t(i,j+1,l)-t(i,j-1,l))/dy))
复制代码 或- u(i,j,l)*(t(i+1,j,l)-t(i-1,j,l))/dx + v(i,j,l)*(t(i,j+1,l)-t(i,j-1,l))/dy
复制代码 附件中给出了修改后的代码,并增加了一些注释。
另外补充几点
0.!!!如果采用不同时间分辨率和不同来源的资料,需要仔细修改循环变量,同时一定要调整各个变量的单位!!!
1. 我用的是ncep2逐日资料进行计算,最后结果相对文献(ec资料)的结果略小。也许还有一些小问题,希望使用者如果有空仔细读一遍代码
2.编译器问题,源程序应该是在ivf下编译运行的,文件存取格式用的是binary,gfortran不支持这种格式,我统一改为了unformatted格式,但是需要注意recl参数(即记录长度)的问题,ifort的单位是4字节,只需recl=格点数即可,gfortram的recl单位为字节,需要在格点数的基础上*4(近期了解到stream格式可以解决不同编译器的问题,但是需要对程序结构进行一定的改变,故没有采用)
|
|