爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2502|回复: 3

[求助] 求助!程序跑了一天还没跑完。

[复制链接]

新浪微博达人勋

发表于 2016-1-18 10:53:36 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-18 11:16:25 | 显示全部楼层
程序很长,而且你也没有采用子程序什么的,自然计算缓慢,建议精简程序,最大程度优化结构
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2016-1-18 13:03:30 | 显示全部楼层
可以导入数据库用sql语句算
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-9 16:36:06 | 显示全部楼层
在rel.error.0000文件里面能查看进度和计算错误提示
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表