PROGRAM UKMET C C** THIS PROGRAM CONVERTS TROPICAL CYCLONE TRACK FORECASTS FROM C** UKMET GTS BULLETINS TO A-DECK FORMATTED LINES C include 'dataformats.inc' c REAL FLAT(11), FLON(11) CHARACTER CLAT(11), CLON(11) dimension iukmet(11,3) C CHARACTER*2 HOUR character*4 techname CHARACTER*8 STRMID, uc_strmid, ustrmid CHARACTER*10 aymdh, FYMDH, BYMDH character*50 input_file CHARACTER*70 FLNAME CHARACTER*80 ULINE c type ( AID_DATA ) comRcd, tauData C C** ZERO THE FORECAST LATITUDES AND LONGITUDES C DO I = 1,11 FLAT(I) = 0.0 FLON(I) = 0.0 do k = 1,3 iukmet(i,k) = 0 enddo enddo c c** Get the command line parameter c call getarg ( 1, input_file ) c strmid = input_file(1:8) uc_strmid = strmid call upcase ( uc_strmid, 8 ) c c** Open the input file c open ( 21, file=input_file, status='old', iostat=ios, err=1010 ) c c** Read in the compute data and close the file c call getARecord (21, "CARQ", comRcd, istat ) if ( istat .eq. 0 ) goto 1020 c close ( 21 ) c c** Read in the current data c call getSingleTAU ( comRcd, 0, tauData, istat ) if ( istat .ne. 1 ) goto 1030 c aymdh = tauData%aRecord(1)%DTG hour = aymdh(9:10) c C** Determine the FORECAST TIME AND CREATE THE UKMET FILE NAME C IF ( HOUR .EQ. '00' ) CALL dtgmod ( aymdh, -12, FYMDH, istat ) IF ( HOUR .EQ. '06' ) CALL dtgmod ( aymdh, -6, FYMDH, istat ) IF ( HOUR .EQ. '12' ) CALL dtgmod ( aymdh, -12, FYMDH, istat ) IF ( HOUR .EQ. '18' ) CALL dtgmod ( aymdh, -6, FYMDH, istat ) WRITE ( *, '( 5X,A10 )' ) FYMDH C c** Set the correct path for the ukmet bulletin on the IBM-SP c FLNAME = '/u/Alison.Krautkramer/data'// & '/ukmet_tropical_storms' CCC FLNAME = '/dcom/us007003/'//fymdh(1:8)// CCC & '/wtxtbul/ukmet_tropical_storms' ! Use for IBM CCC flname = 'ukmet.msg' ! Use for LINUX CCC flname = 'ukmet_tropical_storms' ! Use for LINUX WRITE (*,'(A)') FLNAME C C** Open the UKMET message file C OPEN ( 22, FILE=FLNAME, STATUS='OLD', IOSTAT=IOS, ERR=1040 ) C C** READ UKMET FILE C 10 READ ( 22, '(A)', END=200, IOSTAT=IOS, ERR=1050 ) ULINE WRITE ( *, '( '' read 1 '', A )' ) ULINE C C** SEARCH FOR THE STORM ID C IF ( INDEX( ULINE, 'ATCF' ) .EQ. 0 ) GO TO 10 C LOCAL = INDEX( ULINE, 'AL' ) LOCEP = INDEX( ULINE, 'EP' ) LOCCP = INDEX( ULINE, 'CP' ) C IF ( LOCAL .NE. 0 ) THEN ustrmid = ULINE( LOCAL:LOCAL + 7 ) ELSEIF ( LOCEP .NE. 0 ) THEN ustrmid = ULINE( LOCEP:LOCEP + 7 ) ELSEIF ( LOCCP .NE. 0 ) THEN ustrmid = ULINE( LOCCP:LOCCP + 7 ) ELSE GO TO 10 ENDIF C WRITE ( *,'( 3(5X,A8) )' ) STRMID, uc_strmid, ustrmid IF ( uc_strmid .NE. ustrmid ) GO TO 10 C 20 READ ( 22, '(A)', END=100, IOSTAT=IOS, ERR=1050 ) ULINE WRITE ( *, '( '' read 2 '',A )' ) ULINE C C** SEARCH FOR THE CORRECT DTG C IF (ULINE(4:6).NE.'UTC') GO TO 20 C BYMDH = ULINE(14:17)//ULINE(11:12)//ULINE(8:9)//ULINE(2:3) WRITE ( *, '( 2(5X,A10) )' ) FYMDH, BYMDH IF ( FYMDH .NE. BYMDH ) GO TO 10 C N = 1 READ ( ULINE(20:31), '(F4.1,1A,1X,F5.1,1A)', ERR=100 ) & FLAT(N), CLAT(N), FLON(N), CLON(N) print *, "-->", ULINE(20:31) iukmet( 1, 1 ) = int( flat(1)*10.0 + 0.5 ) iukmet( 1, 2 ) = int( flon(1)*10.0 + 0.5 ) if ( CLAT(N) .EQ. 'S' ) iukmet( 1, 2 ) = -1 * iukmet( 1, 1 ) if ( CLON(N) .EQ. 'E' ) iukmet( 1, 2 ) = -1 * iukmet( 1, 2 ) N = 2 40 READ ( 22, '(A)', END=100, IOSTAT=IOS, ERR=1050 ) ULINE WRITE ( *,'( '' read 3** '',A )' ) ULINE(20:31) C C** READ THE POSITION FORECASTS C READ ( ULINE(20:31), '(F4.1,1A,1X,F5.1,1A)', ERR=100 ) & FLAT(N), CLAT(N), FLON(N), CLON(N) iukmet( n, 1 ) = int( flat(n)*10.0 + 0.5 ) iukmet( n, 2 ) = int( flon(n)*10.0 + 0.5 ) if ( CLAT(N) .EQ. 'S' ) iukmet( n, 1 ) = -1 * iukmet( n, 1 ) if ( CLON(N) .EQ. 'E' ) iukmet( n, 2 ) = -1 * iukmet( n, 2 ) N = N + 1 IF ( N .EQ. 12 ) GO TO 100 GO TO 40 C 100 CLOSE ( 22 ) C WRITE (*,'('' FCST LAT/LON '',2F10.2,1a)') & (FLAT(I),FLON(I),CLON(I), I =1,10) C C** OPEN, WRITE TO AND CLOSE THE OUTPUT FILE C OPEN ( 31, FILE='ukmet.dat', STATUS='UNKNOWN' ) C techname = 'EGRR' call newWriteAidRcd ( 31, strmid, fymdh, techname, iukmet ) C CLOSE (31) C STOP ' UKMET IS FINISHED AND AN UKMET FORECAST WAS FOUND!' C 200 CLOSE (22) C STOP ' UKMET IS FINISHED AND NO UKMET FORECAST WAS FOUND?' C C** FILE ERROR MESSAGES C 1010 PRINT *,' ERROR - opening file = ', input_file, ' ios = ', ios STOP C 1020 PRINT *,' ERROR - reading file = ', input_file, ' istat = ', istat STOP C 1030 PRINT *,' ERROR - reading data = ', input_file, ' istat = ', istat STOP C 1040 PRINT *,' ERROR - opening UKMET FILE = ', flname, ' ios = ', ios STOP C 1050 PRINT *,' ERROR - reading UKMET FILE = ', flname, ' ios = ', ios STOP C END