爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 15595|回复: 22

[源代码] 分享一个写得很烂的Fortran批处理CMA_TCBestTrack数据

[复制链接]

新浪微博达人勋

 成长值: 19710
发表于 2011-9-29 20:41:02 | 显示全部楼层 |阅读模式

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

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

x
为了响应版主们的号召,我找了很久很久才从箱底找个一个很久很久前帮一个师姐编的程序,批处理CMA_TCBestTrack数据,
CMA_TCBestTrack数据来自中国台风网http://www.typhoon.gov.cn/data/detail.php?id=33&type=5&style=
写得比较烂,大家觉得有用就看看,没用也要给点分哦~


!-------------------自定义type类型记录每个TC路径数据-----------------------
module typedef
  implicit none
  type bst
character(len=5)  :: A  !资料分类标志, '66666'表示最佳路径资料
character(len=4)  :: B  !国际编号, 年份的最后两位数+两位数的编号
character(len=3)  :: C  !路径数据记录的行数
character(len=4)  :: D  !包括热带低压在内的热带气旋序号;
character(len=4)  :: E  !我国对热带气旋的编号
character(len=1)  :: F  !热带气旋终结记录, 0表示消散, 1表示移出西太台风委员会的责任海区, 目前暂时全置为0
character(len=1)  :: G  !每行路径间隔小时数, 目前均为6(小时)
character(len=20) :: H  !热带气旋的英文名称, 名称后加 “(-1)n” 表示副中心及其序号
character(len=8)  :: I  !数据集形成的日期

integer,allocatable :: ymdh(:)  !年月日时, 时间为世界时
integer,allocatable :: IM(:)    !强度标记,0表示未达到热带低压强度,1表示热带低压, 2热带风暴,3强热带风暴,
                                 !4台风,5强台风, 6超强台风,9变性气旋
integer,allocatable :: lat(:)   !纬度(0.1°N)
integer,allocatable :: long(:)  !经度(0.1°E)
integer,allocatable :: pres(:)  !近中心最低气压(百帕: hPa)
integer,allocatable :: wnd(:)   !近中心最大风速(米/秒: m/s),WND=9表示风速<10m/s
  end type
end module


program main
  use typedef
  implicit none
  type(bst) :: tc(100)
  integer NUM                       !记录TC个数
  integer i,j,k,iniC,io
  integer ymdh_end,IM_end,lat_end,long_end,pres_end,wnd_end !记录文件中最后一行路径数据

  character(len=14) filename
  character(len=4) cTemp

  integer n(12)                      !记录每个月TC生成的个数

  open(20,file="TC.txt")              !打开记录数据处理结果的文件
!========================批处理读取文件==========================  
  do k=1949,2009
    write(cTemp,'(I4)') k
filename='CH'//cTemp//'BST.txt'  !或filename='CH'//trim(adjustl(cTemp))//'BST.txt'
    write(*,*) "正在处理文件:",filename,"..."

    do i=1,12
      n(i)=0
    end do

    NUM=1
!-----------------------读取文件中的TC路径数据------------------------
    open(10,file=filename,form="formatted",status="old",position="rewind")

    do while(.true.)
!===========================================================================!   
      read(10,*,iostat=io)tc(NUM)%A,tc(NUM)%B,tc(NUM)%C,tc(NUM)%D,tc(NUM)%E,tc(NUM)%F,tc(NUM)%G,tc(NUM)%H,tc(NUM)%I
   if(io < 0) exit
!============================================================================!   
   read(tc(NUM)%C,"(I3)") iniC  !路径数据记录的行数(字符型转整型)

    allocate (tc(NUM)%ymdh(iniC))
   allocate (tc(NUM)%IM(iniC))
   allocate (tc(NUM)%lat(iniC))
   allocate (tc(NUM)%long(iniC))
   allocate (tc(NUM)%pres(iniC))
   allocate (tc(NUM)%wnd(iniC))

      do j=1,iniC
        read(10,*)tc(NUM)%ymdh(j),tc(NUM)%IM(j),tc(NUM)%lat(j),tc(NUM)%long(j),tc(NUM)%pres(j),tc(NUM)%wnd(j)
   end do

!     write(*,*)num
!   if(tc(NUM)%ymdh(iniC)==ymdh_end) exit  !判断读到文件末尾,退出循环停止读取
   
   NUM=NUM+1
    end do
    close(10)

    write(*,*) "=======Data successfully read========"
    !write(*,*) "The total number of TC in ",cTemp,"is:",NUM
  

!-----------------------计算每个月TC生成个数------------------------
    do i=1,NUM-1
      n(mod(tc(i)%ymdh(1)/10000,100))=n(mod(tc(i)%ymdh(1)/10000,100))+1
    end do
  
    write(*,*) n(1:12)
    write(20,*) "========================================================"
    write(20,*) "The total number of TC in ",cTemp," is:",NUM-1
    write(20,*) "The number of TC in every month is:"
    write(20,*) n(1:12)
    write(20,*) "========================================================"
    write(*,*) "文件",filename,"处理完毕!"
    write(*,*) " "

  end do
  close(20)

  stop
end




评分

参与人数 2威望 +5 金钱 +25 贡献 +8 收起 理由
传说中的谁 + 2 + 10 + 3
mofangbao + 3 + 15 + 5 兰溪,好样的啊!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-9-29 20:42:30 | 显示全部楼层
本帖最后由 传说中的谁 于 2011-9-29 20:44 编辑

抢沙发之后慢慢看继续编辑~~~~~~~看起来像是处理台风路径的?兰溪辛苦啦,果断收藏,以后肯定用得到的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-9-29 20:42:50 | 显示全部楼层
感谢兰溪的无私分享……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-9-29 20:43:27 | 显示全部楼层
一定支持原创,兰溪加油,论坛加油啦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-9-29 20:43:30 | 显示全部楼层
哈哈~~来抢个沙发~~
本来想研究台风方向的~~
哎~~
不过也来学习学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-9-29 20:43:57 | 显示全部楼层
我什么也,没抢到啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2011-9-29 20:57:13 | 显示全部楼层

读就读进来了,要做什么处理就看你们自己咯~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2011-9-29 21:00:59 | 显示全部楼层
天目神眉 发表于 2011-9-29 20:43
我什么也,没抢到啊

继续加油~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-9-30 21:46:48 | 显示全部楼层
超有用,谢谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2012-4-19 18:38:55 | 显示全部楼层
jinjerjiang 发表于 2012-4-19 17:43
兰溪,,,竟然是你

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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