SUBROUTINE adddate(iy,im,id,ih,jh,idate) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C . . . . C SUBPROGRAM: ADDDATE UPDATES INPUT DATE BY HOURS TO OUTPUT DATE C PRGMMR: KATZ,B ORG: W/NMC23 DATE: 96-09-03 C C ABSTRACT: TAKES 8-DIGIT INPUT YEAR, MONTH, DAY, AND HOUR AND C A NUMBER OF HOURS TO UPDATE IT. RETURNS AN UPDATED 8-DIGIT C YEAR, MONTH, DAY, AND HOUR. C C PROGRAM HISTORY LOG: C 96-09-03 KATZ C 97-06-16 ROGERS MODIFIED BERT'S CODE TO DEAL WITH 4 2-DIGIT DATE C C USAGE: CALL ADDDATE(IY,IM,ID,IH,JH) C INPUT ARGUMENT LIST: C IY - INPUT YEAR C IM - INPUT MONTH C ID - INPUT DAY C IH - INPUT HOUR C JH - NUMBER OF HOURS TO UPDATE OR BACKDATE C C OUTPUT ARGUMENT LIST: C none - IY,IM,ID & IH ARE MODIFIED PRIOR TO RETURN C C REMARKS: C C ATTRIBUTES: C LANGUAGE: FORTRAN 77 C MACHINE: CRAY C C$$$ DIMENSION mon(12) DATA mon /31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31/ C----------------------------------------------------------------------- C----------------------------------------------------------------------- PRINT *, ' start date= ', iy, im, id, ih ih = ih + jh IF (mod(iy,4).ne.0) mon(2) = 28 IF (mod(iy,4).eq.0) mon(2) = 29 10 IF (ih.lt.0) THEN ih = ih + 24 id = id - 1 IF (id.eq.0) THEN im = im - 1 IF (im.eq.0) THEN im = 12 iy = iy - 1 IF (iy.lt.0) iy = 99 END IF id = mon(im) END IF GO TO 10 ELSE IF (ih.ge.24) THEN ih = ih - 24 id = id + 1 IF (id.gt.mon(im)) THEN id = 1 im = im + 1 IF (im.gt.12) THEN im = 1 iy = mod(iy+1,100) END IF END IF GO TO 10 END IF PRINT *, ' valid date= ', iy, im, id, ih RETURN END