!-------------- 第1~第4类距平 ------------------------------! !输入:X(n,m,k):n为时间(年份);m为月份(1~12);k为站点或格点; ! !第一类距平:sub_JuPing1() ! !第二类距平:sub_JuPing1() ! !第三类距平:sub_JuPing1() ! !第四类距平:sub_JuPing1() ! !输出:Y(n,m,k)----第一类距平 ! ! Y(m,k)------第二类距平 ! ! Y(n,m,k)----第三类距平 ! ! Y(n,m,k)----第四类距平 ! !---------------------------------------- 程正泉 2000.5 -----! subroutine sub_JuPing1(n,m,k,X,Y) implicit none integer,intent(in)::n,m,k real,dimension(n,m,k),intent(in)::X real,dimension(n,m,k),intent(out)::Y real,allocatable,dimension(:,:)::ave integer::i1,i2,i3 allocate(ave(m,k)) do i2=1,m; do i3=1,k ave(i2,i3)=0.0 do i1=1,n ave(i2,i3)=ave(i2,i3)+X(i1,i2,i3)/float(n) enddo do i1=1,n Y(i1,i2,i3)=X(i1,i2,i3)-ave(i2,i3) enddo enddo;enddo deallocate(ave) end !-------------------------------- subroutine sub_JuPing2(n,m,k,X,Y) implicit none integer,intent(in)::n,m,k real,dimension(n,m,k),intent(in)::X real,dimension(m,k),intent(out)::Y real,allocatable,dimension(:,:)::ave1,ave2(:) integer::i1,i2,i3 allocate(ave1(m,k),ave2(k)) do i3=1,k ave2(i3)=0.0 do i2=1,m ave1(i2,i3)=0.0 do i1=1,n ave1(i2,i3)=ave1(i2,i3)+X(i1,i2,i3)/float(n) ave2(i3)=ave2(i3)+X(i1,i2,i3)/float(n*m) enddo enddo enddo do i2=1,m; do i3=1,k Y(i2,i3)=ave1(i2,i3)-ave2(i3) enddo;enddo deallocate(ave1,ave2) end !-------------------------------- subroutine sub_JuPing3(n,m,k,X,Y) implicit none integer,intent(in)::n,m,k real,dimension(n,m,k),intent(in)::X real,dimension(n,m,k),intent(out)::Y real,allocatable,dimension(:)::ave integer::i1,i2,i3 allocate(ave(k)) do i3=1,k ave(i3)=0.0 do i1=1,n; do i2=1,m ave(i3)=ave(i3)+X(i1,i2,i3)/float(n*m) enddo;enddo do i1=1,n; do i2=1,m Y(i1,i2,i3)=X(i1,i2,i3)-ave(i3) enddo;enddo enddo deallocate(ave) end !-------------------------------- subroutine sub_JuPing4(n,m,k,X,Y) implicit none integer,intent(in)::n,m,k real,dimension(n,m,k),intent(in)::X real,dimension(n,m,k),intent(out)::Y real,allocatable,dimension(:,:)::ave integer::i1,i2,i3 allocate(ave(n,k)) do i1=1,n; do i3=1,k ave(i1,i3)=0.0 do i2=1,n ave(i1,i3)=ave(i1,i3)+X(i1,i2,i3)/float(m) enddo do i2=1,n Y(i1,i2,i3)=X(i1,i2,i3)-ave(i1,i3) enddo enddo;enddo deallocate(ave) end