*IF DEF,A12_1E                                                             ADVUGD1E.2      
*IF DEF,MPP                                                                ADVUGD1E.3      
C *****************************COPYRIGHT******************************     ADVUGD1E.4      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    ADVUGD1E.5      
C                                                                          ADVUGD1E.6      
C Use, duplication or disclosure of this code is subject to the            ADVUGD1E.7      
C restrictions as set forth in the contract.                               ADVUGD1E.8      
C                                                                          ADVUGD1E.9      
C                Meteorological Office                                     ADVUGD1E.10     
C                London Road                                               ADVUGD1E.11     
C                BRACKNELL                                                 ADVUGD1E.12     
C                Berkshire UK                                              ADVUGD1E.13     
C                RG12 2SZ                                                  ADVUGD1E.14     
C                                                                          ADVUGD1E.15     
C If no contract has been raised with this copy of the code, the use,      ADVUGD1E.16     
C duplication or disclosure of it is strictly prohibited.  Permission      ADVUGD1E.17     
C to do so must first be obtained in writing from the Head of Numerical    ADVUGD1E.18     
C Modelling at the above address.                                          ADVUGD1E.19     
C ******************************COPYRIGHT******************************    ADVUGD1E.20     
CLL   SUBROUTINE ADV_U_GD -------------------------------------------      ADVUGD1E.21     
CLL                                                                        ADVUGD1E.22     
CLL   PURPOSE:   CALCULATES ADVECTION INCREMENTS TO A FIELD AT A           ADVUGD1E.23     
CLL              SINGLE MODEL LEVEL USING AN EQUATION OF THE FORM(38).     ADVUGD1E.24     
CLL   NOT SUITABLE FOR SINGLE COLUMN USE.                                  ADVUGD1E.25     
CLL                                                                        ADVUGD1E.26     
CLL   WAS VERSION FOR CRAY Y-MP                                            ADVUGD1E.27     
CLL                                                                        ADVUGD1E.28     
CLL   WRITTEN BY M.H MAWSON.                                               ADVUGD1E.29     
CLL   MPP CODE ADDED BY P.BURTON                                           ADVUGD1E.30     
CLL                                                                        ADVUGD1E.31     
CLL  Model            Modification history:                                ADVUGD1E.32     
CLL version  Date                                                          ADVUGD1E.33     
!LL   4.4   11/08/97  New version optimised for T3E.                       ADVUGD1E.34     
!LL                   Not bit-reproducible with ADVUGD1C.                  ADVUGD1E.35     
C     4.4    4/8/97   T3E Optimisation D.Salmond                           ADVUGD1E.36     
C                                                                          ADVUGD1E.37     
C     4.5   29/4/98   T3E Optimisation for MES D.Salmond                   APB3F405.236    
C                                                                          APB3F405.237    
CLL                                                                        ADVUGD1E.38     
CLL   PROGRAMMING STANDARD:                                                ADVUGD1E.39     
CLL                                                                        ADVUGD1E.40     
CLL   LOGICAL COMPONENTS COVERED: P122                                     ADVUGD1E.41     
CLL                                                                        ADVUGD1E.42     
CLL   PROJECT TASK: P1                                                     ADVUGD1E.43     
CLL                                                                        ADVUGD1E.44     
CLL   DOCUMENTATION:       THE EQUATION USED IS (37)                       ADVUGD1E.45     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10     ADVUGD1E.46     
CLL                        M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON           ADVUGD1E.47     
CLLEND-------------------------------------------------------------        ADVUGD1E.48     
CLL                                                                        ADVUGD1E.49     
C*L   ARGUMENTS:---------------------------------------------------        ADVUGD1E.50     

      SUBROUTINE ADV_U_GD                                                   12ADVUGD1E.51     
     1                   (P_LEVELS,FIELD,U,V,                              ADVUGD1E.52     
     1                    ETADOT,                                          ADVUGD1E.53     
     2                    SEC_U_LATITUDE,FIELD_INC,NUX,NUY,U_FIELD,        ADVUGD1E.54     
     3                    ROW_LENGTH,                                      ADVUGD1E.55     
*CALL ARGFLDPT                                                             ADVUGD1E.56     
     4                    ADVECTION_TIMESTEP,                              ADVUGD1E.57     
     5                    LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,    ADVUGD1E.58     
     6                    SEC_P_LATITUDE,BRSP,                             ADVUGD1E.59     
     7                    L_SECOND,LWHITBROM,                              ADVUGD1E.60     
     &                    extended_FIELD,extended_U_FIELD,                 ADVUGD1E.61     
     &                    extended_address)                                ADVUGD1E.62     
                                                                           ADVUGD1E.63     
      IMPLICIT NONE                                                        ADVUGD1E.64     
                                                                           ADVUGD1E.65     
      INTEGER                                                              ADVUGD1E.66     
     *  P_LEVELS                                                           ADVUGD1E.67     
     *, U_FIELD             !IN DIMENSION OF FIELDS ON VELOCITY GRID       ADVUGD1E.68     
     &, extended_U_FIELD    !IN DIMENSION of U fields with extra halo      ADVUGD1E.69     
     *, ROW_LENGTH          !IN NUMBER OF POINTS PER ROW                   ADVUGD1E.70     
                                                                           ADVUGD1E.71     
! All TYPFLDPT arguments are intent IN                                     ADVUGD1E.72     
*CALL TYPFLDPT                                                             ADVUGD1E.73     
                                                                           ADVUGD1E.74     
      REAL                                                                 ADVUGD1E.75     
     * U(extended_U_FIELD,P_LEVELS)  !IN ADVECTING U FIELD MASS-WEIGHTED   ADVUGD1E.76     
     *                      ! HELD AT P POINTS. FIRST POINT OF FIELD       ADVUGD1E.77     
     *                      ! IS FIRST P POINT ON SECOND ROW OF P-GRID.    ADVUGD1E.78     
     *,V(extended_U_FIELD,P_LEVELS)  !IN ADVECTING V FIELD MASS-WEIGHTED   ADVUGD1E.79     
     *                      ! HELD AT P POINTS. FIRST POINT OF FIELD       ADVUGD1E.80     
     *                      ! IS FIRST P POINT ON SECOND ROW OF P-GRID.    ADVUGD1E.81     
     *,ETADOT(U_FIELD,P_LEVELS)!IN ADVECTING VERTICAL VELOC AT K+1/2,      ADVUGD1E.82     
     *                      ! MASS-WEIGHTED.                               ADVUGD1E.83     
     *,FIELD(U_FIELD,P_LEVELS)       !IN FIELD TO BE ADVECTED.             ADVUGD1E.84     
     *,NUX(U_FIELD,P_LEVELS)   !IN HOLDS PARAMETER NU FOR EAST-WEST ADVE   ADVUGD1E.85     
     *,NUY(U_FIELD,P_LEVELS)   !IN HOLDS PARAMETER NU FOR NORTH-SOUTH AD   ADVUGD1E.86     
     *,SEC_U_LATITUDE(U_FIELD) !IN HOLDS 1/COS(PHI) AT U POINTS.           ADVUGD1E.87     
     *,SEC_P_LATITUDE(U_FIELD) !IN HOLDS 1/COS(PHI) AT P POINTS.           ADVUGD1E.88     
     *,ADVECTION_TIMESTEP   !IN                                            ADVUGD1E.89     
     *,LATITUDE_STEP_INVERSE   !IN 1/(DELTA PHI)                           ADVUGD1E.90     
     *,LONGITUDE_STEP_INVERSE  !IN 1/(DELTA LAMDA)                         ADVUGD1E.91     
                                                                           ADVUGD1E.92     
      REAL                                                                 ADVUGD1E.93     
     * BRSP(U_FIELD,P_LEVELS)  !IN BRSP TERM AT LEVEL+1/2                  APB3F405.238    
     *                         ! (SEE DOC.PAPER NO 10)                     APB3F405.239    
                                                                           ADVUGD1E.96     
      REAL                                                                 ADVUGD1E.97     
     * FIELD_INC(U_FIELD,P_LEVELS)   !OUT HOLDS INCREMENT TO FIELD.        ADVUGD1E.98     
                                                                           ADVUGD1E.99     
      REAL                                                                 ADVUGD1E.100    
     * VERTICAL_FLUX(U_FIELD) !INOUT HOLDS VERTICAL FLUX OF FIELD          ADVUGD1E.101    
     *                        ! BETWEEN TWO LEVELS.                        ADVUGD1E.102    
                                                                           ADVUGD1E.103    
      REAL                                                                 ADVUGD1E.104    
     & extended_FIELD(extended_U_FIELD,P_LEVELS) ! IN field to be advect   ADVUGD1E.105    
!                                       !    extra halos for 4th order     ADVUGD1E.106    
      INTEGER extended_address(U_FIELD)                                    ADVUGD1E.107    
                                                                           ADVUGD1E.108    
C LOGICAL VARIABLE                                                         ADVUGD1E.109    
      LOGICAL                                                              ADVUGD1E.110    
     *  L_SECOND     ! SET TO TRUE IF NU_BASIC IS ZERO.                    ADVUGD1E.111    
     * ,LWHITBROM    ! Switch for White & Bromley terms                    ADVUGD1E.112    
C                                                                          ADVUGD1E.113    
                                                                           ADVUGD1E.114    
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    ADVUGD1E.115    
C DEFINE LOCAL ARRAYS: 3 ARE REQUIRED                                      ADVUGD1E.116    
                                                                           ADVUGD1E.117    
      REAL                                                                 ADVUGD1E.118    
     * WORK(U_FIELD)      ! GENERAL WORK-SPACE.                            ADVUGD1E.119    
     *,U_TERM(U_FIELD)    ! HOLDS U ADVECTION TERM FROM EQUATION (37)      ADVUGD1E.120    
     *,V_TERM(U_FIELD)    ! HOLDS V ADVECTION TERM FROM EQUATION (37)      ADVUGD1E.121    
C*---------------------------------------------------------------------    ADVUGD1E.122    
C DEFINE LOCAL VARIABLES                                                   ADVUGD1E.123    
                                                                           ADVUGD1E.124    
C REAL SCALARS                                                             ADVUGD1E.125    
      REAL                                                                 ADVUGD1E.126    
     * SCALAR1,SCALAR2                                                     ADVUGD1E.127    
                                                                           ADVUGD1E.128    
C COUNT VARIABLES FOR DO LOOPS ETC.                                        ADVUGD1E.129    
      INTEGER                                                              ADVUGD1E.130    
     *  I,J,K                                                              ADVUGD1E.131    
                                                                           ADVUGD1E.132    
! Work space and scalars for the MPP Fourth Order Advection                ADVUGD1E.133    
       INTEGER  extended_index,  ! index for position in extended array    ADVUGD1E.134    
     &          extended_START_POINT_NO_HALO,                              ADVUGD1E.135    
!                                ! start pos in extended array             ADVUGD1E.136    
     &          extended_END_U_POINT_NO_HALO,                              ADVUGD1E.137    
!                                ! end pos in extended array               ADVUGD1E.138    
     &          extended_ROW_LENGTH,! row length of extended array         ADVUGD1E.139    
     &          I_start,I_end  ! loop bounds for 4th order advection       ADVUGD1E.140    
                                                                           ADVUGD1E.141    
      REAL                                                                 ADVUGD1E.142    
     &          extended_WORK(extended_U_FIELD)  ! extended work space     ADVUGD1E.143    
                                                                           ADVUGD1E.144    
                                                                           ADVUGD1E.145    
C*L   NO EXTERNAL SUBROUTINE CALLS:------------------------------------    ADVUGD1E.146    
C*---------------------------------------------------------------------    ADVUGD1E.147    
                                                                           ADVUGD1E.148    
CL    MAXIMUM VECTOR LENGTH ASSUMED IS                                     ADVUGD1E.149    
CL    END_U_POINT_NO_HALO-START_U_UPDATE+1                                 ADVUGD1E.150    
CL---------------------------------------------------------------------    ADVUGD1E.151    
      IF(L_SECOND) THEN                                                    APB3F405.240    
!  SECOND ORDER ADEVCTION                                                  APB3F405.241    
                                                                           APB3F405.242    
      DO K=1,P_LEVELS                                                      APB3F405.243    
                                                                           APB3F405.244    
CL---------------------------------------------------------------------    APB3F405.245    
CL    SECTION 1.     CALCULATE U_TERM IN EQUATION (37).                    APB3F405.246    
CL---------------------------------------------------------------------    APB3F405.247    
                                                                           APB3F405.248    
C----------------------------------------------------------------------    APB3F405.249    
CL    SECTION 1.1    CALCULATE TERM U D(FIELD)/D(LAMDA).                   APB3F405.250    
C----------------------------------------------------------------------    APB3F405.251    
                                                                           APB3F405.252    
C----------------------------------------------------------------------    APB3F405.253    
CL    SECTION 1.2    CALCULATE U ADVECTION TERM IN EQUATION (37).          APB3F405.254    
CL                   IF L_SECOND=TRUE ONLY DO SECOND ORDER ADVECTION.      APB3F405.255    
C----------------------------------------------------------------------    APB3F405.256    
                                                                           APB3F405.257    
CL                                                                         APB3F405.258    
CL---------------------------------------------------------------------    APB3F405.259    
CL    SECTION 2.     CALCULATE V_TERM IN EQUATION (37).                    APB3F405.260    
CL---------------------------------------------------------------------    APB3F405.261    
                                                                           APB3F405.262    
C----------------------------------------------------------------------    APB3F405.263    
CL    SECTION 2.1    CALCULATE TERM V D(FIELD)/D(PHI).                     APB3F405.264    
C----------------------------------------------------------------------    APB3F405.265    
                                                                           APB3F405.266    
C----------------------------------------------------------------------    APB3F405.267    
CL    SECTION 2.2    CALCULATE V ADVECTION TERM IN EQUATION (37).          APB3F405.268    
CL                   IF L_SECOND=TRUE ONLY DO SECOND ORDER ADVECTION.      APB3F405.269    
C----------------------------------------------------------------------    APB3F405.270    
                                                                           APB3F405.271    
CL                                                                         APB3F405.272    
CL---------------------------------------------------------------------    APB3F405.273    
CL    SECTION 3.     CALCULATE VERTICAL FLUX AND COMBINE WITH U AND V      APB3F405.274    
CL                   TERMS TO FORM INCREMENT.                              APB3F405.275    
CL---------------------------------------------------------------------    APB3F405.276    
                                                                           APB3F405.277    
CL    VERTICAL FLUX ON INPUT IS .5*TIMESTEP*ETADOT*D(FIELD)/D(ETA)         APB3F405.278    
CL    AT LEVEL K-1/2. AT THE END OF THEIS SECTION IT IS THE SAME           APB3F405.279    
CL    QUANTITY BUT AT LEVEL K+1/2.                                         APB3F405.280    
                                                                           APB3F405.281    
! Loop over field, missing top and bottom rows and halos                   APB3F405.282    
                                                                           APB3F405.283    
      IF(K.NE.1.AND.K.NE.P_LEVELS)THEN                                     APB3F405.284    
cdir$ unroll4                                                              APB3F405.285    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       APB3F405.286    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                APB3F405.287    
     *         ETADOT(I,K+1) * (FIELD(I,K+1) - FIELD(I,K))                 APB3F405.288    
        SCALAR2 = WORK(I)                                                  APB3F405.289    
        WORK(I)=SCALAR1                                                    APB3F405.290    
        FIELD_INC(I,K) =  SCALAR1+SCALAR2                                  APB3F405.291    
      IF (LWHITBROM) THEN                                                  APB3F405.292    
        FIELD_INC(I,K) = FIELD_INC(I,K)                                    APB3F405.293    
     *                  + FIELD(I,K)*BRSP(I,K)                             APB3F405.294    
      END IF                                                               APB3F405.295    
      ENDDO                                                                APB3F405.296    
      ELSE IF(K.EQ.1)THEN                                                  APB3F405.297    
cdir$ unroll4                                                              APB3F405.298    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       APB3F405.299    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                APB3F405.300    
     *         ETADOT(I,K+1) * (FIELD(I,K+1) - FIELD(I,K))                 APB3F405.301    
        WORK(I)=SCALAR1                                                    APB3F405.302    
        FIELD_INC(I,K) =  SCALAR1                                          APB3F405.303    
      IF (LWHITBROM) THEN                                                  APB3F405.304    
        FIELD_INC(I,K) = FIELD_INC(I,K)                                    APB3F405.305    
     *                  + FIELD(I,K)*BRSP(I,K)                             APB3F405.306    
      END IF                                                               APB3F405.307    
      ENDDO                                                                APB3F405.308    
                                                                           APB3F405.309    
      ELSE IF(K.EQ.P_LEVELS) THEN                                          APB3F405.310    
cdir$ unroll4                                                              APB3F405.311    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       APB3F405.312    
        SCALAR2 = WORK(I)                                                  APB3F405.313    
        FIELD_INC(I,K) =  SCALAR2                                          APB3F405.314    
      IF (LWHITBROM) THEN                                                  APB3F405.315    
        FIELD_INC(I,K) = FIELD_INC(I,K)                                    APB3F405.316    
     *                  + FIELD(I,K)*BRSP(I,K)                             APB3F405.317    
      END IF                                                               APB3F405.318    
      ENDDO                                                                APB3F405.319    
      ENDIF   !IF(K.EQ.P_LEVELS)                                           APB3F405.320    
                                                                           APB3F405.321    
      DO I=START_POINT_NO_HALO+1,END_U_POINT_NO_HALO-1                     APB3F405.322    
        FIELD_INC(I,K) = .25*ADVECTION_TIMESTEP * SEC_U_LATITUDE(I) *      APB3F405.323    
     *                  (LONGITUDE_STEP_INVERSE*                           APB3F405.324    
     &                    ((U(I+1,K)+U(I+1-ROW_LENGTH,K))*                 APB3F405.325    
     &                    (FIELD(I+1,K) - FIELD(I,K))+                     APB3F405.326    
     &                    (U(I,K)+U(I-ROW_LENGTH,K))*                      APB3F405.327    
     &                    (FIELD(I,K) - FIELD(I-1,K)))                     APB3F405.328    
     &                  +                                                  APB3F405.329    
     &                   LATITUDE_STEP_INVERSE*                            APB3F405.330    
     &                    ((V(I-ROW_LENGTH,K)+V(I+1-ROW_LENGTH,K))*        APB3F405.331    
     &                    (FIELD(I-ROW_LENGTH,K)-FIELD(I,K))               APB3F405.332    
     &                    +(V(I,K)+V(I+1,K))*                              APB3F405.333    
     &                    (FIELD(I,K)-FIELD(I+ROW_LENGTH,K))))             APB3F405.334    
     *                       + FIELD_INC(I,K)                              APB3F405.335    
      ENDDO                                                                APB3F405.336    
                                                                           APB3F405.337    
      FIELD_INC(END_U_POINT_NO_HALO,K)=0.0                                 APB3F405.338    
                                                                           APB3F405.339    
*IF -DEF,GLOBAL                                                            APB3F405.340    
                                                                           APB3F405.341    
CL    LIMITED AREA MODEL SET BOUNDARY INCREMENTS TO ZERO.                  APB3F405.342    
                                                                           APB3F405.343    
        IF (at_left_of_LPG) THEN                                           APB3F405.344    
          DO I=START_POINT_NO_HALO+FIRST_ROW_PT-1,                         APB3F405.345    
     &         END_U_POINT_NO_HALO,ROW_LENGTH                              APB3F405.346    
            FIELD_INC(I,K)=0.0                                             APB3F405.347    
          ENDDO                                                            APB3F405.348    
        ENDIF                                                              APB3F405.349    
                                                                           APB3F405.350    
        IF (at_right_of_LPG) THEN                                          APB3F405.351    
          DO I=START_POINT_NO_HALO+LAST_ROW_PT-2,                          APB3F405.352    
     &         END_U_POINT_NO_HALO,ROW_LENGTH                              APB3F405.353    
            FIELD_INC(I,K)=0.0                                             APB3F405.354    
            FIELD_INC(I+1,K)=0.0                                           APB3F405.355    
          ENDDO                                                            APB3F405.356    
        ENDIF                                                              APB3F405.357    
                                                                           APB3F405.358    
*ENDIF                                                                     APB3F405.359    
                                                                           APB3F405.360    
      ENDDO !DO K=1,P_LEVELS                                               APB3F405.361    
                                                                           APB3F405.362    
      ELSE  !IF(L_SECOND)                                                  APB3F405.363    
!  FOURTH ORDER ADEVCTION                                                  APB3F405.364    
                                                                           ADVUGD1E.152    
! Calculate indexes in extended_arrays                                     ADVUGD1E.154    
                                                                           ADVUGD1E.155    
        extended_ROW_LENGTH=ROW_LENGTH+2*extra_EW_Halo                     ADVUGD1E.156    
                                                                           ADVUGD1E.157    
        extended_START_POINT_NO_HALO=                                      ADVUGD1E.158    
     &    extended_address(START_POINT_NO_HALO)                            ADVUGD1E.159    
                                                                           ADVUGD1E.160    
        extended_END_U_POINT_NO_HALO=                                      ADVUGD1E.161    
     &    extended_address(END_U_POINT_NO_HALO)                            ADVUGD1E.162    
                                                                           ADVUGD1E.163    
                                                                           ADVUGD1E.165    
      DO K=1,P_LEVELS                                                      ADVUGD1E.166    
                                                                           ADVUGD1E.167    
CL---------------------------------------------------------------------    ADVUGD1E.168    
CL    SECTION 1.     CALCULATE U_TERM IN EQUATION (37).                    ADVUGD1E.169    
CL---------------------------------------------------------------------    ADVUGD1E.170    
                                                                           ADVUGD1E.171    
C----------------------------------------------------------------------    ADVUGD1E.172    
CL    SECTION 1.1    CALCULATE TERM U D(FIELD)/D(LAMDA).                   ADVUGD1E.173    
C----------------------------------------------------------------------    ADVUGD1E.174    
                                                                           ADVUGD1E.175    
C CALCULATE TERM AT ALL POINTS EXCEPT LAST AND STORE IN WORK.              ADVUGD1E.176    
                                                                           ADVUGD1E.177    
! Loop over extended field, missing top and bottom rows and halos rows     ADVUGD1E.190    
        DO I=extended_START_POINT_NO_HALO-1,                               ADVUGD1E.191    
     &       extended_END_U_POINT_NO_HALO                                  ADVUGD1E.192    
          extended_WORK(I) = 0.5*(U(I+1,K)+U(I+1-extended_ROW_LENGTH,K))   ADVUGD1E.193    
     &                       *LONGITUDE_STEP_INVERSE*                      ADVUGD1E.194    
     &                       (extended_FIELD(I+1,K)-extended_FIELD(I,K))   ADVUGD1E.195    
        ENDDO                                                              ADVUGD1E.196    
                                                                           ADVUGD1E.197    
                                                                           ADVUGD1E.200    
C----------------------------------------------------------------------    ADVUGD1E.201    
CL    SECTION 1.2    CALCULATE U ADVECTION TERM IN EQUATION (37).          ADVUGD1E.202    
CL                   IF L_SECOND=TRUE ONLY DO SECOND ORDER ADVECTION.      ADVUGD1E.203    
C----------------------------------------------------------------------    ADVUGD1E.204    
                                                                           ADVUGD1E.205    
                                                                           ADVUGD1E.234    
C LOOP OVER ALL POINTS BUT DON'T DO FIRST,SECOND AND LAST ON A ROW AS      ADVUGD1E.235    
C THEY NEED SPECIAL TREATMENT DUE TO FOURTH ORDER SCHEME.                  ADVUGD1E.236    
                                                                           ADVUGD1E.237    
! Loop over field, missing top and bottom rows and halos, and              ADVUGD1E.238    
! first point.                                                             ADVUGD1E.239    
        DO 120 J=START_POINT_NO_HALO+1,END_U_POINT_NO_HALO-1               ADVUGD1E.240    
!        DO 120 J=START_POINT_NO_HALO+2,END_U_POINT_NO_HALO-1              ADVUGD1E.241    
          extended_index=extended_address(J)                               ADVUGD1E.242    
                                                                           ADVUGD1E.243    
          U_TERM(J) = (1.+NUX(J,K))*.5*(extended_WORK(extended_index)+     ADVUGD1E.244    
     &                                extended_WORK(extended_index-1))     ADVUGD1E.245    
     &                   -NUX(J,K) *.5*(extended_WORK(extended_index+1)+   ADVUGD1E.246    
     &                                extended_WORK(extended_index-2))     ADVUGD1E.247    
 120    CONTINUE                                                           ADVUGD1E.248    
                                                                           ADVUGD1E.249    
*IF DEF,GLOBAL                                                             ADVUGD1E.250    
        U_TERM(START_POINT_NO_HALO)= U_TERM(START_POINT_NO_HALO+2)         ADVUGD1E.251    
!        U_TERM(START_POINT_NO_HALO+1)= U_TERM(START_POINT_NO_HALO+2)      ADVUGD1E.252    
!        U_TERM(END_U_POINT_NO_HALO)= U_TERM(END_U_POINT_NO_HALO-1)        ADVUGD1E.253    
                                                                           ADVUGD1E.254    
*ELSE                                                                      ADVUGD1E.255    
C LIMITED AREA MODEL.                                                      ADVUGD1E.256    
C CALCULATE  VALUES AT SECOND AND NEXT TO LAST POINTS ON A ROW.            ADVUGD1E.257    
C THESE VALUES ARE JUST SECOND ORDER.                                      ADVUGD1E.258    
                                                                           ADVUGD1E.259    
        IF (at_left_of_LPG) THEN                                           ADVUGD1E.260    
! Do second point along each row                                           ADVUGD1E.261    
          DO I=START_POINT_NO_HALO+FIRST_ROW_PT,END_U_POINT_NO_HALO,       ADVUGD1E.262    
     &         ROW_LENGTH                                                  ADVUGD1E.263    
            extended_index=extended_address(I)                             ADVUGD1E.264    
                                                                           ADVUGD1E.265    
            U_TERM(I)= 0.5*(extended_WORK(extended_index)+                 ADVUGD1E.266    
     &                      extended_WORK(extended_index-1))               ADVUGD1E.267    
          ENDDO                                                            ADVUGD1E.268    
        ENDIF                                                              ADVUGD1E.269    
                                                                           ADVUGD1E.270    
! Do penultimate point along each row                                      ADVUGD1E.271    
                                                                           ADVUGD1E.272    
        IF (at_right_of_LPG) THEN                                          ADVUGD1E.273    
          DO I=START_POINT_NO_HALO+LAST_ROW_PT-2,END_U_POINT_NO_HALO,      ADVUGD1E.274    
     &         ROW_LENGTH                                                  ADVUGD1E.275    
            extended_index=extended_address(I)                             ADVUGD1E.276    
                                                                           ADVUGD1E.277    
            U_TERM(I)= 0.5*(extended_WORK(extended_index)+                 ADVUGD1E.278    
     &                      extended_WORK(extended_index-1))               ADVUGD1E.279    
          ENDDO                                                            ADVUGD1E.280    
        ENDIF                                                              ADVUGD1E.281    
                                                                           ADVUGD1E.282    
        U_TERM(START_POINT_NO_HALO)=0                                      ADVUGD1E.283    
        U_TERM(END_U_POINT_NO_HALO)=0                                      ADVUGD1E.284    
                                                                           ADVUGD1E.285    
*ENDIF                                                                     ADVUGD1E.286    
                                                                           ADVUGD1E.288    
CL                                                                         ADVUGD1E.289    
CL---------------------------------------------------------------------    ADVUGD1E.290    
CL    SECTION 2.     CALCULATE V_TERM IN EQUATION (37).                    ADVUGD1E.291    
CL---------------------------------------------------------------------    ADVUGD1E.292    
                                                                           ADVUGD1E.293    
C----------------------------------------------------------------------    ADVUGD1E.294    
CL    SECTION 2.1    CALCULATE TERM V D(FIELD)/D(PHI).                     ADVUGD1E.295    
C----------------------------------------------------------------------    ADVUGD1E.296    
                                                                           ADVUGD1E.297    
C CALCULATE TERM AT ALL POINTS EXCEPT LAST AND STORE IN WORK.              ADVUGD1E.298    
                                                                           ADVUGD1E.299    
! Calculate WORK at the Southern halo too. This is needed for the          ADVUGD1E.316    
! computation of the Southern row                                          ADVUGD1E.317    
                                                                           ADVUGD1E.318    
!        DO I=extended_START_POINT_NO_HALO-2*extended_ROW_LENGTH,          ADVUGD1E.319    
!     &       extended_END_U_POINT_NO_HALO+extended_ROW_LENGTH             ADVUGD1E.320    
         IF (at_top_of_LPG) THEN                                           ADVUGD1E.321    
           I_start=extended_address(TOP_ROW_START)                         ADVUGD1E.322    
         ELSE                                                              ADVUGD1E.323    
           I_start=extended_START_POINT_NO_HALO-2*extended_ROW_LENGTH      ADVUGD1E.324    
         ENDIF                                                             ADVUGD1E.325    
         IF (at_base_of_LPG) THEN                                          ADVUGD1E.326    
           I_end=extended_END_U_POINT_NO_HALO-1                            ADVUGD1E.327    
         ELSE                                                              ADVUGD1E.328    
           I_end=extended_END_U_POINT_NO_HALO-1+extended_ROW_LENGTH        ADVUGD1E.329    
         ENDIF                                                             ADVUGD1E.330    
         DO I=I_start,I_end                                                ADVUGD1E.331    
          extended_WORK(I)=0.5*(V(I,K)+V(I+1,K))*LATITUDE_STEP_INVERSE*    ADVUGD1E.332    
     &    (extended_FIELD(I,K)-extended_FIELD(I+extended_ROW_LENGTH,K))    ADVUGD1E.333    
        ENDDO                                                              ADVUGD1E.334    
        extended_WORK(I_end+1)=extended_WORK(I_end)                        ADVUGD1E.335    
                                                                           ADVUGD1E.336    
                                                                           ADVUGD1E.339    
C----------------------------------------------------------------------    ADVUGD1E.340    
CL    SECTION 2.2    CALCULATE V ADVECTION TERM IN EQUATION (37).          ADVUGD1E.341    
CL                   IF L_SECOND=TRUE ONLY DO SECOND ORDER ADVECTION.      ADVUGD1E.342    
C----------------------------------------------------------------------    ADVUGD1E.343    
                                                                           ADVUGD1E.344    
*IF DEF,GLOBAL                                                             ADVUGD1E.375    
C GLOBAL MODEL.                                                            ADVUGD1E.376    
! Calculate all values except on rows next to poles and next to the        ADVUGD1E.377    
! processor interfaces                                                     ADVUGD1E.378    
                                                                           ADVUGD1E.379    
! Loop over field, missing top and bottom rows and halos                   ADVUGD1E.380    
        IF (at_top_of_LPG) THEN                                            ADVUGD1E.381    
          I_start=START_POINT_NO_HALO+ROW_LENGTH                           ADVUGD1E.382    
        ELSE                                                               ADVUGD1E.383    
          I_start=START_POINT_NO_HALO                                      ADVUGD1E.384    
        ENDIF                                                              ADVUGD1E.385    
        IF (at_base_of_LPG) THEN                                           ADVUGD1E.386    
          I_end=END_U_POINT_NO_HALO-ROW_LENGTH                             ADVUGD1E.387    
        ELSE                                                               ADVUGD1E.388    
          I_end=END_U_POINT_NO_HALO                                        ADVUGD1E.389    
        ENDIF                                                              ADVUGD1E.390    
!        DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO                      ADVUGD1E.391    
        DO I=I_start,I_end                                                 ADVUGD1E.392    
          extended_index=extended_address(I)                               ADVUGD1E.393    
                                                                           ADVUGD1E.394    
          V_TERM(I) = (1.0+NUY(I,K))*0.5*                                  ADVUGD1E.395    
     &     (extended_WORK(extended_index-extended_ROW_LENGTH)              ADVUGD1E.396    
     &    + extended_WORK(extended_index))                                 ADVUGD1E.397    
     &                   - NUY(I,K) *0.5*                                  ADVUGD1E.398    
     &     (extended_WORK(extended_index+extended_ROW_LENGTH)              ADVUGD1E.399    
     &    + extended_WORK(extended_index-2*extended_ROW_LENGTH))           ADVUGD1E.400    
        ENDDO                                                              ADVUGD1E.401    
                                                                           ADVUGD1E.402    
C CALCULATE VALUES ON SLICES NEXT TO POLES AND POLAR MERIDIONAL FLUXES.    ADVUGD1E.403    
C THESE TERMS ARE DIFFERENT TO THE ONES IN LOOP 220 SO AS TO ENSURE        ADVUGD1E.404    
C CONSERVATION OF FOURTH ORDER SCHEME WITHOUT USING VALUES FROM THE        ADVUGD1E.405    
C OTHER SIDE OF THE POLE.                                                  ADVUGD1E.406    
                                                                           ADVUGD1E.407    
        IF (at_top_of_LPG) THEN                                            ADVUGD1E.408    
! Loop over row beneath pole                                               ADVUGD1E.409    
          DO I=START_POINT_NO_HALO,START_POINT_NO_HALO+ROW_LENGTH-1        ADVUGD1E.410    
            extended_index=extended_address(I)                             ADVUGD1E.411    
                                                                           ADVUGD1E.412    
            V_TERM(I)=0.5*((1.0+NUY(I,K))*                                 ADVUGD1E.413    
     &        extended_WORK(extended_index-extended_ROW_LENGTH) +          ADVUGD1E.414    
     &        extended_WORK(extended_index))                               ADVUGD1E.415    
     &      - NUY(I,K)*0.5*                                                ADVUGD1E.416    
     &        extended_WORK(extended_index+extended_ROW_LENGTH)            ADVUGD1E.417    
          ENDDO                                                            ADVUGD1E.418    
        ENDIF                                                              ADVUGD1E.419    
                                                                           ADVUGD1E.420    
        IF (at_base_of_LPG) THEN                                           ADVUGD1E.421    
! Loop over row above pole                                                 ADVUGD1E.422    
          DO I=END_U_POINT_NO_HALO-ROW_LENGTH+1,END_U_POINT_NO_HALO        ADVUGD1E.423    
            extended_index=extended_address(I)                             ADVUGD1E.424    
                                                                           ADVUGD1E.425    
            V_TERM(I)=                                                     ADVUGD1E.426    
     &      0.5*(extended_WORK(extended_index-extended_ROW_LENGTH)         ADVUGD1E.427    
     &    + (1.0+NUY(I,K))*extended_WORK(extended_index))                  ADVUGD1E.428    
     &    - NUY(I,K)*0.5*                                                  ADVUGD1E.429    
     &      extended_WORK(extended_index-2*extended_ROW_LENGTH)            ADVUGD1E.430    
                                                                           ADVUGD1E.431    
          ENDDO                                                            ADVUGD1E.432    
        ENDIF                                                              ADVUGD1E.433    
                                                                           ADVUGD1E.434    
*ELSE                                                                      ADVUGD1E.435    
C LIMITED AREA MODEL.                                                      ADVUGD1E.436    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO BOUNDARIES.                  ADVUGD1E.437    
                                                                           ADVUGD1E.438    
! Loop over field, missing top and bottom rows and halos                   ADVUGD1E.439    
        IF (at_top_of_LPG) THEN                                            ADVUGD1E.440    
          I_start=START_POINT_NO_HALO+ROW_LENGTH                           ADVUGD1E.441    
        ELSE                                                               ADVUGD1E.442    
          I_start=START_POINT_NO_HALO                                      ADVUGD1E.443    
        ENDIF                                                              ADVUGD1E.444    
        IF (at_base_of_LPG) THEN                                           ADVUGD1E.445    
          I_end=END_U_POINT_NO_HALO-ROW_LENGTH                             ADVUGD1E.446    
        ELSE                                                               ADVUGD1E.447    
          I_end=END_U_POINT_NO_HALO                                        ADVUGD1E.448    
        ENDIF                                                              ADVUGD1E.449    
!        DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO                      ADVUGD1E.450    
        DO I=I_start,I_end                                                 ADVUGD1E.451    
          extended_index=extended_address(I)                               ADVUGD1E.452    
                                                                           ADVUGD1E.453    
          V_TERM(I) = (1.0+NUY(I,K))*0.5*                                  ADVUGD1E.454    
     &     (extended_WORK(extended_index-extended_ROW_LENGTH)              ADVUGD1E.455    
     &    + extended_WORK(extended_index))                                 ADVUGD1E.456    
     &                   - NUY(I,K) *0.5*                                  ADVUGD1E.457    
     &     (extended_WORK(extended_index+extended_ROW_LENGTH)              ADVUGD1E.458    
     &    + extended_WORK(extended_index-2*extended_ROW_LENGTH))           ADVUGD1E.459    
        ENDDO                                                              ADVUGD1E.460    
                                                                           ADVUGD1E.461    
C CALCULATE VALUES ON SLICES NEXT TO BOUNDARIES AS SECOND ORDER.           ADVUGD1E.462    
        IF (at_top_of_LPG) THEN                                            ADVUGD1E.463    
! Loop over row beneath top row                                            ADVUGD1E.464    
          DO I=START_POINT_NO_HALO+FIRST_ROW_PT-1,                         ADVUGD1E.465    
     &         START_POINT_NO_HALO+LAST_ROW_PT-1                           ADVUGD1E.466    
            extended_index=extended_address(I)                             ADVUGD1E.467    
            V_TERM(I)=0.5*                                                 ADVUGD1E.468    
     &        (extended_WORK(extended_index-extended_ROW_LENGTH)           ADVUGD1E.469    
     &       + extended_WORK(extended_index))                              ADVUGD1E.470    
          ENDDO                                                            ADVUGD1E.471    
        ENDIF                                                              ADVUGD1E.472    
                                                                           ADVUGD1E.473    
        IF (at_base_of_LPG) THEN                                           ADVUGD1E.474    
          DO I=END_U_POINT_NO_HALO-ROW_LENGTH+FIRST_ROW_PT,                ADVUGD1E.475    
     &         END_U_POINT_NO_HALO-ROW_LENGTH+LAST_ROW_PT                  ADVUGD1E.476    
            extended_index=extended_address(I)                             ADVUGD1E.477    
            V_TERM(I)=0.5*                                                 ADVUGD1E.478    
     &        (extended_WORK(extended_index-extended_ROW_LENGTH)           ADVUGD1E.479    
     &       + extended_WORK(extended_index))                              ADVUGD1E.480    
          ENDDO                                                            ADVUGD1E.481    
        ENDIF                                                              ADVUGD1E.482    
                                                                           ADVUGD1E.483    
C         CORNER VALUES                                                    ADVUGD1E.484    
C                                                                          ADVUGD1E.485    
        V_TERM(START_POINT_NO_HALO)=0.0                                    ADVUGD1E.486    
        V_TERM(START_POINT_NO_HALO+ROW_LENGTH-1)=0.0                       ADVUGD1E.487    
        V_TERM(END_U_POINT_NO_HALO-ROW_LENGTH+1)=0.0                       ADVUGD1E.488    
        V_TERM(END_U_POINT_NO_HALO)=0.0                                    ADVUGD1E.489    
                                                                           ADVUGD1E.490    
*ENDIF                                                                     ADVUGD1E.491    
                                                                           ADVUGD1E.493    
CL                                                                         ADVUGD1E.494    
CL---------------------------------------------------------------------    ADVUGD1E.495    
CL    SECTION 3.     CALCULATE VERTICAL FLUX AND COMBINE WITH U AND V      ADVUGD1E.496    
CL                   TERMS TO FORM INCREMENT.                              ADVUGD1E.497    
CL---------------------------------------------------------------------    ADVUGD1E.498    
                                                                           ADVUGD1E.499    
CL    VERTICAL FLUX ON INPUT IS .5*TIMESTEP*ETADOT*D(FIELD)/D(ETA)         ADVUGD1E.500    
CL    AT LEVEL K-1/2. AT THE END OF THEIS SECTION IT IS THE SAME           ADVUGD1E.501    
CL    QUANTITY BUT AT LEVEL K+1/2.                                         ADVUGD1E.502    
                                                                           ADVUGD1E.503    
! Loop over field, missing top and bottom rows and halos                   ADVUGD1E.504    
                                                                           ADVUGD1E.505    
      IF(K.NE.1.AND.K.NE.P_LEVELS)THEN                                     ADVUGD1E.506    
cdir$ unroll4                                                              ADVUGD1E.507    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       APB3F405.365    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                ADVUGD1E.509    
     *         ETADOT(I,K+1) * (FIELD(I,K+1) - FIELD(I,K))                 ADVUGD1E.510    
        SCALAR2 = WORK(I)                                                  ADVUGD1E.511    
        WORK(I)=SCALAR1                                                    ADVUGD1E.512    
        FIELD_INC(I,K) =  SCALAR1+SCALAR2                                  ADVUGD1E.513    
      IF (LWHITBROM) THEN                                                  ADVUGD1E.514    
        FIELD_INC(I,K) = FIELD_INC(I,K)                                    ADVUGD1E.515    
     *                  + FIELD(I,K)*BRSP(I,K)                             APB3F405.371    
      END IF                                                               ADVUGD1E.517    
      ENDDO                                                                ADVUGD1E.523    
      ELSE IF(K.EQ.1)THEN                                                  ADVUGD1E.524    
cdir$ unroll4                                                              ADVUGD1E.525    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       ADVUGD1E.526    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                ADVUGD1E.527    
     *         ETADOT(I,K+1) * (FIELD(I,K+1) - FIELD(I,K))                 ADVUGD1E.528    
        WORK(I)=SCALAR1                                                    ADVUGD1E.529    
        FIELD_INC(I,K) =  SCALAR1                                          ADVUGD1E.530    
      IF (LWHITBROM) THEN                                                  ADVUGD1E.531    
        FIELD_INC(I,K) = FIELD_INC(I,K)                                    ADVUGD1E.532    
     *                  + FIELD(I,K)*BRSP(I,K)                             APB3F405.372    
      END IF                                                               ADVUGD1E.534    
      ENDDO                                                                ADVUGD1E.535    
                                                                           ADVUGD1E.536    
                                                                           ADVUGD1E.542    
      ELSE IF(K.EQ.P_LEVELS) THEN                                          ADVUGD1E.543    
cdir$ unroll4                                                              ADVUGD1E.544    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       ADVUGD1E.545    
        SCALAR2 = WORK(I)                                                  ADVUGD1E.546    
        FIELD_INC(I,K) =  SCALAR2                                          ADVUGD1E.547    
      IF (LWHITBROM) THEN                                                  ADVUGD1E.548    
        FIELD_INC(I,K) = FIELD_INC(I,K)                                    ADVUGD1E.549    
     *                  + FIELD(I,K)*BRSP(I,K)                             APB3F405.373    
      END IF                                                               ADVUGD1E.551    
      ENDDO                                                                ADVUGD1E.552    
                                                                           APB3F405.366    
      ENDIF !IF(K.EQ.P_LEVELS)                                             APB3F405.367    
                                                                           APB3F405.368    
cdir$ unroll4                                                              ADVUGD1E.553    
      DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                       ADVUGD1E.554    
        FIELD_INC(I,K) = ADVECTION_TIMESTEP * SEC_U_LATITUDE(I) *          ADVUGD1E.555    
     *                  (U_TERM(I)+V_TERM(I)) + FIELD_INC(I,K)             ADVUGD1E.556    
      ENDDO                                                                ADVUGD1E.557    
                                                                           ADVUGD1E.559    
      FIELD_INC(END_U_POINT_NO_HALO,K)=0.0                                 ADVUGD1E.560    
                                                                           ADVUGD1E.561    
*IF -DEF,GLOBAL                                                            ADVUGD1E.562    
                                                                           ADVUGD1E.563    
CL    LIMITED AREA MODEL SET BOUNDARY INCREMENTS TO ZERO.                  ADVUGD1E.564    
                                                                           ADVUGD1E.565    
        IF (at_left_of_LPG) THEN                                           ADVUGD1E.566    
          DO I=START_POINT_NO_HALO+FIRST_ROW_PT-1,                         ADVUGD1E.567    
     &         END_U_POINT_NO_HALO,ROW_LENGTH                              ADVUGD1E.568    
            FIELD_INC(I,K)=0.0                                             ADVUGD1E.569    
          ENDDO                                                            ADVUGD1E.570    
        ENDIF                                                              ADVUGD1E.571    
                                                                           ADVUGD1E.572    
        IF (at_right_of_LPG) THEN                                          ADVUGD1E.573    
          DO I=START_POINT_NO_HALO+LAST_ROW_PT-2,                          ADVUGD1E.574    
     &         END_U_POINT_NO_HALO,ROW_LENGTH                              ADVUGD1E.575    
            FIELD_INC(I,K)=0.0                                             ADVUGD1E.576    
            FIELD_INC(I+1,K)=0.0                                           ADVUGD1E.577    
          ENDDO                                                            ADVUGD1E.578    
        ENDIF                                                              ADVUGD1E.579    
                                                                           ADVUGD1E.580    
*ENDIF                                                                     ADVUGD1E.581    
                                                                           ADVUGD1E.582    
      ENDDO !DO K=1,P_LEVELS                                               ADVUGD1E.583    
                                                                           APB3F405.369    
      ENDIF !IF(L_SECOND)                                                  APB3F405.370    
                                                                           ADVUGD1E.584    
CL    END OF ROUTINE ADV_U_GD                                              ADVUGD1E.585    
                                                                           ADVUGD1E.586    
      RETURN                                                               ADVUGD1E.587    
      END                                                                  ADVUGD1E.588    
*ENDIF                                                                     ADVUGD1E.589    
*ENDIF                                                                     ADVUGD1E.590