*IF DEF,C92_1A                                                             PMSL1A.2      
C ******************************COPYRIGHT******************************    GTS2F400.7273   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.7274   
C                                                                          GTS2F400.7275   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.7276   
C restrictions as set forth in the contract.                               GTS2F400.7277   
C                                                                          GTS2F400.7278   
C                Meteorological Office                                     GTS2F400.7279   
C                London Road                                               GTS2F400.7280   
C                BRACKNELL                                                 GTS2F400.7281   
C                Berkshire UK                                              GTS2F400.7282   
C                RG12 2SZ                                                  GTS2F400.7283   
C                                                                          GTS2F400.7284   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.7285   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.7286   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.7287   
C Modelling at the above address.                                          GTS2F400.7288   
C ******************************COPYRIGHT******************************    GTS2F400.7289   
C                                                                          GTS2F400.7290   
CLL  SUBROUTINE PMSL--------------------------------------------------     PMSL1A.3      
CLL                                                                        PMSL1A.4      
CLL  Purpose:  Calculates mean sea level pressure                          PMSL1A.5      
CLL                                                                        PMSL1A.6      
CLL AD, DR      <- programmer of some or all of previous code or changes   PMSL1A.7      
CLL                                                                        PMSL1A.8      
CLL  Model            Modification history from model version 3.0:         PMSL1A.9      
CLL version  Date                                                          PMSL1A.10     
CLL                                                                        PMSL1A.11     
CLL  4.2    23/07/96  Revised for CRAY T3E. Option to use fast vector      GSS5F402.8      
CLL                   like function for raising to a power introduced      GSS5F402.9      
CLL                   under DEF T3E.                                       GSS5F402.10     
CLL                   New arguments START and END introduced to            GSS5F402.11     
CLL                   facilitate the removal of duplicate calculations     GSS5F402.12     
CLL                   when using domain decomposition.                     GSS5F402.13     
CLL                   Author A. Dickinson     Reviewer: F. Rawlins         GSS5F402.14     
!LL  4.5    20/4/98   Implement the START,END described above.             GSM1F405.556    
!LL                   S.D.Mullerworth                                      GSM1F405.557    
CLL                                                                        GSS5F402.15     
CLL  4.5    09/01/98  CRAY T3E optimisation: replace rtor_v by powr_v      GDR8F405.11     
CLL                                                    Deborah Salmond     GDR8F405.12     
CLL Programming standard :                                                 PMSL1A.12     
CLL                                                                        PMSL1A.13     
CLL Logical components covered : D441                                      PMSL1A.14     
CLL                                                                        PMSL1A.15     
CLL Project task :                                                         PMSL1A.16     
CLL                                                                        PMSL1A.17     
CLL  Documentation: The interpolation formulae are described in            PMSL1A.18     
CLL                 unified model on-line documentation paper S1.          PMSL1A.19     
CLL                                                                        PMSL1A.20     
CLL  -----------------------------------------------------------------     PMSL1A.21     
C                                                                          PMSL1A.22     
C*L  Arguments:-------------------------------------------------------     PMSL1A.23     

      SUBROUTINE PMSL                                                       1PMSL1A.24     
     &  (P_MSL,PL,PSTAR,P_EXNER_HALF,THETA,Q,PHI_STAR                      GSM1F405.558    
     &  ,POINTS,P_LEVELS,Q_LEVELS,L,AKH,BKH                                GSM1F405.559    
     &  ,START,END)                                                        GSM1F405.560    
                                                                           PMSL1A.27     
      IMPLICIT NONE                                                        PMSL1A.28     
                                                                           PMSL1A.29     
      INTEGER                                                              PMSL1A.30     
     * POINTS    !IN Number of points per level                            GSS5F402.18     
     *,P_LEVELS  !IN Number of model levels                                PMSL1A.32     
     *,Q_LEVELS  !IN Number of wet levels                                  PMSL1A.33     
     *,L         !IN Reference level for below surface T extrapolation.    PMSL1A.34     
     *           ! = No of B.L. levels plus one                            PMSL1A.35     
     *,START     !IN First point to be processed                           GSS5F402.19     
     *,END       !IN Last point to be processed                            GSS5F402.20     
                                                                           PMSL1A.36     
      REAL                                                                 PMSL1A.37     
     * P_MSL(POINTS)    !OUT Mean sea level pressure                       PMSL1A.38     
     *,PHI_STAR(POINTS) !IN Geopotential height of topography              PMSL1A.39     
     *,PL(POINTS)       !IN Reference pressure at level L                  PMSL1A.40     
     *,PSTAR(POINTS)    !IN Surface pressure                               PMSL1A.41     
     *,P_EXNER_HALF(POINTS,P_LEVELS+1) !IN Exner pressure at model         PMSL1A.42     
     *                                 !   half levels                     PMSL1A.43     
     *,THETA(POINTS,P_LEVELS) !IN Potential temperature at full levels     PMSL1A.44     
     *,Q(POINTS,Q_LEVELS)     !IN Specific humidity at full levels         PMSL1A.45     
     *,AKH(P_LEVELS+1)        !IN Hybrid Coords. A and B values            PMSL1A.46     
     *,BKH(P_LEVELS+1)        !IN at half levels.                          PMSL1A.47     
                                                                           PMSL1A.48     
C Workspace usage:-----------------------------------------------------    PMSL1A.49     
      REAL TEMP(POINTS),POWER                                              GDR8F405.13     
C ---------------------------------------------------------------------    PMSL1A.51     
C External subroutines called:-----------------------------------------    PMSL1A.52     
C                                                                          GSS5F402.22     
C*---------------------------------------------------------------------    PMSL1A.54     
C Define local variables:----------------------------------------------    PMSL1A.55     
      INTEGER I,K                                                          PMSL1A.56     
      REAL PTOP    ! Pressure at top of layer                              PMSL1A.57     
      REAL PBOT    ! Pressure at bottom of layer                           PMSL1A.58     
      REAL P_EXNER_FULL  ! Exner Pressure at full model level              PMSL1A.59     
      REAL TS            ! Surface Temperature                             PMSL1A.60     
      REAL ALOGHF,EXPHF                                                    PMSL1A.61     
C----------------------------------------------------------------------    PMSL1A.62     
C Constants from comdecks:---------------------------------------------    PMSL1A.63     
*CALL C_EPSLON                                                             PMSL1A.64     
*CALL C_G                                                                  PMSL1A.65     
*CALL C_R_CP                                                               PMSL1A.66     
*CALL C_LAPSE                                                              PMSL1A.67     
C----------------------------------------------------------------------    PMSL1A.68     
                                                                           PMSL1A.69     
CL 1. Define local constants                                               PMSL1A.70     
                                                                           PMSL1A.71     
      REAL LAPSE_R_OVER_G,G_OVER_LAPSE_R,ONE_OVER_G                        PMSL1A.72     
      PARAMETER(LAPSE_R_OVER_G=LAPSE*R/G)                                  PMSL1A.73     
      PARAMETER(G_OVER_LAPSE_R=1./LAPSE_R_OVER_G)                          PMSL1A.74     
      PARAMETER(ONE_OVER_G=1./G)                                           PMSL1A.75     
                                                                           PMSL1A.76     
*CALL P_EXNERC                                                             PMSL1A.77     
                                                                           PMSL1A.78     
CL 2. Calculate mean sea level pressure: equations (3.8) & (3.11)          PMSL1A.79     
                                                                           PMSL1A.80     
*IF DEF,VECTLIB                                                            PXVECTLB.120    
        POWER=LAPSE_R_OVER_G                                               GDR8F405.14     
      DO I=START,END                                                       GSS5F402.27     
        TEMP(I)=PSTAR(I)/PL(I)                                             GSS5F402.29     
      ENDDO                                                                GSS5F402.30     
      CALL POWR_V(END-START+1,TEMP(START),POWER,TEMP(START))               GDR8F405.15     
*ENDIF                                                                     GSS5F402.32     
                                                                           GSS5F402.33     
      DO I=START,END                                                       GSS5F402.34     
*IF -DEF,VECTLIB                                                           PXVECTLB.121    
      TEMP(I)=(PSTAR(I)/PL(I))**LAPSE_R_OVER_G                             GSS5F402.36     
*ENDIF                                                                     GSS5F402.37     
                                                                           PMSL1A.82     
C Estimate surface temperature: equation (3.8)                             PMSL1A.83     
      PTOP = AKH(L+1) + BKH(L+1)*PSTAR(I)                                  PMSL1A.84     
      PBOT = AKH(L)   + BKH(L)  *PSTAR(I)                                  PMSL1A.85     
      P_EXNER_FULL = P_EXNER_C                                             PMSL1A.86     
     +(P_EXNER_HALF(I,L+1),P_EXNER_HALF(I,L),PTOP,PBOT,KAPPA)              PMSL1A.87     
      TS=THETA(I,L)*P_EXNER_FULL*TEMP(I)                                   GSS5F402.38     
      TS=TS*(1.0+C_VIRTUAL*Q(I,1))                                         PMSL1A.94     
      TEMP(I)=(TS+LAPSE*ONE_OVER_G*PHI_STAR(I))/TS                         GSS5F402.39     
      ENDDO                                                                GSS5F402.40     
                                                                           PMSL1A.95     
C Calculate PMSL using equation (3.11)                                     PMSL1A.96     
                                                                           GSS5F402.41     
*IF DEF,VECTLIB                                                            PXVECTLB.122    
        POWER=G_OVER_LAPSE_R                                               GDR8F405.16     
        CALL POWR_V(END-START+1,TEMP(START),POWER,TEMP(START))             GDR8F405.17     
*ENDIF                                                                     PMSL1A.102    
                                                                           PMSL1A.103    
      DO I=START,END                                                       GSS5F402.47     
*IF -DEF,VECTLIB                                                           PXVECTLB.123    
      TEMP(I)=TEMP(I)**G_OVER_LAPSE_R                                      GSS5F402.49     
*ENDIF                                                                     GSS5F402.50     
                                                                           GSS5F402.51     
      P_MSL(I)=PSTAR(I) * TEMP(I)                                          GSS5F402.52     
                                                                           GSS5F402.53     
      ENDDO                                                                GSS5F402.54     
                                                                           PMSL1A.105    
      RETURN                                                               PMSL1A.106    
      END                                                                  PMSL1A.107    
                                                                           PMSL1A.108    
*ENDIF                                                                     PMSL1A.109