爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: wlzhongouc

[源程序] NCEP风场求散度和涡度

  [复制链接]

新浪微博达人勋

 楼主| 发表于 2012-5-8 10:17:57 | 显示全部楼层

该问题后来解决了  呵呵  您说得很对  采用pcolor命令时,由于数据精度的问题,极地投影的时候总会缺一小块,解决办法是meshgrid中的最后一列经度补上0度,对应的风场数据也是相应的补上0度数据,这样形成“环状”就不会出现小块了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-8 11:00:40 | 显示全部楼层
wlzhongouc 发表于 2012-5-8 10:17
该问题后来解决了  呵呵  您说得很对  采用pcolor命令时,由于数据精度的问题,极地投影的时候总会缺一小 ...

很不错!你的程序我没看,但你的量级肯定不对,一般是1e-8 - 1e-5附近吧,具体记不清啦!
估计你是直接用lon lat做的,实际上应该用距离,curl等函数一样!
如下:
%%-------calculate global wind curl using tau data;
%------- 0.2 lat*1/3 lon----------
[m,n]=size(ua);
R0=6371004;
pi=3.1415926;
  %---calculate deltx delty dx dy,and x y--units m actual location
  deltx(1:m)=2*pi*R0*cosd(lat)/360*mean(diff(lon));  % x lon
  delty(1:n)=2*pi*R0/360*mean(diff(lat));            % y lat
  clear pi R0
  for i=1:m
      dx(i)=sum(deltx(1:i),2);
  end
  clear i m deltx
  for i=1:n
      dy(i)=sum(delty(1:i),2);
  end
  clear i n delty
  
  %y=repmat(deltx',[1,n]);
  %x=repmat(delty,[m,1]);
  [x,y]=meshgrid(dy,dx);
  [w,cav]=curl(x,y,ua,va);
  [sn,cav]=curl(x,y,va,ua);
  ss = divergence(x,y,va,ua);
  W(:,:) = (sn).^2 + (ss).^2 - w.^2 ;
  clear sn ss w cav dx dy x y

评分

参与人数 2金钱 +40 贡献 +7 收起 理由
mofangbao + 20 + 5
wlzhongouc + 20 + 2 哈哈 太好了 终于有人给指出错误了

查看全部评分

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

新浪微博达人勋

发表于 2012-5-8 11:06:32 | 显示全部楼层
wlzhongouc 发表于 2012-5-8 10:17
该问题后来解决了  呵呵  您说得很对  采用pcolor命令时,由于数据精度的问题,极地投影的时候总会缺一小 ...

关于你说的缺一块,你这种方法不是很可取,还是从插值的方法去做吧!有问题可以交流
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-8 11:06:56 | 显示全部楼层
不错 学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-8 14:27:37 | 显示全部楼层
无径之林 发表于 2012-5-8 11:06
关于你说的缺一块,你这种方法不是很可取,还是从插值的方法去做吧!有问题可以交流

问一下哈  你那ua数组是什么? 是应该用实际的距离来进行计算啊 我却用了经纬度网格而已  还有你程序的大“W”是计算的什么变量
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-8 14:31:34 | 显示全部楼层
无径之林 发表于 2012-5-8 11:06
关于你说的缺一块,你这种方法不是很可取,还是从插值的方法去做吧!有问题可以交流

另外关于小块的问题,由于pcolor不会在数组第一列和最后一列之间进行插值,所以我想的解决办法就是在最后一列补上0度的数据这样pcolor插值后就解决了小块的问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-8 19:47:42 | 显示全部楼层
无径之林 发表于 2012-5-8 11:06
关于你说的缺一块,你这种方法不是很可取,还是从插值的方法去做吧!有问题可以交流

我重新进行了处理,量级在10e-7到10e-5左右,但是计算的实际距离网格跟你程序的不太一样,我是这样的:
R0=6371004;
pi=3.1415926;
%---calculate deltx delty dx dy,and x y--units m actual location
deltx(1:m)=2*pi*R0*cosd(lati)/360*mean(diff(lon));          % x lon (the actual distance of the resolution of data in longitude)
for jj=1:n
     delty(jj)=2*pi*R0/360*abs(mean(diff(lati)));            % y lat (the actual distance of the resolution of data in latitude)
end
for kk=1:m
     rx(kk,:)=(deltx(kk):deltx(kk):n*deltx(kk));
end
for ll=1:n
     ry(:,ll)=(delty(ll):delty(ll):m*delty(ll));
end
long=lon;
long(length(long)+1)=0;
[xx,yy]=meshgrid(long,lati);
div=divergence(rx,ry,uu,vv);            
div(:,size(div,2)+1)=div(:,1);
m_pcolor(xx,yy,div);
以上同时解决了缺小块的问题,很高兴与你交流啊,若还有问题欢迎指出啊,不胜感激!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-8 19:48:40 | 显示全部楼层
太倒霉了吧,尽碰到小穷神卡。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-8 21:11:23 | 显示全部楼层
图很好看~感谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-9 10:34:31 | 显示全部楼层
wlzhongouc 发表于 2012-5-8 19:47
我重新进行了处理,量级在10e-7到10e-5左右,但是计算的实际距离网格跟你程序的不太一样,我是这样的:
...

咱们算出的距离有差异,有时间我再研究研究!网上提供了curl的结果,你可以比对下。我之前比对过,没问题,你的也比较试试!
还有我之前用mean(diff())主要是想省事,如果分辨率一致,问题不大,但其他坐标可能有差异(e.g. Mercator坐标)
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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