爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4088|回复: 5

[求助] 【已解决】缺测值过多

[复制链接]

新浪微博达人勋

发表于 2013-10-4 17:11:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 赤炼修 于 2013-10-22 11:19 编辑

program main
parameter(nx=866,nz=10,undef5=-9.9900000e+08)
real t(nx,nz),tgrad(nx,nz),dd(nz)
! character(3)::deepth(nz)=(/'000','005','010',050','075','100','150','200','250','300'/)
open(1,file='I:\1\deepth.txt')
read(1,*)(dd(k),k=1,nz)
close(1)
open(2,file='I:\1\tsprlatavek1-10.grd',form='binary')
read(2)((t(i,k),i=1,nx),k=1,nz)
close(2)

do i=1,nx
   do k=1,nz-1
    tgrad(i,k)=(t(i,k)-t(i,k+1))/(dd(k+1)-dd(k))
   enddo
enddo
do i=1,nx
  do k=1,nz-1
    if(t(i,k)==undef5.or.t(i,k+1)==undef5)then
          tgrad(i,k)=undef5
    endif
enddo;enddo

open(3,file='tgradlatvertical.grd',form='binary')
write(3)((tgrad(i,k),i=1,nx),k=1,nz)
close(3)

end

出图如下,图1中纵坐标是海洋深度,横坐标是经度,等值线为铅直温度梯度。
1.jpg

深度设置浅一点的图2,0~100米深度比300m深度缺测稍微少点 4.jpg


图3深度0~10m
3.jpg



图4是原始资料30°N,set t 1 10后显示的0~300m深度上的海温情况。
2.jpg











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

新浪微博达人勋

发表于 2013-10-4 19:49:07 | 显示全部楼层
我觉得程序的逻辑是不是有些问题啊,改一下试试
do i=1,nx    
do k=1,nz-1  
if(t(i,k)==undef5.or.t(i,k+1)==undef5)then          
tgrad(i,k)=undef5    
else

tgrad(i,k)=(t(i,k)-t(i,k+1))/(dd(k+1)-dd(k))    
endif  

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

新浪微博达人勋

 楼主| 发表于 2013-10-5 09:33:35 | 显示全部楼层

试过了图没有变化。另外读取原文件 tspr17avek1-10.grd发现有不少缺测,感觉这资料水平分辨率高但垂直层上较多缺测?准备试试对各个层次先进行区域平均变为水平上2.5*2.5,再来算铅直梯度试试。你觉得可行吗?还有,我计算铅直梯度的方法有问题吗?谢谢~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-5 11:30:39 | 显示全部楼层
赤炼修 发表于 2013-10-5 09:33
试过了图没有变化。另外读取原文件 tspr17avek1-10.grd发现有不少缺测,感觉这资料水平分辨率高但垂直层上 ...

区域平均是可以的,但是缺测的地方还是要想办法处理一下,缺测值不能参加区域平均的计算,要不然结果有问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-7 12:40:49 | 显示全部楼层
本帖最后由 homezhaow 于 2013-10-7 12:47 编辑

囧 …… 问题还没解决吗?
建立数组 rlon(N)rlat(M)放每个格点的经纬,T(N,M,10),三维数组放温度, 以2.5乘2.5马赛克为例
do k=1,10
do i=1,N
do j=1,M
if (abs(T(int(rlon(i)/2.5)+1,int(rlon(i)/2.5)+1,k) )<10000)then
   rneed(int(rlon(i)/2.5)+1,int(rlon(i)/2.5)+1,k)=need(int(rlon(i)/2.5)+1,int(rlon(i)/2.5)+1,k)+T(int(rlon(i)/2.5)+1,int(rlon(i)/2.5)+1,k) )
   nsigma(int(rlon(i)/2.5)+1,int(rlon(i)/2.5)+1,k)=nsigma(int(rlon(i)/2.5)+1,int(rlon(i)/2.5)+1,k)+1
end;end;end

do k=1,10
do i=1,NN !马赛克后的lon格子数
do j=1,MM !马赛克后的lat格子数
   rneed(i,j,k)=rneed(i,j,k)/nsigma(i,j,k)
end;end;end

以上

吐槽下,我以为龚解决了呢 ……
潜水太多,冒个泡,带走一个积分 ……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-13 14:46:11 | 显示全部楼层
homezhaow 发表于 2013-10-7 12:40
囧 …… 问题还没解决吗?
建立数组 rlon(N)rlat(M)放每个格点的经纬,T(N,M,10),三维数组放温度 ...

赞!多谢大神!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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