爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6450|回复: 2

[其他] 计算边界层高度时内存不足 该如何简化

[复制链接]

新浪微博达人勋

发表于 2017-5-19 11:33:38 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
用整体理查森数来算一个月的边界层高度 提示“fatal:NclMalloc Failed:[errno=12]
请问该如何简化脚本呢

附上
filepath1 = systemfunc("ls /disk01/exchange/ERA_Interim/201601/ei.oper.an.pl.regn128sc.201601*00")
filepath1 = filepath1+".grb"
f1 = addfiles(filepath1,"r")
ListSetType(f1,"join")
h=f1[:]->Z_GDS4_ISBL
pblho=h(0,0,:,:)
pblh=h(0,0,:,:)
pblh=0
t=f1[:]->T_GDS4_ISBL
q=f1[:]->Q_GDS4_ISBL
p=f1[:]->lv_ISBL0
lon=f1[0]->g4_lon_2
lat=f1[0]->g4_lat_1

filepath2 = systemfunc("ls /disk01/exchange/ERA_Interim/201601/ei.oper.an.pl.regn128uv.201601*00")
filepath2 = filepath2+".grb"
f2 = addfiles(filepath2,"r")
ListSetType(f2,"join")
u=f2[:]->U_GDS4_ISBL
v=f2[:]->V_GDS4_ISBL
U=u^2+v^2
p0=new((/31,37,256,512/),"double")
do k=0,30
do j=0,255
do i=0,511
p0(k,:,j,i)=p(0,:)
end do
end do
end do
tv=(t*(1000/p0)^0.286)*(1+0.61*q)

Ri=new((/31,36,256,512/),"double")
do k=0,30
do n=0,35,1
Ri(k,n,:,:)=(tv(k,n,:,:)-tv(k,36,:,:))*h(k,n,:,:)/U(k,n,:,:)/tv(k,36,:,:)
end do
end do

do k=0,30
do j=0,255
do i=0,511
flag=0
n=34
do while((flag.eq.0).and.(n.gt.0))
if((Ri(k,n+1,j,i).lt.0.5).and.(Ri(k,n,j,i).gt.0.5)) then
flag=n
end if
n=n-1
end do
temp=(h(k,flag+1,j,i)+(h(k,flag,j,i)-h(k,flag+1,j,i))*(0.5-Ri(k,flag+1,j,i))/(Ri(k,flag,j,i)-Ri(k,flag+1,j,i)))/9.8
pblho(j,i)=doubletofloat(temp)
if(flag.eq.0) then
pblho(j,i)=h(k,36,j,i)/9.8
end if
end do
end do
pblh=pblh+pblho
end do
pblh=pblh/31


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-9-2 14:33:36 | 显示全部楼层
学习了,谢谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-10-10 20:53:01 | 显示全部楼层
理查森数的计算是不是少了重力加速度?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表