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