爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4897|回复: 10

[求助] 矢量EOF分解出错

[复制链接]

新浪微博达人勋

发表于 2013-3-2 16:34:41 | 显示全部楼层 |阅读模式

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

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

x
在兰溪之水的EOF程序基础上改的矢量EOF分解,flux2.dat是放了两个变量的数据,73*17,结果算出来的egvt.2里面的值为零,请问是哪里出错了呢?
      program main
character*80,parameter :: datafname='E:\ep-flux\flux2.dat'
parameter(n=30,mx=73,my=34,m=mx*my,mnl=n)
parameter(undef=-9.99e+08,mg1=mx*my,mg2=mx*my)
      parameter(ks=0,km=0,nd=1,std=1e-6)
!-----input array
      dimension f0(n,m)
!-----work arrays
      dimension f1(n,mg1),f2(n,mg1),g(mg1),h1(mg1,n),h2(mg1,n)
dimension f(mg2,n),gvt(mg2,mnl),cof(mnl,n)
!-----output arrays
      dimension er(mnl,4),egvt(m,mnl),ecof(mnl,n)
c-----Read data.
      open(20,file=datafname,form='unformatted',
     & access='direct',recl=m)
  do j=1,n
   read(20,rec=j)(f0(j,i),i=1,m)
  end do
close(20)
write(*,*)'Read data OK!'
c-----Remove the terrain or missing value.
      l1=0
do j=1,m
   if(f0(1,j).ne.undef)then
          l1=l1+1
     do k=1,n
            f1(k,l1)=f0(k,j)
     enddo
   endif
enddo
      write(*,*)'Grids without terrain:'
write(*,*)'mg1=',l1
c-----Remove annual cycle.
      if(km.eq.1)then
   ny=n/nd   
   do i=1,l1
     call initial(nd,ny,n,f1(1,i),f2(1,i))
   end do  
   do i=1,l1
     do k=1,n
       f1(k,i)=f2(k,i)
     end do
   end do
end if
c-----Remove the grids whose variance equal to zero.
l2=0
do i=1,l1
   call meanvar(n,f1(1,i),ax,g(i),vx)
   if(g(i).gt.std)then
          l2=l2+1
     do k=1,n
            f(l2,k)=f1(k,i)
     enddo
   endif
end do
write(*,*)'Grids without terrain and constant value:'
write(*,*)'mg2=',l2
     
c     stop
c-----Call the subroutine.
      write(*,*)'!!!!'
      call eof(l2,n,mnl,f,ks,er,gvt,ecof)
write(*,*)'EOF ok and transform to the original form in the next!'
c-----Add the grids whose variance equal to zero.      
l3=0
do i=1,mg2
   if(g(i).gt.std)then
     l3=l3+1
     do k=1,mnl
       h1(i,k)=gvt(l3,k)
     end do
   else
     do k=1,mnl
       h1(i,k)=undef
     end do
   endif
enddo
c-----Add the terrain or missing value.
l4=0
do i=1,m
   if(f0(1,i).ne.undef)then
     l4=l4+1
     do k=1,mnl
       egvt(i,k)=h1(l4,k)
     end do
   else
     do k=1,mnl
       egvt(i,k)=undef
     end do
   endif
enddo
c-----output the result.        
c-----output eigenvactors matrix of EOF.
      open(11,file='egvt1.dat',status='unknown'
     &,form='unformatted',access='direct',recl=mx*my)
do j=1,1
   write(11,rec=j)(egvt(i,j),i=1,m/2)
end do
      write(*,*)' OK: output eigenvactors matrix of EOF!'
close(11)
open(1111,file='egvt2.dat',status='unknown'
     &,form='unformatted',access='direct',recl=mx*my)
do j=1,1
   write(1111,rec=j)(egvt(i,j),i=m/2+1,m/2)
end do
      write(*,*)' OK: output eigenvactors matrix of EOF!'
close(1111)
下面是EOF的子程序,都没有什么改动,应该是上面这部分出错的,希望大家能帮忙找一下~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-5 09:42:43 | 显示全部楼层
看看是否没去掉缺省异常值?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-5 15:43:01 | 显示全部楼层
还不如上传个附近,这样看起来太乱了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-3-5 22:01:12 | 显示全部楼层
已经找到错误了,去掉边界就行了~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-10 16:20:59 | 显示全部楼层
好乱啊,哎,看不懂。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-21 13:21:54 | 显示全部楼层
不懂……eof的矢量分析没学过
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-31 15:21:33 | 显示全部楼层
同求,解释
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-11 14:59:14 | 显示全部楼层
好专业呀,支持一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-21 23:35:02 | 显示全部楼层
看不懂哦!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-8-18 10:12:08 | 显示全部楼层
makim 发表于 2013-3-5 22:01
已经找到错误了,去掉边界就行了~~

请问去掉边界是什么意思?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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