*IF DEF,A12_1E                                                             THADV1E.2      
C *****************************COPYRIGHT******************************     THADV1E.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    THADV1E.4      
C                                                                          THADV1E.5      
C Use, duplication or disclosure of this code is subject to the            THADV1E.6      
C restrictions as set forth in the contract.                               THADV1E.7      
C                                                                          THADV1E.8      
C                Meteorological Office                                     THADV1E.9      
C                London Road                                               THADV1E.10     
C                BRACKNELL                                                 THADV1E.11     
C                Berkshire UK                                              THADV1E.12     
C                RG12 2SZ                                                  THADV1E.13     
C                                                                          THADV1E.14     
C If no contract has been raised with this copy of the code, the use,      THADV1E.15     
C duplication or disclosure of it is strictly prohibited.  Permission      THADV1E.16     
C to do so must first be obtained in writing from the Head of Numerical    THADV1E.17     
C Modelling at the above address.                                          THADV1E.18     
C ******************************COPYRIGHT******************************    THADV1E.19     
CLL   SUBROUTINE TH_Q_ADV -------------------------------------------      THADV1E.20     
CLL                                                                        THADV1E.21     
CLL   PURPOSE:  CALCULATES MASS-WEIGHTED INCREMENTS TO THETAL & QT         THADV1E.22     
CLL DUE TO ADVECTION  BY USING EQUATION (35) TO CALCULATE PROVISIONAL      THADV1E.23     
CLL VALUES OF THETAL AT THE NEW TIME-LEVEL, AND THEN RECALCULATING THE     THADV1E.24     
CLL ADVECTION TERMS ON THE RIGHT-HAND SIDE OF (35) USING THESE             THADV1E.25     
CLL PROVISIONAL VALUES. THE FINAL INCREMENTS ARE CALCULATED AS IN          THADV1E.26     
CLL EQUATION (40). THOSE REQUIRING FILTERING ARE FILTERED AND ALL THE      THADV1E.27     
CLL INCREMENTS ARE ADDED ONTO THE FIELDS USING (40).  IF RUNNING A         THADV1E.28     
CLL GLOBAL MODEL POLAR IS CALLED TO UPDATE POLAR VALUES.                   THADV1E.29     
CLL                                                                        THADV1E.30     
CLL   NOT SUITABLE FOR SINGLE COLUMN USE.                                  THADV1E.31     
CLL   WAS VERSION FOR CRAY Y-MP                                            THADV1E.32     
CLL                                                                        THADV1E.33     
CLL MM, DR      <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES   THADV1E.34     
CLL MPP CODE ADDED BY P.BURTON                                             THADV1E.35     
CLL                                                                        THADV1E.36     
CLL  MODEL            MODIFICATION HISTORY :                               THADV1E.37     
CLL VERSION  DATE                                                          THADV1E.38     
CLL                                                                        THADV1E.39     
CLL          07/12/95 New version of routine specifically for MPP          THADV1E.40     
CLL                   P.Burton                                             THADV1E.41     
!LL          16/08/96  Add TYPFLDPT arguments to FILTER subroutine         THADV1E.42     
!LL                    and make the FILTER_WAVE_NUMBER arrays              THADV1E.43     
!LL                    globally sized                       P.Burton       THADV1E.44     
!LL          10/01/97  Initialise unprocessed points in THETAL_PROV.       THADV1E.45     
!LL                    D. Robinson.                                        THADV1E.46     
!LL          24/04/97 Fixes to 4th order calculations   P.Burton           THADV1E.47     
C              Mar. 97   T3E migration : optimisation changes              THADV1E.48     
C                                       D.Salmond                          THADV1E.49     
CLL                                                                        THADV1E.50     
!LL   4.4   11/08/97   New version optimised for T3E.                      THADV1E.51     
!LL                    Not bit-reproducible with THADV1C                   THADV1E.52     
CLL   4.4    04/08/97  Optimisation for T3E  D.Salmond                     THADV1E.53     
CLL  4.5  19/12/97  Move calculation of 1/RS*RS*P outside 4th order IF     ARB0F405.42     
CLL                 test in section 2.1, so that it can be used later      ARB0F405.43     
CCL                 in 2nd order code too.                 RTHBarnes.      ARB0F405.44     
CLL                                                                        THADV1E.54     
CLL   PROGRAMMING STANDARD:                                                THADV1E.55     
CLL                                                                        THADV1E.56     
CLL   SYSTEM COMPONENTS COVERED: P121                                      THADV1E.57     
CLL                                                                        THADV1E.58     
CLL   SYSTEM TASK: P1                                                      THADV1E.59     
CLL                                                                        THADV1E.60     
CLL   DOCUMENTATION:       THE EQUATIONS USED ARE (35) AND (40)            THADV1E.61     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10     THADV1E.62     
CLL                        M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON           THADV1E.63     
CLL                                                                        THADV1E.64     
CLLEND-------------------------------------------------------------        THADV1E.65     
                                                                           THADV1E.66     
C*L   ARGUMENTS:---------------------------------------------------        THADV1E.67     

      SUBROUTINE TH_Q_ADV                                                   1,26THADV1E.68     
     1              (THETAL,QT,PSTAR_OLD,PSTAR,U_MEAN,V_MEAN,              THADV1E.69     
     2              SEC_P_LATITUDE,ETADOT_MEAN,RS,DELTA_AK,DELTA_BK,       THADV1E.70     
     3              LATITUDE_STEP_INVERSE,ADVECTION_TIMESTEP,NU_BASIC,     THADV1E.71     
     4              LONGITUDE_STEP_INVERSE,NORTHERN_FILTERED_P_ROW,        THADV1E.72     
     5              SOUTHERN_FILTERED_P_ROW,P_LEVELS,                      THADV1E.73     
     6              U_FIELD,P_FIELD,ROW_LENGTH,                            THADV1E.74     
*CALL ARGFLDPT                                                             THADV1E.75     
     7              TRIGS,IFAX,FILTER_WAVE_NUMBER_P_ROWS,SEC_U_LATITUDE,   THADV1E.76     
     8              AKH,BKH,QCL,QCF,P_EXNER,OMEGA,                         THADV1E.77     
     9              Q_LEVELS,AK,BK,L_SECOND,                               THADV1E.78     
     &              extended_address,                                      THADV1E.79     
     &              LWHITBROM)                                             THADV1E.80     
                                                                           THADV1E.81     
      IMPLICIT NONE                                                        THADV1E.82     
                                                                           THADV1E.83     
! All TYPFLDPT arguments are intent IN                                     THADV1E.84     
*CALL TYPFLDPT                                                             THADV1E.85     
                                                                           THADV1E.86     
      INTEGER                                                              THADV1E.87     
     *  P_FIELD            !IN DIMENSION OF FIELDS ON PRESSSURE GRID.      THADV1E.88     
     *, U_FIELD            !IN DIMENSION OF FIELDS ON VELOCITY GRID        THADV1E.89     
     *, P_LEVELS           !IN NUMBER OF PRESSURE LEVELS.                  THADV1E.90     
     *, Q_LEVELS           !IN NUMBER OF MOIST LEVELS.                     THADV1E.91     
     *, ROW_LENGTH         !IN NUMBER OF POINTS PER ROW                    THADV1E.92     
     *, NORTHERN_FILTERED_P_ROW !IN ROW ON WHICH FILTERING STOPS           THADV1E.93     
     *, SOUTHERN_FILTERED_P_ROW !IN ROW ON WHICH FILTERING STARTS AGAIN.   THADV1E.94     
     &, FILTER_WAVE_NUMBER_P_ROWS(GLOBAL_P_FIELD/GLOBAL_ROW_LENGTH)        THADV1E.95     
     &       ! LAST WAVE NUMBER NOT TO BE CHOPPED                          THADV1E.96     
     *, IFAX(10)           !IN HOLDS FACTORS OF ROW_LENGTH USED BY         THADV1E.97     
     *                     ! FILTERING.                                    THADV1E.98     
                                                                           THADV1E.99     
C LOGICAL VARIABLE                                                         THADV1E.100    
      LOGICAL                                                              THADV1E.101    
     *  L_SECOND     ! SET TO TRUE IF NU_BASIC IS ZERO.                    THADV1E.102    
     & ,LWHITBROM                                                          THADV1E.103    
      INTEGER extended_address(P_FIELD)                                    THADV1E.104    
                                                                           THADV1E.105    
      REAL                                                                 THADV1E.106    
     * THETAL(P_FIELD,P_LEVELS)  !INOUT THETAL FIELD                       THADV1E.107    
     *                           ! MASS-WEIGHTED ON OUTPUT.                THADV1E.108    
     *, QT(P_FIELD,Q_LEVELS)     !INOUT QT FIELD                           THADV1E.109    
     *                           ! MASS-WEIGHTED ON OUTPUT                 THADV1E.110    
      REAL                                                                 THADV1E.111    
     * U_MEAN(U_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED U VELOCITY      THADV1E.112    
     *                          !   FROM ADJUSTMENT STEP                   THADV1E.113    
     *,V_MEAN(U_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED V VELOCITY      THADV1E.114    
     *                          !   * COS(LAT) FROM ADJUSTMENT STEP        THADV1E.115    
     *,ETADOT_MEAN(P_FIELD,P_LEVELS)  !IN AVERAGED MASS-WEIGHTED           THADV1E.116    
     *                          !VERTICAL VELOCITY FROM ADJUSTMENT STEP    THADV1E.117    
     *,PSTAR(P_FIELD)           !IN PSTAR FIELD AT NEW TIME-LEVEL          THADV1E.118    
     *,PSTAR_OLD(P_FIELD)       !IN PSTAR AT PREVIOUS TIME-LEVEL           THADV1E.119    
     *,RS(P_FIELD,P_LEVELS)     !IN RS FIELD                               THADV1E.120    
     *,QCL(P_FIELD,Q_LEVELS)    !IN. PRIMARY ARRAY FOR QCL                 THADV1E.121    
     *,QCF(P_FIELD,Q_LEVELS)    !IN. PRIMARY ARRAY FOR QCF                 THADV1E.122    
     *,OMEGA(U_FIELD,P_LEVELS)  !IN. TRUE VERTICAL VELOCITY DP/DT          THADV1E.123    
     *,P_EXNER(P_FIELD,P_LEVELS+1) !IN. PRIMARY ARRAY FOR EXNER FUNCTION   THADV1E.124    
                                                                           THADV1E.125    
      REAL                                                                 THADV1E.126    
     * DELTA_AK(P_LEVELS)      !IN LAYER THICKNESS                         THADV1E.127    
     *,DELTA_BK(P_LEVELS)      !IN LAYER THICKNESS                         THADV1E.128    
     *,AK(P_LEVELS)            !IN HYBRID CO-ORDINATE AT FULL LEVELS       THADV1E.129    
     *,BK(P_LEVELS)            !IN HYBRID CO-ORDINATE AT FULL LEVELS       THADV1E.130    
     *,AKH(P_LEVELS+1)         !IN HYBRID CO-ORDINATE AT HALF LEVELS       THADV1E.131    
     *,BKH(P_LEVELS+1)         !IN HYBRID CO-ORDINATE AT HALF LEVELS       THADV1E.132    
     *,SEC_P_LATITUDE(P_FIELD) !IN 1/COS(LAT) AT P POINTS (2-D ARRAY)      THADV1E.133    
     *,SEC_U_LATITUDE(U_FIELD) !IN 1/COS(LAT) AT U POINTS (2-D ARRAY)      THADV1E.134    
     *,LONGITUDE_STEP_INVERSE  !IN 1/(DELTA LAMDA)                         THADV1E.135    
     *,LATITUDE_STEP_INVERSE   !IN 1/(DELTA PHI)                           THADV1E.136    
     *,ADVECTION_TIMESTEP      !IN                                         THADV1E.137    
     *,NU_BASIC                !IN STANDARD NU TERM FOR MODEL RUN.         THADV1E.138    
     *,TRIGS(ROW_LENGTH)       !IN HOLDS TRIGONOMETRIC FUNCTIONS USED      THADV1E.139    
     *                         ! IN FILTERING.                             THADV1E.140    
                                                                           THADV1E.141    
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    THADV1E.142    
C DEFINE LOCAL ARRAYS: 24 ARE REQUIRED.                                    THADV1E.143    
      REAL                                                                 THADV1E.144    
     &    OMEGA_P(P_FIELD,P_LEVELS)    ! HOLDS OMEGA AT P POINTS.          THADV1E.145    
                                                                           THADV1E.146    
      REAL                                                                 THADV1E.147    
     * THETAL_FIRST_INC(P_FIELD,P_LEVELS) ! HOLDS THETAL INCREMENT         THADV1E.148    
     *                           ! RETURNED BY FIRST CALL TO ADV_P_GD      THADV1E.149    
     *,THETAL_PROV(P_FIELD,P_LEVELS) ! HOLDS PROVISIONAL VALUE OF          THADV1E.150    
     *                           ! THETAL                                  THADV1E.151    
                                                                           THADV1E.152    
      REAL                                                                 THADV1E.153    
     * THETAL_INCREMENT(P_FIELD,P_LEVELS) !HOLDS INCREMENT TO THETAL       THADV1E.154    
                                                                           THADV1E.155    
      REAL                                                                 THADV1E.156    
     * NUX(P_FIELD,P_LEVELS) !COURANT NBR DEPENDENT NU AT P PTS USED       THADV1E.157    
     *                    ! IN EAST-WEST ADVECTION.                        THADV1E.158    
     *,NUY(P_FIELD,P_LEVELS) !COURANT NBR DEPENDENT NU AT P PTS USED       THADV1E.159    
     *                    ! IN NORTH-SOUTH ADVECTION.                      THADV1E.160    
                                                                           THADV1E.161    
      REAL NUX_MIN(upd_P_ROWS), ! minimum value of NUX along a row         THADV1E.162    
     &     NUY_MIN(ROW_LENGTH)  ! min of NUY along a column                THADV1E.163    
                                                                           THADV1E.164    
      REAL                                                                 THADV1E.165    
     * BRSP(P_FIELD,P_LEVELS) !MASS TERM AT LEVEL K                        THADV1E.166    
                                                                           THADV1E.167    
! Work space required to allow the use of Fourth Order Advection           THADV1E.168    
! U/V_MEAN_COPY and T_COPY arrays are defined with an extra halo           THADV1E.169    
! this is required for the bigger stencil of the 4th order operator.       THADV1E.170    
      REAL U_MEAN_COPY((ROW_LENGTH+2*extra_EW_Halo)*                       THADV1E.171    
     &                 (tot_U_ROWS+2*extra_NS_Halo),P_LEVELS),             THADV1E.172    
     &  !    Copy of U_MEAN with extra halo space for 4th order            THADV1E.173    
     &      V_MEAN_COPY((ROW_LENGTH+2*extra_EW_Halo)*                      THADV1E.174    
     &                  (tot_U_ROWS+2*extra_NS_Halo),P_LEVELS),            THADV1E.175    
     &  !    Copy of V_MEAN with extra halo space for 4th order            THADV1E.176    
     &      T_COPY((ROW_LENGTH+2*extra_EW_Halo)*                           THADV1E.177    
     &             (tot_P_ROWS+2*extra_NS_Halo),P_LEVELS)                  THADV1E.178    
     &  !    Copy of THETAL with extra halo space for 4th order            THADV1E.179    
                                                                           THADV1E.180    
      INTEGER  extended_P_FIELD,                                           THADV1E.181    
     &         extended_U_FIELD                                            THADV1E.182    
!  These are the sizes of the arrays with the extra halos                  THADV1E.183    
C*---------------------------------------------------------------------    THADV1E.184    
C DEFINE LOCAL VARIABLES                                                   THADV1E.185    
      INTEGER                                                              THADV1E.186    
     *  P_POINTS_UPDATE    ! NUMBER OF P POINTS TO BE UPDATED.             THADV1E.187    
     *                     !  = ROWS*ROWLENGTH                             THADV1E.188    
     *, U_POINTS_UPDATE    ! NUMBER OF U POINTS TO BE UPDATED.             THADV1E.189    
     *                     !  = (ROWS-1)*ROWLENGTH                         THADV1E.190    
     *, P_POINTS_REQUIRED  ! NUMBER OF P POINTS AT WHICH VALUES ARE        THADV1E.191    
     *                     ! NEEDED TO UPDATE AT P_POINTS_UPDATE           THADV1E.192    
     *, U_POINTS_REQUIRED  ! NUMBER OF U POINTS AT WHICH VALUES ARE        THADV1E.193    
     *                     ! NEEDED TO UPDATE AT U_POINTS_UPDATE           THADV1E.194    
     *, START_U_REQUIRED   ! FIRST U POINT OF VALUES REQUIRED TO UPDATE    THADV1E.195    
     *                     ! AT P POINTS UPDATE.                           THADV1E.196    
     *, END_U_REQUIRED     ! LAST U POINT OF REQUIRED VALUES.              THADV1E.197    
                                                                           THADV1E.198    
      INTEGER I_start,I_end  ! loop bounds                                 THADV1E.199    
      INTEGER info  ! return code from comms                               THADV1E.200    
                                                                           THADV1E.201    
C REAL SCALARS                                                             THADV1E.202    
      REAL                                                                 THADV1E.203    
     & SCALAR1,SCALAR2,CONST1,LC_LF,TIMESTEP                               THADV1E.204    
     &,PK, PK1         ! Pressure at half levels k and k1 (k1=k-1)         THADV1E.205    
     &,P_EXNER_FULL    ! Exner pressure at full model level                THADV1E.206    
     &,R_P_EXNER_FULL    ! Exner pressure at full model level              THADV1E.207    
                                                                           THADV1E.208    
C COUNT VARIABLES FOR DO LOOPS ETC.                                        THADV1E.209    
      INTEGER                                                              THADV1E.210    
     &  I,J,K1,IK,K                                                        THADV1E.211    
     *, FILTER_SPACE ! HORIZONTAL DIMENSION OF SPACE NEEDED IN FILTERING   THADV1E.212    
     *               ! ROUTINE.                                            THADV1E.213    
                                                                           THADV1E.214    
C*L   EXTERNAL SUBROUTINE CALLS:---------------------------------------    THADV1E.215    
      EXTERNAL ADV_P_GD,POLAR,UV_TO_P,FILTER                               THADV1E.216    
*IF DEF,CRAY                                                               THADV1E.217    
      INTEGER ISMIN                                                        THADV1E.218    
      EXTERNAL ISMIN                                                       THADV1E.219    
*ENDIF                                                                     THADV1E.220    
C*---------------------------------------------------------------------    THADV1E.221    
CL    CALL COMDECK TO GET PHYSICAL CONSTANTS USED.                         THADV1E.222    
                                                                           THADV1E.223    
*CALL C_THADV                                                              THADV1E.224    
                                                                           THADV1E.225    
CL    MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD.                            THADV1E.226    
CL---------------------------------------------------------------------    THADV1E.227    
CL    INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS:                       THADV1E.228    
CL---------------------------------------------------------------------    THADV1E.229    
CL                                                                         THADV1E.230    
                                                                           THADV1E.231    
*CALL P_EXNERC                                                             THADV1E.232    
                                                                           THADV1E.233    
CL---------------------------------------------------------------------    THADV1E.234    
CL    SECTION 1.     INITIALISATION                                        THADV1E.235    
CL---------------------------------------------------------------------    THADV1E.236    
C INCLUDE LOCAL CONSTANTS FROM GENERAL CONSTANTS BLOCK                     THADV1E.237    
                                                                           THADV1E.238    
      LC_LF = LC + LF                                                      THADV1E.239    
      P_POINTS_UPDATE   = upd_P_ROWS*ROW_LENGTH                            THADV1E.240    
      U_POINTS_UPDATE   = upd_U_ROWS*ROW_LENGTH                            THADV1E.241    
      P_POINTS_REQUIRED = (upd_P_ROWS+2)*ROW_LENGTH                        THADV1E.242    
      U_POINTS_REQUIRED = (upd_U_ROWS+2)*ROW_LENGTH                        THADV1E.243    
      START_U_REQUIRED  = START_POINT_NO_HALO-ROW_LENGTH                   THADV1E.244    
      END_U_REQUIRED    = END_U_POINT_NO_HALO+ROW_LENGTH                   THADV1E.245    
                                                                           THADV1E.246    
                                                                           THADV1E.247    
C *IF -DEF,NOWHBR replaced by LWHITBROM logical                            THADV1E.248    
      IF (LWHITBROM) THEN                                                  THADV1E.249    
CL    CALCULATE BRSP TERM AT LEVEL K                                       THADV1E.250    
                                                                           THADV1E.251    
      K=1                                                                  THADV1E.252    
! Loop over entire field                                                   THADV1E.253    
      DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                  THADV1E.254    
        BRSP(I,K)=(3.*RS(I,K)+RS(I,K+1))*(RS(I,K)-RS(I,K+1))               THADV1E.255    
     *                *BKH(K+1)*.25*(PSTAR(I)-PSTAR_OLD(I))                THADV1E.256    
      ENDDO                                                                THADV1E.257    
      K=P_LEVELS                                                           THADV1E.258    
! Loop over entire field                                                   THADV1E.259    
      DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                  THADV1E.260    
        BRSP(I,K)=-(3.*RS(I,K)+RS(I,K-1))*(RS(I,K)-RS(I,K-1))              THADV1E.261    
     *                *BKH(K)*.25*(PSTAR(I)-PSTAR_OLD(I))                  THADV1E.262    
      ENDDO                                                                THADV1E.263    
                                                                           THADV1E.264    
      DO K=2,P_LEVELS -1                                                   THADV1E.265    
! Loop over entire field                                                   THADV1E.266    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                THADV1E.267    
          BRSP(I,K)=((3.*RS(I,K)+RS(I,K+1))*(RS(I,K)-RS(I,K+1))*BKH(K+1)   THADV1E.268    
     *              *.25*(PSTAR(I)-PSTAR_OLD(I)))                          THADV1E.269    
     *              -((3.*RS(I,K)+RS(I,K-1))*(RS(I,K)-RS(I,K-1))*BKH(K)    THADV1E.270    
     *              *.25*(PSTAR(I)-PSTAR_OLD(I)))                          THADV1E.271    
        ENDDO                                                              THADV1E.272    
                                                                           THADV1E.273    
      ENDDO                                                                THADV1E.274    
      END IF                                                               THADV1E.275    
C *ENDIF                                                                   THADV1E.276    
                                                                           THADV1E.277    
! In order to use the same call to adv_p_gd for both the second and        THADV1E.278    
! fourth order advection, U/V_MEAN are copied into _COPY arrays.           THADV1E.279    
! In the case of second order advection some of the work space is          THADV1E.280    
! wasted as there is more halo than we need.                               THADV1E.281    
                                                                           THADV1E.282    
! Calculate the size of the extended arrays which contain an               THADV1E.283    
! extra halo:                                                              THADV1E.284    
      extended_U_FIELD=(ROW_LENGTH+2*extra_EW_Halo)*                       THADV1E.285    
     &                 (tot_U_ROWS+2*extra_NS_Halo)                        THADV1E.286    
      extended_P_FIELD=(ROW_LENGTH+2*extra_EW_Halo)*                       THADV1E.287    
     &                 (tot_P_ROWS+2*extra_NS_Halo)                        THADV1E.288    
                                                                           THADV1E.289    
      IF (L_SECOND) THEN                                                   THADV1E.290    
                                                                           THADV1E.291    
! Copy U/V_MEAN to U/V_MEAN_COPY with the same sized halos                 THADV1E.292    
        CALL COPY_FIELD(U_MEAN,U_MEAN_COPY,                                THADV1E.293    
     &                  U_FIELD,extended_U_FIELD,                          THADV1E.294    
     &                  ROW_LENGTH,tot_U_ROWS,P_LEVELS,                    THADV1E.295    
     &                  EW_Halo,NS_Halo,                                   THADV1E.296    
     &                  EW_Halo,NS_Halo,                                   THADV1E.297    
     &                  .FALSE.)                                           THADV1E.298    
        CALL COPY_FIELD(V_MEAN,V_MEAN_COPY,                                THADV1E.299    
     &                  U_FIELD,extended_U_FIELD,                          THADV1E.300    
     &                  ROW_LENGTH,tot_U_ROWS,P_LEVELS,                    THADV1E.301    
     &                  EW_Halo,NS_Halo,                                   THADV1E.302    
     &                  EW_Halo,NS_Halo,                                   THADV1E.303    
     &                  .FALSE.)                                           THADV1E.304    
                                                                           THADV1E.305    
      ELSE  ! if its fourth order:                                         THADV1E.306    
                                                                           THADV1E.307    
        CALL COPY_FIELD(U_MEAN,U_MEAN_COPY,                                THADV1E.308    
     &                  U_FIELD,extended_U_FIELD,                          THADV1E.309    
     &                  ROW_LENGTH,tot_U_ROWS,P_LEVELS,                    THADV1E.310    
     &                  EW_Halo,NS_Halo,                                   THADV1E.311    
     &                  halo_4th,halo_4th,                                 THADV1E.312    
     &                  .TRUE.)                                            THADV1E.313    
        CALL COPY_FIELD(V_MEAN,V_MEAN_COPY,                                THADV1E.314    
     &                  U_FIELD,extended_U_FIELD,                          THADV1E.315    
     &                  ROW_LENGTH,tot_U_ROWS,P_LEVELS,                    THADV1E.316    
     &                  EW_Halo,NS_Halo,                                   THADV1E.317    
     &                  halo_4th,halo_4th,                                 THADV1E.318    
     &                  .TRUE.)                                            THADV1E.319    
        CALL COPY_FIELD(THETAL,T_COPY,                                     THADV1E.320    
     &                  P_FIELD,extended_P_FIELD,                          THADV1E.321    
     &                  ROW_LENGTH,tot_U_ROWS,P_LEVELS,                    THADV1E.322    
     &                  EW_Halo,NS_Halo,                                   THADV1E.323    
     &                  halo_4th,halo_4th,                                 THADV1E.324    
     &                  .TRUE.)                                            THADV1E.325    
                                                                           THADV1E.326    
       ENDIF ! IF (L_SECOND)                                               THADV1E.327    
                                                                           THADV1E.328    
CL LOOP OVER P_LEVELS+1.                                                   THADV1E.329    
CL    ON 1 TO P_LEVELS PROVISIONAL VALUES OF THE FIELD ARE CALCULATED.     THADV1E.330    
CL    ON 2 TO P_LEVELS+1 THE FINAL INCREMENTS ARE CALCULATED AND ADDED     THADV1E.331    
CL    ON. THE REASON FOR THIS LOGIC IS THAT THE PROVISIONAL VALUE AT       THADV1E.332    
CL    LEVEL K+1 IS NEEDED BEFORE THE FINAL INCREMENT AT LEVEL K CAN BE     THADV1E.333    
CL    CALCULATED.                                                          THADV1E.334    
                                                                           THADV1E.335    
        DO K=1,P_LEVELS                                                    THADV1E.336    
CL SET TIMESTEP APPROPRIATE TO LEVEL                                       THADV1E.337    
                                                                           THADV1E.338    
        TIMESTEP = ADVECTION_TIMESTEP                                      THADV1E.339    
                                                                           THADV1E.340    
CL---------------------------------------------------------------------    THADV1E.341    
CL    SECTION 2.     CALCULATE COURANT NUMBER DEPENDENT NU IF IN           THADV1E.342    
CL                   FORECAST MODE.                                        THADV1E.343    
CL                   CALCULATE                                             THADV1E.344    
CL                   PROVISIONAL VALUES OF THETAL AT NEW TIME-LEVEL.       THADV1E.345    
CL---------------------------------------------------------------------    THADV1E.346    
C                                                                          ARB0F405.45     
C   THETAL_INCREMENT HOLDS 1.0/(RS(I,K)*RS(I,K)                            ARB0F405.46     
C    *                *(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))             ARB0F405.47     
C-------------------------------------------------------------------       ARB0F405.48     
        DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                       ARB0F405.49     
          THETAL_INCREMENT(I,K)=1.0/(RS(I,K)*RS(I,K)                       ARB0F405.50     
     &                *(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))             ARB0F405.51     
        END DO                                                             ARB0F405.52     
                                                                           THADV1E.347    
C ---------------------------------------------------------------------    THADV1E.348    
CL    SECTION 2.1    SET NU TO NU_BASIC DEPENDENT ON MAX COURANT           THADV1E.349    
CL                   NUMBER.                                               THADV1E.350    
C ---------------------------------------------------------------------    THADV1E.351    
CL    IF NU_BASIC IS ZERO THEN DO NOT BOTHER TO CALCULATE NU               THADV1E.352    
          IF(.NOT.L_SECOND) THEN                                           THADV1E.353    
CL    CALCULATE COURANT NUMBER                                             THADV1E.354    
C NOTE: RS AND TRIG TERMS WILL BE INCLUDED AFTER INTERPOLATION TO P        THADV1E.355    
C       GRID.                                                              THADV1E.356    
CL    CALL UV_TO_P TO MOVE MEAN VELOCITIES ONTO P GRID                     THADV1E.357    
                                                                           THADV1E.358    
          CALL UV_TO_P(U_MEAN(START_U_REQUIRED,K),                         THADV1E.359    
     *                 NUX(START_POINT_NO_HALO,K),U_POINTS_REQUIRED,       THADV1E.360    
     *                 P_POINTS_UPDATE,ROW_LENGTH,upd_P_ROWS+1)            THADV1E.361    
                                                                           THADV1E.362    
          CALL UV_TO_P(V_MEAN(START_U_REQUIRED,K),                         THADV1E.363    
     *                 NUY(START_POINT_NO_HALO,K),U_POINTS_REQUIRED,       THADV1E.364    
     *                 P_POINTS_UPDATE,ROW_LENGTH,upd_P_ROWS+1)            THADV1E.365    
                                                                           THADV1E.366    
CL    CALCULATE NU FROM COURANT NUMBER INCLUDING TRIG AND RS TERMS.        THADV1E.367    
          DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     THADV1E.373    
            NUX(I,K) = NUX(I,K)*LONGITUDE_STEP_INVERSE                     THADV1E.376    
            NUY(I,K) = NUY(I,K)*LATITUDE_STEP_INVERSE                      THADV1E.377    
            SCALAR1 = TIMESTEP*THETAL_INCREMENT(I,K)                       THADV1E.378    
            SCALAR2 = SEC_P_LATITUDE(I)*SCALAR1                            THADV1E.379    
            SCALAR1 = SCALAR1*SCALAR1                                      THADV1E.380    
            SCALAR2 = SCALAR2*SCALAR2                                      THADV1E.381    
            NUX(I,K) = (1. - NUX(I,K)*NUX(I,K)*SCALAR2)*NU_BASIC           THADV1E.382    
            NUY(I,K) = (1. - NUY(I,K)*NUY(I,K)*SCALAR1)*NU_BASIC           THADV1E.383    
          ENDDO                                                            THADV1E.384    
                                                                           THADV1E.385    
! Set NUX equal to minimum value along each row                            THADV1E.386    
                                                                           THADV1E.387    
          DO J=FIRST_ROW,FIRST_ROW+upd_P_ROWS-1                            THADV1E.388    
            I_start=(J-1)*ROW_LENGTH+FIRST_ROW_PT ! start and end of rpw   THADV1E.389    
            I_end=(J-1)*ROW_LENGTH+LAST_ROW_PT    ! missing out halos      THADV1E.390    
! Calculate minimum along this row                                         THADV1E.391    
                                                                           THADV1E.392    
*IF DEF,CRAY                                                               THADV1E.393    
            IK=ISMIN(I_end-I_start+1,NUX(I_start,K),1)                     THADV1E.394    
            SCALAR1=NUX(IK+I_start-1,K)                                    THADV1E.395    
*ELSE                                                                      THADV1E.396    
            SCALAR1=NUX(I_start,K)                                         THADV1E.397    
            DO I=I_start+1,I_end                                           THADV1E.398    
              IF (NUX(I,K) .LT. SCALAR1) SCALAR1=NUX(I,K)                  THADV1E.399    
            ENDDO                                                          THADV1E.400    
*ENDIF                                                                     THADV1E.401    
            NUX_MIN(J-FIRST_ROW+1)=SCALAR1                                 THADV1E.402    
! The indexing of NUX_MIN goes from 1..ROWS                                THADV1E.403    
          ENDDO ! J : loop over rows                                       THADV1E.404    
                                                                           THADV1E.405    
! So far we have only calculated the minimum along our local               THADV1E.406    
! part of the row. Now we must find the minimum of all the                 THADV1E.407    
! local minimums along the row                                             THADV1E.408    
          CALL GCG_RMIN(upd_P_ROWS,GC_ROW_GROUP,info,NUX_MIN)              THADV1E.409    
                                                                           THADV1E.410    
! and now set all values of NUX to the minimum along the row               THADV1E.411    
          DO J=FIRST_ROW,FIRST_ROW+upd_P_ROWS-1                            THADV1E.412    
            IF (NUX_MIN(J-FIRST_ROW+1) .LT. 0.0)                           THADV1E.413    
     &        NUX_MIN(J-FIRST_ROW+1)=0.0                                   THADV1E.414    
                                                                           THADV1E.415    
            I_start=(J-1)*ROW_LENGTH+1  ! beginning and                    THADV1E.416    
            I_end=J*ROW_LENGTH          ! end of row                       THADV1E.417    
                                                                           THADV1E.418    
            DO I=I_start,I_end                                             THADV1E.419    
              NUX(I,K)=NUX_MIN(J-FIRST_ROW+1)                              THADV1E.420    
            ENDDO                                                          THADV1E.421    
                                                                           THADV1E.422    
          ENDDO ! J : loop over rows                                       THADV1E.423    
                                                                           THADV1E.424    
! Set NUY equal to minimum value along each column                         THADV1E.425    
                                                                           THADV1E.426    
          DO J=FIRST_ROW_PT,LAST_ROW_PT                                    THADV1E.427    
            I_start=(FIRST_ROW-1)*ROW_LENGTH+J                             THADV1E.428    
! I_start points to the beginning of column J                              THADV1E.429    
                                                                           THADV1E.430    
! Calculate the minimum along this column                                  THADV1E.431    
*IF DEF,CRAY                                                               THADV1E.432    
            IK=ISMIN(upd_P_ROWS,NUY(I_start,K),ROW_LENGTH)                 THADV1E.433    
            SCALAR1=NUY((IK-1)*ROW_LENGTH+I_start,K)                       THADV1E.434    
*ELSE                                                                      THADV1E.435    
            I_end=I_start+(upd_P_ROWS-1)*ROW_LENGTH                        THADV1E.436    
! I_end points to the end of column J                                      THADV1E.437    
            SCALAR1=NUY(I_start,K)                                         THADV1E.438    
            DO I=I_start+ROW_LENGTH,I_end,ROW_LENGTH                       THADV1E.439    
              IF (NUY(I,K) .LT. SCALAR1) SCALAR1=NUY(I,K)                  THADV1E.440    
            ENDDO                                                          THADV1E.441    
*ENDIF                                                                     THADV1E.442    
            NUY_MIN(J)=SCALAR1                                             THADV1E.443    
                                                                           THADV1E.444    
          ENDDO ! J : loop over columns                                    THADV1E.445    
! Once again, this is only the minimum along our local part                THADV1E.446    
! of each column. We must now find the miniumum of all the local           THADV1E.447    
! minimums along the column                                                THADV1E.448    
          CALL GCG_RMIN(ROW_LENGTH-2*EW_Halo,GC_COL_GROUP,info,            THADV1E.449    
     &                  NUY_MIN(EW_Halo+1))                                THADV1E.450    
                                                                           THADV1E.451    
! and now set all values of NUY to the minimum along the column            THADV1E.452    
          DO J=FIRST_ROW_PT,LAST_ROW_PT                                    THADV1E.453    
            IF (NUY_MIN(J) .LT. 0.0) NUY_MIN(J)=0.0                        THADV1E.454    
                                                                           THADV1E.455    
            I_start=(FIRST_ROW-1)*ROW_LENGTH+J                             THADV1E.456    
            I_end=I_start+(upd_P_ROWS-1)*ROW_LENGTH                        THADV1E.457    
                                                                           THADV1E.458    
            DO I=I_start,I_end,ROW_LENGTH                                  THADV1E.459    
              NUY(I,K)=NUY_MIN(J)                                          THADV1E.460    
            ENDDO                                                          THADV1E.461    
                                                                           THADV1E.462    
          ENDDO ! J : loop over columns                                    THADV1E.463    
                                                                           THADV1E.464    
        ENDIF  ! IF its fourth order advection                             THADV1E.465    
                                                                           THADV1E.466    
        ENDDO                                                              THADV1E.467    
                                                                           THADV1E.468    
                                                                           THADV1E.469    
C ---------------------------------------------------------------------    THADV1E.470    
CL    SECTION 2.2    CALL ADV_P_GD TO OBTAIN FIRST INCREMENT DUE TO        THADV1E.471    
CL                   ADVECTION.                                            THADV1E.472    
C ---------------------------------------------------------------------    THADV1E.473    
                                                                           THADV1E.474    
          CALL ADV_P_GD(P_LEVELS,THETAL,                                   THADV1E.475    
     *                  U_MEAN_COPY,V_MEAN_COPY,                           THADV1E.476    
     &                  ETADOT_MEAN,SEC_P_LATITUDE,                        THADV1E.477    
     *                  THETAL_FIRST_INC,NUX,NUY,P_FIELD,                  THADV1E.478    
     *                  U_FIELD,ROW_LENGTH,                                THADV1E.479    
*CALL ARGFLDPT                                                             THADV1E.480    
     &                  TIMESTEP,LATITUDE_STEP_INVERSE,                    THADV1E.481    
     *                  LONGITUDE_STEP_INVERSE,SEC_U_LATITUDE,             THADV1E.482    
     *                  BRSP,L_SECOND,LWHITBROM,                           THADV1E.483    
     &                  T_COPY,extended_P_FIELD,extended_U_FIELD,          THADV1E.484    
     &                  extended_address)                                  THADV1E.485    
                                                                           THADV1E.486    
C ---------------------------------------------------------------------    THADV1E.487    
CL    SECTION 2.3    REMOVE MASS-WEIGHTING FROM INCREMENT AND ADD ONTO     THADV1E.488    
CL                   FIELD TO OBTAIN PROVISIONAL VALUE.                    THADV1E.489    
C ---------------------------------------------------------------------    THADV1E.490    
                                                                           THADV1E.491    
      DO K=1,P_LEVELS                                                      THADV1E.492    
                                                                           THADV1E.493    
          DO I=1,START_POINT_NO_HALO-1                                     THADV1E.494    
            THETAL_PROV(I,K) = 0.0                                         THADV1E.495    
          ENDDO                                                            THADV1E.496    
                                                                           THADV1E.497    
C-------------------------------------------------------------------       THADV1E.498    
C                                                                          THADV1E.499    
C   THETAL_INCREMENT HOLDS 1.0/(RS(I,K)*                                   THADV1E.500    
C    *                RS(I,K)*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))      THADV1E.501    
C-------------------------------------------------------------------       THADV1E.502    
          DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     THADV1E.503    
            SCALAR1 = THETAL_INCREMENT(I,K)                                THADV1E.504    
            THETAL_FIRST_INC(I,K)=THETAL_FIRST_INC(I,K)*SCALAR1            THADV1E.505    
            THETAL_PROV(I,K) = THETAL(I,K)- THETAL_FIRST_INC(I,K)          THADV1E.506    
          ENDDO                                                            THADV1E.507    
                                                                           THADV1E.508    
          DO I=END_P_POINT_NO_HALO+1,P_FIELD                               THADV1E.509    
            THETAL_PROV(I,K) = 0.0                                         THADV1E.510    
          ENDDO                                                            THADV1E.511    
                                                                           THADV1E.512    
*IF DEF,GLOBAL                                                             THADV1E.513    
CL   GLOBAL MODEL CALCULATE PROVISIONAL POLAR VALUE.                       THADV1E.514    
          IF (at_top_of_LPG) THEN                                          THADV1E.515    
! North Pole                                                               THADV1E.516    
            DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                  THADV1E.517    
              THETAL_PROV(I,K) = THETAL(I,K)                               THADV1E.518    
              THETAL_FIRST_INC(I,K) = -THETAL_FIRST_INC(I,K)/              THADV1E.519    
     &                         (RS(I,K)*RS(I,K)*                           THADV1E.520    
     &                         (DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))     THADV1E.521    
            ENDDO                                                          THADV1E.522    
          ENDIF                                                            THADV1E.523    
                                                                           THADV1E.524    
          IF (at_base_of_LPG) THEN                                         THADV1E.525    
! South Pole                                                               THADV1E.526    
            DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1              THADV1E.527    
              THETAL_PROV(I,K) = THETAL(I,K)                               THADV1E.528    
              THETAL_FIRST_INC(I,K) = -THETAL_FIRST_INC(I,K)/              THADV1E.529    
     &                         (RS(I,K)*RS(I,K)*                           THADV1E.530    
     &                         (DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))     THADV1E.531    
            ENDDO                                                          THADV1E.532    
          ENDIF                                                            THADV1E.533    
                                                                           THADV1E.534    
*ELSE                                                                      THADV1E.535    
CL    LIMITED AREA MODEL THEN SET PROVISIONAL VALUES ON BOUNDARIES         THADV1E.536    
CL    TO FIELD VALUES AT OLD TIME LEVEL.                                   THADV1E.537    
      IF (at_top_of_LPG) THEN                                              THADV1E.538    
        DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                      THADV1E.539    
          THETAL_PROV(I,K) = THETAL(I,K)                                   THADV1E.540    
        ENDDO                                                              THADV1E.541    
      ENDIF                                                                THADV1E.542    
      IF (at_base_of_LPG) THEN                                             THADV1E.543    
        DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                  THADV1E.544    
          THETAL_PROV(I,K) = THETAL(I,K)                                   THADV1E.545    
        ENDDO                                                              THADV1E.546    
      ENDIF                                                                THADV1E.547    
*ENDIF                                                                     THADV1E.548    
      ENDDO  ! DO K=1,Q_LEVELS                                             THADV1E.549    
                                                                           THADV1E.550    
*IF DEF,GLOBAL                                                             THADV1E.551    
                                                                           THADV1E.552    
      CALL POLAR(THETAL_PROV,THETAL_FIRST_INC,THETAL_FIRST_INC,            THADV1E.553    
*CALL ARGFLDPT                                                             THADV1E.554    
     &           P_FIELD,P_FIELD,P_FIELD,                                  THADV1E.555    
     &           TOP_ROW_START,P_BOT_ROW_START,                            THADV1E.556    
     &           ROW_LENGTH,P_LEVELS)                                      THADV1E.557    
*ENDIF                                                                     THADV1E.558    
                                                                           THADV1E.559    
      IF (L_SECOND) THEN                                                   THADV1E.560    
                                                                           THADV1E.561    
! Do a halo update on the THETAL_PROV array                                THADV1E.562    
! that has just been calculated                                            THADV1E.563    
        CALL SWAPBOUNDS(THETAL_PROV,ROW_LENGTH,tot_P_ROWS,                 THADV1E.564    
     &                  EW_Halo,NS_Halo,P_LEVELS)                          THADV1E.565    
                                                                           THADV1E.566    
      ELSE  ! fourth order advection                                       THADV1E.567    
                                                                           THADV1E.568    
! Copy THETAL_PROV into T_COPY which has double halos for fourth           THADV1E.569    
! order advection, and do swap to fill these halos                         THADV1E.570    
        CALL COPY_FIELD(THETAL_PROV,T_COPY,                                THADV1E.571    
     &                  P_FIELD,extended_P_FIELD,                          THADV1E.572    
     &                  ROW_LENGTH,tot_P_ROWS,P_LEVELS,                    THADV1E.573    
     &                  EW_Halo,NS_Halo,                                   THADV1E.574    
     &                  halo_4th,halo_4th,                                 THADV1E.575    
     &                  .TRUE.)                                            THADV1E.576    
                                                                           THADV1E.577    
      ENDIF                                                                THADV1E.578    
                                                                           THADV1E.579    
! Set up OMEGA_P array                                                     THADV1E.580    
! (Was SECTION 3.2):                                                       THADV1E.581    
!    SECTION 3.2    INTERPOLATE OMEGA TO P GRID AND CALCULATE              THADV1E.582    
!                   REMAINING TERM IN ADVECTION EQUATION.                  THADV1E.583    
!                   CALCULATE TOTAL MASS-WEIGHTED INCREMENT TO FIELD.      THADV1E.584    
                                                                           THADV1E.585    
            DO K1=1,P_LEVELS                                               THADV1E.586    
              CALL UV_TO_P(OMEGA(START_U_REQUIRED,K1),                     THADV1E.587    
     &                     OMEGA_P(START_POINT_NO_HALO,K1),                THADV1E.588    
     &                     U_POINTS_REQUIRED,                              THADV1E.589    
     &                     P_POINTS_UPDATE,ROW_LENGTH,upd_P_ROWS+1)        THADV1E.590    
*IF DEF,GLOBAL                                                             THADV1E.591    
              IF (at_top_of_LPG) THEN                                      THADV1E.592    
                DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1              THADV1E.593    
                  OMEGA_P(I,K1)=0.                                         THADV1E.594    
                ENDDO                                                      THADV1E.595    
              ENDIF                                                        THADV1E.596    
                                                                           THADV1E.597    
              IF (at_base_of_LPG) THEN                                     THADV1E.598    
                DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1          THADV1E.599    
                  OMEGA_P(I,K1)=0.                                         THADV1E.600    
                ENDDO                                                      THADV1E.601    
              ENDIF                                                        THADV1E.602    
*ENDIF                                                                     THADV1E.603    
            ENDDO                                                          THADV1E.604    
*IF DEF,GLOBAL                                                             THADV1E.605    
                                                                           THADV1E.606    
              CALL POLAR(OMEGA_P,OMEGA_P,OMEGA_P,                          THADV1E.607    
*CALL ARGFLDPT                                                             THADV1E.608    
     &                   P_FIELD,P_FIELD,P_FIELD,                          THADV1E.609    
     &                   START_POINT_NO_HALO,                              THADV1E.610    
     &                   END_P_POINT_NO_HALO-ROW_LENGTH+1,                 THADV1E.611    
     &                   ROW_LENGTH,P_LEVELS)                              THADV1E.612    
*ENDIF                                                                     THADV1E.613    
                                                                           THADV1E.614    
CL BEGIN CONDITIONAL ON LEVEL BEING GREATER THAN 1                         THADV1E.615    
                                                                           THADV1E.616    
CL---------------------------------------------------------------------    THADV1E.617    
CL    SECTION 3.     ALL WORK IN THIS SECTION PERFORMED AT LEVEL-1.        THADV1E.618    
CL                   CALCULATE SECOND INCREMENT DUE TO ADVECTION.          THADV1E.619    
CL                   CALCULATE TOTAL INCREMENT TO FIELD AND FILTER         THADV1E.620    
CL                   WHERE NECESSARY THEN UPDATE FIELD.                    THADV1E.621    
CL                   THE POLAR INCREMENTS ARE THEN CALCULATED AND ADDED    THADV1E.622    
CL                   ON BY CALLING POLAR.                                  THADV1E.623    
CL---------------------------------------------------------------------    THADV1E.624    
                                                                           THADV1E.625    
         TIMESTEP = ADVECTION_TIMESTEP                                     THADV1E.626    
                                                                           THADV1E.627    
         CONST1 = R/(CP*CP)*TIMESTEP                                       THADV1E.628    
C ---------------------------------------------------------------------    THADV1E.629    
CL    SECTION 3.1    CALL ADV_P_GD TO OBTAIN SECOND INCREMENT DUE TO       THADV1E.630    
CL                   ADVECTION.                                            THADV1E.631    
C ---------------------------------------------------------------------    THADV1E.632    
                                                                           THADV1E.633    
          CALL ADV_P_GD(P_LEVELS,THETAL_PROV,                              THADV1E.634    
     *                  U_MEAN_COPY,V_MEAN_COPY,                           THADV1E.635    
     &                  ETADOT_MEAN,SEC_P_LATITUDE,                        THADV1E.636    
     *                  THETAL_INCREMENT,NUX,NUY,P_FIELD,                  THADV1E.637    
     *                  U_FIELD,ROW_LENGTH,                                THADV1E.638    
*CALL ARGFLDPT                                                             THADV1E.639    
     &                  TIMESTEP,LATITUDE_STEP_INVERSE,                    THADV1E.640    
     *                  LONGITUDE_STEP_INVERSE,SEC_U_LATITUDE,             THADV1E.641    
     *                  BRSP,L_SECOND,LWHITBROM,                           THADV1E.642    
     &                  T_COPY,extended_P_FIELD,extended_U_FIELD,          THADV1E.643    
     &                  extended_address)                                  THADV1E.644    
                                                                           THADV1E.645    
                                                                           THADV1E.646    
      DO K=2,P_LEVELS+1                                                    THADV1E.647    
      K1=K-1                                                               THADV1E.648    
                                                                           THADV1E.649    
C TOTAL MASS-WEIGHTED HORIZONTAL AND VERTICAL INCREMENTS ARE CALCULATED    THADV1E.650    
C SEPARATELY.                                                              THADV1E.651    
                                                                           THADV1E.652    
          IF(K.LT.Q_LEVELS+2) THEN                                         THADV1E.653    
            DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   THADV1E.654    
                                                                           THADV1E.655    
              PK  = AKH(K)  + BKH(K) *PSTAR(I)                             THADV1E.656    
              PK1 = AKH(K1) + BKH(K1)*PSTAR(I)  !  K1 = K-1                THADV1E.657    
              R_P_EXNER_FULL = R_P_EXNER_C                                 THADV1E.658    
     *        (P_EXNER(I,K),P_EXNER(I,K1),PK,PK1,KAPPA)                    THADV1E.659    
     *        /(AK(K1)+BK(K1)*PSTAR(I))                                    THADV1E.660    
                                                                           THADV1E.661    
              THETAL_INCREMENT(I,K1) = .5*(THETAL_INCREMENT(I,K1) +        THADV1E.662    
     *                       THETAL_FIRST_INC(I,K-1)*RS(I,K1)*RS(I,K1)     THADV1E.663    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I)))         THADV1E.664    
     *                      -(LC*QCL(I,K1)+LC_LF*QCF(I,K1))*CONST1*        THADV1E.665    
     &                       OMEGA_P(I,K1)*R_P_EXNER_FULL                  THADV1E.666    
                                                                           THADV1E.667    
            ENDDO                                                          THADV1E.668    
          ELSE                                                             THADV1E.669    
            DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   THADV1E.670    
              THETAL_INCREMENT(I,K1) = .5*(THETAL_INCREMENT(I,K1) +        THADV1E.671    
     *                       THETAL_FIRST_INC(I,K-1)*RS(I,K1)*RS(I,K1)     THADV1E.672    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I)))         THADV1E.673    
            ENDDO                                                          THADV1E.674    
          END IF                                                           THADV1E.675    
                                                                           THADV1E.676    
C ---------------------------------------------------------------------    THADV1E.677    
CL    SECTION 3.3    IF GLOBAL MODEL CALCULATE POLAR INCREMENTS.           THADV1E.678    
CL                   IF LIMITED AREA MASS-WEIGHT BOUNDARIES.               THADV1E.679    
C ---------------------------------------------------------------------    THADV1E.680    
                                                                           THADV1E.681    
CL    GLOBAL MODEL CALCULATE POLAR INCREMENT.                              THADV1E.682    
CL    CALCULATE MERIDIONAL FLUX AROUND POLES BY ADDING THE TWO             THADV1E.683    
CL    INCREMENTS AND ALSO MASS-WEIGHTING POLAR FIELDS.                     THADV1E.684    
C NEGATIVE SIGN BEFORE FIRST INCS IS DUE TO THEIR SIGN HAVING BEEN         THADV1E.685    
C CHANGED PRIOR TO THE CALCULATION OF THE INTERMEDIATE VALUE.              THADV1E.686    
          IF (at_top_of_LPG) THEN                                          THADV1E.687    
! Northern boundary/pole                                                   THADV1E.688    
            IF (K.LT.Q_LEVELS+2) THEN                                      THADV1E.689    
              DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                THADV1E.690    
                SCALAR1 = RS(I,K1)*RS(I,K1)*                               THADV1E.691    
     &            (DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))                     THADV1E.692    
*IF DEF,GLOBAL                                                             THADV1E.693    
                PK  = AKH(K)  + BKH(K) *PSTAR(I)                           THADV1E.694    
                PK1 = AKH(K1) + BKH(K1)*PSTAR(I)  !  K1 = K-1              THADV1E.695    
                P_EXNER_FULL = P_EXNER_C(P_EXNER(I,K),                     THADV1E.696    
     &                                   P_EXNER(I,K1),PK,PK1,KAPPA)       THADV1E.697    
                                                                           THADV1E.698    
                THETAL_INCREMENT(I,K1) = -.5*(THETAL_INCREMENT(I,K1)       THADV1E.699    
     &                           - THETAL_FIRST_INC(I,K-1)*SCALAR1)        THADV1E.700    
     &                           +(LC*QCL(I,K1)+LC_LF*QCF(I,K1))*CONST1*   THADV1E.701    
     &                           OMEGA_P(I,K1)/((AK(K1)+BK(K1)*PSTAR(I))   THADV1E.702    
     &                           *P_EXNER_FULL)                            THADV1E.703    
*ENDIF                                                                     THADV1E.704    
                THETAL(I,K1) = THETAL(I,K1)*SCALAR1                        THADV1E.705    
              ENDDO                                                        THADV1E.706    
            ELSE  ! (IF K.GE.Q_LEVELS+2)                                   THADV1E.707    
              DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                THADV1E.708    
                SCALAR1 = RS(I,K1)*RS(I,K1)*                               THADV1E.709    
     &                    (DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))             THADV1E.710    
*IF DEF,GLOBAL                                                             THADV1E.711    
                THETAL_INCREMENT(I,K1) = -.5*(THETAL_INCREMENT(I,K1)       THADV1E.712    
     &                              - THETAL_FIRST_INC(I,K-1)*SCALAR1)     THADV1E.713    
*ENDIF                                                                     THADV1E.714    
                THETAL(I,K1) = THETAL(I,K1)*SCALAR1                        THADV1E.715    
              ENDDO                                                        THADV1E.716    
            ENDIF ! (K.LT.Q_LEVELS+2)                                      THADV1E.717    
          ENDIF ! (attop)                                                  THADV1E.718    
                                                                           THADV1E.719    
          IF (at_base_of_LPG) THEN                                         THADV1E.720    
! Southern boundary/pole                                                   THADV1E.721    
            IF (K.LT.Q_LEVELS+2) THEN                                      THADV1E.722    
              DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1            THADV1E.723    
                SCALAR2 = RS(I,K1)*RS(I,K1)*                               THADV1E.724    
     &            (DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))                     THADV1E.725    
*IF DEF,GLOBAL                                                             THADV1E.726    
                PK  = AKH(K)  + BKH(K) *PSTAR(I)                           THADV1E.727    
                PK1 = AKH(K1) + BKH(K1)*PSTAR(I)  !  K1 = K-1              THADV1E.728    
                P_EXNER_FULL = P_EXNER_C(P_EXNER(I,K),                     THADV1E.729    
     &                                   P_EXNER(I,K1),PK,PK1,KAPPA)       THADV1E.730    
                                                                           THADV1E.731    
                THETAL_INCREMENT(I,K1) = -.5*(THETAL_INCREMENT(I,K1)       THADV1E.732    
     &                           - THETAL_FIRST_INC(I,K-1)*SCALAR2)        THADV1E.733    
     &                           +(LC*QCL(I,K1)+LC_LF*QCF(I,K1))*CONST1*   THADV1E.734    
     &                           OMEGA_P(I,K1)/((AK(K1)+BK(K1)*PSTAR(I))   THADV1E.735    
     &                           *P_EXNER_FULL)                            THADV1E.736    
*ENDIF                                                                     THADV1E.737    
                THETAL(I,K1) = THETAL(I,K1)*SCALAR2                        THADV1E.738    
              ENDDO                                                        THADV1E.739    
            ELSE  ! (IF K.GE.Q_LEVELS+2)                                   THADV1E.740    
              DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1            THADV1E.741    
                SCALAR2 = RS(I,K1)*RS(I,K1)*                               THADV1E.742    
     &                    (DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))             THADV1E.743    
                THETAL(I,K1) = THETAL(I,K1)*SCALAR2                        THADV1E.744    
*IF DEF,GLOBAL                                                             THADV1E.745    
                THETAL_INCREMENT(I,K1) = -.5*(THETAL_INCREMENT(I,K1)       THADV1E.746    
     &                              - THETAL_FIRST_INC(I,K-1)*SCALAR2)     THADV1E.747    
*ENDIF                                                                     THADV1E.748    
              ENDDO                                                        THADV1E.749    
            ENDIF ! (K.LT.Q_LEVELS+2)                                      THADV1E.750    
          ENDIF ! (atbase)                                                 THADV1E.751    
                                                                           THADV1E.752    
      ENDDO  ! DO K=2,P_LEVELS+1                                           THADV1E.753    
                                                                           THADV1E.754    
                                                                           THADV1E.755    
CL---------------------------------------------------------------------    THADV1E.756    
CL    SECTION 4      IF GLOBAL MODEL THEN FILTER INCREMENTS AND            THADV1E.757    
CL                   UPDATE POLAR VALUES BY CALLING POLAR.                 THADV1E.758    
CL                   UPDATE ALL OTHER VALUES.                              THADV1E.759    
CL---------------------------------------------------------------------    THADV1E.760    
                                                                           THADV1E.761    
*IF DEF,GLOBAL                                                             THADV1E.762    
                                                                           THADV1E.763    
C ---------------------------------------------------------------------    THADV1E.764    
CL    SECTION 4.1    CALL FILTER TO DO FILTERING.                          THADV1E.765    
C ---------------------------------------------------------------------    THADV1E.766    
                                                                           THADV1E.767    
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO       THADV1E.768    
C BE FILTERED.                                                             THADV1E.769    
                                                                           THADV1E.770    
      FILTER_SPACE = (ROW_LENGTH+2)*(NORTHERN_FILTERED_P_ROW-1+            THADV1E.771    
     *                tot_P_ROWS-SOUTHERN_FILTERED_P_ROW)                  THADV1E.772    
CL    CALL FILTER FOR THETAL INCREMENTS                                    THADV1E.773    
                                                                           THADV1E.774    
      CALL FILTER(THETAL_INCREMENT,P_FIELD,P_LEVELS,                       THADV1E.775    
     &            FILTER_SPACE,ROW_LENGTH,                                 THADV1E.776    
*CALL ARGFLDPT                                                             THADV1E.777    
     &            FILTER_WAVE_NUMBER_P_ROWS,TRIGS,IFAX,                    THADV1E.778    
     *            NORTHERN_FILTERED_P_ROW,SOUTHERN_FILTERED_P_ROW)         THADV1E.779    
                                                                           THADV1E.780    
C ---------------------------------------------------------------------    THADV1E.781    
CL    SECTION 4.2    CALL POLAR TO UPDATE POLAR VALUES                     THADV1E.782    
C ---------------------------------------------------------------------    THADV1E.783    
                                                                           THADV1E.784    
      CALL POLAR(THETAL,THETAL_INCREMENT,THETAL_INCREMENT,                 THADV1E.785    
*CALL ARGFLDPT                                                             THADV1E.786    
     &           P_FIELD,P_FIELD,P_FIELD,                                  THADV1E.787    
     &           TOP_ROW_START,P_BOT_ROW_START,                            THADV1E.788    
     &           ROW_LENGTH,P_LEVELS)                                      THADV1E.789    
                                                                           THADV1E.790    
*ENDIF                                                                     THADV1E.791    
C ---------------------------------------------------------------------    THADV1E.792    
CL    SECTION 4.3    UPDATE ALL OTHER POINTS.                              THADV1E.793    
C   OUTPUT IS MASS-WEIGHTED.                                               THADV1E.794    
C   INCREMENTS ARE ALREADY MASS-WEIGHTED                                   THADV1E.795    
C ---------------------------------------------------------------------    THADV1E.796    
                                                                           THADV1E.797    
      DO K=1,P_LEVELS                                                      THADV1E.798    
C UPDATE THETAL.                                                           THADV1E.799    
CFPP$ SELECT(CONCUR)                                                       THADV1E.800    
        DO I= START_POINT_NO_HALO,END_P_POINT_NO_HALO                      THADV1E.801    
          THETAL(I,K)=THETAL(I,K)*RS(I,K)*RS(I,K)*                         THADV1E.802    
     &        (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))-THETAL_INCREMENT(I,K)     THADV1E.803    
        ENDDO                                                              THADV1E.804    
      ENDDO                                                                THADV1E.805    
C ---------------------------------------------------------------------    THADV1E.806    
C                                                                          THADV1E.807    
CL    END OF THETAL ADVECTION                                              THADV1E.808    
C                                                                          THADV1E.809    
C ---------------------------------------------------------------------    THADV1E.810    
C ---------------------------------------------------------------------    THADV1E.811    
C                                                                          THADV1E.812    
CL   SECTION 5.    START QT ADVECTION                                      THADV1E.813    
C                                                                          THADV1E.814    
C ---------------------------------------------------------------------    THADV1E.815    
                                                                           THADV1E.816    
                                                                           THADV1E.817    
      IF (LWHITBROM) THEN                                                  THADV1E.818    
                                                                           THADV1E.819    
! Correct BRSP at top wet level                                            THADV1E.820    
      K=Q_LEVELS                                                           THADV1E.821    
! Loop over entire field                                                   THADV1E.822    
      DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                  THADV1E.823    
        BRSP(I,K)=-(3.*RS(I,K)+RS(I,K-1))*(RS(I,K)-RS(I,K-1))              THADV1E.824    
     *                *BKH(K)*.25*(PSTAR(I)-PSTAR_OLD(I))                  THADV1E.825    
      ENDDO                                                                THADV1E.826    
                                                                           THADV1E.827    
      ENDIF                                                                THADV1E.828    
                                                                           THADV1E.829    
      IF (.NOT.L_SECOND) THEN  ! fourth order                              THADV1E.830    
        CALL COPY_FIELD(QT,T_COPY,                                         THADV1E.831    
     &                  P_FIELD,extended_P_FIELD,                          THADV1E.832    
     &                  ROW_LENGTH,tot_P_ROWS,Q_LEVELS,                    THADV1E.833    
     &                  EW_Halo,NS_Halo,                                   THADV1E.834    
     &                  halo_4th,halo_4th,                                 THADV1E.835    
     &                  .TRUE.)                                            THADV1E.836    
                                                                           THADV1E.837    
       ENDIF ! IF (L_SECOND)                                               THADV1E.838    
                                                                           THADV1E.839    
                                                                           THADV1E.840    
                                                                           THADV1E.841    
CL                                                                         THADV1E.842    
C ---------------------------------------------------------------------    THADV1E.843    
CL    SECTION 5.2    CALL ADV_P_GD TO OBTAIN FIRST INCREMENT DUE TO        THADV1E.844    
CL                   ADVECTION.                                            THADV1E.845    
C ---------------------------------------------------------------------    THADV1E.846    
                                                                           THADV1E.847    
CL    CALL ADV_P_GD FOR QT.                                                THADV1E.848    
          CALL ADV_P_GD(Q_LEVELS,QT,                                       THADV1E.849    
     &                  U_MEAN_COPY,V_MEAN_COPY,                           THADV1E.850    
     &                  ETADOT_MEAN,SEC_P_LATITUDE,                        THADV1E.851    
     *                  THETAL_FIRST_INC,NUX,NUY,P_FIELD,                  THADV1E.852    
     *                  U_FIELD,ROW_LENGTH,                                THADV1E.853    
*CALL ARGFLDPT                                                             THADV1E.854    
     &                  TIMESTEP,LATITUDE_STEP_INVERSE,                    THADV1E.855    
     *                  LONGITUDE_STEP_INVERSE,                            THADV1E.856    
     &                  SEC_U_LATITUDE,BRSP,L_SECOND,LWHITBROM,            THADV1E.857    
     &                  T_COPY,extended_P_FIELD,extended_U_FIELD,          THADV1E.858    
     &                  extended_address)                                  THADV1E.859    
                                                                           THADV1E.860    
C ---------------------------------------------------------------------    THADV1E.861    
CL    SECTION 5.3    REMOVE MASS-WEIGHTING FROM INCREMENT AND ADD ONTO     THADV1E.862    
CL                   FIELD TO OBTAIN PROVISIONAL VALUE.                    THADV1E.863    
C ---------------------------------------------------------------------    THADV1E.864    
                                                                           THADV1E.865    
      DO K=1,Q_LEVELS                                                      THADV1E.866    
                                                                           THADV1E.867    
                                                                           THADV1E.868    
          DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     THADV1E.869    
            SCALAR1 = 1.0/(RS(I,K)*                                        THADV1E.870    
     *            RS(I,K)*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))          THADV1E.871    
            THETAL_FIRST_INC(I,K) = THETAL_FIRST_INC(I,K)*SCALAR1          THADV1E.872    
            THETAL_PROV(I,K) = QT(I,K)-THETAL_FIRST_INC(I,K)               THADV1E.873    
          ENDDO                                                            THADV1E.874    
                                                                           THADV1E.875    
                                                                           THADV1E.876    
*IF DEF,GLOBAL                                                             THADV1E.877    
          IF (at_top_of_LPG) THEN                                          THADV1E.878    
! Do North Pole                                                            THADV1E.879    
            DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                  THADV1E.880    
              THETAL_PROV(I,K) = QT(I,K)                                   THADV1E.881    
              THETAL_FIRST_INC(I,K) = -THETAL_FIRST_INC(I,K)               THADV1E.882    
     &      /(RS(I,K)*RS(I,K)*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))      THADV1E.883    
            ENDDO                                                          THADV1E.884    
          ENDIF                                                            THADV1E.885    
                                                                           THADV1E.886    
          IF (at_base_of_LPG) THEN                                         THADV1E.887    
! Do South Pole                                                            THADV1E.888    
            DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1              THADV1E.889    
              THETAL_PROV(I,K) = QT(I,K)                                   THADV1E.890    
              THETAL_FIRST_INC(I,K) = -THETAL_FIRST_INC(I,K)               THADV1E.891    
     &      /(RS(I,K)*RS(I,K)*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))      THADV1E.892    
            ENDDO                                                          THADV1E.893    
          ENDIF                                                            THADV1E.894    
                                                                           THADV1E.895    
*ELSE                                                                      THADV1E.896    
CL    LIMITED AREA MODEL THEN SET PROVISIONAL VALUES ON BOUNDARIES         THADV1E.897    
CL    EQUAL TO QT AT OLD TIME LEVEL.                                       THADV1E.898    
      IF (at_top_of_LPG) THEN                                              THADV1E.899    
        DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                      THADV1E.900    
          THETAL_PROV(I,K)=QT(I,K)                                         THADV1E.901    
        ENDDO                                                              THADV1E.902    
      ENDIF                                                                THADV1E.903    
      IF (at_base_of_LPG) THEN                                             THADV1E.904    
        DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                  THADV1E.905    
          THETAL_PROV(I,K)=QT(I,K)                                         THADV1E.906    
        ENDDO                                                              THADV1E.907    
      ENDIF                                                                THADV1E.908    
*ENDIF                                                                     THADV1E.909    
                                                                           THADV1E.910    
      ENDDO  ! K=1,Q_LEVELS                                                THADV1E.911    
                                                                           THADV1E.912    
*IF DEF,GLOBAL                                                             THADV1E.913    
CL    CALL POLAR TO OBTAIN PROVISIONAL VALUE.                              THADV1E.914    
      CALL POLAR(THETAL_PROV,THETAL_FIRST_INC,THETAL_FIRST_INC,            THADV1E.915    
*CALL ARGFLDPT                                                             THADV1E.916    
     &           P_FIELD,P_FIELD,P_FIELD,                                  THADV1E.917    
     &           TOP_ROW_START,P_BOT_ROW_START,                            THADV1E.918    
     &           ROW_LENGTH,Q_LEVELS)                                      THADV1E.919    
*ENDIF                                                                     THADV1E.920    
                                                                           THADV1E.921    
      IF (L_SECOND) THEN                                                   THADV1E.922    
                                                                           THADV1E.923    
! Do a halo update on QT_PROV                                              THADV1E.924    
        CALL SWAPBOUNDS(THETAL_PROV,ROW_LENGTH,tot_P_ROWS,                 THADV1E.925    
     &                  EW_Halo,NS_Halo,Q_LEVELS)                          THADV1E.926    
                                                                           THADV1E.927    
      ELSE  ! fourth order advection                                       THADV1E.928    
                                                                           THADV1E.929    
! Copy QT_PROV into Q_COPY which has double halos for fourth               THADV1E.930    
! order advection, and do swap to fill these halos                         THADV1E.931    
        CALL COPY_FIELD(THETAL_PROV,T_COPY,                                THADV1E.932    
     &                  P_FIELD,extended_P_FIELD,                          THADV1E.933    
     &                  ROW_LENGTH,tot_P_ROWS,Q_LEVELS,                    THADV1E.934    
     &                  EW_Halo,NS_Halo,                                   THADV1E.935    
     &                  halo_4th,halo_4th,                                 THADV1E.936    
     &                  .TRUE.)                                            THADV1E.937    
                                                                           THADV1E.938    
      ENDIF                                                                THADV1E.939    
                                                                           THADV1E.940    
CL---------------------------------------------------------------------    THADV1E.941    
CL    SECTION 6.     ALL WORK IN THIS SECTION PERFORMED AT LEVEL-1.        THADV1E.942    
CL                   CALCULATE SECOND INCREMENT DUE TO ADVECTION.          THADV1E.943    
CL                   CALCULATE TOTAL INCREMENT TO FIELD AND FILTER         THADV1E.944    
CL                   WHERE NECESSARY THEN UPDATE FIELD.                    THADV1E.945    
CL                   THE POLAR INCREMENTS ARE THEN CALCULATED AND ADDED    THADV1E.946    
CL                   ON BY CALLING POLAR.                                  THADV1E.947    
CL---------------------------------------------------------------------    THADV1E.948    
                                                                           THADV1E.949    
          TIMESTEP = ADVECTION_TIMESTEP                                    THADV1E.950    
                                                                           THADV1E.951    
C ---------------------------------------------------------------------    THADV1E.952    
CL    SECTION 6.1    CALL ADV_P_GD TO OBTAIN SECOND INCREMENT DUE TO       THADV1E.953    
CL                   ADVECTION.                                            THADV1E.954    
C ---------------------------------------------------------------------    THADV1E.955    
                                                                           THADV1E.956    
          CALL ADV_P_GD(Q_LEVELS,THETAL_PROV,                              THADV1E.957    
     &                  U_MEAN_COPY,V_MEAN_COPY,                           THADV1E.958    
     &                  ETADOT_MEAN,                                       THADV1E.959    
     *                  SEC_P_LATITUDE,                                    THADV1E.960    
     *                  THETAL_INCREMENT,NUX,NUY,P_FIELD,                  THADV1E.961    
     *                  U_FIELD,ROW_LENGTH,                                THADV1E.962    
*CALL ARGFLDPT                                                             THADV1E.963    
     &                  TIMESTEP,LATITUDE_STEP_INVERSE,                    THADV1E.964    
     *                  LONGITUDE_STEP_INVERSE,SEC_U_LATITUDE,             THADV1E.965    
     &                  BRSP,L_SECOND,LWHITBROM,                           THADV1E.966    
     &                  T_COPY,extended_P_FIELD,extended_U_FIELD,          THADV1E.967    
     &                  extended_address)                                  THADV1E.968    
                                                                           THADV1E.969    
C ---------------------------------------------------------------------    THADV1E.970    
CL    SECTION 6.2    CALCULATE TOTAL MASS-WEIGHTED INCREMENT TO FIELD.     THADV1E.971    
C ---------------------------------------------------------------------    THADV1E.972    
                                                                           THADV1E.973    
      DO K=2,Q_LEVELS+1                                                    THADV1E.974    
      K1=K-1                                                               THADV1E.975    
                                                                           THADV1E.976    
C TOTAL MASS-WEIGHTED INCREMENT IS CALCULATED AND THEN STORED IN           THADV1E.977    
C THETAL_INCREMENT.                                                        THADV1E.978    
                                                                           THADV1E.979    
          DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     THADV1E.980    
          THETAL_INCREMENT(I,K1) = .5*(THETAL_INCREMENT(I,K1) +            THADV1E.981    
     *                   THETAL_FIRST_INC(I,K-1)*RS(I,K1)*RS(I,K1)         THADV1E.982    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I)))         THADV1E.983    
          ENDDO                                                            THADV1E.984    
                                                                           THADV1E.985    
C ---------------------------------------------------------------------    THADV1E.986    
CL    SECTION 6.3    IF GLOBAL MODEL CALCULATE POLAR INCREMENTS.           THADV1E.987    
CL                   IF LIMITED AREA MASS-WEIGHT BOUNDARY VALUES.          THADV1E.988    
C ---------------------------------------------------------------------    THADV1E.989    
                                                                           THADV1E.990    
CL    GLOBAL MODEL SO CALCULATE POLAR INCREMENT.                           THADV1E.991    
CL    CALCULATE MERIDIONAL FLUX AROUND POLES BY ADDING THE TWO             THADV1E.992    
CL    INCREMENTS AND ALSO MASS-WEIGHTING POLAR FIELDS.                     THADV1E.993    
C NEGATIVE SIGN BEFORE FIRST INCS IS DUE TO THEIR SIGN BEING CHANGED       THADV1E.994    
C PRIOR TO THE INTERMEDIATE VALUE BEING CALCULATED.                        THADV1E.995    
          IF (at_top_of_LPG) THEN                                          THADV1E.996    
! Do Northen boundary/pole                                                 THADV1E.997    
            DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                  THADV1E.998    
              SCALAR1 = RS(I,K1)*RS(I,K1)*                                 THADV1E.999    
     &                  (DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))               THADV1E.1000   
*IF DEF,GLOBAL                                                             THADV1E.1001   
              THETAL_INCREMENT(I,K1) = -.5*(THETAL_INCREMENT(I,K1) -       THADV1E.1002   
     &                           THETAL_FIRST_INC(I,K-1)*SCALAR1)          THADV1E.1003   
*ENDIF                                                                     THADV1E.1004   
              QT(I,K1)=QT(I,K1)*SCALAR1                                    THADV1E.1005   
            ENDDO                                                          THADV1E.1006   
          ENDIF ! (attop)                                                  THADV1E.1007   
                                                                           THADV1E.1008   
          IF (at_base_of_LPG) THEN                                         THADV1E.1009   
! Do Southern boundary/pole                                                THADV1E.1010   
            DO IK=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1             THADV1E.1011   
              SCALAR2 = RS(IK,K1)*RS(IK,K1)*                               THADV1E.1012   
     &                  (DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(IK))              THADV1E.1013   
*IF DEF,GLOBAL                                                             THADV1E.1014   
            THETAL_INCREMENT(IK,K1) = -.5*(THETAL_INCREMENT(IK,K1) -       THADV1E.1015   
     &                           THETAL_FIRST_INC(IK,K-1)*SCALAR2)         THADV1E.1016   
*ENDIF                                                                     THADV1E.1017   
              QT(IK,K1)     = QT(IK,K1)*SCALAR2                            THADV1E.1018   
            ENDDO                                                          THADV1E.1019   
          ENDIF ! (atbase)                                                 THADV1E.1020   
                                                                           THADV1E.1021   
      ENDDO ! DO K=2,Q_LEVELS+1                                            THADV1E.1022   
                                                                           THADV1E.1023   
CL---------------------------------------------------------------------    THADV1E.1024   
CL    SECTION 7      IF GLOBAL MODEL THEN FILTER INCREMENTS AND            THADV1E.1025   
CL                   UPDATE POLAR VALUES BY CALLING POLAR.                 THADV1E.1026   
CL                   UPDATE ALL OTHER VALUES.                              THADV1E.1027   
CL---------------------------------------------------------------------    THADV1E.1028   
                                                                           THADV1E.1029   
*IF DEF,GLOBAL                                                             THADV1E.1030   
C ---------------------------------------------------------------------    THADV1E.1031   
CL    SECTION 7.1    CALL FILTER TO DO FILTERING.                          THADV1E.1032   
C ---------------------------------------------------------------------    THADV1E.1033   
                                                                           THADV1E.1034   
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO       THADV1E.1035   
C BE FILTERED.                                                             THADV1E.1036   
                                                                           THADV1E.1037   
      FILTER_SPACE = (ROW_LENGTH+2)*(NORTHERN_FILTERED_P_ROW-1+            THADV1E.1038   
     *                tot_P_ROWS-SOUTHERN_FILTERED_P_ROW)                  THADV1E.1039   
CL    CALL FILTER FOR QT INCREMENTS                                        THADV1E.1040   
                                                                           THADV1E.1041   
      CALL FILTER(THETAL_INCREMENT,P_FIELD,Q_LEVELS,                       THADV1E.1042   
     &            FILTER_SPACE,ROW_LENGTH,                                 THADV1E.1043   
*CALL ARGFLDPT                                                             THADV1E.1044   
     &            FILTER_WAVE_NUMBER_P_ROWS,TRIGS,IFAX,                    THADV1E.1045   
     *            NORTHERN_FILTERED_P_ROW,SOUTHERN_FILTERED_P_ROW)         THADV1E.1046   
                                                                           THADV1E.1047   
C ---------------------------------------------------------------------    THADV1E.1048   
CL    SECTION 7.2    CALL POLAR TO UPDATE POLAR VALUES                     THADV1E.1049   
C ---------------------------------------------------------------------    THADV1E.1050   
                                                                           THADV1E.1051   
      CALL POLAR(QT,THETAL_INCREMENT,THETAL_INCREMENT,                     THADV1E.1052   
*CALL ARGFLDPT                                                             THADV1E.1053   
     &           P_FIELD,P_FIELD,P_FIELD,                                  THADV1E.1054   
     &           TOP_ROW_START,P_BOT_ROW_START,                            THADV1E.1055   
     &           ROW_LENGTH,Q_LEVELS)                                      THADV1E.1056   
                                                                           THADV1E.1057   
*ENDIF                                                                     THADV1E.1058   
C ---------------------------------------------------------------------    THADV1E.1059   
CL    SECTION 7.3    UPDATE ALL OTHER POINTS.                              THADV1E.1060   
C ---------------------------------------------------------------------    THADV1E.1061   
                                                                           THADV1E.1062   
      DO K=1,Q_LEVELS                                                      THADV1E.1063   
C UPDATE QT.                                                               THADV1E.1064   
CFPP$ SELECT(CONCUR)                                                       THADV1E.1065   
        DO I= START_POINT_NO_HALO,END_P_POINT_NO_HALO                      THADV1E.1066   
          QT(I,K)=QT(I,K)*RS(I,K)*RS(I,K)*                                 THADV1E.1067   
     &      (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))-THETAL_INCREMENT(I,K)       THADV1E.1068   
        ENDDO                                                              THADV1E.1069   
      ENDDO                                                                THADV1E.1070   
                                                                           THADV1E.1071   
CL    END QT ADVECTION                                                     THADV1E.1072   
                                                                           THADV1E.1073   
      RETURN                                                               THADV1E.1074   
      END                                                                  THADV1E.1075   
*ENDIF                                                                     THADV1E.1076