The TELEMAC-MASCARET system  trunk
gregtim.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE gregtim
3 ! ******************
4 !
5  &(jultim,year,month,day,hour,minu,sec)
6 !
7 !
8 !***********************************************************************
9 ! BIEF V6P2 31/08/2011
10 !***********************************************************************
11 !
12 !brief COMPUTES THE GREGORIAN CALENDAR DATE
13 !+ (YEAR,MONTH,DAY,HOUR,MIN,SEC)
14 !+ GIVEN THE JULIAN DATE (JD) IN CENTURY
15 !
16 !history C.-T. PHAM (EDF-LNHE)
17 !+ 31/08/2011
18 !+ V6P2
19 !+ FROM http://aa.usno.navy.mil/faq/docs/JD_Formula.php :
20 !+ GDATE ALGORITHM
21 !+ ORIGINAL ARTICLE: FLIEGEL AND VAN FLANDERN (1968),
22 !+ A MACHINE ALGORITHM FOR PROCESSING CALENDAR DATES
23 !+ FOR YEAR, MONTH AND DAY;
24 !+ AND FROM DELTARES, INITIALLY WL, SECTOR WATERBEHEER & MILIEU
25 !+ PROJET T0467 OR T1234.56, ANDRE HENDRIKS, V 1.01 (930429)
26 !+ FOR HOUR,MIN,SEC
27 !+
28 !
29 !history U.H.Merkel
30 !+ 19/07/2012
31 !+ V6P2
32 !+ Renamed MIN -> MINU because of Problems with NAG Compiler
33 !
34 !
35 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36 !| DAY |<->| DAY (1-28, 29, 30 OR 31)
37 !| HOUR |<->| HOUR (0-23) IN UNIVERSAL TIME
38 !| JULTIM |-->| JULIAN DAY IN CENTURY
39 !| MIN |<->| MINUTE (0-59) IN UNIVERSAL TIME
40 !| MONTH |<->| MONTH (1-12)
41 !| SEC |<->| SECOND (0-59) IN UNIVERSAL TIME
42 !| YEAR |<->| YEAR (-4713-..)
43 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44 !
46  IMPLICIT NONE
47 !
48 !
49 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50 !
51  INTEGER, INTENT(INOUT) :: YEAR,MONTH,DAY,HOUR,MINU,SEC
52  DOUBLE PRECISION, INTENT(IN) :: JULTIM
53 !
54 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
55 !
56  INTEGER I,J,K,L,N
57  DOUBLE PRECISION JD,JDR
58 !
59  INTRINSIC int
60 !
61 !-----------------------------------------------------------------------
62 !
63 ! JULTIM UNIT: CENTURY
64 ! JD UNIT : DAY
65 !
66 ! 2415020 <=> 31/12/1899: DUE TO THE SHIFT IN JULTIM IN TELEMAC/BIEF
67 !
68  jd=jultim*36525.d0+2415020.d0
69 !
70  jdr=mod(jd,1.d0)
71 !
72  IF (jdr.LT.0.5d0) THEN
73  jdr = jdr+0.5d0
74  ELSE
75  jdr = jdr-0.5d0
76  jd = jd+1.d0
77  ENDIF
78 !
79  l = int(jd)+68569
80  n = 4*l/146097
81  l = l-(146097*n+3)/4
82  i = 4000*(l+1)/1461001
83  l = l-1461*i/4+31
84  j = 80*l/2447
85  k = l-2447*j/80
86  l = j/11
87  j = j+2-12*l
88  i = 100*(n-49)+i+l
89 !
90  year = i
91  month = j
92  day = k
93 !
94  hour = int(jdr*24.d0)
95  minu = int(jdr*1440.d0)-60*hour
96  sec = nint(jdr*86400.d0)-3600*hour-60*minu
97 !
98 ! TO AVOID SEC = 60
99 !
100  IF(sec.EQ.60) THEN
101  sec = 0
102  minu = minu + 1
103  ENDIF
104 !
105  IF(minu.GE.60) THEN
106  minu = minu - 60
107  hour = hour + 1
108  ENDIF
109 !
110  IF(hour.GE.24) THEN
111  hour = hour - 24
112  day = day + 1
113  ENDIF
114 !
115 !-----------------------------------------------------------------------
116 !
117  RETURN
118  END
subroutine gregtim(JULTIM, YEAR, MONTH, DAY, HOUR, MINU, SEC)
Definition: gregtim.f:7
double precision function jultim(YEAR, MONTH, DAY, HOUR, MINU, SEC, AT)
Definition: jultim.f:7