*IF DEF,A12_1B                                                             ARB2F400.8      
C ******************************COPYRIGHT******************************    GTS2F400.10171  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.10172  
C                                                                          GTS2F400.10173  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.10174  
C restrictions as set forth in the contract.                               GTS2F400.10175  
C                                                                          GTS2F400.10176  
C                Meteorological Office                                     GTS2F400.10177  
C                London Road                                               GTS2F400.10178  
C                BRACKNELL                                                 GTS2F400.10179  
C                Berkshire UK                                              GTS2F400.10180  
C                RG12 2SZ                                                  GTS2F400.10181  
C                                                                          GTS2F400.10182  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.10183  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.10184  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.10185  
C Modelling at the above address.                                          GTS2F400.10186  
C ******************************COPYRIGHT******************************    GTS2F400.10187  
C                                                                          GTS2F400.10188  
CLL   SUBROUTINE TH_ADV -------------------------------------------        THADV1A.3      
CLL                                                                        THADV1A.4      
CLL   PURPOSE:  CALCULATES MASS-WEIGHTED INCREMENTS TO THETAL              THADV1A.5      
CLL DUE TO ADVECTION  BY USING EQUATION (35) TO CALCULATE PROVISIONAL      THADV1A.6      
CLL VALUES OF THETAL AT THE NEW TIME-LEVEL, AND THEN RECALCULATING THE     THADV1A.7      
CLL ADVECTION TERMS ON THE RIGHT-HAND SIDE OF (35) USING THESE             THADV1A.8      
CLL PROVISIONAL VALUES. THE FINAL INCREMENTS ARE CALCULATED AS IN          THADV1A.9      
CLL EQUATION (40). THOSE REQUIRING FILTERING ARE FILTERED AND ALL THE      THADV1A.10     
CLL INCREMENTS ARE ADDED ONTO THE FIELDS USING (40).  IF RUNNING A         THADV1A.11     
CLL GLOBAL MODEL POLAR IS CALLED TO UPDATE POLAR VALUES.                   THADV1A.12     
CLL                                                                        THADV1A.13     
CLL   NOT SUITABLE FOR SINGLE COLUMN USE.                                  THADV1A.14     
CLL   VERSION FOR CRAY Y-MP                                                THADV1A.15     
CLL                                                                        THADV1A.16     
CLL MM, DR      <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES   THADV1A.17     
CLL                                                                        THADV1A.18     
CLL  MODEL            MODIFICATION HISTORY FROM MODEL VERSION 3.0:         THADV1A.19     
CLL VERSION  DATE                                                          THADV1A.20     
CLL                                                                        THADV1A.21     
CLL   3.4    06/08/94 Code restructured to improve parallel efficiency     AAD2F304.289    
CLL                   on C90.                                              AAD2F304.290    
CLL                   Authors: A. Dickinson, D. Salmond                    AAD2F304.291    
CLL                   Reviewer: M. Mawson                                  AAD2F304.292    
CLL                                                                        AAD2F304.293    
CLL   3.4   23/06/94  Argument LWHITBROM added and passed to ADV_P_GD      GSS1F304.891    
CLL                                                      S.J.Swarbrick     GSS1F304.892    
!     3.5    28/03/95 MPP code: Change updateable area and                 APB0F305.867    
!                     add boundary swaps.  P.Burton                        APB0F305.868    
CLL                                                                        GSS1F304.893    
!     4.0   25/4/95   Corrected index for calculation of South Pole        APB0F400.1      
!                     values of THETAL_INCREMENT    P.Burton               APB0F400.2      
CLL   4.0   14/02/95  Option to run with half_timestep at top level        ATD1F400.915    
CLL                   removed.  Author: T Davies,  Reviewer: M Mawson      ATD1F400.916    
!     4.1    29/04/96 Remove MPP code (new QTADV1C version for MPP)        APB0F401.1157   
!                     and add TYPFLDPT arguments       P.Burton            APB0F401.1158   
!LL   4.2    16/08/96  Add TYPFLDPT arguments to FILTER subroutine         APB0F402.33     
!LL                    and make the FILTER_WAVE_NUMBER arrays              APB0F402.34     
!LL                    globally sized                       P.Burton       APB0F402.35     
!LL   4.2    30/10/96  Move declaration of TYPFLDPT variables to top of    APB1F402.50     
!LL                    declarations.  P.Burton                             APB1F402.51     
!LL 4.3      24/04/97 Fix to 4th order calculations -                      GPB5F403.14     
!LL                   Calculation of NUY via ISMIN   P.Burton              GPB5F403.15     
!LL  4.5  05/05/98  Recode -DEF,CRAY loops to find minimum of NUX/NUY      GRB0F405.80     
!LL                 to vectorize on Fujitsu VPP700. RBarnes@ecmwf.int      GRB0F405.81     
!LL  4.5  22/06/98  Fujitsu vectorization directives. R.Barnes.            GRB0F405.82     
!LL                                                                        GRB0F405.83     
CLL   PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4,       THADV1A.22     
CLL                         STANDARD B.                                    THADV1A.23     
CLL                                                                        THADV1A.24     
CLL   SYSTEM COMPONENTS COVERED: P121                                      THADV1A.25     
CLL                                                                        THADV1A.26     
CLL   SYSTEM TASK: P1                                                      THADV1A.27     
CLL                                                                        THADV1A.28     
CLL   DOCUMENTATION:       THE EQUATIONS USED ARE (35) AND (40)            THADV1A.29     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10     THADV1A.30     
CLL                        M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON           THADV1A.31     
CLL                                                                        THADV1A.32     
CLLEND-------------------------------------------------------------        THADV1A.33     
                                                                           THADV1A.34     
C*L   ARGUMENTS:---------------------------------------------------        THADV1A.35     

      SUBROUTINE TH_ADV                                                     1,59THADV1A.36     
     1              (THETAL,PSTAR_OLD,PSTAR,U_MEAN,V_MEAN,                 THADV1A.37     
     2              SEC_P_LATITUDE,ETADOT_MEAN,RS,DELTA_AK,DELTA_BK,       THADV1A.38     
     3              LATITUDE_STEP_INVERSE,ADVECTION_TIMESTEP,NU_BASIC,     THADV1A.39     
     4              LONGITUDE_STEP_INVERSE,NORTHERN_FILTERED_P_ROW,        THADV1A.40     
     5              SOUTHERN_FILTERED_P_ROW,P_LEVELS,                      THADV1A.41     
     6              U_FIELD,P_FIELD,ROW_LENGTH,                            APB0F401.1159   
*CALL ARGFLDPT                                                             APB0F401.1160   
     7              TRIGS,IFAX,FILTER_WAVE_NUMBER_P_ROWS,SEC_U_LATITUDE,   APB0F401.1161   
     8              AKH,BKH,QCL,QCF,P_EXNER,OMEGA,                         THADV1A.44     
     9              Q_LEVELS,AK,BK,L_SECOND,                               ATD1F400.917    
     &              LWHITBROM)                                             GSS1F304.895    
                                                                           THADV1A.46     
      IMPLICIT NONE                                                        THADV1A.47     
                                                                           APB1F402.52     
! All TYPFLDPT arguments are intent IN                                     APB1F402.53     
*CALL TYPFLDPT                                                             APB1F402.54     
                                                                           THADV1A.48     
      INTEGER                                                              THADV1A.49     
     *  P_FIELD            !IN DIMENSION OF FIELDS ON PRESSSURE GRID.      THADV1A.50     
     *, U_FIELD            !IN DIMENSION OF FIELDS ON VELOCITY GRID        THADV1A.51     
     *, P_LEVELS           !IN NUMBER OF PRESSURE LEVELS.                  THADV1A.53     
     *, Q_LEVELS           !IN NUMBER OF MOIST LEVELS.                     THADV1A.54     
     *, ROW_LENGTH         !IN NUMBER OF POINTS PER ROW                    THADV1A.56     
     *, NORTHERN_FILTERED_P_ROW !IN ROW ON WHICH FILTERING STOPS           THADV1A.57     
     *, SOUTHERN_FILTERED_P_ROW !IN ROW ON WHICH FILTERING STARTS AGAIN.   THADV1A.58     
     &, FILTER_WAVE_NUMBER_P_ROWS(GLOBAL_P_FIELD/GLOBAL_ROW_LENGTH)        APB0F402.36     
     &       ! LAST WAVE NUMBER NOT TO BE CHOPPED                          APB0F402.37     
     *, IFAX(10)           !IN HOLDS FACTORS OF ROW_LENGTH USED BY         THADV1A.61     
     *                     ! FILTERING.                                    THADV1A.62     
                                                                           APB0F401.1162   
                                                                           THADV1A.63     
C LOGICAL VARIABLE                                                         THADV1A.64     
      LOGICAL                                                              THADV1A.65     
     *  L_SECOND     ! SET TO TRUE IF NU_BASIC IS ZERO.                    THADV1A.66     
     & ,LWHITBROM                                                          GSS1F304.896    
                                                                           THADV1A.69     
      REAL                                                                 THADV1A.70     
     * THETAL(P_FIELD,P_LEVELS)  !INOUT THETAL FIELD                       THADV1A.71     
     *                           ! MASS-WEIGHTED ON OUTPUT.                THADV1A.72     
                                                                           THADV1A.73     
      REAL                                                                 THADV1A.74     
     * U_MEAN(U_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED U VELOCITY      THADV1A.75     
     *                          !   FROM ADJUSTMENT STEP                   THADV1A.76     
     *,V_MEAN(U_FIELD,P_LEVELS) !IN AVERAGED MASS-WEIGHTED V VELOCITY      THADV1A.77     
     *                          !   * COS(LAT) FROM ADJUSTMENT STEP        THADV1A.78     
     *,ETADOT_MEAN(P_FIELD,P_LEVELS)  !IN AVERAGED MASS-WEIGHTED           THADV1A.79     
     *                          !VERTICAL VELOCITY FROM ADJUSTMENT STEP    THADV1A.80     
     *,PSTAR(P_FIELD)           !IN PSTAR FIELD AT NEW TIME-LEVEL          THADV1A.81     
     *,PSTAR_OLD(P_FIELD)       !IN PSTAR AT PREVIOUS TIME-LEVEL           THADV1A.82     
     *,RS(P_FIELD,P_LEVELS)     !IN RS FIELD                               THADV1A.83     
     *,QCL(P_FIELD,Q_LEVELS)    !IN. PRIMARY ARRAY FOR QCL                 THADV1A.84     
     *,QCF(P_FIELD,Q_LEVELS)    !IN. PRIMARY ARRAY FOR QCF                 THADV1A.85     
     *,OMEGA(U_FIELD,P_LEVELS)  !IN. TRUE VERTICAL VELOCITY DP/DT          THADV1A.86     
     *,P_EXNER(P_FIELD,P_LEVELS+1) !IN. PRIMARY ARRAY FOR EXNER FUNCTION   THADV1A.87     
                                                                           THADV1A.88     
      REAL                                                                 THADV1A.89     
     * DELTA_AK(P_LEVELS)      !IN LAYER THICKNESS                         THADV1A.90     
     *,DELTA_BK(P_LEVELS)      !IN LAYER THICKNESS                         THADV1A.91     
     *,AK(P_LEVELS)            !IN HYBRID CO-ORDINATE AT FULL LEVELS       THADV1A.92     
     *,BK(P_LEVELS)            !IN HYBRID CO-ORDINATE AT FULL LEVELS       THADV1A.93     
     *,AKH(P_LEVELS+1)         !IN HYBRID CO-ORDINATE AT HALF LEVELS       THADV1A.94     
     *,BKH(P_LEVELS+1)         !IN HYBRID CO-ORDINATE AT HALF LEVELS       THADV1A.95     
     *,SEC_P_LATITUDE(P_FIELD) !IN 1/COS(LAT) AT P POINTS (2-D ARRAY)      THADV1A.96     
     *,SEC_U_LATITUDE(U_FIELD) !IN 1/COS(LAT) AT U POINTS (2-D ARRAY)      THADV1A.97     
     *,LONGITUDE_STEP_INVERSE  !IN 1/(DELTA LAMDA)                         THADV1A.98     
     *,LATITUDE_STEP_INVERSE   !IN 1/(DELTA PHI)                           THADV1A.99     
     *,ADVECTION_TIMESTEP      !IN                                         THADV1A.100    
     *,NU_BASIC                !IN STANDARD NU TERM FOR MODEL RUN.         THADV1A.101    
     *,TRIGS(ROW_LENGTH)       !IN HOLDS TRIGONOMETRIC FUNCTIONS USED      THADV1A.102    
     *                         ! IN FILTERING.                             THADV1A.103    
                                                                           THADV1A.104    
C*---------------------------------------------------------------------    THADV1A.105    
                                                                           THADV1A.106    
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    THADV1A.107    
C DEFINE LOCAL ARRAYS: 24 ARE REQUIRED.                                    THADV1A.108    
      REAL                                                                 THADV1A.109    
     &    OMEGA_P(P_FIELD,P_LEVELS)    ! HOLDS OMEGA AT P POINTS.          APB2F401.13     
                                                                           THADV1A.111    
      REAL                                                                 THADV1A.112    
     * THETAL_FIRST_INC(P_FIELD,P_LEVELS) ! HOLDS THETAL INCREMENT         AAD2F304.294    
     *                           ! RETURNED BY FIRST CALL TO ADV_P_GD      THADV1A.114    
     *,THETAL_SECOND_INC(P_FIELD)! HOLDS THETAL INCREMENT                  THADV1A.115    
     *                           ! RETURNED BY SECOND CALL TO ADV_P_GD     THADV1A.116    
     *,THETAL_PROV(P_FIELD,P_LEVELS) ! HOLDS PROVISIONAL VALUE OF          AAD2F304.295    
     *                           ! THETAL                                  THADV1A.118    
                                                                           THADV1A.130    
      REAL                                                                 THADV1A.131    
     * THETAL_INCREMENT(P_FIELD,P_LEVELS) !HOLDS INCREMENT TO THETAL       AAD2F304.296    
     *,ZERO(P_FIELD)             !A FIELD OF ZEROES USED WHERE VERTICAL    THADV1A.135    
     *                           !VELOCITY IS ZERO.                        THADV1A.136    
                                                                           THADV1A.137    
      REAL                                                                 THADV1A.138    
     * NUX(P_FIELD,P_LEVELS) !COURANT NBR DEPENDENT NU AT P PTS USED       AAD2F304.297    
     *                    ! IN EAST-WEST ADVECTION.                        THADV1A.140    
     *,NUY(P_FIELD,P_LEVELS) !COURANT NBR DEPENDENT NU AT P PTS USED       AAD2F304.298    
     *                    ! IN NORTH-SOUTH ADVECTION.                      THADV1A.142    
      REAL                                                                 THADV1A.148    
     * BRSP(P_FIELD,P_LEVELS) !MASS TERM AT LEVEL K                        AAD2F304.299    
                                                                           THADV1A.153    
C*---------------------------------------------------------------------    THADV1A.154    
C DEFINE LOCAL VARIABLES                                                   THADV1A.155    
      INTEGER                                                              THADV1A.156    
     *  P_POINTS_UPDATE    ! NUMBER OF P POINTS TO BE UPDATED.             THADV1A.157    
     *                     !  = ROWS*ROWLENGTH                             THADV1A.158    
     *, U_POINTS_UPDATE    ! NUMBER OF U POINTS TO BE UPDATED.             THADV1A.159    
     *                     !  = (ROWS-1)*ROWLENGTH                         THADV1A.160    
     *, P_POINTS_REQUIRED  ! NUMBER OF P POINTS AT WHICH VALUES ARE        THADV1A.165    
     *                     ! NEEDED TO UPDATE AT P_POINTS_UPDATE           THADV1A.166    
     *, U_POINTS_REQUIRED  ! NUMBER OF U POINTS AT WHICH VALUES ARE        THADV1A.167    
     *                     ! NEEDED TO UPDATE AT U_POINTS_UPDATE           THADV1A.168    
     *, START_U_REQUIRED   ! FIRST U POINT OF VALUES REQUIRED TO UPDATE    THADV1A.169    
     *                     ! AT P POINTS UPDATE.                           THADV1A.170    
     *, END_U_REQUIRED     ! LAST U POINT OF REQUIRED VALUES.              THADV1A.171    
                                                                           THADV1A.172    
C REAL SCALARS                                                             THADV1A.173    
      REAL                                                                 THADV1A.174    
     & SCALAR1,SCALAR2,CONST1,LC_LF,TIMESTEP                               THADV1A.175    
     &,PK, PK1         ! Pressure at half levels k and k1 (k1=k-1)         THADV1A.176    
     &,P_EXNER_FULL    ! Exner pressure at full model level                THADV1A.177    
                                                                           THADV1A.178    
C COUNT VARIABLES FOR DO LOOPS ETC.                                        THADV1A.179    
      INTEGER                                                              THADV1A.180    
     &  I,I1,J,K1,IK,K                                                     ATD1F400.918    
     *, FILTER_SPACE ! HORIZONTAL DIMENSION OF SPACE NEEDED IN FILTERING   THADV1A.182    
     *               ! ROUTINE.                                            THADV1A.183    
                                                                           THADV1A.184    
C*L   EXTERNAL SUBROUTINE CALLS:---------------------------------------    THADV1A.185    
      EXTERNAL ADV_P_GD,POLAR,UV_TO_P,FILTER                               THADV1A.186    
*IF DEF,CRAY                                                               THADV1A.187    
      INTEGER ISMIN                                                        THADV1A.188    
      EXTERNAL ISMIN                                                       THADV1A.189    
*ENDIF                                                                     THADV1A.190    
C*---------------------------------------------------------------------    THADV1A.191    
CL    CALL COMDECK TO GET PHYSICAL CONSTANTS USED.                         THADV1A.192    
                                                                           THADV1A.193    
*CALL C_THADV                                                              THADV1A.194    
                                                                           THADV1A.195    
CL    MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD.                            THADV1A.196    
CL---------------------------------------------------------------------    THADV1A.197    
CL    INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS:                       THADV1A.198    
CL---------------------------------------------------------------------    THADV1A.199    
CL                                                                         THADV1A.200    
                                                                           THADV1A.201    
*CALL P_EXNERC                                                             THADV1A.202    
                                                                           THADV1A.203    
CL---------------------------------------------------------------------    THADV1A.204    
CL    SECTION 1.     INITIALISATION                                        THADV1A.205    
CL---------------------------------------------------------------------    THADV1A.206    
C INCLUDE LOCAL CONSTANTS FROM GENERAL CONSTANTS BLOCK                     THADV1A.207    
                                                                           THADV1A.208    
      LC_LF = LC + LF                                                      THADV1A.209    
      P_POINTS_UPDATE   = upd_P_ROWS*ROW_LENGTH                            APB0F401.1165   
      U_POINTS_UPDATE   = upd_U_ROWS*ROW_LENGTH                            APB0F401.1166   
      P_POINTS_REQUIRED = (upd_P_ROWS+2)*ROW_LENGTH                        APB0F401.1167   
      U_POINTS_REQUIRED = (upd_U_ROWS+2)*ROW_LENGTH                        APB0F401.1168   
      START_U_REQUIRED  = START_POINT_NO_HALO-ROW_LENGTH                   APB0F401.1169   
      END_U_REQUIRED    = END_U_POINT_NO_HALO+ROW_LENGTH                   APB0F401.1170   
                                                                           AAD2F304.300    
                                                                           AAD2F304.301    
C *IF -DEF,NOWHBR replaced by LWHITBROM logical                            AAD2F304.302    
      IF (LWHITBROM) THEN                                                  AAD2F304.303    
CL    CALCULATE BRSP TERM AT LEVEL K                                       AAD2F304.304    
                                                                           AAD2F304.305    
      K=1                                                                  AAD2F304.306    
! Loop over entire field                                                   APB0F401.1171   
      DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                  APB0F401.1172   
        BRSP(I,K)=(3.*RS(I,K)+RS(I,K+1))*(RS(I,K)-RS(I,K+1))               AAD2F304.308    
     *                *BKH(K+1)*.25*(PSTAR(I)-PSTAR_OLD(I))                AAD2F304.309    
      ENDDO                                                                AAD2F304.310    
      K=P_LEVELS                                                           AAD2F304.311    
! Loop over entire field                                                   APB0F401.1173   
      DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                  APB0F401.1174   
        BRSP(I,K)=-(3.*RS(I,K)+RS(I,K-1))*(RS(I,K)-RS(I,K-1))              AAD2F304.313    
     *                *BKH(K)*.25*(PSTAR(I)-PSTAR_OLD(I))                  AAD2F304.314    
      ENDDO                                                                AAD2F304.315    
                                                                           AAD2F304.316    
      DO K=2,P_LEVELS -1                                                   AAD2F304.317    
! Loop over entire field                                                   APB0F401.1175   
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                APB0F401.1176   
          BRSP(I,K)=((3.*RS(I,K)+RS(I,K+1))*(RS(I,K)-RS(I,K+1))*BKH(K+1)   AAD2F304.319    
     *              *.25*(PSTAR(I)-PSTAR_OLD(I)))                          AAD2F304.320    
     *              -((3.*RS(I,K)+RS(I,K-1))*(RS(I,K)-RS(I,K-1))*BKH(K)    AAD2F304.321    
     *              *.25*(PSTAR(I)-PSTAR_OLD(I)))                          AAD2F304.322    
        ENDDO                                                              AAD2F304.323    
                                                                           AAD2F304.324    
      ENDDO                                                                AAD2F304.325    
      END IF                                                               AAD2F304.326    
C *ENDIF                                                                   AAD2F304.327    
                                                                           AAD2F304.328    
                                                                           AAD2F304.329    
! Loop over entire field                                                   APB0F401.1177   
      DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                  APB0F401.1178   
        ZERO(I) = 0.                                                       THADV1A.236    
      END DO                                                               ATD1F400.920    
                                                                           THADV1A.238    
CL LOOP OVER P_LEVELS+1.                                                   THADV1A.239    
CL    ON 1 TO P_LEVELS PROVISIONAL VALUES OF THE FIELD ARE CALCULATED.     THADV1A.240    
CL    ON 2 TO P_LEVELS+1 THE FINAL INCREMENTS ARE CALCULATED AND ADDED     THADV1A.241    
CL    ON. THE REASON FOR THIS LOGIC IS THAT THE PROVISIONAL VALUE AT       THADV1A.242    
CL    LEVEL K+1 IS NEEDED BEFORE THE FINAL INCREMENT AT LEVEL K CAN BE     THADV1A.243    
CL    CALCULATED.                                                          THADV1A.244    
                                                                           THADV1A.245    
      DO K=1,P_LEVELS+1                                                    ATD1F400.922    
                                                                           THADV1A.248    
        TIMESTEP = ADVECTION_TIMESTEP                                      THADV1A.249    
CL IF NOT AT P_LEVELS+1 THEN                                               THADV1A.269    
        IF(K.LE.P_LEVELS) THEN                                             THADV1A.270    
                                                                           THADV1A.271    
CL---------------------------------------------------------------------    THADV1A.272    
CL    SECTION 2.     CALCULATE COURANT NUMBER DEPENDENT NU IF IN           THADV1A.273    
CL                   FORECAST MODE.                                        AAD2F304.354    
CL                   CALCULATE                                             THADV1A.275    
CL                   PROVISIONAL VALUES OF THETAL AT NEW TIME-LEVEL.       THADV1A.276    
CL---------------------------------------------------------------------    THADV1A.277    
                                                                           THADV1A.278    
C ---------------------------------------------------------------------    THADV1A.279    
CL    SECTION 2.1    SET NU TO NU_BASIC DEPENDENT ON MAX COURANT           THADV1A.280    
CL                   NUMBER.                                               THADV1A.281    
C ---------------------------------------------------------------------    THADV1A.282    
CL    IF NU_BASIC IS ZERO THEN DO NOT BOTHER TO CALCULATE NU               THADV1A.283    
          IF(.NOT.L_SECOND) THEN                                           THADV1A.284    
CL    CALCULATE COURANT NUMBER                                             THADV1A.285    
C NOTE: RS AND TRIG TERMS WILL BE INCLUDED AFTER INTERPOLATION TO P        THADV1A.286    
C       GRID.                                                              THADV1A.287    
CL    CALL UV_TO_P TO MOVE MEAN VELOCITIES ONTO P GRID                     THADV1A.288    
                                                                           THADV1A.289    
          CALL UV_TO_P(U_MEAN(START_U_REQUIRED,K),                         THADV1A.290    
     *                 NUX(START_POINT_NO_HALO,K),U_POINTS_REQUIRED,       APB0F401.1179   
     *                 P_POINTS_UPDATE,ROW_LENGTH,upd_P_ROWS+1)            APB0F401.1180   
                                                                           THADV1A.293    
          CALL UV_TO_P(V_MEAN(START_U_REQUIRED,K),                         THADV1A.294    
     *                 NUY(START_POINT_NO_HALO,K),U_POINTS_REQUIRED,       APB0F401.1181   
     *                 P_POINTS_UPDATE,ROW_LENGTH,upd_P_ROWS+1)            APB0F401.1182   
                                                                           THADV1A.297    
CL    CALCULATE NU FROM COURANT NUMBER INCLUDING TRIG AND RS TERMS.        THADV1A.298    
          DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     APB0F401.1183   
            NUX(I,K) = NUX(I,K)*LONGITUDE_STEP_INVERSE                     AAD2F304.357    
            NUY(I,K) = NUY(I,K)*LATITUDE_STEP_INVERSE                      AAD2F304.358    
            SCALAR1 = TIMESTEP/(RS(I,K)*                                   THADV1A.302    
     *                RS(I,K)*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))      THADV1A.303    
            SCALAR2 = SEC_P_LATITUDE(I)*SCALAR1                            THADV1A.304    
            SCALAR1 = SCALAR1*SCALAR1                                      THADV1A.305    
            SCALAR2 = SCALAR2*SCALAR2                                      THADV1A.306    
            NUX(I,K) = (1. - NUX(I,K)*NUX(I,K)*SCALAR2)*NU_BASIC           AAD2F304.359    
            NUY(I,K) = (1. - NUY(I,K)*NUY(I,K)*SCALAR1)*NU_BASIC           AAD2F304.360    
          END DO                                                           ATD1F400.924    
                                                                           THADV1A.310    
C     SET NUX EQUAL TO MINIMUM VALUE ALONG EACH ROW                        THADV1A.311    
          DO J = 1,upd_P_ROWS                                              APB0F401.1184   
          I1 = START_POINT_NO_HALO+(J-1)*ROW_LENGTH                        APB0F401.1185   
*IF DEF,CRAY                                                               THADV1A.318    
          IK=ISMIN(ROW_LENGTH,NUX(I1,K),1)                                 AAD2F304.361    
          SCALAR1 = NUX(IK+I1-1,K)                                         AAD2F304.362    
*ELSE                                                                      THADV1A.321    
          SCALAR1 = NUX(I1,K)                                              GRB0F405.84     
          DO I=I1+1,I1+ROW_LENGTH-1                                        GRB0F405.85     
            IF(NUX(I,K).LT.SCALAR1) THEN                                   GRB0F405.86     
              SCALAR1 = NUX(I,K)                                           GRB0F405.87     
            END IF                                                         GRB0F405.88     
          END DO                                                           GRB0F405.89     
*ENDIF                                                                     THADV1A.327    
          IF(SCALAR1.LT.0.) SCALAR1=0.                                     THADV1A.328    
          DO I=I1,I1+ROW_LENGTH-1                                          ATD1F400.927    
            NUX(I,K) = SCALAR1                                             AAD2F304.365    
          END DO                                                           ATD1F400.928    
          END DO                                                           THADV1A.332    
                                                                           THADV1A.333    
C     SET NUY EQUAL TO MINIMUM VALUE ALONG EACH COLUMN                     THADV1A.334    
          DO J = 1,ROW_LENGTH                                              THADV1A.339    
          I1 = START_POINT_NO_HALO+ J-1                                    APB0F401.1186   
*IF DEF,CRAY                                                               THADV1A.341    
          IK=ISMIN(upd_P_ROWS,NUY(I1,K),ROW_LENGTH)                        APB0F401.1187   
          SCALAR1 = NUY((IK-1)*ROW_LENGTH+I1,K)                            GPB5F403.16     
*ELSE                                                                      THADV1A.344    
          SCALAR1 = NUY(I1,K)                                              GRB0F405.90     
          DO I=I1+ROW_LENGTH,END_P_POINT_NO_HALO,ROW_LENGTH                GRB0F405.91     
            IF(NUY(I,K).LT.SCALAR1) THEN                                   GRB0F405.92     
              SCALAR1 = NUY(I,K)                                           GRB0F405.93     
            END IF                                                         GRB0F405.94     
          END DO                                                           GRB0F405.95     
*ENDIF                                                                     THADV1A.350    
          IF(SCALAR1.LT.0.) SCALAR1=0.                                     THADV1A.351    
            DO I=I1,END_P_POINT_NO_HALO,ROW_LENGTH                         APB0F401.1189   
              NUY(I,K) = SCALAR1                                           AAD2F304.370    
            END DO                                                         THADV1A.354    
          END DO                                                           THADV1A.355    
          END IF                                                           THADV1A.356    
                                                                           THADV1A.357    
                                                                           THADV1A.386    
C ---------------------------------------------------------------------    THADV1A.387    
CL    SECTION 2.2    CALL ADV_P_GD TO OBTAIN FIRST INCREMENT DUE TO        AAD2F304.371    
CL                   ADVECTION.                                            THADV1A.389    
C ---------------------------------------------------------------------    THADV1A.390    
                                                                           THADV1A.391    
CL    CALL ADV_P_GD FOR THETAL.                                            THADV1A.392    
          K1=K+1                                                           THADV1A.393    
                                                                           THADV1A.394    
          IF(K.EQ.P_LEVELS) THEN                                           THADV1A.395    
C PASS ANY THETAL VALUES AS THOSE APPARENTLY AT LEVEL K+1 AS ETADOT        THADV1A.396    
C IS SET TO ZERO BY USING ARRAY ZERO.                                      THADV1A.397    
            K1 = K-1                                                       THADV1A.398    
                                                                           THADV1A.399    
          CALL ADV_P_GD(THETAL(1,K1),THETAL(1,K),THETAL(1,K1),             AAD2F304.372    
     *                  U_MEAN(1,K),V_MEAN(1,K),ETADOT_MEAN(1,K),ZERO,     AAD2F304.373    
     *                  SEC_P_LATITUDE,                                    AAD2F304.374    
     *                  THETAL_FIRST_INC(1,K),NUX(1,K),NUY(1,K),P_FIELD,   AAD2F304.375    
     *                  U_FIELD,ROW_LENGTH,                                APB0F401.1190   
*CALL ARGFLDPT                                                             APB0F401.1191   
     &                 TIMESTEP,LATITUDE_STEP_INVERSE,                     THADV1A.404    
     *                  LONGITUDE_STEP_INVERSE,SEC_U_LATITUDE,             THADV1A.405    
     *                  BRSP(1,K),L_SECOND,LWHITBROM)                      AAD2F304.376    
          ELSE IF(K.EQ.1)THEN                                              AAD2F304.377    
                                                                           AAD2F304.378    
C PASS ANY THETAL VALUES FOR LEVEL K-1 AS ETADOT AT LEVEL 1                AAD2F304.379    
C IS SET TO ZERO BY USING ARRAY ZERO.                                      AAD2F304.380    
          CALL ADV_P_GD(THETAL(1,K1),THETAL(1,K),THETAL(1,K1),             AAD2F304.381    
     *                  U_MEAN(1,K),V_MEAN(1,K),ZERO,                      AAD2F304.382    
     *                  ETADOT_MEAN(1,K1),                                 AAD2F304.383    
     *                  SEC_P_LATITUDE,THETAL_FIRST_INC(1,K),              AAD2F304.384    
     *                  NUX(1,K),NUY(1,K),                                 AAD2F304.385    
     *                  P_FIELD,U_FIELD,ROW_LENGTH,                        APB0F401.1192   
*CALL ARGFLDPT                                                             APB0F401.1193   
     &                  TIMESTEP,                                          APB0F401.1194   
     *                  LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,      AAD2F304.388    
     *                  SEC_U_LATITUDE,BRSP(1,K),L_SECOND,LWHITBROM)       AAD2F304.389    
          ELSE                                                             THADV1A.407    
          CALL ADV_P_GD(THETAL(1,K-1),THETAL(1,K),THETAL(1,K1),            AAD2F304.390    
     *                  U_MEAN(1,K),V_MEAN(1,K),ETADOT_MEAN(1,K),          AAD2F304.391    
     *                  ETADOT_MEAN(1,K1),                                 AAD2F304.392    
     *                  SEC_P_LATITUDE,THETAL_FIRST_INC(1,K),              AAD2F304.393    
     *                  NUX(1,K),NUY(1,K),                                 AAD2F304.394    
     *                  P_FIELD,U_FIELD,ROW_LENGTH,                        APB0F401.1195   
*CALL ARGFLDPT                                                             APB0F401.1196   
     &                  TIMESTEP,                                          APB0F401.1197   
     *                  LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,      THADV1A.413    
     *                  SEC_U_LATITUDE,BRSP(1,K),L_SECOND,LWHITBROM)       AAD2F304.395    
                                                                           THADV1A.415    
          END IF                                                           THADV1A.416    
                                                                           THADV1A.417    
                                                                           THADV1A.418    
C ---------------------------------------------------------------------    THADV1A.419    
CL    SECTION 2.3    REMOVE MASS-WEIGHTING FROM INCREMENT AND ADD ONTO     AAD2F304.396    
CL                   FIELD TO OBTAIN PROVISIONAL VALUE.                    THADV1A.421    
C ---------------------------------------------------------------------    THADV1A.422    
                                                                           THADV1A.423    
! Loop over field, missing top and bottom rows.                            APB0F401.1198   
          DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                     APB0F401.1199   
            SCALAR1 = RS(I,K)*RS(I,K)                                      THADV1A.425    
     *                      *(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I))        THADV1A.426    
            THETAL_FIRST_INC(I,K)=THETAL_FIRST_INC(I,K)/SCALAR1            AAD2F304.397    
            THETAL_PROV(I,K) = THETAL(I,K)- THETAL_FIRST_INC(I,K)          AAD2F304.398    
          END DO                                                           ATD1F400.930    
                                                                           THADV1A.430    
*IF DEF,GLOBAL                                                             THADV1A.431    
CL   GLOBAL MODEL CALCULATE PROVISIONAL POLAR VALUE.                       THADV1A.432    
! Fujitsu vectorization directive                                          GRB0F405.96     
!OCL NOVREC                                                                GRB0F405.97     
          DO I=1,ROW_LENGTH                                                ATD1F400.931    
C NORTH POLE.                                                              THADV1A.434    
            IK = P_FIELD - ROW_LENGTH + I                                  THADV1A.435    
            THETAL_PROV(I,K) = THETAL(I,K)                                 AAD2F304.399    
            THETAL_FIRST_INC(I,K) = -THETAL_FIRST_INC(I,K)/                AAD2F304.400    
     *       (RS(I,K)*RS(I,K)*(DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(I)))      THADV1A.438    
C SOUTH POLE.                                                              THADV1A.439    
            THETAL_PROV(IK,K) = THETAL(IK,K)                               AAD2F304.401    
            THETAL_FIRST_INC(IK,K) = -THETAL_FIRST_INC(IK,K)/              AAD2F304.402    
     *                        (RS(IK,K)*RS(IK,K)*                          THADV1A.442    
     *                        (DELTA_AK(K)+DELTA_BK(K)*PSTAR_OLD(IK)))     THADV1A.443    
          END DO                                                           ATD1F400.932    
                                                                           THADV1A.445    
                                                                           THADV1A.450    
                                                                           THADV1A.451    
*ELSE                                                                      THADV1A.452    
CL    LIMITED AREA MODEL THEN SET PROVISIONAL VALUES ON BOUNDARIES         THADV1A.453    
CL    TO FIELD VALUES AT OLD TIME LEVEL.                                   THADV1A.454    
          DO I=1,ROW_LENGTH                                                ATD1F400.933    
            THETAL_PROV(I,K) = THETAL(I,K)                                 AAD2F304.405    
            IK = P_FIELD + I - ROW_LENGTH                                  THADV1A.457    
            THETAL_PROV(IK,K) = THETAL(IK,K)                               AAD2F304.406    
          END DO                                                           ATD1F400.934    
*ENDIF                                                                     THADV1A.460    
        END IF                                                             THADV1A.461    
CL END CONDITIONAL ON LEVEL BEING LESS THAN P_LEVELS+1                     THADV1A.462    
      enddo                                                                AAD2F304.407    
*IF DEF,GLOBAL                                                             APB2F401.14     
                                                                           APB2F401.15     
      CALL POLAR(THETAL_PROV,THETAL_FIRST_INC,THETAL_FIRST_INC,            APB2F401.16     
*CALL ARGFLDPT                                                             APB2F401.17     
     &           P_FIELD,P_FIELD,P_FIELD,                                  APB2F401.18     
     &           TOP_ROW_START,P_BOT_ROW_START,                            APB2F401.19     
     &           ROW_LENGTH,P_LEVELS)                                      APB2F401.20     
                                                                           APB2F401.21     
*ENDIF                                                                     APB2F401.22     
                                                                           APB2F401.23     
! Set up OMEGA_P array                                                     APB2F401.24     
! (Was SECTION 3.2):                                                       APB2F401.25     
!    SECTION 3.2    INTERPOLATE OMEGA TO P GRID AND CALCULATE              APB2F401.26     
!                   REMAINING TERM IN ADVECTION EQUATION.                  APB2F401.27     
!                   CALCULATE TOTAL MASS-WEIGHTED INCREMENT TO FIELD.      APB2F401.28     
                                                                           APB2F401.29     
            DO K1=1,P_LEVELS                                               APB2F401.30     
              CALL UV_TO_P(OMEGA(START_U_REQUIRED,K1),                     APB2F401.31     
     &                     OMEGA_P(START_POINT_NO_HALO,K1),                APB2F401.32     
     &                     U_POINTS_REQUIRED,                              APB2F401.33     
     &                     P_POINTS_UPDATE,ROW_LENGTH,upd_P_ROWS+1)        APB2F401.34     
*IF DEF,GLOBAL                                                             APB2F401.35     
! Fujitsu vectorization directive                                          GRB0F405.98     
!OCL NOVREC                                                                GRB0F405.99     
              DO I=1,ROW_LENGTH                                            APB2F401.36     
                OMEGA_P(I,K1)=0.                                           APB2F401.37     
                OMEGA_P(P_FIELD+1-I,K1)=0.                                 APB2F401.38     
              ENDDO                                                        APB2F401.39     
*ENDIF                                                                     APB2F401.40     
            ENDDO                                                          APB2F401.41     
*IF DEF,GLOBAL                                                             APB2F401.42     
              CALL POLAR(OMEGA_P,OMEGA_P,OMEGA_P,                          APB2F401.43     
*CALL ARGFLDPT                                                             APB2F401.44     
     &                   P_FIELD,P_FIELD,P_FIELD,                          APB2F401.45     
     &                   START_POINT_NO_HALO,                              APB2F401.46     
     &                   END_P_POINT_NO_HALO-ROW_LENGTH+1,                 APB2F401.47     
     &                   ROW_LENGTH,P_LEVELS)                              APB2F401.48     
*ENDIF                                                                     APB2F401.49     
CL BEGIN CONDITIONAL ON LEVEL BEING GREATER THAN 1                         THADV1A.463    
            DO K=1,P_LEVELS+1                                              ATD1F400.935    
        IF(K.GT.1) THEN                                                    ATD1F400.936    
CL---------------------------------------------------------------------    THADV1A.465    
CL    SECTION 3.     ALL WORK IN THIS SECTION PERFORMED AT LEVEL-1.        THADV1A.466    
CL                   CALCULATE SECOND INCREMENT DUE TO ADVECTION.          THADV1A.467    
CL                   CALCULATE TOTAL INCREMENT TO FIELD AND FILTER         THADV1A.468    
CL                   WHERE NECESSARY THEN UPDATE FIELD.                    THADV1A.469    
CL                   THE POLAR INCREMENTS ARE THEN CALCULATED AND ADDED    THADV1A.470    
CL                   ON BY CALLING POLAR.                                  THADV1A.471    
CL---------------------------------------------------------------------    THADV1A.472    
CL RESET TIMESTEP APPROPRIATE TO LEVEL                                     THADV1A.473    
                                                                           THADV1A.474    
         TIMESTEP = ADVECTION_TIMESTEP                                     THADV1A.475    
                                                                           THADV1A.479    
         CONST1 = R/(CP*CP)*TIMESTEP                                       THADV1A.480    
C ---------------------------------------------------------------------    THADV1A.481    
CL    SECTION 3.1    CALL ADV_P_GD TO OBTAIN SECOND INCREMENT DUE TO       THADV1A.482    
CL                   ADVECTION.                                            THADV1A.483    
C ---------------------------------------------------------------------    THADV1A.484    
                                                                           THADV1A.485    
CL    CALL ADV_P_GD FOR THETAL.                                            THADV1A.486    
          K1=K-1                                                           THADV1A.487    
C K1 HOLDS K-1.                                                            THADV1A.488    
          IF(K.GT.P_LEVELS) THEN                                           THADV1A.489    
C THE ZERO VERTICAL FLUX AT THE TOP IS ENSURED BY PASSING ETADOT AS        THADV1A.490    
C ZERO.                                                                    THADV1A.491    
                                                                           THADV1A.492    
          CALL ADV_P_GD(THETAL_PROV(1,K-2),THETAL_PROV(1,K-1),             AAD2F304.410    
     *                  THETAL_PROV(1,K-2),                                AAD2F304.411    
     *                  U_MEAN(1,K1),V_MEAN(1,K1),ETADOT_MEAN(1,K-1),      AAD2F304.412    
     *                  ZERO,SEC_P_LATITUDE,                               AAD2F304.413    
     *                  THETAL_SECOND_INC,NUX(1,K-1),NUY(1,K-1),P_FIELD,   AAD2F304.414    
     *                  U_FIELD,ROW_LENGTH,                                APB0F401.1200   
*CALL ARGFLDPT                                                             APB0F401.1201   
     &                  TIMESTEP,LATITUDE_STEP_INVERSE,                    THADV1A.497    
     *                  LONGITUDE_STEP_INVERSE,SEC_U_LATITUDE,             THADV1A.498    
     *                  BRSP(1,K-1),L_SECOND,LWHITBROM)                    AAD2F304.415    
                                                                           THADV1A.501    
          ELSE IF(K.EQ.2) THEN                                             AAD2F304.416    
C THE ZERO VERTICAL FLUX AT THE BOTTOM IS ENSURED BY PASSING ETADOT AS     AAD2F304.417    
C ZERO.                                                                    AAD2F304.418    
          CALL ADV_P_GD(THETAL_PROV(1,K),THETAL_PROV(1,K-1),               AAD2F304.419    
     *                  THETAL_PROV(1,K),                                  AAD2F304.420    
     *                  U_MEAN(1,K1),V_MEAN(1,K1),ZERO,                    AAD2F304.421    
     *                  ETADOT_MEAN(1,K),                                  AAD2F304.422    
     *                 SEC_P_LATITUDE,THETAL_SECOND_INC,                   AAD2F304.423    
     *                 NUX(1,K-1),NUY(1,K-1),                              AAD2F304.424    
     *                  P_FIELD,U_FIELD,ROW_LENGTH,                        THADV1A.505    
*CALL ARGFLDPT                                                             APB0F401.1202   
     &                  TIMESTEP,                                          APB0F401.1203   
     *                  LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,      THADV1A.507    
     *                  SEC_U_LATITUDE,                                    THADV1A.508    
     *                  BRSP(1,K-1),L_SECOND,LWHITBROM)                    AAD2F304.425    
          ELSE                                                             AAD2F304.426    
                                                                           THADV1A.510    
          CALL ADV_P_GD(THETAL_PROV(1,K-2),THETAL_PROV(1,K-1),             AAD2F304.427    
     *                  THETAL_PROV(1,K),                                  AAD2F304.428    
     *                  U_MEAN(1,K1),V_MEAN(1,K1),ETADOT_MEAN(1,K-1),      AAD2F304.429    
     *                  ETADOT_MEAN(1,K),                                  AAD2F304.430    
     *                 SEC_P_LATITUDE,THETAL_SECOND_INC,                   AAD2F304.431    
     *                 NUX(1,K-1),NUY(1,K-1),                              AAD2F304.432    
     *                  P_FIELD,U_FIELD,ROW_LENGTH,                        AAD2F304.433    
*CALL ARGFLDPT                                                             APB0F401.1204   
     &                  TIMESTEP,                                          APB0F401.1205   
     *                  LATITUDE_STEP_INVERSE,LONGITUDE_STEP_INVERSE,      AAD2F304.435    
     *                  SEC_U_LATITUDE,                                    AAD2F304.436    
     *                  BRSP(1,K-1),L_SECOND,LWHITBROM)                    AAD2F304.437    
          END IF                                                           THADV1A.511    
                                                                           THADV1A.512    
                                                                           THADV1A.513    
C TOTAL MASS-WEIGHTED HORIZONTAL AND VERTICAL INCREMENTS ARE CALCULATED    THADV1A.535    
C SEPARATELY.                                                              THADV1A.536    
                                                                           THADV1A.537    
          IF(K.LT.Q_LEVELS+2) THEN                                         THADV1A.538    
! Loop over field, missing top and bottom rows                             APB0F401.1206   
            DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   APB0F401.1207   
                                                                           THADV1A.540    
              PK  = AKH(K)  + BKH(K) *PSTAR(I)                             THADV1A.541    
              PK1 = AKH(K1) + BKH(K1)*PSTAR(I)  !  K1 = K-1                THADV1A.542    
              P_EXNER_FULL = P_EXNER_C                                     THADV1A.543    
     *        (P_EXNER(I,K),P_EXNER(I,K1),PK,PK1,KAPPA)                    THADV1A.544    
                                                                           THADV1A.545    
              THETAL_INCREMENT(I,K1) = .5*(THETAL_SECOND_INC(I) +          THADV1A.546    
     *                       THETAL_FIRST_INC(I,K-1)*RS(I,K1)*RS(I,K1)     AAD2F304.438    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I)))         THADV1A.548    
     *                      -(LC*QCL(I,K1)+LC_LF*QCF(I,K1))*CONST1*        THADV1A.549    
     &                       OMEGA_P(I,K1)/((AK(K1)+BK(K1)*PSTAR(I))       APB2F401.50     
     *                       *(P_EXNER_FULL))                              THADV1A.551    
                                                                           THADV1A.552    
          END DO                                                           ATD1F400.938    
          ELSE                                                             THADV1A.554    
! Loop over field, missing top and bottom rows                             APB0F401.1208   
            DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   APB0F401.1209   
              THETAL_INCREMENT(I,K1) = .5*(THETAL_SECOND_INC(I) +          THADV1A.556    
     *                       THETAL_FIRST_INC(I,K-1)*RS(I,K1)*RS(I,K1)     AAD2F304.439    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I)))         THADV1A.558    
          END DO                                                           ATD1F400.940    
          END IF                                                           THADV1A.560    
                                                                           THADV1A.561    
C ---------------------------------------------------------------------    THADV1A.562    
CL    SECTION 3.3    IF GLOBAL MODEL CALCULATE POLAR INCREMENTS.           THADV1A.563    
CL                   IF LIMITED AREA MASS-WEIGHT BOUNDARIES.               THADV1A.564    
C ---------------------------------------------------------------------    THADV1A.565    
                                                                           THADV1A.566    
CL    GLOBAL MODEL CALCULATE POLAR INCREMENT.                              THADV1A.567    
CL    CALCULATE MERIDIONAL FLUX AROUND POLES BY ADDING THE TWO             THADV1A.568    
CL    INCREMENTS AND ALSO MASS-WEIGHTING POLAR FIELDS.                     THADV1A.569    
C NEGATIVE SIGN BEFORE FIRST INCS IS DUE TO THEIR SIGN HAVING BEEN         THADV1A.570    
C CHANGED PRIOR TO THE CALCULATION OF THE INTERMEDIATE VALUE.              THADV1A.571    
          IF(K.LT.Q_LEVELS+2) THEN                                         THADV1A.572    
! Fujitsu vectorization directive                                          GRB0F405.100    
!OCL NOVREC                                                                GRB0F405.101    
          DO I=1,ROW_LENGTH                                                ATD1F400.941    
C NORTH POLE OR NORTHERN BOUNDARY.                                         THADV1A.574    
            IK = P_FIELD - ROW_LENGTH + I                                  THADV1A.575    
            SCALAR1 = RS(I,K1)*RS(I,K1)                                    THADV1A.576    
     *                       *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))         THADV1A.577    
*IF DEF,GLOBAL                                                             THADV1A.578    
                                                                           THADV1A.579    
            PK  = AKH(K)  + BKH(K) *PSTAR(I)                               THADV1A.580    
            PK1 = AKH(K1) + BKH(K1)*PSTAR(I)  !  K1 = K-1                  THADV1A.581    
            P_EXNER_FULL = P_EXNER_C                                       THADV1A.582    
     *      (P_EXNER(I,K),P_EXNER(I,K1),PK,PK1,KAPPA)                      THADV1A.583    
                                                                           THADV1A.584    
            THETAL_INCREMENT(I,K1) = -.5*(THETAL_SECOND_INC(I)             THADV1A.585    
     *                       - THETAL_FIRST_INC(I,K-1)*SCALAR1)            AAD2F304.440    
     *                      +(LC*QCL(I,K1)+LC_LF*QCF(I,K1))*CONST1*        THADV1A.587    
     &                     OMEGA_P(I,K1)/((AK(K1)+BK(K1)*PSTAR(I))         APB2F401.51     
     *                       *P_EXNER_FULL)                                THADV1A.589    
*ENDIF                                                                     THADV1A.590    
            THETAL(I,K1) = THETAL(I,K1)*SCALAR1                            THADV1A.591    
C SOUTH POLE OR SOUTHERN BOUNDARY.                                         THADV1A.592    
            SCALAR2 = RS(IK,K1)*RS(IK,K1)                                  THADV1A.593    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(IK))         THADV1A.594    
*IF DEF,GLOBAL                                                             THADV1A.595    
                                                                           THADV1A.596    
            PK  = AKH(K)  + BKH(K) *PSTAR(IK)                              APB0F400.3      
            PK1 = AKH(K1) + BKH(K1)*PSTAR(IK)  !  K1 = K-1                 APB0F400.4      
            P_EXNER_FULL = P_EXNER_C                                       APB0F400.5      
     &      (P_EXNER(IK,K),P_EXNER(IK,K1),PK,PK1,KAPPA)                    APB0F400.6      
                                                                           THADV1A.601    
            THETAL_INCREMENT(IK,K1) = -.5*(THETAL_SECOND_INC(IK)           THADV1A.602    
     *                      - THETAL_FIRST_INC(IK,K-1)*SCALAR2)            AAD2F304.441    
     *                      +(LC*QCL(IK,K1)+LC_LF*QCF(IK,K1))*CONST1*      THADV1A.604    
     *                     OMEGA_P(IK,K1)/((AK(K1)+BK(K1)*PSTAR(IK))       APB2F401.52     
     *                       *P_EXNER_FULL)                                THADV1A.606    
*ENDIF                                                                     THADV1A.607    
            THETAL(IK,K1) = THETAL(IK,K1)*SCALAR2                          THADV1A.608    
          END DO                                                           ATD1F400.942    
          ELSE                                                             THADV1A.610    
! Fujitsu vectorization directive                                          GRB0F405.102    
!OCL NOVREC                                                                GRB0F405.103    
          DO I=1,ROW_LENGTH                                                ATD1F400.943    
C NORTH POLE OR NORTHERN BOUNDARY.                                         THADV1A.612    
            IK = P_FIELD - ROW_LENGTH + I                                  THADV1A.613    
            SCALAR1 = RS(I,K1)*RS(I,K1)                                    THADV1A.614    
     *                       *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(I))         THADV1A.615    
*IF DEF,GLOBAL                                                             THADV1A.616    
            THETAL_INCREMENT(I,K1) = -.5*(THETAL_SECOND_INC(I)             THADV1A.617    
     *                       - THETAL_FIRST_INC(I,K-1)*SCALAR1)            AAD2F304.442    
*ENDIF                                                                     THADV1A.619    
            THETAL(I,K1) = THETAL(I,K1)*SCALAR1                            THADV1A.620    
C SOUTH POLE OR SOUTHERN BOUNDARY.                                         THADV1A.621    
            SCALAR2 = RS(IK,K1)*RS(IK,K1)                                  THADV1A.622    
     *                      *(DELTA_AK(K1)+DELTA_BK(K1)*PSTAR(IK))         THADV1A.623    
*IF DEF,GLOBAL                                                             THADV1A.624    
            THETAL_INCREMENT(IK,K1) = -.5*(THETAL_SECOND_INC(IK)           THADV1A.625    
     *                      - THETAL_FIRST_INC(IK,K-1)*SCALAR2)            AAD2F304.443    
*ENDIF                                                                     THADV1A.627    
            THETAL(IK,K1) = THETAL(IK,K1)*SCALAR2                          THADV1A.628    
          END DO                                                           ATD1F400.944    
      ENDIF                                                                THADV1A.630    
CL END CONDITIONAL LEVEL GREATER THAN ONE                                  THADV1A.631    
        END IF                                                             THADV1A.632    
                                                                           THADV1A.633    
CL END LOOP OVER P_LEVELS+1                                                THADV1A.634    
      enddo                                                                AAD2F304.444    
                                                                           THADV1A.636    
CL---------------------------------------------------------------------    THADV1A.637    
CL    SECTION 4      IF GLOBAL MODEL THEN FILTER INCREMENTS AND            THADV1A.638    
CL                   UPDATE POLAR VALUES BY CALLING POLAR.                 THADV1A.639    
CL                   UPDATE ALL OTHER VALUES.                              THADV1A.640    
CL---------------------------------------------------------------------    THADV1A.641    
                                                                           THADV1A.642    
*IF DEF,GLOBAL                                                             THADV1A.643    
                                                                           THADV1A.644    
C ---------------------------------------------------------------------    THADV1A.645    
CL    SECTION 4.1    CALL FILTER TO DO FILTERING.                          THADV1A.646    
C ---------------------------------------------------------------------    THADV1A.647    
                                                                           THADV1A.648    
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO       THADV1A.649    
C BE FILTERED.                                                             THADV1A.650    
                                                                           THADV1A.651    
      FILTER_SPACE = (ROW_LENGTH+2)*(NORTHERN_FILTERED_P_ROW-1+            THADV1A.652    
     *                P_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_P_ROW)          THADV1A.653    
CL    CALL FILTER FOR THETAL INCREMENTS                                    THADV1A.654    
                                                                           THADV1A.655    
      CALL FILTER(THETAL_INCREMENT,P_FIELD,P_LEVELS,                       APB0F402.38     
     &            FILTER_SPACE,ROW_LENGTH,                                 APB0F402.39     
*CALL ARGFLDPT                                                             APB0F402.40     
     &            FILTER_WAVE_NUMBER_P_ROWS,TRIGS,IFAX,                    APB0F402.41     
     *            NORTHERN_FILTERED_P_ROW,SOUTHERN_FILTERED_P_ROW)         THADV1A.659    
                                                                           THADV1A.660    
C ---------------------------------------------------------------------    THADV1A.661    
CL    SECTION 4.2    CALL POLAR TO UPDATE POLAR VALUES                     THADV1A.662    
C ---------------------------------------------------------------------    THADV1A.663    
                                                                           THADV1A.664    
      CALL POLAR(THETAL,THETAL_INCREMENT,THETAL_INCREMENT,                 APB2F401.53     
*CALL ARGFLDPT                                                             APB2F401.54     
     &           P_FIELD,P_FIELD,P_FIELD,                                  APB2F401.55     
     &           TOP_ROW_START,P_BOT_ROW_START,                            APB2F401.56     
     &           ROW_LENGTH,P_LEVELS)                                      APB2F401.57     
                                                                           THADV1A.670    
*ENDIF                                                                     THADV1A.671    
C ---------------------------------------------------------------------    THADV1A.672    
CL    SECTION 4.3    UPDATE ALL OTHER POINTS.                              THADV1A.673    
C   OUTPUT IS MASS-WEIGHTED.                                               ATD1F400.948    
C   INCREMENTS ARE ALREADY MASS-WEIGHTED                                   ATD1F400.949    
C ---------------------------------------------------------------------    THADV1A.674    
                                                                           THADV1A.675    
      DO K=1,P_LEVELS                                                      ATD1F400.950    
C UPDATE THETAL.                                                           THADV1A.677    
CFPP$ SELECT(CONCUR)                                                       THADV1A.678    
! Loop over field, missing top and bottom rows                             APB0F401.1210   
        DO I= START_POINT_NO_HALO,END_P_POINT_NO_HALO                      APB0F401.1211   
        THETAL(I,K)=THETAL(I,K)*RS(I,K)*RS(I,K)*                           ATD1F400.952    
     &        (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))-THETAL_INCREMENT(I,K)     ATD1F400.953    
        END DO                                                             ATD1F400.954    
      END DO                                                               THADV1A.702    
                                                                           THADV1A.703    
CL    END OF ROUTINE TH_ADV                                                THADV1A.704    
                                                                           THADV1A.705    
      RETURN                                                               THADV1A.706    
      END                                                                  THADV1A.707    
*ENDIF                                                                     THADV1A.708