*IF DEF,A05_2A,OR,DEF,A05_2C,OR,DEF,A05_3B,OR,DEF,A05_3C                   AJX1F405.123    
C ******************************COPYRIGHT******************************    GTS2F400.1441   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.1442   
C                                                                          GTS2F400.1443   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.1444   
C restrictions as set forth in the contract.                               GTS2F400.1445   
C                                                                          GTS2F400.1446   
C                Meteorological Office                                     GTS2F400.1447   
C                London Road                                               GTS2F400.1448   
C                BRACKNELL                                                 GTS2F400.1449   
C                Berkshire UK                                              GTS2F400.1450   
C                RG12 2SZ                                                  GTS2F400.1451   
C                                                                          GTS2F400.1452   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.1453   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.1454   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.1455   
C Modelling at the above address.                                          GTS2F400.1456   
C ******************************COPYRIGHT******************************    GTS2F400.1457   
C                                                                          GTS2F400.1458   
CLL  SUBROUTINE COR_ENGY-----------------------------------------------    CORENG1A.3      
CLL                                                                        CORENG1A.4      
CLL  PURPOSE : TO ADJUST THE POTENTIAL TEMPERATURE INCREMENTS              CORENG1A.5      
CLL            TO ENSURE THE CONSERVATION OF MOIST STATIC ENERGY           CORENG1A.6      
CLL                                                                        CORENG1A.7      
CLL  SUITABLE FOR SINGLE COLUMN MODEL USE                                  CORENG1A.8      
CLL                                                                        CORENG1A.9      
CLL  CODE REWORKED FOR CRAY Y-MP BY D.GREGORY AUTUMN/WINTER 1989/90        CORENG1A.10     
CLL                                                                        CORENG1A.11     
CLL  MODEL            MODIFICATION HISTORY FROM MODEL VERSION 3.0:         CORENG1A.12     
CLL VERSION  DATE                                                          CORENG1A.13     
CLL  4.5  22/7/98  Kill the IBM specific lines (JCThil)                    AJC1F405.3      
CLL                                                                        CORENG1A.14     
CLL  PROGRAMMING STANDARDS : UNIFIED MODEL DOCUMENTATION PAPER NO. 4       CORENG1A.15     
CLL  VERSION NO. 1                                                         CORENG1A.16     
CLL                                                                        CORENG1A.17     
CLL  LOGICAL COMPONENTS COVERED:                                           CORENG1A.18     
CLL                                                                        CORENG1A.19     
CLL  SYSTEM TASK : P27                                                     CORENG1A.20     
CLL                                                                        CORENG1A.21     
CLL  DOCUMENTATION : UNIFIED MODEL DOCUMENTATION PAPER P27                 CORENG1A.22     
CLL                  SECTION (12)                                          CORENG1A.23     
CLL                                                                        CORENG1A.24     
CLLEND-----------------------------------------------------------------    CORENG1A.25     
C                                                                          CORENG1A.26     
C*L  ARGUMENTS---------------------------------------------------------    CORENG1A.27     
C                                                                          CORENG1A.28     

      SUBROUTINE COR_ENGY                                                   4GSS1F403.162    
     *          (NP_FIELD,NPNTS,NCORE,NLEV,DTHBYDT,DQBYDT,SNOW,            GSS1F403.163    
     *                   EXNER,PSTAR,DELAK,DELBK,AKH,BKH,INDEX4)           GSS1F403.164    
C                                                                          CORENG1A.31     
      IMPLICIT NONE                                                        CORENG1A.32     
C                                                                          CORENG1A.33     
C                                                                          CORENG1A.34     
C----------------------------------------------------------------------    CORENG1A.35     
C MODEL CONSTANTS                                                          CORENG1A.36     
C----------------------------------------------------------------------    CORENG1A.37     
C                                                                          CORENG1A.38     
*CALL C_R_CP                                                               CORENG1A.39     
*CALL C_G                                                                  CORENG1A.40     
*CALL C_LHEAT                                                              CORENG1A.41     
C                                                                          CORENG1A.42     
C----------------------------------------------------------------------    CORENG1A.43     
C VECTOR LENGTH AND LOOP COUNTERS                                          CORENG1A.44     
C----------------------------------------------------------------------    CORENG1A.45     
C                                                                          CORENG1A.46     
      INTEGER NP_FIELD            ! LENGTH OF DATA (ALSO USED TO           GSS1F403.165    
                                  ! SPECIFY STARTING POINT OF              GSS1F403.166    
                                  ! DATA PASSED IN)                        GSS1F403.167    
C                                                                          GSS1F403.168    
      INTEGER NCORE               ! IN VECTOR LENGTHS                      CORENG1A.50     
C                                                                          CORENG1A.51     
      INTEGER NPNTS               ! IN FULL VECTOR LENGTH                  CORENG1A.52     
C                                                                          CORENG1A.53     
      INTEGER NLEV                ! IN NUMBER OF MODEL LAYERS              CORENG1A.54     
C                                                                          CORENG1A.55     
      INTEGER I,K                 ! LOOP COUNTERS                          CORENG1A.56     
C                                                                          CORENG1A.57     
C                                                                          CORENG1A.58     
C----------------------------------------------------------------------    CORENG1A.59     
C VARIABLES WHICH ARE INPUT                                                CORENG1A.60     
C----------------------------------------------------------------------    CORENG1A.61     
C                                                                          CORENG1A.62     
      INTEGER INDEX4(NPNTS)                                                GSS1F403.169    
      REAL DQBYDT(NP_FIELD,NLEV)  ! IN INCREMENT TO MODEL MIXING           GSS1F403.170    
                                  !    RATIO DUE TO CONVECTION             CORENG1A.64     
                                  !    (KG/KG/S)                           CORENG1A.65     
C                                                                          CORENG1A.66     
      REAL SNOW(NP_FIELD)         ! IN SNOW AT SURFACE (KG/M**2/S)         GSS1F403.171    
C                                                                          CORENG1A.68     
      REAL EXNER(NP_FIELD,NLEV+1) ! IN EXNER RATIO                         GSS1F403.172    
C                                                                          CORENG1A.70     
      REAL PSTAR(NP_FIELD)        ! IN SURFACE PRESSURE (PA)               GSS1F403.173    
C                                                                          CORENG1A.72     
      REAL DELAK(NLEV),           ! IN DIFFERENCE IN HYBRID CO-ORDINATE    CORENG1A.73     
     *     DELBK(NLEV)            !    COEFFICIENTS A AND B                CORENG1A.74     
                                  !    ACROSS LAYER K                      CORENG1A.75     
C                                                                          CORENG1A.76     
      REAL AKH(NLEV+1)              ! IN Hybrid coordinate A at            CORENG1A.77     
                                    !    layer boundary                    CORENG1A.78     
      REAL BKH(NLEV+1)              ! IN Hybrid coordinate B at            CORENG1A.79     
                                    !    layer boundary                    CORENG1A.80     
C                                                                          CORENG1A.81     
C----------------------------------------------------------------------    CORENG1A.82     
C VARIABLES WHICH ARE INPUT AND OUTPUT                                     CORENG1A.83     
C----------------------------------------------------------------------    CORENG1A.84     
C                                                                          CORENG1A.85     
      REAL DTHBYDT(NP_FIELD,NLEV) ! INOUT                                  GSS1F403.174    
                                  ! IN  INCREMENT TO MODEL POTENTIAL       CORENG1A.87     
                                  !     TEMPERATURE DUE TO CONVECTION      CORENG1A.88     
                                  !     (K/S)                              CORENG1A.89     
                                  ! OUT CORRECTED INCREMENT TO MODEL       CORENG1A.90     
                                  !     POTENTIAL TEMPERATURE DUE TO       CORENG1A.91     
                                  !     CONVECTION (K/S)                   CORENG1A.92     
C                                                                          CORENG1A.93     
C                                                                          CORENG1A.94     
C----------------------------------------------------------------------    CORENG1A.95     
C VARIABLES WHICH ARE LOCALLY DEFINED                                      CORENG1A.96     
C                                                                          CORENG1A.97     
      REAL QSUM(NCORE)            ! SUMMATION OF INCREMENTS TO MODEL       CORENG1A.137    
                                  ! MIXING RATIO DUE TO CONVECTION         CORENG1A.138    
                                  ! IN THE VERTICAL, WEIGHTED              CORENG1A.139    
                                  ! ACCORDING TO THE MASS OF THE           CORENG1A.140    
                                  ! LAYER (KG/M**2/S)                      CORENG1A.141    
C                                                                          CORENG1A.142    
      REAL TSPOS(NCORE)           ! SUMMATION OF POSITIVE INCREMENTS       CORENG1A.143    
                                  ! TO MODEL POTENTIAL TEMPERATURE         CORENG1A.144    
                                  ! DUE TO CONVECTION WITH HEIGHT,         CORENG1A.145    
                                  ! WEIGHTED ACCORDING TO THE MASS         CORENG1A.146    
                                  ! OF THE LAYER (K/M**2/S)                CORENG1A.147    
C                                                                          CORENG1A.148    
      REAL TSNEG(NCORE)           ! SUMMATION OF NEGATIVE INCREMENTS       CORENG1A.149    
                                  ! TO MODEL POTENTIAL TEMPERATURE         CORENG1A.150    
                                  ! DUE TO CONVECTION WITH HEIGHT,         CORENG1A.151    
                                  ! WEIGHTED ACCORDING TO THE MASS         CORENG1A.152    
                                  ! OF THE LAYER (K/M**2/S)                CORENG1A.153    
C                                                                          CORENG1A.154    
      REAL TERR(NCORE)            ! SUMMATION OF ALL INCREMENTS TO         CORENG1A.155    
                                  ! MODEL POTENTIAL TEMPERATURE            CORENG1A.156    
                                  ! DUE TO CONVECTION WITH HEIGHT,         CORENG1A.157    
                                  ! WEIGHTED ACCORDING TO THE MASS         CORENG1A.158    
                                  ! OF THE LAYER (K/M**2/S)                CORENG1A.159    
C                                                                          CORENG1A.160    
      LOGICAL BPOSER(NCORE)       ! MASK FOR POINTS IN LAYER K AT WHICH    CORENG1A.161    
                                  ! INCREMENTS TO MODEL POTENTIAL          CORENG1A.162    
                                  ! TEMPERATURE DUE TO CONVECTION ARE      CORENG1A.163    
                                  ! POSITIVE                               CORENG1A.164    
C                                                                          CORENG1A.165    
      LOGICAL BCORR(NCORE)        ! MASK FOR POINTS AT WHICH ENTHALPY      CORENG1A.166    
                                  ! CORRECTION IS NECESSARY                CORENG1A.167    
C                                                                          CORENG1A.168    
      REAL DELPK                  ! DIFFERENCE IN PRESSURE ACROSS A        CORENG1A.170    
                                  ! LAYER (PA)                             CORENG1A.171    
C                                                                          CORENG1A.172    
      REAL EXTEMPK                ! EXNER RATIO AT THE MID-POINT OF        CORENG1A.173    
                                  ! LAYER K                                CORENG1A.174    
C                                                                          CORENG1A.175    
                                                                           CORENG1A.176    
      REAL                                                                 CORENG1A.177    
     &    PU,PL                                                            CORENG1A.178    
*CALL P_EXNERC                                                             CORENG1A.179    
                                                                           CORENG1A.180    
C*----------------------------------------------------------------------   CORENG1A.181    
CL                                                                         CORENG1A.182    
CL----------------------------------------------------------------------   CORENG1A.183    
CL  SUM UP MIXING RATIO AND +VE AND -VE TEMPERATURE INCREMENTS             CORENG1A.184    
CL----------------------------------------------------------------------   CORENG1A.185    
CL                                                                         CORENG1A.186    
      DO 20 I=1,NCORE                                                      CORENG1A.187    
       QSUM (I) = 0.0                                                      CORENG1A.188    
       TSPOS(I) = 0.0                                                      CORENG1A.189    
       TSNEG(I) = 0.0                                                      CORENG1A.190    
   20  CONTINUE                                                            CORENG1A.191    
C                                                                          CORENG1A.192    
      DO 40 K=1,NLEV                                                       CORENG1A.193    
       DO 30 I=1,NCORE                                                     CORENG1A.194    
C                                                                          CORENG1A.195    
        DELPK = -DELAK(K) - DELBK(K)*PSTAR(INDEX4(I))                      GSS1F403.175    
C                                                                          CORENG1A.197    
        PU=PSTAR(INDEX4(I))*BKH(K+1) + AKH(K+1)                            GSS1F403.176    
        PL=PSTAR(INDEX4(I))*BKH(K) + AKH(K)                                GSS1F403.177    
        EXTEMPK  =                                                         GSS1F403.178    
     &    P_EXNER_C(EXNER(INDEX4(I),K+1),                                  GSS1F403.179    
     &              EXNER(INDEX4(I),K),PU,PL,KAPPA)                        GSS1F403.180    
C                                                                          CORENG1A.201    
        QSUM(I) = QSUM(I) + DQBYDT(INDEX4(I),K)*DELPK                      GSS1F403.181    
C                                                                          CORENG1A.203    
        IF (DTHBYDT(INDEX4(I),K) .GT. 0.0) THEN                            GSS1F403.182    
           TSPOS(I) = TSPOS(I) +                                           GSS1F403.183    
     &                DTHBYDT(INDEX4(I),K)*(CP*DELPK*EXTEMPK)              GSS1F403.184    
        ELSE                                                               CORENG1A.206    
           TSNEG(I) = TSNEG(I) +                                           GSS1F403.185    
     &                DTHBYDT(INDEX4(I),K)*(CP*DELPK*EXTEMPK)              GSS1F403.186    
        ENDIF                                                              CORENG1A.208    
   30  CONTINUE                                                            CORENG1A.209    
   40 CONTINUE                                                             CORENG1A.210    
CL                                                                         CORENG1A.211    
CL----------------------------------------------------------------------   CORENG1A.212    
CL  CALCULATE THE ERROR AND APPLY THE NECESSARY CORRECTION                 CORENG1A.213    
CL                                                                         CORENG1A.214    
CL  UM DOCUMENTATION PAPER P27                                             CORENG1A.215    
CL  SECTION (12), EQUATION (48), (49)                                      CORENG1A.216    
CL----------------------------------------------------------------------   CORENG1A.217    
CL                                                                         CORENG1A.218    
      DO 50 I=1,NCORE                                                      CORENG1A.219    
C                                                                          CORENG1A.220    
       TERR(I) = LC*QSUM(I) - LF*G*SNOW(INDEX4(I)) +                       GSS1F403.187    
     &                                   TSPOS(I) + TSNEG(I)               GSS1F403.188    
C                                                                          CORENG1A.222    
       BPOSER(I) = TERR(I) .GT. 0.0                                        CORENG1A.223    
C                                                                          CORENG1A.224    
       IF (BPOSER(I) .AND. (TSPOS(I) .EQ. 0.0)) THEN                       CORENG1A.225    
          BPOSER(I) = .FALSE.                                              CORENG1A.226    
       ELSE IF (.NOT.BPOSER(I) .AND. (TSNEG(I) .EQ. 0.0)) THEN             CORENG1A.227    
          BPOSER(I) = .TRUE.                                               CORENG1A.228    
       ENDIF                                                               CORENG1A.229    
C                                                                          CORENG1A.230    
       BCORR(I) = (TSPOS(I) .NE. 0.0) .OR. (TSNEG(I) .NE. 0.0)             CORENG1A.231    
C                                                                          CORENG1A.232    
       IF (BPOSER(I) .AND. BCORR(I)) THEN                                  CORENG1A.233    
          TERR(I) = 1. - TERR(I)/TSPOS(I)                                  CORENG1A.234    
       ELSE IF (.NOT.BPOSER(I) .AND. BCORR(I)) THEN                        CORENG1A.235    
          TERR(I) = 1. - TERR(I)/TSNEG(I)                                  CORENG1A.236    
       ENDIF                                                               CORENG1A.237    
C                                                                          CORENG1A.238    
  50  CONTINUE                                                             CORENG1A.239    
C                                                                          CORENG1A.240    
      DO 100 K=1,NLEV                                                      CORENG1A.241    
CDIR$ IVDEP                                                                CORENG1A.242    
! Fujitsu vectorization directive                                          GRB0F405.215    
!OCL NOVREC                                                                GRB0F405.216    
       DO 100 I=1,NCORE                                                    CORENG1A.243    
        IF (BCORR(I) .AND. (( BPOSER(I) .AND.                              CORENG1A.244    
     *   (DTHBYDT(INDEX4(I),K) .GT. 0.0)) .OR. ( .NOT.BPOSER(I)            GSS1F403.189    
     *   .AND. (DTHBYDT(INDEX4(I),K) .LT. 0.0))))                          GSS1F403.190    
     *       DTHBYDT(INDEX4(I),K) = DTHBYDT(INDEX4(I),K)*TERR(I)           GSS1F403.191    
  100      CONTINUE                                                        CORENG1A.248    
C                                                                          CORENG1A.249    
      RETURN                                                               CORENG1A.250    
      END                                                                  CORENG1A.251    
*ENDIF                                                                     CORENG1A.252