*IF DEF,CONTROL INITMEA1.2
C ******************************COPYRIGHT****************************** GTS2F400.4789
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4790
C GTS2F400.4791
C Use, duplication or disclosure of this code is subject to the GTS2F400.4792
C restrictions as set forth in the contract. GTS2F400.4793
C GTS2F400.4794
C Meteorological Office GTS2F400.4795
C London Road GTS2F400.4796
C BRACKNELL GTS2F400.4797
C Berkshire UK GTS2F400.4798
C RG12 2SZ GTS2F400.4799
C GTS2F400.4800
C If no contract has been raised with this copy of the code, the use, GTS2F400.4801
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4802
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4803
C Modelling at the above address. GTS2F400.4804
C ******************************COPYRIGHT****************************** GTS2F400.4805
C GTS2F400.4806
CLL INITMEA1.3
CLL Subroutine: INITMEA1.4
CLL INITMEAN INITMEA1.5
CLL INITMEA1.6
CLL Purpose: INITMEA1.7
CLL To set up and check the input parameters for the INITMEA1.8
CLL meaning subroutines INITMEA1.9
CLL INITMEA1.10
CLL Tested under compiler: Tested under OS version: INITMEA1.11
CLL cft77 UNICOS 5.1 INITMEA1.12
CLL INITMEA1.13
CLL Model Modification history from model version 3.0: INITMEA1.14
CLL version date INITMEA1.15
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.87
CLL portability. Author Tracey Smith. TS150793.88
CLL 3.3 06/04/94 Loop over ALL dump fields in setting IBUFLEN. TJ300394.64
CLL Change I_AO to ISUBMODL. Author: Tim Johns. TJ300394.65
CLL 3.3 08/02/94 Modify calls to TIME2SEC/SEC2TIME to output/input TJ080294.199
CLL elapsed times in days & secs, for portability. TCJ TJ080294.200
CLL 3.4 17/06/94 Argument LCAL360 added and passed to GSS1F304.407
CLL S/R TIME2SEC GSS1F304.408
CLL S.J.Swarbrick GSS1F304.409
CLL 3.4 08/08/94 Correct misspelled TIM2STEP in EXTERNAL stmt. TCJ GTJ0F304.3
CLL 3.5 12/04/95 Sub-models stage 1: revise History and Control file GRB1F305.143
CLL contents. RTHBarnes. GRB1F305.144
CLL 4.1 17/04/96 Introduce wave sub-model. RTHBarnes. WRB1F401.526
!LL 4.5 11/09/98 Set OFFSET_DUMPS for slab model. K Rogers. GKR2F405.6
CLL INITMEA1.16
CLL Programming standard: INITMEA1.17
CLL UM Doc Paper 3 INITMEA1.18
CLL INITMEA1.19
CLL Logical system components covered: INITMEA1.20
CLL C5 INITMEA1.21
CLL INITMEA1.22
CLL Project tasks: INITMEA1.23
CLL C5 INITMEA1.24
CLL INITMEA1.25
CLL External documentation: INITMEA1.26
CLL On-line UM document C5 - Control of means calculations INITMEA1.27
CLL INITMEA1.28
C*L Interface and arguments: INITMEA1.29
SUBROUTINE INITMEAN ( 1,3@DYALLOC.2021
*CALL ARGSIZE
@DYALLOC.2022
*CALL ARGDUMA
@DYALLOC.2023
*CALL ARGDUMO
@DYALLOC.2024
*CALL ARGDUMW
WRB1F401.527
+ ISUBMODL,ICODE,CMESSAGE) GRB1F305.145
C INITMEA1.31
IMPLICIT NONE INITMEA1.32
@DYALLOC.2026
C*L Arguments @DYALLOC.2027
@DYALLOC.2028
*CALL TYPSIZE
@DYALLOC.2029
*CALL TYPDUMA
@DYALLOC.2030
*CALL TYPDUMO
@DYALLOC.2031
*CALL TYPDUMW
WRB1F401.528
@DYALLOC.2032
INTEGER INITMEA1.34
& ISUBMODL ! IN Submodel identifier (eg. atmos,ocean) TJ300394.67
& ,ICODE ! OUT return code; successful=0, error> 0 @DYALLOC.2034
C INITMEA1.37
CHARACTER*80 TS150793.89
& CMESSAGE ! OUT Error message if ICODE > 0 @DYALLOC.2035
@DYALLOC.2036
C INITMEA1.40
C Common blocks INITMEA1.41
C INITMEA1.42
*CALL CMAXSIZE
GRB1F305.146
*CALL CSUBMODL
GRB1F305.147
*CALL CHSUNITS
GRB1F305.148
*CALL CTIME
INITMEA1.44
*CALL CHISTORY
INITMEA1.45
*CALL CCONTROL
GRB1F305.149
*CALL CMEANCTL
INITMEA1.46
*CALL CLOOKADD
INITMEA1.47
C*L INITMEA1.48
C*L External subroutines called: INITMEA1.49
EXTERNAL TIME2SEC,TIM2STEP GTJ0F304.4
C INITMEA1.51
C Local variables and arrays INITMEA1.52
C INITMEA1.53
INTEGER INITMEA1.54
& IFIND,I, ! Loop counts INITMEA1.55
& NMEANS, ! No. of means chosen (fixed) INITMEA1.56
& MEAN_REFTIME_DAYS, ! Reference time for period means (D) TJ080294.202
& MEAN_REFTIME_SECS, ! Reference time for period means (s) INITMEA1.57
& MEAN_START_DAYS, ! Start time for model run (days) TJ080294.203
& MEAN_START_SECS, ! Start time for model run (s) INITMEA1.58
& MEAN_OFFSET_DAYS, ! Offset from mean ref. time (days) TJ080294.204
& MEAN_OFFSET_SECS, ! Offset from mean ref. time (s) INITMEA1.59
& MEAN_OFFSET_STEPS, ! Offset from mean ref. time (steps) TJ080294.205
& MEAN_FREQ_DUMPS, ! Mean frequency in dumps (updated) INITMEA1.60
& HOUR_SECS, ! No. of secs in an hour INITMEA1.61
& YEAR, ! Local variables for year, INITMEA1.62
& MONTH, ! month etc INITMEA1.63
& DAY, INITMEA1.64
& HOUR, INITMEA1.65
& MINUTE, INITMEA1.66
& SECOND INITMEA1.67
C INITMEA1.68
CMESSAGE=' ' INITMEA1.69
C INITMEA1.70
ICODE=0 INITMEA1.71
C INITMEA1.72
HOUR_SECS=3600 INITMEA1.73
C INITMEA1.74
C Define mode of use for means program INITMEA1.75
C INITMEA1.76
*IF DEF,ATMOS INITMEA1.77
IF(ISUBMODL.EQ.atmos_sm)THEN TJ300394.69
WRITE(6,*)'INITMEAN: ***** Called in ATMOSPHERIC mode *****'
GIE0F403.317
ENDIF INITMEA1.80
*ENDIF INITMEA1.81
*IF DEF,OCEAN INITMEA1.82
IF(ISUBMODL.EQ.ocean_sm)THEN TJ300394.70
WRITE(6,*)'INITMEAN: ***** Called in OCEAN mode *****'
GIE0F403.318
ENDIF WRB1F401.529
*ENDIF WRB1F401.530
*IF DEF,WAVE WRB1F401.531
IF(ISUBMODL.EQ.wave_sm)THEN WRB1F401.532
WRITE(6,*)'INITMEAN: ***** Called in WAVE mode *****'
GIE0F403.319
WRITE(6,*)'INITMEAN: *** Code not yet written for WAVE model ***' GIE0F403.320
GO TO 999 WRB1F401.535
ENDIF INITMEA1.85
*ENDIF INITMEA1.86
C INITMEA1.87
C Check input parameters INITMEA1.88
C INITMEA1.89
NMEANS=0 INITMEA1.90
C INITMEA1.91
DO 20 IFIND=1,4 INITMEA1.92
*IF DEF,ATMOS INITMEA1.93
IF(ISUBMODL.EQ.atmos_sm)THEN TJ300394.71
IF(MEANFREQim(IFIND,atmos_sm).GT.0)THEN GRB1F305.150
NMEANS=NMEANS+1 INITMEA1.96
ENDIF INITMEA1.97
IF(MEANFREQim(IFIND,atmos_sm).EQ.1.OR. GRB1F305.151
& MEANFREQim(IFIND,atmos_sm).LT.0)THEN GRB1F305.152
ICODE=1 INITMEA1.99
CMESSAGE='INITMEAN: Invalid atmos mean frequency' INITMEA1.100
WRITE(6,*) 'INITMEAN: MEANFREQ(',IFIND,atmos_sm,') set to ', GIE0F403.321
& MEANFREQim(IFIND,atmos_sm) GRB1F305.154
GO TO 999 INITMEA1.103
ENDIF INITMEA1.104
ENDIF INITMEA1.105
*ENDIF INITMEA1.106
*IF DEF,OCEAN INITMEA1.107
IF(ISUBMODL.EQ.ocean_sm)THEN TJ300394.72
IF(MEANFREQim(IFIND,ocean_sm).GT.0)THEN GRB1F305.155
NMEANS=NMEANS+1 INITMEA1.110
ENDIF INITMEA1.111
IF(MEANFREQim(IFIND,ocean_sm).EQ.1.OR. GRB1F305.156
& MEANFREQim(IFIND,ocean_sm).LT.0)THEN GRB1F305.157
ICODE=2 INITMEA1.113
CMESSAGE='INITMEAN: Invalid ocean mean frequency' INITMEA1.114
WRITE(6,*) 'INITMEAN: MEANFREQ(',IFIND,ocean_sm,') set to ', GIE0F403.322
& MEANFREQim(IFIND,ocean_sm) GRB1F305.159
GO TO 999 INITMEA1.117
ENDIF INITMEA1.118
ENDIF INITMEA1.119
*ENDIF INITMEA1.120
20 CONTINUE INITMEA1.121
IF(ISUBMODL.EQ.atmos_sm .or. ISUBMODL.EQ.ocean_sm)THEN GRB1F305.160
MEAN_NUMBERim(ISUBMODL) = NMEANS GRB1F305.161
IF(MEAN_NUMBERim(ISUBMODL).EQ.0)THEN GRB1F305.162
ICODE=-1 INITMEA1.126
WRITE(6,*) 'INITMEAN: No means requested' GIE0F403.323
GO TO 999 INITMEA1.128
ENDIF INITMEA1.129
ENDIF INITMEA1.130
C INITMEA1.142
C If means are to be created: INITMEA1.143
C Establish whether an offset exists between the INITMEA1.144
C reference time for means creation and the start INITMEA1.145
C of the integration INITMEA1.146
C N.B. In the case of a restart, this check is ignored INITMEA1.147
C INITMEA1.148
IF(ISUBMODL.EQ.atmos_sm .or. ISUBMODL.EQ.ocean_sm)THEN GRB1F305.163
WRITE(6,*)' H_STEP=',H_STEPim(ISUBMODL) GIE0F403.324
IF(H_STEPim(ISUBMODL).EQ.0)THEN GRB1F305.165
C INITMEA1.153
YEAR=MEAN_REFTIMEim(1,ISUBMODL) GRB1F305.166
MONTH=MEAN_REFTIMEim(2,ISUBMODL) GRB1F305.167
DAY=MEAN_REFTIMEim(3,ISUBMODL) GRB1F305.168
HOUR=MEAN_REFTIMEim(4,ISUBMODL) GRB1F305.169
MINUTE=MEAN_REFTIMEim(5,ISUBMODL) GRB1F305.170
SECOND=MEAN_REFTIMEim(6,ISUBMODL) GRB1F305.171
C INITMEA1.160
IF(YEAR .EQ.0.AND. INITMEA1.161
& MONTH .EQ.0.AND. INITMEA1.162
& DAY .EQ.0.AND. INITMEA1.163
& HOUR .EQ.0.AND. INITMEA1.164
& MINUTE.EQ.0.AND. INITMEA1.165
& SECOND.EQ.0)THEN INITMEA1.166
C INITMEA1.167
MEAN_OFFSETim(ISUBMODL) = MEAN_NUMBERim(ISUBMODL) GRB1F305.172
WRITE(6,*)'INITMEAN: No offset specified for means creation' GIE0F403.325
C INITMEA1.170
ELSE INITMEA1.171
C INITMEA1.172
CALL TIME2SEC
(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND INITMEA1.173
& ,0,0,MEAN_REFTIME_DAYS,MEAN_REFTIME_SECS, GSS1F304.412
& LCAL360) GSS1F304.413
C INITMEA1.175
YEAR=MODEL_BASIS_TIME(1) INITMEA1.176
MONTH=MODEL_BASIS_TIME(2) INITMEA1.177
DAY=MODEL_BASIS_TIME(3) INITMEA1.178
HOUR=MODEL_BASIS_TIME(4) INITMEA1.179
MINUTE=MODEL_BASIS_TIME(5) INITMEA1.180
SECOND=MODEL_BASIS_TIME(6) INITMEA1.181
C INITMEA1.182
CALL TIME2SEC
(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND INITMEA1.183
& ,0,0,MEAN_START_DAYS,MEAN_START_SECS, GSS1F304.414
& LCAL360) GSS1F304.415
C INITMEA1.185
CALL TIM2STEP
(MEAN_START_DAYS-MEAN_REFTIME_DAYS, TJ080294.208
& MEAN_START_SECS-MEAN_REFTIME_SECS, TJ080294.209
& STEPS_PER_PERIODim(ISUBMODL),SECS_PER_PERIODim(ISUBMODL), GRB1F305.173
& MEAN_OFFSET_STEPS) GRB1F305.174
OFFSET_DUMPSim(ISUBMODL) = MEAN_OFFSET_STEPS/ GRB1F305.175
& DUMPFREQim(ISUBMODL) GRB1F305.176
if (INTERNAL_MODEL_INDEX(slab_im) .ne. 0) then GKR2F405.7
! This is a slab model so offset_dumps needs to be set GKR2F405.8
! in addition to the submodel cases. GKR2F405.9
OFFSET_DUMPSim(slab_im) = MEAN_OFFSET_STEPS/ GKR2F405.10
& DUMPFREQim(atmos_sm) GKR2F405.11
endif GKR2F405.12
WRITE(6,*)'INITMEAN: Offset set up for means creation' GIE0F403.326
WRITE(6,*)' OFFSET_DUMPSim(ISUBMODL)=',OFFSET_DUMPSim(ISUBMODL) GIE0F403.327
MEAN_OFFSETim(ISUBMODL) = 0 GRB1F305.178
DO 40 I=1,MEAN_NUMBERim(ISUBMODL) GRB1F305.179
IF(I.EQ.1)THEN INITMEA1.193
MEAN_FREQ_DUMPS=MEANFREQim(I,ISUBMODL) GRB1F305.180
ELSE INITMEA1.195
MEAN_FREQ_DUMPS=MEAN_FREQ_DUMPS*MEANFREQim(I,ISUBMODL) GRB1F305.181
ENDIF INITMEA1.197
IF(MOD(OFFSET_DUMPSim(ISUBMODL),MEAN_FREQ_DUMPS).EQ.0)THEN GRB1F305.182
MEAN_OFFSETim(ISUBMODL) = MEAN_OFFSETim(ISUBMODL)+1 GRB1F305.183
ENDIF INITMEA1.256
40 CONTINUE INITMEA1.257
ENDIF INITMEA1.258
ENDIF INITMEA1.259
ENDIF INITMEA1.260
CL INITMEA1.262
CL Set IBUFLEN to the largest data field present in the dump INITMEA1.263
CL for dimensioning of IO buffers in ACUMPS and MEANPS. INITMEA1.264
CL INITMEA1.265
*IF DEF,ATMOS INITMEA1.266
IF (ISUBMODL.EQ.atmos_sm) THEN TJ300394.77
IBUFLEN(atmos_sm)=1 TJ300394.78
DO I=1,A_LEN2_LOOKUP TJ300394.79
IF (A_LOOKUP(LBLREC,I).GT.IBUFLEN(atmos_sm)) TJ300394.80
& IBUFLEN(atmos_sm)=A_LOOKUP(LBLREC,I) TJ300394.81
ENDDO INITMEA1.272
ENDIF INITMEA1.273
*ENDIF INITMEA1.274
*IF DEF,OCEAN INITMEA1.275
IF (ISUBMODL.EQ.ocean_sm) THEN TJ300394.82
IBUFLEN(ocean_sm)=1 TJ300394.83
DO I=1,O_LEN2_LOOKUP TJ300394.84
IF (O_LOOKUP(LBLREC,I).GT.IBUFLEN(ocean_sm)) TJ300394.85
& IBUFLEN(ocean_sm)=O_LOOKUP(LBLREC,I) TJ300394.86
ENDDO INITMEA1.281
ENDIF INITMEA1.282
*ENDIF INITMEA1.283
999 CONTINUE INITMEA1.284
RETURN INITMEA1.285
END INITMEA1.286
*ENDIF INITMEA1.287