*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