Fortran Coder

查看: 7077|回复: 7
打印 上一主题 下一主题

[通用算法] 求取更快的運算方式

[复制链接]

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
跳转到指定楼层
楼主
发表于 2014-10-30 12:05:18 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
這個程式每次跑完要花掉我一天多的時間,是不是修改其中那些語法或者用矩陣讀入會比較快?
因為檔案樹快要接近50個,所以跑完要花許久時間。希望各位高手給予幫助 > <

程式碼如下:
[Fortran] 纯文本查看 复制代码
program ZWD_gamit                                                         
implicit none                                                             
                                                                          
  integer :: stat,stat2,stat3,stat4,yr,dayofyear,hr                       
  character :: filename_ztd*12,filename_zhd*12,filename_zwd*12            
  character :: c_time_all_ztd*12,c_time_all_zhd*12,c_zhd_mm*12            
  real*8 :: time_all_ztd,ztd_m,Tsr_deg,Ps_hpa,zhd_mm,ztd_mm,zwd_mm           
                                                                          
  open(11,file="list.txt")                                                
  close(11,status="delete")                                               
  open(22,file="list2.txt")                                               
  close(22,status="delete")                                               
  call system('for %f in (*_all.ztd) do echo %f >> list.txt')             
  call system('for %f in (*_all.zhd) do echo %f >> list2.txt')            
  open (11,file="list.txt")                                               
  open (22,file="list2.txt")                                              
                                                                          
  stat=0                                                                  
  stat2=0                                                                 
  do while (stat==0 .and. stat2==0)                                       
    read (11,"(a12)",iostat=stat) filename_ztd                            
    read (22,"(a12)",iostat=stat2) filename_zhd                           
    if (stat/=0 .and. stat2/=0) exit                                      
    open (33,file=filename_ztd)                                           
    open (44,file=filename_zhd)                                           
    filename_zwd=filename_ztd(1:8)//".zwd"                                
    open (55,file=filename_zwd)                                           
                                                                          
    stat3=0                                                               
    do while (stat3==0)                                                   
      read (33,50,iostat=stat3) c_time_all_ztd,ztd_m,yr,dayofyear,hr      
50    format (a12,4x,f6.1,3x,i4,3x,i3.3,3x,i2.2)                          
      if (stat3/=0) exit                                                  
      stat4=0                                                             
      do while (stat4==0)                                                 
        read (44,100,iostat=stat4) c_time_all_zhd,c_zhd_mm,Tsr_deg,Ps_hpa    
100     format (a12,3x,a12,3x,f6.1,3x,f6.1)                               
        if (stat4/=0) exit                                                
        if (c_time_all_ztd==c_time_all_zhd) then                          
          if( c_zhd_mm(1:1) /= "*") then                                  
            read (c_time_all_ztd,"(f12.7)") time_all_ztd                  
            read (c_zhd_mm,"(f12.7)") zhd_mm                              
            ztd_mm = ztd_m * 1D3                                          
            zwd_mm = ztd_mm - zhd_mm                                      
            write (55,150) time_all_ztd,zwd_mm,Tsr_deg,Ps_hpa,yr,dayofyear,hr
150         format (f12.7,3x,f12.7,3x,f6.1,3x,f6.1,3x,i4,3x,i3.3,3x,i2.2) 
            exit                                                          
          end if                                                          
        end if                                                            
      end do                                                              
      rewind(44)                                                          
    end do                                                                
    close(33)                                                             
    close(44)                                                             
    close(55)                                                             
  end do                                                                  
  close(11)                                                               
  close(22)                                                               
end program                                                              


檔案附件如下:

cal_data.rar

620.32 KB, 下载次数: 1

cal_data2.rar

898.4 KB, 下载次数: 1

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
沙发
 楼主| 发表于 2014-10-30 13:56:42 | 显示全部楼层
恩恩,感謝您的回覆,不過該怎麼樣修改程式碼才能像你所說這樣呢?!'
因為接觸fortran不久,想說上來問問看各位的意見,順便學習一下。
能否給個範例呢?!或告訴我如何修改呢?!

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
板凳
 楼主| 发表于 2014-10-30 15:22:15 | 显示全部楼层
謝謝您提供方向給我去摸索,我先試著去學習看看你說的方式,如果有遇到問題再po上網來跟大家討論。

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
地板
 楼主| 发表于 2014-11-8 19:46:31 | 显示全部楼层
chiangtp 发表于 2014-11-6 10:30
抱歉, test.f90程式中, "1.0_r8" 請更正為 "1000.0_r8"

感謝您提供更快速的方法,讓小弟可以觀摩另類的寫法,感激不盡 ><
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 04:36

Powered by Tencent X3.4

© 2013-2024 Tencent

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