*IF DEF,CONTROL UMINDEX1.2
C ******************************COPYRIGHT****************************** GTS2F400.10747
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10748
C GTS2F400.10749
C Use, duplication or disclosure of this code is subject to the GTS2F400.10750
C restrictions as set forth in the contract. GTS2F400.10751
C GTS2F400.10752
C Meteorological Office GTS2F400.10753
C London Road GTS2F400.10754
C BRACKNELL GTS2F400.10755
C Berkshire UK GTS2F400.10756
C RG12 2SZ GTS2F400.10757
C GTS2F400.10758
C If no contract has been raised with this copy of the code, the use, GTS2F400.10759
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10760
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10761
C Modelling at the above address. GTS2F400.10762
C ******************************COPYRIGHT****************************** GTS2F400.10763
C GTS2F400.10764
CLL Subroutine: UM_INDEX----------------------------------------------- UMINDEX1.3
CLL UMINDEX1.4
CLL Purpose: Calculate addresses of component arrays within a UMINDEX1.5
CLL series of super arrays, made up of combinations of arrays UMINDEX1.6
CLL that require dynamic allocation. Lengths of the super UMINDEX1.7
CLL arrays are calculated and passed into U_MODEL for UMINDEX1.8
CLL dynamic allocation, reducing the no. of arguments needed UMINDEX1.9
CLL to be passed between top-level routines. UMINDEX1.10
CLL UMINDEX1.11
CLL Tested under compiler: cft77 UMINDEX1.12
CLL Tested under OS version: UNICOS 6.1.5A UMINDEX1.13
CLL UMINDEX1.14
CLL Model Modification history: UMINDEX1.15
CLL version date UMINDEX1.16
CLL 3.2 30/03/93 Introduced as new DECK to allow dynamic allocation UMINDEX1.17
CLL of main data arrays in U_MODEL. UMINDEX1.18
CLL 3.3 26/10/93 M. Carter. Part of an extensive mod that: MC261093.307
CLL 1.Removes the limit on primary STASH item numbers. MC261093.308
CLL 2.Removes the assumption that (section,item) MC261093.309
CLL defines the sub-model. MC261093.310
CLL 3.Thus allows for user-prognostics. MC261093.311
CLL re-dimension PP_XREF and add INDEX_PPXREF. MC261093.312
CLL 3.5 29/03/95 MPP code : Land point fields are allocated P_FIELD GPB0F305.376
CLL amount of space in D1 P.Burton GPB0F305.377
CLL 3.5 Apr. 95 Sub-Models project. GSS1F305.804
CLL STASH super array modified in accordance with GSS1F305.805
CLL internal model separation scheme for diagnostics. GSS1F305.806
CLL *CALL CSUBMODL introduced. GSS1F305.807
CLL S.J.Swarbrick GSS1F305.808
!LL 4.0 06/09/95 Added atmos/ocean stash superarrays. K Rogers GKR0F400.1
!LL 4.1 15/03/96 Introduce Wave sub-model. RTHBarnes. WRB1F401.901
CLL 4.1 04/12/95 Increased A_IXPTR to accomodate 2 extra prognostic AJS1F401.123
CLL arrays J.Smith AJS1F401.124
CLL 4.1 26/04/96 Increased A_IXPTR to allow for 12 Sulphur Cycle AJS1F401.125
CLL prognostics and ancillaries MJWoodage AJS1F401.126
CLL 4.2 11/10/96 Enable atmos-ocean coupling for MPP. GRR0F402.90
CLL (1): Coupled fields. Change to 'global' sizes GRR0F402.91
CLL instead of local. R.Rawlins GRR0F402.92
CLL 4.2 11/10/96 Enable atmos-ocean coupling for MPP. GRR1F402.51
CLL (2): Swap D1 memory. Add copies of D1 for atmos and GRR1F402.52
CLL ocean. R.Rawlins GRR1F402.53
CLL 4.3 26/03/97 Added HadCM2 sulphate loading pattern. Will Ingram AWI1F403.62
CLL 4.4 01/07/97 Added padding to place the D1 array on a GBC6F404.298
CLL cache line boundary. GBC6F404.299
CLL Author: Bob Carruthers, Cray Research. GBC6F404.300
CLL 4.4 05/08/97 Allowed prognostic variable CCA to be 3D. JMG AJX0F404.455
CLL 4.4 11/10/97 Rename AO_D1_MEMORY to L_AO_D1_MEMORY. D Robinson GDR5F404.5
!LL 4.4 13/10/97 Initialise LEN_A/O/W_SPSTS. D. Robinson. UDR2F404.26
CLL 4.5 29/07/98 Use U_FIELD_INTFA to set up A_IXINF(21). GDR2F405.45
CLL Compute new A_IXINF(22-25). D. Robinson. GDR2F405.46
!LL 4.5 04/03/98 Increase IXPTR to allow for 1 new NH3 var in GDR7F405.1
!LL S Cycle and 3 new soot vars. M Woodage GDR7F405.2
!LL 4.5 08/05/98 Increase A_IXPTR by 16 to increase maximum number GDR7F405.3
!LL of multi-level user ancillaries to 20 GDR7F405.4
!LL Author D.M. Goddard GDR7F405.5
!LL 4.5 13/05/98 Added RHcrit variable to D1 pointers. S. Cusack GDR7F405.6
!LL 4.5 15/07/98 Added 3D CO2 to D1 pointers. C.D.Jones GDR7F405.7
!LL 4.5 17/08/98 Remove pointers for JSOIL_FLDS and JVEG_FLDS. GDR7F405.8
!LL D. Robinson. GDR7F405.9
! 4.5 30/03/98 Reserve space for land mask in ocean ORH2F405.16
! stash array. R. Hill ORH2F405.17
CLL UMINDEX1.19
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) UMINDEX1.20
CLL UMINDEX1.21
CLL Logical components covered: C0 UMINDEX1.22
CLL UMINDEX1.23
CLL Project task: C0 UMINDEX1.24
CLL UMINDEX1.25
CLL External documentation: On-line UM document C1 - The top-level UMINDEX1.26
CLL dynamic allocation UMINDEX1.27
CLL UMINDEX1.28
CLL ------------------------------------------------------------------- UMINDEX1.29
C*L Interface and arguments: ------------------------------------------ UMINDEX1.30
C UMINDEX1.31
SUBROUTINE UM_INDEX( 1,5UMINDEX1.32
*CALL ARGSIZE
SF011193.40
*CALL ARGSZSP
UMINDEX1.33
*CALL ARGSZSPA
UMINDEX1.34
*CALL ARGSZSPO
UMINDEX1.35
*CALL ARGSZSPW
WRB1F401.902
*CALL ARGSZSPC
UMINDEX1.36
& ICODE,CMESSAGE) UMINDEX1.37
C UMINDEX1.38
C*---------------------------------------------------------------------- UMINDEX1.39
IMPLICIT NONE UMINDEX1.40
C UMINDEX1.41
C Subroutines called UMINDEX1.42
C UMINDEX1.43
EXTERNAL TIMER UMINDEX1.44
C UMINDEX1.45
*IF DEF,ATMOS UMINDEX1.46
EXTERNAL UM_INDEX_A UMINDEX1.47
*ENDIF UMINDEX1.48
*IF DEF,OCEAN UMINDEX1.49
EXTERNAL UM_INDEX_O UMINDEX1.50
*ENDIF UMINDEX1.51
*IF DEF,WAVE WRB1F401.903
EXTERNAL UM_INDEX_W WRB1F401.904
*ENDIF WRB1F401.905
C UMINDEX1.52
C Local variables UMINDEX1.53
C UMINDEX1.54
INTEGER ICODE ! Work - Internal return code UMINDEX1.55
CHARACTER*80 CMESSAGE ! Work - Internal error message WRB1F401.906
C UMINDEX1.57
C Configuration-dependent sizes for dynamic arrays UMINDEX1.58
C UMINDEX1.59
*CALL CSUBMODL
! Provides N_INTERNAL_MODEL parameter for STASH array GSS1F305.809
*CALL TYPSIZE
UMINDEX1.60
C UMINDEX1.61
C ppxref parameters needed for a STASH array GSS1F305.810
*CALL CPPXREF
UMINDEX1.63
C UMINDEX1.64
C Super array sizes for dynamic allocation in U_MODEL UMINDEX1.65
C UMINDEX1.66
*CALL TYPSZSP
UMINDEX1.67
*CALL TYPSZSPA
UMINDEX1.68
*CALL TYPSZSPO
UMINDEX1.69
*CALL TYPSZSPW
WRB1F401.907
*CALL TYPSZSPC
UMINDEX1.70
*CALL CHSUNITS
GSM1F401.13
*CALL CCONTROL
GSM1F401.14
C GRR1F402.54
*CALL TYPD1
! Holds D1_LIST_LEN needed to calculate array size GSM2F403.222
C GSM2F403.223
GSM1F401.15
*CALL PARVARS
GRR0F402.93
*CALL DECOMPTP
GRR0F402.94
*CALL DECOMPDB
GRR0F402.95
C UMINDEX1.71
C Addresses of arrays in super arrays. UMINDEX1.72
C UMINDEX1.73
*CALL SPINDEX
UMINDEX1.74
C UMINDEX1.75
INTEGER LEN_D1_ADDR GSM2F403.224
CL---------------------------------------------------------------------- UMINDEX1.76
CL 0. Start Timer running UMINDEX1.77
CL UMINDEX1.78
IF(LTIMER) THEN GSM1F401.16
CALL TIMER
('UM_INDEX',3) GSM1F401.17
END IF GSM1F401.18
ICODE=0 UMINDEX1.80
UDR2F404.27
! 0.1 Initialise variables in TYPSIZE UDR2F404.28
LEN_A_IXSTS = A_IXSTS_LEN UDR2F404.29
LEN_O_IXSTS = O_IXSTS_LEN UDR2F404.30
LEN_W_IXSTS = W_IXSTS_LEN UDR2F404.31
LEN_A_SPSTS = 0 UDR2F404.32
LEN_O_SPSTS = 0 UDR2F404.33
LEN_W_SPSTS = 0 UDR2F404.34
CL---------------------------------------------------------------------- UMINDEX1.81
CL 1. Calculate addresses in super array and each super array length UMINDEX1.82
CL UMINDEX1.83
CL 1.1 D1 super array UMINDEX1.84
CL UMINDEX1.85
CL super array addresses UMINDEX1.86
LEN_D1_ADDR=D1_LIST_LEN*N_OBJ_D1_MAX*N_SUBMODEL_PARTITION GSM2F403.225
*IF DEF,T3E GBC6F404.301
c--make sure the increment aligns on to an Scache boundary, GBC6F404.302
c if the initial location of D1 is set properly GBC6F404.303
len_d1_addr=((len_d1_addr+7)/8)*8 GBC6F404.304
*ENDIF GBC6F404.305
IXD1(1)=1 UMINDEX1.87
IXD1(2)=LEN_D1_ADDR+1 GSM2F403.226
IXD1(3)=LEN_D1_ADDR+1 ! array not used GSM2F403.227
IXD1(4)=LEN_D1_ADDR+1 ! array not used GSM2F403.228
*IF DEF,ATMOS,AND,DEF,OCEAN GRR1F402.59
*IF DEF,MPP GRR1F402.60
IF (L_AO_D1_MEMORY) THEN ! D1 images in memory for A-O coupling GDR5F404.6
IXD1(3)=IXD1(2) + LEN_TOT GSM2F403.229
IXD1(4)=IXD1(3) + A_LEN_D1 GSM2F403.230
ENDIF GRR1F402.64
*ENDIF GRR1F402.65
*ENDIF GRR1F402.66
CL UMINDEX1.88
CL super array length UMINDEX1.89
SPD1_LEN=LEN_TOT+LEN_D1_ADDR GSM2F403.231
*IF DEF,ATMOS,AND,DEF,OCEAN GRR1F402.67
*IF DEF,MPP GRR1F402.68
SPD1_LEN=IXD1(4) + O_LEN_D1 GSM2F403.232
SPD1_LEN=SPD1_LEN - 1 GRR1F402.70
*ENDIF GRR1F402.71
*ENDIF GRR1F402.72
CL UMINDEX1.91
CL UMINDEX1.92
! 1.2 STASH super array GSS1F305.812
GSS1F305.813
! super array addresses GSS1F305.814
! SF GSS1F305.815
IXSTS( 1)=1 GSS1F305.816
! STINDEX GSS1F305.817
IXSTS( 2)=IXSTS( 1)+ (NITEMS+1)*(NSECTS+1) GSS1F305.818
! STLIST GSS1F305.819
IXSTS( 3)=IXSTS( 2)+2*NITEMS *(NSECTS+1) GSS1F305.820
& *N_INTERNAL_MODEL GSS1F305.821
! SI GSS1F305.822
IXSTS( 4)=IXSTS( 3)+ LEN_STLIST*TOTITEMS GSS1F305.823
! STTABL GSS1F305.824
IXSTS( 5)=IXSTS( 4)+ NITEMS *(NSECTS+1) GSS1F305.825
& *N_INTERNAL_MODEL GSS1F305.826
! STASH_MAXLEN GSS1F305.827
IXSTS( 6)=IXSTS( 5)+ NSTTIMS *NSTTABL GSS1F305.828
! PPINDEX GSS1F305.829
IXSTS( 7)=IXSTS( 6)+ (NSECTS+1)*N_INTERNAL_MODEL GSS1F305.830
! STASH_LEVELS GSS1F305.831
IXSTS( 8)=IXSTS( 7)+ NITEMS *N_INTERNAL_MODEL GSS1F305.832
! STASH_PSEUDO_LEVELS GSS1F305.833
IXSTS( 9)=IXSTS( 8)+ (NUM_STASH_LEVELS+1)*NUM_LEVEL_LISTS GSS1F305.834
! STASH_SERIES GSS1F305.835
IXSTS(10)=IXSTS( 9)+ (NUM_STASH_PSEUDO+1)*NUM_PSEUDO_LISTS GSS1F305.836
! STASH_SERIES_INDEX GSS1F305.837
IXSTS(11)=IXSTS(10)+ TIME_SERIES_REC_LEN*NSTASH_SERIES_RECORDS GSS1F305.838
! MOS_MASK GSS1F305.839
IXSTS(12)=IXSTS(11)+2*NSTASH_SERIES_BLOCK GSS1F305.840
GSS1F305.841
CL UMINDEX1.109
CL super array length UMINDEX1.110
SPSTS_LEN =IXSTS(12)+ MOS_MASK_LEN GSS1F305.842
SPSTS_LEN =SPSTS_LEN -1 UMINDEX1.112
CL UMINDEX1.113
CL UMINDEX1.114
CL 1.3 Input boundary conditions super array UMINDEX1.115
CL UMINDEX1.116
CL super array addresses UMINDEX1.117
IXBND(1) =1 UMINDEX1.118
CL UMINDEX1.119
CL super array length UMINDEX1.120
SPBND_LEN =IXBND(1)+ 2 + FLOORFLDSA GSI1F405.70
SPBND_LEN =SPBND_LEN -1 UMINDEX1.122
CL UMINDEX1.123
CL---------------------------------------------------------------------- UMINDEX1.124
CL 2. atmosphere super arrays UMINDEX1.125
*IF DEF,ATMOS UMINDEX1.126
CL UMINDEX1.127
CALL UM_INDEX_A
( UMINDEX1.128
*CALL ARGSZSPA
UMINDEX1.129
& ICODE,CMESSAGE) UMINDEX1.130
*ENDIF UMINDEX1.131
CL UMINDEX1.132
CL---------------------------------------------------------------------- UMINDEX1.133
CL 3. ocean super arrays UMINDEX1.134
*IF DEF,OCEAN UMINDEX1.135
CL UMINDEX1.136
CALL UM_INDEX_O
( UMINDEX1.137
*CALL ARGSIZE
SF011193.41
*CALL ARGSZSPO
UMINDEX1.138
& ICODE,CMESSAGE) UMINDEX1.139
*ENDIF UMINDEX1.140
CL---------------------------------------------------------------------- UMINDEX1.141
CL 4. wave super arrays WRB1F401.908
*IF DEF,WAVE WRB1F401.909
CL WRB1F401.910
CALL UM_INDEX_W
( WRB1F401.911
*CALL ARGSIZE
WRB1F401.912
*CALL ARGSZSPW
WRB1F401.913
& ICODE,CMESSAGE) WRB1F401.914
*ENDIF WRB1F401.915
CL---------------------------------------------------------------------- WRB1F401.916
CL 5. coupled super arrays WRB1F401.917
*IF DEF,ATMOS,AND,DEF,OCEAN UMINDEX1.143
CL GRR0F402.96
*IF DEF,MPP GRR0F402.97
CL Get global sizes (all PEs) for coupling routines GRR0F402.98
AOCPL_IMT =decomp_db_glsize(1,decomp_standard_ocean) GRR0F402.99
AOCPL_JMT =decomp_db_glsize(2,decomp_standard_ocean) GRR0F402.100
AOCPL_ROW_LENGTH=decomp_db_glsize(1,decomp_standard_atmos) GRR0F402.101
AOCPL_P_ROWS =decomp_db_glsize(2,decomp_standard_atmos) GRR0F402.102
*ELSE GRR0F402.103
AOCPL_IMT =IMT GRR0F402.104
AOCPL_JMT =JMT GRR0F402.105
AOCPL_ROW_LENGTH=ROW_LENGTH GRR0F402.106
AOCPL_P_ROWS =P_ROWS GRR0F402.107
*ENDIF GRR0F402.108
CL UMINDEX1.144
CL super array addresses UMINDEX1.145
AO_IXCPL(1) =1 GRR0F402.109
AO_IXCPL(2) =AO_IXCPL(1) + AOCPL_IMT+1 GRR0F402.110
AO_IXCPL(3) =AO_IXCPL(2) + AOCPL_IMT GRR0F402.111
AO_IXCPL(4) =AO_IXCPL(3) + AOCPL_JMT+1 GRR0F402.112
AO_IXCPL(5) =AO_IXCPL(4) + AOCPL_JMT GRR0F402.113
AO_IXCPL(6) =AO_IXCPL(5) + AOCPL_ROW_LENGTH+1 GRR0F402.114
AO_IXCPL(7) =AO_IXCPL(6) + AOCPL_ROW_LENGTH+1 GRR0F402.115
AO_IXCPL(8) =AO_IXCPL(7) + AOCPL_P_ROWS GRR0F402.116
CL GRR0F402.117
CL super array length GRR0F402.118
AO_SPCPL_LEN =AO_IXCPL(8)+ AOCPL_P_ROWS+1 GRR0F402.119
AO_SPCPL_LEN =AO_SPCPL_LEN -1 UMINDEX1.157
*ENDIF UMINDEX1.158
CL---------------------------------------------------------------------- UMINDEX1.159
CL 6. Exit processing WRB1F401.918
CL UMINDEX1.161
write(6,*) 'Super array lengths:', UMINDEX1.162
*CALL ARGSZSP
UMINDEX1.163
&' not sub-model' WRB1F401.919
write(6,*) 'Super array lengths:', UMINDEX1.165
*CALL ARGSZSPA
UMINDEX1.166
&' atmosphere' WRB1F401.920
write(6,*) 'Super array lengths:', UMINDEX1.168
*CALL ARGSZSPO
UMINDEX1.169
&' ocean' WRB1F401.921
write(6,*) 'Super array lengths:', UMINDEX1.171
*CALL ARGSZSPW
WRB1F401.922
&' wave' WRB1F401.923
write(6,*) 'Super array lengths:', WRB1F401.924
*CALL ARGSZSPC
UMINDEX1.172
&' coupled' WRB1F401.925
IF(LTIMER) THEN GSM1F401.19
CALL TIMER
('UM_INDEX',4) GSM1F401.20
END IF GSM1F401.21
C UMINDEX1.175
RETURN UMINDEX1.176
END UMINDEX1.177
*ENDIF UMINDEX1.178
*IF DEF,CONTROL,AND,DEF,ATMOS UMINDEX1.179
CLL Subroutine: UM_INDEX_A--------------------------------------------- UMINDEX1.180
CLL UMINDEX1.181
CLL Purpose: Calculate addresses and lengths of atmosphere super arrays UMINDEX1.182
CLL UMINDEX1.183
CLL Tested under compiler: cft77 UMINDEX1.184
CLL Tested under OS version: UNICOS 6.1.5A UMINDEX1.185
CLL UMINDEX1.186
CLL Model Modification history: UMINDEX1.187
CLL version date UMINDEX1.188
CLL 3.2 30/03/93 Introduced as new DECK to allow dynamic allocation UMINDEX1.189
CLL of main data arrays in U_MODEL. UMINDEX1.190
CLL 3.2 22/11/93 Add 3 more A_IXPTR values for aerosol pointers. RB221193.119
CLL R.T.H.Barnes. RB221193.120
CLL 3.4 29/09/94 Add 6 more A_IXPTR values for multi-level murk and GRB0F304.325
CLL user ancillaries. R.T.H.Barnes. GRB0F304.326
CLL 3.4 18/5/94 Add extra u field to A_SPCON (argcona). J Thomson GJT1F304.37
!LL 4.0 06/09/95 Added atmos stash superarray. K Rogers GKR0F400.2
CLL UMINDEX1.191
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) UMINDEX1.192
CLL UMINDEX1.193
CLL Logical components covered: C0 UMINDEX1.194
CLL UMINDEX1.195
CLL Project task: C0 UMINDEX1.196
CLL UMINDEX1.197
CLL External documentation: On-line UM document C1 - The top-level UMINDEX1.198
CLL dynamic allocation UMINDEX1.199
CLL UMINDEX1.200
CLL ------------------------------------------------------------------- UMINDEX1.201
C*L Interface and arguments: ------------------------------------------ UMINDEX1.202
C UMINDEX1.203
SUBROUTINE UM_INDEX_A( 1UMINDEX1.204
*CALL ARGSZSPA
UMINDEX1.205
& ICODE,CMESSAGE) UMINDEX1.206
C UMINDEX1.207
C*---------------------------------------------------------------------- UMINDEX1.208
IMPLICIT NONE UMINDEX1.209
C UMINDEX1.210
C Subroutines called UMINDEX1.211
C UMINDEX1.212
C Local variables UMINDEX1.213
C UMINDEX1.214
INTEGER ICODE ! Work - Internal return code UMINDEX1.215
CHARACTER*80 CMESSAGE ! Work - Internal error message WRB1F401.926
C UMINDEX1.217
C Configuration-dependent sizes for dynamic arrays UMINDEX1.218
C UMINDEX1.219
*CALL TYPSIZE
UMINDEX1.220
C UMINDEX1.221
C Parameters for constants arrays UMINDEX1.222
*CALL CMAXSIZE
UMINDEX1.223
*CALL CCONSTS
UMINDEX1.224
C Ancillary file parameters for ancillary length calculations UMINDEX1.225
*CALL CONANC
UMINDEX1.226
*CALL CSENARIO
AWI1F403.63
C UMINDEX1.227
C Super array sizes for dynamic allocation in U_MODEL UMINDEX1.228
C UMINDEX1.229
*CALL TYPSZSPA
UMINDEX1.230
C UMINDEX1.231
C Addresses of arrays in super arrays. UMINDEX1.232
C UMINDEX1.233
*CALL SPINDEX
UMINDEX1.234
C UMINDEX1.235
CL---------------------------------------------------------------------- UMINDEX1.236
CL UMINDEX1.237
ICODE=0 UMINDEX1.238
GKR0F400.3
!L GKR0F400.4
!L 1.0 Calculate size of atmosphere stash array GKR0F400.5
!L GKR0F400.6
a_ixsts(1) = 1 ! a_levdepc(jak) GKR0F400.7
a_ixsts(2) = a_ixsts(1) + p_levels ! a_levdepc(jbk) GKR0F400.8
a_ixsts(3) = a_ixsts(2) + p_levels ! akh GKR0F400.9
a_ixsts(4) = a_ixsts(3) + p_levels + 1 ! bkh GKR0F400.10
a_ixsts(5) = a_ixsts(4) + p_levels + 1 ! a_levdepc(jdelta_ak) GKR0F400.11
a_ixsts(6) = a_ixsts(5) + p_levels ! a_levdepc(jdelta_bk) GKR0F400.12
a_ixsts(7) = a_ixsts(6) + p_levels ! pexner pointer GKR0F400.13
a_ixsts(8) = a_ixsts(7) + 1 ! pstar pointer GKR0F400.14
a_ixsts(9) = a_ixsts(8) + 1 ! cos_p_latitude GKR0F400.15
a_ixsts(10) = a_ixsts(9) + row_length * p_rows ! cos_u_latitude GKR0F400.16
a_ixsts(11) = a_ixsts(10) + row_length * u_rows ! land GKR0F400.17
a_spsts_len = a_ixsts(11) + p_field GKR0F400.18
! Store A_SPSTS_LEN in TYPSIZE UDR2F404.35
LEN_A_SPSTS = A_SPSTS_LEN UDR2F404.36
GKR0F400.19
CL UMINDEX1.239
CL 1.1 DUMP super array UMINDEX1.240
CL UMINDEX1.241
CL super array addresses UMINDEX1.242
A_IXDUM(1) =1 UMINDEX1.243
A_IXDUM(2) =A_IXDUM(1) + LEN_FIXHD UMINDEX1.244
A_IXDUM(3) =A_IXDUM(2) + A_LEN_INTHD UMINDEX1.245
A_IXDUM(4) =A_IXDUM(3) + A_LEN_CFI1+1 UMINDEX1.246
A_IXDUM(5) =A_IXDUM(4) + A_LEN_CFI2+1 UMINDEX1.247
A_IXDUM(6) =A_IXDUM(5) + A_LEN_CFI3+1 UMINDEX1.248
A_IXDUM(7) =A_IXDUM(6) + A_LEN_REALHD UMINDEX1.249
A_IXDUM(8) =A_IXDUM(7) + A_LEN1_LEVDEPC*A_LEN2_LEVDEPC+1 UMINDEX1.250
A_IXDUM(9) =A_IXDUM(8) + A_LEN1_ROWDEPC*A_LEN2_ROWDEPC+1 UMINDEX1.251
A_IXDUM(10)=A_IXDUM(9) + A_LEN1_COLDEPC*A_LEN2_COLDEPC+1 UMINDEX1.252
A_IXDUM(11)=A_IXDUM(10)+ A_LEN1_FLDDEPC*A_LEN2_FLDDEPC+1 UMINDEX1.253
A_IXDUM(12)=A_IXDUM(11)+ A_LEN_EXTCNST+1 UMINDEX1.254
A_IXDUM(13)=A_IXDUM(12)+ LEN_DUMPHIST+1 UMINDEX1.255
*IF DEF,MPP GSM1F403.44
A_IXDUM(14)=A_IXDUM(13)+ LEN1_LOOKUP*A_LEN2_LOOKUP GSM1F403.45
*ENDIF GSM1F403.46
GSM1F403.47
CL UMINDEX1.256
CL super array length UMINDEX1.257
*IF DEF,MPP GSM1F403.48
A_SPDUM_LEN =A_IXDUM(14)+ MPP_LEN1_LOOKUP*A_LEN2_LOOKUP GSM1F403.49
*ELSE GSM1F403.50
A_SPDUM_LEN =A_IXDUM(13)+ LEN1_LOOKUP*A_LEN2_LOOKUP UMINDEX1.258
*ENDIF GSM1F403.51
A_SPDUM_LEN =A_SPDUM_LEN -1 UMINDEX1.259
CL UMINDEX1.260
CL UMINDEX1.261
CL 1.2 Pointers super array UMINDEX1.262
CL UMINDEX1.263
CL super array addresses UMINDEX1.264
GDR7F405.10
! Comment at end of each line corresponds to the matching GDR7F405.11
! pointer in ARGPTRA. eg A_IXPTR(3) in ARTPTRA = jtheta in ARGPTRA GDR7F405.12
GDR7F405.13
! For each line : A_IXPTR(n+1) = A_IXPTR(n) + n_levs GDR7F405.14
! where n_levs in the no of levels for pointer n. GDR7F405.15
GDR7F405.16
A_IXPTR(1) =1 ! ju GDR7F405.17
A_IXPTR(2) =A_IXPTR(1) + P_LEVELS ! jv GDR7F405.18
A_IXPTR(3) =A_IXPTR(2) + P_LEVELS ! jtheta GDR7F405.19
A_IXPTR(4) =A_IXPTR(3) + P_LEVELS ! jq GDR7F405.20
A_IXPTR(5) =A_IXPTR(4) + Q_LEVELS ! jqcl GDR7F405.21
A_IXPTR(6) =A_IXPTR(5) + Q_LEVELS ! jqcf GDR7F405.22
A_IXPTR(7) =A_IXPTR(6) + Q_LEVELS ! j_deep_soil_temp GDR7F405.23
A_IXPTR(8) =A_IXPTR(7) + ST_LEVELS ! jsmcl GDR7F405.24
A_IXPTR(9) =A_IXPTR(8) + SM_LEVELS ! jozone GDR7F405.25
A_IXPTR(10)=A_IXPTR(9) + OZONE_LEVELS ! jtracer GDR7F405.26
A_IXPTR(11)=A_IXPTR(10)+ TR_LEVELS*(TR_VARS+1) ! jp_exner GDR7F405.27
A_IXPTR(12)=A_IXPTR(11)+ P_LEVELS+1 ! jso4 GDR7F405.28
A_IXPTR(13)=A_IXPTR(12)+ TR_LEVELS ! jh2so4 GDR7F405.29
A_IXPTR(14)=A_IXPTR(13)+ TR_LEVELS ! jsoot GDR7F405.30
A_IXPTR(15)=A_IXPTR(14)+ TR_LEVELS ! jmurk GDR7F405.31
A_IXPTR(16)=A_IXPTR(15)+ P_LEVELS ! jmurk_source GDR7F405.32
A_IXPTR(17)=A_IXPTR(16)+ P_LEVELS ! juser_mult1 GDR7F405.33
A_IXPTR(18)=A_IXPTR(17)+ P_LEVELS ! juser_mult2 GDR7F405.34
A_IXPTR(19)=A_IXPTR(18)+ P_LEVELS ! juser_mult3 GDR7F405.35
A_IXPTR(20)=A_IXPTR(19)+ P_LEVELS ! juser_mult4 GDR7F405.36
A_IXPTR(21)=A_IXPTR(20)+ P_LEVELS ! juser_mult5 GDR7F405.37
A_IXPTR(22)=A_IXPTR(21)+ P_LEVELS ! juser_mult6 GDR7F405.38
A_IXPTR(23)=A_IXPTR(22)+ P_LEVELS ! juser_mult7 GDR7F405.39
A_IXPTR(24)=A_IXPTR(23)+ P_LEVELS ! juser_mult8 GDR7F405.40
A_IXPTR(25)=A_IXPTR(24)+ P_LEVELS ! juser_mult9 GDR7F405.41
A_IXPTR(26)=A_IXPTR(25)+ P_LEVELS ! juser_mult10 GDR7F405.42
A_IXPTR(27)=A_IXPTR(26)+ P_LEVELS ! juser_mult11 GDR7F405.43
A_IXPTR(28)=A_IXPTR(27)+ P_LEVELS ! juser_mult12 GDR7F405.44
A_IXPTR(29)=A_IXPTR(28)+ P_LEVELS ! juser_mult13 GDR7F405.45
A_IXPTR(30)=A_IXPTR(29)+ P_LEVELS ! juser_mult14 GDR7F405.46
A_IXPTR(31)=A_IXPTR(30)+ P_LEVELS ! juser_mult15 GDR7F405.47
A_IXPTR(32)=A_IXPTR(31)+ P_LEVELS ! juser_mult16 GDR7F405.48
A_IXPTR(33)=A_IXPTR(32)+ P_LEVELS ! juser_mult17 GDR7F405.49
A_IXPTR(34)=A_IXPTR(33)+ P_LEVELS ! juser_mult18 GDR7F405.50
A_IXPTR(35)=A_IXPTR(34)+ P_LEVELS ! juser_mult19 GDR7F405.51
A_IXPTR(36)=A_IXPTR(35)+ P_LEVELS ! juser_mult20 GDR7F405.52
A_IXPTR(37)=A_IXPTR(36)+ P_LEVELS ! jsthu GDR7F405.53
A_IXPTR(38)=A_IXPTR(37)+ SM_LEVELS ! jsthf GDR7F405.54
A_IXPTR(39)=A_IXPTR(38)+ SM_LEVELS ! jso2 GDR7F405.55
A_IXPTR(40)=A_IXPTR(39)+ P_LEVELS ! jdms GDR7F405.56
A_IXPTR(41)=A_IXPTR(40)+ P_LEVELS ! jso4_aitken GDR7F405.57
A_IXPTR(42)=A_IXPTR(41)+ P_LEVELS ! jso4_accu GDR7F405.58
A_IXPTR(43)=A_IXPTR(42)+ P_LEVELS ! jso4_diss GDR7F405.59
A_IXPTR(44)=A_IXPTR(43)+ P_LEVELS ! jh2o2 GDR7F405.60
A_IXPTR(45)=A_IXPTR(44)+ P_LEVELS ! jso2_natem GDR7F405.61
A_IXPTR(46)=A_IXPTR(45)+ P_LEVELS ! joh GDR7F405.62
A_IXPTR(47)=A_IXPTR(46)+ P_LEVELS ! jho2 GDR7F405.63
A_IXPTR(48)=A_IXPTR(47)+ P_LEVELS ! jh2o2_limit GDR7F405.64
A_IXPTR(49)=A_IXPTR(48)+ P_LEVELS ! jo3_chem GDR7F405.65
A_IXPTR(50)=A_IXPTR(49)+ P_LEVELS ! jhadcm2_so4 GDR7F405.66
A_IXPTR(51)=A_IXPTR(50)+ NSULPAT ! jcca GDR7F405.67
A_IXPTR(52)=A_IXPTR(51)+ N_CCA_LEV ! jrhc GDR7F405.68
A_IXPTR(53)=A_IXPTR(52)+ Q_LEVELS ! jnh3 GDR7F405.69
A_IXPTR(54)=A_IXPTR(53)+ P_LEVELS ! jsoot_new GDR7F405.70
A_IXPTR(55)=A_IXPTR(54)+ P_LEVELS ! jsoot_agd GDR7F405.71
A_IXPTR(56)=A_IXPTR(55)+ P_LEVELS ! jsoot_cld GDR7F405.72
A_IXPTR(57)=A_IXPTR(56)+ P_LEVELS ! jco2 GDR7F405.73
CL UMINDEX1.278
CL super array length UMINDEX1.279
A_SPPTR_LEN =A_IXPTR(57)+ P_LEVELS GDR7F405.74
A_SPPTR_LEN =A_SPPTR_LEN -1 UMINDEX1.281
CL UMINDEX1.282
CL UMINDEX1.283
CL 1.3 Derived constants super array UMINDEX1.284
CL UMINDEX1.285
CL super array addresses UMINDEX1.286
A_IXCON(1) =1 UMINDEX1.287
A_IXCON(2) =A_IXCON(1) + P_LEVELS UMINDEX1.288
A_IXCON(3) =A_IXCON(2) + P_LEVELS UMINDEX1.289
A_IXCON(4) =A_IXCON(3) + P_LEVELS+1 UMINDEX1.290
A_IXCON(5) =A_IXCON(4) + P_LEVELS+1 UMINDEX1.291
A_IXCON(6) =A_IXCON(5) + P_LEVELS+1 UMINDEX1.292
A_IXCON(7) =A_IXCON(6) + P_LEVELS+1 UMINDEX1.293
A_IXCON(8) =A_IXCON(7) + U_FIELD UMINDEX1.294
A_IXCON(9) =A_IXCON(8) + P_FIELD UMINDEX1.295
A_IXCON(10)=A_IXCON(9) + U_FIELD UMINDEX1.296
A_IXCON(11)=A_IXCON(10)+ P_FIELD UMINDEX1.297
A_IXCON(12)=A_IXCON(11)+ U_FIELD UMINDEX1.298
A_IXCON(13)=A_IXCON(12)+ ROW_LENGTH UMINDEX1.299
A_IXCON(14)=A_IXCON(13)+ ROW_LENGTH UMINDEX1.300
A_IXCON(15)=A_IXCON(14)+ P_FIELD UMINDEX1.301
A_IXCON(16)=A_IXCON(15)+ U_FIELD UMINDEX1.302
A_IXCON(17)=A_IXCON(16)+ U_FIELD UMINDEX1.303
A_IXCON(18)=A_IXCON(17)+ U_FIELD UMINDEX1.304
A_IXCON(19)=A_IXCON(18)+ P_FIELD UMINDEX1.305
A_IXCON(20)=A_IXCON(19)+ ROW_LENGTH UMINDEX1.306
A_IXCON(21)=A_IXCON(20)+ P_FIELD/ROW_LENGTH UMINDEX1.307
A_IXCON(22)=A_IXCON(21)+ UMINDEX1.308
& MATRIX_POLY_ORDER*MATRIX_POLY_ORDER*P_LEVELS UMINDEX1.309
*IF -DEF,MPP GPB0F305.378
A_IXCON(23)=A_IXCON(22)+ LAND_FIELD UMINDEX1.310
A_IXCON(24)=A_IXCON(23) + LAND_FIELD GJT1F304.38
*ELSE GPB0F305.379
A_IXCON(23)=A_IXCON(22)+ P_FIELD GPB0F305.380
A_IXCON(24)=A_IXCON(23) + P_FIELD GPB0F305.381
! ! land point fields are allocated P_FIELD amount of space in D1 GPB0F305.382
*ENDIF GPB0F305.383
CL UMINDEX1.311
CL super array length UMINDEX1.312
A_SPCON_LEN =A_IXCON(24) + U_FIELD GJT1F304.39
A_SPCON_LEN =A_SPCON_LEN -1 UMINDEX1.314
CL UMINDEX1.315
CL UMINDEX1.316
CL 1.4 Interface output (boundary conditions) super array UMINDEX1.317
CL UMINDEX1.318
CL super array addresses UMINDEX1.319
A_IXINF(1) =1 UMINDEX1.320
A_IXINF(2) =A_IXINF(1) + LEN_FIXHD*N_INTF_A UMINDEX1.321
A_IXINF(3) =A_IXINF(2) + PP_LEN_INTHD*N_INTF_A UMINDEX1.322
A_IXINF(4) =A_IXINF(3) + LEN1_LOOKUP*INTF_LOOKUPSA*N_INTF_A UMINDEX1.323
A_IXINF(5) =A_IXINF(4) + PP_LEN_REALHD*N_INTF_A UMINDEX1.324
A_IXINF(6) =A_IXINF(5) + MAX_INTF_P_LEVELS*INTF_LEN2_LEVDEPC* UMINDEX1.325
& N_INTF_A UMINDEX1.326
A_IXINF(7) =A_IXINF(6) + TOT_LEN_INTFA_P UMINDEX1.327
A_IXINF(8) =A_IXINF(7) + TOT_LEN_INTFA_P UMINDEX1.328
A_IXINF(9) =A_IXINF(8) + TOT_LEN_INTFA_U UMINDEX1.329
A_IXINF(10)=A_IXINF(9) + TOT_LEN_INTFA_U UMINDEX1.330
A_IXINF(11)=A_IXINF(10)+ TOT_LEN_INTFA_P UMINDEX1.331
A_IXINF(12)=A_IXINF(11)+ TOT_LEN_INTFA_P UMINDEX1.332
A_IXINF(13)=A_IXINF(12)+ TOT_LEN_INTFA_P UMINDEX1.333
A_IXINF(14)=A_IXINF(13)+ TOT_LEN_INTFA_P UMINDEX1.334
A_IXINF(15)=A_IXINF(14)+ TOT_LEN_INTFA_U UMINDEX1.335
A_IXINF(16)=A_IXINF(15)+ TOT_LEN_INTFA_U UMINDEX1.336
A_IXINF(17)=A_IXINF(16)+ TOT_LEN_INTFA_U UMINDEX1.337
A_IXINF(18)=A_IXINF(17)+ TOT_LEN_INTFA_U UMINDEX1.338
A_IXINF(19)=A_IXINF(18)+ TOT_LEN_INTFA_U UMINDEX1.339
A_IXINF(20)=A_IXINF(19)+ TOT_LEN_INTFA_U UMINDEX1.340
A_IXINF(21)=A_IXINF(20)+ U_FIELD_INTFA GDR2F405.47
A_IXINF(22)=A_IXINF(21)+ U_FIELD_INTFA GDR2F405.48
A_IXINF(23)=A_IXINF(22)+ (MAX_INTF_P_LEVELS+1)*N_INTF_A GDR2F405.49
A_IXINF(24)=A_IXINF(23)+ (MAX_INTF_P_LEVELS+1)*N_INTF_A GDR2F405.50
A_IXINF(25)=A_IXINF(24)+ MAX_INTF_P_LEVELS *N_INTF_A GDR2F405.51
CL UMINDEX1.342
CL super array length UMINDEX1.343
A_SPINF_LEN =A_IXINF(25)+ MAX_INTF_P_LEVELS*N_INTF_A GDR2F405.52
A_SPINF_LEN =A_SPINF_LEN -1 UMINDEX1.345
CL UMINDEX1.346
write (6,*) 'umindex : a_spinf_len ',a_spinf_len GDR2F405.53
CL UMINDEX1.347
CL 1.5 Ancillary file super array UMINDEX1.348
CL UMINDEX1.349
CL super array addresses UMINDEX1.350
A_IXANC(1) =1 UMINDEX1.351
A_IXANC(2) =A_IXANC(1) + LEN_FIXHD*NANCIL_DATASETSA UMINDEX1.352
A_IXANC(3) =A_IXANC(2) + A_LEN_INTHD*NANCIL_DATASETSA UMINDEX1.353
A_IXANC(4) =A_IXANC(3) + LEN1_LOOKUP*NANCIL_LOOKUPSA UMINDEX1.354
CL UMINDEX1.355
CL super array length UMINDEX1.356
A_SPANC_LEN =A_IXANC(4)+ A_LEN_REALHD*NANCIL_DATASETSA UMINDEX1.357
A_SPANC_LEN =A_SPANC_LEN -1 UMINDEX1.358
CL UMINDEX1.359
CL UMINDEX1.360
CL 1.6 Input boundary constants super array UMINDEX1.361
CL UMINDEX1.362
CL super array addresses UMINDEX1.363
A_IXBND(1) =1 UMINDEX1.364
A_IXBND(2) =A_IXBND(1) + LEN_FIXHD*2 UMINDEX1.365
A_IXBND(3) =A_IXBND(2) + A_LEN_INTHD*2 UMINDEX1.366
A_IXBND(4) =A_IXBND(3) + LEN1_LOOKUP*BOUND_LOOKUPSA UMINDEX1.367
CL UMINDEX1.368
CL super array length UMINDEX1.369
A_SPBND_LEN =A_IXBND(4)+ A_LEN_REALHD*2 UMINDEX1.370
A_SPBND_LEN =A_SPBND_LEN -1 UMINDEX1.371
CL UMINDEX1.372
CL---------------------------------------------------------------------- UMINDEX1.373
CL UMINDEX1.374
RETURN UMINDEX1.375
END UMINDEX1.376
*ENDIF UMINDEX1.377
*IF DEF,CONTROL,AND,DEF,OCEAN UMINDEX1.378
CLL Subroutine: UM_INDEX_O--------------------------------------------- UMINDEX1.379
CLL UMINDEX1.380
CLL Purpose: Calculate addresses and lengths of ocean super arrays WRB1F401.927
CLL UMINDEX1.382
CLL Tested under compiler: cft77 UMINDEX1.383
CLL Tested under OS version: UNICOS 6.1.5A UMINDEX1.384
CLL UMINDEX1.385
CLL Model Modification history: UMINDEX1.386
CLL version date UMINDEX1.387
CLL 3.2 30/03/93 Introduced as new DECK to allow dynamic allocation UMINDEX1.388
CLL of main data arrays in U_MODEL. UMINDEX1.389
!LL 4.0 06/09/95 Added ocean stash superarray. K Rogers GKR0F400.20
CLL UMINDEX1.390
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) UMINDEX1.391
CLL UMINDEX1.392
CLL Logical components covered: C0 UMINDEX1.393
CLL UMINDEX1.394
CLL Project task: C0 UMINDEX1.395
CLL UMINDEX1.396
CLL External documentation: On-line UM document C1 - The top-level UMINDEX1.397
CLL dynamic allocation UMINDEX1.398
CLL UMINDEX1.399
CLL ------------------------------------------------------------------- UMINDEX1.400
C*L Interface and arguments: ------------------------------------------ UMINDEX1.401
C UMINDEX1.402
SUBROUTINE UM_INDEX_O( 1,1UMINDEX1.403
*CALL ARGSIZE
SF011193.42
*CALL ARGSZSPO
UMINDEX1.404
& ICODE,CMESSAGE) UMINDEX1.405
C UMINDEX1.406
C*---------------------------------------------------------------------- UMINDEX1.407
IMPLICIT NONE UMINDEX1.408
C UMINDEX1.409
C Subroutines called UMINDEX1.410
C UMINDEX1.411
EXTERNAL OCNARYPT UMINDEX1.412
C UMINDEX1.413
C Local variables UMINDEX1.414
C UMINDEX1.415
INTEGER ICODE ! Work - Internal return code UMINDEX1.416
CHARACTER*80 CMESSAGE ! Work - Internal error message WRB1F401.928
C UMINDEX1.418
C Configuration-dependent sizes for dynamic arrays UMINDEX1.419
C UMINDEX1.420
*CALL TYPSIZE
UMINDEX1.421
C UMINDEX1.422
C Ancillary file parameters for ancillary length calculations UMINDEX1.423
*CALL CONANC
UMINDEX1.424
C UMINDEX1.425
C Super array sizes for dynamic allocation in U_MODEL UMINDEX1.426
C UMINDEX1.427
*CALL TYPSZSPO
UMINDEX1.428
C UMINDEX1.429
C Addresses of arrays in super arrays. UMINDEX1.430
C UMINDEX1.431
*CALL SPINDEX
UMINDEX1.432
C UMINDEX1.433
CL---------------------------------------------------------------------- UMINDEX1.434
CL UMINDEX1.435
ICODE=0 UMINDEX1.436
GKR0F400.21
!L GKR0F400.22
!L 1.0 Calculate size of ocean stash array GKR0F400.23
!L GKR0F400.24
o_ixsts(1) = 1 ! joc_tracer GKR0F400.25
o_ixsts(2) = o_ixsts(1) + 2 * nt ! joc_u GKR0F400.26
o_ixsts(3) = o_ixsts(2) + 2 ! joc_v GKR0F400.27
o_ixsts(4) = o_ixsts(3) + 2 ! joc_no_seapts GKR0F400.28
o_ixsts(5) = o_ixsts(4) + 1 ! joc_no_segs GKR0F400.29
o_ixsts(6) = o_ixsts(5) + 1 ! o_cfi1 GKR0F400.30
o_ixsts(7) = o_ixsts(6) + o_len_cfi1 ! o_cfi2 GKR0F400.31
o_ixsts(8) = o_ixsts(7) + o_len_cfi2 ! o_cfi3 GKR0F400.32
o_ixsts(9) = o_ixsts(8) + o_len_cfi3 ! len_ocwork GKR0F400.33
o_ixsts(10) = o_ixsts(9) + 1 ! dummy GKR0F400.34
o_ixsts(11) = o_ixsts(10) + 1 ! land mask ORH2F405.18
o_spsts_len = o_ixsts(11) + IMT * JMT ORH2F405.19
! ORH2F405.20
! Store O_SPSTS_LEN in TYPSIZE UDR2F404.37
LEN_O_SPSTS = O_SPSTS_LEN UDR2F404.38
GKR0F400.37
CL UMINDEX1.437
CL 1.1 DUMP super array UMINDEX1.438
CL UMINDEX1.439
CL super array addresses UMINDEX1.440
O_IXDUM(1) =1 UMINDEX1.441
O_IXDUM(2) =O_IXDUM(1) + LEN_FIXHD UMINDEX1.442
O_IXDUM(3) =O_IXDUM(2) + O_LEN_INTHD UMINDEX1.443
O_IXDUM(4) =O_IXDUM(3) + O_LEN_CFI1+1 UMINDEX1.444
O_IXDUM(5) =O_IXDUM(4) + O_LEN_CFI2+1 UMINDEX1.445
O_IXDUM(6) =O_IXDUM(5) + O_LEN_CFI3+1 UMINDEX1.446
O_IXDUM(7) =O_IXDUM(6) + O_LEN_REALHD UMINDEX1.447
O_IXDUM(8) =O_IXDUM(7) + O_LEN1_LEVDEPC*O_LEN2_LEVDEPC+1 UMINDEX1.448
O_IXDUM(9) =O_IXDUM(8) + O_LEN1_ROWDEPC*O_LEN2_ROWDEPC+1 UMINDEX1.449
O_IXDUM(10)=O_IXDUM(9) + O_LEN1_COLDEPC*O_LEN2_COLDEPC+1 UMINDEX1.450
O_IXDUM(11)=O_IXDUM(10)+ O_LEN1_FLDDEPC*O_LEN2_FLDDEPC+1 UMINDEX1.451
O_IXDUM(12)=O_IXDUM(11)+ O_LEN_EXTCNST+1 UMINDEX1.452
O_IXDUM(13)=O_IXDUM(12)+ LEN_DUMPHIST+1 UMINDEX1.453
*IF DEF,MPP GSM1F403.52
O_IXDUM(14)=O_IXDUM(13)+ LEN1_LOOKUP*O_LEN2_LOOKUP GSM1F403.53
*ENDIF GSM1F403.54
GSM1F403.55
CL UMINDEX1.454
CL super array length UMINDEX1.455
*IF DEF,MPP GSM1F403.56
O_SPDUM_LEN =O_IXDUM(14)+ MPP_LEN1_LOOKUP*O_LEN2_LOOKUP GSM1F403.57
*ELSE GSM1F403.58
O_SPDUM_LEN =O_IXDUM(13)+ LEN1_LOOKUP*O_LEN2_LOOKUP UMINDEX1.456
*ENDIF GSM1F403.59
O_SPDUM_LEN =O_SPDUM_LEN -1 UMINDEX1.457
CL UMINDEX1.458
CL UMINDEX1.459
CL 1.2 Pointers super array UMINDEX1.460
CL UMINDEX1.461
CL super array addresses UMINDEX1.462
O_IXPTR(1) =1 UMINDEX1.463
CL UMINDEX1.464
CL super array length UMINDEX1.465
O_IXPTR(2) =O_IXPTR(1)+ NT*2 ! joc_tracer GSI1F405.71
O_SPPTR_LEN =O_IXPTR(2)+ NT ! joc_bdy_tracer GSI1F405.72
O_SPPTR_LEN =O_SPPTR_LEN -1 UMINDEX1.467
CL UMINDEX1.468
CL UMINDEX1.469
CL 1.3 Derived constants super array UMINDEX1.470
CL UMINDEX1.471
CL super array addresses UMINDEX1.472
O_IXCON(1) =1 UMINDEX1.473
CL UMINDEX1.474
CL super array length UMINDEX1.475
CL Ocean addresses for this array are calculated and passed internally UMINDEX1.476
CL to OCEAN routines only. This is a special case. UMINDEX1.477
CL UMINDEX1.478
CALL OCNARYPT
( SF011193.43
*CALL ARGSIZE
SF011193.44
*O_SPCON_LEN,ICODE,CMESSAGE) SF011193.45
CL UMINDEX1.480
CL Note that this is the only UMINDEX1.481
CL array which is passed down without decomposing into constituent UMINDEX1.482
CL arrays, each with dedicated sizes. UMINDEX1.483
CL UMINDEX1.484
CL 1.4 Interface output (boundary conditions) super array GMB1F405.339
CL GMB1F405.340
CL super array addresses GMB1F405.341
O_IXINF(1) =1 GMB1F405.342
O_IXINF(2) =O_IXINF(1) + LEN_FIXHD*N_INTF_O GMB1F405.343
O_IXINF(3) =O_IXINF(2) + PP_LEN_INTHD*N_INTF_O GMB1F405.344
O_IXINF(4) =O_IXINF(3) + LEN1_LOOKUP*INTF_LOOKUPSO*N_INTF_O GMB1F405.345
O_IXINF(5) =O_IXINF(4) + PP_LEN_REALHD*N_INTF_O GMB1F405.346
O_IXINF(6) =O_IXINF(5) + MAX_INTF_P_LEVELS_O*INTF_LEN2_LEVDEPC_O GMB1F405.347
& *N_INTF_O GMB1F405.348
O_IXINF(7) =O_IXINF(6) + TOT_LEN_INTFO_P GMB1F405.349
O_IXINF(8) =O_IXINF(7) + TOT_LEN_INTFO_P GMB1F405.350
O_IXINF(9) =O_IXINF(8) + TOT_LEN_INTFO_U GMB1F405.351
O_IXINF(10)=O_IXINF(9) + TOT_LEN_INTFO_U GMB1F405.352
O_IXINF(11)=O_IXINF(10)+ TOT_LEN_INTFO_P GMB1F405.353
O_IXINF(12)=O_IXINF(11)+ TOT_LEN_INTFO_P GMB1F405.354
O_IXINF(13)=O_IXINF(12)+ TOT_LEN_INTFO_P GMB1F405.355
O_IXINF(14)=O_IXINF(13)+ TOT_LEN_INTFO_P GMB1F405.356
O_IXINF(15)=O_IXINF(14)+ TOT_LEN_INTFO_U GMB1F405.357
O_IXINF(16)=O_IXINF(15)+ TOT_LEN_INTFO_U GMB1F405.358
O_IXINF(17)=O_IXINF(16)+ TOT_LEN_INTFO_U GMB1F405.359
O_IXINF(18)=O_IXINF(17)+ TOT_LEN_INTFO_U GMB1F405.360
O_IXINF(19)=O_IXINF(18)+ TOT_LEN_INTFO_U GMB1F405.361
O_IXINF(20)=O_IXINF(19)+ TOT_LEN_INTFO_U GMB1F405.362
O_IXINF(21)=O_IXINF(20)+ NPTS_U_FIELD_O GMB1F405.363
O_IXINF(22)=O_IXINF(21)+ NPTS_U_FIELD_O GMB1F405.364
O_IXINF(23)=O_IXINF(22)+ TOT_LEN_INTFO_U GMB1F405.365
CL GMB1F405.366
CL super array length GMB1F405.367
O_SPINF_LEN =O_IXINF(23)+ TOT_LEN_INTFO_U GMB1F405.368
O_SPINF_LEN =O_SPINF_LEN -1 GMB1F405.369
CL UMINDEX1.509
CL UMINDEX1.510
CL 1.5 Ancillary file super array UMINDEX1.511
CL UMINDEX1.512
CL super array addresses UMINDEX1.513
O_IXANC(1) =1 UMINDEX1.514
O_IXANC(2) =O_IXANC(1) + LEN_FIXHD*NANCIL_DATASETSO UMINDEX1.515
O_IXANC(3) =O_IXANC(2) + O_LEN_INTHD*NANCIL_DATASETSO UMINDEX1.516
O_IXANC(4) =O_IXANC(3) + LEN1_LOOKUP*NANCIL_LOOKUPSO UMINDEX1.517
CL UMINDEX1.518
CL super array length UMINDEX1.519
O_SPANC_LEN =O_IXANC(4)+ O_LEN_REALHD*NANCIL_DATASETSO UMINDEX1.520
O_SPANC_LEN =O_SPANC_LEN -1 UMINDEX1.521
CL UMINDEX1.522
CL UMINDEX1.523
CL 1.6 Input boundary constants super array UMINDEX1.524
CL UMINDEX1.525
CL super array addresses UMINDEX1.526
O_IXBND(1) =1 UMINDEX1.527
O_IXBND(2) =O_IXBND(1) + LEN_FIXHD*2 UMINDEX1.528
O_IXBND(3) =O_IXBND(2) + O_LEN_INTHD*2 UMINDEX1.529
O_IXBND(4) =O_IXBND(3) + LEN1_LOOKUP*BOUND_LOOKUPSO UMINDEX1.530
CL UMINDEX1.531
CL super array length UMINDEX1.532
O_SPBND_LEN =O_IXBND(4)+ O_LEN_REALHD*2 UMINDEX1.533
O_SPBND_LEN =O_SPBND_LEN -1 UMINDEX1.534
CL WRB1F401.929
CL---------------------------------------------------------------------- WRB1F401.930
CL WRB1F401.931
RETURN WRB1F401.932
END WRB1F401.933
*ENDIF WRB1F401.934
*IF DEF,CONTROL,AND,DEF,WAVE WRB1F401.935
CLL Subroutine: UM_INDEX_W--------------------------------------------- WRB1F401.936
CLL WRB1F401.937
CLL Purpose: Calculate addresses and lengths of wave super arrays WRB1F401.938
CLL WRB1F401.939
CLL Tested under compiler: cft77 WRB1F401.940
CLL Tested under OS version: UNICOS 8 WRB1F401.941
CLL WRB1F401.942
CLL Model Modification history: WRB1F401.943
CLL version date WRB1F401.944
!LL 4.1 15/03/96 Introduce Wave sub-model. RTHBarnes. WRB1F401.945
CLL WRB1F401.946
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) WRB1F401.947
CLL WRB1F401.948
CLL Logical components covered: C0 WRB1F401.949
CLL WRB1F401.950
CLL Project task: C0 WRB1F401.951
CLL WRB1F401.952
CLL External documentation: On-line UM document C1 - The top-level WRB1F401.953
CLL dynamic allocation WRB1F401.954
CLL WRB1F401.955
CLL ------------------------------------------------------------------- WRB1F401.956
C*L Interface and arguments: ------------------------------------------ WRB1F401.957
C WRB1F401.958
SUBROUTINE UM_INDEX_W( 1WRB1F401.959
*CALL ARGSIZE
WRB1F401.960
*CALL ARGSZSPW
WRB1F401.961
& ICODE,CMESSAGE) WRB1F401.962
C WRB1F401.963
C*---------------------------------------------------------------------- WRB1F401.964
IMPLICIT NONE WRB1F401.965
C WRB1F401.966
C Subroutines called WRB1F401.967
C WRB1F401.968
! EXTERNAL WRB1F401.969
C WRB1F401.970
C Local variables WRB1F401.971
C WRB1F401.972
INTEGER ICODE ! Work - Internal return code WRB1F401.973
CHARACTER*80 CMESSAGE ! Work - Internal error message WRB1F401.974
C WRB1F401.975
C Configuration-dependent sizes for dynamic arrays WRB1F401.976
C WRB1F401.977
*CALL TYPSIZE
WRB1F401.978
C WRB1F401.979
C Ancillary file parameters for ancillary length calculations WRB1F401.980
*CALL CONANC
WRB1F401.981
C WRB1F401.982
C Super array sizes for dynamic allocation in U_MODEL WRB1F401.983
C WRB1F401.984
*CALL TYPSZSPW
WRB1F401.985
C WRB1F401.986
C Addresses of arrays in super arrays. WRB1F401.987
C WRB1F401.988
*CALL SPINDEX
WRB1F401.989
C WRB1F401.990
CL---------------------------------------------------------------------- WRB1F401.991
CL WRB1F401.992
ICODE=0 WRB1F401.993
WRB1F401.994
!L WRB1F401.995
!L 1.0 Calculate size of wave stash array WRB1F401.996
!L WRB1F401.997
w_ixsts(1) = 1 ! land sea mask WRB1F401.998
w_ixsts(2) = w_ixsts(1) + ngx*ngy ! size of field WRB1F401.999
w_ixsts(3) = w_ixsts(2) + 1 ! dummy WRB1F401.1000
w_ixsts(4) = w_ixsts(3) + 1 ! dummy WRB1F401.1001
w_ixsts(5) = w_ixsts(4) + 1 ! dummy WRB1F401.1002
w_ixsts(6) = w_ixsts(5) + 1 ! dummy WRB1F401.1003
w_ixsts(7) = w_ixsts(6) + 1 ! dummy WRB1F401.1004
w_ixsts(8) = w_ixsts(7) + 1 ! dummy WRB1F401.1005
w_ixsts(9) = w_ixsts(8) + 1 ! dummy WRB1F401.1006
w_ixsts(10) = w_ixsts(9) + 1 ! dummy WRB1F401.1007
w_ixsts(11) = w_ixsts(10) + 1 ! dummy WRB1F401.1008
w_spsts_len = w_ixsts(11) + 1 WRB1F401.1009
! Store W_SPSTS_LEN in TYPSIZE UDR2F404.39
LEN_W_SPSTS = W_SPSTS_LEN UDR2F404.40
WRB1F401.1010
CL WRB1F401.1011
CL 1.1 DUMP super array WRB1F401.1012
CL WRB1F401.1013
CL super array addresses WRB1F401.1014
W_IXDUM(1) =1 WRB1F401.1015
W_IXDUM(2) =W_IXDUM(1) + LEN_FIXHD WRB1F401.1016
W_IXDUM(3) =W_IXDUM(2) + W_LEN_INTHD WRB1F401.1017
W_IXDUM(4) =W_IXDUM(3) + W_LEN_CFI1+1 WRB1F401.1018
W_IXDUM(5) =W_IXDUM(4) + W_LEN_CFI2+1 WRB1F401.1019
W_IXDUM(6) =W_IXDUM(5) + W_LEN_CFI3+1 WRB1F401.1020
W_IXDUM(7) =W_IXDUM(6) + W_LEN_REALHD WRB1F401.1021
W_IXDUM(8) =W_IXDUM(7) + W_LEN1_LEVDEPC*W_LEN2_LEVDEPC+1 WRB1F401.1022
W_IXDUM(9) =W_IXDUM(8) + W_LEN1_ROWDEPC*W_LEN2_ROWDEPC+1 WRB1F401.1023
W_IXDUM(10)=W_IXDUM(9) + W_LEN1_COLDEPC*W_LEN2_COLDEPC+1 WRB1F401.1024
W_IXDUM(11)=W_IXDUM(10)+ W_LEN1_FLDDEPC*W_LEN2_FLDDEPC+1 WRB1F401.1025
W_IXDUM(12)=W_IXDUM(11)+ W_LEN_EXTCNST+1 WRB1F401.1026
W_IXDUM(13)=W_IXDUM(12)+ LEN_DUMPHIST+1 WRB1F401.1027
CL WRB1F401.1028
CL super array length WRB1F401.1029
W_SPDUM_LEN =W_IXDUM(13)+ LEN1_LOOKUP*W_LEN2_LOOKUP WRB1F401.1030
W_SPDUM_LEN =W_SPDUM_LEN -1 WRB1F401.1031
CL WRB1F401.1032
CL WRB1F401.1033
CL 1.2 Pointers super array WRB1F401.1034
CL WRB1F401.1035
CL super array addresses WRB1F401.1036
W_IXPTR(1) =1 WRB1F401.1037
CL WRB1F401.1038
CL super array length WRB1F401.1039
W_SPPTR_LEN =W_IXPTR(1)+ 1 WRB1F401.1040
W_SPPTR_LEN =W_SPPTR_LEN -1 WRB1F401.1041
CL WRB1F401.1042
CL WRB1F401.1043
CL 1.3 Derived constants super array WRB1F401.1044
CL WRB1F401.1045
CL super array addresses WRB1F401.1046
W_IXCON(1) =1 WRB1F401.1047
W_SPCON_LEN = 1 WRB1F401.1048
CL WRB1F401.1049
CL super array length WRB1F401.1050
CL Wave addresses for this array are calculated and passed internally WRB1F401.1051
CL to WAVE routines only. WRB1F401.1052
CL This is a special case - by analogy with Ocean model. WRB1F401.1053
CL WRB1F401.1054
CALL WAVARYPT (
WRB1F401.1055
*CALL ARGSIZE
WRB1F401.1056
*W_SPCON_LEN,ICODE,CMESSAGE) WRB1F401.1057
CL WRB1F401.1058
CL Note that this is the only WRB1F401.1059
CL array which is passed down without decomposing into constituent WRB1F401.1060
CL arrays, each with dedicated sizes. WRB1F401.1061
CL WRB1F401.1062
CL 1.4 Interface output (boundary conditions) super array WRB1F401.1063
CL (DUMMY ADDRESSES until wave bc code developed) WRB1F401.1064
CL super array addresses WRB1F401.1065
W_IXINF(1) =1 WRB1F401.1066
W_IXINF(2) =1 WRB1F401.1067
W_IXINF(3) =1 WRB1F401.1068
W_IXINF(4) =1 WRB1F401.1069
W_IXINF(5) =1 WRB1F401.1070
W_IXINF(6) =1 WRB1F401.1071
W_IXINF(7) =1 WRB1F401.1072
W_IXINF(8) =1 WRB1F401.1073
W_IXINF(9) =1 WRB1F401.1074
W_IXINF(10)=1 WRB1F401.1075
W_IXINF(11)=1 WRB1F401.1076
W_IXINF(12)=1 WRB1F401.1077
W_IXINF(13)=1 WRB1F401.1078
W_IXINF(14)=1 WRB1F401.1079
W_IXINF(15)=1 WRB1F401.1080
W_IXINF(16)=1 WRB1F401.1081
W_IXINF(17)=1 WRB1F401.1082
W_IXINF(18)=1 WRB1F401.1083
W_IXINF(19)=1 WRB1F401.1084
W_IXINF(20)=1 WRB1F401.1085
W_IXINF(21)=1 WRB1F401.1086
CL WRB1F401.1087
CL super array length WRB1F401.1088
W_SPINF_LEN =W_IXINF(21)+ 1 WRB1F401.1089
W_SPINF_LEN =W_SPINF_LEN -1 WRB1F401.1090
CL WRB1F401.1091
CL WRB1F401.1092
CL 1.5 Ancillary file super array WRB1F401.1093
CL WRB1F401.1094
CL super array addresses WRB1F401.1095
W_IXANC(1) =1 WRB1F401.1096
W_IXANC(2) =W_IXANC(1) + LEN_FIXHD*NANCIL_DATASETSW WRB1F401.1097
W_IXANC(3) =W_IXANC(2) + W_LEN_INTHD*NANCIL_DATASETSW WRB1F401.1098
W_IXANC(4) =W_IXANC(3) + LEN1_LOOKUP*NANCIL_LOOKUPSW WRB1F401.1099
CL WRB1F401.1100
CL super array length WRB1F401.1101
W_SPANC_LEN =W_IXANC(4)+ W_LEN_REALHD*NANCIL_DATASETSW WRB1F401.1102
W_SPANC_LEN =W_SPANC_LEN -1 WRB1F401.1103
CL WRB1F401.1104
CL WRB1F401.1105
CL 1.6 Input boundary constants super array WRB1F401.1106
CL WRB1F401.1107
CL super array addresses WRB1F401.1108
W_IXBND(1) =1 WRB1F401.1109
W_IXBND(2) =W_IXBND(1) + LEN_FIXHD*2 WRB1F401.1110
W_IXBND(3) =W_IXBND(2) + W_LEN_INTHD*2 WRB1F401.1111
W_IXBND(4) =W_IXBND(3) + LEN1_LOOKUP*BOUND_LOOKUPSW WRB1F401.1112
CL WRB1F401.1113
CL super array length WRB1F401.1114
W_SPBND_LEN =W_IXBND(4)+ W_LEN_REALHD*2 WRB1F401.1115
W_SPBND_LEN =W_SPBND_LEN -1 WRB1F401.1116
CL UMINDEX1.535
CL---------------------------------------------------------------------- UMINDEX1.536
CL UMINDEX1.537
RETURN UMINDEX1.538
END UMINDEX1.539
*ENDIF UMINDEX1.540