Newer
Older
!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
!-----------------------------------------------------------------
!--------------- special set of characters for RCS information
!-----------------------------------------------------------------
! $Source$ $Revision$
! MASDEV4_7 prep_real 2006/05/18 13:07:25
!-----------------------------------------------------------------
! ################################
MODULE MODI_ADD_FORECAST_TO_DATE
! ################################
INTERFACE
SUBROUTINE ADD_FORECAST_TO_DATE(KYEAR,KMONTH,KDAY,PSEC)
!
INTEGER, INTENT(INOUT) :: KYEAR ! year of date
INTEGER, INTENT(INOUT) :: KMONTH ! month of date
INTEGER, INTENT(INOUT) :: KDAY ! day of date
REAL, INTENT(INOUT) :: PSEC ! number of seconds since date at 00 UTC
!
END SUBROUTINE ADD_FORECAST_TO_DATE
END INTERFACE
END MODULE MODI_ADD_FORECAST_TO_DATE
!
! #######################################################
SUBROUTINE ADD_FORECAST_TO_DATE(KYEAR,KMONTH,KDAY,PSEC)
! #######################################################
!
!!**** *ADD_FORECAST_TO_DATE* - finds the current date and hour of a forecast
!!
!! PURPOSE
!! -------
!!
!! WARNING
!!
!! -----> Only correct for dates between 19900301 and 21000228 <-----
!!
!! The correct test should be:
!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN
!!
!!** METHOD
!! ------
!!
!! A recursive method is used, adding one day ofter the other.
!!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!!
!! Book 2
!!
!! AUTHOR
!! ------
!!
! V.Masson Meteo-France
!!
!! MODIFICATIONS
!! -------------
!! Original 01/09/95
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
IMPLICIT NONE
!
!* 0.1 Declaration of arguments
! ------------------------
INTEGER, INTENT(INOUT) :: KYEAR ! year of date
INTEGER, INTENT(INOUT) :: KMONTH ! month of date
INTEGER, INTENT(INOUT) :: KDAY ! day of date
REAL, INTENT(INOUT) :: PSEC ! number of seconds since date at 00 UTC
!
!* 0.2 Declaration of local variables
! ------------------------------
!
INTEGER :: IDAYS ! number of days in KMONTH
!-------------------------------------------------------------------------------
!
!* 1. Return condition: less than one day to add
! ------------------------------------------
!
DO
IF (86400.-PSEC > 1.E-6) EXIT
!
!-------------------------------------------------------------------------------
!
!* 2. Adding one day
! --------------
!
PSEC=PSEC-86400.
!
!* 2.1 Number of days in a month
! -------------------------
!
SELECT CASE (KMONTH)
CASE(4,6,9,11)
IDAYS=30
CASE(1,3,5,7:8,10,12)
IDAYS=31
CASE(2)
IF (MOD(KYEAR,4)==0) THEN
IDAYS=29
ELSE
IDAYS=28
ENDIF
END SELECT
!
!* 2.2 Last day of the month
! ---------------------
!
IF (KDAY==IDAYS) THEN
IF (KMONTH==12) THEN
KDAY=1
KMONTH=1
KYEAR=KYEAR+1
ELSE
KDAY=1
KMONTH=KMONTH+1
ENDIF
!
!* 2.3 Other days
! ----------
ELSE
KDAY=KDAY+1
ENDIF
!
!-------------------------------------------------------------------------------
!
!* 3. Recursive call
! --------------
!
ENDDO
!
!-------------------------------------------------------------------------------
!
END SUBROUTINE ADD_FORECAST_TO_DATE