登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
!求各年(1951-2010)全球纬向平均MSF值
!定义Hadley环流强度指数为:北半支最大MSF值为北半球强度指数(NHCI),南半支最小MSF值为南半球强度指数(SHCI)
!本程序一并求出NHCI和SHCI将60年的值分别写入txt文件,以备后期处理使用
!得到的所有值都是标准单位
!Copyright by Aires
program msf_year
implicit none
!声明程序所需变量并赋初值
real,parameter:: pi=3.14, a=6371000.0, g=9.8
real:: v(46,19,99), psi_up(46,19,99),psi_down(46,19,99),psi(46,19,99),w1(19),NHCE(99),SHCE(99)
real:: p(19)=(/101300,100000,92500,85000,70000,60000,&
50000,40000,30000,25000,20000,15000,&
10000,7000,5000,3000,2000,1000,0/)
integer:: i,j,k,t,irec
data ((v(i,1,t),i=1,46),t=1,99) /4554*0/ !把第1层v设为0
data ((v(i,19,t),i=1,46),t=1,99) /4554*0/ !把第19层v设为0
data ((psi_up(i,1,t),i=1,46),t=1,99) /4554*0/
data ((psi_down(i,19,t),i=1,46),t=1,99) /4554*0/
real:: p_up(18)=(/-1300,-7500,-7500,-15000,-10000,-10000,-10000,-10000,-5000,& !向上积分气压差值
-5000,-5000,-5000,-3000,-2000,-2000,-1000,-1000,-1000/)
real:: p_down(18)=(/1000,1000,1000,2000,2000,3000,5000,5000,5000,5000,10000,10000,& !向下积分气压差值
10000,10000,15000,7500,7500,1300/)
real:: phi(73)=(/((i-37)*2.5*pi/180.0,i=1,73)/) 这个语句不太确定是什么意思,但是它是基于将纬度隔2.5共分为73个值,即90、87.5、85···············-87.5、-90,但是我的数据是隔4,即90、86、82··········-86、-90这样的,就是说我的纬度维数为46,不是73,不知道这句话该怎么设,导致后面写NHCE时就会出错,希望大家帮忙看看!
real :: e=0.1e10
!real:: ph(46)=(/-90,-86,-82,-78,-74,-70,-66,-62,-58,-54,-50,-46,-42,-38,&
! -34,-30,-26,-22,-18,-14,-10,-6,-2,2,6,10,14,18,22,26,30,&
! 34,38,42,46,50,54,58,62,66,70,74,78,82,86,90/)
!把二进制文件中的v读入数组中
open(10,file='d:\lunwen\2001-2099-01.grd',form='binary',status='old')
!irec=1
do t=1,99
do j=2,18
read(10) (v(i,j,t),i=1,46)
! irec=irec+1
end do
end do
close(10)
!求向上MSF
do t=1,99
do j=2,19
do i=1,46
psi_up(i,j,t)=psi_up(i,j-1,t)+(2*pi*a*cos(phi(i))*(v(i,j,t)+v(i,j-1,t))*p_up(j-1))/(2*g)
end do
end do
end do
!同理,求向下MSF
do t=1,99
k=1
do j=19,2,-1
do i=1,46
psi_down(i,j-1,t)=psi_down(i,j,t)+(2*pi*a*cos(phi(i))*(v(i,j-1,t)+v(i,j,t))*p_down(k))/(2*g)
end do
k=k+1
end do
end do
!求总MSF
do j=1,19
w1(j)=p(j)/101300.0
end do
do t=1,99
do j=1,19
do i=1,46
psi(i,j,t)=w1(j)*psi_up(i,j,t)+(1-w1(j))*psi_down(i,j,t)
end do
end do
end do
!加入边界条件
do t=1,99
psi(:,1,t)=0
psi(:,19,t)=0
psi(1,:,t)=0
psi(46,:,t)=0
end do
!open(200,file='d:\lunwen\msfX.grd',form='unformatted')
!write(200) ((psi(i,j,1),i=1,46),j=1,19)
!close(200)
!找出各年NHCE和SHCE分别写入两个txt文件
!NHCE、SHCE定义为向极地方向500hPa高度上msf为0所在纬度
open(20,file='d:\lunwen\NHCE.txt')
open(30,file='d:\lunwen\SHCE.txt')
do t=1,99
NHCE(t)=0.0
SHCE(t)=0.0
do i=2,72
if(abs(psi(i,7,t)-0.0)<=e)then
if(phi(i)>NHCE(t))then
NHCE(t)=phi(i)
elseif(phi(i)<SHCE(t))then
SHCE(t)=phi(i)
end if
end if
enddo
write(20,*) NHCE(t)
write(30,*) SHCE(t)
end do
close(20)
close(30)
end
|