Program tc_detect ! By: hapt, 2018 Implicit none Integer:: total_num Integer, parameter:: max_tcstep=100 Integer:: inum, istep, itc, ntc Integer:: nstep Integer,dimension(300):: tc_step, new_tc_step Integer:: life_length=6 Real,parameter:: flag=-99.99 Real, dimension (:,:), allocatable:: tc_lon, tc_lat Integer, dimension (:,:), allocatable:: tc_year, tc_mon, tc_day, tc_hour Real, dimension (:,:), allocatable:: new_tc_lon, new_tc_lat Integer, dimension (:,:), allocatable:: new_tc_year, new_tc_mon, new_tc_day, new_tc_hour Integer, dimension (:), allocatable:: tc_flag Character:: ctmp Character*100:: iDir, oDir Character*100:: cfile, ofile Integer,parameter:: nmon=12 Integer, dimension(nmon):: ntc_mon Integer:: imon, itmp Integer:: day_crit=2 Real:: lat_crit Integer:: tmp_day, tmp_step Real:: tmp_lat ! Namelist namelist/nml/iDir,cfile,oDir,life_length Open (111,file='info.txt',status='unknown') Read(111,nml) ! Write(*,*) iDir Close(111) itc=0 ntc_mon=0 write(*,*) trim(iDir)//trim(cfile)//".txt" Open (11, file=trim(iDir)//trim(cfile)//".txt", status="unknown") Read (11,*) ctmp, total_num Allocate (tc_lon(total_num,max_tcstep)) Allocate (tc_lat(total_num,max_tcstep)) Allocate (tc_year(total_num,max_tcstep)) Allocate (tc_mon(total_num,max_tcstep)) Allocate (tc_day(total_num,max_tcstep)) Allocate (tc_hour(total_num,max_tcstep)) Allocate (tc_flag(total_num)) Allocate (new_tc_lon(total_num,max_tcstep)) Allocate (new_tc_lat(total_num,max_tcstep)) Allocate (new_tc_year(total_num,max_tcstep)) Allocate (new_tc_mon(total_num,max_tcstep)) Allocate (new_tc_day(total_num,max_tcstep)) Allocate (new_tc_hour(total_num,max_tcstep)) !Write (*,*) total_num Do inum=1,total_num Read(11,*) Read(11,*) Read(11,*) ctmp, nstep If (nstep.ge.life_length) then itc=itc+1 tc_step(itc)=nstep !Write(*,*) itc, nstep Do istep=1,nstep Read(11,*) tc_year(itc,istep), tc_mon(itc,istep), & tc_day(itc,istep), tc_hour(itc,istep), tc_lon(itc,istep), tc_lat(itc,istep) If (istep.eq.1) then ntc_mon(tc_mon(itc,istep))=ntc_mon(tc_mon(itc,istep))+1 End if End do Else Do istep=1,nstep Read(11,*) !Write(*,*) inum End do End if End do Close(11) ntc=itc total_num=ntc ! ---- new criteria itmp=0 tc_flag=0 new_tc_step=0 !Open (12, file="for_check.txt",status="unknown") Do inum=1,total_num-1 !Write(*,'(2(I4,2x))') inum, tc_flag(inum) If (tc_flag(inum).eq.0) then !Write(*,'(2(I4,2x))') inum, tc_flag(inum) tmp_day=abs(tc_day(inum+1,1)-tc_day(inum,tc_step(inum))) If (tmp_day.le.day_crit) then If (tmp_day.le.1) then lat_crit=4.8 Else lat_crit=9.6 End if tmp_lat=sqrt((tc_lat(inum+1,1)-tc_lat(inum,tc_step(inum)))**2+(tc_lon(inum+1,1)-tc_lon(inum,tc_step(inum)))**2) If (tmp_lat.le.lat_crit) then tc_flag(inum)=1 tc_flag(inum+1)=1 !Write(*,'(2(I4,2x))') inum, tc_flag(inum) itmp=itmp+1 !Write(12,*) " ---------------------------------- " !Write(12,*) "TC#", itmp, inum !tmp_step=tc_step(inum)+tc_step(inum+1) !Write(12,*) "Num_Obs:", tmp_step tmp_step=0 Do istep=1,tc_step(inum) tmp_step=tmp_step+1 !Write(12,"(2(I2,3x),I4,2x,I4,2x,3(F6.1,2x))") tc_day(inum,istep),tc_mon(inum,istep),& ! tc_year(inum,istep), tc_hour(inum,istep), tc_lon(inum,istep),tc_lat(inum,istep) new_tc_day(itmp,tmp_step)=tc_day(inum,istep) new_tc_mon(itmp,tmp_step)=tc_mon(inum,istep) new_tc_year(itmp,tmp_step)=tc_year(inum,istep) new_tc_hour(itmp,tmp_step)=tc_hour(inum,istep) new_tc_lon(itmp,tmp_step)=tc_lon(inum,istep) new_tc_lat(itmp,tmp_step)=tc_lat(inum,istep) End do Do istep=1,tc_step(inum+1) tmp_step=tmp_step+1 new_tc_day(itmp,tmp_step)=tc_day(inum+1,istep) new_tc_mon(itmp,tmp_step)=tc_mon(inum+1,istep) new_tc_year(itmp,tmp_step)=tc_year(inum+1,istep) new_tc_hour(itmp,tmp_step)=tc_hour(inum+1,istep) new_tc_lon(itmp,tmp_step)=tc_lon(inum+1,istep) new_tc_lat(itmp,tmp_step)=tc_lat(inum+1,istep) !Write(12,"(2(I2,3x),I4,2x,I4,2x,3(F6.1,2x))") tc_day(inum+1,istep),tc_mon(inum+1,istep),& ! tc_year(inum+1,istep), tc_hour(inum+1,istep), tc_lon(inum+1,istep),tc_lat(inum+1,istep) End do new_tc_step(itmp)=tmp_step Else itmp=itmp+1 !Write(12,*) " ---------------------------------- " !Write(12,*) "TC#", itmp, inum !Write(12,*) "Num_Obs:", tc_step(inum) tmp_step=0 Do istep=1,tc_step(inum) tmp_step=tmp_step+1 new_tc_day(itmp,tmp_step)=tc_day(inum,istep) new_tc_mon(itmp,tmp_step)=tc_mon(inum,istep) new_tc_year(itmp,tmp_step)=tc_year(inum,istep) new_tc_hour(itmp,tmp_step)=tc_hour(inum,istep) new_tc_lon(itmp,tmp_step)=tc_lon(inum,istep) new_tc_lat(itmp,tmp_step)=tc_lat(inum,istep) !Write(12,"(2(I2,3x),I4,2x,I4,2x,3(F6.1,2x))") tc_day(inum,istep),tc_mon(inum,istep),& ! tc_year(inum,istep), tc_hour(inum,istep),tc_lon(inum,istep),tc_lat(inum,istep) End do new_tc_step(itmp)=tmp_step End if End if If (tmp_day.gt.day_crit) then !Write(*,'(a9,2x,2(I4,2x))') 'aaaaaaa',inum, tc_flag(inum) itmp=itmp+1 !Write(12,*) " ---------------------------------- " !Write(12,*) "TC#", itmp, inum !Write(12,*) "Num_Obs:", tc_step(inum) tmp_step=0 Do istep=1,tc_step(inum) tmp_step=tmp_step+1 new_tc_day(itmp,tmp_step)=tc_day(inum,istep) new_tc_mon(itmp,tmp_step)=tc_mon(inum,istep) new_tc_year(itmp,tmp_step)=tc_year(inum,istep) new_tc_hour(itmp,tmp_step)=tc_hour(inum,istep) new_tc_lon(itmp,tmp_step)=tc_lon(inum,istep) new_tc_lat(itmp,tmp_step)=tc_lat(inum,istep) !Write(12,"(2(I2,3x),I4,2x,I4,2x,3(F6.1,2x))") tc_day(inum,istep),tc_mon(inum,istep),& ! tc_year(inum,istep), tc_hour(inum,istep), tc_lon(inum,istep),tc_lat(inum,istep) End do new_tc_step(itmp)=tmp_step End if End if End do If (tc_flag(total_num).eq.0) then inum=total_num itmp=itmp+1 !Write(12,*) " ---------------------------------- " !Write(12,*) "TC#", itmp !Write(12,*) "Num_Obs:", tc_step(inum) tmp_step=0 Do istep=1,tc_step(inum+1) tmp_step=tmp_step+1 new_tc_day(itmp,tmp_step)=tc_day(inum,istep) new_tc_mon(itmp,tmp_step)=tc_mon(inum,istep) new_tc_year(itmp,tmp_step)=tc_year(inum,istep) new_tc_hour(itmp,tmp_step)=tc_hour(inum,istep) new_tc_lon(itmp,tmp_step)=tc_lon(inum,istep) new_tc_lat(itmp,tmp_step)=tc_lat(inum,istep) !Write(12,"(2(I2,3x),I4,2x,I4,2x,3(F6.1,2x))") tc_day(inum+1,istep),tc_mon(inum+1,istep),& ! tc_year(inum+1,istep), tc_hour(inum+1,istep),tc_lon(inum+1,istep),tc_lat(inum+1,istep) End do End if ntc=itmp !Close(12) Open(4,file="for_check.txt",status="unknown") Write(4,*) "TC# ", ntc Do itc=1,ntc Write(4,*) " ---------------------------------- " Write(4,*) "TC#", itc Write(4,*) "Num_Obs:", new_tc_step(itc) Do istep=1,new_tc_step(itc) Write(4,"(2(I4,3x),I4,2x,I4,2x,3(F6.1,2x))") new_tc_year(itc,istep),new_tc_mon(itc,istep),& new_tc_day(itc,istep), new_tc_hour(itc,istep), new_tc_lon(itc,istep), new_tc_lat(itc,istep) End do End do Close(4) End