*IF DEF,C70_1A,OR,DEF,RECON,OR,DEF,UTILIO,OR,DEF,FLDOP GLW1F404.27
C ******************************COPYRIGHT****************************** GTS2F400.12378
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.12379
C GTS2F400.12380
C Use, duplication or disclosure of this code is subject to the GTS2F400.12381
C restrictions as set forth in the contract. GTS2F400.12382
C GTS2F400.12383
C Meteorological Office GTS2F400.12384
C London Road GTS2F400.12385
C BRACKNELL GTS2F400.12386
C Berkshire UK GTS2F400.12387
C RG12 2SZ GTS2F400.12388
C GTS2F400.12389
C If no contract has been raised with this copy of the code, the use, GTS2F400.12390
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.12391
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.12392
C Modelling at the above address. GTS2F400.12393
C GTS2F400.12394
!+ Integer Function to extract data from lookup array PPXI EXPPX1.3
! EXPPX1.4
! Function Interface: EXPPX1.5
INTEGER FUNCTION EXPPXI(Im_ident,section,item,element, 100GSS1F400.1258
*CALL ARGPPX
EXPPX1.7
& ErrorStatus ,CMESSAGE) EXPPX1.8
IMPLICIT NONE EXPPX1.9
! EXPPX1.10
! Description: EXPPX1.11
! Extracts an individual data value from ppxref lookup array PPXI. EXPPX1.12
! EXPPX1.13
! Method: EXPPX1.14
! The required data element is identified by the function arguments EXPPX1.15
! Im_ident, section, item, element. The appropriate row in PPXI is GSS1F400.1259
! found from the 3-d pointer array PPXPTR as PPXPTR(m,s,i). The GSS1F400.1260
! address of the required element in PPXI is then given by GSS1F400.1261
! (row, element). GSS1F400.1262
! EXPPX1.19
! GSS1F400.1263
! GSS1F400.1264
! Current code owner: S.J.Swarbrick GSS1F400.1265
! GSS1F400.1266
! History: GSS1F400.1267
! Version Date Comment GSS1F400.1268
! ======= ==== ======= GSS1F400.1269
! 3.5 Mar. 95 Original code. (S.J.Swarbrick) GSS1F400.1270
! 4.0 Oct. 95 S.J.Swarbrick GSS1F400.1271
! 4.1 June 96 Error checking improved S.J.Swarbrick GSS1F401.59
! GSS1F400.1272
! Code description: GSS1F400.1273
! FORTRAN 77 + common Fortran 90 extensions. GSS1F400.1274
! Written to UM programming standards version 7. GSS1F400.1275
! GSS1F400.1276
! System component covered: GSS1F400.1277
! System task: Sub-Models Project GSS1F400.1278
! GSS1F400.1279
! Global Variables: GSS1F400.1280
*CALL CSUBMODL
GSS1F400.1282
*CALL CPPXREF
GSS1F400.1283
*CALL PPXLOOK
GSS1F400.1285
GSS1F400.1286
! Function arguments: GSS1F400.1287
! Scalar arguments with intent(in): GSS1F400.1289
INTEGER Im_ident ! Internal model identifier (absolute) GSS1F400.1290
INTEGER section ! STASH section no. GSS1F400.1291
INTEGER item ! STASH item no. GSS1F400.1292
INTEGER element ! Position of required value in PPXI row GSS1F400.1293
GSS1F400.1294
! Scalar arguments with intent(out): GSS1F400.1295
CHARACTER*80 CMESSAGE GSS9F402.166
GSS1F400.1297
! Error status: GSS1F400.1298
INTEGER ErrorStatus !+ve = fatal error GSS1F400.1299
GSS1F400.1300
! Local scalars GSS1F400.1301
INTEGER row ! Row no. in PPXI array GSS1F400.1302
INTEGER Im_index ! Internal model index GSS1F400.1303
GSS1F400.1304
!- End of Header --------------------------------------------------- GSS1F400.1308
GSS1F400.1309
ErrorStatus = 0 GSS1F400.1310
IF (Im_ident.LE.0 .OR. section.LT.0 .OR. item.LE.0) THEN GSS1F400.1312
IF (Im_ident.LE.0) WRITE(6,*) 'EXPPXI: INVALID Im_ident' GSS1F400.1313
IF (section .LT.0) WRITE(6,*) 'EXPPXI: INVALID SECTION NO.' GSS1F400.1314
IF (item .LE.0) WRITE(6,*) 'EXPPXI: INVALID ITEM NO.' GSS1F400.1315
WRITE(6,*) GSS1F400.1316
& 'Im_ident ',Im_ident,' section ',section,' item ',item GSS1F400.1317
ErrorStatus=1 GSS1F401.60
CMESSAGE='ERROR EXPPXI: INVALID STASH RECORD ID' GSS1F401.61
ELSE GSS1F401.62
GSS1F400.1319
! Obtain row no. in PPXI array GSS1F400.1320
*IF DEF,RECON GSS1F400.1322
row = PPXPTR(Im_ident,section,item) GSS1F400.1323
*ELSE GSS1F400.1324
Im_index = INTERNAL_MODEL_INDEX(Im_ident) GSS1F400.1325
row = PPXPTR(Im_index,section,item) GSS1F400.1326
IF (row.LE.0) THEN GSS1F400.1327
WRITE(6,*) 'ERROR EXPPXI: INVALID row VALUE: ',row GSS1F400.1328
WRITE(6,*) 'Im_ident,Sec,Item: ',Im_ident,section,item GSS1F400.1329
! ErrorStatus = 1 GSS1F400.1331
! CMESSAGE='ERROR EXPPXI: INVALID row VALUE' GSS1F400.1332
END IF GSS1F400.1333
*ENDIF GSS1F400.1334
GSS1F400.1335
! Obtain required data value GSS1F400.1336
IF (row.GT.0) THEN GSS1F400.1337
EXPPXI = PPXI(row,element) GSS1F400.1338
END IF GSS1F400.1339
END IF GSS1F401.63
RETURN GSS1F401.64
END GSS1F400.1340
GSS1F400.1341
!--------------------------------------------------------------------- GSS1F400.1342
!+ Character Function to extract names from lookup array PPXC GSS1F400.1343
! GSS1F400.1344
! Function Interface: GSS1F400.1345
CHARACTER*36 FUNCTION EXPPXC(Im_ident,section,item, 9,1GSS1F400.1346
*CALL ARGPPX
GSS1F400.1347
& ErrorStatus ,CMESSAGE) GSS1F400.1348
IMPLICIT NONE GSS1F400.1349
! GSS1F400.1350
! Description: GSS1F400.1351
! Extracts a diagnostic name from ppxref lookup array PPXC. GSS1F400.1352
! GSS1F400.1353
! Method: GSS1F400.1354
! The required name is identified by the function arguments GSS1F400.1355
! Im_ident, section, item. The appropriate row in PPXC is found GSS1F400.1356
! from the 3-d pointer array PPXPTR as PPXPTR(m,s,i). GSS1F400.1357
! EXPPX1.21
! Current code owner: S.J.Swarbrick EXPPX1.22
! EXPPX1.23
! History: EXPPX1.24
! Version Date Comment EXPPX1.25
! ======= ==== ======= EXPPX1.26
! 3.5 Mar. 95 Original code. (S.J.Swarbrick) EXPPX1.27
! 4.1 June 96 Error checking improved S.J.Swarbrick GSS1F401.65
! EXPPX1.28
! Code description: EXPPX1.29
! FORTRAN 77 + common Fortran 90 extensions. EXPPX1.30
! Written to UM programming standards version 7. EXPPX1.31
! EXPPX1.32
! System component covered: EXPPX1.33
! System task: Sub-Models Project EXPPX1.34
! EXPPX1.35
! Global Variables: EXPPX1.36
*CALL CSUBMODL
EXPPX1.38
*CALL CPPXREF
EXPPX1.39
*CALL PPXLOOK
EXPPX1.41
EXPPX1.42
! Function arguments: EXPPX1.43
! Scalar arguments with intent(in): GSS1F401.66
INTEGER Im_ident ! Internal model identifier (absolute) GSS1F400.1358
INTEGER section ! STASH section no. EXPPX1.114
INTEGER item ! STASH item no. EXPPX1.115
EXPPX1.116
! Scalar arguments with intent(out): EXPPX1.117
CHARACTER*80 CMESSAGE GSS9F402.167
EXPPX1.120
! Local scalars EXPPX1.121
INTEGER row ! Row no. in PPXC array EXPPX1.123
INTEGER I ! Loop counter EXPPX1.124
INTEGER Im_index ! Internal model index GSS1F400.1359
EXPPX1.125
! Error status: EXPPX1.126
INTEGER ErrorStatus !+ve = fatal error EXPPX1.127
EXPPX1.128
!- End of Header --------------------------------------------------- EXPPX1.129
EXPPX1.130
IF (Im_ident.LE.0 .OR. section.LT.0 .OR. item.LE.0) THEN GSS1F400.1360
IF (Im_ident.LE.0) WRITE(6,*) 'EXPPXC: INVALID Im_ident' GSS1F400.1361
IF (section .LT.0) WRITE(6,*) 'EXPPXC: INVALID SECTION NO.' GSS1F400.1362
IF (item .LE.0) WRITE(6,*) 'EXPPXC: INVALID ITEM NO.' GSS1F400.1363
WRITE(6,*) GSS1F400.1364
& 'Im_ident ',Im_ident,' section ',section,' item ',item GSS1F400.1365
ErrorStatus=1 GSS1F401.67
CMESSAGE='ERROR EXPPXC: INVALID STASH RECORD ID' GSS1F401.68
ELSE GSS1F401.69
GSS1F400.1367
! Obtain row no. in PPXC array EXPPX1.131
*IF DEF,RECON GSS1F400.1368
row = PPXPTR(Im_ident,section,item) GSS1F400.1369
IF (ROW.NE.0) THEN GSS1F400.1370
*ELSE GSS1F400.1371
Im_index = INTERNAL_MODEL_INDEX(Im_ident) GSS1F400.1372
row = PPXPTR(Im_index,section,item) GSS1F400.1373
IF (row.LE.0) THEN GSS1F400.1374
WRITE(6,*) 'ERROR in EXPPXC: INVALID row VALUE: ',row GSS1F401.70
WRITE(6,*) 'Model,Sec,Item: ',Im_ident,section,item GSS1F400.1376
! ErrorStatus = 1 GSS1F400.1378
! CMESSAGE='ERROR EXPPXC: INVALID row VALUE' GSS1F401.71
END IF GSS1F400.1380
*ENDIF GSS1F400.1381
EXPPX1.132
! Obtain required name EXPPX1.137
EXPPX1.138
IF (row.GT.0) THEN GSS1F400.1382
DO I = 1,PPXREF_CHARLEN GSS1F400.1383
EXPPXC
(I:I) = PPXC(row,I) GSS1F400.1384
END DO GSS1F400.1385
END IF GSS1F400.1386
*IF DEF,RECON EXPPX1.142
ELSE IF ((ITEM.GE.177.AND.ITEM.LE.179).OR. EXPPX1.143
& (ITEM.GE.301.AND.ITEM.LE.324)) THEN EXPPX1.144
ErrorStatus=100 EXPPX1.145
ELSE EXPPX1.146
ErrorStatus=101 EXPPX1.147
END IF EXPPX1.148
*ENDIF EXPPX1.149
END IF GSS1F401.72
RETURN GSS1F401.73
END EXPPX1.150
EXPPX1.151
!--------------------------------------------------------------------- EXPPX1.152
*ENDIF EXPPX1.153