program jslapd * c *Purpose: convert archive to generic format for daily data. * c *Declare Variables character dstn*3, ver*1 character afile*9, pfile*9 character head*19, hbuf*4, hrec*9 * dimension idar(12) equivalence ( idar2, idar1 ) * data afile / 'dsssv.dat' / data pfile / 'dvsss.one' / * call userin( dstn, ver ) * c *build filenames and open. afile(2:4) = dstn afile(5:5) = ver pfile(2:2) = ver pfile(3:5) = dstn open(unit=10,file=afile,status='old') open(unit=12,file=pfile,status='new') * c *read in and write out header read(10,100) hbuf, head, istart, iend 100 format(a4,1x,a19,20x,i4,1x,i4) hrec(1:3) = hbuf hrec(4:9) = head(1:6) write(12,200) head 200 format(1x,a19,' Daily Values from 119-point Filter') * c *read in one year at a time do 5 iy = istart, iend ijd = 1 do 10 j = 1, 30 read(10,300) iyear, (idar(i), i=1,12) do 22 i = 1, 12 call jultor( ijd, iyear, im, id ) write(12, 330) iyear, im, id, idar(i) ijd = ijd + 1 22 continue 10 continue c c *get last record of year, length depends if leapyear read(10,300) iyear, (idar(i), i=1,12) if( mod(iyear,4) .eq. 0 ) then do 24 i = 1, 6 call jultor( ijd, iyear, im, id ) write(12, 336) iyear, im, id, idar(i) ijd = ijd + 1 24 continue else do 26 i = 1, 5 call jultor( ijd, iyear, im, id ) write(12, 335) iyear, im, id, idar(i) ijd = ijd + 1 26 continue endif * 5 continue c 300 format(10x,i4,6x,12i5) 330 format(i4,1x,i2,1x,i2,1x,12i5) 335 format(i4,1x,i2,1x,i2,1x,5i5) 336 format(i4,1x,i2,1x,i2,1x,6i5) * close(10) close(12) stop 'cowabunga' end * subroutine userin( dstn, ver ) * character dstn*3, ver*1 * write(6,100) 100 format(///////' Convert JASL archive to generic format,',/, + ' Date plus one daily value per line ',//, + ' NOTE: ',/, +' Output file extension is ONE; filename root same as ',/, +' JASL Processing Format convention ',/, +///) * write(6,300) 300 format(/,' Enter station # : ',$) read(5,'(a)') dstn * write(6,500) 500 format(/,' Enter series version : ',$) read(5,'(a)') ver * return end SUBROUTINE JULTOR ( ij, iy, im, id ) c c *Purpose: from julian day and year (iy), find month (im), and day (id) c NOTE: the day count from January 1. Note Jan 1 = 1. c dimension imcnt(12) data imcnt / 31, 28, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31 / * imcnt(2) = 28 if( mod(iy,100) .ne. 0 ) then if( mod(iy,4) .eq. 0 ) imcnt(2) = 29 endif imsum = 0 do 10 i = 1, 12 imsum = imsum + imcnt(i) if( ij .le. imsum) then im = i id = ij - ( imsum - imcnt(i) ) return endif 10 continue c return end