77 INTEGER,
PRIVATE :: PRFTB(8)
78 LOGICAL,
PRIVATE :: FLPROF = .false.
83 SUBROUTINE tick21 ( TIME, DTIME )
139 INTEGER,
INTENT(INOUT) :: TIME(2)
140 REAL,
INTENT(IN) :: DTIME
145 INTEGER :: NYMD, NHMS, NSEC
147 INTEGER,
SAVE :: IENT = 0
153 CALL strace (ient,
'TICK21')
160 IF (dtime.EQ.0.)
THEN
167 nsec = nhms/10000*3600 + mod(nhms,10000)/100* 60 + &
168 mod(nhms,100) + nint(dtime)
173 IF (nsec.GE.86400)
THEN
180 IF (nsec.LT.00000)
THEN
186 nhms = nsec/3600*10000 + mod(nsec,3600)/60*100 + mod(nsec,60)
197 INTEGER FUNCTION iymd21 ( NYMD ,M )
252 INTEGER,
INTENT(IN) :: nymd, m
257 INTEGER :: ny, nm, nd
258 INTEGER,
SAVE :: ndpm(12)
260 INTEGER,
SAVE :: ient = 0
267 CALL strace (ient,
'IYMD21')
272 IF (trim(
caltype) .EQ.
'360_day' )
THEN
273 ndpm=(/ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 /)
275 ndpm=(/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /)
281 nm = mod(nymd,10000) / 100
282 nm = min( 12 , max(1,nm) )
283 nd = mod(nymd,100) + m
285 IF (trim(
caltype) .EQ.
'standard' )
THEN
286 leap = mod(ny,400).EQ.0 .OR. &
287 ( mod(ny,4).EQ.0 .AND. mod(ny,100).NE.0 )
301 IF (nm.EQ.2 .AND. leap) nd = 29
306 IF (nd.EQ.29 .AND. nm.EQ.2 .AND. leap)
GO TO 20
310 IF (nd.GT.ndpm(nm))
THEN
320 iymd21 = ny*10000 + nm*100 + nd
332 REAL function
dsec21 ( time1, time2 )
391 INTEGER,
INTENT(IN) :: time1(2), time2(2)
396 INTEGER :: ny1, nd1, ny2, nd2, ns1, ns2, ns, &
399 INTEGER,
SAVE :: ient = 0
405 CALL strace (ient,
'DSEC21')
410 ny1 = time1(1) / 10000
412 ns1 = time1(2)/10000*3600 + mod(time1(2),10000)/100*60 + &
415 ny2 = time2(1) / 10000
417 ns2 = time2(2)/10000*3600 + mod(time2(2),10000)/100*60 + &
424 IF ( ny1 .NE. ny2 )
THEN
425 nst = sign( 1 , ny2-ny1 )
427 IF (ny1.EQ.ny2)
GOTO 200
430 IF (trim(
caltype) .EQ.
'360_day' )
THEN
431 nd = nd +
mymd21( ny2*10000 + 1230 )
433 nd = nd +
mymd21( ny2*10000 + 1231 )
436 IF (trim(
caltype) .EQ.
'360_day' )
THEN
437 nd = nd -
mymd21( ny2*10000 + 1230 )
439 nd = nd -
mymd21( ny2*10000 + 1231 )
451 dsec21 = real(ns) + 86400.*real(nd)
459 INTEGER FUNCTION mymd21 ( NYMD )
513 INTEGER,
INTENT(IN) :: nymd
518 INTEGER :: ny, nm, nd
519 INTEGER,
SAVE :: ndpm(12)
521 INTEGER,
SAVE :: ient = 0
528 CALL strace (ient,
'MYMD21')
533 IF (trim(
caltype) .EQ.
'360_day' )
THEN
534 ndpm=(/ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 /)
536 ndpm=(/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /)
542 nm = mod(nymd,10000) / 100
545 IF (trim(
caltype) .EQ.
'standard' )
THEN
546 leap = mod(ny,400).EQ.0 .OR. &
547 ( mod(ny,4).EQ.0 .AND. mod(ny,100).NE.0 )
554 IF (nm.GT.2 .AND. leap) nd = nd + 1
557 IF (nm.LE.1)
GO TO 60
575 REAL function
tdiff ( t1, t2 )
642 INTEGER,
INTENT(IN) :: t1(8), t2(8)
647 INTEGER :: a1, b1, c1, d1, a2, b2, c2, d2
650 INTEGER,
SAVE :: ient = 0
656 CALL strace (ient,
'TDIFF')
662 b1 = t1(1) + 4800 - a1
663 c1 = t1(2) + 12*a1 - 3
664 d1 = t1(3) + (153*c1 + 2)/5 + 365*b1 + b1/4 -b1/100 + b1/400
665 e1 = 3600.0*t1(5) + 60.0*(t1(6)-t1(4)) + t1(7) + t1(8)/1000.0
668 b2 = t2(1) + 4800 - a2
669 c2 = t2(2) + 12*a2 - 3
670 d2 = t2(3) + (153*c2 + 2)/5 + 365*b2 + b2/4 -b2/100 + b2/400
671 e2 = 3600.0*t2(5) + 60.0*(t2(6)-t2(4)) + t2(7) + t2(8)/1000.0
673 tdiff = 86400.0*(d2-d1) + e2-e1
681 SUBROUTINE stme21 ( TIME , DTME21 )
722 INTEGER,
INTENT(IN) :: TIME(2)
723 CHARACTER,
INTENT(OUT) :: DTME21*23
728 INTEGER :: IY, IMO, ID, IH, IMI, IS
732 IF ( time(1) .LT. 0 )
THEN
733 dtme21 =
' date and time not set.'
736 imo = mod(time(1),10000) / 100
737 id = mod(time(1),100)
739 imi = mod(time(2),10000) / 100
740 is = mod(time(2),100)
741 WRITE (dtme21,900) iy, imo, id, ih, imi, is
748 900
FORMAT (i4.4,
'/',i2.2,
'/',i2.2,
' ',i2.2,
':',i2.2,
':',i2.2,
' UTC')
755 INTEGER FUNCTION julday(id,mm,iyyy)
771 INTEGER(KIND=4),
INTENT(in) :: id,mm,iyyy
776 INTEGER(KIND=4),
PARAMETER :: igreg=15+31*(10+12*1582)
777 INTEGER(KIND=4) ja,jm,jy
779 IF (jy.EQ.0)
WRITE(6,*)
'There is no zero year !!'
787 julday=int(365.25*jy)+int(30.6001*jm)+id+1720995
788 IF (id+31*(mm+12*iyyy).GE.igreg)
THEN
799 SUBROUTINE caldat(julian,id,mm,iyyy)
817 INTEGER(KIND=4),
INTENT(in) :: julian
818 INTEGER(KIND=4),
INTENT(out) :: id,mm,iyyy
819 INTEGER(KIND=4),
PARAMETER :: IGREG=2299161
820 INTEGER(KIND=4) ja,jalpha,jb,jc,jd,je
821 if (julian.GE.igreg)
THEN
822 jalpha=int(((julian-1867216)-0.25)/36524.25)
823 ja=julian+1+jalpha-int(0.25*jalpha)
828 jc=int(6680.+((jb-2439870)-122.1)/365.25)
829 jd=365*jc+int(0.25*jc)
830 je=int((jb-jd)/30.6001)
831 id=jb-jd-int(30.6001*je)
833 IF (mm.GT.12) mm=mm-12
835 IF (mm.GT.2) iyyy=iyyy-1
836 IF (iyyy.LE.0) iyyy=iyyy-1
896 INTEGER,
INTENT(INOUT) :: time(2)
901 INTEGER :: iy,imo,id,ih,imi,is
902 INTEGER(KIND=4) :: jday
904 INTEGER,
SAVE :: ient = 0
910 CALL strace (ient,
'TICK21')
916 imo = mod(time(1),10000) / 100
917 id = mod(time(1),100)
919 imi = mod(time(2),10000) / 100
920 is = mod(time(2),100)
922 time2hours = 24.d0*dfloat(jday)+dfloat(ih)+dfloat(is+imi*60)/3600.d0
979 CALL date_and_time ( values=prftb )
989 SUBROUTINE prtime ( PTIME )
1047 REAL,
INTENT(OUT) :: PTIME
1058 IF ( .NOT. flprof )
RETURN
1060 CALL date_and_time ( values=prfta )
1061 ptime =
tdiff( prftb,prfta )
1071 SUBROUTINE t2d(TIME,DAT,IERR)
1115 INTEGER,
INTENT(IN) :: TIME(2)
1116 INTEGER,
INTENT(OUT) :: DAT(8)
1117 INTEGER,
INTENT(OUT) :: IERR
1124 INTEGER,
SAVE :: IENT = 0
1130 CALL strace (ient,
'T2D')
1133 dat(1)=time(1)/10000
1134 dat(2)=(time(1)-dat(1)*10000)/100
1135 dat(3)=time(1)-dat(1)*10000-100*dat(2)
1137 dat(5)=time(2)/10000
1138 dat(6)=(time(2)-dat(5)*10000)/100
1139 dat(7)=time(2)-dat(5)*10000-100*dat(6)
1152 SUBROUTINE d2t(DAT,TIME,IERR)
1196 INTEGER,
INTENT(IN) :: DAT(8)
1197 INTEGER,
INTENT(OUT) :: TIME(2)
1198 INTEGER,
INTENT(OUT) :: IERR
1205 INTEGER,
SAVE :: IENT = 0
1211 CALL strace (ient,
'D2T')
1214 time(1)=dat(1)*10000+dat(2)*100+dat(3)
1215 time(2)=dat(5)*10000+dat(6)*100+dat(7)
1226 SUBROUTINE d2j(DAT,JULIAN,IERR)
1287 INTEGER,
INTENT(IN) :: DAT(8)
1288 DOUBLE PRECISION,
INTENT(OUT) :: JULIAN
1289 INTEGER,
INTENT(OUT) :: IERR
1296 INTEGER :: YEAR, MONTH, DAY, UTC, HOUR, MINUTE
1298 INTEGER :: A, Y, M, JDN
1300 INTEGER,
SAVE :: IENT = 0
1306 CALL strace (ient,
'D2J')
1315 second = dat(7)-utc+dat(8)/1000.d0
1317 julian = -huge(99999)
1321 IF(
caltype .EQ.
"360_day" )
THEN
1322 julian = (year - 1800) * 360.0 + &
1323 (month - 1) * 30.0 + &
1326 minute / 1440.0_8 + &
1334 IF(year==0 .or. year .lt. -4713)
THEN
1347 jdn=day + (153*m+2)/5 + 365*y + y/4 - y/100 + y/400 - 32045
1350 julian=dble(jdn) + dble(hour-12)/24.0d0 + dble(minute)/1440.0d0 + dble(second)/86400.0d0
1353 IF(julian.lt.0.d0)
THEN
1367 SUBROUTINE j2d(JULIAN,DAT,IERR)
1418 DOUBLE PRECISION,
INTENT(IN) :: JULIAN
1419 INTEGER,
INTENT(OUT) :: DAT(8)
1420 INTEGER,
INTENT(OUT) :: IERR
1426 REAL :: SECDAY=86400.0d0
1427 INTEGER :: TIMEZONE(8), TZ
1430 INTEGER :: YEAR, MONTH, DAY, HOUR, MINUTE
1431 INTEGER :: JALPHA,JA,JB,JC,JD,JE,IJUL
1433 INTEGER,
SAVE :: IENT = 0
1439 CALL strace (ient,
'J2D')
1443 IF(
caltype .EQ.
'standard' .AND. julian .LT. 0.d0)
THEN
1456 second=sngl((julian-dble(ijul))*secday)
1457 second=second+(tz*60)
1459 IF(
caltype .EQ.
"standard")
THEN
1460 IF(second.GE.(secday/2.0d0))
THEN
1462 second=second-(secday/2.0d0)
1464 second=second+(secday/2.0d0)
1468 IF(second.GE.secday)
THEN
1470 second=second-secday
1473 minute=int(second/60.0)
1474 second=second-float(minute*60)
1476 minute=minute-hour*60
1478 IF(
caltype .EQ.
'360_day')
THEN
1480 year = int(julian / 360) + 1800
1481 month = mod(int(julian / 30), 12) + 1
1482 day = mod(int(julian), 30) + 1
1485 jalpha=idint((dble(ijul-1867216)-0.25d0)/36524.25d0)
1486 ja=ijul+1+jalpha-idint(0.25d0*dble(jalpha))
1490 jc=idint(6680.d0+(dble(jb-2439870)-122.1d0)/365.25d0)
1491 jd=365*jc+idint(0.25d0*dble(jc))
1492 je=idint(dble(jb-jd)/30.6001d0)
1493 day=jb-jd-idint(30.6001d0*dble(je))
1496 IF(month.GT.12)
THEN
1517 dat(8)=int((second-int(second))*1000.0)
1526 DOUBLE PRECISION FUNCTION tsub ( T1, T2 )
1571 INTEGER,
INTENT(IN) :: t1(8), t2(8)
1576 INTEGER :: a1, b1, c1, d1, a2, b2, c2, d2
1577 DOUBLE PRECISION :: e1, e2
1579 INTEGER,
SAVE :: ient = 0
1585 CALL strace (ient,
'TSUB')
1590 IF (trim(
caltype) .EQ.
'360_day' )
THEN
1591 a1 = (t2(1)-t1(1))*360 + (t2(2)-t1(2))*30 + (t2(3)-t1(3))
1593 e1 = 3600.0*t1(5) + 60.0*(t1(6)-t1(4)) + t1(7) + t1(8)/1000.0
1594 e2 = 3600.0*t2(5) + 60.0*(t2(6)-t2(4)) + t2(7) + t2(8)/1000.0
1596 tsub = dble(a1) + (e2-e1)/86400.0d0
1599 b1 = t1(1) + 4800 - a1
1600 c1 = t1(2) + 12*a1 - 3
1601 d1 = t1(3) + (153*c1 + 2)/5 + 365*b1
1602 IF (trim(
caltype) .EQ.
'standard' )
THEN
1603 d1 = d1 + b1/4 -b1/100 + b1/400
1605 e1 = 3600.0*t1(5) + 60.0*(t1(6)-t1(4)) + t1(7) + t1(8)/1000.0
1608 b2 = t2(1) + 4800 - a2
1609 c2 = t2(2) + 12*a2 - 3
1610 d2 = t2(3) + (153*c2 + 2)/5 + 365*b2
1611 IF (trim(
caltype) .EQ.
'standard' )
THEN
1612 d2 = d2 + b2/4 -b2/100 + b2/400
1614 e2 = 3600.0*t2(5) + 60.0*(t2(6)-t2(4)) + t2(7) + t2(8)/1000.0
1616 tsub = dble(d2-d1) + (e2-e1)/86400.0d0
1626 DOUBLE PRECISION FUNCTION tsubsec ( T1, T2 )
1672 INTEGER,
INTENT(IN) :: t1(8), t2(8)
1677 INTEGER(KIND=8) :: a1, b1, c1, d1, a2, b2, c2, d2
1678 INTEGER(KIND=8) :: e1, e2
1680 INTEGER,
SAVE :: ient = 0
1686 CALL strace (ient,
'TSUBSEC')
1689 IF (trim(
caltype) .EQ.
'360_day' )
THEN
1690 a1 = (t2(1)-t1(1))*360 + (t2(2)-t1(2))*30 + (t2(3)-t1(3))
1692 e1 = 3600.0*t1(5) + 60.0*(t1(6)-t1(4)) + t1(7) + nint(t1(8) / 1000.0)
1693 e2 = 3600.0*t2(5) + 60.0*(t2(6)-t2(4)) + t2(7) + nint(t2(8) / 1000.0)
1695 tsubsec = a1 * 86400 + (e2-e1)
1698 b1 = t1(1) + 4800 - a1
1699 c1 = t1(2) + 12*a1 - 3
1700 d1 = t1(3) + (153*c1 + 2)/5 + 365*b1
1701 IF (trim(
caltype) .EQ.
'standard' )
THEN
1702 d1 = d1 + b1/4 -b1/100 + b1/400
1704 e1 = 3600.0*t1(5) + 60.0*(t1(6)-t1(4)) + t1(7) + nint(t1(8) / 1000.0)
1707 b2 = t2(1) + 4800 - a2
1708 c2 = t2(2) + 12*a2 - 3
1709 d2 = t2(3) + (153*c2 + 2)/5 + 365*b2
1710 IF (trim(
caltype) .EQ.
'standard' )
THEN
1711 d2 = d2 + b2/4 -b2/100 + b2/400
1713 e2 = 3600.0*t2(5) + 60.0*(t2(6)-t2(4)) + t2(7) + nint(t1(8) / 1000.0)
1715 tsubsec = (d2-d1)*86400 + (e2-e1)
1727 SUBROUTINE u2d(UNITS,DAT,IERR)
1776 CHARACTER(*),
INTENT(IN) :: UNITS
1777 INTEGER,
INTENT(OUT) :: DAT(8)
1778 INTEGER,
INTENT(OUT) :: IERR
1785 INTEGER,
SAVE :: IENT = 0
1791 CALL strace (ient,
'U2D')
1800 IF (index(units,
"seconds").NE.0)
THEN
1802 IF (index(units,
"-", .true.).EQ.22)
THEN
1803 READ(units(15:18),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1804 READ(units(20:21),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1805 READ(units(23:24),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1806 READ(units(26:27),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1807 READ(units(29:30),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1808 READ(units(32:33),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1810 ELSE IF (index(units,
"-", .true.).EQ.21)
THEN
1811 READ(units(15:18),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1812 READ(units(20:20),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1813 READ(units(22:22),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1815 IF (index(units,
":", .false.).EQ.25)
THEN
1816 READ(units(24:24),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1817 READ(units(26:26),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1818 READ(units(28:28),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1820 ELSE IF (index(units,
":", .false.).EQ.26)
THEN
1821 READ(units(24:25),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1822 READ(units(27:28),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1823 READ(units(30:31),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1832 ELSE IF (index(units,
"days").NE.0)
THEN
1834 IF (index(units,
"-", .true.).EQ.19)
THEN
1835 READ(units(12:15),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1836 READ(units(17:18),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1837 READ(units(20:21),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1838 READ(units(23:24),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1839 READ(units(26:27),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1840 READ(units(29:30),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1842 ELSE IF (index(units,
"-", .true.).EQ.18)
THEN
1843 READ(units(12:15),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1844 READ(units(17:17),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1845 READ(units(19:19),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1847 IF (index(units,
":", .false.).EQ.22)
THEN
1848 READ(units(21:21),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1849 READ(units(23:23),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1850 READ(units(25:25),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1852 ELSE IF (index(units,
":", .false.).EQ.23)
THEN
1853 READ(units(21:22),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1854 READ(units(24:25),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1855 READ(units(27:28),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1864 ELSE IF (index(units,
"hours").NE.0)
THEN
1866 IF (index(units,
"-", .true.).EQ.20)
THEN
1867 READ(units(13:16),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1868 READ(units(18:19),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1869 READ(units(21:22),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1870 READ(units(24:25),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1871 READ(units(27:28),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1872 READ(units(30:31),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1874 ELSE IF (index(units,
"-", .true.).EQ.19)
THEN
1875 READ(units(13:16),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1876 READ(units(18:18),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1877 READ(units(20:20),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1879 IF (index(units,
":", .false.).EQ.23)
THEN
1880 READ(units(22:22),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1881 READ(units(24:24),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1882 READ(units(26:26),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1884 ELSE IF (index(units,
":", .false.).EQ.24)
THEN
1885 READ(units(22:23),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1886 READ(units(25:26),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1887 READ(units(28:29),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1896 ELSE IF (index(units,
"minutes").NE.0)
THEN
1898 IF (index(units,
"-", .true.).EQ.22)
THEN
1899 READ(units(15:18),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1900 READ(units(20:21),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1901 READ(units(23:24),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1902 READ(units(26:27),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1903 READ(units(29:30),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1904 READ(units(32:33),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1906 ELSE IF (index(units,
"-", .true.).EQ.21)
THEN
1907 READ(units(15:18),
'(I4.4)',
END=804,ERR=805,IOSTAT=IERR) DAT(1)
1908 READ(units(20:20),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(2)
1909 READ(units(22:22),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(3)
1911 IF (index(units,
":", .false.).EQ.25)
THEN
1912 READ(units(24:24),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1913 READ(units(26:26),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1914 READ(units(28:28),
'(I1.1)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1916 ELSE IF (index(units,
":", .false.).EQ.26)
THEN
1917 READ(units(24:25),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(5)
1918 READ(units(27:28),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(6)
1919 READ(units(30:31),
'(I2.2)',
END=804,ERR=805,IOSTAT=IERR) DAT(7)
1937 WRITE (ndse,1004) trim(units)
1941 WRITE (ndse,1005) ierr
1949 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN W3TIMEMD : '/ &
1950 ' PREMATURE END OF TIME ATTRIBUTE '/ &
1952 ' DIFFERS FROM CONVENTIONS ISO8601 '/ &
1953 ' XXX since YYYY-MM-DD hh:mm:ss'/ &
1954 ' XXX since YYYY-M-D h:m:s'/ &
1955 ' XXX since YYYY-M-D hh:mm:ss'/)
1957 1005
FORMAT (/
' *** WAVEWATCH III ERROR IN W3TIMEMD : '/ &
1958 ' ERROR IN READING OF TIME ATTRIBUTE '/ &
1960 ' DIFFERS FROM CONVENTIONS ISO8601 '/ &
1961 ' XXX since YYYY-MM-DD hh:mm:ss'/ &
1962 ' XXX since YYYY-M-D h:m:s'/ &
1963 ' XXX since YYYY-M-D hh:mm:ss'/ &
1977 SUBROUTINE t2iso(TIME,ISODT)
2023 INTEGER,
INTENT(IN) :: TIME(2)
2024 CHARACTER(LEN=32),
INTENT(OUT) :: ISODT
2030 INTEGER,
SAVE :: IENT = 0
2036 CALL strace (ient,
'T2ISO')
2040 WRITE(isodt,
'(I4,"-",I2.2,"-",I2.2,"T",I2.2,":",I2.2,":",I2.2)') &
2042 mod(time(1) / 100, 100), &
2043 mod(time(1), 100), &
2045 mod(time(2) / 100, 100), &
2050 END SUBROUTINE t2iso