- 积分
- 6
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2016-1-12
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
目的:把山西省2465个区域自动站09年到14年各个站点的小时雨量累加成日雨量。
程序如下,我粗略的估算了一下,跑完大概将近100小时,麻烦各位大神帮忙看一下,是不是太繁琐了。
program hour_to_day
implicit none
parameter m=23376,n=7000,l=2465
integer::i,j,k,p,q,n0,sta=0,tus=0,code1=0,code2=0,code3=0
integer::dd=0,mm=0,yyyy=0
integer*4 date
real::rain=0.0,r0=0.0
character*8 nyr,riqi
character*2 hr
character*46 dr(m)
character*5 stano(l)
character*7 drain
character*38 pre(n)
open(10,file='object_station.txt')
i=1
do while(.true.)
read(10,100,iostat=sta) stano(i)
if(sta/=0)exit
open(11,file='J:\hour-to-day\吉林5114.txt') !从另外一个文件中读取年月日信息
do j=1,m
read(11,200) dr(j)
if(j>=21186)then !1951年1月1日-2014年12月31日23376行数据
nyr=dr(j)(32:39)
n0=0
r0=0.0
do k=1,23
write(hr,'(I2.2)') k
open(12,file='J:\江西\中国地面气象站降水量小时值数据_micaps格式\2007-2014小时雨量\'//nyr(3:8)//hr//'.000')
p=1
do while(.true.)
if(p<=14)then
read(12,*,iostat=code2) !跳过小时雨量txt里的空白的14行
if(code2/=0)exit
else
read(12,300,iostat=tus) pre(p)
if(tus/=0)exit
if(pre(p)(1:5)==stano(i))then
if(trim(adjustl(pre(p)(32:38)))/='9999')then
read(pre(p)(32:38),*) rain !
r0=r0+rain
n0=n0+1
end if
end if
end if
p=p+1
end do
close(12)
write(*,*) p
end do
write(*,*) k
!******************************************************************************************************************
read(nyr(7:8),*) dd
dd=dd+1
read(nyr(5:6),*) mm
read(nyr(1:4),*) yyyy
if((mm==1.or.mm==3.or.mm==5.or.mm==7.or.mm==8.or.mm==10.or.mm==12).and.dd==32)then
dd=1
mm=mm+1
end if
if((mm==4.or.mm==6.or.mm==9.or.mm==11).and.dd==31)then
dd=1
mm=mm+1
end if
if(mm==2)then
if(mod(yyyy,4)/=0.or.(mod(yyyy,100)==0.and.mod(yyyy,400)/=0))then
if(dd==29)then
dd=1
mm=mm+1
end if
else
if(dd==30)then
dd=1
mm=mm+1
end if
end if
end if
if(mm==13)then
mm=1
yyyy=yyyy+1
end if
date=10000*yyyy+100*mm+dd
write(riqi,'(I8.8)') date
open(14,file='J:\江西\中国地面气象站降水量小时值数据_micaps格式\2007-2014小时雨量\'//riqi(3:8)//'00.000')
q=1
do while(.true.)
if(q<=14)then
read(14,*,iostat=code3)
if(code3/=0)exit
else
read(14,300,iostat=code1) pre(q)
if(code1/=0)exit
if(pre(q)(1:5)==stano(i))then
if(trim(adjustl(pre(q)(32:38)))/='9999')then
read(pre(q)(32:38),*) rain
r0=r0+rain
n0=n0+1
end if
end if
end if
q=q+1
end do
close(14)
write(*,*) q
!*******************************************************************************************************************
if(n0==0)then
drain=' 9999'
else
write(drain,'(f7.1)') r0
end if
open(13,position='append',file='J:\hour-to-day\dayrain_regional\'//nyr(3:8)//'00.000') !
write(13,400) stano(i),drain
end if
end do
write(*,*) j
close(11)
i=i+1
end do
write(*,*) i
close(10)
100 format(A5)
200 format(A46)
300 format(A38)
400 format(A5,2X,A7)
end
|
|