*IF DEF,A04_2E                                                             ADM0F405.295    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.14997  
C                                                                          GTS2F400.14998  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.14999  
C restrictions as set forth in the contract.                               GTS2F400.15000  
C                                                                          GTS2F400.15001  
C                Meteorological Office                                     GTS2F400.15002  
C                London Road                                               GTS2F400.15003  
C                BRACKNELL                                                 GTS2F400.15004  
C                Berkshire UK                                              GTS2F400.15005  
C                RG12 2SZ                                                  GTS2F400.15006  
C                                                                          GTS2F400.15007  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15008  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15009  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15010  
C Modelling at the above address.                                          GTS2F400.15011  
C ******************************COPYRIGHT******************************    GTS2F400.15012  
C                                                                          GTS2F400.15013  
C*LL  SUBROUTINES LS_PPN and LS_PPNC------------------------------------   LSPPN2D.3      
!LL  Purpose:                                                              LSPPN2D.4      
!LL          LS_PPN and LS_PPNC:                                           LSPPN2D.5      
!LL           Calculate large-scale (dynamical) precipitation.             LSPPN2D.6      
!LL           LS_PPNC is the gather/scatter routine which then             LSPPN2D.7      
!LL           calls LSP_EVAP,LSP_FRMT,LSP_FORM.                            LSPPN2D.8      
!LL           Treatment of evaporation made implicit. C Wilson 18/09/90.   LSPPN2D.9      
!LL  Note: in all cases, level counters (incl subscripts) run from 1       LSPPN2D.10     
!LL        (lowest model layer) to Q_LEVELS (topmost "wet" model           LSPPN2D.11     
!LL        layer) - it is assumed that the bottom Q_LEVELS layers are      LSPPN2D.12     
!LL        the "wet" layers.                                               LSPPN2D.13     
!LL                                                                        LSPPN2D.14     
!LL  Put through fpp on Cray.  Activate *IF definition CRAY if running     LSPPN2D.15     
!LL  on the Cray.  Function FOCWWIL is now a COMDECK                       LSPPN2D.16     
!LL                (This function is called by LSP_FORM.)                  LSPPN2D.17     
!LL                                                                        LSPPN2D.18     
!LL  This routine is suitable for single-column use.                       LSPPN2D.19     
!LL                                                                        LSPPN2D.20     
!LL C.Wilson    <- programmer of some or all of previous code or changes   LSPPN2D.21     
!LL C.Senior    <- programmer of some or all of previous code or changes   LSPPN2D.22     
!LL                                                                        LSPPN2D.23     
!LL  Model            Modification history from model version 3.0:         LSPPN2D.24     
!LL version  Date                                                          LSPPN2D.25     
!LL 3.1      23/02/93 LS_PPN and LS_PPNC                                   LSPPN2D.26     
!LL                   Inclusion of F_DELTA_SNOW (fraction of snow from     LSPPN2D.27     
!LL                   ice falling as water) for use in LSP_FORM with       LSPPN2D.28     
!LL                   fully divergent ice fallout.                         LSPPN2D.29     
!LL                                             Ruth Carnell 26/02/93      LSPPN2D.30     
!LL                                                                        LSPPN2D.31     
!LL 3.4      15/08/94 LS_PPN and LS_PPNC                                   LSPPN2D.32     
!LL                   Include layer rain and snow deltas for aerosol.      LSPPN2D.33     
!LL                                                                        LSPPN2D.34     
!LL 3.4/4.0  21/11/94 LS_PPN and LS_PPNC                                   LSPPN2D.35     
!LL                   Inclusion of LS_GRID_QC and LS_BS moisture           LSPPN2D.36     
!LL                   distribution variables for use in LSP_FORM.          LSPPN2D.37     
!LL                                             A.Bushell 22/11/94         LSPPN2D.38     
!LL                                                                        LSPPN2D.39     
!LL 3.4/4.0  04/04/95 LS_PPN and LS_PPNC                                   LSPPN2D.40     
!LL                   Additional argument VFALL, the ice fall velocity     LSPPN2D.41     
!LL                   for use in LSP_FORM.                                 LSPPN2D.42     
!LL                                             A.Bushell 04/04/95         LSPPN2D.43     
!LL  4.1  06/06/96  Pass Sulphur Cycle tracers in for wet scavenging       AWO4F401.130    
!LL                 and output scavenged totals for stash.                 AWO4F401.131    
!LL                 Call SLSPSCV to do wet scavenging.     M Woodage       AWO4F401.132    
!LL   4.2    Oct. 96  T3E migration: *DEF CRAY removed, whenimd removed.   GSS2F402.259    
!LL                                    S.J.Swarbrick                       GSS2F402.260    
!  4.4   30/09/97    Prevent unnecessary calls to SLSPSCV for S Cycle      AWO1F404.80     
!                                                  (M Woodage)             AWO1F404.81     
!    4.5  02/04/98   Add NH3 to argument list and pass to LS_PPNC          AWO4F405.155    
!                     for scavenging (for S Cycle)                         AWO4F405.156    
!                                                       M Woodage          AWO4F405.157    
!    4.5  12/03/98   Add aged soot to argument list and pass to            AWO4F405.158    
!                    LS_PPNC for scavenging.        Luke Robinson.         AWO4F405.159    
!    4.5  01/05/98  Restrict murk aerosol calculations to aerosol          APC0F405.790    
!                   levels=boundary levels. P.Clark                        APC0F405.791    
!LL                                                                        LSPPN2D.44     
!LL  Programming standard: Unified Model Documentation Paper No 4,         LSPPN2D.45     
!LL                        Version 2, dated 18/1/90.                       LSPPN2D.46     
!LL                                                                        LSPPN2D.47     
!LL  Logical component covered: P26.                                       LSPPN2D.48     
!LL                                                                        LSPPN2D.49     
!LL  Project task:                                                         LSPPN2D.50     
!LL                                                                        LSPPN2D.51     
!LL  Documentation: UM Documentation Paper 26.                             LSPPN2D.52     
!LL                                                                        LSPPN2D.53     
C*L  Arguments:---------------------------------------------------------   LSPPN2D.54     

      SUBROUTINE LS_PPN(                                                    3,4LSPPN2D.55     
     &AK,BK,CF,DELTA_AK,DELTA_BK,PSTAR,TIMESTEP,BLAND,                     LSPPN2D.56     
     &CW_SEA,CW_LAND,LS_GRID_QC,LS_BS,Q_LEVELS,PFIELD,                     LSPPN2D.57     
     & POINTS,K1STPT,A_LEVELS,Q,QCF,QCL,T,                                 APC0F405.792    
     &SO2,L_SULPC_SO2,                                                     AWO4F401.134    
     &NH3,L_SULPC_NH3,                                                     AWO4F405.160    
     &SO4_AIT,SO4_ACC,SO4_DIS,                                             AWO4F401.135    
     & AGED_SOOT,                       !INOUT                             AWO4F405.307    
     & L_SOOT,                                                             AWO4F405.308    
     &AEROSOL,L_MURK,                                                      AWO4F401.136    
     &LSRAIN,LSSNOW,                                                       AWO4F401.137    
     &LSCAV_SO2,LSCAV_SO4AIT,LSCAV_SO4ACC,LSCAV_SO4DIS,                    AWO4F401.138    
     &LSCAV_NH3,                                                           AWO4F405.161    
     & LSCAV_AGEDSOOT,                  !INOUT                             AWO4F405.309    
     &ERROR                                                                LSPPN2D.59     
     &)                                                                    LSPPN2D.60     
      IMPLICIT NONE                                                        LSPPN2D.61     
      INTEGER                                                              LSPPN2D.62     
     & Q_LEVELS ! IN Number of "wet" levels in the model.                  LSPPN2D.63     
     &,PFIELD   ! IN Number of gridpoints in one field (at one level).     LSPPN2D.64     
     &,POINTS   ! IN Number of gridpoints being processed.                 LSPPN2D.65     
     &,K1STPT   ! IN First gridpoint processed within complete field.      LSPPN2D.66     
     &,A_LEVELS ! IN Number of aerosol levels                              APC0F405.793    
      REAL                                                                 LSPPN2D.67     
     & CF(PFIELD,Q_LEVELS) ! IN Cloud fraction.                            LSPPN2D.68     
     &,PSTAR(PFIELD)       ! IN Surface pressure (Pa).                     LSPPN2D.69     
     &,AK(Q_LEVELS)        ! IN Hybrid co-ordinate for centre of layer.    LSPPN2D.70     
     &,BK(Q_LEVELS)        ! IN Hybrid co-ordinate for centre of layer.    LSPPN2D.71     
     &,DELTA_AK(Q_LEVELS)  ! IN Change of hybrid co-ord across layer.      LSPPN2D.72     
!                               (Upper minus lower).                       LSPPN2D.73     
     &,DELTA_BK(Q_LEVELS)  ! IN Change of hybrid co-ord across layer.      LSPPN2D.74     
!                               (Upper minus lower).                       LSPPN2D.75     
     &,LS_GRID_QC(PFIELD,Q_LEVELS) !IN Large scale cloud Qc (kg/kg air).   LSPPN2D.76     
     &,LS_BS(PFIELD,Q_LEVELS)      !IN Large scale cloud bs value.         LSPPN2D.77     
      REAL TIMESTEP        ! IN Timestep (sec).                            LSPPN2D.78     
     &    ,CW_SEA          ! IN threshold cloud liquid water content       LSPPN2D.79     
!                               over sea for conversion to ppn             LSPPN2D.80     
!                               (kg water per m**3)                        LSPPN2D.81     
     &    ,CW_LAND         ! IN threshold cloud liquid water content       LSPPN2D.82     
!                               over land for conversion to ppn            LSPPN2D.83     
!                               (kg water per m**3)                        LSPPN2D.84     
      LOGICAL BLAND(PFIELD) ! IN Land/sea mask                             LSPPN2D.85     
     &,       L_MURK        ! IN Aerosol needs scavenging.                 LSPPN2D.86     
      LOGICAL L_SULPC_SO2  !IN Sulphur Cycle on, tracers scavenged if T    AWO4F401.139    
     &       ,L_SULPC_NH3              !IN indicates if NH3 present        AWO4F405.162    
!                                                                          AWO4F405.163    
     &,       L_SOOT        ! IN Soot needs scavenging                     AWO4F405.310    
!                                                                          AWO4F401.140    
      REAL                                                                 LSPPN2D.87     
     & Q(PFIELD,Q_LEVELS)   ! INOUT Specific humidity (kg water/kg air).   LSPPN2D.88     
     &,QCF(PFIELD,Q_LEVELS) ! INOUT Cloud ice (kg per kg air).             LSPPN2D.89     
     &,QCL(PFIELD,Q_LEVELS) ! INOUT Cloud liquid water (kg per kg air).    LSPPN2D.90     
     &,T(PFIELD,Q_LEVELS)   ! INOUT Temperature (K).                       LSPPN2D.91     
     &,AEROSOL(PFIELD,A_LEVELS)  ! INOUT Aerosol                           APC0F405.794    
      REAL               !INOUT, Sulphur Cycle tracers (mmr kg/kg)         AWO4F401.141    
     &    SO2(PFIELD,Q_LEVELS)                                             AWO4F401.142    
     &   ,NH3(PFIELD,Q_LEVELS)                                             AWO4F405.164    
     &   ,SO4_AIT(PFIELD,Q_LEVELS)                                         AWO4F401.143    
     &   ,SO4_ACC(PFIELD,Q_LEVELS)                                         AWO4F401.144    
     &   ,SO4_DIS(PFIELD,Q_LEVELS)                                         AWO4F401.145    
     &   ,AGED_SOOT(PFIELD,Q_LEVELS)                                       AWO4F405.311    
!                                                                          AWO4F401.146    
      REAL                                                                 LSPPN2D.93     
     & LSRAIN(PFIELD) ! OUT Surface rainfall rate (kg per sq m per s).     LSPPN2D.94     
     &,LSSNOW(PFIELD) ! OUT Surface snowfall rate (kg per sq m per s).     LSPPN2D.95     
      REAL               ! OUT column totals of S Cycle tracers scavngd    AWO4F401.147    
     &    LSCAV_SO2(PFIELD)                                                AWO4F401.148    
     &   ,LSCAV_NH3(PFIELD)                                                AWO4F405.165    
     &   ,LSCAV_SO4AIT(PFIELD)                                             AWO4F401.149    
     &   ,LSCAV_SO4ACC(PFIELD)                                             AWO4F401.150    
     &   ,LSCAV_SO4DIS(PFIELD)                                             AWO4F401.151    
     &   ,LSCAV_AGEDSOOT(PFIELD)                                           AWO4F405.312    
!                                                                          AWO4F401.152    
      INTEGER                                                              LSPPN2D.96     
     & ERROR          ! OUT Return code - 0 if OK,                         LSPPN2D.97     
!                                         1 if bad arguments.              LSPPN2D.98     
C*L  Workspace usage ---------------------------------------------------   LSPPN2D.99     
!  0 real,1 logical and 2 integer blocks are required, as follows :-       LSPPN2D.101    
      LOGICAL                                                              LSPPN2D.102    
     & H(PFIELD)      ! Used as "logical" in compression.                  LSPPN2D.103    
     & ,L_SCAVENGE  ! scavenge aerosol on level.                           APC0F405.795    
      INTEGER                                                              LSPPN2D.104    
     & IX(PFIELD)     ! Index for compress/expand.                         LSPPN2D.105    
      REAL F_DELTA_SNOW(PFIELD) ! snow fraction from ice falling           LSPPN2D.106    
!                                 as water                                 LSPPN2D.107    
      REAL VFALL(PFIELD)        ! snow fall velocity (m per s).            LSPPN2D.108    
!  External subroutines called -----------------------------------------   LSPPN2D.119    
      EXTERNAL LS_PPNC                                                     LSPPN2D.120    
C*----------------------------------------------------------------------   LSPPN2D.124    
!  Physical constants -------------------------------------------------    LSPPN2D.125    
      REAL CFMIN                                                           LSPPN2D.126    
      PARAMETER (                                                          LSPPN2D.127    
     & CFMIN=1.0E-3        ! Used for LS_PPNC  compress.                   LSPPN2D.128    
     &)                                                                    LSPPN2D.129    
!  Define local variables ----------------------------------------------   LSPPN2D.130    
      INTEGER I,K     ! Loop counters: I - horizontal field index;         LSPPN2D.131    
!                                      K - vertical level index.           LSPPN2D.132    
     &,N              ! "nval" for WHEN routine.                           LSPPN2D.133    
!                                                                          LSPPN2D.134    
      ERROR=0                                                              LSPPN2D.135    
      IF((K1STPT+POINTS-1).GT.PFIELD)THEN                                  LSPPN2D.136    
        ERROR=1                                                            LSPPN2D.137    
        GOTO20                                                             LSPPN2D.138    
      ENDIF                                                                LSPPN2D.139    
!-----------------------------------------------------------------------   LSPPN2D.140    
!L Internal structure.                                                     LSPPN2D.141    
!L 1. Initialise rain and snow to zero.                                    LSPPN2D.142    
!   Initialise scavenged amounts of S Cycle tracers to 0 for full field    AWO4F401.153    
!-----------------------------------------------------------------------   LSPPN2D.143    
      DO I=K1STPT,K1STPT+POINTS-1                                          LSPPN2D.144    
        LSRAIN(I)=0.0                                                      LSPPN2D.145    
        LSSNOW(I)=0.0                                                      LSPPN2D.146    
        F_DELTA_SNOW(I)=0.0                                                LSPPN2D.147    
        VFALL(I)=0.0                                                       LSPPN2D.148    
      END DO ! Loop over points                                            LSPPN2D.149    
!                                                                          LSPPN2D.150    
       DO I=1,PFIELD                                                       AWO4F401.154    
        LSCAV_SO2(I)=0.0                                                   AWO4F401.155    
        LSCAV_NH3(I)=0.0                                                   AWO4F405.166    
        LSCAV_SO4AIT(I)=0.0                                                AWO4F401.156    
        LSCAV_SO4ACC(I)=0.0                                                AWO4F401.157    
        LSCAV_SO4DIS(I)=0.0                                                AWO4F401.158    
        LSCAV_AGEDSOOT(I)=0.0                                              AWO4F405.313    
       END DO                                                              AWO4F401.159    
!                                                                          AWO4F401.160    
!-----------------------------------------------------------------------   LSPPN2D.151    
!L 2. Loop round levels from top down (counting bottom level as level 1,   LSPPN2D.152    
!L    as is standard in the Unified model).                                LSPPN2D.153    
!-----------------------------------------------------------------------   LSPPN2D.154    
!                                                                          LSPPN2D.155    
      DO K=Q_LEVELS,1,-1                                                   LSPPN2D.156    
!-----------------------------------------------------------------------   LSPPN2D.157    
!L 2.5 Form INDEX IX to gather/scatter variables in LS_PPNC                LSPPN2D.158    
!-----------------------------------------------------------------------   LSPPN2D.159    
!                                                                          LSPPN2D.160    
!  Set index where cloud fraction > CFMIN or where non-zero pptn           LSPPN2D.161    
!  Note: whenimd is functionally equivalent to WHENILE (but autotasks).    LSPPN2D.162    
!                                                                          LSPPN2D.163    
        N=0                                                                LSPPN2D.171    
        DO I=K1STPT,K1STPT+POINTS-1                                        LSPPN2D.172    
          IF (CF(I,K).GT.CFMIN .OR. (LSRAIN(I)+LSSNOW(I)).GT.0.0) THEN     LSPPN2D.173    
            N=N+1                                                          LSPPN2D.174    
            IX(N)=I - K1STPT + 1                                           LSPPN2D.175    
          ENDIF                                                            LSPPN2D.176    
        END DO ! Loop over points                                          LSPPN2D.177    
!                                                                          LSPPN2D.179    
        L_SCAVENGE = L_MURK .AND. (K.LE.A_LEVELS)                          APC0F405.796    
        IF(N.GT.0)THEN                                                     LSPPN2D.180    
                                                                           LSPPN2D.181    
          CALL LS_PPNC(IX,N,TIMESTEP,POINTS,PSTAR(K1STPT),                 LSPPN2D.182    
     &                 LSRAIN(K1STPT),LSSNOW(K1STPT),CF(K1STPT,K),         LSPPN2D.183    
     &                 QCF(K1STPT,K),QCL(K1STPT,K),T(K1STPT,K),            LSPPN2D.184    
     &           SO2(K1STPT,K),L_SULPC_SO2,                                AWO4F401.161    
     &           NH3(K1STPT,K),L_SULPC_NH3,                                AWO4F405.167    
     &           SO4_AIT(K1STPT,K),SO4_ACC(K1STPT,K),SO4_DIS(K1STPT,K),    AWO4F401.162    
     &           AGED_SOOT(K1STPT,K), L_SOOT,                              AWO4F405.314    
     &                 AEROSOL(K1STPT,MIN(K,A_LEVELS)),L_SCAVENGE,         APC0F405.797    
     &           LSCAV_NH3(K1STPT),                                        APC0F405.798    
     &           LSCAV_SO2(K1STPT),LSCAV_SO4AIT(K1STPT),                   AWO4F401.163    
     &           LSCAV_SO4ACC(K1STPT),LSCAV_SO4DIS(K1STPT),                AWO4F401.164    
     &           LSCAV_AGEDSOOT(K1STPT),                                   AWO4F405.315    
     &                 Q(K1STPT,K),AK(K),BK(K),DELTA_AK(K),DELTA_BK(K),    LSPPN2D.186    
     &                 F_DELTA_SNOW(K1STPT),BLAND(K1STPT),CW_SEA,          LSPPN2D.187    
     &                 CW_LAND,LS_GRID_QC(K1STPT,K),LS_BS(K1STPT,K),       LSPPN2D.188    
     &                 VFALL(K1STPT))                                      LSPPN2D.189    
        ENDIF                                                              LSPPN2D.190    
!                                                                          LSPPN2D.191    
      END DO ! Loop over K                                                 LSPPN2D.192    
   20 CONTINUE                                                             LSPPN2D.193    
      RETURN                                                               LSPPN2D.194    
      END                                                                  LSPPN2D.195    
C*LL  SUBROUTINE LS_PPNC------------------------------------------------   LSPPN2D.196    
C*L  Arguments:---------------------------------------------------------   LSPPN2D.197    

      SUBROUTINE LS_PPNC(                                                   3,22LSPPN2D.198    
     & IX,N,TIMESTEP,POINTS,PSTAR,LSRAIN,LSSNOW                            LSPPN2D.199    
     &,CF,QCF,QCL,T                                                        AWO4F401.165    
     &,SO2,L_SULPC_SO2                                                     AWO4F401.166    
     &,NH3,L_SULPC_NH3                                                     AWO4F405.168    
     &,SO4_AIT,SO4_ACC,SO4_DIS                                             AWO4F401.167    
     &,AGED_SOOT, L_SOOT                                                   AWO4F405.316    
     &,AEROSOL,L_MURK                                                      AWO4F401.168    
     &,LSCAV_NH3                                                           AWO4F405.169    
     &,LSCAV_SO2,LSCAV_SO4AIT,LSCAV_SO4ACC,LSCAV_SO4DIS                    AWO4F405.317    
     &,LSCAV_AGEDSOOT,Q                                                    AWO4F405.318    
     &,AK,BK,DELTA_AK,DELTA_BK                                             LSPPN2D.201    
     &,F_DELTA_SNOW,BLAND,CW_SEA,CW_LAND,LSC_QC,LSC_BS,VFALL               LSPPN2D.202    
     &)                                                                    LSPPN2D.203    
      IMPLICIT NONE                                                        LSPPN2D.204    
      INTEGER                                                              LSPPN2D.205    
     & N        ! IN Number of points where pptn non-zero from above       LSPPN2D.206    
!                    or where CF>CFMIN                                     LSPPN2D.207    
     &,IX(N)    ! IN gather/scatter index                                  LSPPN2D.208    
     &,POINTS   ! IN Number of gridpoints being processed.                 LSPPN2D.209    
      REAL                                                                 LSPPN2D.210    
     & PSTAR(POINTS)  ! IN Surface pressure (Pa).                          LSPPN2D.211    
     &,CF(POINTS)     ! IN Cloud fraction.                                 LSPPN2D.212    
     &,AK             ! IN Hybrid co-ordinate for centre of layer.         LSPPN2D.213    
     &,BK             ! IN Hybrid co-ordinate for centre of layer.         LSPPN2D.214    
     &,DELTA_AK       ! IN Change of hybrid co-ord across layer.           LSPPN2D.215    
!                          (Upper minus lower).                            LSPPN2D.216    
     &,DELTA_BK       ! IN Change of hybrid co-ord across layer.           LSPPN2D.217    
!                          (Upper minus lower).                            LSPPN2D.218    
     &,LSC_QC(POINTS) ! IN Large scale cloud Qc (kg/kg air).               LSPPN2D.219    
     &,LSC_BS(POINTS) ! IN Large scale cloud bs, moisture fluctuation.     LSPPN2D.220    
     &,TIMESTEP       ! IN Timestep (sec).                                 LSPPN2D.221    
     &,CW_SEA         ! IN threshold cloud liquid water content over sea   LSPPN2D.222    
!                          for conversion to ppn (kg water per m**3).      LSPPN2D.223    
     &,CW_LAND        ! IN threshold cloud liq. water content over land    LSPPN2D.224    
!                          for conversion to ppn (kg water per m**3).      LSPPN2D.225    
      LOGICAL BLAND(POINTS) ! IN Land/sea mask                             LSPPN2D.226    
     &,L_MURK         ! IN Aerosol needs scavenging.                       LSPPN2D.227    
      LOGICAL L_SULPC_SO2     !IN Sulphur Cycle on, tracers scavngd if T   AWO4F401.170    
     &       ,L_SULPC_NH3          !IN indicates if NH3 present            AWO4F405.170    
!                                                                          AWO4F405.171    
     &,       L_SOOT        ! IN Soot needs scavenging                     AWO4F405.319    
!                                                                          AWO4F401.171    
      REAL                                                                 LSPPN2D.228    
     & Q(POINTS)            ! INOUT Specific humidity (kg water/kg air).   LSPPN2D.229    
     &,QCF(POINTS)          ! INOUT Cloud ice (kg per kg air).             LSPPN2D.230    
     &,QCL(POINTS)          ! INOUT Cloud liquid water (kg per kg air).    LSPPN2D.231    
     &,T(POINTS)            ! INOUT Temperature (K).                       LSPPN2D.232    
     &,AEROSOL(POINTS)      ! INOUT Aerosol (K).                           LSPPN2D.233    
     &,LSRAIN(POINTS) !INOUT Surface rainfall rate (kg per sq m per s).    LSPPN2D.234    
     &,LSSNOW(POINTS) !INOUT Surface snowfall rate (kg per sq m per s).    LSPPN2D.235    
     &,F_DELTA_SNOW(POINTS) ! INOUT snow fraction from ice falling as      LSPPN2D.236    
!                                   water.                                 LSPPN2D.237    
     &,VFALL(POINTS)        ! INOUT fall velocity of ice (m per s).        LSPPN2D.238    
      REAL                    !INOUT S Cycle tracers & scavngd amounts     AWO4F401.172    
     &    SO2(POINTS)                                                      AWO4F401.173    
     &   ,NH3(POINTS)                                                      AWO4F405.172    
     &   ,SO4_AIT(POINTS)                                                  AWO4F401.174    
     &   ,SO4_ACC(POINTS)                                                  AWO4F401.175    
     &   ,SO4_DIS(POINTS)                                                  AWO4F401.176    
     &   ,LSCAV_SO2(POINTS)                                                AWO4F401.177    
     &   ,LSCAV_NH3(POINTS)                                                AWO4F405.173    
     &   ,LSCAV_SO4AIT(POINTS)                                             AWO4F401.178    
     &   ,LSCAV_SO4ACC(POINTS)                                             AWO4F401.179    
     &   ,LSCAV_SO4DIS(POINTS)                                             AWO4F401.180    
     &   ,AGED_SOOT(POINTS)                                                AWO4F405.320    
     &   ,LSCAV_AGEDSOOT(POINTS)                                           AWO4F405.321    
C*L  Workspace usage ---------------------------------------------------   LSPPN2D.239    
!  14 real,1 logical and 0 integer blocks are required, as follows :-      LSPPN2D.241    
      REAL                                                                 LSPPN2D.242    
     & PSTAR_C(N)        ! gathered Surface pressure (Pa).                 LSPPN2D.243    
     &,CF_C(N)           ! gathered Cloud fraction.                        LSPPN2D.244    
     &,Q_C(N)            ! gathered Specific humidity (kg water/kg air).   LSPPN2D.245    
     &,QCF_C(N)          ! gathered Cloud ice (kg per kg air).             LSPPN2D.246    
     &,QCL_C(N)          ! gathered Cloud liquid water (kg per kg air).    LSPPN2D.247    
     &,T_C(N)            ! gathered Temperature (K).                       LSPPN2D.248    
     &,AERO_C(N)         ! gathered Aerosol.                               LSPPN2D.249    
     &,LSRAIN_C(N) !gathered Surface rainfall rate (kg per sq m per s).    LSPPN2D.250    
     &,LSSNOW_C(N) !gathered Surface snowfall rate (kg per sq m per s).    LSPPN2D.251    
     &,F_DELTA_SNOW_C(N) ! gathered fraction of snow                       LSPPN2D.252    
     &,LSC_QC_C(N)       ! gathered Large scale cloud Qc (kg per kg air)   LSPPN2D.253    
     &,LSC_BS_C(N)       ! gathered Large scale cloud bs.                  LSPPN2D.254    
     &,VFALL_C(N)        ! gathered fall velocity (m per s).               LSPPN2D.255    
      REAL                     ! gathered S Cycle tracer arrays            AWO4F401.181    
     &    SO2_C(N)                                                         AWO4F401.182    
     &   ,NH3_C(N)                                                         AWO4F405.174    
     &   ,SO4_AIT_C(N)                                                     AWO4F401.183    
     &   ,SO4_ACC_C(N)                                                     AWO4F401.184    
     &   ,SO4_DIS_C(N)                                                     AWO4F401.185    
     &   ,LSCAV_SO2_C(N)                                                   AWO4F401.186    
     &   ,LSCAV_NH3_C(N)                                                   AWO4F405.175    
     &   ,LSCAV_SO4AIT_C(N)                                                AWO4F401.187    
     &   ,LSCAV_SO4ACC_C(N)                                                AWO4F401.188    
     &   ,LSCAV_SO4DIS_C(N)                                                AWO4F401.189    
     &   ,AGED_SOOT_C(N)                                                   AWO4F405.322    
     &   ,LSCAV_AGEDSOOT_C(N)                                              AWO4F405.323    
!                                                                          AWO4F401.190    
      REAL                                                                 LSPPN2D.256    
     & RHODZ(N)       ! WORK Used for air mass p.u.a. in successive        LSPPN2D.257    
!                            layers.                                       LSPPN2D.258    
     &,P(N)           ! WORK Used for pressure at successive levels.       LSPPN2D.259    
      LOGICAL BLAND_C(N)          ! gathered land/sea mask                 LSPPN2D.260    
!                                                                          AWO4F401.201    
! Call comdeck containing ls ppn scavenging coeffs for Sulphur Cycle       AWO4F401.202    
*CALL C_SULLSP                                                             AWO4F401.203    
! Call comdeck containing constants for soot scavenging.                   AWO4F405.324    
*CALL C_ST_LSP                                                             AWO4F405.325    
!                                                                          AWO4F401.204    
!  External subroutines called -----------------------------------------   LSPPN2D.285    
      EXTERNAL LSP_EVAP,LSP_FORM,LSP_FRMT,LSP_SCAV                         LSPPN2D.286    
     &        ,SLSPSCV                                                     AWO4F401.205    
C*----------------------------------------------------------------------   LSPPN2D.287    
!  Physical constants -------------------------------------------------    LSPPN2D.288    
*CALL C_G                                                                  LSPPN2D.289    
      REAL P1UPONG                                                         LSPPN2D.290    
      PARAMETER (                                                          LSPPN2D.291    
     & P1UPONG=1./G        ! One upon g (sq seconds per m).                LSPPN2D.292    
     &)                                                                    LSPPN2D.293    
!  Define local variables ----------------------------------------------   LSPPN2D.294    
      INTEGER I       ! Loop counters: I - horizontal field index;         LSPPN2D.295    
!                                                                          LSPPN2D.296    
!-----------------------------------------------------------------------   LSPPN2D.297    
!L Internal structure.                                                     LSPPN2D.298    
!L 1. gather variables using index                                         LSPPN2D.299    
!-----------------------------------------------------------------------   LSPPN2D.300    
      DO I=1,N                                                             LSPPN2D.301    
        LSRAIN_C(I)=LSRAIN(IX(I))                                          LSPPN2D.302    
        LSSNOW_C(I)=LSSNOW(IX(I))                                          LSPPN2D.303    
        PSTAR_C(I) =PSTAR(IX(I))                                           LSPPN2D.304    
        BLAND_C(I) =BLAND(IX(I))                                           LSPPN2D.305    
        CF_C(I)=CF(IX(I))                                                  LSPPN2D.306    
        LSC_QC_C(I)=LSC_QC(IX(I))                                          LSPPN2D.307    
        LSC_BS_C(I)=LSC_BS(IX(I))                                          LSPPN2D.308    
        QCF_C(I)=QCF(IX(I))                                                LSPPN2D.309    
        QCL_C(I)=QCL(IX(I))                                                LSPPN2D.310    
        Q_C(I)=Q(IX(I))                                                    LSPPN2D.311    
        T_C(I)=T(IX(I))                                                    LSPPN2D.312    
        IF (L_MURK) AERO_C(I)=AEROSOL(IX(I))                               LSPPN2D.313    
        F_DELTA_SNOW_C(I)=F_DELTA_SNOW(IX(I))                              LSPPN2D.314    
        VFALL_C(I)=VFALL(IX(I))                                            LSPPN2D.315    
      END DO ! Loop over points                                            LSPPN2D.316    
!                                                                          AWO4F401.206    
      IF (L_SULPC_SO2) THEN        ! gather S Cycle tracers                AWO4F401.207    
        DO I=1,N                                                           AWO4F401.208    
          SO2_C(I)=SO2(IX(I))                                              AWO4F401.209    
          SO4_AIT_C(I)=SO4_AIT(IX(I))                                      AWO4F401.210    
          SO4_ACC_C(I)=SO4_ACC(IX(I))                                      AWO4F401.211    
          SO4_DIS_C(I)=SO4_DIS(IX(I))                                      AWO4F401.212    
          LSCAV_SO2_C(I)=LSCAV_SO2(IX(I))                                  AWO4F401.213    
          LSCAV_SO4AIT_C(I)=LSCAV_SO4AIT(IX(I))                            AWO4F401.214    
          LSCAV_SO4ACC_C(I)=LSCAV_SO4ACC(IX(I))                            AWO4F401.215    
          LSCAV_SO4DIS_C(I)=LSCAV_SO4DIS(IX(I))                            AWO4F401.216    
        END DO                                                             AWO4F401.217    
!                                                                          AWO4F405.176    
        IF (L_SULPC_NH3) THEN                                              AWO4F405.177    
          DO I=1,N                                                         AWO4F405.178    
          NH3_C(I)=NH3(IX(I))                                              AWO4F405.179    
          LSCAV_NH3_C(I)=LSCAV_NH3(IX(I))                                  AWO4F405.180    
          END DO                                                           AWO4F405.181    
        END IF                                                             AWO4F405.182    
!                                                                          AWO4F405.183    
      END IF                                                               AWO4F401.218    
      IF (L_SOOT) THEN                                                     AWO4F405.326    
        DO I=1,N                                                           AWO4F405.327    
          AGED_SOOT_C(I)=AGED_SOOT(IX(I))                                  AWO4F405.328    
          LSCAV_AGEDSOOT_C(I)=LSCAV_AGEDSOOT(IX(I))                        AWO4F405.329    
        END DO                                                             AWO4F405.330    
      END IF                                                               AWO4F405.331    
!                                                                          AWO4F401.219    
!                                                                          LSPPN2D.317    
!-----------------------------------------------------------------------   LSPPN2D.318    
!L 2  Calculate pressure at current level, and air mass p.u.a. of          LSPPN2D.319    
!L    current layer.                                                       LSPPN2D.320    
!     (Negative in RHODZ formula takes account of sign of DELTAs.)         LSPPN2D.321    
!-----------------------------------------------------------------------   LSPPN2D.322    
      DO I=1,N                                                             LSPPN2D.323    
        P(I)=AK+PSTAR_C(I)*BK                                              LSPPN2D.324    
        RHODZ(I)=-P1UPONG*(DELTA_AK+PSTAR_C(I)*DELTA_BK)                   LSPPN2D.325    
      END DO ! Loop over points                                            LSPPN2D.326    
!                                                                          LSPPN2D.327    
!-----------------------------------------------------------------------   LSPPN2D.328    
!L 3 If there is precipitation falling from above, then :-                 LSPPN2D.329    
!-----------------------------------------------------------------------   LSPPN2D.330    
!                                                                          LSPPN2D.331    
!L 3.1 Evaporate from precipitation, and calculate the effect on the       LSPPN2D.332    
!L     temperature and specific humidity.  Do this by calling LSP_EVAP.    LSPPN2D.333    
!                                                                          LSPPN2D.334    
      CALL LSP_EVAP(P,RHODZ,TIMESTEP,N,Q_C,LSRAIN_C,LSSNOW_C,T_C)          LSPPN2D.335    
!                                                                          LSPPN2D.336    
!L 3.2 Change phase of precipitation where necessary, and calculate        LSPPN2D.337    
!L     the effect on the temperature and specific humidity.  Also set      LSPPN2D.338    
!L     rain/snow indicator (after any incrementing of the temperature).    LSPPN2D.339    
!L     All this is done by calling LSP_FRMT.                               LSPPN2D.340    
!                                                                          LSPPN2D.341    
      CALL LSP_FRMT(RHODZ,TIMESTEP,N,QCF_C,QCL_C,LSRAIN_C,LSSNOW_C,T_C)    LSPPN2D.342    
!-----------------------------------------------------------------------   LSPPN2D.343    
!L 3.3 Form (or augment) precipitation at the expense of cloud water.      LSPPN2D.344    
!L     Do this by calling LSP_FORM.                                        LSPPN2D.345    
!-----------------------------------------------------------------------   LSPPN2D.346    
!                                                                          LSPPN2D.347    
      CALL LSP_FORM(CF_C,P,Q_C,RHODZ,T_C,TIMESTEP,N,QCF_C,QCL_C,           LSPPN2D.348    
     &              LSRAIN_C,LSSNOW_C,F_DELTA_SNOW_C,BLAND_C,              LSPPN2D.349    
     &              CW_SEA,CW_LAND,LSC_QC_C,LSC_BS_C,VFALL_C)              LSPPN2D.350    
!                                                                          LSPPN2D.351    
!-----------------------------------------------------------------------   LSPPN2D.352    
!L 3.4 Lose aerosol by scavenging: call LSP_SCAV                           LSPPN2D.353    
!-----------------------------------------------------------------------   LSPPN2D.354    
!                                                                          LSPPN2D.355    
      IF (L_MURK)  THEN                                                    LSPPN2D.356    
        CALL LSP_SCAV(TIMESTEP,N,LSRAIN_C,LSSNOW_C,AERO_C)                 LSPPN2D.357    
      ENDIF                                                                LSPPN2D.358    
!                                                                          LSPPN2D.359    
!L  3.4.1 Scavenge Sulphur Cycle tracers: call SLSPSCV                     AWO4F401.220    
!                                                                          AWO4F401.221    
       IF (L_SULPC_SO2) THEN                                               AWO4F401.222    
!                                                                          AWO4F401.223    
!  scavenge SO2                                                            AWO4F401.224    
        IF (KLRAIN_SO2.GT.0.0 .OR. KLSNOW_SO2.GT.0.0) THEN                 AWO1F404.82     
         CALL SLSPSCV(SO2_C,LSCAV_SO2_C,                                   AWO4F401.225    
     &                KLRAIN_SO2,KLSNOW_SO2,                               AWO4F401.226    
     &                RHODZ,TIMESTEP,N,LSRAIN_C,LSSNOW_C)                  AWO4F401.227    
        END IF                                                             AWO1F404.83     
!                                                                          AWO4F401.228    
!  scavenge NH3 if present                                                 AWO4F405.184    
        IF (L_SULPC_NH3) THEN                                              AWO4F405.185    
!                                                                          AWO4F405.186    
          IF (KLRAIN_NH3.GT.0.0 .OR. KLSNOW_NH3.GT.0.0) THEN               AWO4F405.187    
          CALL SLSPSCV(NH3_C,LSCAV_NH3_C,                                  AWO4F405.188    
     &                KLRAIN_NH3,KLSNOW_NH3,                               AWO4F405.189    
     &                RHODZ,TIMESTEP,N,LSRAIN_C,LSSNOW_C)                  AWO4F405.190    
          END IF                                                           AWO4F405.191    
!                                                                          AWO4F405.192    
        END IF          ! end L_SULPC_NH3 condition                        AWO4F405.193    
!  scavenge SO4_AIT                                                        AWO4F401.229    
        IF (KLRAIN_SO4AIT.GT.0.0 .OR. KLSNOW_SO4AIT.GT.0.0) THEN           AWO1F404.84     
         CALL SLSPSCV(SO4_AIT_C,LSCAV_SO4AIT_C,                            AWO4F401.230    
     &                KLRAIN_SO4AIT,KLSNOW_SO4AIT,                         AWO4F401.231    
     &                RHODZ,TIMESTEP,N,LSRAIN_C,LSSNOW_C)                  AWO4F401.232    
        END IF                                                             AWO1F404.85     
!                                                                          AWO4F401.233    
!  scavenge SO4_ACC                                                        AWO4F401.234    
        IF (KLRAIN_SO4ACC.GT.0.0 .OR. KLSNOW_SO4ACC.GT.0.0) THEN           AWO1F404.86     
         CALL SLSPSCV(SO4_ACC_C,LSCAV_SO4ACC_C,                            AWO4F401.235    
     &                KLRAIN_SO4ACC,KLSNOW_SO4ACC,                         AWO4F401.236    
     &                RHODZ,TIMESTEP,N,LSRAIN_C,LSSNOW_C)                  AWO4F401.237    
        END IF                                                             AWO1F404.87     
!                                                                          AWO4F401.238    
!  scavenge SO4_DIS                                                        AWO4F401.239    
        IF (KLRAIN_SO4DIS.GT.0.0 .OR. KLSNOW_SO4DIS.GT.0.0) THEN           AWO1F404.88     
         CALL SLSPSCV(SO4_DIS_C,LSCAV_SO4DIS_C,                            AWO4F401.240    
     &                KLRAIN_SO4DIS,KLSNOW_SO4DIS,                         AWO4F401.241    
     &                RHODZ,TIMESTEP,N,LSRAIN_C,LSSNOW_C)                  AWO4F401.242    
        END IF                                                             AWO1F404.89     
!                                                                          AWO4F401.243    
       END IF                                                              AWO4F401.244    
!                                                                          AWO4F401.245    
!                                                                          AWO4F405.332    
! Scavenging of aged soot by calling SLSPSCV:                              AWO4F405.333    
      IF ( (KLRAIN_AGEDSOOT.GT.0.0 .OR. KLSNOW_AGEDSOOT.GT.0.0)            AWO4F405.334    
     &     .AND. (L_SOOT) ) THEN                                           AWO4F405.335    
!  Scavenge soot.                                                          AWO4F405.336    
         CALL SLSPSCV(AGED_SOOT_C,LSCAV_AGEDSOOT_C,                        AWO4F405.337    
     &                KLRAIN_AGEDSOOT,KLSNOW_AGEDSOOT,                     AWO4F405.338    
     &                RHODZ,TIMESTEP,N,LSRAIN_C,LSSNOW_C)                  AWO4F405.339    
      ENDIF                                                                AWO4F405.340    
!                                                                          AWO4F405.341    
!-----------------------------------------------------------------------   LSPPN2D.360    
!L 4  Scatter back arrays which will have been changed.                    LSPPN2D.361    
!L                                                                         LSPPN2D.362    
!-----------------------------------------------------------------------   LSPPN2D.363    
!                                                                          LSPPN2D.364    
CDIR$ IVDEP                                                                LSPPN2D.365    
! Fujitsu vectorization directive                                          GRB0F405.427    
!OCL NOVREC                                                                GRB0F405.428    
      DO I=1,N                                                             LSPPN2D.366    
        T(IX(I))=T_C(I)                                                    LSPPN2D.367    
        Q(IX(I))=Q_C(I)                                                    LSPPN2D.368    
        QCF(IX(I))=QCF_C(I)                                                LSPPN2D.369    
        QCL(IX(I))=QCL_C(I)                                                LSPPN2D.370    
        IF (L_MURK) AEROSOL(IX(I))=AERO_C(I)                               LSPPN2D.371    
        LSRAIN(IX(I))=LSRAIN_C(I)                                          LSPPN2D.372    
        LSSNOW(IX(I))=LSSNOW_C(I)                                          LSPPN2D.373    
        F_DELTA_SNOW(IX(I)) = F_DELTA_SNOW_C(I)                            LSPPN2D.374    
        VFALL(IX(I))=VFALL_C(I)                                            LSPPN2D.375    
      END DO ! Loop over points                                            LSPPN2D.376    
!                                                                          AWO4F401.246    
      IF (L_SULPC_SO2) THEN       ! scatter back S Cycle tracer arrays     AWO4F401.247    
        DO I=1,N                                                           AWO4F401.248    
          SO2(IX(I))=SO2_C(I)                                              AWO4F401.249    
          SO4_AIT(IX(I))=SO4_AIT_C(I)                                      AWO4F401.250    
          SO4_ACC(IX(I))=SO4_ACC_C(I)                                      AWO4F401.251    
          SO4_DIS(IX(I))=SO4_DIS_C(I)                                      AWO4F401.252    
          LSCAV_SO2(IX(I))=LSCAV_SO2_C(I)                                  AWO4F401.253    
          LSCAV_SO4AIT(IX(I))=LSCAV_SO4AIT_C(I)                            AWO4F401.254    
          LSCAV_SO4ACC(IX(I))=LSCAV_SO4ACC_C(I)                            AWO4F401.255    
          LSCAV_SO4DIS(IX(I))=LSCAV_SO4DIS_C(I)                            AWO4F401.256    
        END DO                                                             AWO4F401.257    
!                                                                          AWO4F405.194    
        IF (L_SULPC_NH3) THEN                                              AWO4F405.195    
          DO I=1,N                                                         AWO4F405.196    
            NH3(IX(I))=NH3_C(I)                                            AWO4F405.197    
            LSCAV_NH3(IX(I))=LSCAV_NH3_C(I)                                AWO4F405.198    
          END DO                                                           AWO4F405.199    
        END IF                                                             AWO4F405.200    
!                                                                          AWO4F405.201    
      END IF                                                               AWO4F401.258    
!                                                                          AWO4F401.259    
      IF (L_SOOT) THEN                                                     AWO4F405.342    
        DO I=1,N                                                           AWO4F405.343    
          AGED_SOOT(IX(I))=AGED_SOOT_C(I)                                  AWO4F405.344    
          LSCAV_AGEDSOOT(IX(I))=LSCAV_AGEDSOOT_C(I)                        AWO4F405.345    
        END DO                                                             AWO4F405.346    
      END IF                                                               AWO4F405.347    
                                                                           AWO4F405.348    
      RETURN                                                               LSPPN2D.377    
      END                                                                  LSPPN2D.378    
*ENDIF                                                                     LSPPN2D.379