1
2      SUBROUTINE JULIAN(INYR,INMN,INDY,JDY)
3!***********************************************************************
4!                 JULIAN Module of the AMS/EPA Regulatory Model - AERMOD
5!
6!        PURPOSE:    CONVERT YR/MN/DY DATE TO JULIAN DAY (1-366),
7!                    INCLUDES TEST FOR 100 AND 400 YEAR CORRECTIONS TO
8!                    HANDLE 4 DIGIT YEARS BEYOND 2099 AND BEFORE 1901
9!                    (WILL WORK WITH 2 DIGIT YR FOR PERIOD 1901-2099)
10!
11!        PROGRAMMER: Roger Brode, Jeff Wang
12!
13!        DATE:    March 2, 1992
14!
15!        INPUTS:     YEAR,  INYR (2 OR 4 DIGIT)
16!                    MONTH, INMN
17!                    DAY,   INDY
18!
19!        OUTPUT:     JULIAN DAY,  JDY (1-366)
20!
21!        CALLED FROM:   DAYRNG
22!
23!        ERROR HANDLING:   Checks for Invalid Month or Day
24!***********************************************************************
25
26!     Variable Declarations
27      USE MAIN1
28      IMPLICIT NONE
29      CHARACTER MODNAM*12
30
31      SAVE
32      INTEGER :: NDAY(12) , IDYMAX(12)
33      INTEGER :: INYR , INMN , INDY , JDY
34
35!     Variable Initializations
36      DATA NDAY/0 , 31 , 59 , 90 , 120 , 151 , 181 , 212 , 243 , 273 ,  &
37     &     304 , 334/
38      DATA IDYMAX/31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 ,&
39     &     31/
40      MODNAM = 'JULIAN'                                                 !   4326
41      JDY = 0
42
43!     Check for 2-digit Year Input and WRITE Warning Message
44!        WRITE Warning Message  ! Routine Will Work for Years 1901-2099
45      IF ( INYR.LT.100 ) CALL ERRHDL(PATH,MODNAM,'W','360',KEYWRD)
46
47!     Check for Invalid Month or Day
48      IF ( INMN.LT.1 .OR. INMN.GT.12 ) THEN
49!        WRITE Error Message    ! Invalid Month
50         CALL ERRHDL(PATH,MODNAM,'E','203','MONTH')                     !      0
51         RUNERR = .TRUE.
52         GOTO 999
53      ELSEIF ( INDY.GT.IDYMAX(INMN) ) THEN
54!        WRITE Error Message    ! Invalid Day
55         CALL ERRHDL(PATH,MODNAM,'E','203','DAY')                       !      0
56         RUNERR = .TRUE.
57         GOTO 999
58      ENDIF
59
60!     Determine JULIAN Day Number; For Non-Leap Year First
61      IF ( (MOD(INYR,4).NE.0) .OR.                                      &
62     &     (MOD(INYR,100).EQ.0 .AND. MOD(INYR,400).NE.0) ) THEN
63!        Not a Leap Year
64         IF ( INMN.NE.2 .OR. (INMN.EQ.2 .AND. INDY.LE.28) ) THEN        !   4326
65            JDY = INDY + NDAY(INMN)                                     !   4326
66         ELSE
67!           WRITE Error Message    ! Invalid Date; 2/29 in a Non-Leap Year
68            WRITE (DUMMY,'("YR= ",I4)') INYR                            !      0
69            CALL ERRHDL(PATH,MODNAM,'E','370',DUMMY)
70            JDY = 60
71            RUNERR = .TRUE.
72         ENDIF
73      ELSE
74!        Leap Year
75         JDY = INDY + NDAY(INMN)                                        !      0
76         IF ( INMN.GT.2 ) JDY = JDY + 1
77      ENDIF
78
79 999  CONTINUE                                                          !   4326
80
81      CONTINUE
82      END


HyperKWIC - Version 1.00DD executed at 20:00 on 1 Mar 2018 | Personal or Academic or Evaluation User | Free for Non-Commercial, Non-Government Use