--- trunk/IOIPSL/Calendar/ymds2ju.f 2014/04/01 15:50:48 93 +++ trunk/IOIPSL/Calendar/ymds2ju.f90 2019/09/12 21:22:46 335 @@ -4,7 +4,7 @@ contains - SUBROUTINE ymds2ju (year, month, day, sec, julian) + SUBROUTINE ymds2ju(year, month, day, sec, julian) ! Converts year, month, day and seconds into a julian day @@ -30,47 +30,37 @@ INTEGER, INTENT(IN):: year, month, day REAL, INTENT(IN):: sec - REAL, INTENT(OUT):: julian + double precision, INTENT(OUT):: julian ! Local: - - INTEGER:: julian_day - REAL:: julian_sec - INTEGER:: jd, m, y, d, ml + INTEGER jd, ml !-------------------------------------------------------------------- lock_unan = .TRUE. - m = month - y = year - d = day - ! We deduce the calendar from the length of the year as it ! is faster than an INDEX on the calendar variable. ! Gregorian IF ( (un_an > 365.0).AND.(un_an < 366.0) ) THEN - jd = (1461*(y+4800+INT(( m-14 )/12)))/4 & - & +(367*(m-2-12*(INT(( m-14 )/12))))/12 & - & -(3*((y+4900+INT((m-14)/12))/100))/4 & - & +d-32075 + jd = (1461*(year+4800+INT(( month-14 )/12)))/4 & + +(367*(month-2-12*(INT(( month-14 )/12))))/12 & + -(3*((year+4900+INT((month-14)/12))/100))/4 & + +day-32075 jd = jd-2299160 ! No leap or All leap ELSE IF (ABS(un_an-365.0) <= EPSILON(un_an) .OR. & - & ABS(un_an-366.0) <= EPSILON(un_an)) THEN - ml = SUM(mon_len(1:m-1)) - jd = y*INT(un_an)+ml+(d-1) + ABS(un_an-366.0) <= EPSILON(un_an)) THEN + ml = SUM(mon_len(1:month-1)) + jd = year*INT(un_an)+ml+(day-1) ! Calendar with regular month ELSE ml = INT(un_an)/12 - jd = y*INT(un_an)+(m-1)*ml+(d-1) + jd = year*INT(un_an)+(month-1)*ml+(day-1) ENDIF - julian_day = jd - julian_sec = sec - - julian = julian_day + julian_sec / un_jour + julian = dble(jd) + sec / un_jour END SUBROUTINE ymds2ju