Fortran做EOF分析.docVIP

  • 14
  • 0
  • 约 9页
  • 2017-02-09 发布于重庆
  • 举报
Fortran做EOF分析

!此程序为EOF程序 ! 运行时要改动前面的空间、时间格点以及文件路径,ks和kvt根据自己的需要进行改动 !程序中自动去除缺省值并将其写回生成数据(生成数据中缺省值为-9999.0) !对程序中data_in到F的传递 进行调整后 此程序也可用于s-eof和mv-eof ! PROGRAM EOF IMPLICIT NONE INTEGER,PARAMETER :: nt=12,nx=23,ny=34 ! you need change,NT为时间长度 INTEGER,PARAMETER ::M=nt,KS=0,KVT=8 !kvt为输出的模态数 ! KS的设置: ks0 计算前先将数据标准化 , ! ks=0时取距平,ks0时不进行这一步处理 INTEGER :: i,j ,MNH,N ,K,IM , m1 REAL, allocatable,dimension(:,:,:)::DATA_IN REAL, allocatable,dimension(:,:)::F,S,ER,A,S1,F1 CHARACTER(LEN=20) :: NOW , TRACK REAL :: land(nx,ny), D,AVE,PT(NX,NY,kvt) ,ran1 TRACK=E:\aat\EA\ !输出的目标文件夹,默认为程序所在文件夹 call time(now) print*, now !!1111111111读入数据并去掉缺省值11111111111111 ALLOCATE(DATA_IN(NX,NY,NT)) OPEN(1,file=E:\aat\EA\aat.eof.dat,access=direct,recl=nx*ny*nt) !****修改路径 READ(1,rec=1) (((data_in(I,J,K),I=1,nx),J=1,ny),K=1,nt) CLOSE(1) !注意数据排列顺序 !************做纬度加权平均,中、高纬度使用,热带或小范围不必******(未验证) !do j=1,ny !z(j)=0.+(real(j)-1.)*2.5/180.*3.1415926575 !使用时需要改动格距和起始纬度 !data_in(:,j,:)=data_in(:,j,:)*sqrt(cos(z(j))) !enddo land=0.0 N=NX*NY DO I=1,nx DO J=1,ny DO K=1,nt IF(abs(data_in(I,J,K))99999.0)then !判断缺省值 (注意条件) land(I,J)=-9999.0 N=N-1 EXIT ENDIF ENDDO ENDDO ENDDO ALLOCATE(F(1:N,1:M)) im=0 DO I=1,nx DO J=1,ny IF(land(I,J)/=-9999.0)then im=im+1 F(IM,1:m)=data_in(I,J,1:m) ENDIF ENDDO ENDDO print*, 空间点数 , nx*ny, 非缺省值空间点数:,im,N DEALLOCATE(DATA_IN) MNH=min(N,M) ALLOCATE( A(MNH,MNH)) ALLOCATE(S(MNH,MNH)) ALLOCATE(ER(mnh,6)) !222222222222222222计算过程22222222222222222222222 CALL TRANSF(N,M,F,KS)

文档评论(0)

1亿VIP精品文档

相关文档