实习六 气象要素线性趋势分析方法
分析中国夏季降水线性趋势的分布特征
利用数据160zhan-rainfall-summer.txt,编写求1982-2006年中国160站各站夏季降水线性倾向率,给出分布图,并进行简单分析。read-rain.for给出了阅读资料的fortran程序,数据在文件夹中单独给出。
Fortran代码:
program SX6
implicit none
integer,parameter :: m=160,n=25
integer :: sta(m)
real :: jd(m),wd(m),f(m,n),t(n)
real :: a(m),b(m),b_(m),syear,sf0,r
integer :: i,j
open(22,file='D:\data\160zhan-rainfall-summer.txt')
read(22,*) !空读一行
do i=1,m
read(22,*)sta(i),jd(i),wd(i),(f(i,j),j=1,n)
enddo
close(22)
do i=1,n
t(i)=i !将1982-2006改成时间序列1,2,3,...,n
enddo
do i=1,m
call xgxs(n,t(1:n),f(i,1:n),r,syear,sf0,b_(i))
end do
call stntogrd(jd,wd,m,b_) !调用输出函数
end program
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! 相关系数-开始 !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! 求平均值-开始 !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine mean(a,n,outp)
real a(n)
outp=sum(a)/(n*1.0)
end subroutine
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! 求平均值-结束 !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine xgxs(n,a,b,r,sx,s,b_) !相关系数函数a-x,b-y
real am,bm,a(n),b(n),sx,sy,sxy,r,b_
call mean(a,n,am)
call mean(b,n,bm)
r=0;sx=0;sy=0;sxy=0
do i=1,n
sxy=sxy+(a(i)-am)*(b(i)-bm)
sx=sx+(a(i)-am)**2
sy=sy+(b(i)-bm)**2
end do
sxy=sxy/n
sx=sqrt(sx/n)
sy=sqrt(sy/n)
r=sxy/(sx*sy)
b_=r*sy/sx
end subroutine
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! 相关系数-结束 !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine stntogrd(jd,wd,m,b)
implicit none
integer nlev,nflag,i,m
real jd(m),wd(m),b(m),tim
character*8 :: stid(m)
do i=1,160
stid(i)=char(i)
enddo
open(23,file='d:\sx6.grd',form='binary')
do i=1,m
tim=0.0
nlev=1
nflag=1
write(23) stid(i),jd(i),wd(i),tim,nlev,nflag,b(i)
enddo
! 在文件最后,给出一个特别记录,表示这个时间组的记录结束
tim=0.0
nlev=0
nflag=1
write(23) stid(i-1),jd(i-1),wd(i-1),tim,nlev,nflag
close(23)
end subroutine stntogrd
sx6.gs
'reinit'
'open C:\Users\Desktop\grid1.ctl'
'open C:\Users\Desktop\sx6.ctl'
'set grid off'
'set mpdset cnworld'
'define a=oacres(g,p.2,1.5)'
'define a1=maskout(a,g-0.5)'
'define aa=smth9(a1)'
'set gxout shaded'
'd aa'
'draw title xxqs'
'set cint 1.5'
'cbarn'
'southsea'
'printim d:\sx6.png white'
;
结果图(仅供参考)
步骤: