气象统计分析 实习六 气象要素线性趋势分析方法

实习六 气象要素线性趋势分析方法

分析中国夏季降水线性趋势的分布特征

利用数据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'
;

结果图(仅供参考) 

气象统计分析 实习六 气象要素线性趋势分析方法_第1张图片 


步骤:

  1. 运行Fortran在D盘输出sx6.grd文件 
  2. 打开grads,输入!stnmap后回车气象统计分析 实习六 气象要素线性趋势分析方法_第2张图片
  3. 在红框处输入ctl文件地址,或者长按拖进去,然后回车,会在D盘生成sx6.map文件
  4. 在grads上run一下gs文件即可

 

 

你可能感兴趣的:(经验分享,算法)