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

      SUBROUTINE RSSQDP                                                    ,2RSSQDP1A.23     
     &                   (p_field,p_levels,row_length,                     RSSQDP1A.24     
     &                    pstar,                                           RSSQDP1A.25     
     &                    ak,bk,delta_ak,delta_bk,cos_p_latitude,          RSSQDP1A.26     
     &                    rs_squared_deltap,                               RSSQDP1A.27     
     &                    latitude_step_inverse)                           RSSQDP1A.28     
                                                                           RSSQDP1A.29     
      IMPLICIT NONE                                                        RSSQDP1A.30     
!                                                                          RSSQDP1A.31     
! Description: Calculates rs^2 * delta_pressure - mass field for the       RSSQDP1A.32     
!              the calculation of mass weighted fields in the routine      RSSQDP1A.33     
!              QT_POS.                                                     RSSQDP1A.34     
!                                                                          RSSQDP1A.35     
!                                                                          RSSQDP1A.36     
! Current Code Owner: I Edmond                                             RSSQDP1A.37     
!                                                                          RSSQDP1A.38     
! History:                                                                 RSSQDP1A.39     
! Version   Date     Comment                                               RSSQDP1A.40     
! -------   ----     -------                                               RSSQDP1A.41     
! 4.1       15/6/96   Original code. Ian Edmond                            RSSQDP1A.42     
!                                                                          RSSQDP1A.43     
! Code Description:                                                        RSSQDP1A.44     
!   Language: FORTRAN 77 + common extensions.                              RSSQDP1A.45     
!   This code is written to UMDP3 v6 programming standards.                RSSQDP1A.46     
!                                                                          RSSQDP1A.47     
! System component covered: <appropriate code>                             RSSQDP1A.48     
! System Task:              <appropriate code>                             RSSQDP1A.49     
!                                                                          RSSQDP1A.50     
! Declarations:                                                            RSSQDP1A.51     
!   These are of the form:-                                                RSSQDP1A.52     
!     INTEGER      ExampleVariable      !Description of variable           RSSQDP1A.53     
!                                                                          RSSQDP1A.54     
! 1.0 Subroutine arguments                                                 RSSQDP1A.55     
                                                                           RSSQDP1A.56     
!   1.1 Scalar arguments with intent(in):                                  RSSQDP1A.57     
      INTEGER                                                              RSSQDP1A.58     
     & p_field,      ! NUMBER OF PRESSURE POINTS.                          RSSQDP1A.59     
     & row_length,   ! NUMBER OF POINTS ON A ROW.                          RSSQDP1A.60     
     & p_levels      ! NUMBER OF MODEL LEVELS.                             RSSQDP1A.61     
                                                                           RSSQDP1A.62     
      REAL                                                                 RSSQDP1A.63     
     & cos_p_latitude(p_field)  ! HOLDS COSINES OF LATITUDE AT P POINTS    RSSQDP1A.64     
     &,latitude_step_inverse    ! 1./(LATITUDE STEP IN RADIANS)            RSSQDP1A.65     
     &,ak(p_levels)             ! A PART OF ETA CO-ORDINATE                RSSQDP1A.66     
     &,bk(p_levels)             ! B PART OF ETA CO-ORDINATE                RSSQDP1A.67     
     &,delta_ak(p_levels)       ! LAYER THICKNESS OF A PART OF ETA         RSSQDP1A.68     
     &,delta_bk(p_levels)       ! LAYER THICKNESS OF B PART OF ETA         RSSQDP1A.69     
     &,rs_squared_deltap(p_field,p_levels) ! SPACE USED TO PUT             RSSQDP1A.70     
     &                                     ! MASS FIELD IN.                RSSQDP1A.71     
                                                                           RSSQDP1A.72     
!   2.1 Array  arguments with intent(In):                                  RSSQDP1A.73     
      REAL                                                                 RSSQDP1A.74     
     & pstar(p_field)   ! ARRAY FOR SURFACE PRESSURE                       RSSQDP1A.75     
                                                                           RSSQDP1A.76     
! 3.0 Local parameters:                                                    RSSQDP1A.77     
      LOGICAL  llints  ! Arg passed to CALC_RS                             RSSQDP1A.78     
      PARAMETER (llints=.FALSE.)                                           RSSQDP1A.79     
                                                                           RSSQDP1A.80     
! 4.0 Local scalars:                                                       RSSQDP1A.81     
      INTEGER                                                              RSSQDP1A.82     
     & i,k,j                                                               RSSQDP1A.83     
                                                                           RSSQDP1A.84     
      REAL                                                                 RSSQDP1A.85     
     & polar_cosine                                                        RSSQDP1A.86     
                                                                           RSSQDP1A.87     
! 5.0 Local dynamic arrays:                                                RSSQDP1A.88     
      REAL                                                                 RSSQDP1A.89     
     & work1(p_field)                                                      RSSQDP1A.90     
                                                                           RSSQDP1A.91     
! Function & Subroutine calls:                                             RSSQDP1A.92     
      EXTERNAL CALC_RS                                                     RSSQDP1A.93     
                                                                           RSSQDP1A.94     
      polar_cosine = 0.125/latitude_step_inverse                           RSSQDP1A.95     
!- End of header                                                           RSSQDP1A.96     
!---------------------------------------------------------------------     RSSQDP1A.97     
!    SECTION 2.    Calculate rs squared and mass weighted theta on         RSSQDP1A.98     
!                  each row at each level.                                 RSSQDP1A.99     
!---------------------------------------------------------------------     RSSQDP1A.100    
                                                                           RSSQDP1A.101    
      !    Call CALC_RS to get rs for level 1.                             RSSQDP1A.102    
      ! RS is returned in rs_squared_deltap( ,1)                           RSSQDP1A.103    
      ! TS is returned in work1, rs at level K-1 is input in               RSSQDP1A.104    
      ! rs_squared_deltap( ,2) as at k-1= 0 the input is not used          RSSQDP1A.105    
      ! by CALC_RS.                                                        RSSQDP1A.106    
                                                                           RSSQDP1A.107    
      Call CALC_RS(pstar,ak,bk,work1,rs_squared_deltap(1,2),               RSSQDP1A.108    
     *               rs_squared_deltap(1,1),p_field,1,p_levels,llints)     RSSQDP1A.109    
                                                                           RSSQDP1A.110    
      Do k= 2,p_levels                                                     RSSQDP1A.111    
                                                                           RSSQDP1A.112    
      !    Call calc_rs to get rs for level k.                             RSSQDP1A.113    
      ! rs is returned in rs_squared_deltap(1,k)                           RSSQDP1A.114    
      ! ts is returned in work1, rs at level k-1 is input as               RSSQDP1A.115    
      ! rs_squared_deltap(k-1).                                            RSSQDP1A.116    
                                                                           RSSQDP1A.117    
        i=k                                                                RSSQDP1A.118    
        Call CALC_RS(pstar,ak,bk,work1,rs_squared_deltap(1,k-1),           RSSQDP1A.119    
     *               rs_squared_deltap(1,k),p_field,I,p_levels,llints)     RSSQDP1A.120    
                                                                           RSSQDP1A.121    
      End do                                                               RSSQDP1A.122    
                                                                           RSSQDP1A.123    
      ! Form rs squared * delta p * cosine of latitude and                 RSSQDP1A.124    
      ! zonal mean mass-weighted theta.                                    RSSQDP1A.125    
                                                                           RSSQDP1A.126    
      Do k=1,p_levels                                                      RSSQDP1A.127    
        Do i=row_length+1,p_field-row_length                               RSSQDP1A.128    
          rs_squared_deltap(i,k) = rs_squared_deltap(i,k)*                 RSSQDP1A.129    
     &                             rs_squared_deltap(i,k)*                 RSSQDP1A.130    
     &                             (delta_ak(k)+delta_bk(k)*pstar(I))      RSSQDP1A.131    
     &                             *cos_p_latitude(I)                      RSSQDP1A.132    
        End do                                                             RSSQDP1A.133    
      ! Set polar values.                                                  RSSQDP1A.134    
      ! The correct cosine value is delta_phi/8                            RSSQDP1A.135    
        Do I=1,row_length                                                  RSSQDP1A.136    
          rs_squared_deltap(i,k) = rs_squared_deltap(i,k)*                 RSSQDP1A.137    
     &                             rs_squared_deltap(i,k)*                 RSSQDP1A.138    
     &                             (delta_ak(k)+delta_bk(k)*pstar(I))      RSSQDP1A.139    
     &                             *polar_cosine                           RSSQDP1A.140    
          j=p_field-row_length+I                                           RSSQDP1A.141    
          rs_squared_deltap(j,k) = rs_squared_deltap(j,k)*                 RSSQDP1A.142    
     &                             rs_squared_deltap(j,k)*                 RSSQDP1A.143    
     &                             (delta_ak(k)+delta_bk(k)*pstar(j))      RSSQDP1A.144    
     &                             *polar_cosine                           RSSQDP1A.145    
        End do                                                             RSSQDP1A.146    
      End do                                                               RSSQDP1A.147    
                                                                           RSSQDP1A.148    
      RETURN                                                               RSSQDP1A.149    
      END                                                                  RSSQDP1A.150    
*ENDIF                                                                     RSSQDP1A.151