*IF DEF,A12_1B                                                             ARB2F400.2      
C ******************************COPYRIGHT******************************    GTS2F400.235    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.236    
C                                                                          GTS2F400.237    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.238    
C restrictions as set forth in the contract.                               GTS2F400.239    
C                                                                          GTS2F400.240    
C                Meteorological Office                                     GTS2F400.241    
C                London Road                                               GTS2F400.242    
C                BRACKNELL                                                 GTS2F400.243    
C                Berkshire UK                                              GTS2F400.244    
C                RG12 2SZ                                                  GTS2F400.245    
C                                                                          GTS2F400.246    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.247    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.248    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.249    
C Modelling at the above address.                                          GTS2F400.250    
C ******************************COPYRIGHT******************************    GTS2F400.251    
C                                                                          GTS2F400.252    
CLL   SUBROUTINE ADV_P_GD -------------------------------------------      ADVPGD1A.3      
CLL                                                                        ADVPGD1A.4      
CLL   PURPOSE:   CALCULATES ADVECTION INCREMENTS TO A FIELD AT A           ADVPGD1A.5      
CLL              SINGLE MODEL LEVEL USING AN EQUATION OF THE FORM(36).     ADVPGD1A.6      
CLL              NOT SUITABLE FOR SINGLE COLUMN USE.                       ADVPGD1A.7      
CLL                                                                        ADVPGD1A.8      
CLL   VERSION FOR CRAY Y-MP                                                ADVPGD1A.9      
CLL                                                                        ADVPGD1A.10     
CLL   WRITTEN  BY M.H MAWSON.                                              ADVPGD1A.11     
CLL                                                                        ADVPGD1A.12     
CLL  Model            Modification history from model version 3.0:         ADVPGD1A.13     
CLL version  Date                                                          ADVPGD1A.14     
CLL                                                                        ADVPGD1A.15     
CLL   3.4    06/08/94 Vertical advection code restructured to improve      AAD2F304.446    
CLL                   parallel efficiency on C90.                          AAD2F304.447    
CLL                   Authors: A. Dickinson, D. Salmond                    AAD2F304.448    
CLL                   Reviewer: M. Mawson                                  AAD2F304.449    
CLL                                                                        AAD2F304.450    
CLL   3.4   23/06/94  DEF NOWHBR replaced by LOGICAL LWHITBROM             GSS1F304.801    
CLL                                                  S.J.Swarbrick         GSS1F304.802    
!     3.5    28/03/95 MPP code: Change updateable area and                 APB0F305.527    
!                     remove explicit wrap around calcs.  P.Burton         APB0F305.528    
!     4.1    29/04/96 Remove MPP code (new ADVPGD1C version for MPP)       APB0F401.748    
!                     and add TYPFLDPT arguments                           APB0F401.749    
CLL                                                                        GSS1F304.803    
CLL   PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4,       ADVPGD1A.16     
CLL                         STANDARD B. VERSION 2, DATED 18/01/90          ADVPGD1A.17     
CLL                                                                        ADVPGD1A.18     
CLL   LOGICAL COMPONENTS COVERED: P121                                     ADVPGD1A.19     
CLL                                                                        ADVPGD1A.20     
CLL   PROJECT TASK: P1                                                     ADVPGD1A.21     
CLL                                                                        ADVPGD1A.22     
CLL   DOCUMENTATION:       THE EQUATION USED IS (35)                       ADVPGD1A.23     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10     ADVPGD1A.24     
CLL                        M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON           ADVPGD1A.25     
CLLEND-------------------------------------------------------------        ADVPGD1A.26     
C                                                                          ADVPGD1A.27     
C*L   ARGUMENTS:---------------------------------------------------        ADVPGD1A.28     

      SUBROUTINE ADV_P_GD                                                   34,6ADVPGD1A.29     
     1                   (FIELD_LOWER,FIELD,FIELD_UPPER,U,V,               AAD2F304.451    
     1                   ETADOT_LOWER,ETADOT_UPPER,                        AAD2F304.452    
     2                   SEC_P_LATITUDE,FIELD_INC,NUX,NUY,P_FIELD,         ADVPGD1A.31     
     3                   U_FIELD,ROW_LENGTH,                               APB0F401.750    
*CALL ARGFLDPT                                                             APB0F401.751    
     4                   ADVECTION_TIMESTEP,                               APB0F401.752    
     5                   LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,     ADVPGD1A.34     
     6                   SEC_U_LATITUDE,BRSP,                              AAD2F304.453    
     7                   L_SECOND,LWHITBROM)                               AAD2F304.454    
                                                                           ADVPGD1A.37     
      IMPLICIT NONE                                                        ADVPGD1A.38     
                                                                           ADVPGD1A.39     
      INTEGER                                                              ADVPGD1A.40     
     *  P_FIELD             !IN DIMENSION OF FIELDS ON PRESSSURE GRID.     ADVPGD1A.41     
     *, U_FIELD             !IN DIMENSION OF FIELDS ON VELOCITY GRID       ADVPGD1A.42     
     *, ROW_LENGTH          !IN NUMBER OF POINTS PER ROW                   ADVPGD1A.43     
! All TYPFLDPT arguments are intent IN                                     APB0F401.753    
*CALL TYPFLDPT                                                             APB0F401.754    
                                                                           ADVPGD1A.46     
      LOGICAL                                                              ADVPGD1A.47     
     *  L_SECOND     ! SET TO TRUE IF NU_BASIC IS ZERO.                    ADVPGD1A.48     
     * ,LWHITBROM    ! SWITCH FOR WHITE & BROMLEY TERMS                    GSS1F304.804    
                                                                           ADVPGD1A.49     
      REAL                                                                 ADVPGD1A.50     
     * U(U_FIELD)           !IN ADVECTING U FIELD, MASS-WEIGHTED.          ADVPGD1A.51     
     *,V(U_FIELD)           !IN ADVECTING V FIELD, MASS-WEIGHTED.          ADVPGD1A.52     
     *,ETADOT_UPPER(P_FIELD)!IN ADVECTING VERTICAL VELOC AT K+1/2,         AAD2F304.455    
     *                      !   MASS-WEIGHTED.                             AAD2F304.456    
     *,ETADOT_LOWER(P_FIELD)!IN ADVECTING VERTICAL VELOC AT K-1/2,         AAD2F304.457    
     *                      !   MASS-WEIGHTED.                             ADVPGD1A.54     
     *,FIELD(P_FIELD)       !IN FIELD TO BE ADVECTED.                      ADVPGD1A.55     
     *,FIELD_UPPER(P_FIELD) !IN FIELD TO BE ADVECTED AT LEVEL + 1 .        ADVPGD1A.56     
     *,FIELD_LOWER(P_FIELD) !IN FIELD TO BE ADVECTED AT LEVEL - 1 .        AAD2F304.458    
     *,NUX(P_FIELD)   !IN HOLDS PARAMETER NU FOR EAST-WEST ADVECTION.      ADVPGD1A.57     
     *,NUY(P_FIELD)   !IN HOLDS PARAMETER NU FOR NORTH-SOUTH ADVECTION.    ADVPGD1A.58     
     *,SEC_P_LATITUDE(P_FIELD) !IN HOLDS 1/COS(PHI) AT P POINTS.           ADVPGD1A.59     
     *,SEC_U_LATITUDE(U_FIELD) !IN HOLDS 1/COS(PHI) AT U POINTS.           ADVPGD1A.60     
     *,ADVECTION_TIMESTEP   !IN                                            ADVPGD1A.61     
     *,LATITUDE_STEP_INVERSE  !IN 1/(DELTA PHI)                            ADVPGD1A.62     
     *,LONGITUDE_STEP_INVERSE !IN 1/(DELTA LAMDA)                          ADVPGD1A.63     
                                                                           ADVPGD1A.64     
      REAL                                                                 ADVPGD1A.65     
     * BRSP(P_FIELD)  !IN BRSP TERM AT LEVEL (SEE DOC.PAPER NO 10)         AAD2F304.459    
                                                                           ADVPGD1A.74     
      REAL                                                                 ADVPGD1A.75     
     * FIELD_INC(P_FIELD)   !OUT HOLDS INCREMENT TO FIELD.                 ADVPGD1A.76     
C                                                                          ADVPGD1A.77     
C*---------------------------------------------------------------------    ADVPGD1A.78     
                                                                           ADVPGD1A.79     
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    ADVPGD1A.80     
C DEFINE LOCAL ARRAYS: 3 ARE REQUIRED                                      ADVPGD1A.81     
                                                                           ADVPGD1A.82     
      REAL                                                                 ADVPGD1A.83     
     * WORK(P_FIELD)        ! GENERAL WORK-SPACE.                          ADVPGD1A.84     
     *,U_TERM(P_FIELD)      ! HOLDS U ADVECTION TERM FROM EQUATION (35)    ADVPGD1A.85     
     *,V_TERM(P_FIELD)      ! HOLDS V ADVECTION TERM FROM EQUATION (35)    ADVPGD1A.86     
C*---------------------------------------------------------------------    ADVPGD1A.87     
C DEFINE LOCAL VARIABLES                                                   ADVPGD1A.88     
                                                                           ADVPGD1A.89     
C REAL SCALARS                                                             ADVPGD1A.90     
      REAL                                                                 ADVPGD1A.91     
     * SCALAR1,SCALAR2                                                     AAD2F304.460    
                                                                           ADVPGD1A.95     
C COUNT VARIABLES FOR DO LOOPS ETC.                                        ADVPGD1A.96     
      INTEGER                                                              ADVPGD1A.97     
     *  I,IJ,IK,IL,IM,J                                                    ADVPGD1A.98     
                                                                           ADVPGD1A.99     
C*L   NO EXTERNAL SUBROUTINE CALLS:------------------------------------    ADVPGD1A.100    
C*---------------------------------------------------------------------    ADVPGD1A.101    
                                                                           ADVPGD1A.102    
CL    MAXIMUM VECTOR LENGTH ASSUMED IS END_P_UPDATE-START_P_UPDATE+1       ADVPGD1A.103    
CL---------------------------------------------------------------------    ADVPGD1A.104    
CL    INTERNAL STRUCTURE.                                                  ADVPGD1A.105    
CL---------------------------------------------------------------------    ADVPGD1A.106    
CL                                                                         ADVPGD1A.107    
CL---------------------------------------------------------------------    ADVPGD1A.108    
CL    SECTION 1.     CALCULATE U_TERM IN EQUATION (35).                    ADVPGD1A.109    
CL---------------------------------------------------------------------    ADVPGD1A.110    
                                                                           ADVPGD1A.111    
C----------------------------------------------------------------------    ADVPGD1A.112    
CL    SECTION 1.1    CALCULATE TERM U D(FIELD)/D(LAMDA).                   ADVPGD1A.113    
C----------------------------------------------------------------------    ADVPGD1A.114    
                                                                           ADVPGD1A.115    
C CALCULATE TERM AT ALL POINTS EXCEPT LAST AND STORE IN WORK.              ADVPGD1A.116    
! Loop over field, missing top and bottom rows                             APB0F401.755    
      DO 110 I=START_POINT_NO_HALO,END_P_POINT_NO_HALO-1                   APB0F401.756    
        WORK(I) = .5*(U(I)+U(I-ROW_LENGTH))*LONGITUDE_STEP_INVERSE*        ADVPGD1A.118    
     *             (FIELD(I+1) - FIELD(I))                                 ADVPGD1A.119    
 110  CONTINUE                                                             ADVPGD1A.120    
                                                                           ADVPGD1A.121    
*IF DEF,GLOBAL                                                             ADVPGD1A.122    
C IF GLOBAL MODEL RECALCULATE END-POINT VALUE.                             ADVPGD1A.123    
! Loop over last point of each row, missing top and bottom rows            APB0F401.757    
      DO 112 I=START_POINT_NO_HALO+LAST_ROW_PT-1,END_P_POINT_NO_HALO,      APB0F401.758    
     &         ROW_LENGTH                                                  APB0F401.759    
        WORK(I) = .5*(U(I)+U(I-ROW_LENGTH))*LONGITUDE_STEP_INVERSE*        ADVPGD1A.125    
     *             (FIELD(I+1-ROW_LENGTH) - FIELD(I))                      ADVPGD1A.126    
 112  CONTINUE                                                             ADVPGD1A.127    
*ENDIF                                                                     ADVPGD1A.128    
                                                                           ADVPGD1A.129    
C----------------------------------------------------------------------    ADVPGD1A.130    
CL    SECTION 1.2    CALCULATE U ADVECTION TERM IN EQUATION (35).          ADVPGD1A.131    
CL                   IF L_SECOND = TRUE PERFORM SECOND ORDER ADVECTION     ADVPGD1A.132    
CL                   ONLY.                                                 ADVPGD1A.133    
C----------------------------------------------------------------------    ADVPGD1A.134    
                                                                           ADVPGD1A.135    
      IF(L_SECOND) THEN                                                    ADVPGD1A.136    
*IF DEF,GLOBAL                                                             ADVPGD1A.137    
C LOOP OVER ALL POINTS.                                                    ADVPGD1A.138    
                                                                           ADVPGD1A.139    
! Loop over field, missing top and bottom rows, and first point            APB0F401.760    
        DO J=START_POINT_NO_HALO+1,END_P_POINT_NO_HALO                     APB0F401.761    
           U_TERM(J) = .5*(WORK(J)+WORK(J-1))                              ADVPGD1A.141    
        END DO                                                             ADVPGD1A.142    
                                                                           ADVPGD1A.143    
C CALCULATE  VALUES AT FIRST,SECOND AND LAST POINTS ON A ROW.              ADVPGD1A.144    
C WHERE FIRST LOOP CALCULATED THEM INCORRECTLY.                            ADVPGD1A.145    
                                                                           ADVPGD1A.146    
CFPP$ NODEPCHK                                                             ADVPGD1A.147    
! Fujitsu vectorization directive                                          GRB0F405.577    
!OCL NOVREC                                                                GRB0F405.578    
! Loop over first point of each row, missing top and bottom rows           APB0F401.762    
        DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH            APB0F401.763    
          U_TERM(I) = .5*(WORK(I)+WORK(I+ROW_LENGTH-1))                    ADVPGD1A.149    
        END DO                                                             ADVPGD1A.150    
                                                                           ADVPGD1A.151    
*ELSE                                                                      ADVPGD1A.152    
C LIMITED AREA MODEL.                                                      ADVPGD1A.153    
                                                                           ADVPGD1A.154    
! Loop over field, missing top and bottom rows and first and               APB0F401.764    
! last points.                                                             APB0F401.765    
        DO J=START_POINT_NO_HALO+1,END_P_POINT_NO_HALO-1                   APB0F401.766    
          U_TERM(J) = .5*(WORK(J)+WORK(J-1))                               ADVPGD1A.156    
        END DO                                                             ADVPGD1A.157    
                                                                           ADVPGD1A.158    
C CORNER VALUES                                                            ADVPGD1A.159    
                                                                           ADVPGD1A.160    
        U_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.767    
        U_TERM(END_P_POINT_NO_HALO)=0.0                                    APB0F401.768    
                                                                           ADVPGD1A.163    
*ENDIF                                                                     ADVPGD1A.164    
      ELSE                                                                 ADVPGD1A.165    
*IF DEF,GLOBAL                                                             ADVPGD1A.166    
C LOOP OVER ALL POINTS.                                                    ADVPGD1A.167    
                                                                           ADVPGD1A.168    
! Loop over field, missing top and bottom rows and first two points        APB0F401.769    
! and last point                                                           APB0F401.770    
        DO 120 J=START_POINT_NO_HALO+2,END_P_POINT_NO_HALO-1               APB0F401.771    
           U_TERM(J) = (1.+NUX(J))*.5*(WORK(J)+WORK(J-1))-NUX(J)*.5*       ADVPGD1A.170    
     *                  (WORK(J+1)+WORK(J-2))                              ADVPGD1A.171    
 120    CONTINUE                                                           ADVPGD1A.172    
                                                                           ADVPGD1A.173    
C CALCULATE  VALUES AT FIRST,SECOND AND LAST POINTS ON A ROW.              ADVPGD1A.174    
C WHERE FIRST LOOP CALCULATED THEM INCORRECTLY.                            ADVPGD1A.175    
                                                                           ADVPGD1A.176    
CFPP$ NODEPCHK                                                             ADVPGD1A.177    
! Fujitsu vectorization directive                                          GRB0F405.579    
!OCL NOVREC                                                                GRB0F405.580    
! Loop over first point of every row, missing top and bottom rows          APB0F401.772    
        DO 124 I=START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH        APB0F401.773    
          IJ =I+LAST_ROW_PT-1  ! IJ is last point on row                   APB0F401.774    
          IK = IJ - 1                                                      ADVPGD1A.180    
          IL = I + 1                                                       ADVPGD1A.181    
C FIRST POINT.                                                             ADVPGD1A.182    
          U_TERM(I) = (1.+NUX(I))*.5*(WORK(I)+WORK(IJ))-NUX(I)*.5*         ADVPGD1A.183    
     *                  (WORK(IL)+WORK(IK))                                ADVPGD1A.184    
C SECOND POINT.                                                            ADVPGD1A.185    
          U_TERM(IL) = (1.+NUX(IL))*.5*(WORK(IL)+WORK(I))-NUX(IL)*.5*      ADVPGD1A.186    
     *                  (WORK(I+2)+WORK(IJ))                               ADVPGD1A.187    
C LAST POINT.                                                              ADVPGD1A.188    
          U_TERM(IJ) = (1.+NUX(IJ))*.5*(WORK(IJ)+WORK(IK))-NUX(IJ)*.5*     ADVPGD1A.189    
     *                  (WORK(I)+WORK(IK-1))                               ADVPGD1A.190    
 124    CONTINUE                                                           ADVPGD1A.191    
                                                                           ADVPGD1A.192    
*ELSE                                                                      ADVPGD1A.193    
C LIMITED AREA MODEL. VALUES NOT CALCULATED AT FIRST,SECOND,NEXT TO LAST   ADVPGD1A.194    
C AND LAST ON A ROW.                                                       ADVPGD1A.195    
                                                                           ADVPGD1A.196    
! Loop over field, missing top and bottom rows and first two points        APB0F401.775    
! and last two points.                                                     APB0F401.776    
        DO 120 J=START_POINT_NO_HALO+2,END_P_POINT_NO_HALO-2               APB0F401.777    
          U_TERM(J) = (1.+NUX(J))*.5*(WORK(J)+WORK(J-1))-NUX(J)*.5*        ADVPGD1A.198    
     *                  (WORK(J+1)+WORK(J-2))                              ADVPGD1A.199    
 120    CONTINUE                                                           ADVPGD1A.200    
                                                                           ADVPGD1A.201    
C CALCULATE  VALUES AT SECOND AND NEXT TO LAST POINTS ON A ROW.            ADVPGD1A.202    
C THESE VALUES ARE JUST SECOND ORDER.                                      ADVPGD1A.203    
                                                                           ADVPGD1A.204    
! Loop over first point of every row, missing top and bottom rows          APB0F401.778    
        DO 124 I=START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH        APB0F401.779    
          IK = I+LAST_ROW_PT-2  ! IK is penultimate point of row           APB0F401.780    
          IL = I + 1                                                       ADVPGD1A.207    
C SECOND POINT.                                                            ADVPGD1A.208    
          U_TERM(IL) = .5*(WORK(IL)+WORK(I))                               ADVPGD1A.209    
C NEXT TO LAST POINT.                                                      ADVPGD1A.210    
          U_TERM(IK) = .5*(WORK(IK)+WORK(IK-1))                            ADVPGD1A.211    
 124    CONTINUE                                                           ADVPGD1A.212    
C         CORNER VALUES                                                    ADVPGD1A.213    
C                                                                          ADVPGD1A.214    
        U_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.781    
        U_TERM(END_P_POINT_NO_HALO)=0.0                                    APB0F401.782    
C                                                                          ADVPGD1A.217    
                                                                           ADVPGD1A.218    
*ENDIF                                                                     ADVPGD1A.219    
      END IF                                                               ADVPGD1A.220    
                                                                           ADVPGD1A.221    
CL                                                                         ADVPGD1A.222    
CL---------------------------------------------------------------------    ADVPGD1A.223    
CL    SECTION 2.     CALCULATE V_TERM IN EQUATION (35).                    ADVPGD1A.224    
CL---------------------------------------------------------------------    ADVPGD1A.225    
                                                                           ADVPGD1A.226    
C----------------------------------------------------------------------    ADVPGD1A.227    
CL    SECTION 2.1    CALCULATE TERM V D(FIELD)/D(PHI).                     ADVPGD1A.228    
C----------------------------------------------------------------------    ADVPGD1A.229    
                                                                           ADVPGD1A.230    
C CALCULATE TERM AT ALL POINTS EXCEPT FIRST AND STORE IN WORK.             ADVPGD1A.231    
! Loop over field, missing bottom row and first point of top row           APB0F401.783    
      DO 210 I=START_POINT_NO_HALO-ROW_LENGTH+1,END_P_POINT_NO_HALO        APB0F401.784    
        WORK(I) = .5*(V(I)+V(I-1))*LATITUDE_STEP_INVERSE*                  ADVPGD1A.233    
     *             (FIELD(I) - FIELD(I+ROW_LENGTH))                        ADVPGD1A.234    
 210  CONTINUE                                                             ADVPGD1A.235    
                                                                           ADVPGD1A.236    
*IF DEF,GLOBAL                                                             ADVPGD1A.237    
C IF GLOBAL MODEL RECALCULATE FIRST-POINT VALUE.                           ADVPGD1A.238    
! Loop over first point of every row, missing bottom row                   APB0F401.785    
      DO 212 I=START_POINT_NO_HALO-ROW_LENGTH,END_P_POINT_NO_HALO,         APB0F401.786    
     &         ROW_LENGTH                                                  APB0F401.787    
        WORK(I) = .5*(V(I)+V(I+ROW_LENGTH-1))*LATITUDE_STEP_INVERSE*       ADVPGD1A.240    
     *             (FIELD(I) - FIELD(I+ROW_LENGTH))                        ADVPGD1A.241    
 212  CONTINUE                                                             ADVPGD1A.242    
*ENDIF                                                                     ADVPGD1A.243    
                                                                           ADVPGD1A.244    
C----------------------------------------------------------------------    ADVPGD1A.245    
CL    SECTION 2.2    CALCULATE V ADVECTION TERM IN EQUATION (35).          ADVPGD1A.246    
CL                   IF L_SECOND = TRUE PERFORM SECOND ORDER ADVECTION     ADVPGD1A.247    
CL                   ONLY.                                                 ADVPGD1A.248    
C----------------------------------------------------------------------    ADVPGD1A.249    
                                                                           ADVPGD1A.250    
      IF(L_SECOND) THEN                                                    ADVPGD1A.251    
*IF DEF,GLOBAL                                                             ADVPGD1A.252    
C GLOBAL MODEL.                                                            ADVPGD1A.253    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO POLES.                       ADVPGD1A.254    
                                                                           ADVPGD1A.255    
        DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                       APB0F401.788    
          V_TERM(I) = .5*(WORK(I-ROW_LENGTH)+WORK(I))                      ADVPGD1A.257    
        END DO                                                             ADVPGD1A.258    
                                                                           ADVPGD1A.259    
C CALCULATE VALUES ON SLICES NEXT TO POLES.                                ADVPGD1A.260    
                                                                           ADVPGD1A.261    
CFPP$ NODEPCHK                                                             ADVPGD1A.262    
! Fujitsu vectorization directive                                          GRB0F405.581    
!OCL NOVREC                                                                GRB0F405.582    
        DO I=1,ROW_LENGTH                                                  ADVPGD1A.263    
          IJ = P_FIELD - ROW_LENGTH + I                                    ADVPGD1A.264    
C NEXT TO NORTH POLE SLICE.                                                ADVPGD1A.265    
          V_TERM(I) = WORK(I)*.5                                           ADVPGD1A.266    
C NEXT TO SOUTH POLE SLICE.                                                ADVPGD1A.267    
          V_TERM(IJ) = WORK(IJ-ROW_LENGTH)*.5                              ADVPGD1A.268    
        END DO                                                             ADVPGD1A.269    
                                                                           ADVPGD1A.270    
*ELSE                                                                      ADVPGD1A.271    
C LIMITED AREA MODEL.                                                      ADVPGD1A.272    
                                                                           ADVPGD1A.273    
! Loop over field, missing top and bottom rows and first and last points   APB0F401.789    
        DO I=START_POINT_NO_HALO+1,END_P_POINT_NO_HALO-1                   APB0F401.790    
          V_TERM(I) = .5*(WORK(I-ROW_LENGTH)+WORK(I))                      ADVPGD1A.275    
        END DO                                                             ADVPGD1A.276    
                                                                           ADVPGD1A.277    
        V_TERM(START_POINT_NO_HALO)=0.0                                    APB0F401.791    
        V_TERM(END_P_POINT_NO_HALO)=0.0                                    APB0F401.792    
                                                                           ADVPGD1A.280    
*ENDIF                                                                     ADVPGD1A.281    
      ELSE                                                                 ADVPGD1A.282    
*IF DEF,GLOBAL                                                             ADVPGD1A.283    
C GLOBAL MODEL.                                                            ADVPGD1A.284    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO POLES.                       ADVPGD1A.285    
                                                                           ADVPGD1A.286    
! Loop over field missing top and bottom two rows                          APB0F401.793    
        DO 220 I=START_POINT_NO_HALO+ROW_LENGTH,                           APB0F401.794    
     &           END_P_POINT_NO_HALO-ROW_LENGTH                            APB0F401.795    
          V_TERM(I) = (1.+NUY(I))*.5*(WORK(I-ROW_LENGTH)+WORK(I)) -        ADVPGD1A.288    
     *             NUY(I)*.5*(WORK(I+ROW_LENGTH)+WORK(I-2*ROW_LENGTH))     ADVPGD1A.289    
 220    CONTINUE                                                           ADVPGD1A.290    
                                                                           ADVPGD1A.291    
C CALCULATE VALUES ON SLICES NEXT TO POLES.                                ADVPGD1A.292    
                                                                           ADVPGD1A.293    
CFPP$ NODEPCHK                                                             ADVPGD1A.294    
! Fujitsu vectorization directive                                          GRB0F405.583    
!OCL NOVREC                                                                GRB0F405.584    
        DO 222 I=1,ROW_LENGTH                                              ADVPGD1A.295    
          IJ = END_P_POINT_NO_HALO - ROW_LENGTH + I                        APB0F401.796    
          IK = START_POINT_NO_HALO + I - 1                                 APB0F401.797    
          IL = MOD(I-1+ROW_LENGTH/2,ROW_LENGTH) + 1                        ADVPGD1A.298    
          IM = MOD(IJ-1+ROW_LENGTH/2,ROW_LENGTH)+P_FIELD-2*ROW_LENGTH+1    ADVPGD1A.299    
C  NORTH POLE ROWS.                                                        ADVPGD1A.300    
          V_TERM(IK) = (1.+NUY(IK))*.5*(WORK(IK-ROW_LENGTH)+WORK(IK)) -    ADVPGD1A.301    
     *             NUY(IK)*.5*(WORK(IK+ROW_LENGTH)+WORK(IL))               ADVPGD1A.302    
          V_TERM(I) = (1.+NUY(IK))*.5*WORK(I) -                            ADVPGD1A.303    
     *             NUY(IK)*.5*WORK(IK)                                     ADVPGD1A.304    
C  SOUTH POLE ROWS.                                                        ADVPGD1A.305    
          V_TERM(IJ) = (1.+NUY(IJ))*.5*(WORK(IJ-ROW_LENGTH)+WORK(IJ)) -    ADVPGD1A.306    
     *             NUY(IJ)*.5*(WORK(IM)+WORK(IJ-2*ROW_LENGTH))             ADVPGD1A.307    
          V_TERM(IJ+ROW_LENGTH) = (1.+NUY(IJ))*.5*WORK(IJ) -               ADVPGD1A.308    
     *             NUY(IJ)*.5*WORK(IJ-ROW_LENGTH)                          ADVPGD1A.309    
 222    CONTINUE                                                           ADVPGD1A.310    
                                                                           ADVPGD1A.311    
*ELSE                                                                      ADVPGD1A.312    
C LIMITED AREA MODEL.                                                      ADVPGD1A.313    
C CALCULATE ALL VALUES EXCEPT ON ROWS NEXT TO BOUNDARIES.                  ADVPGD1A.314    
                                                                           ADVPGD1A.315    
! Loop over field missing top and bottom rows                              APB0F401.798    
        DO 220 I=START_POINT_NO_HALO+ROW_LENGTH,                           APB0F401.799    
     &           END_P_POINT_NO_HALO-ROW_LENGTH                            APB0F401.800    
          V_TERM(I) = (1.+NUY(I))*.5*(WORK(I-ROW_LENGTH)+WORK(I)) -        ADVPGD1A.317    
     *             NUY(I)*.5*(WORK(I+ROW_LENGTH)+WORK(I-2*ROW_LENGTH))     ADVPGD1A.318    
 220    CONTINUE                                                           ADVPGD1A.319    
                                                                           ADVPGD1A.320    
C CALCULATE VALUES ON SLICES NEXT TO BOUNDARIES AS SECOND ORDER.           ADVPGD1A.321    
                                                                           ADVPGD1A.322    
        DO 222 I=2,ROW_LENGTH-1                                            ADVPGD1A.323    
          IJ = END_P_POINT_NO_HALO-ROW_LENGTH+I                            APB0F401.801    
          IK = START_POINT_NO_HALO+I-1                                     APB0F401.802    
C NEXT TO NORTHERN BOUNDARY.                                               ADVPGD1A.326    
          V_TERM(IK) = .5*(WORK(IK-ROW_LENGTH)+WORK(IK))                   ADVPGD1A.327    
C NEXT TO SOUTHERN BOUNDARY.                                               ADVPGD1A.328    
          V_TERM(IJ) = .5*(WORK(IJ-ROW_LENGTH)+WORK(IJ))                   ADVPGD1A.329    
 222    CONTINUE                                                           ADVPGD1A.330    
        V_TERM(START_POINT_NO_HALO) = 0.0                                  APB0F401.803    
        V_TERM(START_POINT_NO_HALO+ROW_LENGTH-1)=0.0                       APB0F401.804    
C                                                                          ADVPGD1A.333    
        V_TERM(END_P_POINT_NO_HALO) = 0.0                                  APB0F401.805    
        V_TERM(END_P_POINT_NO_HALO-ROW_LENGTH+1) = 0.0                     APB0F401.806    
                                                                           ADVPGD1A.336    
*ENDIF                                                                     ADVPGD1A.337    
      END IF                                                               ADVPGD1A.338    
                                                                           ADVPGD1A.339    
CL                                                                         ADVPGD1A.340    
CL---------------------------------------------------------------------    ADVPGD1A.341    
CL    SECTION 3.     CALCULATE VERTICAL FLUX AND COMBINE WITH U AND V      ADVPGD1A.342    
CL                   TERMS TO FORM INCREMENT.                              ADVPGD1A.343    
CL---------------------------------------------------------------------    ADVPGD1A.344    
                                                                           ADVPGD1A.345    
CL    VERTICAL FLUX ON INPUT IS .5*TIMESTEP*ETADOT*D(FIELD)/D(ETA)         ADVPGD1A.346    
CL    AT LEVEL K-1/2. AT THE END OF THIS SECTION IT IS THE SAME            ADVPGD1A.347    
CL    QUANTITY BUT AT LEVEL K+1/2.                                         ADVPGD1A.348    
                                                                           ADVPGD1A.349    
! Loop over field missing top and bottom rows.                             APB0F401.807    
      DO 300 I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     APB0F401.808    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.461    
     *         ETADOT_UPPER(I) * (FIELD_UPPER(I) - FIELD(I))               AAD2F304.462    
        SCALAR2 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.463    
     *         ETADOT_LOWER(I) * (FIELD(I) - FIELD_LOWER(I))               AAD2F304.464    
        FIELD_INC(I) = ADVECTION_TIMESTEP * SEC_P_LATITUDE(I) *            ADVPGD1A.353    
     *                  (U_TERM(I)+V_TERM(I))                              ADVPGD1A.354    
     &                   + SCALAR1+SCALAR2                                 AAD2F304.465    
      IF (LWHITBROM) THEN                                                  GSS1F304.805    
        FIELD_INC(I) = FIELD_INC(I)                                        GSS1F304.806    
     *                  + FIELD(I)*BRSP(I)                                 AAD2F304.466    
      END IF                                                               GSS1F304.807    
 300  CONTINUE                                                             ADVPGD1A.360    
                                                                           ADVPGD1A.361    
*IF DEF,GLOBAL                                                             ADVPGD1A.362    
CFPP$ NODEPCHK                                                             ADVPGD1A.363    
! Fujitsu vectorization directive                                          GRB0F405.585    
!OCL NOVREC                                                                GRB0F405.586    
      DO 310 I=1,ROW_LENGTH                                                ADVPGD1A.364    
C NORTH POLE FLUX                                                          ADVPGD1A.365    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.467    
     *         ETADOT_UPPER(I) * (FIELD_UPPER(I) - FIELD(I))               AAD2F304.468    
        SCALAR2 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.469    
     *         ETADOT_LOWER(I) * (FIELD(I) - FIELD_LOWER(I))               AAD2F304.470    
        FIELD_INC(I) = ADVECTION_TIMESTEP * SEC_P_LATITUDE(I) *            ADVPGD1A.368    
     *                 V_TERM(I)                                           ADVPGD1A.369    
     &                   + SCALAR1+SCALAR2                                 AAD2F304.471    
      IF (LWHITBROM) THEN                                                  GSS1F304.808    
        FIELD_INC(I) = FIELD_INC(I)                                        GSS1F304.809    
     *                  +FIELD(I)*BRSP(I)                                  AAD2F304.472    
      END IF                                                               GSS1F304.810    
 310  CONTINUE                                                             ADVPGD1A.375    
CFPP$ NODEPCHK                                                             ADVPGD1A.376    
! Fujitsu vectorization directive                                          GRB0F405.587    
!OCL NOVREC                                                                GRB0F405.588    
      DO 320 I=1,ROW_LENGTH                                                ADVPGD1A.377    
C SOUTH POLE FLUX                                                          ADVPGD1A.378    
        IJ = P_FIELD - ROW_LENGTH + I                                      ADVPGD1A.379    
        SCALAR1 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.473    
     *         ETADOT_UPPER(IJ) * (FIELD_UPPER(IJ) - FIELD(IJ))            AAD2F304.474    
        SCALAR2 = .5 * ADVECTION_TIMESTEP *                                AAD2F304.475    
     *         ETADOT_LOWER(IJ) * (FIELD(IJ) - FIELD_LOWER(IJ))            AAD2F304.476    
        FIELD_INC(IJ) = ADVECTION_TIMESTEP * SEC_P_LATITUDE(IJ) *          ADVPGD1A.382    
     *                 V_TERM(IJ)                                          ADVPGD1A.383    
     &                   + SCALAR1+SCALAR2                                 AAD2F304.477    
      IF (LWHITBROM) THEN                                                  GSS1F304.811    
        FIELD_INC(IJ) = FIELD_INC(IJ)                                      GSS1F304.812    
     *                  +FIELD(IJ)*BRSP(IJ)                                AAD2F304.478    
      END IF                                                               GSS1F304.813    
 320  CONTINUE                                                             ADVPGD1A.389    
*ELSE                                                                      ADVPGD1A.390    
                                                                           ADVPGD1A.391    
CL   LIMITED AREA MODEL SET BOUNDARY INCREMENTS                            AAD2F304.479    
CL   TO ZERO.                                                              ADVPGD1A.393    
                                                                           ADVPGD1A.394    
! Loop over first point of each row, missing top and bottom rows.          APB0F401.809    
      DO 310 I=START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH          APB0F401.810    
        FIELD_INC(I) = 0.                                                  ADVPGD1A.396    
        FIELD_INC(I+ROW_LENGTH-1) = 0.                                     ADVPGD1A.397    
 310  CONTINUE                                                             ADVPGD1A.400    
                                                                           ADVPGD1A.401    
*ENDIF                                                                     ADVPGD1A.402    
                                                                           ADVPGD1A.403    
CL    END OF ROUTINE ADV_P_GD                                              ADVPGD1A.404    
                                                                           ADVPGD1A.405    
      RETURN                                                               ADVPGD1A.406    
      END                                                                  ADVPGD1A.407    
*ENDIF                                                                     ADVPGD1A.408