/[lmdze]/trunk/IOIPSL/Calendar/ymds2ju.f90
ViewVC logotype

Diff of /trunk/IOIPSL/Calendar/ymds2ju.f90

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/IOIPSL/Calendar/ymds2ju.f revision 93 by guez, Tue Apr 1 15:50:48 2014 UTC trunk/IOIPSL/Calendar/ymds2ju.f90 revision 335 by guez, Thu Sep 12 21:22:46 2019 UTC
# Line 4  module ymds2ju_m Line 4  module ymds2ju_m
4    
5  contains  contains
6    
7    SUBROUTINE ymds2ju (year, month, day, sec, julian)    SUBROUTINE ymds2ju(year, month, day, sec, julian)
8    
9      ! Converts year, month, day and seconds into a julian day      ! Converts year, month, day and seconds into a julian day
10    
# Line 30  contains Line 30  contains
30    
31      INTEGER, INTENT(IN):: year, month, day      INTEGER, INTENT(IN):: year, month, day
32      REAL, INTENT(IN):: sec      REAL, INTENT(IN):: sec
33      REAL, INTENT(OUT):: julian      double precision, INTENT(OUT):: julian
34    
35      ! Local:      ! Local:
36        INTEGER jd, ml
     INTEGER:: julian_day  
     REAL:: julian_sec  
     INTEGER:: jd, m, y, d, ml  
37    
38      !--------------------------------------------------------------------      !--------------------------------------------------------------------
39    
40      lock_unan = .TRUE.      lock_unan = .TRUE.
41    
     m = month  
     y = year  
     d = day  
   
42      ! We deduce the calendar from the length of the year as it      ! We deduce the calendar from the length of the year as it
43      ! is faster than an INDEX on the calendar variable.      ! is faster than an INDEX on the calendar variable.
44    
45      ! Gregorian      ! Gregorian
46      IF ( (un_an > 365.0).AND.(un_an < 366.0) ) THEN      IF ( (un_an > 365.0).AND.(un_an < 366.0) ) THEN
47         jd = (1461*(y+4800+INT(( m-14 )/12)))/4 &         jd = (1461*(year+4800+INT(( month-14 )/12)))/4 &
48              &      +(367*(m-2-12*(INT(( m-14 )/12))))/12 &              +(367*(month-2-12*(INT(( month-14 )/12))))/12 &
49              &      -(3*((y+4900+INT((m-14)/12))/100))/4 &              -(3*((year+4900+INT((month-14)/12))/100))/4 &
50              &      +d-32075              +day-32075
51         jd = jd-2299160         jd = jd-2299160
52         ! No leap or All leap         ! No leap or All leap
53      ELSE IF (ABS(un_an-365.0) <= EPSILON(un_an) .OR. &      ELSE IF (ABS(un_an-365.0) <= EPSILON(un_an) .OR. &
54           &   ABS(un_an-366.0) <= EPSILON(un_an)) THEN           ABS(un_an-366.0) <= EPSILON(un_an)) THEN
55         ml = SUM(mon_len(1:m-1))         ml = SUM(mon_len(1:month-1))
56         jd = y*INT(un_an)+ml+(d-1)         jd = year*INT(un_an)+ml+(day-1)
57         ! Calendar with regular month         ! Calendar with regular month
58      ELSE      ELSE
59         ml = INT(un_an)/12         ml = INT(un_an)/12
60         jd = y*INT(un_an)+(m-1)*ml+(d-1)         jd = year*INT(un_an)+(month-1)*ml+(day-1)
61      ENDIF      ENDIF
62    
63      julian_day = jd      julian = dble(jd) + sec / un_jour
     julian_sec = sec  
   
     julian = julian_day + julian_sec / un_jour  
64    
65    END SUBROUTINE ymds2ju    END SUBROUTINE ymds2ju
66    

Legend:
Removed from v.93  
changed lines
  Added in v.335

  ViewVC Help
Powered by ViewVC 1.1.21