*IF DEF,CONTROL PRELIM1.2
C ******************************COPYRIGHT****************************** GTS2F400.12667
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.12668
C GTS2F400.12669
C Use, duplication or disclosure of this code is subject to the GTS2F400.12670
C restrictions as set forth in the contract. GTS2F400.12671
C GTS2F400.12672
C Meteorological Office GTS2F400.12673
C London Road GTS2F400.12674
C BRACKNELL GTS2F400.12675
C Berkshire UK GTS2F400.12676
C RG12 2SZ GTS2F400.12677
C GTS2F400.12678
C If no contract has been raised with this copy of the code, the use, GTS2F400.12679
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.12680
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.12681
C Modelling at the above address. GTS2F400.12682
C GTS2F400.12683
!+Construct preliminary STASH list of user requests PRELIM1.3
! PRELIM1.4
! Subroutine Interface: PRELIM1.5
PRELIM1.6
SUBROUTINE PRELIM(NRECS, 1,43PRELIM1.7
*CALL ARGPPX
PRELIM1.8
& NTIMES,NLEVELS,ErrorStatus,CMESSAGE) GSS1F400.1222
IMPLICIT NONE PRELIM1.10
PRELIM1.11
! Description: PRELIM1.12
! Constructs a preliminary STASH list of user requests. Uses interim PRELIM1.13
! pointer system, by means of the "extra entry" NELEMP+1 in the LIST_S PRELIM1.14
! array. At this stage, the input levels encompass all possible levels. PRELIM1.15
! Called by STPROC. PRELIM1.16
! PRELIM1.17
! Method: PRELIM1.18
! PRELIM1.19
! Current code owner: S.J.Swarbrick PRELIM1.20
! PRELIM1.21
! History: PRELIM1.22
! Version Date Comment PRELIM1.23
! ======= ==== ======= PRELIM1.24
! 3.5 Mar. 95 Original code. S.J.Swarbrick PRELIM1.25
! 4.1 Apr. 96 Numerous improvements associated with wave model, GSS3F401.797
! correction of output-times table processing, GSS3F401.798
! comprehensive soft-abort system, etc. GSS3F401.799
! S.J.Swarbrick GSS3F401.800
! 4.4 Sep. 97 Allow offset for sampling frequency GSM5F404.5
! S.D. Mullerworth GSM5F404.6
!LL 4.4 21/11/96 Allow daily mean timeseries. R.A.Stratton GRS1F404.1
! 4.4 Oct. 97 Added checking of error returns from TOTIMP. GDW1F404.187
! Shaun de Witt GDW1F404.188
! 4.5 18/11/98 Allow new sampling frequencies for vegetation. ABX1F405.1
! Richard Betts ABX1F405.2
! PRELIM1.26
! Code description: PRELIM1.27
! FORTRAN 77 + common Fortran 90 extensions. PRELIM1.28
! Written to UM programming standards version 7. PRELIM1.29
! PRELIM1.30
! System component covered: PRELIM1.31
! System task: Sub-Models Project PRELIM1.32
! PRELIM1.33
! Global variables: PRELIM1.34
PRELIM1.35
*CALL CSUBMODL
PRELIM1.36
*CALL CPPXREF
GSS3F401.801
*CALL PPXLOOK
GSS3F401.802
*CALL TYPSIZE
GSS3F401.803
*CALL CSTASH
GRB0F401.19
*CALL STEXTEND
PRELIM1.39
*CALL MODEL
PRELIM1.40
*CALL CNTLATM
GSS3F401.804
*CALL STPARAM
PRELIM1.43
PRELIM1.44
! Subroutine arguments PRELIM1.45
PRELIM1.46
PRELIM1.50
! Scalar arguments with intent(out): PRELIM1.51
PRELIM1.52
INTEGER NRECS PRELIM1.53
INTEGER NTIMES PRELIM1.54
INTEGER NLEVELS ! Total no. of sets of levs for diags (inpt+outp) PRELIM1.55
CHARACTER*80 CMESSAGE GSS9F402.172
PRELIM1.56
! ErrorStatus: PRELIM1.57
INTEGER ErrorStatus PRELIM1.58
PRELIM1.59
! Local scalars: PRELIM1.60
LOGICAL MODEL_LEV GSS3F401.805
LOGICAL LMASK PRELIM1.62
LOGICAL LMEAN PRELIM1.63
LOGICAL LOFFSET PRELIM1.64
INTEGER TOTIMP PRELIM1.65
INTEGER I PRELIM1.66
INTEGER IBOT1 PRELIM1.67
INTEGER IDIAG PRELIM1.68
INTEGER IDOMLEV PRELIM1.69
INTEGER IDOM_L PRELIM1.70
LOGICAL LDUM PRELIM1.71
INTEGER IFIRST PRELIM1.72
INTEGER IFIRST1 PRELIM1.73
INTEGER ILAST PRELIM1.74
INTEGER ILAST1 PRELIM1.75
INTEGER IM PRELIM1.76
INTEGER IMD PRELIM1.77
INTEGER IPLOF PRELIM1.78
INTEGER MODL_L PRELIM1.79
INTEGER ISEC_L PRELIM1.80
INTEGER ITEM_L PRELIM1.81
INTEGER ITIM_L PRELIM1.82
INTEGER ITIM PRELIM1.83
INTEGER ITOP1 PRELIM1.84
INTEGER IUSE_L PRELIM1.85
INTEGER IX1 PRELIM1.86
INTEGER IX2 PRELIM1.87
INTEGER IY1 PRELIM1.88
INTEGER IY2 PRELIM1.89
INTEGER JLEV PRELIM1.90
INTEGER LEV_OFFSET PRELIM1.91
INTEGER LBVC PRELIM1.92
PRELIM1.95
! Function and subroutine calls: PRELIM1.96
LOGICAL DISCT_LEV GSS3F401.806
INTEGER EXPPXI PRELIM1.98
EXTERNAL EXPPXI,LEVSRT,TSTMSK,LLTORC,LEVCOD,PSLCOM,PSLIMS PRELIM1.99
PRELIM1.100
!- End of Header ------------------------------------------------------ PRELIM1.101
PRELIM1.102
! 0.1 Store output-times tables in array ITIM_S PRELIM1.103
PRELIM1.104
IF(NTIMES.EQ.0) THEN GSS3F401.807
DO I=1,NPROFTP PRELIM1.106
IF (IOPT_T(I).EQ.2.AND.MODL_T(I).GT.0) THEN GSS3F401.808
! Profile has output times list GSS3F401.809
! MODL_T(I) labels internal model for times list GSS3F401.810
DO ITIM=1,ITIM_T(I) PRELIM1.109
ITIM_S(ITIM,I)=TOTIMP
(ISER_T(ITIM,I),UNT3_T(I),MODL_T(I)) GSS3F401.811
if (ITIM_S(ITIM,I) .eq. -999) then GDW1F404.189
ErrorStatus = 100 GDW1F404.190
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.191
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.192
GOTO 9999 GDW1F404.193
endif GDW1F404.194
END DO PRELIM1.111
ITIM_S(ITIM_T(I)+1,I)=-1 PRELIM1.112
ELSE PRELIM1.113
ITIM_S(1,I)=-1 PRELIM1.114
END IF PRELIM1.115
END DO PRELIM1.116
NTIMES=NPROFTP GSS3F401.812
END IF PRELIM1.133
PRELIM1.135
! 0.2 Store output levels lists in array LEVLST_S PRELIM1.136
PRELIM1.137
LEV_OFFSET=NLEVELS ! Initialised to 0 before entering this routine PRELIM1.138
PRELIM1.139
! Loop over domain profiles in STASH basis file PRELIM1.140
DO I=1,NDPROF PRELIM1.141
IF (LEVB_D(I).EQ.-1) THEN PRELIM1.142
! There is a levels list for this dom prof PRELIM1.143
IF (IOPL_D(I).EQ.1.OR.IOPL_D(I).EQ.2.OR. PRELIM1.144
& IOPL_D(I).EQ.6 ) THEN PRELIM1.145
! Levs list contains model levs - list type is integer PRELIM1.146
LLISTTY(I+LEV_OFFSET)='I' PRELIM1.147
ELSE PRELIM1.148
! Not model levs - list type real PRELIM1.149
LLISTTY(I+LEV_OFFSET)='R' PRELIM1.150
END IF PRELIM1.151
! LEVT_D(I) = no. of levs in list 'I' PRELIM1.152
LEVLST_S(1,I+LEV_OFFSET)=LEVT_D(I) PRELIM1.153
PRELIM1.154
! Levels list 'I' was read into (R)LEVLST_D(J,I), J=1,LEVT_D(I), PRELIM1.155
! by RDBASIS. PRELIM1.156
! Transfer this levels list to (R)LEVLST_S(J,I+LEV_OFFSET), PRELIM1.157
! J=2,LEVT_D(I)+1. PRELIM1.158
PRELIM1.159
DO JLEV=1,LEVT_D(I) PRELIM1.160
IF (IOPL_D(I).EQ.1.OR.IOPL_D(I).EQ.2.OR. PRELIM1.161
& IOPL_D(I).EQ.6 ) THEN PRELIM1.162
! Model levels PRELIM1.163
LEVLST_S(JLEV+1,I+LEV_OFFSET)= LEVLST_D(JLEV,I) PRELIM1.164
ELSE IF (IOPL_D(I).NE.5) THEN PRELIM1.165
! Real levels PRELIM1.166
RLEVLST_S(JLEV+1,I+LEV_OFFSET)=RLEVLST_D(JLEV,I) PRELIM1.167
END IF PRELIM1.168
END DO PRELIM1.169
PRELIM1.170
IPLOF=I+LEV_OFFSET PRELIM1.171
PRELIM1.172
! Sort this levels list into correct order (if not already in order) PRELIM1.173
CALL LEVSRT
( LLISTTY( IPLOF), LEVLST_S(1,IPLOF), PRELIM1.174
& LEVLST_S(2,IPLOF),RLEVLST_S(2,IPLOF)) PRELIM1.175
ELSE PRELIM1.176
! No levels list, i.e., the output from this diag. is on a PRELIM1.177
! contiguous range of model levels PRELIM1.178
LEVLST_S(1,I+LEV_OFFSET)=0 PRELIM1.179
END IF PRELIM1.180
END DO ! Domain profiles PRELIM1.181
PRELIM1.182
NLEVELS=NDPROF+LEV_OFFSET ! NDPROF = no. of sets of input levels PRELIM1.183
PRELIM1.184
IF(NLEVELS.GT.NLEVLSTSP) THEN PRELIM1.185
WRITE(6,*) PRELIM1.186
& 'PRELIM: TOO MANY LEVELS LISTS, ARRAYS OVERWRITTEN' PRELIM1.187
CMESSAGE= GSS1F400.1224
& 'PRELIM: TOO MANY LEVELS LISTS, ARRAYS OVERWRITTEN' GSS1F400.1225
GO TO 9999 GSS1F400.1226
END IF PRELIM1.189
PRELIM1.190
! Section 1. MAIN LOOP - loop over diag requests in STASH basis file PRELIM1.191
PRELIM1.192
IF(NDIAG.GT.0) THEN PRELIM1.193
PRELIM1.194
DO IDIAG=1,NDIAG PRELIM1.195
PRELIM1.196
MODL_L=MODL_B(IDIAG) PRELIM1.197
ISEC_L=ISEC_B(IDIAG) PRELIM1.198
ITEM_L=ITEM_B(IDIAG) PRELIM1.199
IDOM_L=IDOM_B(IDIAG) PRELIM1.200
IUSE_L=IUSE_B(IDIAG) PRELIM1.201
ITIM_L=ITIM_B(IDIAG) PRELIM1.202
PRELIM1.203
IF(ITIM_L.NE.0) THEN ! If the diag is not a null request PRELIM1.204
PRELIM1.205
! Section 1.0 Extract data required for STASH processing from PPXI PRELIM1.206
PRELIM1.207
IF(NRECS.EQ.NRECDP) THEN PRELIM1.208
WRITE(6,*) PRELIM1.209
& 'MESSAGE FROM ROUTINE PRELIM: ', GSS3F401.813
& 'TOO MANY STASH LIST ENTRIES, REQUEST DENIED' GSS3F401.814
WRITE(6,*) 'MODEL,SECTION,ITEM ', GSS1F400.1227
& MODL_L,ISEC_L,ITEM_L GSS1F400.1228
GOTO 999 PRELIM1.212
END IF PRELIM1.213
PRELIM1.214
VMSK = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_version_mask , PRELIM1.215
*CALL ARGPPX
PRELIM1.216
& ErrorStatus,CMESSAGE) PRELIM1.217
ISPACE = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_space_code , PRELIM1.218
*CALL ARGPPX
PRELIM1.219
& ErrorStatus,CMESSAGE) PRELIM1.220
ITIMA = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_timavail_code, PRELIM1.221
*CALL ARGPPX
PRELIM1.222
& ErrorStatus,CMESSAGE) PRELIM1.223
IGP = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_grid_type , PRELIM1.224
*CALL ARGPPX
PRELIM1.225
& ErrorStatus,CMESSAGE) PRELIM1.226
ILEV = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_lv_code , PRELIM1.227
*CALL ARGPPX
PRELIM1.228
& ErrorStatus,CMESSAGE) PRELIM1.229
IBOT = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_lb_code , PRELIM1.230
*CALL ARGPPX
PRELIM1.231
& ErrorStatus,CMESSAGE) PRELIM1.232
ITOP = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_lt_code , PRELIM1.233
*CALL ARGPPX
PRELIM1.234
& ErrorStatus,CMESSAGE) PRELIM1.235
IFLAG = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_lev_flag , PRELIM1.236
*CALL ARGPPX
PRELIM1.237
& ErrorStatus,CMESSAGE) PRELIM1.238
DO I=1,4 GSS3F401.815
IOPN(I) = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_opt_code+I-1 , GSS3F401.816
*CALL ARGPPX
PRELIM1.240
& ErrorStatus,CMESSAGE) PRELIM1.241
END DO GSS3F401.817
IPSEUDO = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_pt_code , PRELIM1.242
*CALL ARGPPX
PRELIM1.243
& ErrorStatus,CMESSAGE) PRELIM1.244
IPFIRST = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_pf_code , PRELIM1.245
*CALL ARGPPX
PRELIM1.246
& ErrorStatus,CMESSAGE) PRELIM1.247
IPLAST = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_pl_code , PRELIM1.248
*CALL ARGPPX
PRELIM1.249
& ErrorStatus,CMESSAGE) PRELIM1.250
PTR_PROG= EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_ptr_code , PRELIM1.251
*CALL ARGPPX
PRELIM1.252
& ErrorStatus,CMESSAGE) PRELIM1.253
LBVC = EXPPXI
(MODL_L ,ISEC_L ,ITEM_L,ppx_lbvc_code , PRELIM1.254
*CALL ARGPPX
PRELIM1.255
& ErrorStatus,CMESSAGE) PRELIM1.256
PRELIM1.257
! Check availability of diagnostic PRELIM1.258
CALL TSTMSK
(MODL_L,ISEC_L,LMASK,LDUM,ErrorStatus,CMESSAGE) GSS3F401.818
IF(.NOT.LMASK) THEN PRELIM1.261
WRITE(6,*) PRELIM1.262
& 'MESSAGE FROM ROUTINE PRELIM: ', GSS3F401.819
& 'DIAGNOSTIC NOT AVAILABLE TO THIS VERSION ', GSS3F401.820
& 'REQUEST DENIED' GSS3F401.821
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.264
& MODL_L,ISEC_L,ITEM_L PRELIM1.265
GOTO 999 PRELIM1.267
END IF PRELIM1.268
PRELIM1.269
NRECS=NRECS+1 PRELIM1.270
PRELIM1.271
LIST_S(st_model_code ,NRECS)= MODL_L PRELIM1.272
LIST_S(st_sect_no_code,NRECS)= ISEC_L PRELIM1.273
LIST_S(st_item_code ,NRECS)= ITEM_L PRELIM1.274
! Prelim pointer for 'child' records PRELIM1.275
LIST_S(NELEMP+1 ,NRECS)= NRECS PRELIM1.276
LIST_S(st_lookup_ptr ,NRECS)=-1 PRELIM1.277
PRELIM1.278
IF( (ISPACE.EQ.2).OR.(ISPACE.EQ.4) GSS1F403.49
& .OR.(ISPACE.EQ.7).OR.(ISPACE.EQ.8) ) THEN GSS1F403.50
LIST_S(st_input_code,NRECS)=0 PRELIM1.280
ELSE PRELIM1.281
LIST_S(st_input_code,NRECS)=1 PRELIM1.282
END IF PRELIM1.283
PRELIM1.284
IF((ITIMA.GE.5).AND.(ITIMA.LE.12)) THEN PRELIM1.289
LMEAN=.TRUE. PRELIM1.290
ELSE PRELIM1.291
LMEAN=.FALSE. PRELIM1.292
END IF PRELIM1.293
PRELIM1.294
PRELIM1.295
! 1.1 Expand the domain profile --------------------------- PRELIM1.296
PRELIM1.297
! Averaging and Weighting PRELIM1.298
IM=IMSK_D(IDOM_L) GSS3F401.822
IF ((IGP.EQ. 2).OR.(IGP.EQ. 3) .OR. PRELIM1.302
& (IGP.EQ.12).OR.(IGP.EQ.13)) THEN PRELIM1.303
! Diags only available over land/sea PRELIM1.304
IF((IMSK_D(IDOM_L) .EQ. 1) .AND. PRELIM1.305
& (IGP.EQ.3.OR.IGP.EQ.13)) THEN PRELIM1.306
! Diag requested over land+sea, only available over sea PRELIM1.307
IM=3 PRELIM1.308
ELSE IF((IMSK_D(IDOM_L) .EQ. 1) .AND. PRELIM1.310
& (IGP.EQ.2.OR.IGP.EQ.12))THEN PRELIM1.311
! Diag requested over land+sea, only available over land PRELIM1.312
IM=2 PRELIM1.313
ELSE IF((IMSK_D(IDOM_L) .EQ. 2) .AND. PRELIM1.315
& (IGP.EQ.3.OR.IGP.EQ.13))THEN PRELIM1.316
! Diag requested over land, only available over sea PRELIM1.317
WRITE(6,*)'PRELIM: CHANGED TO SEA DIAG' PRELIM1.318
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.319
& MODL_L,ISEC_L,ITEM_L PRELIM1.320
IM=3 GSS3F401.823
ELSE IF((IMSK_D(IDOM_L) .EQ. 3) .AND. PRELIM1.324
& (IGP.EQ.2.OR.IGP.EQ.12))THEN PRELIM1.325
! Diag requested over sea, only available over land PRELIM1.326
WRITE(6,*)'PRELIM: CHANGED TO LAND DIAG' PRELIM1.327
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.328
& MODL_L,ISEC_L,ITEM_L PRELIM1.329
IM=2 PRELIM1.331
END IF GSS3F401.824
END IF PRELIM1.335
PRELIM1.336
LIST_S(st_gridpoint_code,NRECS)=IM+10*IMN_D(IDOM_L) PRELIM1.337
LIST_S(st_weight_code ,NRECS)= IWT_D(IDOM_L) PRELIM1.338
PRELIM1.339
! Horizontal area PRELIM1.340
! - convert lat/long spec to row/column numbers if appropriate; PRELIM1.341
! - convert lat/long spec to equatorial lat/long if appropriate. PRELIM1.342
IF(IOPA_D(IDOM_L).EQ.1) THEN GSS3F401.825
! Full domain GSS3F401.826
CALL LLTORC
(IGP,90,-90,0,360, PRELIM1.346
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.347
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.348
ELSE IF(IOPA_D(IDOM_L).EQ.2 ) THEN GSS3F401.827
! N Hemis GSS3F401.828
CALL LLTORC
(IGP,90,0,0,360, PRELIM1.352
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.353
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.354
ELSE IF(IOPA_D(IDOM_L).EQ.3 ) THEN GSS3F401.829
! S Hemis GSS3F401.830
CALL LLTORC
(IGP,0,-90,0,360, PRELIM1.358
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.359
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.360
ELSE IF(IOPA_D(IDOM_L).EQ.4 ) THEN GSS3F401.831
! 90N-30N GSS3F401.832
CALL LLTORC
(IGP,90,30,0,360, PRELIM1.364
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.365
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.366
ELSE IF(IOPA_D(IDOM_L).EQ.5 ) THEN GSS3F401.833
! 30S-90S GSS3F401.834
CALL LLTORC
(IGP,-30,-90,0,360, PRELIM1.370
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.371
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.372
ELSE IF(IOPA_D(IDOM_L).EQ.6 ) THEN GSS3F401.835
! 30N-00N GSS3F401.836
CALL LLTORC
(IGP,30,00,0,360, PRELIM1.376
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.377
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.378
ELSE IF(IOPA_D(IDOM_L).EQ.7 ) THEN GSS3F401.837
! 00S-30S GSS3F401.838
CALL LLTORC
(IGP,00,-30,0,360, PRELIM1.382
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.383
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.384
ELSE IF(IOPA_D(IDOM_L).EQ.8 ) THEN GSS3F401.839
! 30N-30S GSS3F401.840
CALL LLTORC
(IGP,30,-30,0,360, PRELIM1.388
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.389
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.390
ELSE IF(IOPA_D(IDOM_L).EQ.9 ) THEN GSS3F401.841
! Other lat/long spec GSS3F401.842
CALL LLTORC
(IGP,INTH_D(IDOM_L),ISTH_D(IDOM_L), PRELIM1.394
& IWST_D(IDOM_L),IEST_D(IDOM_L), PRELIM1.395
& LIST_S(st_north_code,NRECS),LIST_S(st_south_code,NRECS), PRELIM1.396
& LIST_S(st_west_code,NRECS),LIST_S(st_east_code,NRECS)) PRELIM1.397
ELSE IF(IOPA_D(IDOM_L).EQ.10) THEN GSS3F401.843
! Grid point spec GSS3F401.844
CALL LLTORC
(IGP,90,-90,0,360,IY1,IY2,IX1,IX2) PRELIM1.401
LIST_S(st_north_code,NRECS)=MIN(INTH_D(IDOM_L),IY2) PRELIM1.402
LIST_S(st_south_code,NRECS)=MIN(ISTH_D(IDOM_L),IY2) PRELIM1.403
LIST_S(st_west_code ,NRECS)=MIN(IWST_D(IDOM_L),IX2) PRELIM1.404
LIST_S(st_east_code ,NRECS)=MIN(IEST_D(IDOM_L),IX2) PRELIM1.405
ELSE GSS3F401.845
WRITE(6,*) 'PRELIM: INVALD DOMAIN AREA OPTION=', GSS1F400.1229
& IOPA_D(IDOM_L) GSS1F400.1230
WRITE(6,*) 'MODEL,SECTION,ITEM ', GSS1F400.1231
& MODL_L,ISEC_L,ITEM_L GSS1F400.1232
NRECS=NRECS-1 PRELIM1.412
GOTO 999 PRELIM1.413
END IF PRELIM1.415
PRELIM1.416
! Input level setting PRELIM1.417
MODEL_LEV=DISCT_LEV
(ILEV,ErrorStatus,CMESSAGE) GSS3F401.846
IF (MODEL_LEV) THEN GSS3F401.847
! Model levels GSS3F401.848
! Set bottom level GSS3F401.849
CALL LEVCOD
(IBOT,IBOT1,ErrorStatus,CMESSAGE) GSS3F401.850
! Set top level GSS3F401.851
CALL LEVCOD
(ITOP,ITOP1,ErrorStatus,CMESSAGE) GSS3F401.852
! Contig. range of model levels GSS3F401.853
IF(IFLAG.EQ.0) THEN GSS3F401.854
LIST_S(st_input_bottom,NRECS)=IBOT1 PRELIM1.426
LIST_S(st_input_top ,NRECS)=ITOP1 PRELIM1.427
! Non-contig. levels list GSS3F401.855
ELSE IF(IFLAG.EQ.1) THEN GSS3F401.856
LIST_S(st_input_bottom,NRECS)=-1 PRELIM1.429
LIST_S(st_input_top ,NRECS)= 1 PRELIM1.430
END IF PRELIM1.431
ELSE GSS3F401.857
! Non-model levels GSS3F401.858
IF(ILEV.EQ.3) THEN GSS3F401.859
! Pressure levels GSS3F401.860
LIST_S(st_input_bottom,NRECS)=-1 GSS3F401.861
LIST_S(st_input_top ,NRECS)= 2 GSS3F401.862
ELSE IF(ILEV.EQ.4) THEN GSS3F401.863
! Height levels GSS3F401.864
LIST_S(st_input_bottom,NRECS)=-1 GSS3F401.865
LIST_S(st_input_top ,NRECS)= 3 GSS3F401.866
ELSE IF(ILEV.EQ.5) THEN GSS3F401.867
! Special levels GSS3F401.868
LIST_S(st_input_bottom,NRECS)=100 GSS3F401.869
LIST_S(st_input_top ,NRECS)=LBVC GSS3F401.870
ELSE IF(ILEV.EQ.7) THEN GSS3F401.871
! Theta levels GSS3F401.872
LIST_S(st_input_bottom,NRECS)=-1 GSS3F401.873
LIST_S(st_input_top ,NRECS)= 4 GSS3F401.874
ELSE IF(ILEV.EQ.8) THEN GSS3F401.875
! PV levels GSS3F401.876
LIST_S(st_input_bottom,NRECS)=-1 GSS3F401.877
LIST_S(st_input_top ,NRECS)= 5 GSS3F401.878
ELSE IF(ILEV.EQ.9) THEN GSS3F401.879
! Cloud threshold levels GSS3F401.880
LIST_S(st_input_bottom,NRECS)=-1 GSS3F401.881
LIST_S(st_input_top ,NRECS)= 6 GSS3F401.882
END IF GSS3F401.883
END IF PRELIM1.463
PRELIM1.464
! Output level specification PRELIM1.466
MODEL_LEV=DISCT_LEV
(ILEV,ErrorStatus,CMESSAGE) GSS3F401.884
IF (MODEL_LEV) THEN GSS3F401.885
! Model levels GSS3F401.886
IF (LEVB_D(IDOM_L).GE.0) THEN PRELIM1.470
! Contiguous range of model levels GSS3F401.887
LIST_S(st_output_bottom,NRECS)=MAX(LEVB_D(IDOM_L),IBOT1) PRELIM1.473
LIST_S(st_output_top ,NRECS)=MIN(LEVT_D(IDOM_L),ITOP1) PRELIM1.474
IF ((LEVB_D(IDOM_L).LT.IBOT1).OR. PRELIM1.476
& (LEVT_D(IDOM_L).GT.ITOP1)) THEN PRELIM1.477
WRITE(6,*) GSS3F401.888
& 'MESSAGE FROM ROUITNE PRELIM: DIAGNOSTIC REQUEST ', GSS3F401.889
& 'HAS LEVEL RANGE OUT OF BOUNDS; HAS BEEN CORRECTED' GSS3F401.890
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.479
& MODL_L,ISEC_L,ITEM_L PRELIM1.480
END IF GSS3F401.891
IF ( ( TS_D(IDOM_L).EQ. 'Y').AND. GSS1F400.1233
& ((LEVB_D(IDOM_L).LT.IBOT1).OR. GSS1F400.1234
& (LEVT_D(IDOM_L).GT.ITOP1)) ) THEN GSS1F400.1235
WRITE(6,*) GSS1F400.1236
& 'MESSAGE FROM ROUTINE PRELIM: TIME SERIES DOMAIN ', GSS3F401.892
& 'HAS INCONSISTENT LEVELS; DIAGNOSTIC REQUEST IGNORED' GSS3F401.893
WRITE(6,*) 'MODEL,SECTION,ITEM ', GSS1F400.1238
& MODL_L,ISEC_L,ITEM_L GSS1F400.1239
NRECS=NRECS-1 GSS1F400.1240
GOTO 999 GSS1F400.1241
END IF GSS1F400.1242
IF ((LEVT_D(IDOM_L).LT.IBOT1).OR. PRELIM1.494
& (LEVB_D(IDOM_L).GT.ITOP1)) THEN PRELIM1.495
WRITE(6,*) PRELIM1.496
& 'MESSAGE FROM ROUTINE PRELIM: DIAGNOSTIC REQUEST ', GSS3F401.894
& 'HAS TOP/BOTTOM LEVELS INCONSISTENT; REQUEST IGNORED' GSS3F401.895
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.498
& MODL_L,ISEC_L,ITEM_L PRELIM1.499
NRECS=NRECS-1 PRELIM1.501
GOTO 999 PRELIM1.502
END IF PRELIM1.503
ELSE GSS3F401.896
! Non-contig. list of model levels GSS3F401.897
LIST_S(st_output_bottom,NRECS)=-(IDOM_L+LEV_OFFSET) PRELIM1.507
LIST_S(st_output_top ,NRECS)=1 PRELIM1.508
END IF PRELIM1.510
ELSE GSS3F401.898
! Non-model levels GSS3F401.899
IF(ILEV.EQ.5) THEN GSS3F401.900
! Special level GSS3F401.901
LIST_S(st_output_bottom,NRECS)=100 GSS3F401.902
LIST_S(st_output_top ,NRECS)=LBVC GSS3F401.903
ELSE IF(ILEV.EQ.3) THEN GSS3F401.904
! Pressure levels GSS3F401.905
LIST_S(st_output_bottom,NRECS)=-(IDOM_L+LEV_OFFSET) GSS3F401.906
LIST_S(st_output_top ,NRECS)=2 GSS3F401.907
ELSE IF(ILEV.EQ.4) THEN GSS3F401.908
! Height levels GSS3F401.909
LIST_S(st_output_bottom,NRECS)=-(IDOM_L+LEV_OFFSET) GSS3F401.910
LIST_S(st_output_top ,NRECS)=3 GSS3F401.911
ELSE IF(ILEV.EQ.7 ) THEN GSS3F401.912
! Theta levels GSS3F401.913
LIST_S(st_output_bottom,NRECS)=-(IDOM_L+LEV_OFFSET) GSS3F401.914
LIST_S(st_output_top ,NRECS)=4 GSS3F401.915
ELSE IF(ILEV.EQ.8 ) THEN GSS3F401.916
! PV levels GSS3F401.917
LIST_S(st_output_bottom,NRECS)=-(IDOM_L+LEV_OFFSET) GSS3F401.918
LIST_S(st_output_top ,NRECS)=5 GSS3F401.919
ELSE IF(ILEV.EQ.9 ) THEN GSS3F401.920
! Cloud threshold levels GSS3F401.921
LIST_S(st_output_bottom,NRECS)=-(IDOM_L+LEV_OFFSET) GSS3F401.922
LIST_S(st_output_top ,NRECS)=6 GSS3F401.923
ELSE GSS3F401.924
WRITE(6,*) 'PRELIM: DOMAIN LEVEL OPTION=',IOPL_D(IDOM_L) GSS3F401.925
WRITE(6,*) 'MODEL,SECTION,ITEM ', GSS3F401.926
& MODL_L,ISEC_L,ITEM_L PRELIM1.546
NRECS=NRECS-1 GSS3F401.927
GOTO 999 GSS3F401.928
END IF GSS3F401.929
END IF PRELIM1.551
PRELIM1.552
! Output pseudo-levels level setting PRELIM1.553
IF(IPSEUDO.NE.PLT_D(IDOM_L)) THEN PRELIM1.555
WRITE(6,*) PRELIM1.556
& 'MESSAGE FROM ROUTINE PRELIM: DIAGNOSTIC REQUEST HAS ', GSS3F401.930
& 'INVALID PSEUDO LEVEL TYPE; REQUEST IGNORED' GSS3F401.931
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.558
& MODL_L,ISEC_L,ITEM_L PRELIM1.559
NRECS=NRECS-1 PRELIM1.560
GOTO 999 PRELIM1.562
END IF PRELIM1.563
LIST_S(st_pseudo_in,NRECS)=0 !(This is set in INPUTL) GSS3F401.932
IF(IPSEUDO.GT.0) THEN GSS3F401.933
! Pseudo levels list for this diagnostic GSS3F401.934
LIST_S(st_pseudo_out,NRECS)=PLPOS_D(IDOM_L) PRELIM1.569
LENPLST(PLPOS_D(IDOM_L)) =PLLEN_D(IDOM_L) GSS3F401.935
IFIRST=PSLIST_D(1,PLPOS_D(IDOM_L)) PRELIM1.571
ILAST =PSLIST_D(PLLEN_D(IDOM_L),PLPOS_D(IDOM_L)) PRELIM1.572
! Check pseudo level limits GSS3F401.936
CALL PSLIMS
(IPFIRST,IPLAST,IFIRST1,ILAST1) PRELIM1.573
IF(IFIRST.LT.IFIRST1) THEN PRELIM1.575
WRITE(6,*) PRELIM1.576
& 'MESSAGE FROM ROUTINE PRELIM: DIAGNOSTIC REQUEST HAS ', GSS3F401.937
& 'FIRST PSEUDO LEVEL TOO LOW; REQUEST IGNORED' GSS3F401.938
WRITE(6,*) 'MODEL,SECTION,ITEM ', GSS3F401.939
& MODL_L,ISEC_L,ITEM_L GSS3F401.940
NRECS=NRECS-1 GSS3F401.941
GOTO 999 GSS3F401.942
END IF GSS3F401.943
IF(ILAST.GT.ILAST1) THEN GSS3F401.944
WRITE(6,*) GSS3F401.945
& 'MESSAGE FROM ROUTINE PRELIM: DIAGNOSTIC REQUEST HAS ', GSS3F401.946
& 'LAST PSEUDO LEVEL TOO HIGH; REQUEST IGNORED' GSS3F401.947
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.578
& MODL_L,ISEC_L,ITEM_L PRELIM1.579
NRECS=NRECS-1 PRELIM1.580
GOTO 999 PRELIM1.582
END IF PRELIM1.583
ELSE PRELIM1.595
LIST_S(st_pseudo_out,NRECS)=0 GSS3F401.948
END IF PRELIM1.599
PRELIM1.600
! Time-series domain profiles PRELIM1.601
IF(TS_D(IDOM_L).EQ.'Y') THEN GSS1F400.1244
! Pointer for location of time series GSS1F400.1245
LIST_S(st_series_ptr,NRECS)=NPOS_TS(IDOM_L) GSS1F400.1246
ELSE GSS1F400.1247
LIST_S(st_series_ptr,NRECS)=0 GSS1F400.1248
END IF GSS1F400.1249
PRELIM1.617
! 1.2 Expand the useage profile -------------------------- PRELIM1.618
PRELIM1.619
IF (LOCN_U(IUSE_L).EQ.5) THEN ! PP file PRELIM1.620
PRELIM1.621
IF(LMEAN) THEN PRELIM1.622
LIST_S(st_output_code,NRECS)=-27 PRELIM1.623
LIST_S(st_macrotag,NRECS)=0 PRELIM1.624
ELSE PRELIM1.625
WRITE(6,*) GSS3F401.949
& 'MESSAGE FROM ROUTINE PRELIM: DIAGNOSTIC REQUEST HAS ', GSS3F401.950
& 'OUTPUT DESTINATION CODE 5 (CLIMATE MEAN PP FILE) ', GSS3F401.951
& 'BUT DIAGNOSTIC IS NOT A CLIMATE MEAN; REQUEST IGNORED' GSS3F401.952
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.627
& MODL_L,ISEC_L,ITEM_L PRELIM1.628
NRECS=NRECS-1 PRELIM1.630
GOTO 999 PRELIM1.631
END IF PRELIM1.632
PRELIM1.633
ELSE IF (LMEAN) THEN PRELIM1.634
PRELIM1.635
WRITE(6,*) GSS3F401.953
& 'MESSAGE FROM ROUTINE PRELIM: DIAGNOSTIC REQUEST IS A ', GSS3F401.954
& 'CLIMATE MEAN - SHOULD HAVE OUTPUT DESTINATION CODE 5 ', GSS3F401.955
& '(CLIMATE MEAN PP FILE); REQUEST IGNORED' GSS3F401.956
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.637
& MODL_L,ISEC_L,ITEM_L PRELIM1.638
NRECS=NRECS-1 PRELIM1.640
GOTO 999 PRELIM1.641
PRELIM1.642
ELSE IF (LOCN_U(IUSE_L).EQ.3) THEN ! PP file PRELIM1.643
PRELIM1.644
LIST_S(st_output_code,NRECS)=-IUNT_U(IUSE_L) PRELIM1.645
LIST_S(st_macrotag,NRECS)=0 PRELIM1.646
PRELIM1.647
ELSE IF (LOCN_U(IUSE_L).EQ.1) THEN ! Dump store: set user tag PRELIM1.648
PRELIM1.649
LIST_S(st_output_code,NRECS)=1 PRELIM1.650
LIST_S(st_macrotag,NRECS)=IUNT_U(IUSE_L) PRELIM1.651
PRELIM1.652
ELSE IF (LOCN_U(IUSE_L).EQ.6) THEN ! Secondary dump store: PRELIM1.653
! set user tag PRELIM1.654
LIST_S(st_output_code,NRECS)=2 PRELIM1.655
LIST_S(st_macrotag,NRECS)=IUNT_U(IUSE_L) PRELIM1.656
PRELIM1.657
ELSE IF (LOCN_U(IUSE_L).EQ.2) THEN ! Climate mean: tag set PRELIM1.658
! 1000*(time mean tag) PRELIM1.659
LIST_S(st_output_code,NRECS)=1 PRELIM1.660
LIST_S(st_macrotag,NRECS)=IUNT_U(IUSE_L)*1000 PRELIM1.661
PRELIM1.662
ELSE IF (LOCN_U(IUSE_L).EQ.4)THEN ! Printed output PRELIM1.663
PRELIM1.664
LIST_S(st_output_code,NRECS)=7 PRELIM1.665
LIST_S(st_macrotag,NRECS)=0 PRELIM1.666
PRELIM1.667
ELSE PRELIM1.668
PRELIM1.669
WRITE(6,*) 'PRELIM: IVALID USEAGE OPTION=', GSS1F400.1250
& LOCN_U(IUSE_L) GSS1F400.1251
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.671
& MODL_L,ISEC_L,ITEM_L PRELIM1.672
NRECS=NRECS-1 PRELIM1.674
GOTO 999 PRELIM1.675
PRELIM1.676
END IF PRELIM1.677
PRELIM1.678
! 1.3 Expand the time profile ------------------------------ PRELIM1.679
PRELIM1.680
! Initialise as single time field PRELIM1.681
PRELIM1.682
! Set time processing record PRELIM1.683
PRELIM1.684
IF (LMEAN) THEN PRELIM1.685
IF (ITYP_T(ITIM_L).NE.1) THEN PRELIM1.686
WRITE(6,*) PRELIM1.687
& 'PRELIM: CLIMATE MEANS MUST NOT BE TIME PROCESSED' PRELIM1.688
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.689
& MODL_L,ISEC_L,ITEM_L PRELIM1.690
END IF PRELIM1.692
LIST_S(st_proc_no_code,NRECS)=1 PRELIM1.693
ELSE PRELIM1.694
LIST_S(st_proc_no_code,NRECS)=ITYP_T(ITIM_L) PRELIM1.695
END IF PRELIM1.696
PRELIM1.697
! Initialise offset to 0 GSM5F404.7
LIST_S(st_offset_code,NRECS)=0 GSM5F404.8
! Set period record PRELIM1.698
PRELIM1.699
IF (ITYP_T(ITIM_L).EQ.1.OR.LMEAN) THEN ! No period PRELIM1.700
LIST_S(st_period_code,NRECS)=0 PRELIM1.701
ELSE IF((INTV_T(ITIM_L).EQ.-1).AND. PRELIM1.702
& (ITYP_T(ITIM_L).EQ.2)) THEN PRELIM1.703
LIST_S(st_period_code,NRECS)=-1 PRELIM1.704
ELSE PRELIM1.705
LIST_S(st_period_code,NRECS)= PRELIM1.706
& TOTIMP
(INTV_T(ITIM_L),UNT1_T(ITIM_L),MODL_L) GSS3F401.957
if (LIST_S(st_freq_code,NRECS) .eq. -999) then GDW1F404.195
ErrorStatus = 101 GDW1F404.196
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.197
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.198
GOTO 9999 GDW1F404.199
endif GDW1F404.200
END IF PRELIM1.708
PRELIM1.709
IF (LMEAN.AND.(IOPT_T(ITIM_L).NE.1)) THEN PRELIM1.710
WRITE(6,*) PRELIM1.711
& 'PRELIM: CLIMATE MEANS MUST USE STANDARD FREQUENCY' PRELIM1.712
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.713
& MODL_L,ISEC_L,ITEM_L PRELIM1.714
NRECS=NRECS-1 PRELIM1.715
GOTO 999 PRELIM1.717
END IF PRELIM1.718
PRELIM1.719
IF(IOPT_T(ITIM_L).EQ.1) THEN PRELIM1.720
!Regular output times PRELIM1.721
LIST_S(st_freq_code,NRECS)= PRELIM1.722
& TOTIMP
(IFRE_T(ITIM_L),UNT3_T(ITIM_L),MODL_L) GSS3F401.958
if (LIST_S(st_freq_code,NRECS) .eq. -999) then GDW1F404.201
ErrorStatus = 102 GDW1F404.202
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.203
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.204
GOTO 9999 GDW1F404.205
endif GDW1F404.206
LIST_S(st_start_time_code,NRECS)= PRELIM1.724
& TOTIMP
(ISTR_T(ITIM_L),UNT3_T(ITIM_L),MODL_L) GSS3F401.959
if (LIST_S(st_start_time_code,NRECS) .eq. -999) then GDW1F404.207
ErrorStatus = 103 GDW1F404.208
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.209
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.210
GOTO 9999 GDW1F404.211
endif GDW1F404.212
LIST_S(st_end_time_code,NRECS)= PRELIM1.726
& TOTIMP
(IEND_T(ITIM_L),UNT3_T(ITIM_L),MODL_L) GSS3F401.960
if (LIST_S(st_end_time_code,NRECS) .eq. -999) then GDW1F404.213
ErrorStatus = 104 GDW1F404.214
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.215
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.216
GOTO 9999 GDW1F404.217
endif GDW1F404.218
PRELIM1.728
! Set end time to -1 if output requested to end of run PRELIM1.729
IF(IEND_T(ITIM_L).EQ.-1) LIST_S(st_end_time_code,NRECS)=-1 PRELIM1.730
PRELIM1.731
! Correct start time for radiation, periodic convection, leaf ABX1F405.3
! phenology and vegetation competition ABX1F405.4
IF((ITIMA.EQ.2).AND.(A_LW_RADSTEP.NE.1)) THEN PRELIM1.733
IMD=MOD(LIST_S(st_start_time_code,NRECS),A_LW_RADSTEP) PRELIM1.734
LIST_S(st_start_time_code,NRECS)= PRELIM1.735
& LIST_S(st_start_time_code,NRECS)+1-IMD PRELIM1.736
LOFFSET=.TRUE. PRELIM1.737
ELSE IF((ITIMA.EQ.3).AND.(A_SW_RADSTEP.NE.1)) THEN PRELIM1.738
IMD=MOD(LIST_S(st_start_time_code,NRECS),A_SW_RADSTEP) PRELIM1.739
LIST_S(st_start_time_code,NRECS)= PRELIM1.740
& LIST_S(st_start_time_code,NRECS)+1-IMD PRELIM1.741
LOFFSET=.TRUE. PRELIM1.742
ELSE IF((ITIMA.EQ.13).AND.(A_CONV_STEP.NE.1)) THEN PRELIM1.743
IMD=MOD(LIST_S(st_start_time_code,NRECS),A_CONV_STEP) PRELIM1.744
LIST_S(st_start_time_code,NRECS)= PRELIM1.745
& LIST_S(st_start_time_code,NRECS)+1-IMD PRELIM1.746
LOFFSET=.TRUE. PRELIM1.747
ELSE IF((ITIMA.EQ.14).AND.(PHENOL_PERIOD.NE.1)) THEN ABX1F405.5
IMD=MOD(LIST_S(st_start_time_code,NRECS),PHENOL_PERIOD) ABX1F405.6
LIST_S(st_start_time_code,NRECS)= ABX1F405.7
& LIST_S(st_start_time_code,NRECS)+1-IMD ABX1F405.8
LOFFSET=.TRUE. ABX1F405.9
ELSE IF((ITIMA.EQ.15).AND.(TRIFFID_PERIOD.NE.1)) THEN ABX1F405.10
IMD=MOD(LIST_S(st_start_time_code,NRECS),TRIFFID_PERIOD) ABX1F405.11
LIST_S(st_start_time_code,NRECS)= ABX1F405.12
& LIST_S(st_start_time_code,NRECS)+1-IMD ABX1F405.13
LOFFSET=.TRUE. ABX1F405.14
ELSE PRELIM1.748
LOFFSET=.FALSE. PRELIM1.749
END IF PRELIM1.750
ELSE IF(IOPT_T(ITIM_L).EQ.2) THEN PRELIM1.752
!List of specified output times PRELIM1.754
LIST_S(st_freq_code,NRECS)=-ITIM_L PRELIM1.756
ELSE GSS3F401.961
WRITE(6,*)'PRELIM: INVALID OUTPUT TIMES CODE' GSS1F400.1254
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.764
& MODL_L,ISEC_L,ITEM_L PRELIM1.765
NRECS=NRECS-1 PRELIM1.767
GOTO 999 PRELIM1.768
END IF PRELIM1.770
PRELIM1.771
IF (LMEAN) LIST_S(st_freq_code,NRECS)=1 PRELIM1.772
PRELIM1.773
IF ((LIST_S(st_proc_no_code,NRECS).GT.1).AND. PRELIM1.774
& (LIST_S(st_proc_no_code,NRECS).LE.6)) THEN PRELIM1.775
! Other than single time field PRELIM1.776
IF(NRECS.GE.NRECDP) THEN PRELIM1.777
WRITE(6,*) PRELIM1.778
& 'PRELIM: TOO MANY S_LIST REQUESTS. REQUEST IGNORED' PRELIM1.779
WRITE(6,*) 'MODEL,SECTION,ITEM ', GSS1F400.1255
& MODL_L,ISEC_L,ITEM_L GSS1F400.1256
NRECS=NRECS-1 PRELIM1.781
GOTO 999 PRELIM1.782
END IF PRELIM1.783
PRELIM1.784
DO I=1,NELEMP+1 ! Copy stash list forward PRELIM1.785
LIST_S(I,NRECS+1)=LIST_S(I,NRECS) PRELIM1.786
END DO PRELIM1.787
PRELIM1.788
IF(LOFFSET) THEN ! Rad or conv timesteps, PRELIM1.789
! 1 alresdy added PRELIM1.790
LIST_S(st_start_time_code,NRECS+1)= PRELIM1.791
& LIST_S(st_start_time_code,NRECS+1)-1 PRELIM1.792
IF (LIST_S(st_period_code,NRECS).NE.-1) THEN PRELIM1.793
LIST_S(st_start_time_code,NRECS)= PRELIM1.794
& LIST_S(st_start_time_code,NRECS)- PRELIM1.795
& LIST_S(st_period_code,NRECS) PRELIM1.796
ELSE PRELIM1.797
LIST_S(st_start_time_code,NRECS)=1 PRELIM1.798
END IF PRELIM1.799
PRELIM1.800
ELSE PRELIM1.801
PRELIM1.802
IF (LIST_S(st_period_code,NRECS).NE.-1) THEN PRELIM1.803
! Offsets are added to start time GSM5F404.9
LIST_S(st_offset_code,NRECS)= GSM5F404.10
& TOTIMP
(IOFF_T(ITIM_L),UNT2_T(ITIM_L),MODL_L) GSM5F404.11
if (LIST_S(st_offset_code,NRECS) .eq. -999) then GSM5F404.12
ErrorStatus = 1 GSM5F404.13
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT' GSM5F404.14
GOTO 9999 GSM5F404.15
endif GSM5F404.16
LIST_S(st_start_time_code,NRECS)= PRELIM1.804
& LIST_S(st_start_time_code,NRECS)- PRELIM1.805
& LIST_S(st_period_code,NRECS)+1+ GSM5F404.17
& LIST_S(st_offset_code,NRECS) GSM5F404.18
ELSE PRELIM1.807
LIST_S(st_start_time_code,NRECS)=1 PRELIM1.808
END IF PRELIM1.809
PRELIM1.810
END IF PRELIM1.811
PRELIM1.812
IF(LIST_S(st_start_time_code,NRECS).LT.1) THEN PRELIM1.813
WRITE(6,*) PRELIM1.814
& 'PRELIM: START TIME BEFORE PERIOD, SETTING TO 1' PRELIM1.815
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.816
& MODL_L,ISEC_L,ITEM_L PRELIM1.817
LIST_S(st_start_time_code,NRECS)=1 PRELIM1.819
END IF PRELIM1.820
PRELIM1.821
LIST_S(st_proc_no_code ,NRECS+1)=1 PRELIM1.822
PRELIM1.823
LIST_S(st_input_bottom ,NRECS+1)= PRELIM1.824
& LIST_S(st_output_bottom,NRECS ) PRELIM1.825
PRELIM1.826
LIST_S(st_input_top ,NRECS+1)= PRELIM1.827
& LIST_S(st_output_top ,NRECS ) PRELIM1.828
PRELIM1.829
LIST_S(st_input_code ,NRECS+1)=-NRECS PRELIM1.830
LIST_S(st_output_code ,NRECS )=1 PRELIM1.831
LIST_S(st_series_ptr ,NRECS+1)=0 PRELIM1.832
LIST_S(NELEMP+1 ,NRECS+1)=NRECS+1 PRELIM1.833
PRELIM1.834
LIST_S(st_freq_code,NRECS)= ! Frequency PRELIM1.835
& TOTIMP
(ISAM_T(ITIM_L),UNT2_T(ITIM_L),MODL_L) GSS3F401.962
if (LIST_S(st_freq_code,NRECS) .eq. -999) then GDW1F404.219
ErrorStatus = 105 GDW1F404.220
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.221
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.222
GOTO 9999 GDW1F404.223
endif GDW1F404.224
PRELIM1.837
! Correct frequency for radiation, periodic convection, leaf ABX1F405.15
! phenology and vegetation competition ABX1F405.16
PRELIM1.839
IF (ITIMA.EQ.2) THEN PRELIM1.840
IF (LIST_S(st_freq_code,NRECS).EQ.1) THEN PRELIM1.841
LIST_S(st_freq_code,NRECS)=A_LW_RADSTEP PRELIM1.842
ELSE IF PRELIM1.843
& (MOD(LIST_S(st_freq_code,NRECS),A_LW_RADSTEP).NE.0) THEN PRELIM1.844
WRITE(6,*) PRELIM1.845
& 'PRELIM: INCORRECT SAMPLING FOR LW_RADSTEP. FREQ=', PRELIM1.846
& LIST_S(st_freq_code,NRECS) PRELIM1.847
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.848
& MODL_L,ISEC_L,ITEM_L PRELIM1.849
NRECS=NRECS-1 PRELIM1.851
GOTO 999 PRELIM1.852
END IF PRELIM1.853
ELSE IF(ITIMA.EQ.3) THEN PRELIM1.854
IF (LIST_S(st_freq_code,NRECS).EQ.1) THEN PRELIM1.855
LIST_S(st_freq_code,NRECS)=A_SW_RADSTEP PRELIM1.856
ELSE IF PRELIM1.857
& (MOD(LIST_S(st_freq_code,NRECS),A_SW_RADSTEP).NE.0) THEN PRELIM1.858
WRITE(6,*) PRELIM1.859
& 'PRELIM: INCORRECT SAMPLING FOR SW_RADSTEP. FREQ=', PRELIM1.860
& LIST_S(st_freq_code,NRECS) PRELIM1.861
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.862
& MODL_L,ISEC_L,ITEM_L PRELIM1.863
NRECS=NRECS-1 PRELIM1.865
GOTO 999 PRELIM1.866
END IF PRELIM1.867
ELSE IF(ITIMA.EQ.13) THEN PRELIM1.868
IF (LIST_S(st_freq_code,NRECS).EQ.1) THEN PRELIM1.869
LIST_S(st_freq_code,NRECS)=A_CONV_STEP PRELIM1.870
ELSE IF PRELIM1.871
& (MOD(LIST_S(st_freq_code,NRECS),A_CONV_STEP).NE.0) THEN PRELIM1.872
WRITE(6,*) PRELIM1.873
& 'PRELIM: INCORRECT SAMPLING FOR CONV_STEP . FREQ=', PRELIM1.874
& LIST_S(st_freq_code,NRECS) PRELIM1.875
WRITE(6,*) 'MODEL,SECTION,ITEM ', PRELIM1.876
& MODL_L,ISEC_L,ITEM_L PRELIM1.877
NRECS=NRECS-1 PRELIM1.879
GOTO 999 PRELIM1.880
END IF PRELIM1.881
ELSE IF(ITIMA.EQ.14) THEN ABX1F405.17
IF (LIST_S(st_freq_code,NRECS).EQ.1) THEN ABX1F405.18
LIST_S(st_freq_code,NRECS)=PHENOL_PERIOD ABX1F405.19
ELSE IF ABX1F405.20
& (MOD(LIST_S(st_freq_code,NRECS),PHENOL_PERIOD).NE.0) THEN ABX1F405.21
WRITE(6,*) ABX1F405.22
& 'PRELIM: INCORRECT SAMPLING FOR PHENOL_PERIOD . FREQ=', ABX1F405.23
& LIST_S(st_freq_code,NRECS) ABX1F405.24
WRITE(6,*) 'MODEL,SECTION,ITEM ', ABX1F405.25
& MODL_L,ISEC_L,ITEM_L ABX1F405.26
NRECS=NRECS-1 ABX1F405.27
GOTO 999 ABX1F405.28
END IF ABX1F405.29
ELSE IF(ITIMA.EQ.15) THEN ABX1F405.30
IF (LIST_S(st_freq_code,NRECS).EQ.1) THEN ABX1F405.31
LIST_S(st_freq_code,NRECS)=TRIFFID_PERIOD ABX1F405.32
ELSE IF ABX1F405.33
& (MOD(LIST_S(st_freq_code,NRECS),TRIFFID_PERIOD).NE.0) THEN ABX1F405.34
WRITE(6,*) ABX1F405.35
& 'PRELIM: INCORRECT SAMPLING FOR TRIFFID_PERIOD . FREQ=', ABX1F405.36
& LIST_S(st_freq_code,NRECS) ABX1F405.37
WRITE(6,*) 'MODEL,SECTION,ITEM ', ABX1F405.38
& MODL_L,ISEC_L,ITEM_L ABX1F405.39
NRECS=NRECS-1 ABX1F405.40
GOTO 999 ABX1F405.41
END IF ABX1F405.42
END IF PRELIM1.882
PRELIM1.883
! Period PRELIM1.884
PRELIM1.885
IF ((INTV_T(ITIM_L).EQ.-1).AND.(ITYP_T(ITIM_L).EQ.2)) THEN PRELIM1.886
LIST_S(st_period_code,NRECS)=-1 PRELIM1.887
ELSE PRELIM1.888
LIST_S(st_period_code,NRECS)= PRELIM1.889
& TOTIMP
(INTV_T(ITIM_L),UNT1_T(ITIM_L),MODL_L) GSS3F401.963
if (LIST_S(st_period_code,NRECS) .eq. -999) then GDW1F404.225
ErrorStatus = 106 GDW1F404.226
cmessage = 'TOTIMP:UNEXPECTED TIME UNIT or '// GDW1F404.227
& 'IRREGULAR DUMPS FOR DUMP FREQUENCY' GDW1F404.228
GOTO 9999 GDW1F404.229
endif GDW1F404.230
END IF PRELIM1.891
PRELIM1.892
! Add the record - unless the output destination is the dump, PRELIM1.893
! and output at the accumulating period PRELIM1.894
IF ( LOCN_U(IUSE_L).GT.2 GSS3F401.964
& .OR. GSS3F401.965
& ( (LIST_S(st_freq_code ,NRECS+1).NE. GSS3F401.966
& LIST_S(st_period_code,NRECS )) GSS3F401.967
& .AND. GSS3F401.968
& (LIST_S(st_start_time_code,NRECS+1).NE. GSS3F401.969
& LIST_S(st_end_time_code ,NRECS+1)) ) GSS3F401.970
& )THEN GSS3F401.971
! No tag for parent GSS3F401.972
LIST_S(st_macrotag,NRECS)=0 PRELIM1.899
NRECS=NRECS+1 PRELIM1.900
END IF PRELIM1.901
GRS1F404.2
ELSE IF (LIST_S(st_proc_no_code,NRECS).EQ.8) THEN GRS1F404.3
! Option of "daily" mean timeseries GRS1F404.4
GRS1F404.5
IF(NRECS.GE.NRECDP) THEN GRS1F404.6
WRITE(6,*) GRS1F404.7
& 'PRELIM: TOO MANY S_LIST REQUESTS. REQUEST IGNORED' GRS1F404.8
WRITE(6,*) 'MODEL,SECTION,ITEM ', GRS1F404.9
& MODL_L,ISEC_L,ITEM_L GRS1F404.10
NRECS=NRECS-1 GRS1F404.11
GOTO 999 GRS1F404.12
END IF GRS1F404.13
GRS1F404.14
! Special case where 2 extra records required GRS1F404.15
! Record 1 - time mean only no spatial processing GRS1F404.16
! Record 2 - timeseries formed extracting from record 1 GRS1F404.17
! Record 3 - extract timeseries from dump ie record 2 GRS1F404.18
GRS1F404.19
DO I=1,NELEMP+1 ! Copy stash list forward GRS1F404.20
LIST_S(I,NRECS+1)=LIST_S(I,NRECS) GRS1F404.21
LIST_S(I,NRECS+2)=LIST_S(I,NRECS) GRS1F404.22
END DO GRS1F404.23
GRS1F404.24
IF(LOFFSET) THEN ! Rad or conv timesteps, GRS1F404.25
! 1 already added GRS1F404.26
LIST_S(st_start_time_code,NRECS+2)= GRS1F404.27
& LIST_S(st_start_time_code,NRECS+2)-1 GRS1F404.28
IF (LIST_S(st_period_code,NRECS).NE.-1) THEN GRS1F404.29
LIST_S(st_start_time_code,NRECS)= GRS1F404.30
& LIST_S(st_start_time_code,NRECS)- GRS1F404.31
& LIST_S(st_period_code,NRECS) GRS1F404.32
ELSE GRS1F404.33
LIST_S(st_start_time_code,NRECS)=1 GRS1F404.34
END IF GRS1F404.35
GRS1F404.36
ELSE GRS1F404.37
GRS1F404.38
IF (LIST_S(st_period_code,NRECS).NE.-1) THEN GRS1F404.39
LIST_S(st_start_time_code,NRECS)= GRS1F404.40
& LIST_S(st_start_time_code,NRECS)- GRS1F404.41
& LIST_S(st_period_code,NRECS)+1 GRS1F404.42
ELSE GRS1F404.43
LIST_S(st_start_time_code,NRECS)=1 GRS1F404.44
END IF GRS1F404.45
GRS1F404.46
END IF GRS1F404.47
GRS1F404.48
IF(LIST_S(st_start_time_code,NRECS).LT.1) THEN GRS1F404.49
WRITE(6,*) 'PRELIM: START TIME BEFORE PERIOD, SETTING TO 1' GRS1F404.50
WRITE(6,*) 'MODEL,SECTION,ITEM ',MODL_L,ISEC_L,ITEM_L GRS1F404.51
LIST_S(st_start_time_code,NRECS)=1 GRS1F404.52
END IF GRS1F404.53
GRS1F404.54
LIST_S(st_proc_no_code ,NRECS)=3 ! time mean GRS1F404.55
LIST_S(st_proc_no_code ,NRECS+1)=8 ! timseries special case GRS1F404.56
LIST_S(st_proc_no_code ,NRECS+2)=1 ! extract GRS1F404.57
GRS1F404.58
! Reset first record to no area weight or spatial processing GRS1F404.59
! ie first record just controls time meaning GRS1F404.60
GRS1F404.61
LIST_S(st_gridpoint_code,NRECS)=1 GRS1F404.62
LIST_S(st_weight_code,NRECS)=0 GRS1F404.63
GRS1F404.64
LIST_S(st_input_bottom ,NRECS+1)= GRS1F404.65
& LIST_S(st_output_bottom,NRECS ) GRS1F404.66
LIST_S(st_input_bottom ,NRECS+2)= GRS1F404.67
& LIST_S(st_output_bottom,NRECS+1) GRS1F404.68
GRS1F404.69
LIST_S(st_input_top ,NRECS+1)= GRS1F404.70
& LIST_S(st_output_top ,NRECS ) GRS1F404.71
LIST_S(st_input_top ,NRECS+2)= GRS1F404.72
& LIST_S(st_output_top ,NRECS+1) GRS1F404.73
GRS1F404.74
LIST_S(st_input_code ,NRECS+1)=-NRECS GRS1F404.75
LIST_S(st_input_code ,NRECS+2)=-NRECS-1 GRS1F404.76
LIST_S(st_output_code ,NRECS )=1 GRS1F404.77
LIST_S(st_output_code ,NRECS+1)=1 ! dump GRS1F404.78
LIST_S(st_series_ptr ,NRECS+2)=0 GRS1F404.79
LIST_S(st_series_ptr ,NRECS)=0 GRS1F404.80
LIST_S(NELEMP+1 ,NRECS+1)=NRECS+1 GRS1F404.81
LIST_S(NELEMP+1 ,NRECS+2)=NRECS+2 GRS1F404.82
! definition 8 implies frequency of time mean over every timestep GRS1F404.83
LIST_S(st_freq_code,NRECS)=1 GRS1F404.84
LIST_S(st_freq_code,NRECS+1)= ! Frequency GRS1F404.85
& TOTIMP
(ISAM_T(ITIM_L),UNT2_T(ITIM_L),MODL_L) GRS1F404.86
GRS1F404.87
! Correct frequency for radiation, periodic convection, leaf ABX1F405.43
! phenology and vegetation competition ABX1F405.44
GRS1F404.89
IF (ITIMA.EQ.2) THEN GRS1F404.90
LIST_S(st_freq_code,NRECS)=A_LW_RADSTEP GRS1F404.91
ELSE IF(ITIMA.EQ.3) THEN GRS1F404.92
LIST_S(st_freq_code,NRECS)=A_SW_RADSTEP GRS1F404.93
ELSE IF(ITIMA.EQ.13) THEN GRS1F404.94
LIST_S(st_freq_code,NRECS)=A_CONV_STEP GRS1F404.95
ELSE IF(ITIMA.EQ.14) THEN ABX1F405.45
LIST_S(st_freq_code,NRECS)=PHENOL_PERIOD ABX1F405.46
ELSE IF(ITIMA.EQ.15) THEN ABX1F405.47
LIST_S(st_freq_code,NRECS)=TRIFFID_PERIOD ABX1F405.48
END IF GRS1F404.96
GRS1F404.97
! Period GRS1F404.98
! time mean over sampling period GRS1F404.99
LIST_S(st_period_code,NRECS)= GRS1F404.100
& TOTIMP
(ISAM_T(ITIM_L),UNT2_T(ITIM_L),MODL_L) GRS1F404.101
! period for timeseries recycle period GRS1F404.102
LIST_S(st_period_code,NRECS+1)= GRS1F404.103
& TOTIMP
(INTV_T(ITIM_L),UNT1_T(ITIM_L),MODL_L) GRS1F404.104
GRS1F404.105
! st_start_time for 2 record should be period for first record GRS1F404.106
! unless offset from start of run. Note value independent of logical GRS1F404.107
! OFFSET GRS1F404.108
! GRS1F404.109
IF (LIST_S(st_period_code,NRECS).NE.-1) THEN GRS1F404.110
IF (LOFFSET) THEN GRS1F404.111
LIST_S(st_start_time_code,NRECS+1)= GRS1F404.112
& LIST_S(st_start_time_code,NRECS+1) - GRS1F404.113
& LIST_S(st_period_code,NRECS+1) + GRS1F404.114
& LIST_S(st_freq_code,NRECS+1) - 1 GRS1F404.115
ELSE GRS1F404.116
LIST_S(st_start_time_code,NRECS+1)= GRS1F404.117
& LIST_S(st_start_time_code,NRECS+1) - GRS1F404.118
& LIST_S(st_period_code,NRECS+1) + GRS1F404.119
& LIST_S(st_freq_code,NRECS+1) GRS1F404.120
ENDIF GRS1F404.121
ELSE GRS1F404.122
LIST_S(st_start_time_code,NRECS+1)=1 GRS1F404.123
END IF GRS1F404.124
GRS1F404.125
GRS1F404.126
! Add both record GRS1F404.127
LIST_S(st_macrotag,NRECS)=0 GRS1F404.128
NRECS=NRECS+2 GRS1F404.129
PRELIM1.902
END IF ! Other than single time field PRELIM1.903
PRELIM1.904
END IF ! Diag request not null - ITIM_L.NE.0 PRELIM1.905
999 CONTINUE PRELIM1.906
END DO ! Loop over diagnostic requests PRELIM1.907
PRELIM1.908
END IF ! NDIAG.GT.0 PRELIM1.909
PRELIM1.910
CALL PSLCOM
(NRECS) ! Compress out unused pseudo levels lists PRELIM1.911
PRELIM1.912
9999 RETURN GSS1F400.1257
END ! Subroutine PRELIM PRELIM1.914
PRELIM1.915
!- End of Subroutine code ------------------------------------------- PRELIM1.916
PRELIM1.917
PRELIM1.918
!+ Compress out unused pseudo levels lists GSS3F401.973
SUBROUTINE PSLCOM(NRECS) 1PRELIM1.920
PRELIM1.921
! Description: PRELIM1.922
! PRELIM1.923
! Method: PRELIM1.924
! PRELIM1.925
! Current code owner: S.J.Swarbrick PRELIM1.926
! PRELIM1.927
! History: PRELIM1.928
! Version Date Comment PRELIM1.929
! ======= ==== ======= PRELIM1.930
! 3.5 Mar. 95 Original code. S.J.Swarbrick PRELIM1.931
! PRELIM1.932
! Code description: PRELIM1.933
! FORTRAN 77 + common Fortran 90 extensions. PRELIM1.934
! Written to UM programming standards version 7. PRELIM1.935
! PRELIM1.936
! System component covered: PRELIM1.937
! System task: Sub-Models Project PRELIM1.938
! PRELIM1.939
! Global variables: PRELIM1.940
PRELIM1.941
*CALL CSUBMODL
PRELIM1.942
*CALL STPARAM
PRELIM1.943
*CALL VERSION
PRELIM1.944
*CALL CSTASH
GRB0F401.20
*CALL STEXTEND
PRELIM1.946
PRELIM1.947
! Subroutine arguments: PRELIM1.948
PRELIM1.949
! Scalar arguments with intent(in): PRELIM1.950
PRELIM1.951
INTEGER NRECS PRELIM1.952
PRELIM1.953
! Local Scalars: PRELIM1.954
PRELIM1.955
INTEGER ICOUNT PRELIM1.956
PRELIM1.957
! Local arrays: PRELIM1.958
PRELIM1.959
INTEGER IPOS (NPSLISTP) ! POSITION IN OLD LIST OF THE NEW PRELIM1.960
INTEGER IPOS1(NPSLISTP) ! POSITION IN THE NEW LIST OF THE OLD PRELIM1.961
PRELIM1.962
!- End of Header --------------------------------------------------- PRELIM1.963
PRELIM1.964
PRELIM1.965
ICOUNT=0 PRELIM1.966
PRELIM1.967
DO I=1,NPSLISTS ! LOOP DOWN THE LISTS PRELIM1.968
IF(LENPLST(I).NE.0) THEN ! USED LIST PRELIM1.969
ICOUNT=ICOUNT+1 PRELIM1.970
IPOS(ICOUNT)=I PRELIM1.971
IPOS1(I)=ICOUNT PRELIM1.972
ELSE PRELIM1.973
IPOS1(I)=0 PRELIM1.974
END IF PRELIM1.975
END DO PRELIM1.976
PRELIM1.977
NPSLISTS=ICOUNT PRELIM1.978
PRELIM1.979
DO I=1,NPSLISTS PRELIM1.980
LENPLST(I)=LENPLST(IPOS(I)) PRELIM1.981
DO J=1,NPSLEVP PRELIM1.982
PSLIST_D(J,I)=PSLIST_D(J,IPOS(I)) PRELIM1.983
END DO PRELIM1.984
END DO PRELIM1.985
PRELIM1.986
DO I=NPSLISTS+1,NPSLISTP PRELIM1.987
LENPLST(I)=0 PRELIM1.988
DO J=1,NPSLEVP PRELIM1.989
PSLIST_D(J,I)=0 PRELIM1.990
END DO PRELIM1.991
END DO PRELIM1.992
PRELIM1.993
DO I=1,NRECS PRELIM1.994
IF(LIST_S(st_pseudo_out,I).NE.0) THEN PRELIM1.995
LIST_S(st_pseudo_out,I)=IPOS1(LIST_S(st_pseudo_out,I)) PRELIM1.996
END IF PRELIM1.997
END DO PRELIM1.998
PRELIM1.999
RETURN PRELIM1.1000
END ! Subroutine PSLCOM PRELIM1.1001
PRELIM1.1002
!- End of Subroutine code ------------------------------------------ PRELIM1.1003
*ENDIF PRELIM1.1004