- 积分
 - 16
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 2015-4-10
 
	- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
	
 
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
小弟初次学习ETKF方法,想在小模式(Lorenz96)中实验一下,可 
更新后的集合扰动预报效果还不如未更新的扰动,特来求教程序该怎么编写,感激不尽! 
 
还未涉及到膨胀因子和局地化等,仅仅是最初的ETKF方法(Bishop,2001) 
 
不知道观测算子和观测误差协方差该怎么给定,程序就胡乱取了个单位矩阵I 
初始集合是随机生成的 
 
ensize_inv = 1.0 / real(ensize) 
 ensize_m1_inv = 1.0 / real(ensize-1) 
!========================================================================   
![1] 计算集合平均ensmean,产生集合扰动Zf 
!======================================================================== 
open(30,file='Xf.txt') 
ensmean(:)=0.0 
      do i=1,dim 
          do j=1,ensize 
          ensmean(i) = ensmean(i)+xf(i,j) 
          end do 
          ensmean(i)=ensmean(i)*ensize_inv 
      end do 
       
      do j = 1, ensize 
          xf(:,j) = xf(:,j) - ensmean(:)                    
      enddo 
      xf=xf*ensize_m1_inv                                        !Xf 
            
     write(30,"(40f12.6)") xf  
                                                  
!========================================================================   
![2] 计算hzthz(ensize,ensize) 
!======================================================================== 
    call Obs(dim,nobs,ob_H,oberrcovar)        !调用的观测算子H和观测误差协方差R都是单位阵,不知道该怎么取?? 
       
    do i=1,nobs 
            oberrcovar(i,i)=1.0/sqrt(oberrcovar(i,i))          !R^(-0.5) 
    end do 
     
   call Matrix_Mul(oberrcovar,ob_H,nobs,nobs,dim,ob_tilda_H)   !R^(-0.5)*H = Tilda(H) 
 
 
   call Matrix_Mul(ob_tilda_H,xf,nobs,dim,ensize,ens_ob)       !H*Zf=HZf  因为H,R都是单位阵,就把HXf当作了HZf,对吗? 
    
   call MatTran_Mul_Mat(ens_ob, hzthz,nobs,ensize)              !(HZf)'(HZf) 
 
!===================================================================== 
![3] 计算hzthz的特征值gamma和特征向量C 
!===================================================================== 
       call eig(hzthz,ensize,EPS,eig_vector1)          !求实对称矩阵特征值与特征向量的雅克比过关法 
        
       do ij=1,ensize 
             eig_value1(ij)=hzthz(ij,ij)                        !hzthz主对角线元素为特征值 
       end do 
        
!------------------------特征值从大到小排列,特征向量对应排列-----------------------------------------    
eig_value(:)=0.0 
eig_vector(:,:)=0.0 
       do ik=1,ensize 
           indx=maxloc(abs(eig_value1)) 
           eig_value(ik)=eig_value1(indx(1)) 
           eig_vector(:,ik)=eig_vector1(:,indx(1))         !第I列特征向量对应第I个特征值 
   
           eig_value1(indx(1))=0.0     
           eig_vector1(:,indx(1))=0.0 
       end do 
        
!================================================================================================ 
!                       转换矩阵T 
!================================================================================================ 
open(35,file='matrix_T.txt') 
do ii=1,ensize 
    do jj=1,ensize 
        T(jj,ii) = eig_vector(jj,ii)*(1.0/sqrt(eig_value(ii)+1.0)) 
    end do 
end do 
write(35,"(15f12.6)")T 
!========================================================================================== 
open(36,file='Xa.txt') 
call Matrix_Mul(xf,T,dim,ensize,ensize,xa)     !xa=xf*T 
write(36,"(40f12.6)")xa 
 
最后得到的xa就是更新后扰动,但叠加在集合平均上做出来的预报还不如Xf叠加平均态的预报效果 
求高手帮我看看 
  
我最大的疑问在于观测算子H,和观测误差协方差阵R该怎么给予 
还有初始的集合随机生成是否可以? 
求高手帮我看看 
感激不尽! 
 |   
 
 
 
 |