*IF DEF,CONTROL UPBOUND1.2
C ******************************COPYRIGHT****************************** GTS2F400.10855
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10856
C GTS2F400.10857
C Use, duplication or disclosure of this code is subject to the GTS2F400.10858
C restrictions as set forth in the contract. GTS2F400.10859
C GTS2F400.10860
C Meteorological Office GTS2F400.10861
C London Road GTS2F400.10862
C BRACKNELL GTS2F400.10863
C Berkshire UK GTS2F400.10864
C RG12 2SZ GTS2F400.10865
C GTS2F400.10866
C If no contract has been raised with this copy of the code, the use, GTS2F400.10867
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10868
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10869
C Modelling at the above address. GTS2F400.10870
C ******************************COPYRIGHT****************************** GTS2F400.10871
C GTS2F400.10872
CLL -------------- SUBROUTINE UP_BOUND --------------------------------- UPBOUND1.3
CLL UPBOUND1.4
CLL Purpose: At the first step, two records are read from each boundary UPBOUND1.5
CLL data set.A boundary tendency is calculated, and the current UPBOUND1.6
CLL values and tendencies and values stored in the dump. At UPBOUND1.7
CLL subsequent boundary updating steps, a record is read for the UPBOUND1.8
CLL updating time following the current model time. A new set of UPBOUND1.9
CLL tendencies is calculated from this record and the current UPBOUND1.10
CLL values. UPBOUND1.11
CLL UPBOUND1.12
CLL Control routine for Cray YMP UPBOUND1.13
CLL UPBOUND1.14
CLL Programing standard: UM Documentation paper No 3, UPBOUND1.15
CLL Version No 1, dated 15/01/90 UPBOUND1.16
CLL UPBOUND1.17
CLL version date Modification history RS030293.136
CLL 3.1 03/02/93 : added comdeck CHSUNITS to define NUNITS for i/o RS030293.137
CLL 3.1 19/02/93 Use FIXHD(12) not FIXHD(1) as Version no in P21BITS TJ190293.15
CLL 3.2 27/05/93 Dynamic allocation changes - R.T.H.Barnes. @DYALLOC.3826
CLL 3.4 16/6/94 : Change CHARACTER*(*) to CHARACTER*(80) N.Farnon ANF0F304.42
CLL 3.3 24/09/93 : added LENRIMDATA_ADA to argument list for NF171193.145
CLL portable dynamic arrays. Author :Paul Burton NF171193.146
CLL 3.3 07/12/93 Extra argument for READFLDS. D. Robinson DR081293.131
CLL 3.4 : DEF ATMOS switch around BUF array declaration (N.Farnon) ANF1F304.37
CLL 3.4 20/12/94 Changes to cope with corrections to FIXHD(161) and GDG2F304.11
CLL LOOKUP...(NADDR... in GENINTF1 for atmos alabc. RTHB GDG2F304.12
CLL 4.0 30/03/95 Cater for unpacked data in atmosphere boundary GDR1F400.195
CLL datasets. D. Robinson GDR1F400.196
CLL 4.1 26/01/96 Logical control of ocean print statements. ORH2F401.72
! 4.1 16/01/96 Use READFLDS to read in atmosphere boundary data. APB4F401.533
! D. Robinson. APB4F401.534
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.1522
! Author D.M. Goddard. GDG0F401.1523
!LL 4.2 20/11/96 Changes to allow correct reading of LBC files on APB1F402.248
!LL MPP platforms. P.Burton APB1F402.249
CLL 4.5 13/08/97 Modified variable names for ocean bdy conditions. GSI1F405.321
CLL Delete tendency calculation step for ocean. GSI1F405.322
CLL C.G. Jones GSI1F405.323
CLL TJ190293.17
CLL Logical components covered: C72 UPBOUND1.18
CLL UPBOUND1.19
CLL System task: C7 UPBOUND1.20
CLL UPBOUND1.21
CLL Documentation: UM Documentation paper No C7, UPBOUND1.22
CLL draft version No 6, Dated 22/01/90 UPBOUND1.23
CLL UPBOUND1.24
CLLEND------------------------------------------------------------- UPBOUND1.25
CL Arguments @DYALLOC.3827
UPBOUND1.26
SUBROUTINE UP_BOUND(I_AO, 3,14@DYALLOC.3828
*CALL ARGSIZE
@DYALLOC.3829
*CALL ARGD1
@DYALLOC.3830
*CALL ARGDUMA
@DYALLOC.3831
*CALL ARGDUMO
@DYALLOC.3832
*CALL ARGDUMW
GKR1F401.278
*CALL ARGPTRA
@DYALLOC.3833
*CALL ARGPTRO
@DYALLOC.3834
*CALL ARGBND
@DYALLOC.3835
*CALL ARGPPX
GDG0F401.1524
& ICODE,CMESSAGE) NF171193.148
UPBOUND1.31
IMPLICIT NONE UPBOUND1.32
@DYALLOC.3837
*CALL CMAXSIZE
@DYALLOC.3838
*CALL TYPSIZE
@DYALLOC.3839
*CALL TYPD1
@DYALLOC.3840
*CALL TYPDUMA
@DYALLOC.3841
*CALL TYPDUMO
@DYALLOC.3842
*CALL TYPDUMW
GKR1F401.279
*CALL TYPPTRA
@DYALLOC.3843
*CALL TYPPTRO
@DYALLOC.3844
*CALL TYPBND
@DYALLOC.3845
UPBOUND1.33
INTEGER UPBOUND1.34
& I_AO, ! atmosphere/Ocean indicator UPBOUND1.35
& ICODE ! Error code = 0 Normal Exit UPBOUND1.36
C ! > 0 Error Condition UPBOUND1.37
UPBOUND1.38
CHARACTER*(80) ANF0F304.43
& CMESSAGE ! Error message UPBOUND1.40
UPBOUND1.41
C* UPBOUND1.42
*CALL CSUBMODL
GDR3F305.2
*CALL CPPXREF
GDG0F401.1525
*CALL PPXLOOK
GDG0F401.1526
*CALL CLOOKADD
UPBOUND1.46
*CALL CTIME
UPBOUND1.47
*IF DEF,OCEAN,AND,DEF,BOUNDSO ORH2F401.73
*CALL CNTLOCN
ORH2F401.74
*ENDIF ORH2F401.75
UPBOUND1.49
C* UPBOUND1.54
C Local variables UPBOUND1.55
UPBOUND1.56
INTEGER UPBOUND1.57
& I, UPBOUND1.58
& JADDR, UPBOUND1.59
& NFTIN, UPBOUND1.60
& LEN_IO UPBOUND1.61
LOGICAL UPBOUND1.62
& PERIODIC ! true if periodic lateral boundary data UPBOUND1.63
UPBOUND1.64
REAL UPBOUND1.65
& A_IO UPBOUND1.66
UPBOUND1.67
C*L Subroutines called: UPBOUND1.68
EXTERNAL IOERROR,SETPOS,READFLDS,BUFFIN APB4F401.535
C* UPBOUND1.71
UPBOUND1.72
CL Internal structure UPBOUND1.73
UPBOUND1.74
ICODE=0 UPBOUND1.75
CMESSAGE=' ' UPBOUND1.76
UPBOUND1.77
*IF DEF,ATMOS,AND,-DEF,GLOBAL UPBOUND1.78
UPBOUND1.79
UPBOUND1.80
CL 1.1 Read atmosphere lateral boundary field, first step. UPBOUND1.81
UPBOUND1.82
IF (STEPim(a_im).EQ.0 .AND. I_AO.EQ.1) THEN GDR5F305.161
UPBOUND1.84
IF(BOUND_FIELDCODE(1).LE.0) THEN UPBOUND1.85
CMESSAGE= 'UP_BOUND: Boundary data update code, illegal UPBOUND1.86
& for limited area model' UPBOUND1.87
ICODE=1 UPBOUND1.88
RETURN UPBOUND1.89
END IF UPBOUND1.90
UPBOUND1.91
NFTIN=95 UPBOUND1.92
UPBOUND1.93
CL Find start position of data UPBOUND1.94
! Read in boundary data for timestep 0 APB4F401.536
APB4F401.537
CALL READFLDS
(NFTIN, RIM_LOOKUPSA, NBOUND_LOOKUP(1), APB4F401.538
& LOOKUP_BOUNDA, LEN1_LOOKUP, D1(JRIM), APB4F401.539
*IF -DEF,MPP APB1F402.250
& LENRIMDATA_A, FIXHD_BOUNDA(1,1), APB4F401.540
*ELSE APB1F402.251
& global_LENRIMDATA_A, FIXHD_BOUNDA(1,1), APB1F402.252
*ENDIF APB1F402.253
*CALL ARGPPX
APB4F401.541
& ICODE, CMESSAGE) APB4F401.542
APB4F401.543
IF (ICODE.GT.0) THEN APB4F401.544
write (6,*) 'Problem with READFLDS' APB4F401.545
write (6,*) 'Reading boundary data to d1(jrim) - Timestep 0' APB4F401.546
write (6,*) 'cmessage ',cmessage APB4F401.547
write (6,*) 'icode ',icode APB4F401.548
go to 9999 ! Return APB4F401.549
ENDIF APB4F401.550
APB4F401.551
NBOUND_LOOKUP(1) = NBOUND_LOOKUP(1)+RIM_LOOKUPSA APB4F401.552
APB4F401.553
! Read in boundary data for end of data interval APB4F401.554
APB4F401.555
CALL READFLDS
(NFTIN, RIM_LOOKUPSA, NBOUND_LOOKUP(1), APB4F401.556
& LOOKUP_BOUNDA, LEN1_LOOKUP, D1(JRIM_TENDENCY), APB4F401.557
*IF -DEF,MPP APB1F402.254
& LENRIMDATA_A, FIXHD_BOUNDA(1,1), APB4F401.558
*ELSE APB1F402.255
& global_LENRIMDATA_A, FIXHD_BOUNDA(1,1), APB1F402.256
*ENDIF APB1F402.257
*CALL ARGPPX
APB4F401.559
& ICODE, CMESSAGE) APB4F401.560
APB4F401.561
IF (ICODE.GT.0) THEN APB4F401.562
write (6,*) 'Problem with READFLDS' APB4F401.563
write (6,*) 'Reading boundary data to d1(jrim_tend)' APB4F401.564
write (6,*) 'Timestep 0' APB4F401.565
write (6,*) 'cmessage ',cmessage APB4F401.566
write (6,*) 'icode ',icode APB4F401.567
go to 9999 ! Return APB4F401.568
ENDIF APB4F401.569
APB4F401.570
NBOUND_LOOKUP(1) = NBOUND_LOOKUP(1)+RIM_LOOKUPSA APB4F401.571
UPBOUND1.131
DO 110 I=1,LENRIMDATA_A UPBOUND1.132
D1(JRIM_TENDENCY+I-1)=D1(JRIM_TENDENCY+I-1)-D1(JRIM+I-1) UPBOUND1.133
110 CONTINUE UPBOUND1.134
C Tendency per lateral boundary data interval - not per timestep UPBOUND1.135
UPBOUND1.136
END IF UPBOUND1.137
UPBOUND1.138
*ENDIF UPBOUND1.139
UPBOUND1.140
*IF DEF,ATMOS,AND,DEF,FLOOR UPBOUND1.141
UPBOUND1.142
CL 1.2 Read atmosphere lower boundary fields, first step UPBOUND1.143
UPBOUND1.144
IF (STEPim(a_im).EQ.0 .AND .I_AO.EQ.1) THEN GDR5F305.162
UPBOUND1.146
IF(BOUND_FIELDCODE(3).LE.0) THEN UPBOUND1.147
CMESSAGE= 'UP_BOUND: Boundary data update code illegal' UPBOUND1.148
ICODE=4 UPBOUND1.149
RETURN UPBOUND1.150
END IF UPBOUND1.151
UPBOUND1.152
NFTIN=96 UPBOUND1.153
UPBOUND1.154
CL Find start position of data UPBOUND1.155
UPBOUND1.156
JADDR=LOOKUP_BOUNDA(NADDR,NBOUND_LOOKUP(3))+ UPBOUND1.157
& FIXHD_BOUNDA(160,2)-2 UPBOUND1.158
CALL SETPOS
(NFTIN,JADDR,ICODE) GTD0F400.134
UPBOUND1.161
C Orography UPBOUND1.162
UPBOUND1.163
CALL BUFFIN
(NFTIN,D1(JOROG),P_FIELD,LEN_IO,A_IO) UPBOUND1.164
UPBOUND1.165
C Check for I/O Errors UPBOUND1.166
UPBOUND1.167
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.P_FIELD) THEN UPBOUND1.168
CALL IOERROR
('buffer in of lower boundary data',A_IO,LEN_IO UPBOUND1.169
& ,P_FIELD) UPBOUND1.170
ICODE=5 UPBOUND1.171
CMESSAGE='UP_BOUND I/O ERROR' UPBOUND1.172
RETURN UPBOUND1.173
END IF UPBOUND1.174
UPBOUND1.175
C Reads second field to calculate tendencies UPBOUND1.176
UPBOUND1.177
JADDR=LOOKUP_BOUNDA(NADDR,NBOUND_LOOKUP(3)+FLOORFLDSA) UPBOUND1.178
UPBOUND1.179
CALL BUFFIN
(NFTIN,D1(JOROG_TENDENCY),P_FIELD,LEN_IO,A_IO) UPBOUND1.180
UPBOUND1.181
C Check for I/O Errors UPBOUND1.182
UPBOUND1.183
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.P_FIELD) THEN UPBOUND1.184
CALL IOERROR
('buffer in of lower boundary data',A_IO,LEN_IO UPBOUND1.185
& ,P_FIELD) UPBOUND1.186
ICODE=6 UPBOUND1.187
CMESSAGE='UP_BOUND I/O ERROR' UPBOUND1.188
RETURN UPBOUND1.189
END IF UPBOUND1.190
NBOUND_LOOKUP(3)=NBOUND_LOOKUP(3)+FLOORFLDSA*2 UPBOUND1.191
DO 120 I=1,P_FIELD UPBOUND1.192
D1(JOROG_TENDENCY+I-1)=(D1(JOROG_TENDENCY+I-1)-D1( UPBOUND1.193
& JOROG+I-1)) UPBOUND1.194
120 CONTINUE UPBOUND1.195
C Tendency per orography boundary data interval - not per timestep UPBOUND1.196
UPBOUND1.197
END IF UPBOUND1.198
UPBOUND1.199
*ENDIF UPBOUND1.200
UPBOUND1.201
UPBOUND1.202
*IF DEF,OCEAN,AND,DEF,BOUNDSO UPBOUND1.203
UPBOUND1.204
CL 1.3 Read ocean lateral boundary field, first step. UPBOUND1.205
UPBOUND1.206
IF (STEPim(o_im).EQ.0 .AND .I_AO.EQ.2) THEN GDR5F305.163
UPBOUND1.208
IF(BOUND_FIELDCODE(2).LE.0) THEN UPBOUND1.209
CMESSAGE= 'UP_BOUND: Boundary data update code, illegal UPBOUND1.210
& for limited area model' UPBOUND1.211
ICODE=1 UPBOUND1.212
RETURN UPBOUND1.213
END IF UPBOUND1.214
UPBOUND1.215
PERIODIC=FIXHD_BOUNDO(10,1).EQ.2 UPBOUND1.216
UPBOUND1.217
NFTIN=98 UPBOUND1.218
UPBOUND1.219
CL Read fields for first data time UPBOUND1.220
UPBOUND1.221
CALL READFLDS
(NFTIN,RIM_LOOKUPSO,NBOUND_LOOKUP(2), GDG0F401.1527
& LOOKUP_BOUNDO, LEN1_LOOKUP, D1(joc_bounds_prev), GSI1F405.324
*IF -DEF,MPP GSI1F405.325
& LENRIMDATA_O, FIXHD_BOUNDO(1,1), GSI1F405.326
*ELSE GSI1F405.327
& global_LENRIMDATA_O, FIXHD_BOUNDO(1,1), GSI1F405.328
*ENDIF GSI1F405.329
*CALL ARGPPX
GDG0F401.1530
& ICODE,CMESSAGE) GDG0F401.1531
UPBOUND1.225
IF (L_OPRINT) THEN ORH2F401.76
WRITE(6,*)'UP_BOUND: Information for boundary data being read' UPBOUND1.226
WRITE(6,*)' Offset from model basis to boundary data is ', UPBOUND1.227
* BNDARY_OFFSETim(o_im),' time steps' GDR5F305.164
WRITE(6,*)' Number of fields in lookup is ',FIXHD_BOUNDO(152,1), UPBOUND1.229
* ' Number of fields per data time is ',RIM_LOOKUPSO UPBOUND1.230
WRITE(6,*)' Reading data starting at lookup position ', UPBOUND1.231
* NBOUND_LOOKUP(2) UPBOUND1.232
ENDIF ORH2F401.77
UPBOUND1.233
UPBOUND1.234
CL Set pointer for second boundary data time UPBOUND1.235
UPBOUND1.236
NBOUND_LOOKUP(2)=NBOUND_LOOKUP(2)+RIM_LOOKUPSO UPBOUND1.237
UPBOUND1.238
IF (NBOUND_LOOKUP(2).GT.FIXHD_BOUNDO(152,1).AND.PERIODIC) THEN UPBOUND1.239
NBOUND_LOOKUP(2)=1 UPBOUND1.240
END IF UPBOUND1.241
UPBOUND1.242
CL Read fields for second boundary data time unless end of data reached UPBOUND1.243
UPBOUND1.244
IF ((NBOUND_LOOKUP(2)-1).LE.FIXHD_BOUNDO(152,1)) THEN UPBOUND1.245
UPBOUND1.246
CALL READFLDS
(NFTIN,RIM_LOOKUPSO,NBOUND_LOOKUP(2), GDG0F401.1532
& LOOKUP_BOUNDO,LEN1_LOOKUP, GDG0F401.1533
& D1(joc_bounds_next), GSI1F405.330
*IF -DEF,MPP GSI1F405.331
& LENRIMDATA_O, FIXHD_BOUNDO(1,1), GSI1F405.332
*ELSE GSI1F405.333
& global_LENRIMDATA_O, FIXHD_BOUNDO(1,1), GSI1F405.334
*ENDIF GSI1F405.335
*CALL ARGPPX
GDG0F401.1536
& ICODE,CMESSAGE) GDG0F401.1537
UPBOUND1.250
IF (L_OPRINT) THEN ORH2F401.78
WRITE(6,*)'UP_BOUND: Information for boundary data being read' UPBOUND1.251
WRITE(6,*)' Offset from model basis to boundary data is ', UPBOUND1.252
* BNDARY_OFFSETim(o_im),' time steps' GDR5F305.165
WRITE(6,*)' Number of fields in lookup is ',FIXHD_BOUNDO(152,1), UPBOUND1.254
* ' Number of fields per data time is ',RIM_LOOKUPSO UPBOUND1.255
WRITE(6,*)' Reading data starting at lookup position ', UPBOUND1.256
* NBOUND_LOOKUP(2) UPBOUND1.257
ENDIF ORH2F401.79
UPBOUND1.264
CL Set pointer for next boundary data time UPBOUND1.265
UPBOUND1.266
NBOUND_LOOKUP(2)=NBOUND_LOOKUP(2)+RIM_LOOKUPSO UPBOUND1.267
UPBOUND1.268
IF(NBOUND_LOOKUP(2).GT.FIXHD_BOUNDO(152,1).AND.PERIODIC) THEN UPBOUND1.269
NBOUND_LOOKUP(2)=1 UPBOUND1.270
END IF UPBOUND1.271
UPBOUND1.272
ENDIF UPBOUND1.280
UPBOUND1.281
END IF UPBOUND1.282
UPBOUND1.283
UPBOUND1.284
CL 1.4 Read ocean lower boundary fields, first step UPBOUND1.285
UPBOUND1.286
C** N O T Y E T A V A I L A B LE UPBOUND1.287
UPBOUND1.288
*ENDIF UPBOUND1.289
UPBOUND1.290
UPBOUND1.291
*IF DEF,ATMOS,AND,-DEF,GLOBAL,OR,DEF,ATMOS,AND,DEF,FLOOR UPBOUND1.292
UPBOUND1.293
NFTIN=95 UPBOUND1.294
UPBOUND1.295
CL 2.1 Read atmosphere lateral boundary fields, general update step UPBOUND1.296
UPBOUND1.297
IF (STEPim(a_im).GT.0 .AND. I_AO.EQ.1) THEN GDR5F305.167
UPBOUND1.299
IF (BOUND_FIELDCODE(1).GT.0 .AND. GDR5F305.168
& MOD(STEPim(a_im),RIM_STEPSA).EQ.0) THEN GDR5F305.169
C Abort model if no data left UPBOUND1.305
UPBOUND1.306
IF(LOOKUP_BOUNDA(NADDR,NBOUND_LOOKUP(1)-RIM_LOOKUPSA)+ UPBOUND1.307
*IF -DEF,MPP APB1F402.258
& LENRIMDATA_A .GE. FIXHD_BOUNDA(161,1)) THEN GDG2F304.15
*ELSE APB1F402.259
& global_LENRIMDATA_A .GE. FIXHD_BOUNDA(161,1)) THEN APB1F402.260
*ENDIF APB1F402.261
UPBOUND1.309
CMESSAGE= 'UP_BOUND: No boundary data update data left UPBOUND1.310
& for limited area model' UPBOUND1.311
ICODE=11 UPBOUND1.312
RETURN UPBOUND1.313
UPBOUND1.314
ELSE UPBOUND1.315
GDR1F400.238
CALL READFLDS
(NFTIN, RIM_LOOKUPSA, NBOUND_LOOKUP(1), APB4F401.572
& LOOKUP_BOUNDA, LEN1_LOOKUP, APB4F401.573
& D1(JRIM_TENDENCY), APB4F401.574
*IF -DEF,MPP APB1F402.262
& LENRIMDATA_A, FIXHD_BOUNDA(1,1), APB4F401.575
*ELSE APB1F402.263
& global_LENRIMDATA_A, FIXHD_BOUNDA(1,1), APB1F402.264
*ENDIF APB1F402.265
*CALL ARGPPX
APB4F401.576
& ICODE, CMESSAGE) APB4F401.577
APB4F401.578
IF (ICODE.GT.0) THEN APB4F401.579
write (6,*) 'Problem with READFLDS' APB4F401.580
write (6,*) 'Reading boundary data to d1(jrim_tend)' APB4F401.581
write (6,*) 'general update timestep' APB4F401.582
write (6,*) 'cmessage ',cmessage APB4F401.583
write (6,*) 'icode ',icode APB4F401.584
go to 9999 ! Return APB4F401.585
ENDIF APB4F401.586
APB4F401.587
GDR1F400.268
DO 210 I=1,LENRIMDATA_A UPBOUND1.332
D1(JRIM_TENDENCY+I-1)=(D1(JRIM_TENDENCY+I-1)-D1(JRIM+ UPBOUND1.333
& I-1)) UPBOUND1.334
210 CONTINUE UPBOUND1.335
C Tendency per lateral boundary data interval - not per timestep UPBOUND1.336
C NB D1(JRIM) updated in BOUNDVAL - so contains previous time rim UPBOUND1.337
C boundary values UPBOUND1.338
UPBOUND1.339
NBOUND_LOOKUP(1)=NBOUND_LOOKUP(1)+RIM_LOOKUPSA UPBOUND1.340
UPBOUND1.341
ENDIF UPBOUND1.342
ENDIF UPBOUND1.343
UPBOUND1.344
CL 2.2 Read atmosphere lower boundary fields, general update step UPBOUND1.345
UPBOUND1.346
NFTIN=96 RB300393.40
UPBOUND1.348
IF (BOUND_FIELDCODE(3).GT.0) THEN PXUPBND.1
IF (MOD(STEPim(a_im),FLOOR_STEPSA).EQ.0) THEN PXUPBND.2
JADDR=LOOKUP_BOUNDA(NADDR,NBOUND_LOOKUP(3))+ UPBOUND1.351
& FIXHD_BOUNDA(160,2)-2 UPBOUND1.352
UPBOUND1.353
C Cancel update if no data left, and set tendencies to zero UPBOUND1.354
UPBOUND1.355
IF(LOOKUP_BOUNDA(NADDR,NBOUND_LOOKUP(1)-RIM_LOOKUPSA)+ UPBOUND1.356
*IF -DEF,MPP APB1F402.266
& LENRIMDATA_A.GE.FIXHD_BOUNDA(161,2)) THEN UPBOUND1.357
*ELSE APB1F402.267
& global_LENRIMDATA_A.GE.FIXHD_BOUNDA(161,2)) THEN APB1F402.268
*ENDIF APB1F402.269
UPBOUND1.358
BOUND_FIELDCODE(3)=0 UPBOUND1.359
DO 221 I=1,P_FIELD UPBOUND1.360
D1(JOROG_TENDENCY+I-1)=0 UPBOUND1.361
221 CONTINUE UPBOUND1.362
IF (FLOORFLDSA.GT.1) THEN UPBOUND1.363
DO 222 I=1,P_FIELD UPBOUND1.364
D1(JOROG_SD_TENDENCY+I-1)=0 UPBOUND1.365
222 CONTINUE UPBOUND1.366
ENDIF UPBOUND1.367
ELSE UPBOUND1.368
CALL SETPOS
(NFTIN,JADDR,ICODE) GTD0F400.136
CALL BUFFIN
(NFTIN,D1(JOROG_TENDENCY),P_FIELD,LEN_IO,A_IO) UPBOUND1.371
UPBOUND1.372
C Check for I/O Errors UPBOUND1.373
UPBOUND1.374
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.P_FIELD) THEN UPBOUND1.375
CALL IOERROR
('buffer in of lateral boundary data',A_IO, UPBOUND1.376
& LEN_IO ,P_FIELD) UPBOUND1.377
ICODE=10 UPBOUND1.378
CMESSAGE='UP_BOUND I/O ERROR' UPBOUND1.379
RETURN UPBOUND1.380
END IF UPBOUND1.381
UPBOUND1.382
NBOUND_LOOKUP(3)=NBOUND_LOOKUP(3)+FLOORFLDSA UPBOUND1.383
UPBOUND1.384
DO 220 I=1,P_FIELD UPBOUND1.385
D1(JOROG_TENDENCY+I-1)=(D1(JOROG_TENDENCY+I-1)-D1(JOROG+ UPBOUND1.386
& I-1)) UPBOUND1.387
220 CONTINUE UPBOUND1.388
C Tendency per orography boundary data interval - not per timestep UPBOUND1.389
UPBOUND1.390
END IF UPBOUND1.391
END IF PXUPBND.3
END IF UPBOUND1.392
ENDIF UPBOUND1.393
UPBOUND1.394
*ENDIF UPBOUND1.395
UPBOUND1.396
*IF DEF,OCEAN,AND,DEF,BOUNDSO,OR,DEF,OCEAN,AND,DEF,FLOOR UPBOUND1.397
UPBOUND1.398
NFTIN=98 UPBOUND1.399
UPBOUND1.400
CL 2.3 Read ocean lateral boundary fields, general update step UPBOUND1.401
UPBOUND1.402
IF (STEPim(o_im).GT.0 .AND. I_AO.EQ.2) THEN GDR5F305.172
UPBOUND1.404
IF (BOUND_FIELDCODE(2).GT.0) THEN UPBOUND1.405
UPBOUND1.406
PERIODIC=FIXHD_BOUNDO(10,1).EQ.2 UPBOUND1.407
CL Move next tstep data into prev tstep data GSI1F405.336
do i=1, LENRIMDATA_O GSI1F405.337
D1(joc_bounds_prev+i-1)=D1(joc_bounds_next+i-1) GSI1F405.338
enddo GSI1F405.339
GSI1F405.340
CL Update the step number of the "previous" boundary field's data GSI1F405.341
O_BDY_STEP_PREV = O_BDY_STEP_PREV + RIM_STEPSO GSI1F405.342
GSI1F405.343
WRITE(6,*) 'O_BDY_STEP_PREV= ',O_BDY_STEP_PREV, ' O_STEP= ', GSI1F405.344
& STEPim(o_im) GSI1F405.345
GSI1F405.346
CL Read fields unless end of data is reached GSI1F405.347
UPBOUND1.410
IF ((NBOUND_LOOKUP(2)-1).LE.FIXHD_BOUNDO(152,1)) THEN UPBOUND1.411
UPBOUND1.412
CALL READFLDS
(NFTIN,RIM_LOOKUPSO,NBOUND_LOOKUP(2), GDG0F401.1538
& LOOKUP_BOUNDO,LEN1_LOOKUP, GDG0F401.1539
& D1(joc_bounds_next), GSI1F405.348
*IF -DEF,MPP GSI1F405.349
& LENRIMDATA_O, FIXHD_BOUNDO(1,1), GSI1F405.350
*ELSE GSI1F405.351
& global_LENRIMDATA_O, FIXHD_BOUNDO(1,1), GSI1F405.352
*ENDIF GSI1F405.353
*CALL ARGPPX
GDG0F401.1542
& ICODE,CMESSAGE) GDG0F401.1543
GDG0F401.1544
UPBOUND1.416
IF (L_OPRINT) THEN ORH2F401.80
WRITE(6,*)'UP_BOUND: Information for boundary data being read' UPBOUND1.417
WRITE(6,*)' Offset from model basis to boundary data is ', UPBOUND1.418
& BNDARY_OFFSETim(o_im),' time steps' GDR5F305.173
WRITE(6,*)' Number of fields in lookup is ',FIXHD_BOUNDO(152,1), UPBOUND1.420
* ' Number of fields per data time is ',RIM_LOOKUPSO UPBOUND1.421
WRITE(6,*)' Reading data starting at lookup position ', UPBOUND1.422
* NBOUND_LOOKUP(2) UPBOUND1.423
ENDIF ORH2F401.81
UPBOUND1.429
NBOUND_LOOKUP(2)=NBOUND_LOOKUP(2)+RIM_LOOKUPSO UPBOUND1.430
UPBOUND1.431
IF(NBOUND_LOOKUP(2).GT.FIXHD_BOUNDO(152,1).AND.PERIODIC)THEN UPBOUND1.432
NBOUND_LOOKUP(2)=1 UPBOUND1.433
END IF UPBOUND1.434
UPBOUND1.435
ELSE ! end of time series reached UPBOUND1.436
UPBOUND1.437
CMESSAGE='UP_BOUND: End of boundary data time has been met UPBOUND1.438
& for limited area ocean model' UPBOUND1.439
ICODE=11 UPBOUND1.440
RETURN UPBOUND1.441
UPBOUND1.442
ENDIF UPBOUND1.443
UPBOUND1.444
ENDIF UPBOUND1.445
UPBOUND1.446
CL 2.4 Read ocean lower boundary fields, first step UPBOUND1.447
UPBOUND1.448
C** N O T Y E T A V A I L A B LE UPBOUND1.449
UPBOUND1.450
ENDIF UPBOUND1.451
*ENDIF UPBOUND1.452
UPBOUND1.453
9999 CONTINUE APB4F401.588
RETURN UPBOUND1.454
END UPBOUND1.455
UPBOUND1.456
*ENDIF UPBOUND1.457