*IF DEF,RECON                                                              THLQTADJ.2      
C *****************************COPYRIGHT******************************     THLQTADJ.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    THLQTADJ.4      
C                                                                          THLQTADJ.5      
C Use, duplication or disclosure of this code is subject to the            THLQTADJ.6      
C restrictions as set forth in the contract.                               THLQTADJ.7      
C                                                                          THLQTADJ.8      
C                Meteorological Office                                     THLQTADJ.9      
C                London Road                                               THLQTADJ.10     
C                BRACKNELL                                                 THLQTADJ.11     
C                Berkshire UK                                              THLQTADJ.12     
C                RG12 2SZ                                                  THLQTADJ.13     
C                                                                          THLQTADJ.14     
C If no contract has been raised with this copy of the code, the use,      THLQTADJ.15     
C duplication or disclosure of it is strictly prohibited.  Permission      THLQTADJ.16     
C to do so must first be obtained in writing from the Head of Numerical    THLQTADJ.17     
C Modelling at the above address.                                          THLQTADJ.18     
C ******************************COPYRIGHT******************************    THLQTADJ.19     

      SUBROUTINE THL_QT_ADJ(N_TYPES,P_FIELD,P_LEVELS,Q_LEVELS,              1,10THLQTADJ.20     
     !                      NFTIN,L_MP_PRECIP,LOOKUP,FIXHD,                THLQTADJ.21     
     !                      LEN1_LEVDEPC,LEN2_LEVDEPC,LEVDEPC,             THLQTADJ.22     
*CALL ARGPPX                                                               THLQTADJ.23     
     !                      PP_ITEMC,PP_POS)                               THLQTADJ.24     
                                                                           THLQTADJ.25     
! Subroutine arguments                                                     THLQTADJ.26     
!   Scalar arguments with intent(in):                                      THLQTADJ.27     
      INTEGER       N_TYPES           !No of different                     THLQTADJ.28     
                                      !section/item codes                  THLQTADJ.29     
      INTEGER       P_FIELD           !No of points on p-grid              THLQTADJ.30     
      INTEGER       P_LEVELS          !No of model levels                  THLQTADJ.31     
      INTEGER       Q_LEVELS          !No of moist levels                  THLQTADJ.32     
      INTEGER       NFTIN             !Unit number                         THLQTADJ.33     
      INTEGER       LEN1_LEVDEPC      !1st dim of level dep consts         THLQTADJ.34     
      INTEGER       LEN2_LEVDEPC      !1st dim of level dep consts         THLQTADJ.35     
      LOGICAL       L_MP_PRECIP       !T= mixed phase precip (output)      THLQTADJ.36     
                                                                           THLQTADJ.37     
!   Array  arguments with intent(in):                                      THLQTADJ.38     
      INTEGER       LOOKUP(*)         !Lookup header                       THLQTADJ.39     
      INTEGER       FIXHD(*)          !Fixed length header                 THLQTADJ.40     
      INTEGER       PP_ITEMC(N_TYPES) !IN Item codes on file               THLQTADJ.41     
      INTEGER       PP_POS(N_TYPES)   !IN Position on file                 THLQTADJ.42     
      REAL          LEVDEPC(LEN1_LEVDEPC,LEN2_LEVDEPC)                     THLQTADJ.43     
                                                                           THLQTADJ.44     
C Local arrays:--------------------------------------------------------    THLQTADJ.45     
      REAL          PSTAR(P_FIELD)    ! PSTAR - surface pressure           THLQTADJ.46     
      REAL          QCF(P_FIELD)      ! QCF - Cloud ice                    THLQTADJ.47     
      REAL          QT(P_FIELD)       ! QT  - Humidity plus cloud water    THLQTADJ.48     
      REAL          THL(P_FIELD)      ! THL - Thetal                       THLQTADJ.49     
C*L External subroutines called:---------------------------------------    THLQTADJ.50     
      EXTERNAL LOCATE,ABORT_IO,READFLDS                                    THLQTADJ.51     
C Local variables:-----------------------------------------------------    THLQTADJ.52     
      INTEGER       I,K               ! Loop indices                       THLQTADJ.53     
      INTEGER       POS,POSTHL        ! Position indicators                THLQTADJ.54     
      INTEGER       POSQT,POSQCF      ! Position indicators                THLQTADJ.55     
      INTEGER       P_EXNER_FULL      ! Exner pressure                     THLQTADJ.56     
      INTEGER       ICODE             ! Return code                        THLQTADJ.57     
                                                                           THLQTADJ.58     
      CHARACTER*80  CMESSAGE          ! Error message                      THLQTADJ.59     
! ---------------------------------------------------------------------    THLQTADJ.60     
! Comdecks:------------------------------------------------------------    THLQTADJ.61     
*CALL CSUBMODL                                                             THLQTADJ.62     
*CALL CPPXREF                                                              THLQTADJ.63     
*CALL PPXLOOK                                                              THLQTADJ.64     
*CALL C_R_CP                                                               THLQTADJ.65     
*CALL C_LHEAT                                                              THLQTADJ.66     
!----------------------------------------------------------------------    THLQTADJ.67     
                                                                           THLQTADJ.68     
      CALL LOCATE(1,PP_ITEMC,N_TYPES,POS)                                  THLQTADJ.69     
      CALL LOCATE(5,PP_ITEMC,N_TYPES,POSTHL)                               THLQTADJ.70     
      CALL LOCATE(11,PP_ITEMC,N_TYPES,POSQT)                               THLQTADJ.71     
      CALL LOCATE(12,PP_ITEMC,N_TYPES,POSQCF)                              THLQTADJ.72     
                                                                           THLQTADJ.73     
      IF(POSQCF.NE.0.AND..NOT.L_MP_PRECIP)THEN                             THLQTADJ.74     
! Read in PSTAR                                                            THLQTADJ.75     
        CALL READFLDS(NFTIN,1,PP_POS(POS),LOOKUP,64,                       THLQTADJ.76     
     &                PSTAR,P_FIELD,FIXHD,                                 THLQTADJ.77     
*CALL ARGPPX                                                               THLQTADJ.78     
     &                ICODE,CMESSAGE)                                      THLQTADJ.79     
                                                                           THLQTADJ.80     
        DO K=1,Q_LEVELS                                                    THLQTADJ.81     
! Read in THL                                                              THLQTADJ.82     
          CALL READFLDS(NFTIN,1,PP_POS(POSTHL)+K-1,LOOKUP,64,              THLQTADJ.83     
     &                  THL,P_FIELD,FIXHD,                                 THLQTADJ.84     
*CALL ARGPPX                                                               THLQTADJ.85     
     &                  ICODE,CMESSAGE)                                    THLQTADJ.86     
          IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)      THLQTADJ.87     
! Read in QT                                                               THLQTADJ.88     
          CALL READFLDS(NFTIN,1,PP_POS(POSQT)+K-1,LOOKUP,64,               THLQTADJ.89     
     &                  QT,P_FIELD,FIXHD,                                  THLQTADJ.90     
*CALL ARGPPX                                                               THLQTADJ.91     
     &                  ICODE,CMESSAGE)                                    THLQTADJ.92     
          IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)      THLQTADJ.93     
! Read in QCF                                                              THLQTADJ.94     
          CALL READFLDS(NFTIN,1,PP_POS(POSQCF)+K-1,LOOKUP,64,              THLQTADJ.95     
     &                  QCF,P_FIELD,FIXHD,                                 THLQTADJ.96     
*CALL ARGPPX                                                               THLQTADJ.97     
     &                  ICODE,CMESSAGE)                                    THLQTADJ.98     
          IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)      THLQTADJ.99     
                                                                           THLQTADJ.100    
! Add Cloud ice to QT and subtract latent heat correction to THL           THLQTADJ.101    
!  to compensate                                                           THLQTADJ.102    
          DO I=1,P_FIELD                                                   THLQTADJ.103    
            P_EXNER_FULL = LEVDEPC(K,1)+LEVDEPC(K,2)*PSTAR(I)              THLQTADJ.104    
            QT(I)=QT(I)+QCF(I)                                             THLQTADJ.105    
            THL(I)=THL(I)-(LC+LF)*QCF(I)/(CP*P_EXNER_FULL)                 THLQTADJ.106    
          END DO                                                           THLQTADJ.107    
                                                                           THLQTADJ.108    
! Write out THL                                                            THLQTADJ.109    
          CALL WRITFLDS(NFTIN,1,PP_POS(POSTHL)+K-1,LOOKUP,64,              THLQTADJ.110    
     &                  THL,P_FIELD,FIXHD,                                 THLQTADJ.111    
*CALL ARGPPX                                                               THLQTADJ.112    
     &                  ICODE,CMESSAGE)                                    THLQTADJ.113    
          IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)      THLQTADJ.114    
! Write out QT                                                             THLQTADJ.115    
          CALL WRITFLDS(NFTIN,1,PP_POS(POSQT)+K-1,LOOKUP,64,               THLQTADJ.116    
     &                  QT,P_FIELD,FIXHD,                                  THLQTADJ.117    
*CALL ARGPPX                                                               THLQTADJ.118    
     &                  ICODE,CMESSAGE)                                    THLQTADJ.119    
          IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)      THLQTADJ.120    
                                                                           THLQTADJ.121    
        END DO                                                             THLQTADJ.122    
      ENDIF                                                                THLQTADJ.123    
      RETURN                                                               THLQTADJ.124    
      END                                                                  THLQTADJ.125    
*ENDIF                                                                     THLQTADJ.126