*IF DEF,A13_1A                                                             THQDIF1A.2      
C ******************************COPYRIGHT******************************    GTS2F400.10297  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.10298  
C                                                                          GTS2F400.10299  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.10300  
C restrictions as set forth in the contract.                               GTS2F400.10301  
C                                                                          GTS2F400.10302  
C                Meteorological Office                                     GTS2F400.10303  
C                London Road                                               GTS2F400.10304  
C                BRACKNELL                                                 GTS2F400.10305  
C                Berkshire UK                                              GTS2F400.10306  
C                RG12 2SZ                                                  GTS2F400.10307  
C                                                                          GTS2F400.10308  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.10309  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.10310  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.10311  
C Modelling at the above address.                                          GTS2F400.10312  
C ******************************COPYRIGHT******************************    GTS2F400.10313  
C                                                                          GTS2F400.10314  
CLL   SUBROUTINE TH_Q_DIF -----------------------------------------        THQDIF1A.3      
CLL                                                                        THQDIF1A.4      
CLL   PURPOSE:  CALCULATES DIFFUSION INCREMENTS FOR THETAL OR QT           ATD1F400.649    
CLL              IF STEEP SLOPE THEN EFFECTIVE DIFFUSION IS ZERO.          ATD1F400.650    
CLL                                                                        ATD1F400.651    
CLL   NOT SUITABLE FOR SINGLE COLUMN USE.                                  THQDIF1A.9      
CLL                                                                        THQDIF1A.10     
CLL   VERSION FOR CRAY Y-MP                                                THQDIF1A.11     
CLL                                                                        THQDIF1A.12     
CLL MM, TJ      <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES   THQDIF1A.13     
CLL                                                                        THQDIF1A.14     
CLL  MODEL            MODIFICATION HISTORY FROM MODEL VERSION 3.0:         THQDIF1A.15     
CLL VERSION  DATE                                                          THQDIF1A.16     
CLL  4.0  03/02/95  RE-WRITTEN TO MAKE MORE EFFICIENT WITH TESTING FOR     ATD1F400.652    
CLL                 STEEP SLOPES. AUTHOR: T.DAVIES. REVIEWER: M.MAWSON     ATD1F400.653    
CLL                                                                        ATD1F400.654    
!     3.5    28/03/95 MPP code additions  P.Burton                         APB0F305.1296   
!     4.1    07/05/96 Added MPP code and TYPFLDPT arguments  P.Burton      APB0F401.1593   
!     4.4    17/07/97 SCALAR calculated using SEC_P_LATITUDE at both       AIE0F404.17     
!                     poles for non MPP code to enable bit comparison      AIE0F404.18     
!                     with MPP code.   I Edmond                            AIE0F404.19     
CLL                                                                        THQDIF1A.17     
CLL   PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4,       THQDIF1A.18     
CLL                         STANDARD B. VERSION 2, DATED 18/01/90          THQDIF1A.19     
CLL                                                                        THQDIF1A.20     
CLL   SYSTEM COMPONENTS COVERED: P131                                      THQDIF1A.21     
CLL                                                                        THQDIF1A.22     
CLL   SYSTEM TASK: P1                                                      THQDIF1A.23     
CLL                                                                        THQDIF1A.24     
CLL   DOCUMENTATION:       THE EQUATION USED IS (47)                       THQDIF1A.25     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER            THQDIF1A.26     
CLL                        NO. 10 M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON    THQDIF1A.27     
CLL                        VERSION 16, DATED 09/01/91.                     THQDIF1A.28     
CLLEND-------------------------------------------------------------        THQDIF1A.29     
                                                                           THQDIF1A.30     
C*L   ARGUMENTS:---------------------------------------------------        THQDIF1A.31     

      SUBROUTINE TH_Q_DIF                                                   4,5THQDIF1A.32     
     1                  (FIELD,FIELD_INC,                                  ATD1F400.655    
     2                   SEC_P_LATITUDE,ROW_LENGTH,                        APB0F401.1594   
*CALL ARGFLDPT                                                             APB0F401.1595   
     4                   P_FIELD,U_FIELD,                                  ATD1F400.658    
     5                   DIFFUSION_EW,DIFFUSION_NS)                        ATD1F400.659    
                                                                           ATD1F400.660    
                                                                           THQDIF1A.39     
      IMPLICIT NONE                                                        THQDIF1A.40     
                                                                           THQDIF1A.41     
      INTEGER                                                              THQDIF1A.42     
     *  U_FIELD            !IN DIMENSION OF FIELDS ON VELOCITY GRID        THQDIF1A.43     
     *, P_FIELD            !IN DIMENSION OF FIELDS ON PRESSURE GRID        THQDIF1A.44     
     *, ROW_LENGTH         !IN NUMBER OF POINTS PER ROW                    THQDIF1A.45     
                                                                           APB0F401.1596   
! All TYPFLDPT arguments are intent IN                                     APB0F401.1597   
*CALL TYPFLDPT                                                             APB0F401.1598   
                                                                           THQDIF1A.48     
      REAL                                                                 THQDIF1A.49     
     *  FIELD(P_FIELD)            !IN. THETAL OR QT FIELD.                 ATD1F400.661    
     *, FIELD_INC(P_FIELD)       !OUT DIFFUSION INCREMENT                  ATD1F400.662    
                                                                           THQDIF1A.54     
      REAL                                                                 THQDIF1A.55     
     * DIFFUSION_EW(P_FIELD)  !IN HOLDS EAST-WEST EFFECTIVE DIFFUSION      ATD1F400.663    
     *,DIFFUSION_NS(P_FIELD)  !IN HOLDS NORTH-SOUTH EFFECTIVE DIFFUSION    ATD1F400.664    
     *,SEC_P_LATITUDE(P_FIELD)         !IN 1/COS(LAT) AT P POINTS          THQDIF1A.62     
                                                                           THQDIF1A.65     
C*---------------------------------------------------------------------    THQDIF1A.66     
                                                                           THQDIF1A.67     
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    THQDIF1A.68     
C DEFINE LOCAL ARRAYS: 5 ARE REQUIRED                                      ATD1F400.665    
                                                                           THQDIF1A.70     
      REAL                                                                 THQDIF1A.71     
     * FIELD1(P_FIELD)      ! GENERAL WORKSPACE                            ATD1F400.666    
     *,FIELD2(P_FIELD)      ! GENERAL WORKSPACE                            ATD1F400.667    
     *,FIELD3(P_FIELD)      ! GENERAL WORKSPACE                            ATD1F400.668    
     *,NP_FLUX(ROW_LENGTH)  ! HOLDS NORTH POLAR FLUX                       THQDIF1A.74     
     *,SP_FLUX(ROW_LENGTH)  ! HOLDS SOUTH POLAR FLUX                       THQDIF1A.75     
C*---------------------------------------------------------------------    THQDIF1A.76     
C DEFINE LOCAL VARIABLES                                                   THQDIF1A.77     
                                                                           THQDIF1A.78     
C LOCAL REALS.                                                             THQDIF1A.79     
      REAL                                                                 THQDIF1A.80     
     *  SCALAR                                                             THQDIF1A.81     
C COUNT VARIABLES FOR DO LOOPS ETC.                                        THQDIF1A.82     
      INTEGER                                                              THQDIF1A.83     
     *  I,J,IJ                                                             APB0F401.1599   
                                                                           THQDIF1A.85     
C*L   EXTERNAL SUBROUTINE CALLS:---------------------------------------    THQDIF1A.86     
      EXTERNAL                                                             THQDIF1A.87     
     *  POLAR                                                              THQDIF1A.88     
C*---------------------------------------------------------------------    THQDIF1A.89     
CL    MAXIMUM VECTOR LENGTH ASSUMED IS END_P_UPDATE-START_P_UPDATE+1       THQDIF1A.90     
CL---------------------------------------------------------------------    THQDIF1A.91     
CL    INTERNAL STRUCTURE.                                                  THQDIF1A.92     
CL---------------------------------------------------------------------    THQDIF1A.93     
CL                                                                         THQDIF1A.94     
CL---------------------------------------------------------------------    THQDIF1A.95     
CL    SECTION 1.    DELTA LAMBDA TERMS                                     ATD1F400.670    
CL---------------------------------------------------------------------    ATD1F400.671    
C----------------------------------------------------------------------    ATD1F400.672    
CL    SECTION 1.1    CALCULATE DELTAPHILAMBDA*1/(DELTALAMBDA)SQUARED       ATD1F400.673    
C----------------------------------------------------------------------    ATD1F400.674    
                                                                           ATD1F400.675    
                                                                           ATD1F400.676    
      DO  I=START_POINT_NO_HALO,END_P_POINT_NO_HALO-1                      APB0F401.1600   
       FIELD1(I)=FIELD(I+1)-FIELD(I)                                       ATD1F400.678    
      END DO                                                               ATD1F400.679    
                                                                           ATD1F400.680    
                                                                           APB0F401.1601   
*IF -DEF,MPP                                                               APB0F401.1602   
C     RECALCULATE END-POINTS                                               ATD1F400.681    
                                                                           ATD1F400.682    
      DO  I=START_POINT_NO_HALO-1,END_P_POINT_NO_HALO,ROW_LENGTH           APB0F401.1603   
       IJ=I-ROW_LENGTH+1                                                   ATD1F400.684    
       FIELD1(I)=FIELD(IJ)-FIELD(I)                                        ATD1F400.685    
      END DO                                                               ATD1F400.686    
*ELSE                                                                      APB0F401.1604   
! Set last point of field                                                  APB0F401.1605   
      FIELD1(END_P_POINT_NO_HALO)=FIELD1(END_P_POINT_NO_HALO-1)            APB0F401.1606   
*ENDIF                                                                     APB0F401.1607   
                                                                           ATD1F400.687    
C----------------------------------------------------------------------    ATD1F400.688    
CL    SECTION 1.2    CALCULATE DELTA LAMBDA TERM                           ATD1F400.689    
C----------------------------------------------------------------------    ATD1F400.690    
                                                                           ATD1F400.691    
      DO I= START_POINT_NO_HALO+1,END_P_POINT_NO_HALO                      APB0F401.1608   
       FIELD2(I)=(DIFFUSION_EW(I)*FIELD1(I)-                               ATD1F400.698    
     &            DIFFUSION_EW(I-1)*FIELD1(I-1))*                          ATD1F400.699    
     &            SEC_P_LATITUDE(I)                                        ATD1F400.700    
      END DO                                                               ATD1F400.701    
                                                                           ATD1F400.702    
                                                                           APB0F401.1609   
*IF -DEF,MPP                                                               APB0F401.1610   
C     RECALCULATE END-POINTS                                               ATD1F400.703    
      DO  I= START_POINT_NO_HALO,END_P_POINT_NO_HALO,ROW_LENGTH            APB0F401.1611   
       IJ=I+ROW_LENGTH-1                                                   ATD1F400.705    
       FIELD2(I)=(DIFFUSION_EW(I)*FIELD1(I)-                               ATD1F400.706    
     &            DIFFUSION_EW(IJ)*FIELD1(IJ))*                            ATD1F400.707    
     &            SEC_P_LATITUDE(I)                                        ATD1F400.708    
      END DO                                                               ATD1F400.709    
*ELSE                                                                      APB0F401.1612   
      FIELD2(START_POINT_NO_HALO)=FIELD2(START_POINT_NO_HALO+1)            APB0F401.1613   
*ENDIF                                                                     APB0F401.1614   
                                                                           ATD1F400.710    
C----------------------------------------------------------------------    ATD1F400.711    
CL    SECTION 2    CALCULATE PHI DIRECTION TERM AND ADD                    ATD1F400.712    
CL                   ONTO FIRST TERM TO GET TOTAL CORRECTION.              ATD1F400.713    
C----------------------------------------------------------------------    ATD1F400.714    
                                                                           ATD1F400.715    
C   CALCULATE DELTA PHI TERMS                                              ATD1F400.716    
                                                                           ATD1F400.717    
      DO  I=START_POINT_NO_HALO-ROW_LENGTH,END_P_POINT_NO_HALO             APB0F401.1615   
       FIELD1(I)=FIELD(I)-FIELD(I+ROW_LENGTH)                              ATD1F400.719    
      END DO                                                               ATD1F400.720    
                                                                           ATD1F400.721    
C----------------------------------------------------------------------    ATD1F400.722    
CL    SECTION 2.3  CALCULATE DELTAPHI TERM AND ADD ONTO DELTALAMBDA TERM   ATD1F400.723    
C----------------------------------------------------------------------    ATD1F400.724    
                                                                           ATD1F400.725    
      DO  I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                        APB0F401.1616   
       FIELD_INC(I)= (FIELD2(I)+                                           ATD1F400.731    
     &            DIFFUSION_NS(I-ROW_LENGTH)*FIELD1(I-ROW_LENGTH)-         ATD1F400.732    
     &            DIFFUSION_NS(I)*FIELD1(I))*SEC_P_LATITUDE(I)             ATD1F400.733    
      END DO                                                               ATD1F400.734    
                                                                           ATD1F400.735    
C----------------------------------------------------------------------    ATD1F400.736    
CL    SECTION 3  CALCULATE DIFFUSION AT POLES                              ATD1F400.737    
C----------------------------------------------------------------------    ATD1F400.738    
                                                                           ATD1F400.739    
*IF DEF,GLOBAL                                                             ATD1F400.740    
                                                                           ATD1F400.741    
C GLOBAL MODEL CALCULATES POLAR DEL-SQUARED USING ACROSS-POLE DIFFERENCE   ATD1F400.742    
C ASSUMING FLUX=0 AT HALF-GRID-LENGTH ON OTHER SIDE OF POLE                ATD1F400.743    
                                                                           ATD1F400.744    
                                                                           APB0F401.1617   
      SCALAR=SEC_P_LATITUDE(TOP_ROW_START)                                 APB0F401.1618   
                                                                           APB0F401.1619   
! Do North Pole                                                            APB0F401.1620   
*IF DEF,MPP                                                                APB0F401.1621   
      IF (at_top_of_LPG) THEN                                              APB0F401.1622   
*ENDIF                                                                     APB0F401.1623   
        DO I=1,ROW_LENGTH                                                  APB0F401.1624   
          J=TOP_ROW_START+I-1                                              APB0F401.1625   
          FIELD3(J)=-DIFFUSION_NS(J)*FIELD1(J)*SCALAR                      APB0F401.1626   
          NP_FLUX(I)=FIELD3(J)                                             APB0F401.1627   
          FIELD_INC(J)=0.0                                                 APB0F401.1628   
        ENDDO                                                              APB0F401.1629   
*IF DEF,MPP                                                                APB0F401.1630   
      ENDIF                                                                APB0F401.1631   
*ENDIF                                                                     APB0F401.1632   
                                                                           APB0F401.1633   
! And South Pole                                                           APB0F401.1634   
      SCALAR=SEC_P_LATITUDE(P_BOT_ROW_START)                               AIE0F404.20     
*IF DEF,MPP                                                                APB0F401.1635   
                                                                           APB0F401.1637   
      IF (at_base_of_LPG) THEN                                             APB0F401.1638   
*ENDIF                                                                     APB0F401.1639   
        DO I=1,ROW_LENGTH                                                  APB0F401.1640   
          J=I+P_BOT_ROW_START-1                                            APB0F401.1641   
          FIELD3(J)=DIFFUSION_NS(J-ROW_LENGTH)*FIELD1(J-ROW_LENGTH)*       APB0F401.1642   
     &              SCALAR                                                 APB0F401.1643   
          SP_FLUX(I)=FIELD3(J)                                             APB0F401.1644   
          FIELD_INC(J)=0.0                                                 APB0F401.1645   
        ENDDO                                                              APB0F401.1646   
*IF DEF,MPP                                                                APB0F401.1647   
      ENDIF                                                                APB0F401.1648   
*ENDIF                                                                     APB0F401.1649   
                                                                           ATD1F400.762    
CL    CALL POLAR TO UPDATE POLAR VALUES                                    ATD1F400.763    
                                                                           ATD1F400.764    
      CALL POLAR(FIELD_INC,NP_FLUX,SP_FLUX,                                APB2F401.58     
*CALL ARGFLDPT                                                             APB2F401.59     
     &           P_FIELD,ROW_LENGTH,ROW_LENGTH,                            APB2F401.60     
     &           1,1,ROW_LENGTH,1)                                         APB2F401.61     
                                                                           ATD1F400.766    
*ELSE                                                                      ATD1F400.767    
CL    LIMITED AREA MODEL ZEROES DEL-SQUARED ON BOUNDARIES.                 ATD1F400.768    
*IF DEF,MPP                                                                APB0F401.1650   
      IF (at_left_of_LPG) THEN                                             APB0F401.1651   
*ENDIF                                                                     APB0F401.1652   
        DO I=START_POINT_NO_HALO+FIRST_ROW_PT-1,                           APB0F401.1653   
     &       END_P_POINT_NO_HALO,ROW_LENGTH                                APB0F401.1654   
          FIELD_INC(I)=0.0                                                 APB0F401.1655   
        ENDDO                                                              APB0F401.1656   
*IF DEF,MPP                                                                APB0F401.1657   
      ENDIF                                                                APB0F401.1658   
                                                                           APB0F401.1659   
      IF (at_right_of_LPG) THEN                                            APB0F401.1660   
*ENDIF                                                                     APB0F401.1661   
        DO I=START_POINT_NO_HALO+LAST_ROW_PT-1,                            APB0F401.1662   
     &       END_P_POINT_NO_HALO,ROW_LENGTH                                APB0F401.1663   
          FIELD_INC(I)=0.0                                                 APB0F401.1664   
        ENDDO                                                              APB0F401.1665   
*IF DEF,MPP                                                                APB0F401.1666   
      ENDIF                                                                APB0F401.1667   
*ENDIF                                                                     APB0F401.1668   
*ENDIF                                                                     ATD1F400.773    
CL    END OF ROUTINE TH_Q_DIF                                              THQDIF1A.227    
                                                                           THQDIF1A.228    
      RETURN                                                               THQDIF1A.229    
      END                                                                  THQDIF1A.230    
*ENDIF                                                                     THQDIF1A.231