UH SEA LEVEL CENTER/JOINT ARCHIVE FOR SEA LEVEL 'ARCHIVING' FORMAT FOR MONTHLY SEA LEVEL DATA FILE NAME CONVENTION: - INHOUSE METHOD: Each file is given a name msssv.dat where sss denotes the the UHSLC/JASL inhouse station number and v denotes the version. For example, m003b.dat is the 1987 observed daily data file in the permanent archive for Baltra-B. Baltra is a station with more than one independent series due to a station replacement that is not linked to the bench marks of the original station. FORMAT DESCRIPTION: A header preceeds each independent series for every station followed by two fixed-length, 80-byte records per year. Each year is complete and consists of either data or missing data flags (9999). Following each monthly value is a count of the number of missing days in the given month prior to decimation. A monthly value is obtained from the daily values if 7 or less days are missing. The end of each record is blank-filled. The unique header for each file is coded as: field bytes length comment ----------------- ------- ------ ------------------------------------ station number 1-3 3 exactly 3 digits station version 4 1 letter from A to Z station name 6-23 18 Abbreviated if necessary region/country 25-43 19 Abbreviated if necessary start year 45-48 4 dash (-) 49 1 for clarity end year 50-53 4 latitude 55-60 6 degrees, minutes, tenths (implied decimal), and hemisphere longitude 62-68 7 degrees, minutes, tenths (implied decimal), and hemisphere decimation method 70 1 Coded as 1 : filtered 2 : simple average of all daily values of a month 3 : other reference offset 72-76 5 constant offset to be added to each each data value for data to be relative to tide staff zero or primary datum in same units as data reference code 77 1 R = data referenced to datum X = data not referenced to datum units 79-80 2 always millimeters, MM The data records are coded as: field bytes length comment ----------------- ------- ------ ------------------------------------ station number 1-3 3 exactly 3 digits station version 4 1 letter from A to Z station name 6-9 4 Abbreviated if necessary year 11-14 4 yearly record count 16 1 either a 1 or 2 blank 17 1 six of the following sequence as: blank 18 1 sea level data 19-23 5 1st or 7th monthly value of year blank 24 1 missing day count 25-26 2 " " count . . . . blank 63 1 sea level data 64-68 5 6th or 12th monthly value of year blank 69 1 missing day count 70-71 2 " " count blanks 72-80 8 For example: 029A Kapingamarangi Fd St Micronesia 1978-1987 01059N 154466E 1 00000R MM 029A Kapi 1978 1 9999 31 9999 28 9999 31 9999 30 9999 31 9999 30 029A Kapi 1978 2 9999 31 9999 31 9999 08 1048 00 1152 00 993 00 029A Kapi 1979 1 959 00 911 00 9999 29 992 00 947 00 918 03 029A Kapi 1979 2 951 00 955 00 929 00 1050 06 1033 00 1081 00 . . . . . . 029A Kapi 1986 1 1011 00 1058 00 1061 00 1039 00 1045 00 939 00 029A Kapi 1986 2 973 00 1004 00 1002 04 948 00 1054 00 983 00 029A Kapi 1987 1 830 00 931 00 918 00 906 00 862 00 806 00 029A Kapi 1987 2 844 00 821 00 803 00 9999 09 937 00 956 00 The following FORTRAN source code can be utilized to convert to a two-column output (year.fraction data). The code may need minor modifications, depending on the compiler. c.. rqdsmon.f c.. read in "Archive" format monthly sea level data, create two column output c.. time( year ) and height (in millimeter) missing height is 9999 c.. input (infile) : input file name (e.g. m001b.dat) c.. output(outfile) : internally created (e.g. m001b.out) character*50 infile, outfile, itle character*5 fname real*8 tt dimension isl(12) C*** if command line input is not allowed then replace the following 2 statementsC** write(6,*) ' put the input file name e.g. m001.dat ' C** read(5,'(a50)') infile write(6,*) ' put the input file name e.g. m001b.dat ' read(5,'(a50)') infile C iarg=1 C call getarg(iarg, infile) open(unit=15,file=infile) c. read in the headder record read(15,fmt='(a50)') itle write(6,fmt='(a50)') itle read(infile,' (a5) ') fname write(outfile,8000) fname 8000 format( a5,'.out') open(unit=16, file=outfile) 0001 read(15, 7000, end=9000) iyear,ic1,(isl(i),i=1,06) read(15, 7000, end=9000) jyear,ic2,(isl(i),i=7,12) 7000 format(10x,i4,i2,1x,6(2x,i4,3x) ) if(ic1.ne. 1) go to 8900 if(iyear.ne.jyear) go to 8900 do 10 mm=1,12 tt=dble(iyear)+ dble((mm-0.5)/12.) write(16,*) tt, isl(mm) 0010 continue go to 0001 8900 write(6,*) ' record out of order' 9000 stop end