*IF DEF,A17_1A                                                             GRVSET1A.2      
C *****************************COPYRIGHT******************************     GRVSET1A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    GRVSET1A.4      
C                                                                          GRVSET1A.5      
C Use, duplication or disclosure of this code is subject to the            GRVSET1A.6      
C restrictions as set forth in the contract.                               GRVSET1A.7      
C                                                                          GRVSET1A.8      
C                Meteorological Office                                     GRVSET1A.9      
C                London Road                                               GRVSET1A.10     
C                BRACKNELL                                                 GRVSET1A.11     
C                Berkshire UK                                              GRVSET1A.12     
C                RG12 2SZ                                                  GRVSET1A.13     
C                                                                          GRVSET1A.14     
C If no contract has been raised with this copy of the code, the use,      GRVSET1A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      GRVSET1A.16     
C to do so must first be obtained in writing from the Head of Numerical    GRVSET1A.17     
C Modelling at the above address.                                          GRVSET1A.18     
C ******************************COPYRIGHT******************************    GRVSET1A.19     
!    Subroutine GRAVSETT ----------------------------------------------    GRVSET1A.20     
!                                                                          GRVSET1A.21     
! Purpose: To perform gravitational settlement of tracer particles         GRVSET1A.22     
!          down to the lowest layer of the model.                          GRVSET1A.23     
!          This version allows tracers to fall through 1 or 2 layers.      GRVSET1A.24     
!                                                                          GRVSET1A.25     
! Current owners of code:                 S Woodward, M Woodage            GRVSET1A.26     
!                                                                          GRVSET1A.27     
! History:                                                                 GRVSET1A.28     
! Version    Date     Comment                                              GRVSET1A.29     
! -------    ----     -------                                              GRVSET1A.30     
!   4.4    03/10/97   Original code        S Woodward, M Woodage           GRVSET1A.31     
!                                                                          GRVSET1A.32     
! Code description:                                                        GRVSET1A.33     
!  Language: FORTRAN77 + extensions                                        GRVSET1A.34     
!  Programming standard: UMDP 3 Vn 6                                       GRVSET1A.35     
!                                                                          GRVSET1A.36     
! System components covered:                                               GRVSET1A.37     
!                                                                          GRVSET1A.38     
! System task:                                                             GRVSET1A.39     
!                                                                          GRVSET1A.40     
!Documentation: Not yet available                                          GRVSET1A.41     
!                                                                          GRVSET1A.42     
!-----------------------------------------------------------------------   GRVSET1A.43     
!                                                                          GRVSET1A.44     

      SUBROUTINE GRAVSETT(                                                  2,1GRVSET1A.45     
     & PFIELD,NLEVS,TRACFLD,DIAM,RHOP,PSTAR,AK,BK,DELTA_AK,DELTA_BK,T,     GRVSET1A.46     
     & FIRST_POINT,LAST_POINT,DT,DRYDEP)                                   GRVSET1A.47     
!                                                                          GRVSET1A.48     
!                                                                          GRVSET1A.49     
      IMPLICIT NONE                                                        GRVSET1A.50     
!                                                                          GRVSET1A.51     
      INTEGER NLEVS              !IN number of model levels                GRVSET1A.52     
      INTEGER PFIELD             !IN number of grid points                 GRVSET1A.53     
      INTEGER FIRST_POINT        !IN first point for calcns to be done     GRVSET1A.54     
      INTEGER LAST_POINT         !IN last point for calcns to be done      GRVSET1A.55     
!                                                                          GRVSET1A.56     
      REAL DIAM                  !IN tracer particle diameter              GRVSET1A.57     
      REAL RHOP                  !IN tracer particle density               GRVSET1A.58     
      REAL PSTAR(PFIELD)         !IN Pstar                                 GRVSET1A.59     
      REAL AK(NLEVS)             !IN A vals on levs                        GRVSET1A.60     
      REAL BK(NLEVS)             !IN B vals on levs                        GRVSET1A.61     
      REAL DELTA_AK(NLEVS)       !IN A(lev+1/2) - A(lev-1/2)               GRVSET1A.62     
      REAL DELTA_BK(NLEVS)       !IN B(lev+1/2) - B(lev-1/2)               GRVSET1A.63     
      REAL T(PFIELD,NLEVS)       !IN temperature                           GRVSET1A.64     
      REAL DT                    !IN timestep s                            GRVSET1A.65     
!                                                                          GRVSET1A.66     
      REAL TRACFLD(PFIELD,NLEVS) !IN/OUT tracer field                      GRVSET1A.67     
!                                                                          GRVSET1A.68     
      REAL DRYDEP(PFIELD) !OUT deposition flux from layer2 (kg m-2 s-1)    GRVSET1A.69     
!                                                                          GRVSET1A.70     
                                                                           GRVSET1A.71     
! Include COMDECKS                                                         GRVSET1A.72     
!                                                                          GRVSET1A.73     
*IF DEF,MPP                                                                GRVSET1A.74     
! Parameters and Common blocks                                             GRVSET1A.75     
*CALL PARVARS                                                              GRVSET1A.76     
*ENDIF                                                                     GRVSET1A.77     
!                                                                          GRVSET1A.78     
*CALL C_R_CP                                                               GRVSET1A.79     
*CALL C_G                                                                  GRVSET1A.80     
*CALL C_SULCHM                                                             GRVSET1A.81     
!                                                                          GRVSET1A.82     
! External subroutines called                                              GRVSET1A.83     
      EXTERNAL VGRAV                                                       GRVSET1A.84     
!                                                                          GRVSET1A.85     
! Local variables                                                          GRVSET1A.86     
!                                                                          GRVSET1A.87     
      INTEGER K                  !LOC loop counter for levels              GRVSET1A.88     
      INTEGER J                  !LOC loop counter for points              GRVSET1A.89     
!                                                                          GRVSET1A.90     
      REAL P(PFIELD)             !LOC  Pressure                            GRVSET1A.91     
      REAL VRHOCDT(PFIELD)       !LOC  v*rho*tracer*deltat @lev            GRVSET1A.92     
      REAL RHOK2(PFIELD)         !LOC  rho(lev+2)                          GRVSET1A.93     
      REAL RHOK1(PFIELD)         !LOC  rho(lev+1)                          GRVSET1A.94     
      REAL RHOK(PFIELD)          !LOC  rho(lev)                            GRVSET1A.95     
      REAL DZK(PFIELD)           !LOC thickness of layer lev               GRVSET1A.96     
      REAL DZK1(PFIELD)          !LOC thickness of layer lev+1             GRVSET1A.97     
      REAL DZK2(PFIELD)          !LOC thickness of layer lev+2             GRVSET1A.98     
      REAL V(PFIELD,NLEVS) !LOC deposition velocity (vstokes corrected)    GRVSET1A.99     
      REAL MASSOUT2K2(PFIELD)    !LOC flux falling 2 levs from lev k+2     GRVSET1A.100    
      REAL MASSOUT1K2(PFIELD)    !LOC flux falling 1 levs from lev k+2     GRVSET1A.101    
      REAL MASSOUT2K1(PFIELD)    !LOC flux falling 2 levs from lev k+1     GRVSET1A.102    
      REAL MASSOUT1K1(PFIELD)    !LOC flux falling 1 levs from lev k+1     GRVSET1A.103    
      REAL MASSOUT2K(PFIELD)     !LOC flux falling 2 levs from lev k       GRVSET1A.104    
      REAL MASSOUT1K(PFIELD)     !LOC flux falling 1 levs from lev k       GRVSET1A.105    
      REAL DUMMY1(PFIELD,NLEVS)  !LOC                                      GRVSET1A.106    
      REAL DUMMY2(PFIELD,NLEVS)  !LOC                                      GRVSET1A.107    
!                                                                          GRVSET1A.108    
!                                                                          GRVSET1A.109    
! Calculate settlement velocity                                            GRVSET1A.110    
!                                                                          GRVSET1A.111    
      CALL VGRAV(PFIELD,NLEVS,DIAM,RHOP,PSTAR,AK,BK,T,V,DUMMY1,DUMMY2,     GRVSET1A.112    
     &           FIRST_POINT,LAST_POINT)                                   GRVSET1A.113    
!                                                                          GRVSET1A.114    
! Calculate new tracer mixing ratios                                       GRVSET1A.115    
!                                                                          GRVSET1A.116    
! Initialise deposition flux to zero                                       GRVSET1A.117    
      DO J = 1,PFIELD                                                      GRVSET1A.118    
        DRYDEP(J)=0.                                                       GRVSET1A.119    
      ENDDO                                                                GRVSET1A.120    
!                                                                          GRVSET1A.121    
! Level 1 (K at start of loop)                                             GRVSET1A.122    
!                                                                          GRVSET1A.123    
      DO J = FIRST_POINT,LAST_POINT                                        GRVSET1A.124    
        P(J)=AK(1)+BK(1)*PSTAR(J)                                          GRVSET1A.125    
        RHOK(J)=P(J)/(R*T(J,1))                                            GRVSET1A.126    
        DZK(J)=-(DELTA_AK(1)+DELTA_BK(1)*PSTAR(J))/(RHOK(J)*G)             GRVSET1A.127    
        MASSOUT2K(J)=0.                                                    GRVSET1A.128    
        MASSOUT1K(J)=0.                                                    GRVSET1A.129    
      ENDDO                !J                                              GRVSET1A.130    
!                                                                          GRVSET1A.131    
! Level 2 (K+1 at start of loop)                                           GRVSET1A.132    
!   NB  deposit tracer direct to ground from lev 2 if V high enough        GRVSET1A.133    
!                                                                          GRVSET1A.134    
      DO J = FIRST_POINT,LAST_POINT                                        GRVSET1A.135    
!                                                                          GRVSET1A.136    
        P(J)=AK(2)+BK(2)*PSTAR(J)                                          GRVSET1A.137    
        RHOK1(J)=P(J)/(R*T(J,2))                                           GRVSET1A.138    
        DZK1(J)=-(DELTA_AK(2)+DELTA_BK(2)*PSTAR(J))/(RHOK1(J)*G)           GRVSET1A.139    
!                                                                          GRVSET1A.140    
!   check for deposition :                                                 GRVSET1A.141    
        IF (V(J,2)*DT .GT. DZK(J)) THEN                                    GRVSET1A.142    
!       some tracer deposited onto ground                                  GRVSET1A.143    
!                                                                          GRVSET1A.144    
          IF ( V(J,2)*DT .GT. DZK1(J)+DZK(J) ) THEN                        GRVSET1A.145    
!         all deposited to ground                                          GRVSET1A.146    
            MASSOUT2K1(J)=RHOK1(J)*TRACFLD(J,2)*DZK1(J)                    GRVSET1A.147    
            MASSOUT1K1(J)=0.                                               GRVSET1A.148    
          ELSE IF ( V(J,2)*DT .GT. DZK1(J) ) THEN                          GRVSET1A.149    
!         some deposited to ground, some to layer 1                        GRVSET1A.150    
            MASSOUT2K1(J)=RHOK1(J)*TRACFLD(J,2)*(V(J,2)*DT-DZK(J))         GRVSET1A.151    
            MASSOUT1K1(J)=RHOK1(J)*TRACFLD(J,2)*DZK1(J)-MASSOUT2K1(J)      GRVSET1A.152    
          ELSE                                                             GRVSET1A.153    
!         some deposited to ground, some to layer1, some left in layer2    GRVSET1A.154    
            MASSOUT2K1(J)=RHOK1(J)*TRACFLD(J,2)*(V(J,2)*DT-DZK(J))         GRVSET1A.155    
            MASSOUT1K1(J)=RHOK1(J)*TRACFLD(J,2)*DZK(J)                     GRVSET1A.156    
          ENDIF                                                            GRVSET1A.157    
!                                                                          GRVSET1A.158    
          DRYDEP(J)=MASSOUT2K1(J)/DT                                       GRVSET1A.159    
!                                                                          GRVSET1A.160    
        ELSE                                                               GRVSET1A.161    
!       only falls into layer 1                                            GRVSET1A.162    
          MASSOUT2K1(J)=0.                                                 GRVSET1A.163    
          IF ( V(J,2)*DT .GT. DZK1(J)) THEN                                GRVSET1A.164    
!         all falls into layer 1                                           GRVSET1A.165    
            MASSOUT1K1(J)=RHOK1(J)*TRACFLD(J,2)*DZK1(J)                    GRVSET1A.166    
          ELSE                                                             GRVSET1A.167    
!         some to layer 1 , some left in layer2                            GRVSET1A.168    
            MASSOUT1K1(J)=RHOK1(J)*TRACFLD(J,2)*V(J,2)*DT                  GRVSET1A.169    
          ENDIF                                                            GRVSET1A.170    
!                                                                          GRVSET1A.171    
        ENDIF                                                              GRVSET1A.172    
!                                                                          GRVSET1A.173    
      ENDDO                 !END J LOOP                                    GRVSET1A.174    
!                                                                          GRVSET1A.175    
! Main loop through levels, from bottom up                                 GRVSET1A.176    
!                                                                          GRVSET1A.177    
      DO K = 1,NLEVS-2                                                     GRVSET1A.178    
!                                                                          GRVSET1A.179    
        DO J = FIRST_POINT,LAST_POINT                                      GRVSET1A.180    
!                                                                          GRVSET1A.181    
          P(J)=AK(K+2)+BK(K+2)*PSTAR(J)                                    GRVSET1A.182    
          RHOK2(J)=P(J)/(R*T(J,K+2))                                       GRVSET1A.183    
          DZK2(J)=-(DELTA_AK(K+2)+DELTA_BK(K+2)*PSTAR(J))/                 GRVSET1A.184    
     &             (RHOK2(J)*G)                                            GRVSET1A.185    
!                                                                          GRVSET1A.186    
!       Calculate mass of tracer falling between levels                    GRVSET1A.187    
!                                                                          GRVSET1A.188    
!        limit fall to 2 levs                                              GRVSET1A.189    
         IF (V(J,K+2)*DT.GT.(DZK1(J)+DZK(J)))                              GRVSET1A.190    
     &       V(J,K+2)=(DZK1(J)+DZK(J))/DT                                  GRVSET1A.191    
!                                                                          GRVSET1A.192    
!         check how far tracer falls:                                      GRVSET1A.193    
          IF ( V(J,K+2)*DT .GT. DZK1(J) ) THEN                             GRVSET1A.194    
!         it falls through more than 1 layer                               GRVSET1A.195    
             IF ( V(J,K+2)*DT .GT. (DZK2(J)+DZK1(J)) ) THEN                GRVSET1A.196    
!            all into layer k                                              GRVSET1A.197    
               MASSOUT2K2(J)=RHOK2(J)*TRACFLD(J,K+2)*DZK2(J)               GRVSET1A.198    
               MASSOUT1K2(J)=0.                                            GRVSET1A.199    
             ELSE IF ( V(J,K+2)*DT .GT. DZK2(J) ) THEN                     GRVSET1A.200    
!            some into k+1, some into k                                    GRVSET1A.201    
               MASSOUT2K2(J)=                                              GRVSET1A.202    
     &           RHOK2(J)*TRACFLD(J,K+2)*(V(J,K+2)*DT-DZK1(J))             GRVSET1A.203    
               MASSOUT1K2(J)=                                              GRVSET1A.204    
     &           RHOK2(J)*TRACFLD(J,K+2)*DZK2(J)-MASSOUT2K2(J)             GRVSET1A.205    
             ELSE                                                          GRVSET1A.206    
!            some left in k+2, some into k+1, some into k                  GRVSET1A.207    
               MASSOUT2K2(J)=                                              GRVSET1A.208    
     &           RHOK2(J)*TRACFLD(J,K+2)*(V(J,K+2)*DT-DZK1(J))             GRVSET1A.209    
               MASSOUT1K2(J)=RHOK2(J)*TRACFLD(J,K+2)*DZK1(J)               GRVSET1A.210    
             ENDIF                                                         GRVSET1A.211    
!                                                                          GRVSET1A.212    
           ELSE                                                            GRVSET1A.213    
!          falls no more than 1 layer                                      GRVSET1A.214    
             MASSOUT2K2(J)=0.                                              GRVSET1A.215    
             IF (V(J,K+2)*DT .GT. DZK2(J)) THEN                            GRVSET1A.216    
!            all falls into layer k+1                                      GRVSET1A.217    
               MASSOUT1K2(J)=RHOK2(J)*TRACFLD(J,K+2)*DZK2(J)               GRVSET1A.218    
             ELSE                                                          GRVSET1A.219    
!            some falls into k+1, some left in k+2                         GRVSET1A.220    
               MASSOUT1K2(J)=RHOK2(J)*TRACFLD(J,K+2)*V(J,K+2)*DT           GRVSET1A.221    
             ENDIF                                                         GRVSET1A.222    
!                                                                          GRVSET1A.223    
          ENDIF                                                            GRVSET1A.224    
!                                                                          GRVSET1A.225    
! Update tracer field                                                      GRVSET1A.226    
!                                                                          GRVSET1A.227    
          TRACFLD(J,K)=TRACFLD(J,K)+(MASSOUT2K2(J)+MASSOUT1K1(J)-          GRVSET1A.228    
     &                 MASSOUT2K(J)-MASSOUT1K(J))/(RHOK(J)*DZK(J))         GRVSET1A.229    
!                                                                          GRVSET1A.230    
! Put k+2 vals in k+1's & k+1's in k's                                     GRVSET1A.231    
          MASSOUT1K(J)=MASSOUT1K1(J)                                       GRVSET1A.232    
          MASSOUT1K1(J)=MASSOUT1K2(J)                                      GRVSET1A.233    
          MASSOUT2K(J)=MASSOUT2K1(J)                                       GRVSET1A.234    
          MASSOUT2K1(J)=MASSOUT2K2(J)                                      GRVSET1A.235    
          DZK(J)=DZK1(J)                                                   GRVSET1A.236    
          DZK1(J)=DZK2(J)                                                  GRVSET1A.237    
          RHOK(J)=RHOK1(J)                                                 GRVSET1A.238    
          RHOK1(J)=RHOK2(J)                                                GRVSET1A.239    
!                                                                          GRVSET1A.240    
        ENDDO            !END J LOOP                                       GRVSET1A.241    
!                                                                          GRVSET1A.242    
      ENDDO              !END K LOOP                                       GRVSET1A.243    
!                                                                          GRVSET1A.244    
! Top 2 levels                                                             GRVSET1A.245    
!                                                                          GRVSET1A.246    
      DO J=FIRST_POINT,LAST_POINT                                          GRVSET1A.247    
!                                                                          GRVSET1A.248    
         TRACFLD(J,NLEVS-1)=TRACFLD(J,NLEVS-1)+                            GRVSET1A.249    
     &    (MASSOUT1K1(J)-MASSOUT2K(J)-MASSOUT1K(J))/(RHOK(J)*DZK(J))       GRVSET1A.250    
         TRACFLD(J,NLEVS)=TRACFLD(J,NLEVS)-                                GRVSET1A.251    
     &   (MASSOUT2K1(J)+MASSOUT1K1(J))/                                    GRVSET1A.252    
     &                 (RHOK1(J)*DZK1(J))                                  GRVSET1A.253    
!                                                                          GRVSET1A.254    
      ENDDO        !J                                                      GRVSET1A.255    
!                                                                          GRVSET1A.256    
      RETURN                                                               GRVSET1A.257    
      END                                                                  GRVSET1A.258    
*ENDIF                                                                     GRVSET1A.259