*IF DEF,CONTROL DERVSIZE.2
C ******************************COPYRIGHT****************************** GTS2F400.1891
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.1892
C GTS2F400.1893
C Use, duplication or disclosure of this code is subject to the GTS2F400.1894
C restrictions as set forth in the contract. GTS2F400.1895
C GTS2F400.1896
C Meteorological Office GTS2F400.1897
C London Road GTS2F400.1898
C BRACKNELL GTS2F400.1899
C Berkshire UK GTS2F400.1900
C RG12 2SZ GTS2F400.1901
C GTS2F400.1902
C If no contract has been raised with this copy of the code, the use, GTS2F400.1903
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.1904
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.1905
C Modelling at the above address. GTS2F400.1906
C ******************************COPYRIGHT****************************** GTS2F400.1907
C GTS2F400.1908
CLL Program: DERVSIZE ------------------------------------------------- DERVSIZE.3
CLL DERVSIZE.4
CLL Purpose: Calculate extra sizes required for dynamic allocation of DERVSIZE.5
CLL main memory in the model, derived from sizes passed by DERVSIZE.6
CLL READSIZE into the top level program UM_SHELL. Called from DERVSIZE.7
CLL READSIZE. DERVSIZE.8
CLL DERVSIZE.9
CLL Model Modification history: DERVSIZE.10
CLL version Date DERVSIZE.11
CLL 3.2 5/05/93 Introduced as new DECK to allow dynamic allocation DERVSIZE.12
CLL of main data arrays in U_MODEL. R.Rawlins DERVSIZE.13
CLL 3.3 26/10/93 M. Carter. Part of an extensive mod that: MC261093.15
CLL 1.Removes the limit on primary STASH item numbers. MC261093.16
CLL 2.Removes the assumption that (section,item) MC261093.17
CLL defines the sub-model. MC261093.18
CLL 3.Thus allows for user-prognostics. MC261093.19
CLL Remove A/O_MAX_VARIABLES. MC261093.20
CLL 3.5 28/03/95 MPP code: Set up some lengths to be for GPB0F305.17
CLL global rather than local data P.Burton GPB0F305.18
CLL 4.1 26/03/96 Introduce Wave sub-model. RTHBarnes. WRB1F401.61
CLL 4.1 19/03/96 Further MPP code changes, for LBC data lengths GPB0F401.167
CLL P.Burton GPB0F401.168
!LL 4.3 25/02/97 MPP code : Make MOS mask array globally sized GPB0F403.3007
!LL P.Burton GPB0F403.3008
CLL 4.3 30/01/97 Ensure that domain decomposition is consistent GRR0F403.16
CLL with submodel. R.Rawlins GRR0F403.17
!LL 4.4 14/07/97 Added MPP Ocean LAM sizes P.Burton/S.Ineson GSI0F404.1
CLL 4.4 04/08/97 Make no.of boundary update variables dependent on ARB1F404.142
CLL L_LSPICE_BDY (mixed phase precip scheme). RTHBarnes. ARB1F404.143
CLL 4.4 15/06/97 Dimension arrays for the free surface solution ORL1F404.129
CLL R.Lenton ORL1F404.130
CLL 4.3 30/01/97 Ensure t SDR1F404.56
!LL 4.4 04/08/97 Initialise COCNINDX variables for SLAB non-MPP SDR1F404.57
!LL model runs. D. Robinson. SDR1F404.58
CLL 4.5 3/11/98 New sizes IMT_BIH and KM_BIH M. Roberts OOM3F405.10
CLL 4.5 10/11/98 Set array sizes dependent on L_OISOMOM and OOM1F405.26
CLL L_OISOGM OOM1F405.27
CLL 4.5 13/08/97 Altered the calculation for LENRIMDATA_O, LENRIMO GSI1F405.87
CLL and LENRIMO_U. Changed the name of the logical GSI1F405.88
CLL L_OBGILLN to L_OBDY_NORTH. C.G. Jones GSI1F405.89
!LL 4.5 03/08/98 Update comments. D. Robinson. GDR2F405.181
! 4.4 10/8/97 Control logicals changed for ice dynamics ODC1F405.182
! C.Sherlock ODC1F405.183
CLL DERVSIZE.14
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) DERVSIZE.15
CLL DERVSIZE.16
CLL Logical components covered: DERVSIZE.17
CLL DERVSIZE.18
CLL Project task: DERVSIZE.19
CLL DERVSIZE.20
CLL External documentation: On-line UM document C1 - Dynamic allocation DERVSIZE.21
CLL of primary fields DERVSIZE.22
CLL DERVSIZE.23
CLL ------------------------------------------------------------------- DERVSIZE.24
C*L Interface and arguments: ------------------------------------------ DERVSIZE.25
C DERVSIZE.26
SUBROUTINE DERVSIZE( 1,3DERVSIZE.27
& ICODE,CMESSAGE) DERVSIZE.28
C DERVSIZE.29
C*---------------------------------------------------------------------- DERVSIZE.30
IMPLICIT NONE DERVSIZE.31
C DERVSIZE.32
C Subroutines called DERVSIZE.33
C DERVSIZE.34
C DERVSIZE.35
C Argument list and comdecks GSI1F405.90
C DERVSIZE.37
INTEGER ICODE ! OUT - Return code DERVSIZE.38
CHARACTER*80 CMESSAGE ! OUT - Error message WRB1F401.62
DERVSIZE.40
*CALL TYPSIZE
DERVSIZE.41
*CALL CNTLATM
ARB1F404.144
*CALL CNTLOCN
ORH1F305.4359
*CALL OARRYSIZ
ORH1F305.4360
*CALL CMAXSIZE
DERVSIZE.42
*IF DEF,MPP GPB0F305.19
*CALL PARVARS
GPB0F305.20
*CALL DECOMPTP
GRR0F403.18
*CALL DECOMPDB
GSI0F404.2
*ENDIF GPB0F305.21
*CALL COCNINDX
ORH7F402.1
C Local variables GSI1F405.91
integer n_obdy_t_grd ! # of ocean bdy fields } on T grid GSI1F405.92
integer n_obdy_u_grd ! stored in dump } on u/v grid GSI1F405.93
integer numside_rowso ! # of rows in each ocean bdy field GSI1F405.94
integer numside_colso ! # of columns in each ocean bdy field GSI1F405.95
*IF DEF,MPP GSI1F405.96
integer global_lenrimo_u GSI1F405.97
*ENDIF GSI1F405.98
C*---------------------------------------------------------------------- GSI1F405.99
DERVSIZE.43
*IF DEF,MPP GSI0F404.3
INTEGER nohalo_IMT,nohalo_JMT,glob_IMT,glob_JMT GSI0F404.4
*ENDIF GSI0F404.5
EXTERNAL OCEAN_SIZES ORH6F402.20
ORH6F402.21
ICODE=0 DERVSIZE.44
CL DERVSIZE.45
CL Atmosphere Boundary Datasets. GDR2F405.182
CL 2nd dimension of Level Dependent Constants. GDR2F405.183
INTF_LEN2_LEVDEPC=4 DERVSIZE.49
*IF DEF,OCEAN GMB1F405.333
INTF_LEN2_LEVDEPC_O=1 GMB1F405.334
NPTS_U_FIELD_O=1 GMB1F405.335
*ENDIF GMB1F405.336
CL DERVSIZE.51
CL Sizes applicable to all resolutions DERVSIZE.52
CL (Not under *DEF because hard wired asssumption that first 100 DERVSIZE.53
CL Get derived grid related parameters DERVSIZE.57
*IF DEF,ATMOS DERVSIZE.58
P_FIELD=ROW_LENGTH*P_ROWS DERVSIZE.59
*IF -DEF,MPP GPB0F305.22
U_ROWS=P_ROWS-1 DERVSIZE.60
*ELSE GPB0F305.23
U_ROWS=P_ROWS ! MPP code keeps field sizes the same to make life GPB0F305.24
! ! easier. Bottommost U row is not used. GPB0F305.25
*ENDIF GPB0F305.26
U_FIELD=ROW_LENGTH*U_ROWS DERVSIZE.61
! No of levels for Convective Cloud Amount. AJX0F404.438
IF (L_3D_CCA) THEN AJX0F404.439
N_CCA_LEV = Q_LEVELS AJX0F404.440
ELSE AJX0F404.441
N_CCA_LEV = 1 AJX0F404.442
ENDIF AJX0F404.443
WRITE (6,*) "Number of levels for convective clouds is ",N_CCA_LEV AJX0F404.444
DERVSIZE.62
A_LEN1_LEVDEPC=P_LEVELS DERVSIZE.63
*IF -DEF,MPP GPB0F305.27
A_LEN1_ROWDEPC=P_ROWS DERVSIZE.64
A_LEN1_COLDEPC=ROW_LENGTH DERVSIZE.65
A_LEN1_FLDDEPC=P_FIELD DERVSIZE.66
*ELSE GPB0F305.28
! We use the global values here GPB0F305.29
A_LEN1_ROWDEPC= glsize(2) ! global P_ROWS GPB0F305.30
A_LEN1_COLDEPC= glsize(1) ! global ROW_LENGTH GPB0F305.31
A_LEN1_FLDDEPC= glsize(1)*glsize(2) ! global P_FIELD GPB0F305.32
*ENDIF GPB0F305.33
DERVSIZE.67
*IF -DEF,MPP GPB0F403.3009
MOS_MASK_LEN=P_FIELD DERVSIZE.68
*ELSE GPB0F403.3010
MOS_MASK_LEN=glsize(1)*glsize(2) ! global P_FIELD GPB0F403.3011
*ENDIF GPB0F403.3012
CL Number of atmosphere model interface lookups DERVSIZE.69
! Although model is allowed to run mixed phase precip scheme with old ARB1F404.145
! style boundary update file (no qcf) by setting L_LSPICE_BDY=.FALSE., ARB1F404.146
! model is only allowed to generate output lateral boundary files ARB1F404.147
! consistent with its precipitation scheme. ARB1F404.148
IF (.NOT.L_LSPICE) THEN ARB1F404.149
INTF_LOOKUPSA=5+TR_VARS DERVSIZE.70
ELSE ARB1F404.150
INTF_LOOKUPSA=6+TR_VARS ARB1F404.151
END IF ARB1F404.152
*ELSE DERVSIZE.71
MOS_MASK_LEN=1 DERVSIZE.72
*IF DEF,OCEAN WRB1F401.63
CL Number of ocean model interface lookups DERVSIZE.73
INTF_LOOKUPSO=9 GMB1F405.337
*ELSE WRB1F401.64
CL Number of wave model interface lookups WRB1F401.65
INTF_LOOKUPSW=1 WRB1F401.66
*ENDIF DERVSIZE.75
*ENDIF WRB1F401.67
C SF011193.18
C Copy COMMON values of OCEAN dimensioning variables to local copies. SF011193.19
C IMT,JMT,KM needed at end of routine for boundary data dimensions. SF011193.20
C SF011193.21
NT=NT_UI SF011193.22
IMT=IMT_UI SF011193.23
JMT=JMT_UI SF011193.24
KM=KM_UI SF011193.25
SF011193.26
*IF DEF,OCEAN DERVSIZE.76
C SF011193.27
C Set header values SF011193.28
C SF011193.29
O_LEN1_LEVDEPC=KM DERVSIZE.77
O_LEN1_ROWDEPC=JMT DERVSIZE.78
O_LEN1_COLDEPC=IMT DERVSIZE.79
O_LEN1_FLDDEPC=JMT*IMT DERVSIZE.80
ORH1F305.4361
ORH1F305.4362
IF (L_OCYCLIC) THEN ORH1F305.4363
IMU=IMT ORH1F305.4364
ICOL_CYC = IMT - 2 ORH1F305.4365
IFROM_CYC = 2 ORH1F305.4366
ITO_CYC = IMT - 1 ORH1F305.4367
ELSE ORH1F305.4368
IMU=IMT-1 ORH1F305.4369
ICOL_CYC = IMT ORH1F305.4370
IFROM_CYC = 1 ORH1F305.4371
ITO_CYC = IMT ORH1F305.4372
ENDIF ORH1F305.4373
IMTP1=IMT+1 DERVSIZE.86
IMTM1=IMT-1 DERVSIZE.87
IMTM2=IMT-2 DERVSIZE.88
IMUM1=IMU-1 DERVSIZE.89
IMUM2=IMU-2 DERVSIZE.90
*IF -DEF,MPP ORH7F402.2
JMTP1=JMT+1 DERVSIZE.91
JMTM1=JMT-1 DERVSIZE.92
JMTM2=JMT-2 DERVSIZE.93
IF (L_OSYMM) THEN ORH1F305.4374
JSCAN=JMTM2+1 ORH1F305.4375
ELSE ORH1F305.4376
JSCAN=JMTM2 ORH1F305.4377
ENDIF ORH1F305.4378
*ENDIF ORH7F402.3
KMP1=KM+1 DERVSIZE.99
KMP2=KM+2 DERVSIZE.100
KMM1=KM-1 DERVSIZE.101
*IF DEF,MPP ORH7F402.4
ORH7F402.5
! Ensure that domain decomposition is consistent with submodel GRR0F403.19
GRR0F403.20
CALL CHANGE_DECOMPOSITION
(decomp_standard_ocean,ICODE) GRR0F403.21
! Compute various values of indexes etc specific to MPP ocean ORH7F402.6
CALL OCEAN_SIZES
(JMT_UI) ORH7F402.7
ORH7F402.8
! Set values of rowwise dimensions dealing with arrays ORH7F402.9
! dimensioned other than by JMT ORH7F402.10
JMTP1=JMT ORH7F402.11
JMTM1=JMT ORH7F402.12
JMTM2=JMT ORH7F402.13
ORH7F402.14
! If the last row is on this pe then: ORH7F402.15
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH7F402.16
JMTP1=JMT+1 ORH7F402.17
JMTM1=JMT-1 ORH7F402.18
JMTM2=JMT-2 ORH7F402.19
ENDIF ORH7F402.20
ORH7F402.21
! If this pe's last row is the last but one in global terms: ORH7F402.22
IF (JFIN.EQ.JMTM1_GLOBAL) THEN ORH7F402.23
JMTM2=JMT-1 ORH7F402.24
ENDIF ORH7F402.25
ORH7F402.26
IF (L_OSYMM) THEN ORH7F402.27
JSCAN=J_JMTM1 ORH7F402.28
ELSE ORH7F402.29
JSCAN=J_JMTM2 ORH7F402.30
ENDIF ORH7F402.31
ORH7F402.32
O_LEN1_ROWDEPC=JMT_GLOBAL ORH7F402.33
O_LEN1_FLDDEPC=JMT_GLOBAL*IMT ORH7F402.34
ORH7F402.35
ORH7F402.36
*ELSE ORH7F402.37
ORH7F402.38
! If MPP not switched on then set the index controls ORH7F402.39
! to the default values. ORH7F402.40
O_NPROC=1 ORH3F403.32
ORH3F403.33
J_1 = 1 ORH7F402.41
J_2 = 2 ORH7F402.42
J_3 = 3 ORH7F402.43
J_JMT = JMT ORH7F402.44
J_JMTM1 = JMTM1 ORH7F402.45
J_JMTM2 = JMTM2 ORH7F402.46
J_JMTP1 = JMTP1 ORH7F402.47
J_OFFSET = 0 ORH7F402.48
JST = 1 ORH7F402.49
JFIN = JMT ORH7F402.50
J_FROM_LOC = 0 ! These values are set later ORH7F402.51
J_TO_LOC = 0 ! in non-mpp version of code. ORH7F402.52
JMT_GLOBAL = JMT ORH7F402.53
JMTM1_GLOBAL = JMTM1 ORH7F402.54
JMTM2_GLOBAL = JMTM2 ORH7F402.55
JMTP1_GLOBAL = JMTP1 ORH7F402.56
O_MYPE = 0 ! Default value ORH7F402.57
O_EW_HALO = 0 ! " " ORH7F402.58
O_NS_HALO = 0 ! " " ORH7F402.59
J_PE_JSTM1 = -1 ORH7F402.60
J_PE_JSTM2 = -1 ORH7F402.61
J_PE_JFINP1 = -1 ORH7F402.62
J_PE_JFINP2 = -1 ORH7F402.63
*ENDIF ORH7F402.64
NSLAB=IMT*((NT+2)*KM) DERVSIZE.102
IF (L_OFILTER) THEN ORH1F305.4379
JSKPT=JFT2-JFT1 DERVSIZE.104
JSKPU=JFU2-JFU1 DERVSIZE.105
NJTBFT=(JFT1-JFRST+1)+(JMTM1_GLOBAL-JFT2+1) ORH8F402.66
NJTBFU=(JFU1-JFRST+1)+(JMTM1_GLOBAL-JFU2+1) ORH8F402.67
ENDIF ORH1F305.4380
IMTKM=IMT*KM DERVSIZE.114
NTMIN2=NT+1/NT DERVSIZE.115
CL Sizes required for filtering routine DERVSIZE.116
IMTD2=IMT/2 DERVSIZE.118
LQMSUM=IMTD2*(IMT-IMTD2) DERVSIZE.119
LHSUM=IMT*IMTP1/2 DERVSIZE.120
IMTX8=IMT*8 DERVSIZE.122
IMTIMT=IMT*IMT DERVSIZE.123
CL The following sizes are used to minimise the length of ocean arrays DERVSIZE.125
*IF DEF,MPP ORH7F402.65
WRITE (6,*) "MYPE,NJTBF",MYPE,NJTBFT,NJTBFU,JSKPT,JSKPU ORH7F402.66
*ENDIF ORH7F402.67
CL whose length depends on the version of the model being used. This DERVSIZE.126
CL is a desirable alternative to using *DEF's in the argument list. DERVSIZE.127
CL One dimensional arrays are allocated unconditionally; only big arrays DERVSIZE.128
CL are treated specially here. DERVSIZE.129
IF (.NOT.(L_OISLANDS)) THEN ORH1F305.4384
NISLE = 1 DERVSIZE.131
ISEGM=1 DERVSIZE.132
ENDIF ORH1F305.4385
IF (.NOT.(L_OFILTER)) THEN ORH1F305.4386
NJTBFT=1 DERVSIZE.135
NJTBFU=1 DERVSIZE.136
LSEGF=1 DERVSIZE.137
ENDIF ORH1F305.4387
! ORH1F305.4391
! Removed IMROT and JMROT assignments - these variables ORH1F305.4392
! do not appear to be used. ORH1F305.4393
! ORH1F305.4394
! ORH1F305.4395
IF (L_OPENBC) THEN ORH1F305.4396
IMBC=IMT DERVSIZE.156
JMBC=JMT DERVSIZE.157
KMBC=KM DERVSIZE.158
NTBC=NT DERVSIZE.159
ELSE ORH1F305.4397
IMBC=1 DERVSIZE.161
JMBC=1 DERVSIZE.162
KMBC=1 DERVSIZE.163
NTBC=1 DERVSIZE.164
ENDIF ORH1F305.4398
IF (L_OHMEAD) THEN ORH1F305.4399
JMMD=JMT DERVSIZE.167
LDIV=2 DERVSIZE.168
ELSE ORH1F305.4400
JMMD=1 DERVSIZE.170
LDIV=1 DERVSIZE.171
ENDIF ORH1F305.4401
ORH1F305.4413
IMT_OHY = 1 ! Default value ORH1F305.4414
ORH1F305.4415
IF (L_OHANEY) THEN ORH1F305.4416
IMT_OHY = IMT ORH1F305.4417
ENDIF ORH1F305.4418
ORH1F305.4419
IF (L_IHANEY) THEN ORH1F305.4420
IMT_IHY = IMT ORH1F305.4421
JMT_IHY = JMT ORH1F305.4422
ELSE ORH1F305.4423
IMT_IHY = 1 ORH1F305.4424
JMT_IHY = 1 ORH1F305.4425
ENDIF ORH1F305.4426
ORH1F305.4427
IF (L_OHMEAD) THEN ORH1F305.4428
O_MAX_TRACERS_MEA = O_MAX_TRACERS ORH1F305.4429
LSEGC_MEA = LSEGC ORH1F305.4430
NT_MEA = NT ORH1F305.4431
ELSE ORH1F305.4432
O_MAX_TRACERS_MEA = 1 ORH1F305.4433
LSEGC_MEA = 1 ORH1F305.4434
NT_MEA = 1 ORH1F305.4435
ENDIF ORH1F305.4436
ORH1F305.4437
IF (L_OVARYT) THEN ORH1F305.4438
KM_VTD = KM ORH1F305.4439
ELSE ORH1F305.4440
KM_VTD = 1 ORH1F305.4441
ENDIF ORH1F305.4442
ORH1F305.4443
IF (L_OBDY_NORTH) THEN GSI1F405.100
KM_GLN = KM ORH1F305.4445
IMT_GLN = IMT ORH1F305.4446
ELSE ORH1F305.4447
KM_GLN = 1 ORH1F305.4448
IMT_GLN = 1 ORH1F305.4449
ENDIF ORH1F305.4450
ORH1F305.4451
IF (L_ICESIMPLE.OR.L_ICEFREEDR) THEN ODC1F405.184
IMT_drsa = IMT ODC1F405.185
JMT_drsa = JMT ODC1F405.186
JMTM1_drsa = JMTM1 ODC1F405.187
ELSE ORH1F305.4456
IMT_drsa = 1 ODC1F405.188
JMT_drsa = 1 ODC1F405.189
JMTM1_drsa = 1 ODC1F405.190
ENDIF ORH1F305.4460
ORH1F305.4461
IF (L_OSOLARAL) THEN ORH1F305.4462
IMT_SOLAL = IMT ORH1F305.4463
KM_SOLAL = KM ORH1F305.4464
KM_NOSOLAL = 1 ORH1F305.4465
ELSE ORH1F305.4466
IMT_SOLAL = 1 ORH1F305.4467
KM_SOLAL = 1 ORH1F305.4468
KM_NOSOLAL = KM ORH1F305.4469
ENDIF ORH1F305.4470
ORH1F305.4471
IF (L_ONOCLIN) THEN ORH1F305.4472
IMT_CLN = 1 ORH1F305.4473
ELSE ORH1F305.4474
IMT_CLN = IMT ORH1F305.4475
ENDIF ORH1F305.4476
ORH1F305.4477
IF (L_OBIOLOGY) THEN ORH1F305.4478
KM_BIO = KM ORH1F305.4479
JMT_BIO = JMT ORH1F305.4480
IMT_BIO = IMT ORH1F305.4481
SWNCOL_BIO = ICOL_CYC ORH1F305.4482
ELSE ORH1F305.4483
KM_BIO = 1 ORH1F305.4484
JMT_BIO = 1 ORH1F305.4485
IMT_BIO = 1 ORH1F305.4486
SWNCOL_BIO = 1 ORH1F305.4487
ENDIF ORH1F305.4488
ORH1F305.4489
IMT_CAR = 1 ORH1F305.4490
IMT_CAR_MIX = 1 ORH1F305.4491
IMT_CAR_ICE = 1 ORH1F305.4492
IMT_CAR_PIC = 1 ORH1F305.4493
IF (L_OCARBON) THEN ORH1F305.4494
IMT_CAR = IMT ORH1F305.4495
IF (L_OMIXLAY) IMT_CAR_MIX = IMT ORH1F305.4496
IF (L_SEAICE) IMT_CAR_ICE = IMT ORH1F305.4497
IF (L_OPSEUDIC) IMT_CAR_PIC = IMT ORH1F305.4498
ENDIF ORH1F305.4499
ORH1F305.4500
ORH1F305.4501
IF (L_OFREESFC) THEN ORH1F305.4502
IMT_FSF = IMT ORH1F305.4503
JMT_FSF = JMT ORH1F305.4504
JMTM1_FSF = JMTM1 ORL1F404.131
LSEG = 0 ORL1F404.132
ELSE ORH1F305.4505
IMT_FSF = 1 ORH1F305.4506
JMT_FSF = 1 ORH1F305.4507
JMTM1_FSF = 1 ORL1F404.133
LSEGFS = 0 ORL1F404.134
ENDIF ORH1F305.4508
ORH1F305.4509
IF (L_ONOCLIN.OR.L_OFREESFC) THEN ORH1F305.4510
IMT_STREAM = 1 ORH1F305.4511
JMT_STREAM = 1 ORH1F305.4512
ELSE ORH1F305.4513
IMT_STREAM = IMT ORH1F305.4514
JMT_STREAM = JMT ORH1F305.4515
ENDIF ORH1F305.4516
ORH1F305.4517
IF (.NOT.L_ONOCLIN) THEN ORH1F305.4518
JMT_CLN = JMT ORH1F305.4519
SWNCOL_CLN = ICOL_CYC ORH1F305.4520
ELSE ORH1F305.4521
JMT_CLN = 1 ORH1F305.4522
SWNCOL_CLN = 1 ORH1F305.4523
ENDIF ORH1F305.4524
ORH1F305.4525
IF((.NOT.(L_ONOCLIN)).AND.(L_OFREESFC)) THEN ORH1F305.4526
IMT_CLN_FSF = IMT ORH1F305.4527
JMT_CLN_FSF = JMT ORH1F305.4528
ELSE ORH1F305.4529
IMT_CLN_FSF = 1 ORH1F305.4530
JMT_CLN_FSF = 1 ORH1F305.4531
ENDIF ORH1F305.4532
ORH1F305.4533
IF (L_FLUXCORR) THEN ORH1F305.4534
IMT_FLX = IMT ORH1F305.4535
JMT_FLX = JMT ORH1F305.4536
ELSE ORH1F305.4537
IMT_FLX = 1 ORH1F305.4538
JMT_FLX = 1 ORH1F305.4539
ENDIF ORH1F305.4540
ORH1F305.4541
ORH1F305.4542
IF (L_OISOPYC) THEN ORH1F305.4543
KM_IPD = KM ORH1F305.4544
IMT_IPD = IMT ORH1F305.4545
NT_IPD = NT ORH1F305.4546
KMP1_IPD = KMP1 ORH1F305.4547
ELSE ORH1F305.4548
KM_IPD = 1 ORH1F305.4549
IMT_IPD = 1 ORH1F305.4550
NT_IPD = 1 ORH1F305.4551
KMP1_IPD = 1 ORH1F305.4552
ENDIF ORH1F305.4553
IF (L_OISOPYCGM) THEN OLA0F401.1
IMT_GM = IMT OLA0F401.2
KM_GM = KM OLA0F401.3
KMP1_GM = KMP1 OLA0F401.4
ELSE OLA0F401.5
IMT_GM = 1 OLA0F401.6
KM_GM = 1 OLA0F401.7
KMP1_GM = 1 OLA0F401.8
ENDIF OLA0F401.9
IF (L_OISOMOM) THEN OOM1F405.28
IMT_ISO = IMT OOM1F405.29
KM_ISO = KM OOM1F405.30
ELSE OOM1F405.31
IMT_ISO = 1 OOM1F405.32
KM_ISO = 1 OOM1F405.33
ENDIF OOM1F405.34
IF (L_OISOGM) THEN OOM1F405.35
IMT_GMM = IMT OOM1F405.36
KM_GMM = KM OOM1F405.37
KMP1_GMM = KMP1 OOM1F405.38
ELSE OOM1F405.39
IMT_GMM = 1 OOM1F405.40
KM_GMM = 1 OOM1F405.41
KMP1_GMM = 1 OOM1F405.42
ENDIF OOM1F405.43
OLA0F401.10
ORH1F305.4554
IF (L_OBIMOM.or.L_OBIHARMGM) THEN OOM3F405.11
IMT_BIH = IMT OOM3F405.12
KM_BIH = KM OOM3F405.13
ELSE OOM3F405.14
IMT_BIH = 1 OOM3F405.15
KM_BIH = 1 OOM3F405.16
ENDIF OOM3F405.17
IF (L_OMIXLAY.AND.L_OISOPYC) THEN ORH1F305.4555
IMT_IPD_MIX = IMT ORH1F305.4556
JMT_IPD_MIX = JMT ORH1F305.4557
ELSE ORH1F305.4558
IMT_IPD_MIX = 1 ORH1F305.4559
JMT_IPD_MIX = 1 ORH1F305.4560
ENDIF ORH1F305.4561
IF ((.NOT.L_OISOPYC).AND.L_OMIXLAY) THEN ORH1F305.4562
IMT_NOIPD_MIX = IMT ORH1F305.4563
ELSE ORH1F305.4564
IMT_NOIPD_MIX = 1 ORH1F305.4565
ENDIF ORH1F305.4566
ORH1F305.4567
IF (L_OISOPYC.AND.(.NOT.L_OMIXLAY)) THEN ORH1F305.4568
IMT_IPD_NOMIX = IMT ORH1F305.4569
JMT_IPD_NOMIX = JMT ORH1F305.4570
ELSE ORH1F305.4571
IMT_IPD_NOMIX = 1 ORH1F305.4572
JMT_IPD_NOMIX = 1 ORH1F305.4573
ENDIF ORH1F305.4574
ORH1F305.4575
ORH1F305.4576
IMT_PIIC_MIX = 1 ! Default value ORH1F305.4577
IMT_PIC_MIX = 1 ORH1F305.4578
IMT_PIC = 1 ORH1F305.4579
IMT_ICE_MIX = 1 ORH1F305.4580
KM_ICE_MIX = 1 ORH1F305.4581
JMT_ICE = 1 ORH1F305.4582
ORH1F305.4583
IF (L_SEAICE.OR.L_OPSEUDIC) THEN ORH1F305.4584
IMT_PIIC = IMT ORH1F305.4585
ELSE ORH1F305.4586
IMT_PIIC = 1 ORH1F305.4587
ENDIF ORH1F305.4588
ORH1F305.4589
IF (L_OMIXLAY.AND.L_SEAICE) THEN ORH1F305.4590
IMT_ICE_MIX = IMT ORH1F305.4591
KM_ICE_MIX = KM ORH1F305.4592
IMT_PIIC_MIX = IMT ORH1F305.4593
ENDIF ORH1F305.4594
ORH1F305.4595
IF (L_OMIXLAY.AND.L_OPSEUDIC) THEN ORH1F305.4596
IMT_PIC_MIX = IMT ORH1F305.4597
IMT_PIIC_MIX = IMT ORH1F305.4598
ENDIF ORH1F305.4599
ORH1F305.4600
IF (L_OPSEUDIC) THEN ORH1F305.4601
IMT_PIC = IMT ORH1F305.4602
ENDIF ORH1F305.4603
ORH1F305.4604
IF (L_SEAICE) THEN ORH1F305.4605
IMT_ICE = IMT ORH1F305.4606
JMT_ICE = JMT ORH1F305.4607
JMTM1_ICE=JMTM1 ODC1F405.191
ELSE ORH1F305.4608
IMT_ICE = 1 ORH1F305.4609
JMT_ICE = 1 ORH1F305.4610
JMTM1_ICE=1 ODC1F405.192
ENDIF ORH1F305.4611
ORH1F305.4612
IF (L_SEAICE.AND.L_OICECOUP) THEN ORH1F305.4613
IMT_ICE_ICP = IMT ORH1F305.4614
JMT_ICE_ICP = JMT ORH1F305.4615
ELSE ORH1F305.4616
IMT_ICE_ICP = 1 ORH1F305.4617
JMT_ICE_ICP = 1 ORH1F305.4618
ENDIF ORH1F305.4619
ORH1F305.4620
IF (L_SEAICE.AND.(.NOT.(L_OICECOUP))) THEN ORH1F305.4621
IMT_ICE_NOICP = IMT ORH1F305.4622
JMT_ICE_NOICP = JMT ORH1F305.4623
ELSE ORH1F305.4624
IMT_ICE_NOICP = 1 ORH1F305.4625
JMT_ICE_NOICP = 1 ORH1F305.4626
ENDIF ORH1F305.4627
ORH1F305.4628
IF (L_SEAICE.AND.(L_OSOLAR.OR.L_OSOLARAL)) THEN ORH1F305.4629
IMT_ICE_SOSO = IMT ORH1F305.4630
ELSE ORH1F305.4631
IMT_ICE_SOSO = 1 ORH1F305.4632
ENDIF ORH1F305.4633
ORH1F305.4634
ORH1F305.4635
IF (L_ICEFREEDR.AND.L_OMIXLAY) THEN ODC1F405.193
IMT_idr_MIX = IMT ODC1F405.194
JMT_idr_MIX = JMT ODC1F405.195
JMTM1_idr_MIX = JMTM1 ODC1F405.196
ELSE ORH1F305.4640
IMT_idr_MIX = 1 ODC1F405.197
JMT_idr_MIX = 1 ODC1F405.198
JMTM1_idr_MIX = 1 ODC1F405.199
ENDIF ORH1F305.4644
ORH1F305.4645
IF (L_ICEFREEDR) THEN ODC1F405.200
IMT_idr = IMT ODC1F405.201
JMT_idr = JMT ODC1F405.202
JMTM1_idr = JMTM1 ODC1F405.203
ELSE ORH1F305.4650
IMT_idr = 1 ODC1F405.204
JMT_idr = 1 ODC1F405.205
JMTM1_idr = 1 ODC1F405.206
ENDIF ORH1F305.4654
ORH1F305.4655
IF (L_ORICHARD) THEN ORH1F305.4656
IMT_RIC = IMT ORH1F305.4657
KM_RIC = KM ORH1F305.4658
ELSE ORH1F305.4659
IMT_RIC = 1 ORH1F305.4660
KM_RIC = 1 ORH1F305.4661
ENDIF ORH1F305.4662
ORH1F305.4663
IF (L_ORICHARD.OR.L_OIMPADDF.OR.L_OIMPDIF) THEN ORH1F305.4664
IMT_GNU = IMT ORH1F305.4665
KM_GNU = KM ORH1F305.4666
ELSE ORH1F305.4667
IMT_GNU = 1 ORH1F305.4668
KM_GNU = 1 ORH1F305.4669
ENDIF ORH1F305.4670
ORH1F305.4671
IF ((L_OISOPYCGM.AND.L_OVISBECK).or. OOM1F405.44
& (L_OISOGM.AND.L_OVISBECK)) THEN OOM1F405.45
IMT_VIS = IMT OLA2F403.10
JMT_VIS = JMT OLA2F403.11
ELSE OLA2F403.12
IMT_VIS = 1 OLA2F403.13
JMT_VIS = 1 OLA2F403.14
ENDIF OLA2F403.15
OLA2F403.16
IF (L_ORICHARD.AND.L_OQLARGE) THEN OLA3F403.12
IMT_QLARGE = IMT OLA3F403.13
ELSE OLA3F403.14
IMT_QLARGE = 1 OLA3F403.15
ENDIF OLA3F403.16
OLA3F403.17
IF (L_ORICHARD.AND.L_OFULARGE) THEN OOM1F405.409
IMT_FULARGE = IMT OOM1F405.410
ELSE OOM1F405.411
IMT_FULARGE = 1 OOM1F405.412
ENDIF OOM1F405.413
IF (L_ORICHARD.AND.L_OIMPDIF) THEN ORH1F305.4672
IMU_GNUZ = IMU ORH1F305.4673
KM_GNUZ = KM ORH1F305.4674
ELSE ORH1F305.4675
IMU_GNUZ = 1 ORH1F305.4676
KM_GNUZ = 1 ORH1F305.4677
ENDIF ORH1F305.4678
ORH1F305.4679
ORH1F305.4680
IF (L_OFILTER) THEN ORH1F305.4681
IMTIMT_FLT = IMTIMT ORH1F305.4682
ELSE ORH1F305.4683
IMTIMT_FLT = 1 ORH1F305.4684
ENDIF ORH1F305.4685
ORH1F305.4686
IF (L_OCNASSM) THEN ORH1F305.4687
IMT_ASM = IMT ORH1F305.4688
JMT_ASM = JMT ORH1F305.4689
ELSE ORH1F305.4690
IMT_ASM = 1 ORH1F305.4691
JMT_ASM = 1 ORH1F305.4692
ENDIF ORH1F305.4693
ORH1F305.4694
! IF (L_OROTATE) THEN ORH1F305.4695
! IMT_ROT = IMT ORH1F305.4696
! ELSE ORH1F305.4697
! IMT_ROT = 1 ORH1F305.4698
! ENDIF ORH1F305.4699
IF (L_OMIXLAY) THEN ORH1F305.4700
IMT_MIX = IMT ORH1F305.4701
JMT_MIX = JMT ORH1F305.4702
IMT_NOMIX = 1 ORH1F305.4703
KM_MIX = KM ORH1F305.4704
ELSE ORH1F305.4705
IMT_MIX = 1 ORH1F305.4706
JMT_MIX = 1 ORH1F305.4707
IMT_NOMIX = IMT ORH1F305.4708
KM_MIX = 1 ORH1F305.4709
ENDIF ORH1F305.4710
*ENDIF DERVSIZE.173
*IF DEF,SLAB SCH0F405.53
SDR1F404.60
! The code in this section has been set up for non-MPP runs of the SDR1F404.61
! SLAB model. It will need re-consideration when the SLAB code is SDR1F404.62
! modified to enable MPP runs. SDR1F404.63
! SCH0F405.54
! Note by CDH: the slab model is at present coded to be compatible SCH0F405.55
! with mpp runs of the atmosphere, but the slab model has been set SCH0F405.56
! up to run on 1 PE after the mpp atmos step. This is a quick and SCH0F405.57
! dirty 'temporary' (?) fix. SCH0F405.58
! This section will need reconsideration IF the slab model science SCH0F405.59
! code is made parallel. SCH0F405.60
SCH0F405.61
SDR1F404.64
*IF DEF,MPP SCH0F405.62
JMT = glsize(2) SCH0F405.63
C JMT = P_ROWS ! original argument SCH0F405.64
*ELSE SCH0F405.65
JMT = P_ROWS SDR1F404.65
*ENDIF SCH0F405.66
SDR1F404.66
JMTM1 = JMT-1 SDR1F404.67
JMTM2 = JMT-2 SDR1F404.68
JMTP1 = JMT+1 SDR1F404.69
SDR1F404.70
O_NPROC=1 SDR1F404.71
SDR1F404.72
J_1 = 1 SDR1F404.73
J_2 = 2 SDR1F404.74
J_3 = 3 SDR1F404.75
J_JMT = JMT SDR1F404.76
J_JMTM1 = JMTM1 SDR1F404.77
J_JMTM2 = JMTM2 SDR1F404.78
J_JMTP1 = JMTP1 SDR1F404.79
J_OFFSET = 0 SDR1F404.80
JST = 1 SDR1F404.81
JFIN = JMT SDR1F404.82
J_FROM_LOC = 0 ! These values are set later SDR1F404.83
J_TO_LOC = 0 ! in non-mpp version of code. SDR1F404.84
JMT_GLOBAL = JMT SDR1F404.85
JMTM1_GLOBAL = JMTM1 SDR1F404.86
JMTM2_GLOBAL = JMTM2 SDR1F404.87
JMTP1_GLOBAL = JMTP1 SDR1F404.88
O_MYPE = 0 ! Default value SDR1F404.89
O_EW_HALO = 0 ! " " SDR1F404.90
O_NS_HALO = 0 ! " " SDR1F404.91
J_PE_JSTM1 = -1 SDR1F404.92
J_PE_JSTM2 = -1 SDR1F404.93
J_PE_JFINP1 = -1 SDR1F404.94
J_PE_JFINP2 = -1 SDR1F404.95
*ENDIF SDR1F404.96
*IF DEF,WAVE WRB1F401.68
C WRB1F401.69
C Set header values WRB1F401.70
C WRB1F401.71
W_LEN1_LEVDEPC=MAX(NANG,NFRE) WRB1F401.72
W_LEN1_LEVDEPC=NFRE ! hard-wire ??? WRB1F401.73
W_LEN1_ROWDEPC=0 WRB1F401.74
W_LEN1_COLDEPC=0 WRB1F401.75
W_LEN1_FLDDEPC=0 WRB1F401.76
*ENDIF WRB1F401.77
CLL LAM DERIVED SIZES START DERVSIZE.174
*IF DEF,MPP GPB0F401.169
! The standard model only allocates P_ROWS-2*RIMWIDTH rows of data GPB0F401.170
! for the East/West LBCs - in the MPP code we allocate a full GPB0F401.171
! P_ROWS for each East/West LBC (both for THETA and U data). GPB0F401.172
! The size of LENRIMA for U fields is a little complex, so we GPB0F401.173
! precalculate it and put it also in TYPSIZE. GPB0F401.174
! We also set up some sizes for the global data (everything GPB0F401.175
! else refers to the local data on this processor only) GPB0F401.176
GPB0F401.177
*ENDIF GPB0F401.178
*IF -DEF,MPP GPB0F305.34
LENRIMA=(P_ROWS+ROW_LENGTH-2*RIMWIDTHA)*2*RIMWIDTHA DERVSIZE.175
*ELSE GPB0F305.35
LENRIMA=(blsizep(1)+blsizep(2))*2*RIMWIDTHA GPB0F401.179
IF (atright) THEN GPB0F401.180
LENRIMA_U=(blsizep(1)-1+blsizep(2))*2*RIMWIDTHA GPB0F401.181
ELSE GPB0F401.182
LENRIMA_U=(blsizep(1)+blsizep(2))*2*RIMWIDTHA GPB0F401.183
ENDIF GPB0F401.184
global_LENRIMA=(glsize(1)+glsize(2)-2*RIMWIDTHA)*2*RIMWIDTHA GPB0F401.185
*ENDIF GPB0F305.38
IF (.NOT.L_LSPICE_BDY) THEN ARB1F404.153
RIMFLDSA=1+P_LEVELS*3+TR_VARS*TR_LEVELS+Q_LEVELS DERVSIZE.177
ELSE ARB1F404.154
RIMFLDSA=1+P_LEVELS*3+TR_VARS*TR_LEVELS+Q_LEVELS*2 ARB1F404.155
END IF ARB1F404.156
BOUNDFLDS=2+FLOORFLDSA GSI1F405.101
IF (.NOT.L_LSPICE_BDY) THEN ARB1F404.157
RIM_LOOKUPSA=5+TR_VARS DERVSIZE.181
ELSE ARB1F404.158
RIM_LOOKUPSA=6+TR_VARS ARB1F404.159
END IF ARB1F404.160
BOUND_LOOKUPSA=RIM_LOOKUPSA*NRIM_TIMESA+FLOORFLDSA*NFLOOR_TIMESA DERVSIZE.183
BOUND_LOOKUPSW= 1 WRB1F401.78
*IF -DEF,MPP GPB0F401.186
LENRIMDATA_A=LENRIMA*RIMFLDSA-8*RIMWIDTHA*P_LEVELS DERVSIZE.185
*ELSE GPB0F401.187
IF (atright) THEN GPB0F401.188
LENRIMDATA_A=LENRIMA*RIMFLDSA-4*RIMWIDTHA*P_LEVELS GPB0F401.189
ELSE GPB0F401.190
LENRIMDATA_A=LENRIMA*RIMFLDSA GPB0F401.191
ENDIF GPB0F401.192
global_LENRIMDATA_A=global_LENRIMA*RIMFLDSA-8*RIMWIDTHA*P_LEVELS GPB0F401.193
*ENDIF GPB0F401.194
*IF DEF,OCEAN GSI1F405.102
GSI1F405.103
!L Calculate sizes for ocean boundary files; LENRIMO, LENRIMO_U GSI1F405.104
! RIM_LOOKUPSO, BOUND_LOOKUPSO, LENRIMDATA_O GSI1F405.105
GSI1F405.106
GSI1F405.107
! 1. calculate numside_rowso and numside_colso, the number of GSI1F405.108
! tracer grid and velocity grid boundary fields and the GSI1F405.109
! number of lookup tables GSI1F405.110
call o_lbc_sizes
( km, nt, rimwidtho, GSI1F405.111
# numside_rowso, numside_colso, GSI1F405.112
# RIM_LOOKUPSO, n_obdy_t_grd, n_obdy_u_grd ) GSI1F405.113
GSI1F405.114
! 2. calculate LENRIMO and LENRIMO_U GSI1F405.115
GSI1F405.116
*IF -DEF,MPP GSI1F405.117
lenrimo = imt*numside_rowso+jmt*numside_colso GSI1F405.118
lenrimo_u = (imt-1)*numside_rowso+(jmt-1)*numside_colso GSI1F405.119
*ELSE GSI1F405.120
write(6,*)'decomp_standard_ocean',decomp_standard_ocean GSI1F405.121
IF (decomp_db_set(decomp_standard_ocean)) THEN GSI1F405.122
nohalo_IMT=decomp_db_g_blsizep(1,mype,decomp_standard_ocean) GSI1F405.123
write(6,*)'nohalo_imt',nohalo_imt GSI1F405.124
nohalo_JMT=decomp_db_g_blsizep(2,mype,decomp_standard_ocean) GSI1F405.125
write(6,*)'nohalo_jmt',nohalo_jmt GSI1F405.126
glob_IMT=decomp_db_glsize(1,decomp_standard_ocean) GSI1F405.127
glob_JMT=decomp_db_glsize(2,decomp_standard_ocean) GSI1F405.128
LENRIMO=nohalo_IMT*numside_rowso + nohalo_JMT*numside_colso GSI1F405.129
C most local processors have same number of rows of velocity GSI1F405.130
C data as tracers GSI1F405.131
LENRIMO_U=(nohalo_IMT-1)*numside_rowso + GSI1F405.132
& (nohalo_JMT)*numside_colso GSI1F405.133
global_LENRIMO=glob_IMT*numside_rowso+glob_JMT*numside_colso GSI1F405.134
global_LENRIMO_U = (glob_IMT-1)*numside_rowso + GSI1F405.135
& (glob_JMT-1)*numside_colso GSI1F405.136
ELSE GSI1F405.137
LENRIMO = IMT*numside_rowso + jmt*numside_colso GSI1F405.138
LENRIMO_U = (IMT-1)*numside_rowso + (jmt-1)*numside_colso GSI1F405.139
global_LENRIMO = LENRIMO GSI1F405.140
global_LENRIMO_U = LENRIMO_U GSI1F405.141
ENDIF GSI1F405.142
*ENDIF GSI1F405.143
GSI1F405.144
! 3. Set rimfldso, BOUND_LOOKUPSO and LENRIMDATA_O GSI1F405.145
rimfldso = n_obdy_t_grd + n_obdy_u_grd GSI1F405.146
GSI1F405.147
BOUND_LOOKUPSO = RIM_LOOKUPSO * NRIM_TIMESO GSI1F405.148
GSI1F405.149
LENRIMDATA_O = lenrimo*n_obdy_t_grd + lenrimo_u*n_obdy_u_grd GSI1F405.150
*IF DEF,MPP GSI1F405.151
global_LENRIMDATA_O = global_lenrimo*n_obdy_t_grd + GSI1F405.152
& global_lenrimo_u*n_obdy_u_grd GSI1F405.153
*ENDIF GSI1F405.154
*ENDIF GSI1F405.155
CLL LAM DERIVED SIZES END DERVSIZE.187
RETURN DERVSIZE.188
END DERVSIZE.189
*ENDIF DERVSIZE.190