- 积分
- 2990
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-8-4
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 AnneChen 于 2016-11-9 20:43 编辑
全新手。
这段时间为了计算整层水汽通量,一会儿摸索Grads,一会儿用matlab。
Grads自带的vint用来做整层水汽通量积分是最好,但是后续我需要做距平,grads就有些不好用了。
由于技术有限,我尝试将Grads计算出来的水汽通量dat文件导入matlab中,可是维数不对,也不知道dat的数据是如何存储的。
因此,我又想用matlab写出类似vint的积分方程,从而利用它来计算水汽通量积分。
以下是我写的代码,不知道对不对,还请指教。
数据来自NCEP再分析数据
单位分别为:
q g/kg
u m/s
v m/s
p millibar
q=ncread('shum.mon.mean.nc','shum');
u=ncread('uwnd.mon.mean.nc','uwnd');
v=ncread('vwnd.mon.mean.nc','vwnd');
%计算各层qu,qv
q1=q(:,:,1:8,1:819);
u1=u(:,:,1:8,1:819);
v1=v(:,:,1:8,1:819);
for i=1:8
for j=1:819
if q1(:,:,i,j)>=0 & -70<u1(:,:,i,j)<125 & -70<v1(:,:,i,j)<70
qu(:,:,i,j)=q1(:,:,i,j).*u1(:,:,i,j);
qv(:,:,i,j)=q1(:,:,i,j).*v1(:,:,i,j);
else
qu=NaN;
qv=NaN;
end
end
end
%各网格点建立气压层数据,并用地表气压订正。
lev=ncread('shum.mon.mean.nc','level');
ps=ncread('pres.sfc.mon.mean.nc','pres');
lps=size(ps);
for k=1:lps(1)
for kk=1:lps(2)
for kkk=1:lps(3)
pss=ps(k,kk,kkk);
if pss>=0
lll=[pss;lev];
dl=lll(1:end-1)-lll(2:end);
dp(k,kk,:,kkk)=dl; %#ok<SAGROW>
else
lll=[1000;lev];
dl=lll(1:end-1)-lll(2:end);
dp(k,kk,:,kkk)=dl; %#ok<SAGROW>
end
end
end
end
dp(dp<0)=0; % 水汽积分是离散求和计算而得。因此这一步在于计算每一层层高。层高是下层减上层之间的差值。
% 由于高海拔地区如青藏高原地表气压可能小于地面气压数据,因此在用地表气压订正的时候,该地区可能出现负值层高。
% 这行代码用来置零。
%对整层水汽积分
tqup_vint=(100/9.8*sum(qu.*dp,3)/1000); %不知道为何vint里需要乘以100作为scale factor,而且vint函数对其他因子的单位标准是什么?还请指导。
%乘以100的目的应该是将milibar 转换为100hpa。(感谢网友热心回答)
tqvp_vint=(100/9.8*sum(qv.*dp,3)/1000); % unit: kg/(ms)
tqup=squeeze(tqup_vint);
tqvp=squeeze(tqvp_vint);
|
评分
-
查看全部评分
|