*IF DEF,A04_3B                                                             LSPICE3B.2      
C *****************************COPYRIGHT******************************     LSPICE3B.3      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    LSPICE3B.4      
C                                                                          LSPICE3B.5      
C Use, duplication or disclosure of this code is subject to the            LSPICE3B.6      
C restrictions as set forth in the contract.                               LSPICE3B.7      
C                                                                          LSPICE3B.8      
C                Meteorological Office                                     LSPICE3B.9      
C                London Road                                               LSPICE3B.10     
C                BRACKNELL                                                 LSPICE3B.11     
C                Berkshire UK                                              LSPICE3B.12     
C                RG12 2SZ                                                  LSPICE3B.13     
C                                                                          LSPICE3B.14     
C If no contract has been raised with this copy of the code, the use,      LSPICE3B.15     
C duplication or disclosure of it is strictly prohibited.  Permission      LSPICE3B.16     
C to do so must first be obtained in writing from the Head of Numerical    LSPICE3B.17     
C Modelling at the above address.                                          LSPICE3B.18     
C ******************************COPYRIGHT******************************    LSPICE3B.19     
!  SUBROUTINE LSP_ICE------------------------------------------------      LSPICE3B.20     
!                                                                          LSPICE3B.21     
!  Purpose: Form or augment ice at the expense of cloud water or           LSPICE3B.22     
!           vapour in one model layer.                                     LSPICE3B.23     
!           Also perform flux divergence of falling ice and rain,          LSPICE3B.24     
!           Evaporation and melting of snow,                               LSPICE3B.25     
!           Evaporation of rain, formation of rain.                        LSPICE3B.26     
!           This is the principal subroutine of the 3B large scale         LSPICE3B.27     
!           precipitation scheme.                                          LSPICE3B.28     
!                                                                          LSPICE3B.29     
! S Ballard   <- programmer                                                LSPICE3B.30     
! D Wilson    <- programmer                                                LSPICE3B.31     
!                                                                          LSPICE3B.32     
!  Model            Modification history from model version 4.5:           LSPICE3B.33     
! version  Date                                                            LSPICE3B.34     
!  4.5     Feb 98  New deck                      Damian Wilson             LSPICE3B.35     
!                                                                          LSPICE3B.36     
!  Programming standard: Unified Model Documentation Paper No 4,           LSPICE3B.37     
!                        Version 1dated  12/9/89.                          LSPICE3B.38     
!                                                                          LSPICE3B.39     
!  Logical component covered: Part of P26.                                 LSPICE3B.40     
!                                                                          LSPICE3B.41     
!  System task:                                                            LSPICE3B.42     
!                                                                          LSPICE3B.43     
!  Documentation: Unified Model Documentation Paper No 26.                 LSPICE3B.44     
!                                                                          LSPICE3B.45     
!  Arguments:-----------------------------------------------------------   LSPICE3B.46     

      SUBROUTINE LSP_ICE(                                                   1,2LSPICE3B.47     
     &  P,RHODZ,TIMESTEPFIXED,POINTS,                                      LSPICE3B.48     
     &  RHCPT,                                                             LSPICE3B.49     
     &  SO4_ACC,SO4_DIS,                                                   LSPICE3B.50     
     &  QCF,QCL,Q,RAIN,SNOW,VF,                                            LSPICE3B.51     
     &  T,CFLIQ,CFICE,BLAND,CX,CONSTP)                                     LSPICE3B.52     
      IMPLICIT NONE                                                        LSPICE3B.53     
!                                                                          LSPICE3B.54     
*CALL C_R_CP                                                               LSPICE3B.55     
*CALL C_EPSLON                                                             LSPICE3B.56     
*CALL C_0_DG_C                                                             LSPICE3B.57     
*CALL C_LHEAT                                                              LSPICE3B.58     
*CALL C_LSPMIC                                                             LSPICE3B.59     
*CALL C_LSPDIF                                                             LSPICE3B.60     
!                                                                          LSPICE3B.61     
      INTEGER         !, INTENT(IN)                                        LSPICE3B.62     
     & POINTS                                                              LSPICE3B.63     
!        Number of points to be processed.                                 LSPICE3B.64     
!                                                                          LSPICE3B.65     
      REAL            !, INTENT(IN)                                        LSPICE3B.66     
     & TIMESTEPFIXED                                                       LSPICE3B.67     
!        Timestep of physics in model (s).                                 LSPICE3B.68     
     &, RHCPT(POINTS)                                                      LSPICE3B.69     
!        Critical humidity of all points for cloud formation.              LSPICE3B.70     
!                                                                          LSPICE3B.71     
      REAL            !, INTENT(IN)                                        LSPICE3B.72     
     &  CFLIQ(POINTS)                                                      LSPICE3B.73     
!         Liquid cloud fraction in this layer.                             LSPICE3B.74     
     &, CFICE(POINTS)                                                      LSPICE3B.75     
!         Frozen cloud fraction in this layer.                             LSPICE3B.76     
     &, P(POINTS)                                                          LSPICE3B.77     
!         Air pressure at this level (Pa).                                 LSPICE3B.78     
     &, RHODZ(POINTS)                                                      LSPICE3B.79     
!         Air mass p.u.a. in this layer (kg per sq m).                     LSPICE3B.80     
     &, SO4_ACC(POINTS)                                                    LSPICE3B.81     
!         Sulphur cycle variable                                           LSPICE3B.82     
     &, SO4_DIS(POINTS)                                                    LSPICE3B.83     
!         Sulphur cycle variable                                           LSPICE3B.84     
!                                                                          LSPICE3B.85     
      REAL            !, INTENT(INOUT)                                     LSPICE3B.86     
     & Q(POINTS)                                                           LSPICE3B.87     
!        Specific humidity at this level (kg wat per kg air).              LSPICE3B.88     
     &,QCF(POINTS)                                                         LSPICE3B.89     
!        Cloud ice (kg water per kg air).                                  LSPICE3B.90     
     &,QCL(POINTS)                                                         LSPICE3B.91     
!        Cloud liquid water (kg water per kg air).                         LSPICE3B.92     
     &,T(POINTS)                                                           LSPICE3B.93     
!        Temperature at this level (K).                                    LSPICE3B.94     
     &,RAIN(POINTS)                                                        LSPICE3B.95     
!        On input: Rate of rainfall entering this layer from above.        LSPICE3B.96     
!        On output: Rate of rainfall leaving this layer.                   LSPICE3B.97     
!                   (kg per sq m per s).                                   LSPICE3B.98     
     &,SNOW(POINTS)                                                        LSPICE3B.99     
!        On input: Rate of snowfall entering this layer from above.        LSPICE3B.100    
!        On Output: Rate of snowfall leaving this layer.                   LSPICE3B.101    
!                    (kg per sq m per s).                                  LSPICE3B.102    
     &,VF(POINTS)                                                          LSPICE3B.103    
!        On input: Fall speed of ice into layer from above.                LSPICE3B.104    
!        On output: Fall speed of ice into layer below.                    LSPICE3B.105    
!                   (m per s).                                             LSPICE3B.106    
!                                                                          LSPICE3B.107    
      LOGICAL         !, INTENT(IN)                                        LSPICE3B.108    
     &  BLAND(POINTS)                                                      LSPICE3B.109    
!         Land/sea mask                                                    LSPICE3B.110    
!                                                                          LSPICE3B.111    
!  Workspace usage: 3 real arrays---------------------------------------   LSPICE3B.112    
      REAL                                                                 LSPICE3B.113    
     &  QS(POINTS)                                                         LSPICE3B.114    
!         Saturated sp humidity for (T,p) in layer                         LSPICE3B.115    
     &, QSL(POINTS)                                                        LSPICE3B.116    
!         Saturated sp humidity for (T,p) in layer                         LSPICE3B.117    
!         wrt water at all temps                                           LSPICE3B.118    
     &, SNOWT(POINTS)                                                      LSPICE3B.119    
!         Cumulative fall out of snow within iterations.                   LSPICE3B.120    
!                                                                          LSPICE3B.121    
! external subprograms are called --------------------------------------   LSPICE3B.122    
      EXTERNAL QSAT,QSAT_WAT                                               LSPICE3B.123    
!                                                                          LSPICE3B.124    
!  Local (derived) physical constants ----------------------------------   LSPICE3B.125    
      REAL LCRCP,LFRCP,LSRCP,CONW,RHO1                                     LSPICE3B.126    
      PARAMETER(                                                           LSPICE3B.127    
     &  LCRCP=LC/CP                                                        LSPICE3B.128    
!         Latent heat of condensation / Cp (K).                            LSPICE3B.129    
     &, LFRCP=LF/CP                                                        LSPICE3B.130    
!         Latent heat of fusion / Cp (K).                                  LSPICE3B.131    
     &, LSRCP=LCRCP+LFRCP                                                  LSPICE3B.132    
!         Sum of the above (S for Sublimation).                            LSPICE3B.133    
     &, CONW=R/(EPSILON*LC)                                                LSPICE3B.134    
!         Constant in wet bulb temperature calculation.                    LSPICE3B.135    
     &, RHO1=1.0                                                           LSPICE3B.136    
!         Reference density of air (kg/m3)                                 LSPICE3B.137    
     &  )                                                                  LSPICE3B.138    
!                                                                          LSPICE3B.139    
! ----------------------------------------------------------------------   LSPICE3B.140    
!  1   Define local scalars.                                               LSPICE3B.141    
! ----------------------------------------------------------------------   LSPICE3B.142    
      INTEGER                                                              LSPICE3B.143    
     &  I                                                                  LSPICE3B.144    
! Loop counter (horizontal field index).                                   LSPICE3B.145    
     &, J                                                                  LSPICE3B.146    
! Counter for the iterations                                               LSPICE3B.147    
!                                                                          LSPICE3B.148    
!       Reals effectively expanded to workspace by the Cray (using         LSPICE3B.149    
!       vector registers).                                                 LSPICE3B.150    
!                                                                          LSPICE3B.151    
      REAL                                                                 LSPICE3B.152    
!       Real workspace.  At end of DO loop, contains :-                    LSPICE3B.153    
     &  RHO(POINTS)                                                        LSPICE3B.154    
!         Density of air in the layer.                                     LSPICE3B.155    
     &, RHOR(POINTS)                                                       LSPICE3B.156    
!         1.0/RHO to speed up calculations.                                LSPICE3B.157    
     &, VTEMP                                                              LSPICE3B.158    
!         Virtual temperature as at start of loop.                         LSPICE3B.159    
     &, TEMPC                                                              LSPICE3B.160    
!         temperature degree C as at start of loop.                        LSPICE3B.161    
     &, ESI(POINTS)                                                        LSPICE3B.162    
!         saturation vapour pressure (wrt ice below zero)                  LSPICE3B.163    
     &, ESW(POINTS)                                                        LSPICE3B.164    
!         saturation vapour pressure (wrt water at all T)                  LSPICE3B.165    
     &, DQI                                                                LSPICE3B.166    
!         increment to/from ice/snow                                       LSPICE3B.167    
     &, DQIL                                                               LSPICE3B.168    
!         increment to/from cloud water                                    LSPICE3B.169    
     &, DPR                                                                LSPICE3B.170    
!         increment to/from rain                                           LSPICE3B.171    
     &, CFICETEMP                                                          LSPICE3B.172    
!         fraction of ice inferred for fall speed calculations.            LSPICE3B.173    
     &, FQI                                                                LSPICE3B.174    
!         fallspeed for ice                                                LSPICE3B.175    
     &, DHI(POINTS)                                                        LSPICE3B.176    
!         CFL limit                                                        LSPICE3B.177    
     &, DHIR(POINTS)                                                       LSPICE3B.178    
!         1.0/DHI                                                          LSPICE3B.179    
     &, DHILSITERR(POINTS)                                                 LSPICE3B.180    
!         1.0/(DHI*LSITER)                                                 LSPICE3B.181    
     &, FQIRQI                                                             LSPICE3B.182    
!         saved flux of ice out of layer                                   LSPICE3B.183    
     &, FQIRQI2                                                            LSPICE3B.184    
!         saved flux of ice out of layer from layer above                  LSPICE3B.185    
     &, QUP                                                                LSPICE3B.186    
!         updated ice for long timestep                                    LSPICE3B.187    
     &, QCLNEW                                                             LSPICE3B.188    
!         updated liquid cloud in implicit calculations                    LSPICE3B.189    
     &, TEMP7                                                              LSPICE3B.190    
!         term in melting                                                  LSPICE3B.191    
     &, PR02                                                               LSPICE3B.192    
!         term in evaporation of rain                                      LSPICE3B.193    
     &, PR04                                                               LSPICE3B.194    
!         square of pr02                                                   LSPICE3B.195    
     &, QC                                                                 LSPICE3B.196    
!         term in autoconversion of cloud to rain                          LSPICE3B.197    
     &, APLUSB                                                             LSPICE3B.198    
!         denominator in deposition or evaporation of ice                  LSPICE3B.199    
     &, CORR(POINTS)                                                       LSPICE3B.200    
!         density correction for fall speed                                LSPICE3B.201    
     &, ROCOR(POINTS)                                                      LSPICE3B.202    
!         density correction for fall speed                                LSPICE3B.203    
     &, VR1                                                                LSPICE3B.204    
!         Mean fall speed of rain                                          LSPICE3B.205    
     &, VS1                                                                LSPICE3B.206    
!         Mean fall speed of snow                                          LSPICE3B.207    
     &, LAMR1                                                              LSPICE3B.208    
!         Inverse lambda in rain exponential distribution                  LSPICE3B.209    
     &, LAMR2                                                              LSPICE3B.210    
!         Inverse lambda in rain exponential distribution                  LSPICE3B.211    
     &, LAMFAC1                                                            LSPICE3B.212    
!         Expression containing calculations with lambda                   LSPICE3B.213    
     &, LAMS1                                                              LSPICE3B.214    
!         Inverse lambda in snow exponential distribution                  LSPICE3B.215    
     &, FV1                                                                LSPICE3B.216    
!         Mean velocity difference between rain and snow                   LSPICE3B.217    
     &, TIMESTEP                                                           LSPICE3B.218    
!         Timestep of each iteration                                       LSPICE3B.219    
     &, CORR2(POINTS)                                                      LSPICE3B.220    
!         Temperature correction of viscosity etc.                         LSPICE3B.221    
     &, RHNUC                                                              LSPICE3B.222    
!         Relative humidity required for nucleation                        LSPICE3B.223    
     &, TCG(POINTS)                                                        LSPICE3B.224    
!         Temperature Factor for X1I in Cox Golding calculation            LSPICE3B.225    
     &, TCGI                                                               LSPICE3B.226    
!         Inverse of TCG                                                   LSPICE3B.227    
     &, RATEQ                                                              LSPICE3B.228    
!         Constant effecting rate of deposition/sublimation of ice         LSPICE3B.229    
     &, RATEQCF                                                            LSPICE3B.230    
!         Constant representing effect of sub grid distribution of ice     LSPICE3B.231    
     &, RATEQS(POINTS)                                                     LSPICE3B.232    
!         Critical humidity for ice deposition                             LSPICE3B.233    
     &, RATEQSL(POINTS)                                                    LSPICE3B.234    
!         Critical humidity for rain evaporation                           LSPICE3B.235    
     &, HM_NORMALIZE                                                       LSPICE3B.236    
!         Normalization for Hallett Mossop process                         LSPICE3B.237    
     &, HM_RATE                                                            LSPICE3B.238    
!         Increase in deposition due to Hallett Mossop process             LSPICE3B.239    
*IF DEF,VECTLIB                                                            PXVECTLB.37     
     &, TEMP1(POINTS)                                                      LSPICE3B.241    
     &, TEMP2(POINTS)                                                      LSPICE3B.242    
! Temporary arrays for T3E vector functions                                LSPICE3B.243    
      INTEGER KK                                                           LSPICE3B.244    
! Variables for condensed points compression                               LSPICE3B.245    
      REAL POWER                                                           LSPICE3B.246    
! Power for T3E vector functions                                           LSPICE3B.247    
*ENDIF                                                                     LSPICE3B.248    
! Obtain the size for CX and CONSTP                                        LSPICE3B.249    
*CALL C_LSPSIZ                                                             LSPICE3B.250    
!                                                                          LSPICE3B.251    
! ----------------------------------------------------------------------   LSPICE3B.252    
!  2.1 Start the microphysics calculations                                 LSPICE3B.253    
! ----------------------------------------------------------------------   LSPICE3B.254    
! Set up the iterations                                                    LSPICE3B.255    
       TIMESTEP=TIMESTEPFIXED/LSITER                                       LSPICE3B.256    
! Set up sub grid scale constants. For no sub grid scale variability       LSPICE3B.257    
! use the set up RATEQ=1.0, RATEQCF=0.0, RATEQS=1.0.                       LSPICE3B.258    
! Ideally represent these in a comdeck but require RHCRIT                  LSPICE3B.259    
       RATEQ=1.0                                                           LSPICE3B.260    
       RATEQCF=0.0                                                         LSPICE3B.261    
! Set up SNOWT(I) to be zero for all I.                                    LSPICE3B.262    
! Points_do1:                                                              LSPICE3B.263    
       DO I=1,POINTS                                                       LSPICE3B.264    
         SNOWT(I)=0.0                                                      LSPICE3B.265    
       END DO ! Points_do1                                                 LSPICE3B.266    
! Set up Hallett Mossop calculation                                        LSPICE3B.267    
       HM_NORMALIZE=1.0/(1.0-EXP((HM_T_MIN-HM_T_MAX)*HM_DECAY))            LSPICE3B.268    
! ----------------------------------------------------------------------   LSPICE3B.269    
!  2.2 Start iterating.                                                    LSPICE3B.270    
! ----------------------------------------------------------------------   LSPICE3B.271    
! Iters_do1:                                                               LSPICE3B.272    
       DO J=1,LSITER                                                       LSPICE3B.273    
! ----------------------------------------------------------------------   LSPICE3B.274    
!  2.3  Calculate sat humidity mixing ratios                               LSPICE3B.275    
! ----------------------------------------------------------------------   LSPICE3B.276    
! Qsat with respect to ice                                                 LSPICE3B.277    
       CALL QSAT(QS,T,P,POINTS)                                            LSPICE3B.278    
!                                                                          LSPICE3B.279    
! Qsat with respect to liquid water                                        LSPICE3B.280    
       CALL QSAT_WAT(QSL,T,P,POINTS)                                       LSPICE3B.281    
! ----------------------------------------------------------------------   LSPICE3B.282    
!  2.4 Start loop over points.                                             LSPICE3B.283    
! ----------------------------------------------------------------------   LSPICE3B.284    
! Points_do2:                                                              LSPICE3B.285    
*IF DEF,VECTLIB                                                            PXVECTLB.38     
       DO I=1,POINTS                                                       PXVECTLB.39     
!                                                                          PXVECTLB.40     
! ----------------------------------------------------------------------   PXVECTLB.41     
!  3.1 Calculate density of air, RHO, via virtual temperature.             PXVECTLB.42     
! ----------------------------------------------------------------------   PXVECTLB.43     
         VTEMP=T(I)*(1.+C_VIRTUAL*Q(I)-QCL(I)-QCF(I)) ! Virtual Temp       PXVECTLB.44     
         RHO(I)=P(I)/(R*VTEMP)                                             PXVECTLB.45     
         RHOR(I)=1.0/RHO(I)                                                PXVECTLB.46     
! Correction factor of fall speeds etc. due to density.                    PXVECTLB.47     
         CORR(I)=(RHO1*RHOR(I))                                            PXVECTLB.48     
! Correction factor in viscosity etc. due to temperature.                  PXVECTLB.49     
         CORR2(I)=(T(I)/273.0)                                             PXVECTLB.50     
       ENDDO                                                               PXVECTLB.51     
! Use T3E vector functions to speed up code                                PXVECTLB.52     
       CALL POWR_V(POINTS,CORR,0.4,CORR)                                   PXVECTLB.53     
       CALL POWR_V(POINTS,CORR2,1.5,CORR2)                                 PXVECTLB.54     
       DO I=1,POINTS                                                       PXVECTLB.55     
         TEMPC=T(I)-ZERODEGC                                               PXVECTLB.56     
! Complete calculation of CORR2                                            PXVECTLB.57     
         CORR2(I)=CORR2(I)*(393.0/(T(I)+120.0))                            PXVECTLB.58     
! Combined correction factor                                               PXVECTLB.59     
         ROCOR(I)=RHO(I)*CORR(I)*CORR2(I)                                  PXVECTLB.60     
! Calculate a temperature factor for N0snow. CX(13)=1.0 if there is a      PXVECTLB.61     
! temperature dependence, and 0.0 if there is not.                         PXVECTLB.62     
         TCG(I)=-CX(13)*TEMPC/8.18                                         PXVECTLB.63     
       ENDDO                                                               PXVECTLB.64     
! Use T3E vector functions to speed up code                                PXVECTLB.65     
       CALL SQRT_V(POINTS,ROCOR,ROCOR)                                     PXVECTLB.66     
       CALL EXP_V(POINTS,TCG,TCG)                                          PXVECTLB.67     
*ELSE                                                                      PXVECTLB.68     
       DO I=1,POINTS                                                       PXVECTLB.69     
!                                                                          PXVECTLB.70     
! ----------------------------------------------------------------------   PXVECTLB.71     
!  3.1 Calculate density of air, RHO, via virtual temperature.             PXVECTLB.72     
! ----------------------------------------------------------------------   PXVECTLB.73     
         VTEMP=T(I)*(1.+C_VIRTUAL*Q(I)-QCL(I)-QCF(I)) ! Virtual Temp       PXVECTLB.74     
         RHO(I)=P(I)/(R*VTEMP)                                             PXVECTLB.75     
         RHOR(I)=1.0/RHO(I)                                                PXVECTLB.76     
! Correction factor of fall speeds etc. due to density.                    PXVECTLB.77     
         CORR(I)=(RHO1*RHOR(I))**0.4                                       PXVECTLB.78     
! Correction factor in viscosity etc. due to temperature.                  PXVECTLB.79     
         CORR2(I)=(T(I)/273.0)**1.5 * (393.0/(T(I)+120.0))                 PXVECTLB.80     
       ENDDO                                                               PXVECTLB.81     
       DO I=1,POINTS                                                       PXVECTLB.82     
         TEMPC=T(I)-ZERODEGC                                               PXVECTLB.83     
! Combined correction factor                                               PXVECTLB.84     
         ROCOR(I)=SQRT(RHO(I)*CORR(I)*CORR2(I))                            PXVECTLB.85     
! Calculate a temperature factor for N0snow. CX(13)=1.0 if there is a      PXVECTLB.86     
! temperature dependence, and 0.0 if there is not.                         PXVECTLB.87     
         TCG(I)=EXP(-CX(13)*TEMPC/8.18)                                    PXVECTLB.88     
       ENDDO                                                               PXVECTLB.89     
*ENDIF                                                                     PXVECTLB.90     
       DO I=1,POINTS                                                       LSPICE3B.334    
! ----------------------------------------------------------------------   LSPICE3B.335    
!  3.2 Set T in deg C and saturated vapour pressures in N/m2               LSPICE3B.336    
! ----------------------------------------------------------------------   LSPICE3B.337    
         ESI(I)=QS(I)*P(I)/EPSILON                                         LSPICE3B.338    
         ESW(I)=QSL(I)*P(I)/EPSILON                                        LSPICE3B.339    
         TCGI=1.0/TCG(I)                                                   LSPICE3B.340    
         TEMPC=T(I)-ZERODEGC                                               LSPICE3B.341    
! ----------------------------------------------------------------------   LSPICE3B.342    
! 3.3 Calculate RATEQS and RATEQSL as a func of RHCRIT and cloud fracs.    LSPICE3B.343    
! ----------------------------------------------------------------------   LSPICE3B.344    
         RATEQS(I)=RHCPT(I)+CFICE(I)*(1.0-RHCPT(I))                        LSPICE3B.345    
         RATEQSL(I)=RHCPT(I)+CFLIQ(I)*(1.0-RHCPT(I))                       LSPICE3B.346    
!                                                                          LSPICE3B.347    
! ----------------------------------------------------------------------   LSPICE3B.348    
!  4   Check that ice cloud fraction is sensible.                          LSPICE3B.349    
! ----------------------------------------------------------------------   LSPICE3B.350    
         CFICETEMP=CFICE(I)                                                LSPICE3B.351    
! The possibility exists in multiple iterations that ice cloud fraction    LSPICE3B.352    
! is equal to zero but nucleation and deposition from the last iteration   LSPICE3B.353    
! has produced a finite ice content. Hence this section produces a fix     LSPICE3B.354    
! which will stop the scheme crashing. Only need to use for more than 1    LSPICE3B.355    
! iteration                                                                LSPICE3B.356    
         IF (LSITER.GT.1) THEN                                             LSPICE3B.357    
           IF (QCF(I).GT.0.0 .AND. CFICE(I).LE.0.1) THEN                   LSPICE3B.358    
             CFICETEMP=MAX(CFLIQ(I),0.1)                                   LSPICE3B.359    
           END IF                                                          LSPICE3B.360    
         END IF                                                            LSPICE3B.361    
!                                                                          LSPICE3B.362    
! ----------------------------------------------------------------------   LSPICE3B.363    
!  5   Falling ice is advected downwards                                   LSPICE3B.364    
! ----------------------------------------------------------------------   LSPICE3B.365    
! Estimate fall speed out of this layer. We want to avoid advecting        LSPICE3B.366    
! very small amounts of snow between layers, as this can cause numerical   LSPICE3B.367    
! problems in other routines, so if QCF is smaller than a single           LSPICE3B.368    
! nucleation mass per metre cubed don't advect it.                         LSPICE3B.369    
         IF (QCF(I).GT.M0) THEN                                            LSPICE3B.370    
!                                                                          LSPICE3B.371    
! Estimate the mean fall speed across the entire gridbox.                  LSPICE3B.372    
! Use a top hat distrubution within the gridbox                            LSPICE3B.373    
           FQI=CONSTP(3)*CORR(I)*                                          LSPICE3B.374    
     &         (RHO(I)*QCF(I)*CONSTP(1)*TCGI/CFICETEMP)**CX(3)             LSPICE3B.375    
         ELSE                                                              LSPICE3B.376    
! QCF is smaller than zero so set fall speed to zero                       LSPICE3B.377    
           FQI=0.0                                                         LSPICE3B.378    
! Endif for calculation of fall speed                                      LSPICE3B.379    
         END IF                                                            LSPICE3B.380    
! Calculate CFL quantity of timestep over level separation.                LSPICE3B.381    
         DHI(I)=TIMESTEP*RHO(I)/RHODZ(I)                                   LSPICE3B.382    
! Define DHIR and DHILSITERR(I) to speed up calculations.                  LSPICE3B.383    
         DHIR(I)=1.0/DHI(I)                                                LSPICE3B.384    
         DHILSITERR(I)=1.0/(DHI(I)*LSITER)                                 LSPICE3B.385    
! ----------------------------------------------------------------------   LSPICE3B.386    
! Choice of advection methods to use                                       LSPICE3B.387    
! ----------------------------------------------------------------------   LSPICE3B.388    
         IF (ADV_TYPE .EQ. 1) THEN                                         LSPICE3B.389    
! ----------------------------------------------------------------------   LSPICE3B.390    
!  5.1 Original advection scheme                                           LSPICE3B.391    
! ----------------------------------------------------------------------   LSPICE3B.392    
! See if fall speed is small enough that not all the ice falls out of      LSPICE3B.393    
! the layer.                                                               LSPICE3B.394    
           IF(VF(I).LE.DHIR(I))THEN                                        LSPICE3B.395    
! short timestep solution                                                  LSPICE3B.396    
             VF(I)=FQI                                                     LSPICE3B.397    
             IF(VF(I).LE.DHIR(I))THEN                                      LSPICE3B.398    
! flux out is just represented by the fall speed estimated above           LSPICE3B.399    
               FQIRQI=FQI*RHO(I)*QCF(I)                                    LSPICE3B.400    
             ELSE                                                          LSPICE3B.401    
! cannot allow more ice to leave than was already there                    LSPICE3B.402    
               FQIRQI=RHO(I)*QCF(I)*DHIR(I)                                LSPICE3B.403    
             ENDIF                                                         LSPICE3B.404    
! calculate new ice content in this layer by flux divergence               LSPICE3B.405    
             QCF(I)=QCF(I)+(SNOW(I)-FQIRQI)*DHI(I)*RHOR(I)                 LSPICE3B.406    
           ELSE                                                            LSPICE3B.407    
! long timestep case                                                       LSPICE3B.408    
             QUP = SNOW(I)*RHOR(I)/VF(I)                                   LSPICE3B.409    
             FQIRQI = SNOW(I) - (RHODZ(I)*(QUP-QCF(I))/TIMESTEP)           LSPICE3B.410    
             QCF(I) = QUP                                                  LSPICE3B.411    
! VF must be as least as great as the fall velocity of the current layer   LSPICE3B.412    
             IF(VF(I).LT.FQI) VF(I)=FQI                                    LSPICE3B.413    
!                                                                          LSPICE3B.414    
! END IF for VF(I).LE.DHIR(I)                                              LSPICE3B.415    
!                                                                          LSPICE3B.416    
           END IF                                                          LSPICE3B.417    
! ----------------------------------------------------------------------   LSPICE3B.418    
!  5.2 Modified advection scheme treats better ice falling across layers   LSPICE3B.419    
! ----------------------------------------------------------------------   LSPICE3B.420    
           ELSEIF (ADV_TYPE .EQ. 2) THEN                                   LSPICE3B.421    
! Fall of ice OUT of the layer                                             LSPICE3B.422    
! FQIRQI is the flux out                                                   LSPICE3B.423    
           FQIRQI=RHO(I)*QCF(I)*MIN(FQI,DHIR(I))                           LSPICE3B.424    
! QCF(I) is what remains in the layer                                      LSPICE3B.425    
           QCF(I)=QCF(I)-FQIRQI*DHI(I)*RHOR(I)                             LSPICE3B.426    
! Fall of ice INTO the layer                                               LSPICE3B.427    
! QUP is ice content from flux in which remains in layer                   LSPICE3B.428    
           IF (VF(I).GT.DHIR(I)) THEN                                      LSPICE3B.429    
             QUP=SNOW(I)*RHOR(I)/VF(I)                                     LSPICE3B.430    
! FQIRQI2 is flux straight through the layer                               LSPICE3B.431    
             FQIRQI2=SNOW(I)-RHO(I)*QUP*DHIR(I)                            LSPICE3B.432    
           ELSE                                                            LSPICE3B.433    
             QUP=SNOW(I)*RHOR(I)*DHI(I)                                    LSPICE3B.434    
             FQIRQI2=0.0                                                   LSPICE3B.435    
           ENDIF                                                           LSPICE3B.436    
! QCF is updated ice content in the layer                                  LSPICE3B.437    
           QCF(I)=QCF(I)+QUP                                               LSPICE3B.438    
! FQIRQI is updated flux out of the layer                                  LSPICE3B.439    
           FQIRQI=FQIRQI+FQIRQI2                                           LSPICE3B.440    
! Now update fall speed out of layer. This is a weighted average           LSPICE3B.441    
! of fall speed from layer and excess fall speed from fall                 LSPICE3B.442    
! through the layer.                                                       LSPICE3B.443    
!          VF(I)=MAX(FQI,VF(I)-DHIR(I))                                    LSPICE3B.444    
           IF (FQIRQI2.GT.0.0) THEN                                        LSPICE3B.445    
             VF(I)=FQI + FQIRQI2/FQIRQI * (VF(I)-DHIR(I)-FQI)              LSPICE3B.446    
           ELSE                                                            LSPICE3B.447    
             VF(I)=FQI                                                     LSPICE3B.448    
           ENDIF                                                           LSPICE3B.449    
! End of advection calculations for type 2                                 LSPICE3B.450    
! ----------------------------------------------------------------------   LSPICE3B.451    
!  5.3 Other advection methods aren't written yet!                         LSPICE3B.452    
! ----------------------------------------------------------------------   LSPICE3B.453    
         ELSE                                                              LSPICE3B.454    
! Error: Advection type does not exist                                     LSPICE3B.455    
!                                                                          LSPICE3B.456    
! ENDIF for advection method                                               LSPICE3B.457    
         ENDIF                                                             LSPICE3B.458    
! ----------------------------------------------------------------------   LSPICE3B.459    
!  5.4 Snow is used to save fall out of layer                              LSPICE3B.460    
!      for calculation of fall into next layer                             LSPICE3B.461    
! ----------------------------------------------------------------------   LSPICE3B.462    
         SNOWT(I)=SNOWT(I)+FQIRQI/LSITER                                   LSPICE3B.463    
!                                                                          LSPICE3B.464    
! ----------------------------------------------------------------------   LSPICE3B.465    
!      Transfer processes only active at T less than 0 deg C               LSPICE3B.466    
! ----------------------------------------------------------------------   LSPICE3B.467    
         IF(T(I).LT.ZERODEGC) THEN                                         LSPICE3B.468    
!                                                                          LSPICE3B.469    
! ----------------------------------------------------------------------   LSPICE3B.470    
!  6.1 Homogenous nucleation takes place at temperatures less than THOMO   LSPICE3B.471    
! ----------------------------------------------------------------------   LSPICE3B.472    
            IF (T(I).LT.(ZERODEGC+THOMO)) THEN                             LSPICE3B.473    
! Turn all liquid to ice                                                   LSPICE3B.474    
              QCF(I)=QCF(I)+QCL(I)                                         LSPICE3B.475    
              T(I)=T(I)+LFRCP*QCL(I)                                       LSPICE3B.476    
              QCL(I)=0.0                                                   LSPICE3B.477    
            END IF                                                         LSPICE3B.478    
! ----------------------------------------------------------------------   LSPICE3B.479    
!  6.2 Heteorgenous nucleation occurs for temps less than TNUC deg C       LSPICE3B.480    
! ----------------------------------------------------------------------   LSPICE3B.481    
           IF (T(I).LT.(ZERODEGC+TNUC)) THEN                               LSPICE3B.482    
! Calculate number of active ice nucleii                                   LSPICE3B.483    
             DQI=MIN(0.01*EXP(-0.6*TEMPC),1.0E5)                           LSPICE3B.484    
! Each nucleus can grow to arbitary mass of M0 kg                          LSPICE3B.485    
             DQI=M0*DQI*RHOR(I)                                            LSPICE3B.486    
! RHNUC represents how much moisture is available for ice formation.       LSPICE3B.487    
             RHNUC=(188.92+2.81*(T(I)-ZERODEGC)                            LSPICE3B.488    
     &       +0.013336*(T(I)-ZERODEGC)**2-10.0)*0.01                       LSPICE3B.489    
             RHNUC=MIN(RHNUC,1.0)                                          LSPICE3B.490    
! Predict transfer of mass to ice.                                         LSPICE3B.491    
             DQI=MAX(MIN(DQI,Q(I)+QCL(I)                                   LSPICE3B.492    
     &           -RATEQS(I)*MAX(QSL(I)*RHNUC,QS(I))),0.0)                  LSPICE3B.493    
             QCF(I)=QCF(I)+DQI                                             LSPICE3B.494    
! This comes initially from liquid water                                   LSPICE3B.495    
             DQIL=MIN(DQI,QCL(I))                                          LSPICE3B.496    
             QCL(I)=QCL(I)-DQIL                                            LSPICE3B.497    
             T(I)=T(I)+LFRCP*DQIL                                          LSPICE3B.498    
! If more moisture is required then nucleation removes from vapour.        LSPICE3B.499    
             DQI=DQI-DQIL                                                  LSPICE3B.500    
             T(I)=T(I)+LSRCP*DQI                                           LSPICE3B.501    
             Q(I)=Q(I)-DQI                                                 LSPICE3B.502    
! END IF for nucleation                                                    LSPICE3B.503    
           END IF                                                          LSPICE3B.504    
!                                                                          LSPICE3B.505    
! ----------------------------------------------------------------------   LSPICE3B.506    
!  7   Deposition/Sublimation of snow - explicit.                          LSPICE3B.507    
!      Hallett Mossop process enhances growth.                             LSPICE3B.508    
! ----------------------------------------------------------------------   LSPICE3B.509    
           IF(QCF(I).GT.M0) THEN                                           LSPICE3B.510    
! Calculate transfer rate as a function of QCF and T                       LSPICE3B.511    
             PR02=RHO(I)*QCF(I)*CONSTP(1)*TCGI                             LSPICE3B.512    
             APLUSB=(APB1-APB2*T(I))*ESI(I)                                LSPICE3B.513    
             APLUSB=APLUSB+(T(I)**3)*P(I)*APB3                             LSPICE3B.514    
             DQI=TCG(I)*CONSTP(5)*T(I)**2*ESI(I)*RATEQ*                    LSPICE3B.515    
     &      (MIN((Q(I)+QCL(I)),QSL(I))-RATEQCF*QCF(I)-RATEQS(I)*QS(I))*    LSPICE3B.516    
     &       (0.65*CONSTP(13)*CORR2(I)*PR02**CX(1)+CONSTP(6)*ROCOR(I)*     LSPICE3B.517    
     &       PR02**CX(2))/(QS(I)*APLUSB*RHO(I))                            LSPICE3B.518    
! Limits depend on whether deposition or sublimation occurs                LSPICE3B.519    
             IF (DQI.GT.0.0) THEN                                          LSPICE3B.520    
! Deposition is occuring.                                                  LSPICE3B.521    
! Hallett Mossop Enhancement                                               LSPICE3B.522    
               IF ( (T(I)-ZERODEGC) .GE. HM_T_MAX) THEN                    LSPICE3B.523    
! Temperature is greater than maximum threshold for HM.                    LSPICE3B.524    
                 HM_RATE=0.0                                               LSPICE3B.525    
               ELSEIF ((T(I)-ZERODEGC) .LT. HM_T_MAX                       LSPICE3B.526    
! Temperature is between HM thresholds                                     LSPICE3B.527    
     &           .AND. (T(I)-ZERODEGC) .GT. HM_T_MIN) THEN                 LSPICE3B.528    
                 HM_RATE=(1.0-EXP( (T(I)-ZERODEGC-HM_T_MAX)*HM_DECAY) )    LSPICE3B.529    
     &             *HM_NORMALIZE                                           LSPICE3B.530    
               ELSE                                                        LSPICE3B.531    
! Temperature is less than minimum threshold for HM.                       LSPICE3B.532    
                 HM_RATE=EXP( (T(I)-ZERODEGC-HM_T_MIN)*HM_DECAY)           LSPICE3B.533    
               ENDIF                                                       LSPICE3B.534    
! Calculate enhancement factor for HM process.                             LSPICE3B.535    
               HM_RATE=1.0+HM_RATE*QCL(I)*HM_RQCL                          LSPICE3B.536    
! Calculate Transfer. Limit is available moisture.                         LSPICE3B.537    
               DQI=MIN(DQI*TIMESTEP*HM_RATE,                               LSPICE3B.538    
     &         (Q(I)+QCL(I)-RATEQCF*QCF(I)-RATEQS(I)*QS(I))                LSPICE3B.539    
     &          /(1.0+RATEQCF))                                            LSPICE3B.540    
             ELSE                                                          LSPICE3B.541    
! Sublimation is occuring. Limits are spare moisture capacity and QCF      LSPICE3B.542    
               DQI=MAX(MAX(DQI*TIMESTEP,                                   LSPICE3B.543    
     &           (Q(I)+QCL(I)-RATEQCF*QCF(I)-RATEQS(I)*QS(I))              LSPICE3B.544    
     &                            /(1.0+RATEQCF)),-QCF(I))                 LSPICE3B.545    
             END IF                                                        LSPICE3B.546    
! Adjust ice content                                                       LSPICE3B.547    
             QCF(I)=QCF(I)+DQI                                             LSPICE3B.548    
             DQIL=MAX(MIN(DQI,QCL(I)),0.0)                                 LSPICE3B.549    
! Adjust liquid content (deposits before vapour by Bergeron Findeison      LSPICE3B.550    
!  process).                                                               LSPICE3B.551    
             QCL(I)=QCL(I)-DQIL                                            LSPICE3B.552    
             T(I)=T(I)+LFRCP*DQIL                                          LSPICE3B.553    
             DQI=DQI-DQIL                                                  LSPICE3B.554    
! Adjust vapour content                                                    LSPICE3B.555    
             Q(I)=Q(I)-DQI                                                 LSPICE3B.556    
             T(I)=T(I)+LSRCP*DQI                                           LSPICE3B.557    
! END IF for QCF.GT.M0.                                                    LSPICE3B.558    
           END IF                                                          LSPICE3B.559    
!                                                                          LSPICE3B.560    
! ----------------------------------------------------------------------   LSPICE3B.561    
!  8   Riming of snow by cloud water -implicit in QCL                      LSPICE3B.562    
! ----------------------------------------------------------------------   LSPICE3B.563    
           IF (QCF(I).GT.M0.AND.QCL(I).GT.0.0) THEN                        LSPICE3B.564    
               QCLNEW=QCL(I)/(1.0+CONSTP(4)*TCG(I)*CORR(I)*TIMESTEP*       LSPICE3B.565    
     &         (RHO(I)*QCF(I)*CONSTP(1)*TCGI)**CX(4))                      LSPICE3B.566    
! Recalculate water contents                                               LSPICE3B.567    
               QCF(I)=QCF(I)+(QCL(I)-QCLNEW)                               LSPICE3B.568    
               T(I)=T(I)+LFRCP*(QCL(I)-QCLNEW)                             LSPICE3B.569    
               QCL(I)=QCLNEW                                               LSPICE3B.570    
! END IF for QCF.GT.M0.AND.QCL(I).GT.0.0                                   LSPICE3B.571    
           END IF                                                          LSPICE3B.572    
!                                                                          LSPICE3B.573    
! ----------------------------------------------------------------------   LSPICE3B.574    
!  9   Capture of rain by snow - implicit in rain                          LSPICE3B.575    
! ----------------------------------------------------------------------   LSPICE3B.576    
           IF (RAIN(I).GT.0.0.AND.QCF(I).GT.M0) THEN                       LSPICE3B.577    
! Calculate velocities                                                     LSPICE3B.578    
             VR1=CORR(I)*CONSTP(11)/6.0*                                   LSPICE3B.579    
     &              (RAIN(I)/(CONSTP(8)*CORR(I)))**CX(5)                   LSPICE3B.580    
             VS1=CONSTP(3)*CORR(I)*(RHO(I)*QCF(I)*CONSTP(1)*TCGI)**CX(3)   LSPICE3B.581    
! Estimate the mean absolute differences in velocities.                    LSPICE3B.582    
             FV1=MAX(ABS(VR1-VS1),(VR1+VS1)/8.0)                           LSPICE3B.583    
! Calculate functions of slope parameter lambda                            LSPICE3B.584    
             LAMR1=(RAIN(I)/(CONSTP(8)*CORR(I)))**(CX(10))                 LSPICE3B.585    
             LAMS1=(RHO(I)*QCF(I)*CONSTP(1)*TCGI)**(-CX(6))                LSPICE3B.586    
             LAMFAC1=CONSTP(16)*(LAMR1**6.0*LAMS1**CX(16)) +               LSPICE3B.587    
     &               CONSTP(15)*(LAMR1**5.0*LAMS1**CX(15)) +               LSPICE3B.588    
     &               CONSTP(14)*(LAMR1**4.0*LAMS1**CX(14))                 LSPICE3B.589    
! Calculate transfer                                                       LSPICE3B.590    
             DPR=TCG(I)*CONSTP(9)*LAMS1**(-CX(8))*LAMR1**(-CX(9))*FV1*     LSPICE3B.591    
     &       LAMFAC1*TIMESTEP*RHOR(I)                                      LSPICE3B.592    
             DPR=MIN(DPR,RAIN(I)*(DHI(I)*LSITER)*RHOR(I))                  LSPICE3B.593    
! Adjust ice and rain contents                                             LSPICE3B.594    
             QCF(I)=QCF(I)+DPR                                             LSPICE3B.595    
             RAIN(I)=RAIN(I)-DPR*RHO(I)*DHILSITERR(I)                      LSPICE3B.596    
             T(I)=T(I)+LFRCP*DPR                                           LSPICE3B.597    
!      Endif for RAIN.GT.0.0 in capture term                               LSPICE3B.598    
           END IF                                                          LSPICE3B.599    
! ----------------------------------------------------------------------   LSPICE3B.600    
!      End of transfer processes only active at T less than 0 deg C        LSPICE3B.601    
! ----------------------------------------------------------------------   LSPICE3B.602    
         END IF                                                            LSPICE3B.603    
! ----------------------------------------------------------------------   LSPICE3B.604    
!  10  Evaporate melting snow - implicit in subsaturation                  LSPICE3B.605    
! ----------------------------------------------------------------------   LSPICE3B.606    
         IF(QCF(I).GT.M0.AND.T(I).GT.ZERODEGC)THEN                         LSPICE3B.607    
! Calculate transfer as a function of QCF, T and specific humidity         LSPICE3B.608    
           PR02=RHO(I)*QCF(I)*CONSTP(1)*TCGI                               LSPICE3B.609    
           PR04=((APB4-APB5*T(I))*ESW(I)+APB6*P(I)*T(I)**3)                LSPICE3B.610    
           DPR=TCG(I)*RATEQ*CONSTP(5)*T(I)**2*ESW(I)*TIMESTEP*             LSPICE3B.611    
     &     (0.65*CONSTP(13)*CORR2(I)*PR02**CX(1)                           LSPICE3B.612    
     &      +CONSTP(6)*ROCOR(I)*PR02**CX(2))/(QSL(I)*RHO(I)*PR04)          LSPICE3B.613    
           DPR=DPR*MAX(                                                    LSPICE3B.614    
     &         (RATEQS(I)*QSL(I)+RATEQCF*QCF(I)-Q(I)-QCL(I)),0.0)          LSPICE3B.615    
     &                /(1.0+DPR*(1.0+RATEQCF))                             LSPICE3B.616    
! Extra check to see we don't get a negative QCF                           LSPICE3B.617    
           DPR=MIN(DPR,QCF(I))                                             LSPICE3B.618    
! Update values of ice and vapour                                          LSPICE3B.619    
           QCF(I)=QCF(I)-DPR                                               LSPICE3B.620    
           Q(I)=Q(I)+DPR                                                   LSPICE3B.621    
           T(I)=T(I)-DPR*LSRCP                                             LSPICE3B.622    
         END IF                                                            LSPICE3B.623    
!                                                                          LSPICE3B.624    
! ----------------------------------------------------------------------   LSPICE3B.625    
!  11  Melting of snow - explicit                                          LSPICE3B.626    
!      USE WET BULB TEMP (DEG.C) IN SNOW MELT CALC.                        LSPICE3B.627    
!      Use a numerical approximation.                                      LSPICE3B.628    
! ----------------------------------------------------------------------   LSPICE3B.629    
         IF(QCF(I).GT.M0.AND.T(I).GT.ZERODEGC)THEN                         LSPICE3B.630    
           TEMPC=T(I)-ZERODEGC                                             LSPICE3B.631    
! An approximate calculation of wet bulb temperature                       LSPICE3B.632    
           TEMP7=TEMPC-RATEQ*                                              LSPICE3B.633    
     &            (RATEQS(I)*QSL(I)+RATEQCF*QCF(I)-Q(I)-QCL(I))            LSPICE3B.634    
     &           *(TW1+TW2*(P(I)-TW3) - TW4*(T(I)-TW5) )                   LSPICE3B.635    
           TEMP7=MAX(TEMP7,0.0)                                            LSPICE3B.636    
! End of wet bulb temp formulations.                                       LSPICE3B.637    
           PR02=RHO(I)*QCF(I)*CONSTP(1)*TCGI                               LSPICE3B.638    
           DPR=TCG(I)*CONSTP(7)*TIMESTEP*                                  LSPICE3B.639    
     &            (0.65*CONSTP(13)*CORR2(I)*PR02**CX(1)                    LSPICE3B.640    
     &         + CONSTP(6)*ROCOR(I)*PR02**CX(2))*RHOR(I)                   LSPICE3B.641    
! Solve implicitly in terms of temperature                                 LSPICE3B.642    
           DPR=TEMP7*(1.0-1.0/(1.0+DPR*LFRCP))/LFRCP                       LSPICE3B.643    
           DPR=MIN(DPR,QCF(I))                                             LSPICE3B.644    
! Update values of ice and Rain                                            LSPICE3B.645    
           QCF(I)=QCF(I)-DPR                                               LSPICE3B.646    
           RAIN(I)=RAIN(I)+DPR*RHO(I)*DHILSITERR(I)                        LSPICE3B.647    
           T(I)=T(I)-LFRCP*DPR                                             LSPICE3B.648    
! ENDIF for melting snow                                                   LSPICE3B.649    
         END IF                                                            LSPICE3B.650    
       ENDDO                                                               LSPICE3B.651    
!                                                                          LSPICE3B.652    
! ----------------------------------------------------------------------   LSPICE3B.653    
!  12  Evaporation of rain - implicit in subsaturation                     LSPICE3B.654    
! ----------------------------------------------------------------------   LSPICE3B.655    
*IF DEF,VECTLIB                                                            PXVECTLB.91     
! Use a condensed points calculation to speed up the code                  LSPICE3B.657    
       KK=0                                                                LSPICE3B.658    
       DO I=1,POINTS                                                       LSPICE3B.659    
          IF(RAIN(I).GT.0.0)THEN                                           LSPICE3B.660    
            KK=KK+1                                                        LSPICE3B.661    
            TEMP1(KK)=RAIN(I)/(CONSTP(8)*CORR(I))                          LSPICE3B.662    
          ENDIF                                                            LSPICE3B.663    
       ENDDO                                                               LSPICE3B.664    
! Define a joint power of CX(12) and CX(10) as real to real operations     LSPICE3B.665    
! are expensive                                                            LSPICE3B.666    
       POWER=(CX(12)*CX(10))                                               LSPICE3B.667    
       CALL POWR_V(KK,TEMP1,POWER,TEMP2)                                   LSPICE3B.668    
       POWER=(CX(11)*CX(10))                                               LSPICE3B.669    
       CALL POWR_V(KK,TEMP1,POWER,TEMP1)                                   LSPICE3B.670    
! Set condensed points counter back to zero                                LSPICE3B.671    
       KK=0                                                                LSPICE3B.672    
*ENDIF                                                                     LSPICE3B.673    
       DO I=1,POINTS                                                       LSPICE3B.674    
         IF(RAIN(I).GT.0.0)THEN                                            LSPICE3B.675    
           PR04=((APB4-APB5*T(I))*ESW(I)+APB6*P(I)*T(I)**3)                LSPICE3B.676    
*IF DEF,VECTLIB                                                            PXVECTLB.92     
! Copy temp values to LAMR2 and LAMR1                                      LSPICE3B.678    
           KK=KK+1                                                         LSPICE3B.679    
           LAMR2=TEMP2(KK)                                                 LSPICE3B.680    
           LAMR1=TEMP1(KK)                                                 LSPICE3B.681    
*ELSE                                                                      LSPICE3B.682    
! Define LAMR1 and LAMR2                                                   LSPICE3B.683    
           LAMR1=RAIN(I)/(CONSTP(8)*CORR(I))                               LSPICE3B.684    
           LAMR2=LAMR1**(CX(12)*CX(10))                                    LSPICE3B.685    
           LAMR1=LAMR1**(CX(11)*CX(10))                                    LSPICE3B.686    
*ENDIF                                                                     LSPICE3B.687    
! New, consistent evaporation method, with rain fall speed relationship.   LSPICE3B.688    
           DPR=CONSTP(2)*T(I)**2*ESW(I)*TIMESTEP                           LSPICE3B.689    
           DPR=DPR*( (0.78*CORR2(I)*LAMR2)                                 LSPICE3B.690    
     &               + (CONSTP(12)*ROCOR(I)*LAMR1) )                       LSPICE3B.691    
           DPR=DPR*RATEQ/(QSL(I)*RHO(I)*PR04)                              LSPICE3B.692    
! Calculate transfers.                                                     LSPICE3B.693    
           DPR=DPR*MAX((RATEQSL(I)*QSL(I)-Q(I)-QCL(I)),0.0)/(1.0+DPR)      LSPICE3B.694    
           DPR=DPR*RHO(I)*DHILSITERR(I)                                    LSPICE3B.695    
           DPR=MIN(DPR,RAIN(I))                                            LSPICE3B.696    
! Update values of rain and vapour                                         LSPICE3B.697    
           RAIN(I)=RAIN(I)-DPR                                             LSPICE3B.698    
           Q(I)=Q(I)+DPR*DHI(I)*LSITER*RHOR(I)                             LSPICE3B.699    
           T(I)=T(I)-DPR*LCRCP*DHI(I)*LSITER*RHOR(I)                       LSPICE3B.700    
! END IF for evaporation of rain.                                          LSPICE3B.701    
         END IF                                                            LSPICE3B.702    
!                                                                          LSPICE3B.703    
! ----------------------------------------------------------------------   LSPICE3B.704    
!  13  Accretion of cloud on rain - implicit in liquid water content       LSPICE3B.705    
! ----------------------------------------------------------------------   LSPICE3B.706    
         IF(RAIN(I).GT.0.0.AND.QCL(I).GT.0.0)THEN                          LSPICE3B.707    
! New accretion formulation.                                               LSPICE3B.708    
           PR02=RAIN(I)/(CONSTP(8)*CORR(I))                                LSPICE3B.709    
           QCLNEW=QCL(I)/                                                  LSPICE3B.710    
     &            ((1.0+CONSTP(10)*CORR(I)*TIMESTEP*PR02**CX(7)))          LSPICE3B.711    
! Now calculate increments to rain.                                        LSPICE3B.712    
           RAIN(I)=RAIN(I)+(QCL(I)-QCLNEW)*RHO(I)*DHILSITERR(I)            LSPICE3B.713    
           QCL(I)=QCL(I)-(QCL(I)-QCLNEW)                                   LSPICE3B.714    
! END IF for accretion of cloud on rain.                                   LSPICE3B.715    
         END IF                                                            LSPICE3B.716    
       ENDDO                                                               LSPICE3B.717    
!                                                                          LSPICE3B.718    
! ----------------------------------------------------------------------   LSPICE3B.719    
!  14  Autoconversion of cloud to rain - explicit                          LSPICE3B.720    
! ----------------------------------------------------------------------   LSPICE3B.721    
*IF DEF,VECTLIB                                                            PXVECTLB.93     
! Use a condensed points calculation to speed up the code                  LSPICE3B.723    
       KK=0                                                                LSPICE3B.724    
       DO I=1,POINTS                                                       LSPICE3B.725    
            IF (QCL(I).GT.0.0.AND.CFLIQ(I).GT.0.0) THEN                    LSPICE3B.726    
              KK=KK+1                                                      LSPICE3B.727    
              TEMP1(KK)=(RHO(I)*QCL(I)/CFLIQ(I))                           LSPICE3B.728    
            ENDIF                                                          LSPICE3B.729    
       ENDDO                                                               LSPICE3B.730    
       CALL POWR_V(KK,TEMP1,1.333,TEMP1)                                   LSPICE3B.731    
       KK=0                                                                LSPICE3B.732    
*ENDIF                                                                     LSPICE3B.733    
       DO I=1,POINTS                                                       LSPICE3B.734    
         IF (QCL(I).GT.0.0.AND.CFLIQ(I).GT.0.0) THEN                       LSPICE3B.735    
! Use a liquid cloud fraction here as this term is very non-linear         LSPICE3B.736    
! The section below is a simple way of proceeding.                         LSPICE3B.737    
           IF (BLAND(I)) THEN                                              LSPICE3B.738    
! Land point                                                               LSPICE3B.739    
             QC=MIN(AUTOLIM_LAND*CFLIQ(I)*RHOR(I),QCL(I))                  LSPICE3B.740    
           ELSE                                                            LSPICE3B.741    
! Sea point                                                                LSPICE3B.742    
             QC=MIN(AUTOLIM_SEA*CFLIQ(I)*RHOR(I),QCL(I))                   LSPICE3B.743    
           END IF                                                          LSPICE3B.744    
*IF DEF,VECTLIB                                                            PXVECTLB.94     
! Using a condensed point array in TEMP1 indexed by KK                     LSPICE3B.746    
           KK=KK+1                                                         LSPICE3B.747    
           IF (BLAND(I)) THEN                                              LSPICE3B.748    
             DPR=MIN(AUTORATE_LAND*TEMP1(KK)                               LSPICE3B.749    
     &                *TIMESTEP*QCL(I)/CORR2(I),QCL(I)-QC)                 LSPICE3B.750    
           ELSE                                                            LSPICE3B.751    
             DPR=MIN(AUTORATE_SEA*TEMP1(KK)                                LSPICE3B.752    
     &                *TIMESTEP*QCL(I)/CORR2(I),QCL(I)-QC)                 LSPICE3B.753    
           ENDIF                                                           LSPICE3B.754    
*ELSE                                                                      LSPICE3B.755    
           IF (BLAND(I)) THEN                                              LSPICE3B.756    
! Land point                                                               LSPICE3B.757    
             DPR=MIN(AUTORATE_LAND*(RHO(I)*QCL(I)/CFLIQ(I))**1.333         LSPICE3B.758    
     &                 *TIMESTEP*QCL(I)/CORR2(I),QCL(I)-QC)                LSPICE3B.759    
           ELSE                                                            LSPICE3B.760    
! Sea point                                                                LSPICE3B.761    
             DPR=MIN(AUTORATE_SEA*(RHO(I)*QCL(I)/CFLIQ(I))**1.333          LSPICE3B.762    
     &                 *TIMESTEP*QCL(I)/CORR2(I),QCL(I)-QC)                LSPICE3B.763    
           END IF                                                          LSPICE3B.764    
*ENDIF                                                                     LSPICE3B.765    
! End of calculation of autoconversion amount DPR                          LSPICE3B.766    
           QCL(I)=QCL(I)-DPR                                               LSPICE3B.767    
           RAIN(I)=RAIN(I)+DPR*RHO(I)*DHILSITERR(I)                        LSPICE3B.768    
! ENDIF for autoconversion.                                                LSPICE3B.769    
         END IF                                                            LSPICE3B.770    
! ----------------------------------------------------------------------   LSPICE3B.771    
!  15  Now continue the loops over points and iterations.                  LSPICE3B.772    
! ----------------------------------------------------------------------   LSPICE3B.773    
! Continue DO loop over points                                             LSPICE3B.774    
       END DO ! Points_do2                                                 LSPICE3B.775    
! Continue DO loop over iterations                                         LSPICE3B.776    
       END DO ! Iters_do1                                                  LSPICE3B.777    
!                                                                          LSPICE3B.778    
! Copy contents of SNOWT to SNOW, to fall into next layer down             LSPICE3B.779    
! Points_do3                                                               LSPICE3B.780    
      DO I=1,POINTS                                                        LSPICE3B.781    
        SNOW(I)=SNOWT(I)                                                   LSPICE3B.782    
! ----------------------------------------------------------------------   LSPICE3B.783    
!  16 Melt any SNOW which has reached here, as long as T is large enough   LSPICE3B.784    
! ----------------------------------------------------------------------   LSPICE3B.785    
! Only use if long timestep case. In which case melt the excess snow       LSPICE3B.786    
! which falls straight through a layer. Use DQI variable to save space.    LSPICE3B.787    
! DQI APPROXIMATELY represents the excess SNOW.                            LSPICE3B.788    
           DQI=MIN(VF(I)*DHI(I)-1.0,1.0)                                   LSPICE3B.789    
           IF (DQI.GT.0.0) THEN                                            LSPICE3B.790    
! Long timestep case                                                       LSPICE3B.791    
             TEMPC=T(I)-ZERODEGC                                           LSPICE3B.792    
             IF (SNOW(I).GT.0.0.AND.T(I).GT.ZERODEGC) THEN                 LSPICE3B.793    
! Numerical approximation of wet bulb temperature.                         LSPICE3B.794    
               TEMP7=TEMPC-RATEQ*(RATEQS(I)*QSL(I)                         LSPICE3B.795    
     &           +RATEQCF*QCF(I)-Q(I)-QCL(I))*(TW1+TW2*                    LSPICE3B.796    
     &           (P(I)-TW3) - TW4*(T(I)-TW5) )                             LSPICE3B.797    
               TEMP7=MAX(TEMP7,0.0)                                        LSPICE3B.798    
! End of wet bulb calculation                                              LSPICE3B.799    
               DPR=TEMP7/(LFRCP*LSITER)                                    LSPICE3B.800    
               DPR=MIN(DPR,SNOW(I)*DHI(I)*RHOR(I)*DQI)                     LSPICE3B.801    
! Update values of snow and rain                                           LSPICE3B.802    
               SNOW(I)=SNOW(I)-DPR*RHO(I)*DHIR(I)                          LSPICE3B.803    
               RAIN(I)=RAIN(I)+DPR*RHO(I)*DHIR(I)                          LSPICE3B.804    
               T(I)=T(I)-LFRCP*DPR*LSITER                                  LSPICE3B.805    
! END IF for long timestep                                                 LSPICE3B.806    
             END IF                                                        LSPICE3B.807    
! END IF for melting of excess snow.                                       LSPICE3B.808    
           END IF                                                          LSPICE3B.809    
! ----------------------------------------------------------------------   LSPICE3B.810    
!  17  Remove any small amount of QCF which is left over to be tidy.       LSPICE3B.811    
!      If QCF is less than QCFMIN and isn't growing                        LSPICE3B.812    
!      by deposition (assumed to be given by RHCPT) then remove it.        LSPICE3B.813    
! ----------------------------------------------------------------------   LSPICE3B.814    
!           DQI=M0*RHOR(I)*MIN( 0.01*EXP(-0.6*TEMPC),1.0E5 )               LSPICE3B.815    
!           IF (QCF(I).LT.MIN( MAX(M0*RHOR(I),DQI),1.0E-5*QS(I) ) ) THEN   LSPICE3B.816    
           IF (QCF(I).LT.QCFMIN.AND.                                       LSPICE3B.817    
     &     (T(I).GT.ZERODEGC .OR. (Q(I)+QCL(I) .LE. RHCPT(I)*QS(I))        LSPICE3B.818    
     &     .OR. QCF(I).LT.0.0)  )  THEN                                    LSPICE3B.819    
             Q(I)=Q(I)+QCF(I)                                              LSPICE3B.820    
             T(I)=T(I)-LSRCP*QCF(I)                                        LSPICE3B.821    
             QCF(I)=0.0                                                    LSPICE3B.822    
           END IF                                                          LSPICE3B.823    
! END DO for melting of excess snow loop over points.                      LSPICE3B.824    
      END DO ! Points_do3                                                  LSPICE3B.825    
! ----------------------------------------------------------------------   LSPICE3B.826    
!  18  End of the LSP_ICE subroutine                                       LSPICE3B.827    
! ----------------------------------------------------------------------   LSPICE3B.828    
      RETURN                                                               LSPICE3B.829    
      END                                                                  LSPICE3B.830    
*ENDIF                                                                     LSPICE3B.831