*IF DEF,CONTROL INCRTIM1.2
C ******************************COPYRIGHT****************************** GTS2F400.4555
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4556
C GTS2F400.4557
C Use, duplication or disclosure of this code is subject to the GTS2F400.4558
C restrictions as set forth in the contract. GTS2F400.4559
C GTS2F400.4560
C Meteorological Office GTS2F400.4561
C London Road GTS2F400.4562
C BRACKNELL GTS2F400.4563
C Berkshire UK GTS2F400.4564
C RG12 2SZ GTS2F400.4565
C GTS2F400.4566
C If no contract has been raised with this copy of the code, the use, GTS2F400.4567
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4568
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4569
C Modelling at the above address. GTS2F400.4570
C ******************************COPYRIGHT****************************** GTS2F400.4571
C GTS2F400.4572
CLL Routine: INCRTIME ------------------------------------------------- INCRTIM1.3
CLL INCRTIM1.4
CLL Purpose: Increments the model time by one atmosphere or ocean INCRTIM1.5
CLL timestep according to which is currently being INCRTIM1.6
CLL integrated. Also updates timestamps in dump LOOKUP INCRTIM1.7
CLL headers of PROGNOSTIC fields (diagnostic LOOKUP headers INCRTIM1.8
CLL are updated exclusively by STASH). INCRTIM1.9
CLL INCRTIM1.10
CLL Tested under compiler: cft77 INCRTIM1.11
CLL Tested under OS version: UNICOS 5.1 INCRTIM1.12
CLL INCRTIM1.13
CLL Author: T.C.Johns INCRTIM1.14
CLL INCRTIM1.15
CLL Model Modification history from model version 3.0: INCRTIM1.16
CLL version date INCRTIM1.17
CLL 3.1 03/02/93 : added comdeck CHSUNITS to define NUNITS for i/o RS030293.111
CLL 3.2 27/03/93 Dynamic allocation of main data arrays. R. Rawlins @DYALLOC.1306
CLL 3.3 08/02/94 Modify calls to TIME2SEC/SEC2TIME to output/input TJ080294.177
CLL elapsed times in days & secs, for portability. TCJ TJ080294.178
CLL 3.4 17/06/94 Argument LCAL360 passed to SEC2TIME GSS1F304.393
CLL S.J.Swarbrick GSS1F304.394
CLL 3.5 18/04/95 Stage 1 of Submodel project: introduce internal GRB1F305.48
CLL model as argument and increase generalisation. GRB1F305.49
CLL R. Rawlins GRB1F305.50
CLL 4.1 29/02/96 Introduce Wave sub-model. RTHBarnes. WRB1F401.201
CLL 4.4 21/10/97 Correction to FORECAST_HRS calculation for IAU runs. VSB2F404.20
CLL Adam Clayton. VSB2F404.21
CLL 4.5 17/08/98 Determine forecast hour with respect to T+0. GDR3F405.841
CLL Required in glob-mes parallel running. D. Robinson. GDR3F405.842
CLL INCRTIM1.18
CLL Programming standard: UM Doc Paper 3, version 1 (15/1/90) INCRTIM1.19
CLL INCRTIM1.20
CLL Logical components covered: C0 INCRTIM1.21
CLL INCRTIM1.22
CLL Project task: C0 INCRTIM1.23
CLL INCRTIM1.24
CLL External documentation: On-line UM document C0 - The top-level INCRTIM1.25
CLL control system INCRTIM1.26
CLL INCRTIM1.27
CLL ------------------------------------------------------------------- INCRTIM1.28
C*L Interface and arguments: ------------------------------------------ INCRTIM1.29
C INCRTIM1.30
SUBROUTINE INCRTIME( 1,4@DYALLOC.1307
*CALL ARGSIZE
@DYALLOC.1308
*CALL ARGDUMA
@DYALLOC.1309
*CALL ARGDUMO
@DYALLOC.1310
*CALL ARGDUMW
WRB1F401.202
& internal_model,ICODE,CMESSAGE ) GRB1F305.51
C INCRTIM1.32
IMPLICIT NONE INCRTIM1.33
C @DYALLOC.1312
C*L Arguments @DYALLOC.1313
CL @DYALLOC.1314
*CALL TYPSIZE
@DYALLOC.1315
*CALL TYPDUMA
@DYALLOC.1316
*CALL TYPDUMO
@DYALLOC.1317
*CALL TYPDUMW
WRB1F401.203
C @DYALLOC.1318
INTEGER internal_model ! IN : internal model identifier GRB1F305.52
INTEGER ICODE ! OUT: Error return code @DYALLOC.1319
CHARACTER*80 CMESSAGE ! OUT: Error return message WRB1F401.204
C INCRTIM1.34
C*---------------------------------------------------------------------- INCRTIM1.35
C Common blocks INCRTIM1.36
C INCRTIM1.37
*CALL CMAXSIZE
GRB1F305.53
*CALL CSUBMODL
GRB1F305.54
*CALL CHSUNITS
RS030293.112
*CALL CLOOKADD
INCRTIM1.38
*CALL CCONTROL
INCRTIM1.39
*CALL CHISTORY
GRB1F305.55
*CALL CTIME
INCRTIM1.42
*CALL LBC_COUP
GDR3F405.843
C INCRTIM1.44
C Subroutines called INCRTIM1.45
C INCRTIM1.46
EXTERNAL SEC2TIME,STP2TIME TJ080294.179
C INCRTIM1.48
C Local variables INCRTIM1.49
C INCRTIM1.50
INTEGER INCRTIM1.51
1 ELAPSED_DAYS, ! Elapsed days since basis time TJ080294.180
1 ELAPSED_SECS, ! Elapsed secs since basis time TJ080294.181
& ELAPSED_DAYS_PREV, ! Elapsed days, end of previous step TJ080294.182
& ELAPSED_SECS_PREV, ! Elapsed secs, end of previous step TJ080294.183
& I ! Loop index INCRTIM1.54
INTEGER ! Local scalars of internal model GRB1F305.56
* STEP ! arrays. GRB1F305.57
*, STEPS_PER_PERIOD GRB1F305.58
*, SECS_PER_PERIOD GRB1F305.59
GRB1F305.60
CL INCRTIM1.55
CL---------------------------------------------------------------------- INCRTIM1.56
CL 1. General timestep, increment STEP by one and update atmos GRB1F305.61
CL elapsed seconds (integer) relative to basis time INCRTIM1.58
CL INCRTIM1.59
STEP =STEPim(internal_model) GRB1F305.62
STEPS_PER_PERIOD=STEPS_PER_PERIODim(internal_model) GRB1F305.63
SECS_PER_PERIOD =SECS_PER_PERIODim(internal_model) GRB1F305.64
GRB1F305.65
CALL STP2TIME
(STEP,STEPS_PER_PERIOD,SECS_PER_PERIOD, GRB1F305.66
& ELAPSED_DAYS_PREV,ELAPSED_SECS_PREV) TJ080294.185
STEP = STEP+1 GRB1F305.67
CALL STP2TIME
(STEP,STEPS_PER_PERIOD,SECS_PER_PERIOD, GRB1F305.68
& ELAPSED_DAYS,ELAPSED_SECS) TJ080294.187
GRB1F305.69
STEPim(internal_model) = STEP GRB1F305.70
H_STEPim(internal_model) = STEP GRB1F305.71
GRB1F305.72
GRB1F305.73
CL INCRTIM1.66
CL 1.1 Set FORECAST_HRS from ELAPSED_DAYS/SECS since basis time and GRB1F305.74
CL subtract DATA_MINUS_BASIS_HRS to get validity time - data time INCRTIM1.77
FORECAST_HRS= ELAPSED_SECS/3600 + ELAPSED_DAYS*24 TJ080294.193
& - DATA_MINUS_BASIS_HRS TJ080294.194
IF (L_LBC_COUP) THEN GDR3F405.844
! Get forecast time with respect to analysis time. GDR3F405.845
LBC_FC_HRS = FORECAST_HRS - MODEL_ANALYSIS_HRS GDR3F405.846
ENDIF GDR3F405.847
IF (L_IAU) THEN VSB2F404.22
IF (FORECAST_HRS.GE.(MODEL_ANALYSIS_HRS-DATA_MINUS_BASIS_HRS)) VSB2F404.23
& FORECAST_HRS=FORECAST_HRS- VSB2F404.24
& (MODEL_ANALYSIS_HRS-DATA_MINUS_BASIS_HRS) VSB2F404.25
ELSE VSB2F404.26
IF (FORECAST_HRS.GE.MODEL_ANALYSIS_HRS) INCRTIM1.79
& FORECAST_HRS=FORECAST_HRS-MODEL_ANALYSIS_HRS INCRTIM1.80
ENDIF VSB2F404.27
CL---------------------------------------------------------------------- INCRTIM1.81
CL 2. Convert elapsed seconds since basis time to calendar time/date INCRTIM1.82
CL INCRTIM1.83
CALL SEC2TIME
(ELAPSED_DAYS_PREV,ELAPSED_SECS_PREV, TJ080294.195
& BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.196
1 PREVIOUS_TIME(1),PREVIOUS_TIME(2),PREVIOUS_TIME(3), INCRTIM1.85
2 PREVIOUS_TIME(4),PREVIOUS_TIME(5),PREVIOUS_TIME(6), INCRTIM1.86
3 PREVIOUS_TIME(7),LCAL360) GSS1F304.395
CALL SEC2TIME
(ELAPSED_DAYS,ELAPSED_SECS, TJ080294.197
& BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.198
1 I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND, INCRTIM1.89
2 I_DAY_NUMBER,LCAL360) GSS1F304.396
CL---------------------------------------------------------------------- INCRTIM1.91
CL 3. Copy date/time information into the dump header and update INCRTIM1.92
CL VALIDITY TIME and FORECAST PERIOD in prognostic field LOOKUP INCRTIM1.93
CL headers. INCRTIM1.94
CL INCRTIM1.95
*IF DEF,ATMOS INCRTIM1.96
IF (internal_model.eq.atmos_im) THEN GRB1F305.75
A_FIXHD(28) = I_YEAR INCRTIM1.98
A_FIXHD(29) = I_MONTH INCRTIM1.99
A_FIXHD(30) = I_DAY INCRTIM1.100
A_FIXHD(31) = I_HOUR INCRTIM1.101
A_FIXHD(32) = I_MINUTE INCRTIM1.102
A_FIXHD(33) = I_SECOND INCRTIM1.103
A_FIXHD(34) = I_DAY_NUMBER INCRTIM1.104
DO I=1,A_PROG_LOOKUP INCRTIM1.105
A_LOOKUP(LBYR ,I)=I_YEAR INCRTIM1.106
A_LOOKUP(LBMON ,I)=I_MONTH INCRTIM1.107
A_LOOKUP(LBDAT ,I)=I_DAY INCRTIM1.108
A_LOOKUP(LBHR ,I)=I_HOUR INCRTIM1.109
A_LOOKUP(LBMIN ,I)=I_MINUTE INCRTIM1.110
A_LOOKUP(LBDAY ,I)=I_DAY_NUMBER INCRTIM1.111
A_LOOKUP(LBFT,I)=FORECAST_HRS INCRTIM1.112
ENDDO INCRTIM1.113
CL Update run date time INCRTIM1.114
! These appear not to be really used. GDR3F305.101
ACTUAL_ENDT(1,A_IM) = I_YEAR GDR3F305.102
ACTUAL_ENDT(2,A_IM) = I_MONTH GDR3F305.103
ACTUAL_ENDT(3,A_IM) = I_DAY GDR3F305.104
ACTUAL_ENDT(4,A_IM) = I_HOUR GDR3F305.105
ACTUAL_ENDT(5,A_IM) = I_MINUTE GDR3F305.106
ACTUAL_ENDT(6,A_IM) = I_SECOND GDR3F305.107
! LENGTH(A_IM) = STEP(A_IM) GDR3F305.108
! A_LENGTH=STEP GRB1F305.76
ENDIF INCRTIM1.122
*ENDIF INCRTIM1.123
*IF DEF,OCEAN INCRTIM1.124
IF (internal_model.eq.ocean_im) THEN GRB1F305.77
O_FIXHD(28) = I_YEAR INCRTIM1.126
O_FIXHD(29) = I_MONTH INCRTIM1.127
O_FIXHD(30) = I_DAY INCRTIM1.128
O_FIXHD(31) = I_HOUR INCRTIM1.129
O_FIXHD(32) = I_MINUTE INCRTIM1.130
O_FIXHD(33) = I_SECOND INCRTIM1.131
O_FIXHD(34) = I_DAY_NUMBER INCRTIM1.132
DO I=1,O_PROG_LOOKUP INCRTIM1.133
O_LOOKUP(LBYR ,I)=I_YEAR INCRTIM1.134
O_LOOKUP(LBMON,I)=I_MONTH INCRTIM1.135
O_LOOKUP(LBDAT,I)=I_DAY INCRTIM1.136
O_LOOKUP(LBHR ,I)=I_HOUR INCRTIM1.137
O_LOOKUP(LBMIN,I)=I_MINUTE INCRTIM1.138
O_LOOKUP(LBDAY,I)=I_DAY_NUMBER INCRTIM1.139
O_LOOKUP(LBFT,I)=FORECAST_HRS INCRTIM1.140
ENDDO INCRTIM1.141
CL Update run date time INCRTIM1.142
! These appear not to be really used. GDR3F305.109
ACTUAL_ENDT(1,O_IM) = I_YEAR GDR3F305.110
ACTUAL_ENDT(2,O_IM) = I_MONTH GDR3F305.111
ACTUAL_ENDT(3,O_IM) = I_DAY GDR3F305.112
ACTUAL_ENDT(4,O_IM) = I_HOUR GDR3F305.113
ACTUAL_ENDT(5,O_IM) = I_MINUTE GDR3F305.114
ACTUAL_ENDT(6,O_IM) = I_SECOND GDR3F305.115
! LENGTH(O_IM) = STEP(O_IM) GDR3F305.116
! O_LENGTH=STEP GRB1F305.78
ENDIF WRB1F401.205
*ENDIF WRB1F401.206
*IF DEF,WAVE WRB1F401.207
IF (internal_model.eq.wave_im) THEN WRB1F401.208
W_FIXHD(28) = I_YEAR WRB1F401.209
W_FIXHD(29) = I_MONTH WRB1F401.210
W_FIXHD(30) = I_DAY WRB1F401.211
W_FIXHD(31) = I_HOUR WRB1F401.212
W_FIXHD(32) = I_MINUTE WRB1F401.213
W_FIXHD(33) = I_SECOND WRB1F401.214
W_FIXHD(34) = I_DAY_NUMBER WRB1F401.215
DO I=1,W_PROG_LOOKUP WRB1F401.216
W_LOOKUP(LBYR ,I)=I_YEAR WRB1F401.217
W_LOOKUP(LBMON ,I)=I_MONTH WRB1F401.218
W_LOOKUP(LBDAT ,I)=I_DAY WRB1F401.219
W_LOOKUP(LBHR ,I)=I_HOUR WRB1F401.220
W_LOOKUP(LBMIN ,I)=I_MINUTE WRB1F401.221
W_LOOKUP(LBDAY ,I)=I_DAY_NUMBER WRB1F401.222
W_LOOKUP(LBFT ,I)=FORECAST_HRS WRB1F401.223
ENDDO WRB1F401.224
CL Update run date time WRB1F401.225
! These appear not to be really used. WRB1F401.226
ACTUAL_ENDT(1,W_IM) = I_YEAR WRB1F401.227
ACTUAL_ENDT(2,W_IM) = I_MONTH WRB1F401.228
ACTUAL_ENDT(3,W_IM) = I_DAY WRB1F401.229
ACTUAL_ENDT(4,W_IM) = I_HOUR WRB1F401.230
ACTUAL_ENDT(5,W_IM) = I_MINUTE WRB1F401.231
ACTUAL_ENDT(6,W_IM) = I_SECOND WRB1F401.232
ENDIF INCRTIM1.150
*ENDIF INCRTIM1.151
RETURN INCRTIM1.152
CL---------------------------------------------------------------------- INCRTIM1.153
END INCRTIM1.154
C INCRTIM1.155
*ENDIF INCRTIM1.156