*IF DEF,CONTROL INITTIM1.2
C ******************************COPYRIGHT****************************** GTS2F400.4879
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4880
C GTS2F400.4881
C Use, duplication or disclosure of this code is subject to the GTS2F400.4882
C restrictions as set forth in the contract. GTS2F400.4883
C GTS2F400.4884
C Meteorological Office GTS2F400.4885
C London Road GTS2F400.4886
C BRACKNELL GTS2F400.4887
C Berkshire UK GTS2F400.4888
C RG12 2SZ GTS2F400.4889
C GTS2F400.4890
C If no contract has been raised with this copy of the code, the use, GTS2F400.4891
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4892
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4893
C Modelling at the above address. GTS2F400.4894
C ******************************COPYRIGHT****************************** GTS2F400.4895
C GTS2F400.4896
CLL Routine: INITTIME ------------------------------------------------- INITTIM1.3
CLL INITTIM1.4
CLL Purpose: Initialises the model time relative to the calendar zero INITTIM1.5
CLL time. The basis time is converted to a time in seconds INITTIM1.6
CLL since T=0 with respect to the calendar. If the model basis INITTIM1.7
CLL time as specified via the history file does not match the INITTIM1.8
CLL data time in the dump(s), an error is flagged and the INITTIM1.9
CLL routine exits. INITTIM1.10
CLL Also sets derived time information from supplied time INITTIM1.11
CLL information:- INITTIM1.12
CLL (a) Assimilation start/end timesteps; INITTIM1.13
CLL (b) Interface field generation start/end steps and length; INITTIM1.14
CLL (c) Real timestep(s) in seconds. INITTIM1.15
CLL INITTIM1.16
CLL Tested under compiler: cft77 INITTIM1.17
CLL Tested under OS version: UNICOS 6.1.5A INITTIM1.18
CLL INITTIM1.19
CLL Author: T.C.Johns INITTIM1.20
CLL INITTIM1.21
CLL Model Modification history from model version 3.0: INITTIM1.22
CLL version date INITTIM1.23
CLL 3.1 3/02/93 : added comdeck CHSUNITS to define NUNITS for i/o. RS030293.159
CLL INITTIM1.24
CLL 3.1 3/2/93 Initialisation of A_INTERFACE_FSTEP/LSTEP/STEPS DR240293.853
CLL removed ; now done in INTF_CTL. D Robinson DR240293.854
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.93
CLL portability. Author Tracey Smith. TS150793.94
CLL 3.2 27/03/93 Dynamic allocation of main data arrays. R. Rawlins TJ080294.96
CLL 3.3 08/02/94 Modify calls to TIME2SEC/SEC2TIME to output/input TJ080294.97
CLL elapsed times in days & secs, for portability. TJ080294.98
CLL Check conformity of ocean t/s definition. TCJ TJ080294.99
CLL DR240293.855
CLL 3.3 Ocean assimilation step numbers changed to enable assimilation MB031293.1
CLL in continuation runs to work satisfactorily. MB031293.2
CLL 3.4 20/06/94 DEF CAL360 replaced by LOGICAL LCAL360 GSS1F304.420
CLL LCAL360 passed to TIME2SEC, SEC2TIME GSS1F304.421
CLL S.J.Swarbrick GSS1F304.422
CLL 3.5 18/04/95 Stage 1 of submodel project, some generalisation GRB1F305.184
CLL of step counters. R. Rawlins GRB1F305.185
CLL 4.0 25/10/95 Allow user to control auto resubmit. RTHBarnes GRB3F400.5
CLL 4.0 16/08/95 Remove erroneous IF tests introduced at vn3.5. RTHB GRB1F400.26
CLL 4.0 06/12/95 Recover model_basis_time from model_data_time (for GRB1F400.27
CLL operational assimilation runs mainly). RTHBarnes GRB1F400.28
CLL 4.0 14/12/95 Make sure warning message printed if STEPim reset. GRB1F400.29
CLL 4.1 26/03/96 Introduce Wave sub-model. RTHBarnes. WRB1F401.536
CLL 4.1 3/6/96 In f/c mode, use time from dump if Basis time is zer VSB1F401.77
CLL (as is done in assm mode). Stuart Bell VSB1F401.78
CLL 4.4 10/01/97 Allow addition of timestep to ASSIM_FIRSTSTEP for ORW0F404.1
CLL NON-OPERATIONAL runs only. This allows assimilation ORW0F404.2
CLL to be restarted in a non-operational CRUN model run. ORW0F404.3
CLL R. Watkins. ORW0F404.4
CLL MB031293.3
CLL 4.1 16/02/96 Synchronysed resubmision and meaning points GGH1F401.1
CLL for CRUNs. G Henderson GGH1F401.2
!LL 4.3 26/02/97 Correct error in argument list of SEC2TIME ARB2F403.156
!LL introduced in modset GRB1F400. RTHBarnes. ARB2F403.157
CLL 4.4 21/10/97 If running in IAU mode, read in data time of IAU VSB2F404.28
CLL dump and calculate MODEL_ANALYSIS_HRS. Also, VSB2F404.29
CLL correction to FORECAST_HRS calculation. VSB2F404.30
CLL Adam Clayton. VSB2F404.31
!LL 4.5 07/07/98 Correct problem with resubmitting runs GSM2F405.14
!LL getting wrong interval. S.D.Mullerworth GSM2F405.15
CLL VSB2F404.32
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) INITTIM1.25
CLL INITTIM1.26
CLL Logical components covered: C0 INITTIM1.27
CLL INITTIM1.28
CLL Project task: C0 INITTIM1.29
CLL INITTIM1.30
CLL External documentation: On-line UM document C0 - The top-level INITTIM1.31
CLL control system INITTIM1.32
CLL INITTIM1.33
CLL ------------------------------------------------------------------- INITTIM1.34
C*L Interface and arguments: ------------------------------------------ INITTIM1.35
C INITTIM1.36
SUBROUTINE INITTIME( 2,25@DYALLOC.2058
*CALL ARGSIZE
@DYALLOC.2059
*CALL ARGDUMA
@DYALLOC.2060
*CALL ARGDUMO
@DYALLOC.2061
*CALL ARGDUMW
WRB1F401.537
& submodel,ICODE,CMESSAGE) GRB1F305.186
C INITTIM1.38
IMPLICIT NONE INITTIM1.39
C INITTIM1.40
INTEGER submodel ! IN - submodel dump identifier GRB1F305.187
*CALL TYPSIZE
@DYALLOC.2063
*CALL TYPDUMA
@DYALLOC.2064
*CALL TYPDUMO
@DYALLOC.2065
*CALL TYPDUMW
WRB1F401.538
INTEGER ICODE ! OUT - Error return code INITTIM1.42
CHARACTER*80 CMESSAGE TS150793.95
C INITTIM1.44
C*---------------------------------------------------------------------- INITTIM1.45
C Common blocks INITTIM1.46
C INITTIM1.47
*CALL CMAXSIZE
GRB1F305.188
*CALL CSUBMODL
GRB1F305.189
*CALL CHSUNITS
RS030293.160
*CALL CCONTROL
INITTIM1.48
*CALL CHISTORY
GRB1F305.190
*CALL CTIME
INITTIM1.54
C INITTIM1.55
C Subroutines called INITTIM1.56
C INITTIM1.57
EXTERNAL TIME2SEC,SEC2TIME,TIM2STEP TJ080294.100
C INITTIM1.59
C Local variables INITTIM1.60
C INITTIM1.61
LOGICAL INITTIM1.62
1 L_DT_ERROR ! Flag for Data Time error INITTIM1.63
INTEGER INITTIM1.64
1 ICAL ! 1: Gregorian, 2: 360 day calendar INITTIM1.65
INTEGER INITTIM1.66
1 ELAPSED_DAYS ! Whole days from basis time to VT etc. TJ080294.101
&, ELAPSED_SECS ! Secs-in-day from basis time to VT etc. TJ080294.102
&, DATA_MINUS_BASIS_DAYS! Whole days from basis time to DT TJ080294.103
&, DATA_MINUS_BASIS_SECS! Secs-in-day from basis time to DT TJ080294.104
&, LAST_RUN_DAYS ! Days from basis time to last run end TJ080294.105
1, LAST_RUN_SECS ! Secs from basis time to last run end INITTIM1.68
&, INCREMENT_DAYS ! Days for increment period TJ080294.106
1, INCREMENT_SECS ! Secs for increment period INITTIM1.69
&, FINAL_DAYS ! Target in whole days TJ080294.107
1, FINAL_SECS ! Target in secs INITTIM1.70
INTEGER I ! Loop counter INITTIM1.71
&, ICOUNT ! job count INITTIM1.72
CHARACTER*6 INITTIM1.73
& CDUMMY ! used in setting job prefix INITTIM1.74
GRB1F305.191
INTEGER GRB1F305.192
* im ! internal model id index GRB1F305.193
*,ii ! internal model loop counter GRB1F305.194
*,STEP GRB1F305.195
*,STEPS_PER_PERIOD GRB1F305.196
*,SECS_PER_PERIOD GRB1F305.197
&,A_STEPS_PER_HR GRB1F305.198
*,GROUP GRB1F305.199
*,TARGET_END_STEP GRB1F305.200
*,H_STEP GRB1F305.201
*,H_GROUP GRB1F305.202
VSB2F404.33
INTEGER VSB2F404.34
* IAU_UNIT ! Unit for IAU dump VSB2F404.35
*,IAU_FIXHD(LEN_FIXHD) ! IAU fixed length header VSB2F404.36
*,IAU_TIME_DAYS ! Days after basis time of IAU data time VSB2F404.37
*,IAU_TIME_SECS ! Secs after basis time of IAU data time VSB2F404.38
VSB2F404.39
LOGICAL GRB1F305.203
* NewRun ! =T: NRUN, ie no internal model steps yet GRB1F305.204
*,ZeroBasis ! =T: MODEL_BASIS_TIME=0 VSB1F401.79
CL INITTIM1.75
CL---------------------------------------------------------------------- INITTIM1.76
CL 0. If at start of integration (ie. step numbers both at zero), INITTIM1.77
CL set MODEL_BASIS_TIME from validity time of start dump if run is INITTIM1.78
CL an assimilation or pseudo-assimilation or if MODEL_BASIS_TIME is VSB1F401.80
CL zero (time checking assumed between model time and observations). VSB1F401.81
CL Check that timestep definitions are valid. TJ080294.108
CL Set MODEL_DATA_TIME from start dump data time in all cases. INITTIM1.81
CL INITTIM1.82
! Check for new run (NRUN) or continuation run (CRUN) GRB1F305.205
NewRun=.true. GRB1F305.206
DO ii=1,N_INTERNAL_MODEL GRB1F305.207
im=INTERNAL_MODEL_LIST(ii) GRB1F305.208
IF(H_STEPim(im).NE.0) THEN ! CRUN, continuation run GRB1F305.209
NewRun=.false. GRB1F305.210
ENDIF GRB1F305.211
ENDDO ! ii over internal models GRB1F305.212
GRB1F305.213
! Check for MODEL_BASIS_TIME zero VSB1F401.82
ZeroBasis=.true. VSB1F401.83
DO I=1,6 VSB1F401.84
IF(MODEL_BASIS_TIME(I).NE.0)THEN VSB1F401.85
ZeroBasis=.false. VSB1F401.86
ENDIF VSB1F401.87
ENDDO VSB1F401.88
VSB1F401.89
IF (NewRun) THEN GRB1F305.214
*IF DEF,ATMOS INITTIM1.84
IF ((MODEL_ASSIM_MODE.EQ."Atmosphere".OR. INITTIM1.85
2 MODEL_ASSIM_MODE.EQ."Coupled ") .AND. INITTIM1.86
3 (RUN_ASSIM_MODE.EQ."Atmosphere".OR. INITTIM1.87
4 RUN_ASSIM_MODE.EQ."Coupled ")) THEN INITTIM1.88
DO I=1,6 INITTIM1.89
MODEL_BASIS_TIME(I)=A_FIXHD(27+I) INITTIM1.90
ENDDO INITTIM1.91
ELSEIF ( .NOT. VSB1F401.90
1 ((MODEL_ASSIM_MODE.EQ."Atmosphere".OR. VSB1F401.91
2 MODEL_ASSIM_MODE.EQ."Coupled ") .AND. VSB1F401.92
3 (RUN_ASSIM_MODE.EQ."Atmosphere".OR. VSB1F401.93
4 RUN_ASSIM_MODE.EQ."Coupled ")) VSB1F401.94
5 .AND.ZeroBasis) THEN VSB1F401.95
DO I=1,6 VSB1F401.96
MODEL_BASIS_TIME(I)=A_FIXHD(27+I) VSB1F401.97
ENDDO VSB1F401.98
*ENDIF INITTIM1.92
*IF DEF,OCEAN,AND,-DEF,ATMOS INITTIM1.93
IF (MODEL_ASSIM_MODE .EQ. "Ocean " .AND. INITTIM1.94
2 RUN_ASSIM_MODE.EQ."Ocean ") THEN INITTIM1.95
DO I=1,6 INITTIM1.96
MODEL_BASIS_TIME(I)=O_FIXHD(27+I) INITTIM1.97
ENDDO INITTIM1.98
*ENDIF INITTIM1.99
*IF DEF,WAVE,AND,-DEF,OCEAN,AND,-DEF,ATMOS WRB1F401.539
IF (MODEL_ASSIM_MODE .EQ. "Wave " .AND. WRB1F401.540
& RUN_ASSIM_MODE.EQ."Wave ") THEN WRB1F401.541
DO I=1,6 WRB1F401.542
MODEL_BASIS_TIME(I)=W_FIXHD(27+I) WRB1F401.543
ENDDO WRB1F401.544
*ENDIF WRB1F401.545
ENDIF INITTIM1.100
GRB1F305.215
*IF DEF,OCEAN,OR,DEF,SLAB,OR,DEF,WAVE WRB1F401.546
CL Validate that timestep definitions are acceptable to internal clock TJ080294.109
CL algorithm - ie. periods defining a multiple of the basic timestep TJ080294.110
CL are in all cases an exact number of days. TJ080294.111
! This check should not be necessary when submodel changes complete GRB1F305.217
DO ii=1,N_INTERNAL_MODEL GRB1F305.218
im=INTERNAL_MODEL_LIST(ii) GRB1F305.219
! Skip check for atmos model GRB1F305.220
IF (im.ne.atmos_im) then GRB1F305.221
SECS_PER_PERIOD=SECS_PER_PERIODim(im) GRB1F305.222
IF (MOD(SECS_PER_PERIOD,86400).NE.0) THEN GRB1F305.223
ICODE=620 GRB1F305.224
CMESSAGE= GRB1F305.225
*'INITTIME: Internal model t/s period MUST BE whole no of days' GRB1F305.226
WRITE(6,*)CMESSAGE GIE0F403.329
WRITE(6,*)'Internal model id, period=',im,SECS_PER_PERIOD GIE0F403.330
GOTO 999 GRB1F305.229
ENDIF GRB1F305.230
ENDIF GRB1F305.231
ENDDO ! ii over N_INTERNAL_MODEL GRB1F305.232
*ENDIF Ocean or Slab or Wave WRB1F401.547
DO I=1,6 INITTIM1.101
*IF DEF,ATMOS INITTIM1.102
MODEL_DATA_TIME(I)=A_FIXHD(20+I) INITTIM1.103
*ELSE INITTIM1.104
*IF DEF,OCEAN WRB1F401.548
MODEL_DATA_TIME(I)=O_FIXHD(20+I) INITTIM1.105
*ELSE WRB1F401.549
MODEL_DATA_TIME(I)=W_FIXHD(20+I) WRB1F401.550
*ENDIF INITTIM1.106
*ENDIF WRB1F401.551
CL Initialise run_resubmit_target to zero INITTIM1.107
RUN_RESUBMIT_TARGET(I)=0 INITTIM1.108
ENDDO INITTIM1.109
CL Initialise run_resubmit_jobname to current jobname INITTIM1.110
RUN_RESUBMIT_JOBNAME = RUN_JOB_NAME INITTIM1.111
CL---------------------------------------------------------------------- INITTIM1.112
CL 1. Check MODEL_BASIS_TIME against dump validity time in header(s) INITTIM1.113
CL (first step only - skipped if assimilation or pseudo-assimilation) INITTIM1.114
CL INITTIM1.115
IF ( .NOT. INITTIM1.116
1 ((MODEL_ASSIM_MODE.EQ."Atmosphere".OR. INITTIM1.117
2 MODEL_ASSIM_MODE.EQ."Coupled ") .AND. INITTIM1.118
3 (RUN_ASSIM_MODE.EQ."Atmosphere".OR. INITTIM1.119
4 RUN_ASSIM_MODE.EQ."Coupled "))) THEN INITTIM1.120
*IF DEF,ATMOS INITTIM1.121
L_DT_ERROR= .NOT.(MODEL_BASIS_TIME(1).EQ.A_FIXHD(28) .AND. INITTIM1.122
1 MODEL_BASIS_TIME(2).EQ.A_FIXHD(29) .AND. INITTIM1.123
2 MODEL_BASIS_TIME(3).EQ.A_FIXHD(30) .AND. INITTIM1.124
3 MODEL_BASIS_TIME(4).EQ.A_FIXHD(31) .AND. INITTIM1.125
4 MODEL_BASIS_TIME(5).EQ.A_FIXHD(32) .AND. INITTIM1.126
5 MODEL_BASIS_TIME(6).EQ.A_FIXHD(33)) INITTIM1.127
IF (L_DT_ERROR) THEN INITTIM1.128
ICODE=1 INITTIM1.129
CMESSAGE="INITTIME: Atmosphere basis time mismatch" INITTIM1.130
GOTO 999 INITTIM1.131
ENDIF INITTIM1.132
*ENDIF INITTIM1.133
*IF DEF,OCEAN INITTIM1.134
L_DT_ERROR= .NOT.(MODEL_BASIS_TIME(1).EQ.O_FIXHD(28) .AND. INITTIM1.135
1 MODEL_BASIS_TIME(2).EQ.O_FIXHD(29) .AND. INITTIM1.136
2 MODEL_BASIS_TIME(3).EQ.O_FIXHD(30) .AND. INITTIM1.137
3 MODEL_BASIS_TIME(4).EQ.O_FIXHD(31) .AND. INITTIM1.138
4 MODEL_BASIS_TIME(5).EQ.O_FIXHD(32) .AND. INITTIM1.139
5 MODEL_BASIS_TIME(6).EQ.O_FIXHD(33)) INITTIM1.140
IF (L_DT_ERROR) THEN INITTIM1.141
ICODE=2 INITTIM1.142
CMESSAGE="INITTIME: Ocean basis time mismatch" INITTIM1.143
GOTO 999 INITTIM1.144
ENDIF INITTIM1.145
*ENDIF INITTIM1.146
*IF DEF,WAVE WRB1F401.552
L_DT_ERROR= .NOT.(MODEL_BASIS_TIME(1).EQ.W_FIXHD(28) .AND. WRB1F401.553
1 MODEL_BASIS_TIME(2).EQ.W_FIXHD(29) .AND. WRB1F401.554
2 MODEL_BASIS_TIME(3).EQ.W_FIXHD(30) .AND. WRB1F401.555
3 MODEL_BASIS_TIME(4).EQ.W_FIXHD(31) .AND. WRB1F401.556
4 MODEL_BASIS_TIME(5).EQ.W_FIXHD(32) .AND. WRB1F401.557
5 MODEL_BASIS_TIME(6).EQ.W_FIXHD(33)) WRB1F401.558
IF (L_DT_ERROR) THEN WRB1F401.559
ICODE=2 WRB1F401.560
CMESSAGE="INITTIME: Wave basis time mismatch" WRB1F401.561
WRITE(6,*)' model_basis_time ',model_basis_time GIE0F403.331
WRITE(6,*)' w_fixhd ',(w_fixhd(i),i=28,33) GIE0F403.332
GOTO 999 WRB1F401.564
ENDIF INITTIM1.147
*ENDIF WRB1F401.565
ENDIF WRB1F401.566
ELSE IF (.not.NewRun .and. MODEL_BASIS_TIME(2).eq.0 GRB1F400.30
& .and. MODEL_BASIS_TIME(3).eq.0 ) THEN GRB1F400.31
A_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(a_im)/ GRB1F400.32
& SECS_PER_PERIODim(a_im) GRB1F400.33
IF (H_STEPim(a_im).ge.MODEL_ANALYSIS_HRS*A_STEPS_PER_HR) THEN GRB1F400.34
! Convert model_data_time to days/secs GRB1F400.35
CALL TIME2SEC
(MODEL_DATA_TIME(1),MODEL_DATA_TIME(2), GRB1F400.36
& MODEL_DATA_TIME(3),MODEL_DATA_TIME(4), GRB1F400.37
& MODEL_DATA_TIME(5),MODEL_DATA_TIME(6), GRB1F400.38
& 0,0,ELAPSED_DAYS,ELAPSED_SECS,LCAL360) GRB1F400.39
INCREMENT_DAYS = 0 GRB1F400.40
INCREMENT_SECS = -MODEL_ANALYSIS_HRS*3600 GRB1F400.41
! Subtract model_analysis_hrs from model_data_time to recover GRB1F400.42
! model_basis_time GRB1F400.43
CALL TIME_DF
(ELAPSED_DAYS,ELAPSED_SECS,INCREMENT_DAYS, GRB1F400.44
& INCREMENT_SECS,FINAL_DAYS,FINAL_SECS) GRB1F400.45
CALL SEC2TIME
(FINAL_DAYS,FINAL_SECS,0,0, GRB1F400.46
& MODEL_BASIS_TIME(1),MODEL_BASIS_TIME(2), GRB1F400.47
& MODEL_BASIS_TIME(3),MODEL_BASIS_TIME(4), GRB1F400.48
& MODEL_BASIS_TIME(5),MODEL_BASIS_TIME(6), GRB1F400.49
& I_DAY_NUMBER,LCAL360) ARB2F403.158
WRITE(6,*)' INITTIME; analysis_hrs,incr_secs ',model_analysis_hrs, GIE0F403.333
& increment_secs GRB1F400.52
ELSE GRB1F400.53
do i = 1,6 GRB1F400.54
MODEL_BASIS_TIME(i) = MODEL_DATA_TIME(i) GRB1F400.55
end do GRB1F400.56
END IF GRB1F400.57
WRITE(6,*)' INITTIME; model_data_time= ',model_data_time GIE0F403.334
WRITE(6,*)' INITTIME; model_basis_time= ',model_basis_time GIE0F403.335
ENDIF INITTIM1.148
CL INITTIM1.149
CL 1.2 Check MODEL_DATA_TIME against dump data time in header(s) INITTIM1.150
CL INITTIM1.151
IF (MODEL_STATUS.NE.'Operational ') THEN INITTIM1.152
*IF DEF,ATMOS INITTIM1.153
L_DT_ERROR= .NOT.(MODEL_DATA_TIME(1).EQ.A_FIXHD(21) .AND. INITTIM1.154
1 MODEL_DATA_TIME(2).EQ.A_FIXHD(22) .AND. INITTIM1.155
2 MODEL_DATA_TIME(3).EQ.A_FIXHD(23) .AND. INITTIM1.156
3 MODEL_DATA_TIME(4).EQ.A_FIXHD(24) .AND. INITTIM1.157
4 MODEL_DATA_TIME(5).EQ.A_FIXHD(25) .AND. INITTIM1.158
5 MODEL_DATA_TIME(6).EQ.A_FIXHD(26)) INITTIM1.159
IF (L_DT_ERROR) THEN INITTIM1.160
ICODE=3 INITTIM1.161
CMESSAGE="INITTIME: Atmosphere data time mismatch" INITTIM1.162
GOTO 999 INITTIM1.163
ENDIF INITTIM1.164
*ENDIF INITTIM1.165
*IF DEF,OCEAN INITTIM1.166
L_DT_ERROR= .NOT.(MODEL_DATA_TIME(1).EQ.O_FIXHD(21) .AND. INITTIM1.167
1 MODEL_DATA_TIME(2).EQ.O_FIXHD(22) .AND. INITTIM1.168
2 MODEL_DATA_TIME(3).EQ.O_FIXHD(23) .AND. INITTIM1.169
3 MODEL_DATA_TIME(4).EQ.O_FIXHD(24) .AND. INITTIM1.170
4 MODEL_DATA_TIME(5).EQ.O_FIXHD(25) .AND. INITTIM1.171
5 MODEL_DATA_TIME(6).EQ.O_FIXHD(26)) INITTIM1.172
IF (L_DT_ERROR) THEN INITTIM1.173
ICODE=4 INITTIM1.174
CMESSAGE="INITTIME: Ocean data time mismatch" INITTIM1.175
GOTO 999 INITTIM1.176
ENDIF INITTIM1.177
*ENDIF INITTIM1.178
*IF DEF,WAVE WRB1F401.567
L_DT_ERROR= .NOT.(MODEL_DATA_TIME(1).EQ.W_FIXHD(21) .AND. WRB1F401.568
1 MODEL_DATA_TIME(2).EQ.W_FIXHD(22) .AND. WRB1F401.569
2 MODEL_DATA_TIME(3).EQ.W_FIXHD(23) .AND. WRB1F401.570
3 MODEL_DATA_TIME(4).EQ.W_FIXHD(24) .AND. WRB1F401.571
4 MODEL_DATA_TIME(5).EQ.W_FIXHD(25) .AND. WRB1F401.572
5 MODEL_DATA_TIME(6).EQ.W_FIXHD(26)) WRB1F401.573
IF (L_DT_ERROR) THEN WRB1F401.574
ICODE=4 WRB1F401.575
CMESSAGE="INITTIME: Wave data time mismatch" WRB1F401.576
GOTO 999 WRB1F401.577
ENDIF INITTIM1.179
*ENDIF WRB1F401.578
ENDIF WRB1F401.579
CL---------------------------------------------------------------------- INITTIM1.180
CL 2. Check that model calendar matches the dump header(s) INITTIM1.181
CL INITTIM1.182
IF (LCAL360) THEN GSS1F304.424
ICAL=2 INITTIM1.184
ELSE GSS1F304.425
ICAL=1 INITTIM1.186
END IF GSS1F304.426
*IF DEF,ATMOS INITTIM1.188
IF (A_FIXHD(8).NE.ICAL) THEN INITTIM1.189
ICODE=-1 INITTIM1.190
CMESSAGE="INITTIME: Model calendar doesn't match atmos dump" INITTIM1.191
WRITE(6,*)CMESSAGE GIE0F403.336
A_FIXHD(8)=ICAL INITTIM1.193
ENDIF INITTIM1.194
*ENDIF INITTIM1.195
*IF DEF,OCEAN INITTIM1.196
IF (O_FIXHD(8).NE.ICAL) THEN INITTIM1.197
ICODE=-2 INITTIM1.198
CMESSAGE="INITTIME: Model calendar doesn't match ocean dump" INITTIM1.199
WRITE(6,*)CMESSAGE GIE0F403.337
O_FIXHD(8)=ICAL INITTIM1.201
ENDIF INITTIM1.202
*ENDIF INITTIM1.203
*IF DEF,WAVE WRB1F401.580
IF (W_FIXHD(8).NE.ICAL) THEN WRB1F401.581
ICODE=-2 WRB1F401.582
CMESSAGE="INITTIME: Model calendar doesn't match wave dump" WRB1F401.583
WRITE(6,*)CMESSAGE GIE0F403.338
W_FIXHD(8)=ICAL WRB1F401.585
ENDIF WRB1F401.586
*ENDIF WRB1F401.587
CL---------------------------------------------------------------------- INITTIM1.204
CL 3. Initialise model time relative to zero point of calendar, using INITTIM1.205
CL 30 day month calendar for climate models, full calendar including INITTIM1.206
CL leap years for other models INITTIM1.207
CL INITTIM1.208
I_YEAR = MODEL_BASIS_TIME(1) INITTIM1.209
I_MONTH = MODEL_BASIS_TIME(2) INITTIM1.210
I_DAY = MODEL_BASIS_TIME(3) INITTIM1.211
I_HOUR = MODEL_BASIS_TIME(4) INITTIM1.212
I_MINUTE = MODEL_BASIS_TIME(5) INITTIM1.213
I_SECOND = MODEL_BASIS_TIME(6) INITTIM1.214
C INITTIM1.215
CALL TIME2SEC
(I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND, INITTIM1.216
1 0,0,BASIS_TIME_DAYS,BASIS_TIME_SECS,LCAL360) GSS1F304.427
CL INITTIM1.218
CL 3.1 Set initial time day number in dump header(s) only at start INITTIM1.219
CL INITTIM1.220
*IF DEF,ATMOS INITTIM1.221
IF(H_STEPim(atmos_im).EQ.0) THEN GRB1F305.234
CALL SEC2TIME
(0,0,BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.121
& I_YEAR,I_MONTH,I_DAY,I_HOUR, TJ080294.122
1 I_MINUTE,I_SECOND,I_DAY_NUMBER,LCAL360) GSS1F304.428
A_FIXHD(27) = I_DAY_NUMBER INITTIM1.225
ENDIF INITTIM1.226
*ENDIF INITTIM1.227
*IF DEF,OCEAN INITTIM1.228
IF(H_STEPim(ocean_im).EQ.0) THEN GRB1F305.235
CALL SEC2TIME
(0,0,BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.123
& I_YEAR,I_MONTH,I_DAY,I_HOUR, TJ080294.124
1 I_MINUTE,I_SECOND,I_DAY_NUMBER,LCAL360) GSS1F304.429
O_FIXHD(27) = I_DAY_NUMBER INITTIM1.232
ENDIF INITTIM1.233
*ENDIF INITTIM1.234
*IF DEF,WAVE WRB1F401.588
IF(H_STEPim(wave_im).EQ.0) THEN WRB1F401.589
CALL SEC2TIME
(0,0,BASIS_TIME_DAYS,BASIS_TIME_SECS, WRB1F401.590
& I_YEAR,I_MONTH,I_DAY,I_HOUR, WRB1F401.591
1 I_MINUTE,I_SECOND,I_DAY_NUMBER,LCAL360) WRB1F401.592
W_FIXHD(27) = I_DAY_NUMBER WRB1F401.593
ENDIF WRB1F401.594
*ENDIF WRB1F401.595
C INITTIM1.235
CL---------------------------------------------------------------------- INITTIM1.236
CL 4. If running in IAU mode, read in data time of IAU dump, and VSB2F404.40
CL calculate number of hours from basis time to IAU data time VSB2F404.41
CL (ie. MODEL_ANALYSIS_HRS). VSB2F404.42
CL VSB2F404.43
IF (L_IAU) THEN VSB2F404.44
VSB2F404.45
IAU_UNIT=108 VSB2F404.46
CALL FILE_OPEN
(IAU_UNIT,'ANLINCR',7,0,0,ICODE) VSB2F404.47
IF (ICODE.NE.0) THEN VSB2F404.48
CMESSAGE="INITTIME: Error opening IAU dump" VSB2F404.49
GOTO 999 VSB2F404.50
ENDIF VSB2F404.51
VSB2F404.52
CALL READ_FLH
(IAU_UNIT,IAU_FIXHD,LEN_FIXHD,ICODE,CMESSAGE) VSB2F404.53
IF (ICODE.NE.0) THEN VSB2F404.54
CMESSAGE="INITTIME: Error reading header of IAU dump" VSB2F404.55
GOTO 999 VSB2F404.56
ENDIF VSB2F404.57
VSB2F404.58
CALL FILE_CLOSE
(IAU_UNIT,'ANLINCR',7,0,0,ICODE) VSB2F404.59
IF (ICODE.NE.0) THEN VSB2F404.60
CMESSAGE="INITTIME: Error closing IAU dump" VSB2F404.61
GOTO 999 VSB2F404.62
ENDIF VSB2F404.63
VSB2F404.64
DO I=1,6 VSB2F404.65
IAU_DATA_TIME(I)=IAU_FIXHD(20+I) VSB2F404.66
ENDDO VSB2F404.67
VSB2F404.68
CALL TIME2SEC
(IAU_DATA_TIME(1),IAU_DATA_TIME(2), VSB2F404.69
& IAU_DATA_TIME(3),IAU_DATA_TIME(4), VSB2F404.70
& IAU_DATA_TIME(5),IAU_DATA_TIME(6), VSB2F404.71
& BASIS_TIME_DAYS,BASIS_TIME_SECS, VSB2F404.72
& IAU_TIME_DAYS,IAU_TIME_SECS,LCAL360) VSB2F404.73
VSB2F404.74
MODEL_ANALYSIS_HRS=IAU_TIME_DAYS*24 + IAU_TIME_SECS/3600 VSB2F404.75
VSB2F404.76
IF (MODEL_ANALYSIS_HRS.LT.0) THEN VSB2F404.77
ICODE=1 VSB2F404.78
CMESSAGE="INITTIME: IAU data time before basis time" VSB2F404.79
GOTO 999 VSB2F404.80
ENDIF VSB2F404.81
VSB2F404.82
MODEL_ASSIM_MODE='Atmosphere' VSB2F404.83
VSB2F404.84
ENDIF VSB2F404.85
CL---------------------------------------------------------------------- VSB2F404.86
CL 5. Initialise incremental step counter(s) to accord with basis time VSB2F404.87
CL and model restart time, and flag any difference which might occur INITTIM1.238
CL due to altering the timestep partway through an integration. INITTIM1.239
CL Set steps-per-group to match timestep, and echo both step and INITTIM1.240
CL steps-per-group information in the history file. INITTIM1.241
CL INITTIM1.242
DO ii=1,N_INTERNAL_MODEL GRB1F305.236
im=INTERNAL_MODEL_LIST(ii) GRB1F305.237
SECS_PER_PERIOD =SECS_PER_PERIODim(im) GRB1F305.238
STEPS_PER_PERIOD=STEPS_PER_PERIODim(im) GRB1F305.239
H_STEP = H_STEPim(im) GRB1F305.240
*IF DEF,ATMOS INITTIM1.243
IF(im.EQ.atmos_im) THEN GRB1F305.241
I_YEAR = A_FIXHD(28) GRB1F305.242
I_MONTH = A_FIXHD(29) GRB1F305.243
I_DAY = A_FIXHD(30) GRB1F305.244
I_HOUR = A_FIXHD(31) GRB1F305.245
I_MINUTE = A_FIXHD(32) GRB1F305.246
I_SECOND = A_FIXHD(33) GRB1F305.247
ENDIF ! atmos_im GRB1F305.248
*ENDIF Atmos GRB1F305.249
*IF DEF,SLAB INITTIM1.278
IF(im.EQ.slab_im) THEN GRB1F305.250
I_YEAR = A_FIXHD(28) GRB1F305.251
I_MONTH = A_FIXHD(29) GRB1F305.252
I_DAY = A_FIXHD(30) GRB1F305.253
I_HOUR = A_FIXHD(31) GRB1F305.254
I_MINUTE = A_FIXHD(32) GRB1F305.255
I_SECOND = A_FIXHD(33) GRB1F305.256
ENDIF ! slab_im GRB1F305.257
*ENDIF Slab GRB1F305.258
*IF DEF,OCEAN INITTIM1.290
IF(im.EQ.ocean_im) THEN GRB1F305.259
I_YEAR = O_FIXHD(28) GRB1F305.260
I_MONTH = O_FIXHD(29) GRB1F305.261
I_DAY = O_FIXHD(30) GRB1F305.262
I_HOUR = O_FIXHD(31) GRB1F305.263
I_MINUTE = O_FIXHD(32) GRB1F305.264
I_SECOND = O_FIXHD(33) GRB1F305.265
ENDIF ! ocean_im GRB1F305.266
*ENDIF Ocean GRB1F305.267
*IF DEF,WAVE WRB1F401.596
IF(im.EQ.wave_im) THEN WRB1F401.597
I_YEAR = W_FIXHD(28) WRB1F401.598
I_MONTH = W_FIXHD(29) WRB1F401.599
I_DAY = W_FIXHD(30) WRB1F401.600
I_HOUR = W_FIXHD(31) WRB1F401.601
I_MINUTE = W_FIXHD(32) WRB1F401.602
I_SECOND = W_FIXHD(33) WRB1F401.603
ENDIF ! wave_im WRB1F401.604
*ENDIF Wave WRB1F401.605
C INITTIM1.297
CALL TIME2SEC
(I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND, INITTIM1.298
1 BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.141
2 ELAPSED_DAYS,ELAPSED_SECS,LCAL360) GSS1F304.433
C INITTIM1.300
CALL TIME2SEC
(MODEL_DATA_TIME(1),MODEL_DATA_TIME(2), INITTIM1.301
1 MODEL_DATA_TIME(3),MODEL_DATA_TIME(4), INITTIM1.302
2 MODEL_DATA_TIME(5),MODEL_DATA_TIME(6), INITTIM1.303
3 BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.143
4 DATA_MINUS_BASIS_DAYS,DATA_MINUS_BASIS_SECS, GSS1F304.434
5 LCAL360) GSS1F304.435
C INITTIM1.305
DATA_MINUS_BASIS_HRS= DATA_MINUS_BASIS_SECS/3600+ TJ080294.145
& 24*DATA_MINUS_BASIS_DAYS TJ080294.146
C TJ080294.147
FORECAST_HRS= - DATA_MINUS_BASIS_HRS INITTIM1.307
CL DATA_MINUS_BASIS_HRS can only be gt 0 for CRUNs when an earlier INITTIM1.308
CL run has had MODEL_DATA_TIME updated. For correct values of LBFT INITTIM1.309
CL header in CRUNs reset to 0. INITTIM1.310
IF(DATA_MINUS_BASIS_HRS.GT.0) DATA_MINUS_BASIS_HRS=0 INITTIM1.311
FORECAST_HRS= ELAPSED_SECS/3600 + 24*ELAPSED_DAYS TJ080294.148
& - DATA_MINUS_BASIS_HRS TJ080294.149
IF (L_IAU) THEN VSB2F404.88
IF (FORECAST_HRS.GE.(MODEL_ANALYSIS_HRS-DATA_MINUS_BASIS_HRS)) VSB2F404.89
& FORECAST_HRS=FORECAST_HRS- VSB2F404.90
& (MODEL_ANALYSIS_HRS-DATA_MINUS_BASIS_HRS) VSB2F404.91
ELSE VSB2F404.92
IF (FORECAST_HRS.GE.MODEL_ANALYSIS_HRS) INITTIM1.313
& FORECAST_HRS=FORECAST_HRS-MODEL_ANALYSIS_HRS INITTIM1.314
ENDIF VSB2F404.93
C INITTIM1.315
CALL TIM2STEP
(ELAPSED_DAYS,ELAPSED_SECS, TJ080294.150
& STEPS_PER_PERIOD,SECS_PER_PERIOD,STEP) GRB1F305.268
GROUP= (MODEL_HRS_PER_GROUP*3600*STEPS_PER_PERIOD) GRB1F305.269
& /SECS_PER_PERIOD GRB1F305.270
IF ((ELAPSED_DAYS.NE.0.OR.ELAPSED_SECS.NE.0).AND. GRB1F400.60
& STEP.NE.H_STEP) THEN GRB1F305.271
ICODE=-1 INITTIM1.320
CMESSAGE="INITTIME: Warning- New STEP doesn't match old value" GRB1F305.272
WRITE(6,*)CMESSAGE GIE0F403.339
WRITE(6,*)'Internal model id',im,' Old=',H_STEP,' New=',STEP GIE0F403.340
ENDIF INITTIM1.323
GRB1F305.274
STEPim(im) = STEP GRB1F305.275
GROUPim(im) = GROUP GRB1F305.276
GRB1F305.277
H_STEPim(im) = STEP GRB1F305.278
H_GROUPim(im) = GROUP GRB1F305.279
ENDDO ! ii over N_INTERNAL_MODEL GRB1F305.280
GRB1F305.281
CL---------------------------------------------------------------------- INITTIM1.327
CL 6. Set target end steps from target end time using VSB2F404.94
CL relative time convention INITTIM1.329
CL INITTIM1.330
CL Overwrite history resubmit flag with user set switch. GRB3F400.6
RUN_RESUBMIT = CONTROL_RESUBMIT GRB3F400.7
IF (RUN_RESUBMIT.eq."N") THEN INITTIM1.331
I_YEAR = RUN_TARGET_END(1) INITTIM1.332
I_MONTH = RUN_TARGET_END(2) INITTIM1.333
I_DAY = RUN_TARGET_END(3) INITTIM1.334
I_HOUR = RUN_TARGET_END(4) INITTIM1.335
I_MINUTE = RUN_TARGET_END(5) INITTIM1.336
I_SECOND = RUN_TARGET_END(6) INITTIM1.337
IF (LCAL360) THEN GSS1F304.436
CALL TIME2SEC
(I_YEAR,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.339
1 I_SECOND,0,0,ELAPSED_DAYS,ELAPSED_SECS,LCAL360) GSS1F304.437
ELSE GSS1F304.438
CALL TIME2SEC
(I_YEAR+1,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.342
1 I_SECOND,0,0,ELAPSED_DAYS,ELAPSED_SECS,LCAL360) GSS1F304.439
END IF GSS1F304.440
FINAL_DAYS=ELAPSED_DAYS GSM1F401.32
FINAL_SECS=ELAPSED_SECS GSM1F401.33
LAST_RUN_SECS=0 GSM1F401.34
LAST_RUN_DAYS=0 GSM1F401.35
RUN_RESUBMIT_JOBNAME = ' ' INITTIM1.345
ELSE INITTIM1.346
CL INITTIM1.347
CL work out next jobname and set present jobname INITTIM1.348
CL INITTIM1.349
RUN_JOB_NAME = RUN_RESUBMIT_JOBNAME INITTIM1.350
READ (RUN_JOB_NAME,2) CDUMMY,ICOUNT INITTIM1.351
2 FORMAT(A6,I2) INITTIM1.352
3 FORMAT(A6,A1,I1) INITTIM1.353
ICOUNT=MOD(ICOUNT+1,100) INITTIM1.354
IF (ICOUNT.LT.10) THEN INITTIM1.355
WRITE (RUN_RESUBMIT_JOBNAME,3) CDUMMY,'0',ICOUNT INITTIM1.356
ELSE INITTIM1.357
WRITE (RUN_RESUBMIT_JOBNAME,2) CDUMMY,ICOUNT INITTIM1.358
ENDIF INITTIM1.359
CL INITTIM1.360
CL Work out last target date in seconds INITTIM1.361
CL INITTIM1.362
I_YEAR = RUN_RESUBMIT_TARGET(1) INITTIM1.363
I_MONTH = RUN_RESUBMIT_TARGET(2) INITTIM1.364
I_DAY = RUN_RESUBMIT_TARGET(3) INITTIM1.365
I_HOUR = RUN_RESUBMIT_TARGET(4) INITTIM1.366
I_MINUTE = RUN_RESUBMIT_TARGET(5) INITTIM1.367
I_SECOND = RUN_RESUBMIT_TARGET(6) INITTIM1.368
IF (LCAL360) THEN GSS1F304.441
CALL TIME2SEC
(I_YEAR,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.370
1 I_SECOND,0,0,LAST_RUN_DAYS,LAST_RUN_SECS,LCAL360) GSS1F304.442
ELSE GSS1F304.443
CALL TIME2SEC
(I_YEAR+1,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.373
1 I_SECOND,0,0,LAST_RUN_DAYS,LAST_RUN_SECS,LCAL360) GSS1F304.444
END IF GSS1F304.445
CL INITTIM1.376
CL Work out increment in target date required INITTIM1.377
CL INITTIM1.378
I_YEAR = RUN_RESUBMIT_INC(1) INITTIM1.379
I_MONTH = RUN_RESUBMIT_INC(2) INITTIM1.380
I_DAY = RUN_RESUBMIT_INC(3) INITTIM1.381
I_HOUR = RUN_RESUBMIT_INC(4) INITTIM1.382
I_MINUTE = RUN_RESUBMIT_INC(5) INITTIM1.383
I_SECOND = RUN_RESUBMIT_INC(6) INITTIM1.384
IF (LCAL360) THEN GSS1F304.446
CALL TIME2SEC
(I_YEAR,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.386
1 I_SECOND,0,0,INCREMENT_DAYS,INCREMENT_SECS, GSS1F304.447
2 LCAL360) GSS1F304.448
ELSE GSS1F304.449
CALL TIME2SEC
(I_YEAR+1,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.389
1 I_SECOND,0,0,INCREMENT_DAYS,INCREMENT_SECS, GSS1F304.450
2 LCAL360) GSS1F304.451
END IF GSS1F304.452
CL INITTIM1.392
CL Work out final target date required in days/seconds TJ080294.160
CL INITTIM1.394
I_YEAR = RUN_TARGET_END(1) INITTIM1.395
I_MONTH = RUN_TARGET_END(2) INITTIM1.396
I_DAY = RUN_TARGET_END(3) INITTIM1.397
I_HOUR = RUN_TARGET_END(4) INITTIM1.398
I_MINUTE = RUN_TARGET_END(5) INITTIM1.399
I_SECOND = RUN_TARGET_END(6) INITTIM1.400
IF (LCAL360) THEN GSS1F304.453
CALL TIME2SEC
(I_YEAR,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.402
1 I_SECOND,0,0,FINAL_DAYS,FINAL_SECS,LCAL360) GSS1F304.454
ELSE GSS1F304.455
CALL TIME2SEC
(I_YEAR+1,I_MONTH+1,I_DAY+1,I_HOUR,I_MINUTE, INITTIM1.405
1 I_SECOND,0,0,FINAL_DAYS,FINAL_SECS,LCAL360) GSS1F304.456
END IF GSS1F304.457
CL INITTIM1.408
CL target for this job INITTIM1.409
CL INITTIM1.410
ELAPSED_DAYS=LAST_RUN_DAYS+INCREMENT_DAYS TJ080294.163
ELAPSED_SECS=LAST_RUN_SECS+INCREMENT_SECS INITTIM1.411
IF (ELAPSED_SECS.GT.86400) THEN TJ080294.164
ELAPSED_SECS=ELAPSED_SECS-86400 TJ080294.165
ELAPSED_DAYS=ELAPSED_DAYS+1 TJ080294.166
ENDIF TJ080294.167
IF ((ELAPSED_DAYS.GT.FINAL_DAYS).OR. TJ080294.168
& ((ELAPSED_DAYS.EQ.FINAL_DAYS).AND.(ELAPSED_SECS.GT.FINAL_SECS))) TJ080294.169
& THEN TJ080294.170
ELAPSED_DAYS = FINAL_DAYS TJ080294.171
ELAPSED_SECS = FINAL_SECS INITTIM1.413
ENDIF INITTIM1.414
INITTIM1.415
ENDIF INITTIM1.416
IF (ELAPSED_DAYS.LT.0) THEN TJ080294.172
ICODE=1 INITTIM1.418
CMESSAGE="INITTIME: Negative run length requested" INITTIM1.419
GOTO 999 INITTIM1.420
ENDIF INITTIM1.421
C INITTIM1.422
DO ii=1,N_INTERNAL_MODEL GRB1F305.282
im=INTERNAL_MODEL_LIST(ii) GRB1F305.283
SECS_PER_PERIOD =SECS_PER_PERIODim(im) GRB1F305.284
STEPS_PER_PERIOD=STEPS_PER_PERIODim(im) GRB1F305.285
CALL TIM2STEP
(ELAPSED_DAYS,ELAPSED_SECS, GRB1F305.286
* STEPS_PER_PERIOD,SECS_PER_PERIOD,TARGET_END_STEP) GRB1F305.287
TARGET_END_STEPim(im)=TARGET_END_STEP GRB1F305.288
IF(RUN_RESUBMIT.eq."Y") THEN GGH1F401.3
!L GGH1F401.4
!L Change TARGET_END_STEPim for CRUNs, to make sure it coincides GGH1F401.5
!L with period 1 mean times, if this is not the final job. GGH1F401.6
!L GGH1F401.7
!L The tests check that 1) This is not the final job in the run. GGH1F401.8
!L 2) Meaning has been requested. 3) The length of the job is GGH1F401.9
!L greater than the meaning period. GGH1F401.10
!L GGH1F401.11
IF(((TARGET_END_STEP*SECS_PER_PERIOD)/STEPS_PER_PERIOD .LT. GGH1F401.12
& (FINAL_SECS+(FINAL_DAYS*24*3600))) .AND. GGH1F401.13
& (MEANFREQim(1,im) .NE. 0) .AND. GGH1F401.14
& ((TARGET_END_STEP*SECS_PER_PERIOD)/STEPS_PER_PERIOD - GGH1F401.15
& (LAST_RUN_SECS+(LAST_RUN_DAYS*24*3600)) .GT. GGH1F401.16
& (MEANFREQim(1,im)*DUMPFREQim(im)*SECS_PER_PERIOD) GGH1F401.17
& /STEPS_PER_PERIOD)) THEN GGH1F401.18
WRITE(6,*)'INITTIM: Modifying TARGET_END_STEP from ', GSM2F405.16
& TARGET_END_STEPim(im) GSM2F405.17
IF (TARGET_END_STEP .GE. (OFFSET_DUMPSim(im) * GJC0F405.26
& DUMPFREQim(im))) THEN GGH1F401.20
TARGET_END_STEPim(im) = TARGET_END_STEP - GGH1F401.21
& MOD(TARGET_END_STEP - (OFFSET_DUMPSim(im)*DUMPFREQim(im)), GGH1F401.22
& (MEANFREQim(1,im) * DUMPFREQim(im))) GGH1F401.23
ELSE GGH1F401.24
TARGET_END_STEPim(im) = TARGET_END_STEP - GJC0F405.27
& MOD(TARGET_END_STEP - (OFFSET_DUMPSim(im)*DUMPFREQim(im)), GGH1F401.26
& (MEANFREQim(1,im) * DUMPFREQim(im))) GSM2F405.18
IF (TARGET_END_STEPim(im).GT.TARGET_END_STEP) THEN GSM2F405.19
TARGET_END_STEPim(im)= GSM2F405.20
& TARGET_END_STEPim(im)-(MEANFREQim(1,im) * DUMPFREQim(im)) GSM2F405.21
ENDIF GSM2F405.22
ENDIF GSM2F405.23
WRITE(6,*)'Modified to ',TARGET_END_STEPim(im) GSM2F405.24
! If this is a coupled atmosphere-slab run, the TARGET_END_STEP GGH1F401.30
! needs to be set correctly for the slab part of the run. GGH1F401.31
*IF DEF,SLAB GGH1F401.32
TARGET_END_STEPim(S_IM)= GJC0F405.28
& (TARGET_END_STEPim(A_IM)*STEPS_PER_PERIODim(S_IM) GGH1F401.34
& *SECS_PER_PERIODim(A_IM)) GGH1F401.35
& /(STEPS_PER_PERIODim(A_IM)*SECS_PER_PERIODim(S_IM)) GGH1F401.36
*ENDIF GGH1F401.37
ENDIF GGH1F401.38
ENDIF GGH1F401.39
ENDDO ! ii over N_INTERNAL_MODEL GRB1F305.289
CL---------------------------------------------------------------------- INITTIM1.430
CL 7. Set assimilation start timestep, length in steps, and overlap into VSB2F404.95
CL forecast from basic control information INITTIM1.432
CL INITTIM1.433
*IF DEF,ATMOS INITTIM1.434
A_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(a_im)/ GRB1F305.290
& SECS_PER_PERIODim(a_im) GRB1F305.291
ASSIM_FIRSTSTEPim(a_im) = A_ASSIM_START_HR*A_STEPS_PER_HR GDR5F305.81
ASSIM_STEPSim(a_im) = MODEL_ANALYSIS_HRS * A_STEPS_PER_HR - GDR5F305.82
& ASSIM_FIRSTSTEPim(a_im) GDR5F305.83
ASSIM_EXTRASTEPSim(a_im) = (A_ASSIM_END_HR-MODEL_ANALYSIS_HRS) GDR5F305.84
& *A_STEPS_PER_HR INITTIM1.439
*ENDIF INITTIM1.440
*IF DEF,OCNASSM INITTIM1.441
IF(MODEL_STATUS .EQ. 'Operational') THEN ORW0F404.5
ASSIM_FIRSTSTEPim(o_im) = ORW0F404.6
& O_ASSIM_START_HR*3600*STEPS_PER_PERIODim(o_im)/ ORW0F404.7
& SECS_PER_PERIODim(o_im) ORW0F404.8
ELSE ORW0F404.9
ASSIM_FIRSTSTEPim(o_im) = STEPim(o_im) + ORW0F404.10
& O_ASSIM_START_HR*3600*STEPS_PER_PERIODim(o_im)/ ORW0F404.11
& SECS_PER_PERIODim(o_im) ORW0F404.12
ENDIF ORW0F404.13
ASSIM_STEPSim(o_im) = (MODEL_ANALYSIS_HRS - O_ASSIM_START_HR) * GDR5F305.86
& 3600*STEPS_PER_PERIODim(o_im)/SECS_PER_PERIODim(o_im) GRB1F305.294
ASSIM_EXTRASTEPSim(o_im) = (O_ASSIM_END_HR-MODEL_ANALYSIS_HRS)* GDR5F305.87
& 3600*STEPS_PER_PERIODim(o_im)/SECS_PER_PERIODim(o_im) GRB1F305.295
C INITTIM1.448
O_CLM_FIRSTSTEP = O_CLM_START_HR * INITTIM1.449
& 3600*STEPS_PER_PERIODim(o_im)/SECS_PER_PERIODim(o_im) GRB1F305.296
O_CLM_LASTSTEP = O_CLM_END_HR * INITTIM1.451
& 3600*STEPS_PER_PERIODim(o_im)/SECS_PER_PERIODim(o_im) GRB1F305.297
*ENDIF OCNASSM INITTIM1.453
*IF DEF,WAVE WRB1F401.606
WRITE(6,*)'INITTIME: will need code for Wave Assimilation control' GIE0F403.341
*ENDIF WRB1F401.608
CL---------------------------------------------------------------------- INITTIM1.454
CL 8. Set interface start/end and frequency in steps from hours VSB2F404.96
CL This step is now done in deck INTFCTL GMB1F405.321
CL---------------------------------------------------------------------- INITTIM1.470
CL 9. Calculate length of timestep in seconds in CTIME VSB2F404.97
CL INITTIM1.473
*IF DEF,ATMOS INITTIM1.474
SECS_PER_STEPim(atmos_sm) = FLOAT(SECS_PER_PERIODim(atmos_sm))/ GRB1F305.309
& FLOAT(STEPS_PER_PERIODim(atmos_sm)) GRB1F305.310
*ENDIF INITTIM1.476
*IF DEF,OCEAN INITTIM1.477
SECS_PER_STEPim(ocean_sm) = FLOAT(SECS_PER_PERIODim(ocean_sm))/ GRB1F305.313
& FLOAT(STEPS_PER_PERIODim(ocean_sm)) GRB1F305.314
*ENDIF INITTIM1.479
*IF DEF,WAVE WRB1F401.609
SECS_PER_STEPim(wave_sm) = FLOAT(SECS_PER_PERIODim(wave_sm))/ WRB1F401.610
& FLOAT(STEPS_PER_PERIODim(wave_sm)) WRB1F401.611
*ENDIF WRB1F401.612
CL---------------------------------------------------------------------- INITTIM1.480
CL 10. Set current time in CTIME according to submodel VSB2F404.98
CL INITTIM1.482
*IF DEF,ATMOS INITTIM1.483
IF (submodel.EQ.atmos_sm) THEN GRB1F305.317
I_YEAR = A_FIXHD(28) INITTIM1.485
I_MONTH = A_FIXHD(29) INITTIM1.486
I_DAY = A_FIXHD(30) INITTIM1.487
I_HOUR = A_FIXHD(31) INITTIM1.488
I_MINUTE = A_FIXHD(32) INITTIM1.489
I_SECOND = A_FIXHD(33) INITTIM1.490
ENDIF INITTIM1.491
*ENDIF INITTIM1.492
*IF DEF,OCEAN INITTIM1.493
IF (submodel.EQ.ocean_sm) THEN GRB1F305.318
I_YEAR = O_FIXHD(28) INITTIM1.495
I_MONTH = O_FIXHD(29) INITTIM1.496
I_DAY = O_FIXHD(30) INITTIM1.497
I_HOUR = O_FIXHD(31) INITTIM1.498
I_MINUTE = O_FIXHD(32) INITTIM1.499
I_SECOND = O_FIXHD(33) INITTIM1.500
ENDIF WRB1F401.613
*ENDIF WRB1F401.614
*IF DEF,WAVE WRB1F401.615
IF (submodel.EQ.wave_sm) THEN WRB1F401.616
I_YEAR = W_FIXHD(28) WRB1F401.617
I_MONTH = W_FIXHD(29) WRB1F401.618
I_DAY = W_FIXHD(30) WRB1F401.619
I_HOUR = W_FIXHD(31) WRB1F401.620
I_MINUTE = W_FIXHD(32) WRB1F401.621
I_SECOND = W_FIXHD(33) WRB1F401.622
ENDIF INITTIM1.501
*ENDIF INITTIM1.502
PREVIOUS_TIME(1)=I_YEAR INITTIM1.503
PREVIOUS_TIME(2)=I_MONTH INITTIM1.504
PREVIOUS_TIME(3)=I_DAY INITTIM1.505
PREVIOUS_TIME(4)=I_HOUR INITTIM1.506
PREVIOUS_TIME(5)=I_MINUTE INITTIM1.507
PREVIOUS_TIME(6)=I_SECOND INITTIM1.508
PREVIOUS_TIME(7)=0 ! Not yet set INITTIM1.509
C INITTIM1.510
999 CONTINUE INITTIM1.511
RETURN INITTIM1.512
CL---------------------------------------------------------------------- INITTIM1.513
END INITTIM1.514
*ENDIF INITTIM1.515