program cycledate !********************************************************************** ! * . . . ! * PROGRAM: cycledate ! * PRGMMR: M. ZUPANSKI ORG: CIRA/CSU DATE: 2003-08-18 ! * ! * ABSTRACT: GIVEN THE CYCLE START DATE, INCREMENT, AND INDEX, ! * CALCULATE THE DATE OF THE CURRENT DATA ASSIMILATION CYCLE ! * ! * PROGRAM LOG: ! * ! * 08/18/2003 ..... M. ZUPANSKI: ! * ! ********************************************************************** character*13 jdate character*13 outdate character*14 cycle_start_date character*14 cycle_date integer :: cycle_interval,N_cycles integer :: icycle integer :: diff integer :: year,jday,hour integer :: outyear,outjday,outhour ! ! DECLARE NAMELIST ! NAMELIST /CYCLE/ cycle_start_date,cycle_interval,N_cycles NAMELIST /CURRENT_CYCLE/ icycle !=========================================================== write(*,*) "read cycle.parm" iparm=151 CLOSE(iparm) OPEN(UNIT=iparm,FILE='cycle.parm',FORM='FORMATTED',IOSTAT=IER) IF(IER.NE.0)WRITE(*,*) iparm,' OPEN UNIT ERROR IER=',IER READ(iparm,CYCLE) write(*,*) "read current cycle" iparm=152 CLOSE(iparm) OPEN(UNIT=iparm,FILE='cycle.name',FORM='FORMATTED',IOSTAT=IER) IF(IER.NE.0)WRITE(*,*) iparm,' OPEN UNIT ERROR IER=',IER READ(iparm,CURRENT_CYCLE) write(*,*) "IN: cycle_start_date=",cycle_start_date !----- define appropriate jdate call rdate_to_jdate (cycle_start_date,jdate,year,jday,hour) write(*,*) "OUT: jdate,year,jday,hour=",jdate,year,jday,hour !----- diff (sec), cycle_interval (min) write(*,*) "cycle_interval=",cycle_interval," icycle=",icycle diff=cycle_interval*(icycle-1)*60 write(*,*) "diff=",diff !----- add the increment call add_to_jdate (year,jday,hour,diff,outyear,outjday,outhour) write(*,*) "outyear,outjday,outhour=",outyear,outjday,outhour call jdate_make_big (outyear,outjday,outhour,outdate) write(*,*) "outdate=",outdate !----- define output cycle_date call jdate_to_rdate (outdate,cycle_date) write(*,*) "cycle_date=",cycle_date !----- write out updated 'obs.parm' namelist file write(*,*) "CYCLE=",cycle_date iparm=51 CLOSE(iparm) OPEN(UNIT=iparm,FILE='cycle_date',FORM='FORMATTED',IOSTAT=IER) IF(IER.NE.0)WRITE(*,*) iparm,' OPEN UNIT ERROR IER=',IER WRITE(iparm,100) cycle_date 100 format(a14) ! CLOSE(UNIT=iparm,STATUS='KEEP') stop end