*IF DEF,A12_1B                                                             ARB2F400.3      
C ******************************COPYRIGHT******************************    GTS2F400.253    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.254    
C                                                                          GTS2F400.255    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.256    
C restrictions as set forth in the contract.                               GTS2F400.257    
C                                                                          GTS2F400.258    
C                Meteorological Office                                     GTS2F400.259    
C                London Road                                               GTS2F400.260    
C                BRACKNELL                                                 GTS2F400.261    
C                Berkshire UK                                              GTS2F400.262    
C                RG12 2SZ                                                  GTS2F400.263    
C                                                                          GTS2F400.264    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.265    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.266    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.267    
C Modelling at the above address.                                          GTS2F400.268    
C ******************************COPYRIGHT******************************    GTS2F400.269    
C                                                                          GTS2F400.270    
CLL   SUBROUTINE ADV_U_GD -------------------------------------------      ADVUGD1A.3      
CLL                                                                        ADVUGD1A.4      
CLL   PURPOSE:   CALCULATES ADVECTION INCREMENTS TO A FIELD AT A           ADVUGD1A.5      
CLL              SINGLE MODEL LEVEL USING AN EQUATION OF THE FORM(38).     ADVUGD1A.6      
CLL   NOT SUITABLE FOR SINGLE COLUMN USE.                                  ADVUGD1A.7      
CLL                                                                        ADVUGD1A.8      
CLL   VERSION FOR CRAY Y-MP                                                ADVUGD1A.9      
CLL                                                                        ADVUGD1A.10     
CLL   WRITTEN BY M.H MAWSON.                                               ADVUGD1A.11     
CLL                                                                        ADVUGD1A.12     
CLL  Model            Modification history from model version 3.0:         ADVUGD1A.13     
CLL version  Date                                                          ADVUGD1A.14     
CLL                                                                        ADVUGD1A.15     
CLL                                                                        AAD2F304.712    
CLL   3.4    06/08/94 Micro tasking directives inserted and                AAD2F304.713    
CLL                   code restructured                                    AAD2F304.714    
CLL                   to improve parallel efficiency on C90.               AAD2F304.715    
CLL                   Authors: A. Dickinson, D. Salmond                    AAD2F304.716    
CLL                   Reviewer: M. Mawson                                  AAD2F304.717    
CLL                                                                        AAD2F304.718    
CLL                                                                        AAD2F304.719    
CLL   3.4   23/06/94  DEF NOWHBR replaced by LOGICAL LWHITBROM             GSS1F304.814    
CLL                                                  S.J.Swarbrick         GSS1F304.815    
!     3.5    28/03/95 MPP code: Change updateable area and                 APB0F305.616    
!                     remove explicit wrap around calcs.  P.Burton         APB0F305.617    
!     4.1    29/04/96 Remove MPP code (new ADVUGD1C version for MPP)       APB0F401.811    
!                     and add TYPFLDPT arguments                           APB0F401.812    
CLL                                                                        GSS1F304.816    
CLL   PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4,       ADVUGD1A.16     
CLL                         STANDARD B. VERSION 2, DATED 18/01/90          ADVUGD1A.17     
CLL                                                                        ADVUGD1A.18     
CLL   LOGICAL COMPONENTS COVERED: P122                                     ADVUGD1A.19     
CLL                                                                        ADVUGD1A.20     
CLL   PROJECT TASK: P1                                                     ADVUGD1A.21     
CLL                                                                        ADVUGD1A.22     
CLL   DOCUMENTATION:       THE EQUATION USED IS (37)                       ADVUGD1A.23     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10     ADVUGD1A.24     
CLL                        M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON           ADVUGD1A.25     
CLLEND-------------------------------------------------------------        ADVUGD1A.26     
CLL                                                                        ADVUGD1A.27     
C*L   ARGUMENTS:---------------------------------------------------        ADVUGD1A.28     

      SUBROUTINE ADV_U_GD                                                   12ADVUGD1A.29     
     1                   (FIELD_LOWER,FIELD,FIELD_UPPER,U,V,               AAD2F304.720    
     1                   ETADOT_LOWER,ETADOT_UPPER,                        AAD2F304.721    
     2                    SEC_U_LATITUDE,FIELD_INC,NUX,NUY,U_FIELD,        ADVUGD1A.31     
     3                    ROW_LENGTH,                                      APB0F401.813    
*CALL ARGFLDPT                                                             APB0F401.814    
     4                    ADVECTION_TIMESTEP,                              ADVUGD1A.33     
     5                    LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,    ADVUGD1A.34     
     6                    SEC_P_LATITUDE,BRSP,                             AAD2F304.722    
     7                    L_SECOND,LWHITBROM)                              AAD2F304.723    
                                                                           ADVUGD1A.37     
      IMPLICIT NONE                                                        ADVUGD1A.38     
                                                                           ADVUGD1A.39     
      INTEGER                                                              ADVUGD1A.40     
     *  U_FIELD             !IN DIMENSION OF FIELDS ON VELOCITY GRID       ADVUGD1A.41     
     *, ROW_LENGTH          !IN NUMBER OF POINTS PER ROW                   ADVUGD1A.42     
                                                                           APB0F401.815    
! All TYPFLDPT arguments are intent IN                                     APB0F401.816    
*CALL TYPFLDPT                                                             APB0F401.817    
                                                                           ADVUGD1A.45     
      REAL                                                                 ADVUGD1A.46     
     * U(U_FIELD)           !IN ADVECTING U FIELD MASS-WEIGHTED AND        ADVUGD1A.47     
     *                      ! HELD AT P POINTS. FIRST POINT OF FIELD       ADVUGD1A.48     
     *                      ! IS FIRST P POINT ON SECOND ROW OF P-GRID.    ADVUGD1A.49     
     *,V(U_FIELD)           !IN ADVECTING V FIELD MASS-WEIGHTED AND        ADVUGD1A.50     
     *                      ! HELD AT P POINTS. FIRST POINT OF FIELD       ADVUGD1A.51     
     *                      ! IS FIRST P POINT ON SECOND ROW OF P-GRID.    ADVUGD1A.52     
     *,ETADOT_UPPER(U_FIELD)!IN ADVECTING VERTICAL VELOC AT K+1/2,         AAD2F304.724    
     *                      ! MASS-WEIGHTED.                               ADVUGD1A.54     
     *,ETADOT_LOWER(U_FIELD)!IN ADVECTING VERTICAL VELOC AT K-1/2,         AAD2F304.725    
     *                      !   MASS-WEIGHTED.                             AAD2F304.726    
     *,FIELD(U_FIELD)       !IN FIELD TO BE ADVECTED.                      ADVUGD1A.55     
     *,FIELD_UPPER(U_FIELD) !IN FIELD TO BE ADVECTED AT LEVEL + 1 .        ADVUGD1A.56     
     *,FIELD_LOWER(U_FIELD) !IN FIELD TO BE ADVECTED AT LEVEL - 1 .        AAD2F304.727    
     *,NUX(U_FIELD)   !IN HOLDS PARAMETER NU FOR EAST-WEST ADVECTION.      ADVUGD1A.57     
     *,NUY(U_FIELD)   !IN HOLDS PARAMETER NU FOR NORTH-SOUTH ADVECTION.    ADVUGD1A.58     
     *,SEC_U_LATITUDE(U_FIELD) !IN HOLDS 1/COS(PHI) AT U POINTS.           ADVUGD1A.59     
     *,SEC_P_LATITUDE(U_FIELD) !IN HOLDS 1/COS(PHI) AT P POINTS.           ADVUGD1A.60     
     *,ADVECTION_TIMESTEP   !IN                                            ADVUGD1A.61     
     *,LATITUDE_STEP_INVERSE   !IN 1/(DELTA PHI)                           ADVUGD1A.62     
     *,LONGITUDE_STEP_INVERSE  !IN 1/(DELTA LAMDA)                         ADVUGD1A.63     
                                                                           ADVUGD1A.64     
      REAL                                                                 ADVUGD1A.65     
     * BRSP(U_FIELD)  !IN BRSP TERM AT LEVEL+1/2 (SEE DOC.PAPER            AAD2F304.728    
     *                      ! NO 10)                                       ADVUGD1A.69     
                                                                           ADVUGD1A.70     
      REAL                                                                 ADVUGD1A.71     
     * FIELD_INC(U_FIELD)   !OUT HOLDS INCREMENT TO FIELD.                 ADVUGD1A.72     
                                                                           ADVUGD1A.73     
      REAL                                                                 ADVUGD1A.74     
     * VERTICAL_FLUX(U_FIELD) !INOUT HOLDS VERTICAL FLUX OF FIELD          ADVUGD1A.75     
     *                        ! BETWEEN TWO LEVELS.                        ADVUGD1A.76     
                                                                           ADVUGD1A.77     
C LOGICAL VARIABLE                                                         ADVUGD1A.78     
      LOGICAL                                                              ADVUGD1A.79     
     *  L_SECOND     ! SET TO TRUE IF NU_BASIC IS ZERO.                    ADVUGD1A.80     
     * ,LWHITBROM    ! Switch for White & Bromley terms                    GSS1F304.817    
C                                                                          ADVUGD1A.82     
C*---------------------------------------------------------------------    ADVUGD1A.83     
                                                                           ADVUGD1A.84     
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    ADVUGD1A.85     
C DEFINE LOCAL ARRAYS: 3 ARE REQUIRED                                      ADVUGD1A.86     
                                                                           ADVUGD1A.87     
      REAL                                                                 ADVUGD1A.88     
     * WORK(U_FIELD)      ! GENERAL WORK-SPACE.                            ADVUGD1A.89     
     *,U_TERM(U_FIELD)    ! HOLDS U ADVECTION TERM FROM EQUATION (37)      ADVUGD1A.90     
     *,V_TERM(U_FIELD)    ! HOLDS V ADVECTION TERM FROM EQUATION (37)      ADVUGD1A.91     
C*---------------------------------------------------------------------    ADVUGD1A.92     
C DEFINE LOCAL VARIABLES                                                   ADVUGD1A.93     
                                                                           ADVUGD1A.94     
C REAL SCALARS                                                             ADVUGD1A.95     
      REAL                                                                 ADVUGD1A.96     
     * SCALAR1,SCALAR2                                                     AAD2F304.729    
                                                                           ADVUGD1A.98     
C COUNT VARIABLES FOR DO LOOPS ETC.                                        ADVUGD1A.99     
      INTEGER                                                              ADVUGD1A.100    
     *  I,IJ,IK,IL,J                                                       ADVUGD1A.101    
                                                                           ADVUGD1A.102    
C*L   NO EXTERNAL SUBROUTINE CALLS:------------------------------------    ADVUGD1A.103    
C*---------------------------------------------------------------------    ADVUGD1A.104    
                                                                           ADVUGD1A.105    
CL    MAXIMUM VECTOR LENGTH ASSUMED IS END_U_UPDATE-START_U_UPDATE+1       ADVUGD1A.106    
CL---------------------------------------------------------------------    ADVUGD1A.107    
CL    INTERNAL STRUCTURE.                                                  ADVUGD1A.108    
CL---------------------------------------------------------------------    ADVUGD1A.109    
CL                                                                         ADVUGD1A.110    
CL---------------------------------------------------------------------    ADVUGD1A.111    
CL    SECTION 1.     CALCULATE U_TERM IN EQUATION (37).                    ADVUGD1A.112    
CL---------------------------------------------------------------------    ADVUGD1A.113    
                                                                           ADVUGD1A.114    
C----------------------------------------------------------------------    ADVUGD1A.115    
CL    SECTION 1.1    CALCULATE TERM U D(FIELD)/D(LAMDA).                   ADVUGD1A.116    
C----------------------------------------------------------------------    ADVUGD1A.117    
                                                                           ADVUGD1A.118    
C CALCULATE TERM AT ALL POINTS EXCEPT LAST AND STORE IN WORK.              ADVUGD1A.119    
! Loop over field, missing top and bottom rows and last point.             APB0F401.818    
      DO 110 I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                   APB0F401.819    
        WORK(I) = .5*(U(I+1)+U(I+1-ROW_LENGTH))*LONGITUDE_STEP_INVERSE*    ADVUGD1A.121    
     *             (FIELD(I+1) - FIELD(I))                                 ADVUGD1A.122    
 110  CONTINUE                                                             ADVUGD1A.123    
                                                                           ADVUGD1A.124    
*IF DEF,GLOBAL                                                             ADVUGD1A.125    
C IF GLOBAL MODEL RECALCULATE END-POINT VALUE.                             ADVUGD1A.126    
! Loop over last point of each row, missing top and bottom rows.           APB0F401.820    
      DO 112 I=START_POINT_NO_HALO+LAST_ROW_PT-1,                          APB0F401.821    
     &         END_U_POINT_NO_HALO,ROW_LENGTH                              APB0F401.822    
        WORK(I) = .5*(U(I+1-ROW_LENGTH)+U(I+1-2*ROW_LENGTH))               ADVUGD1A.128    
     *             *LONGITUDE_STEP_INVERSE*                                ADVUGD1A.129    
     *              (FIELD(I+1-ROW_LENGTH) - FIELD(I))                     ADVUGD1A.130    
 112  CONTINUE                                                             ADVUGD1A.131    
*ENDIF                                                                     ADVUGD1A.132    
                                                                           ADVUGD1A.133    
C----------------------------------------------------------------------    ADVUGD1A.134    
CL    SECTION 1.2    CALCULATE U ADVECTION TERM IN EQUATION (37).          ADVUGD1A.135    
CL                   IF L_SECOND=TRUE ONLY DO SECOND ORDER ADVECTION.      ADVUGD1A.136    
C----------------------------------------------------------------------    ADVUGD1A.137    
                                                                           ADVUGD1A.138    
      IF(L_SECOND) THEN                                                    ADVUGD1A.139    
*IF DEF,GLOBAL                                                             ADVUGD1A.140    
                                                                           ADVUGD1A.141    
! Loop over field, missing top and bottom rows and first point.            APB0F401.823    
        DO J=START_POINT_NO_HALO+1,END_U_POINT_NO_HALO                     APB0F401.824    
          U_TERM(J) = .5*(WORK(J)+WORK(J-1))                               ADVUGD1A.143    
        END DO                                                             ADVUGD1A.144    
                                                                           ADVUGD1A.145    
C CALCULATE  VALUES AT FIRST POINTS ON A ROW.                              ADVUGD1A.146    
                                                                           ADVUGD1A.147    
CFPP$ NODEPCHK                                                             ADVUGD1A.148    
! Fujitsu vectorization directive                                          GRB0F405.589    
!OCL NOVREC                                                                GRB0F405.590    
! Loop over first point of each row, missing top and bottom rows.          APB0F401.825    
        DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO,ROW_LENGTH            APB0F401.826    
          U_TERM(I) = .5*(WORK(I)+WORK(I+ROW_LENGTH-1))                    ADVUGD1A.150    
        END DO                                                             ADVUGD1A.151    
                                                                           ADVUGD1A.152    
*ELSE                                                                      ADVUGD1A.153    
C LIMITED AREA MODEL. VALUES NOT CALCULATED AT FIRST,SECOND,NEXT TO LAST   ADVUGD1A.154    
C AND LAST ON A ROW.                                                       ADVUGD1A.155    
                                                                           ADVUGD1A.156    
! Loop over field, missing top and bottom rows and first and last          APB0F401.827    
! points.                                                                  APB0F401.828    
        DO J=START_POINT_NO_HALO+1,END_U_POINT_NO_HALO-1                   APB0F401.829    
          U_TERM(J) = .5*(WORK(J)+WORK(J-1))                               ADVUGD1A.158    
        END DO                                                             ADVUGD1A.159    
                                                                           ADVUGD1A.160    
C CORNER VALUES                                                            ADVUGD1A.161    
        U_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.830    
        U_TERM(END_U_POINT_NO_HALO)=0.0                                    APB0F401.831    
*ENDIF                                                                     ADVUGD1A.164    
      ELSE                                                                 ADVUGD1A.165    
*IF DEF,GLOBAL                                                             ADVUGD1A.166    
C LOOP OVER ALL POINTS BUT DON'T DO FIRST,SECOND AND LAST ON A ROW AS      ADVUGD1A.167    
C THEY NEED SPECIAL TREATMENT DUE TO FOURTH ORDER SCHEME.                  ADVUGD1A.168    
                                                                           ADVUGD1A.169    
! Loop over field, missing top and bottom rows, first two points           APB0F401.832    
! and last point.                                                          APB0F401.833    
        DO 120 J=START_POINT_NO_HALO+2,END_U_POINT_NO_HALO-1               APB0F401.834    
          U_TERM(J) = (1.+NUX(J))*.5*(WORK(J)+WORK(J-1))-NUX(J)*.5*        ADVUGD1A.171    
     *                  (WORK(J+1)+WORK(J-2))                              ADVUGD1A.172    
 120    CONTINUE                                                           ADVUGD1A.173    
                                                                           ADVUGD1A.174    
C CALCULATE  VALUES AT FIRST,SECOND AND LAST POINTS ON A ROW.              ADVUGD1A.175    
                                                                           ADVUGD1A.176    
CFPP$ NODEPCHK                                                             ADVUGD1A.177    
! Fujitsu vectorization directive                                          GRB0F405.591    
!OCL NOVREC                                                                GRB0F405.592    
! Loop over first point of rows, missing top and bottom rows.              APB0F401.835    
        DO 124 I=START_POINT_NO_HALO,END_U_POINT_NO_HALO,ROW_LENGTH        APB0F401.836    
          IJ =I+LAST_ROW_PT-1  ! last point on row                         APB0F401.837    
          IK = IJ - 1                                                      ADVUGD1A.180    
          IL = I + 1                                                       ADVUGD1A.181    
C FIRST POINT.                                                             ADVUGD1A.182    
          U_TERM(I) = (1.+NUX(I))*.5*(WORK(I)+WORK(IJ))-NUX(I)*.5*         ADVUGD1A.183    
     *                   (WORK(IL)+WORK(IK))                               ADVUGD1A.184    
C SECOND POINT.                                                            ADVUGD1A.185    
          U_TERM(IL) = (1.+NUX(IL))*.5*(WORK(IL)+WORK(I))-NUX(IL)*.5*      ADVUGD1A.186    
     *                  (WORK(I+2)+WORK(IJ))                               ADVUGD1A.187    
C LAST POINT.                                                              ADVUGD1A.188    
          U_TERM(IJ) = (1.+NUX(IJ))*.5*(WORK(IJ)+WORK(IK))-NUX(IJ)*.5*     ADVUGD1A.189    
     *                  (WORK(I)+WORK(IK-1))                               ADVUGD1A.190    
 124    CONTINUE                                                           ADVUGD1A.191    
                                                                           ADVUGD1A.192    
*ELSE                                                                      ADVUGD1A.193    
C LIMITED AREA MODEL. VALUES NOT CALCULATED AT FIRST,SECOND,NEXT TO LAST   ADVUGD1A.194    
C AND LAST ON A ROW.                                                       ADVUGD1A.195    
                                                                           ADVUGD1A.196    
! Loop over field, missing top and bottom rows, first two points           APB0F401.838    
! and last two points.                                                     APB0F401.839    
        DO 120 J=START_POINT_NO_HALO+2,END_U_POINT_NO_HALO-2               APB0F401.840    
          U_TERM(J) = (1.+NUX(J))*.5*(WORK(J)+WORK(J-1)) - NUX(J)*.5*      ADVUGD1A.198    
     *                  (WORK(J+1)+WORK(J-2))                              ADVUGD1A.199    
 120    CONTINUE                                                           ADVUGD1A.200    
                                                                           ADVUGD1A.201    
C CALCULATE  VALUES AT SECOND AND NEXT TO LAST POINTS ON A ROW.            ADVUGD1A.202    
C THESE VALUES ARE JUST SECOND ORDER.                                      ADVUGD1A.203    
                                                                           ADVUGD1A.204    
! Loop over first point of rows, missing top and bottom rows               APB0F401.841    
        DO 124 I=START_POINT_NO_HALO,END_U_POINT_NO_HALO,ROW_LENGTH        APB0F401.842    
          IK = I+LAST_ROW_PT-2  ! penultimate point on row                 APB0F401.843    
          IL = I + 1                                                       ADVUGD1A.207    
C SECOND POINT.                                                            ADVUGD1A.208    
          U_TERM(IL) = .5*(WORK(IL)+WORK(I))                               ADVUGD1A.209    
C NEXT TO LAST POINT.                                                      ADVUGD1A.210    
          U_TERM(IK) = .5*(WORK(IK)+WORK(IK-1))                            ADVUGD1A.211    
 124    CONTINUE                                                           ADVUGD1A.212    
C         CORNER VALUES                                                    ADVUGD1A.213    
C                                                                          ADVUGD1A.214    
        U_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.844    
        U_TERM(END_U_POINT_NO_HALO)=0.0                                    APB0F401.845    
C                                                                          ADVUGD1A.217    
                                                                           ADVUGD1A.218    
*ENDIF                                                                     ADVUGD1A.219    
      END IF                                                               ADVUGD1A.220    
                                                                           ADVUGD1A.221    
CL                                                                         ADVUGD1A.222    
CL---------------------------------------------------------------------    ADVUGD1A.223    
CL    SECTION 2.     CALCULATE V_TERM IN EQUATION (37).                    ADVUGD1A.224    
CL---------------------------------------------------------------------    ADVUGD1A.225    
                                                                           ADVUGD1A.226    
C----------------------------------------------------------------------    ADVUGD1A.227    
CL    SECTION 2.1    CALCULATE TERM V D(FIELD)/D(PHI).                     ADVUGD1A.228    
C----------------------------------------------------------------------    ADVUGD1A.229    
                                                                           ADVUGD1A.230    
C CALCULATE TERM AT ALL POINTS EXCEPT LAST AND STORE IN WORK.              ADVUGD1A.231    
! Loop over field, missing bottom row and last point.                      APB0F401.846    
      DO 210 I=START_POINT_NO_HALO-ROW_LENGTH,END_U_POINT_NO_HALO-1        APB0F401.847    
        WORK(I) = .5*(V(I)+V(I+1))*LATITUDE_STEP_INVERSE*                  ADVUGD1A.233    
     *             (FIELD(I) - FIELD(I+ROW_LENGTH))                        ADVUGD1A.234    
 210  CONTINUE                                                             ADVUGD1A.235    
                                                                           ADVUGD1A.236    
*IF DEF,GLOBAL                                                             ADVUGD1A.237    
C IF GLOBAL MODEL RECALCULATE END-POINT VALUE.                             ADVUGD1A.238    
! Loop over last point of rows, missing bottom row.                        APB0F401.848    
      DO 212 I=START_POINT_NO_HALO+LAST_ROW_PT-1-ROW_LENGTH,               APB0F401.849    
     &         END_U_POINT_NO_HALO,ROW_LENGTH                              APB0F401.850    
        WORK(I) = .5*(V(I)+V(I-ROW_LENGTH+1))*LATITUDE_STEP_INVERSE*       ADVUGD1A.240    
     *             (FIELD(I) - FIELD(I+ROW_LENGTH))                        ADVUGD1A.241    
 212  CONTINUE                                                             ADVUGD1A.242    
*ENDIF                                                                     ADVUGD1A.243    
                                                                           ADVUGD1A.244    
C----------------------------------------------------------------------    ADVUGD1A.245    
CL    SECTION 2.2    CALCULATE V ADVECTION TERM IN EQUATION (37).          ADVUGD1A.246    
CL                   IF L_SECOND=TRUE ONLY DO SECOND ORDER ADVECTION.      ADVUGD1A.247    
C----------------------------------------------------------------------    ADVUGD1A.248    
                                                                           ADVUGD1A.249    
      IF(L_SECOND) THEN                                                    ADVUGD1A.250    
*IF DEF,GLOBAL                                                             ADVUGD1A.251    
C GLOBAL MODEL.                                                            ADVUGD1A.252    
! Loop over field, missing top and bottomrows.                             APB0F401.851    
        DO I=START_POINT_NO_HALO,                                          APB0F401.852    
     &       END_U_POINT_NO_HALO                                           APB0F401.853    
          V_TERM(I) = .5*(WORK(I-ROW_LENGTH)+WORK(I))                      ADVUGD1A.256    
        END DO                                                             ADVUGD1A.257    
                                                                           ADVUGD1A.258    
*ELSE                                                                      ADVUGD1A.271    
C LIMITED AREA MODEL.                                                      ADVUGD1A.272    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO BOUNDARIES.                  ADVUGD1A.273    
                                                                           ADVUGD1A.274    
! Loop over field, missing top and bottom rows and first and last          APB0F401.854    
! points.                                                                  APB0F401.855    
        DO I=START_POINT_NO_HALO+1,END_U_POINT_NO_HALO-1                   APB0F401.856    
          V_TERM(I) = .5*(WORK(I-ROW_LENGTH)+WORK(I))                      ADVUGD1A.276    
        END DO                                                             ADVUGD1A.277    
                                                                           ADVUGD1A.278    
C SET LAST POINT OF LOOP TO ZERO.                                          ADVUGD1A.279    
        V_TERM(END_U_POINT_NO_HALO-ROW_LENGTH)=0.0                         APB0F401.857    
                                                                           ADVUGD1A.281    
C CORNER VALUES                                                            ADVUGD1A.282    
                                                                           ADVUGD1A.283    
        V_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.858    
        V_TERM(END_U_POINT_NO_HALO)=0.0                                    APB0F401.859    
                                                                           ADVUGD1A.286    
*ENDIF                                                                     ADVUGD1A.287    
      ELSE                                                                 ADVUGD1A.288    
*IF DEF,GLOBAL                                                             ADVUGD1A.289    
C GLOBAL MODEL.                                                            ADVUGD1A.290    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO POLES.                       ADVUGD1A.291    
                                                                           ADVUGD1A.292    
! Loop over field, missing top two rows and bottom two rows.               APB0F401.860    
        DO 220 I=START_POINT_NO_HALO+ROW_LENGTH,                           APB0F401.861    
     &           END_U_POINT_NO_HALO-ROW_LENGTH                            APB0F401.862    
          V_TERM(I) = (1.+NUY(I))*.5*(WORK(I-ROW_LENGTH)+WORK(I)) -        ADVUGD1A.294    
     *             NUY(I)*.5*(WORK(I+ROW_LENGTH)+WORK(I-2*ROW_LENGTH))     ADVUGD1A.295    
 220    CONTINUE                                                           ADVUGD1A.296    
                                                                           ADVUGD1A.297    
C CALCULATE VALUES ON SLICES NEXT TO POLES AND POLAR MERIDIONAL FLUXES.    ADVUGD1A.298    
C THESE TERMS ARE DIFFERENT TO THE ONES IN LOOP 220 SO AS TO ENSURE        ADVUGD1A.299    
C CONSERVATION OF FOURTH ORDER SCHEME WITHOUT USING VALUES FROM THE        ADVUGD1A.300    
C OTHER SIDE OF THE POLE.                                                  ADVUGD1A.301    
                                                                           ADVUGD1A.302    
CFPP$ NODEPCHK                                                             ADVUGD1A.303    
! Fujitsu vectorization directive                                          GRB0F405.593    
!OCL NOVREC                                                                GRB0F405.594    
        DO 222 I=1,ROW_LENGTH                                              ADVUGD1A.304    
          IJ = END_U_POINT_NO_HALO - ROW_LENGTH + I                        APB0F401.863    
          IK = START_POINT_NO_HALO + I - 1                                 APB0F401.864    
C NEXT TO NORTH POLE SLICE.                                                ADVUGD1A.307    
          V_TERM(IK) = .5*((1.+NUY(IK))*WORK(IK-ROW_LENGTH)                ADVUGD1A.308    
     *                +WORK(IK)) - NUY(IK)*.5*WORK(IK+ROW_LENGTH)          ADVUGD1A.309    
C NEXT TO SOUTH POLE SLICE.                                                ADVUGD1A.310    
          V_TERM(IJ) = .5*(WORK(IJ-ROW_LENGTH)+(1.+NUY(IJ))*WORK(IJ)) -    ADVUGD1A.311    
     *               NUY(IJ)*.5*WORK(IJ-2*ROW_LENGTH)                      ADVUGD1A.312    
 222    CONTINUE                                                           ADVUGD1A.313    
                                                                           ADVUGD1A.314    
*ELSE                                                                      ADVUGD1A.315    
C LIMITED AREA MODEL.                                                      ADVUGD1A.316    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO BOUNDARIES.                  ADVUGD1A.317    
                                                                           ADVUGD1A.318    
! Loop over field, missing top two rows and bottom two rows, and last      APB0F401.865    
! point.                                                                   APB0F401.866    
        DO 220 I=START_POINT_NO_HALO+ROW_LENGTH,                           APB0F401.867    
     &           END_U_POINT_NO_HALO-ROW_LENGTH-1                          APB0F401.868    
          V_TERM(I) = (1.+NUY(I))*.5*(WORK(I-ROW_LENGTH)+WORK(I)) -        ADVUGD1A.320    
     *             NUY(I)*.5*(WORK(I+ROW_LENGTH)+WORK(I-2*ROW_LENGTH))     ADVUGD1A.321    
 220    CONTINUE                                                           ADVUGD1A.322    
                                                                           ADVUGD1A.323    
C SET LAST POINT OF LOOP TO ZERO.                                          ADVUGD1A.324    
        V_TERM(END_U_POINT_NO_HALO-ROW_LENGTH)=0.0                         APB0F401.869    
C CALCULATE VALUES ON SLICES NEXT TO BOUNDARIES AS SECOND ORDER.           ADVUGD1A.326    
                                                                           ADVUGD1A.327    
        DO 222 I=2,ROW_LENGTH-1                                            ADVUGD1A.328    
          IJ = END_U_POINT_NO_HALO-ROW_LENGTH+I                            APB0F401.870    
          IK = START_POINT_NO_HALO+I-1                                     APB0F401.871    
C NEXT TO NORTHERN BOUNDARY.                                               ADVUGD1A.331    
          V_TERM(IK) = .5*(WORK(IK-ROW_LENGTH)+WORK(IK))                   ADVUGD1A.332    
C NEXT TO SOUTHERN BOUNDARY.                                               ADVUGD1A.333    
          V_TERM(IJ) = .5*(WORK(IJ-ROW_LENGTH)+WORK(IJ))                   ADVUGD1A.334    
 222    CONTINUE                                                           ADVUGD1A.335    
C         CORNER VALUES                                                    ADVUGD1A.336    
C                                                                          ADVUGD1A.337    
        V_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.872    
        V_TERM(START_POINT_NO_HALO+LAST_ROW_PT-1)=0.0                      APB0F401.873    
        V_TERM(END_U_POINT_NO_HALO-ROW_LENGTH+1)=0.0                       APB0F401.874    
        V_TERM(END_U_POINT_NO_HALO)=0.0                                    APB0F401.875    
                                                                           ADVUGD1A.342    
*ENDIF                                                                     ADVUGD1A.343    
      END IF                                                               ADVUGD1A.344    
                                                                           ADVUGD1A.345    
CL                                                                         ADVUGD1A.346    
CL---------------------------------------------------------------------    ADVUGD1A.347    
CL    SECTION 3.     CALCULATE VERTICAL FLUX AND COMBINE WITH U AND V      ADVUGD1A.348    
CL                   TERMS TO FORM INCREMENT.                              ADVUGD1A.349    
CL---------------------------------------------------------------------    ADVUGD1A.350    
                                                                           ADVUGD1A.351    
CL    VERTICAL FLUX ON INPUT IS .5*TIMESTEP*ETADOT*D(FIELD)/D(ETA)         ADVUGD1A.352    
CL    AT LEVEL K-1/2. AT THE END OF THEIS SECTION IT IS THE SAME           ADVUGD1A.353    
CL    QUANTITY BUT AT LEVEL K+1/2.                                         ADVUGD1A.354    
                                                                           ADVUGD1A.355    
! Loop over field, missing top and bottom rows.                            APB0F401.876    
      DO 300 I=START_POINT_NO_HALO,END_U_POINT_NO_HALO                     APB0F401.877    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.730    
     *         ETADOT_UPPER(I) * (FIELD_UPPER(I) - FIELD(I))               AAD2F304.731    
        SCALAR2 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.732    
     *         ETADOT_LOWER(I) * (FIELD(I) - FIELD_LOWER(I))               AAD2F304.733    
        FIELD_INC(I) = ADVECTION_TIMESTEP * SEC_U_LATITUDE(I) *            ADVUGD1A.359    
     *                  (U_TERM(I)+V_TERM(I))                              AAD2F304.734    
     &                   + SCALAR1+SCALAR2                                 AAD2F304.735    
      IF (LWHITBROM) THEN                                                  GSS1F304.818    
        FIELD_INC(I) = FIELD_INC(I)                                        GSS1F304.819    
     *                  + FIELD(I)*BRSP(I)                                 AAD2F304.736    
      END IF                                                               GSS1F304.820    
 300  CONTINUE                                                             ADVUGD1A.365    
                                                                           ADVUGD1A.366    
*IF -DEF,GLOBAL                                                            ADVUGD1A.367    
                                                                           ADVUGD1A.368    
CL    LIMITED AREA MODEL SET BOUNDARY INCREMENTS TO ZERO.                  ADVUGD1A.369    
                                                                           ADVUGD1A.370    
      DO 310 I=START_POINT_NO_HALO,END_U_POINT_NO_HALO,ROW_LENGTH          APB0F401.878    
        FIELD_INC(I) = 0.                                                  ADVUGD1A.372    
        FIELD_INC(I+ROW_LENGTH-1) = 0.                                     ADVUGD1A.373    
        FIELD_INC(I+ROW_LENGTH-2) = 0.                                     ADVUGD1A.374    
                                                                           AAD2F304.737    
                                                                           AAD2F304.738    
 310  CONTINUE                                                             ADVUGD1A.377    
                                                                           ADVUGD1A.378    
*ENDIF                                                                     ADVUGD1A.379    
                                                                           ADVUGD1A.380    
CL    END OF ROUTINE ADV_U_GD                                              ADVUGD1A.381    
                                                                           ADVUGD1A.382    
      RETURN                                                               ADVUGD1A.383    
      END                                                                  ADVUGD1A.384    
*ENDIF                                                                     ADVUGD1A.385