- 积分
- 46372
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-9-8
- 最后登录
- 1970-1-1
成长值: 19710
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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
|
评分
-
查看全部评分
|