爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14228|回复: 4

[讨论] 剩余速度计算问题

[复制链接]

新浪微博达人勋

发表于 2018-1-29 11:14:19 | 显示全部楼层 |阅读模式

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

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

x
  最近在算150-10hPa的剩余速度,但是画出来的图就是不对。所用的资料是NCEP/NCAR2的1980-2015年月平均v、w资料。本人已研究好多天,也检查了程序(程序是一个师兄给的,感谢师兄,自己做了修改),但还是不对,所以想发个帖请教各位大神们,希望能寻求到帮助。。。。本人将不甚感激,谢谢啦,挺急的。。。图及程序附后:
计算公式:

计算公式:

计算公式:
       程序:1、位温
  1. %%计算春季位温(150-10层次的)
  2. clc;
  3. clear;
  4. ncdisp('f:\data\air.mon.mean.nc');
  5. lon=ncread('f:\data\air.mon.mean.nc','lon');
  6. lat=ncread('f:\data\air.mon.mean.nc','lat');
  7. time=ncread('f:\data\air.mon.mean.nc','time');
  8. lev=ncread('f:\data\air.mon.mean.nc','level');
  9. air=ncread('f:\data\air.mon.mean.nc','air');  %温度单位:K
  10. air=air(:,:,11:17,:);                           %提取150-10层(共7层)
  11. air=fliplr(air);                                %设置数据纬度为自南向北
  12. air1=air;  
  13. [nx,ny,nz,nt]=size(air);         
  14. j=1;%air_monave=zeros(nx,ny,nz,24);
  15. for i=15:12:444                           
  16.     air_monave(:,:,:,j)=nanmean(air(:,:,:,i:i+2),4); %提取1980-2015春季数据
  17.     j=j+1;
  18. end
  19. [nx,ny,nz,nt]=size(air_monave);

  20. air1=nanmean(air_monave,4);
  21. air2=nanmean(air1,1);
  22. ave_T=reshape(air2,ny,nz);  %纬向平均温度

  23. te=[];te=air_monave;
  24. t=[];t=reshape(te,144,73,7,36);
  25. p=[150 100 70 50 30 20 10];
  26. m=0.2856;
  27. th=[];
  28. for n=1:36
  29.    for z=1:7
  30.       for j=1:73
  31.           for i=1:144
  32.               th(i,j,z,n)=t(i,j,z,n)*((1000.0/p(z))^m);
  33.           end
  34.       end
  35.    end
  36. end
  37. %th:位温;ave_T:纬向平均温度
  38. save F:\5\quan_bd\th.mat th ave_T;
  39. fid=fopen('F:\5\quan_bd\th.dat','w');
  40. fwrite(fid,th,'float32');     
  41. fclose(fid);

复制代码
2、v
  1. %计算春季剩余环流v*(150-10层次的)
  2. clc;
  3. clear;
  4. p(1)=15000;
  5. p(2)=10000;
  6. p(3)=7000;
  7. p(4)=5000;
  8. p(5)=3000;
  9. p(6)=2000;
  10. p(7)=1000;

  11. ncdisp('f:\data\vwnd.mon.mean.nc');
  12. lon=ncread('f:\data\vwnd.mon.mean.nc','lon');
  13. lat=ncread('f:\data\vwnd.mon.mean.nc','lat');
  14. time=ncread('f:\data\vwnd.mon.mean.nc','time');
  15. lev=ncread('f:\data\vwnd.mon.mean.nc','level');
  16. b=ncread('f:\data\vwnd.mon.mean.nc','vwnd');
  17. b=b(:,:,11:17,:);
  18. b=fliplr(b);                                %设置数据纬度为自南向北
  19. b_jian=b;  
  20. [nx,ny,nz,nt]=size(b);
  21. j=1;b_xuan=zeros(nx,ny,nz,36);
  22. for i=15:12:444                              
  23.     b_xuan(:,:,:,j)=nanmean(b(:,:,:,i:i+2),4); %提取1980-2015春季数据
  24.     j=j+1;
  25. end
  26. %k=size(b_xuan,4);
  27. b_mon=[];b_mon=b_xuan;
  28. %k=size(b_mon,4);
  29. b1=[];b1=reshape(b_mon,144,73,7,36);
  30. b2=[];b2=nanmean(b1,4);
  31. b3=[];b3=nanmean(b2,1);
  32. b4=reshape(b3,ny,nz);                                  %平均经向风速
  33. bb=[];
  34. for j=1:ny
  35.     for i=1:nz
  36.         bb(:,j,i)=b2(:,j,i)-b4(j,i);                   %经向风速扰动量
  37.     end
  38. end

  39. load('f:\5\quan_bd\th.mat');
  40. T=th;                                                  %th:位温
  41. [nx,ny,nz,nt]=size(T);
  42. a1=[];a1=nanmean(T,4);
  43. a4=[];a4=reshape(nanmean(a1,1),ny,nz);                      %经向平均位温
  44. aa=[];
  45. for j=1:ny
  46.     for i=1:nz
  47.         aa(:,j,i)=a1(:,j,i)-a4(j,i);                   %位温扰动量
  48.     end
  49. end

  50. yy=[];yy=nanmean(bb.*aa,1);
  51. y=zeros;y=reshape(yy,ny,nz);  %位温扰动量*经向风速扰动量的平均
  52. for i=1:ny
  53.     for j=1:nz
  54.         if abs(y(i,j))<0.000001
  55.            y(i,j)=0;
  56.         end
  57.     end
  58. end

  59. dx=[];fun=[];
  60. dx(1)=-(p(2)-p(1)); dx(7)=-(p(7)-p(6));
  61. for j=1:73
  62.         fnn(j,1)=(a4(j,2)-a4(j,1))/dx(1);
  63.         fnn(j,7)=(a4(j,7)-a4(j,6))/dx(7);
  64.     for k=2:6
  65.         dx(k)=-(p(k+1)-p(k-1));
  66.         fnn(j,k)=(a4(j,k+1)-a4(j,k-1))/(2*dx(k));           %求平均位温偏导数
  67.     end
  68. end

  69. fnn1=[];
  70. for j=1:73
  71.     fnn1(j,1)=(y(j,2)/fnn(j,2)-y(j,1)/fnn(j,1))/dx(1);
  72.     fnn1(j,7)=(y(j,7)/fnn(j,7)-y(j,6)/fnn(j,6))/dx(7);
  73.    for k=2:6;
  74.       fnn1(j,k)=(y(j,k+1)/fnn(j,k+1)-y(j,k-1)/fnn(j,k-1))/(2*dx(k));
  75.    end
  76. end

  77. svdata=[];
  78. for j=1:73
  79.     for k=1:7;
  80.         svdata(j,k)=b4(j,k)-fnn1(j,k);       %剩余环流v*
  81.         if abs(svdata(j,k))<=0.00001
  82.             svdata(j,k)=0;                     
  83.         end;
  84.      end
  85. end
  86. %svdata:剩余环流v*;a4:经向平均位温;y:位温扰动量*经向风速扰动量的平均;fnn:平均位温偏导数
  87. %b4:平均经向风速
  88. save F:\5\quan_bd\v.mat svdata a4 y fnn b4;
  89. fid=fopen('F:\5\quan_bd\v.dat','w');
  90. fwrite(fid,svdata,'float32');     
  91. fclose(fid);


复制代码
3、w
  1. %计算春季剩余环流w*(150-10层次的)
  2. clc;
  3. clear;
  4. p(1)=15000;
  5. p(2)=10000;
  6. p(3)=7000;
  7. p(4)=5000;
  8. p(5)=3000;
  9. p(6)=2000;
  10. p(7)=1000;
  11. a=6371000;
  12. g=9.80665;
  13. R=287.;           %气体常数
  14. load('F:\5\quan_bd\th.mat');
  15. ave_T=ave_T;      %纬向平均温度
  16. ncdisp('f:\data\omega.mon.mean.nc');
  17. lon=ncread('f:\data\omega.mon.mean.nc','lon');
  18. lat=ncread('f:\data\omega.mon.mean.nc','lat');
  19. time=ncread('f:\data\omega.mon.mean.nc','time');
  20. lev=ncread('f:\data\omega.mon.mean.nc','level');
  21. omega=ncread('f:\data\omega.mon.mean.nc','omega');
  22. omega1=omega(:,:,11:17,:);
  23. omega2=fliplr(omega1);
  24. [nx,ny,nz,nt]=size(omega2);
  25. j=1;omega2_xuan=zeros(nx,ny,nz,36);
  26. omega3=[];
  27. for i=15:12:444                           
  28.     omega3(:,:,:,j)=nanmean(omega2(:,:,:,i:i+2),4); %提取1980-2015春季数据
  29.     j=j+1;
  30. end
  31. %k=size(omega3,4);
  32. omega3_mon=[];omega3_mon=omega3;
  33. omega4=reshape(omega3_mon,nx,ny,nz,36);
  34. omega5=nanmean(omega4,4);
  35. o1=nanmean(omega5,1);
  36. o2=reshape(o1,ny,nz);                    %w*第一项

  37. %svdata:剩余环流v*;y:位温扰动量*经向风速扰动量的平均;fnn:平均位温偏导数
  38. load('F:\5\quan_bd\v.mat');
  39. epf=y;t3=fnn;
  40. [ny,nz]=size(epf);

  41. lat1=flipud(lat);
  42. for i=1:73
  43.     coskk(i)=cos(lat1(i)/180*pi);
  44.     if abs(lat1(i))==90
  45.         coskk(i)=0;
  46.     end
  47. end

  48. divx=[];
  49. for  j=1:nz                               %w*第二项
  50.     dx=2.5/180*pi;
  51.     divx(1,j)=(epf(2,j)*coskk(2)/t3(2,j)-epf(1,j)...
  52.         *coskk(1)/t3(1,j))/dx/(a*coskk(1));
  53.     divx(ny,j)=(epf(ny,j)*coskk(ny)/t3(ny,j)-epf(ny-1,j)...
  54.       *coskk(ny-1)/t3(ny-1,j))/dx/(a*coskk(ny));
  55.     for i=2:ny-1
  56.        divx(i,j)=(epf(i+1,j)*coskk(i+1)/t3(i+1,j)-epf(i-1,j)*...
  57.      coskk(i-1)/t3(i-1,j))/(2*dx)/(a*coskk(i));
  58.     end
  59. end

  60. womi=[];
  61. for j=1:ny
  62.    for k=1:nz;
  63.        womi(j,k)=o2(j,k)+divx(j,k);
  64.       if abs(womi(j,k))>=1000000
  65.        womi(j,k)=0;
  66.       end;
  67.     end
  68. end

  69. w=[];
  70. for k=1:nz
  71.    for j=1:ny
  72.        w(j,k)=-womi(j,k)*R*ave_T(j,k)/(g*p(k));       %转换为Z坐标,单位:m/s
  73.    end
  74. end
  75. %womi:剩余环流w*;w:z坐标下w*
  76. save F:\5\quan_bd\w.mat womi w;

  77. fid=fopen('F:\5\quan_bd\w.dat','w');
  78. fwrite(fid,w,'float32');     
  79. fclose(fid);


复制代码
ctl文件: ctl文件.png       gs文件: gs文件.png
画出来的图: 剩余速度.png

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

新浪微博达人勋

 楼主| 发表于 2018-1-29 15:17:54 | 显示全部楼层
怎么都没人理我呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-29 15:48:02 | 显示全部楼层
虽然是陈老师的学生,可我不做行星波那块。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-1-29 19:49:35 | 显示全部楼层
那请问你有陈老师关于这个的程序吗?想对比看看是不是我的程序哪步弄错了,画不出来老师那个图啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-3-24 10:07:47 | 显示全部楼层
请问楼主解决了嘛  
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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