*IF DEF,A09_2A,OR,DEF,A09_2B AR_CLD2A.2
C ******************************COPYRIGHT****************************** AR_CLD2A.3
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. AR_CLD2A.4
C AR_CLD2A.5
C Use, duplication or disclosure of this code is subject to the AR_CLD2A.6
C restrictions as set forth in the contract. AR_CLD2A.7
C AR_CLD2A.8
C Meteorological Office AR_CLD2A.9
C London Road AR_CLD2A.10
C BRACKNELL AR_CLD2A.11
C Berkshire UK AR_CLD2A.12
C RG12 2SZ AR_CLD2A.13
C AR_CLD2A.14
C If no contract has been raised with this copy of the code, the use, AR_CLD2A.15
C duplication or disclosure of it is strictly prohibited. Permission AR_CLD2A.16
C to do so must first be obtained in writing from the Head of Numerical AR_CLD2A.17
C Modelling at the above address. AR_CLD2A.18
C ******************************COPYRIGHT****************************** AR_CLD2A.19
C AR_CLD2A.20
! AR_CLD2A.21
SUBROUTINE AREA_CLD( 1,5AR_CLD2A.22
& AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD,T,CF_BULK,Q,QCF, AR_CLD2A.23
& QCL,CF_LIQ,CF_ICE,ERROR,CF_AREA,AKH,BKH) AR_CLD2A.24
! AR_CLD2A.25
IMPLICIT NONE AR_CLD2A.26
! AR_CLD2A.27
! AR_CLD2A.28
! AR_CLD2A.29
! Purpose: To calculate an area as well as volume fraction of AR_CLD2A.30
! cloud in a layer. AR_CLD2A.31
! AR_CLD2A.32
! Method : A vertical profile of (q+qcL), qcF and Tl within a layer AR_CLD2A.33
! is created, from which mean (q+qcL), qcF and Tl values AR_CLD2A.34
! for 3 sub-layers can be found. These 3 sub-layers are AR_CLD2A.35
! one-third of the total layer thickness. AR_CLD2A.36
! Cloud volume calculations are performed on each sub- AR_CLD2A.37
! layer, and the maximum cloud volume is the cloud area. AR_CLD2A.38
! AR_CLD2A.39
! Comments: Compatible with versions 2A and 2B of Section 9. AR_CLD2A.40
! AR_CLD2A.41
! AR_CLD2A.42
! Current Owner of Code: S. Cusack AR_CLD2A.43
! AR_CLD2A.44
! History: AR_CLD2A.45
! Version Date Comment AR_CLD2A.46
! 4.5 14/05/98 Original Code S. Cusack AR_CLD2A.47
! AR_CLD2A.48
! Description of Code: AR_CLD2A.49
! FORTRAN 77 + common extensions also in Fortran90. AR_CLD2A.50
! This code is written to UMDP3 version 6 programming standards. AR_CLD2A.51
! AR_CLD2A.52
! System component covered: P292 AR_CLD2A.53
! AR_CLD2A.54
! Documentation: AR_CLD2A.55
! AR_CLD2A.56
! Global Variables:---------------------------------------------------- AR_CLD2A.57
! AR_CLD2A.58
*CALL C_LHEAT
AR_CLD2A.59
*CALL C_R_CP
AR_CLD2A.60
! AR_CLD2A.61
! Subroutine arguments AR_CLD2A.62
!---------------------------------------------------------------------- AR_CLD2A.63
! IN variables AR_CLD2A.64
!---------------------------------------------------------------------- AR_CLD2A.65
INTEGER LEVELS ! No. of levels being processed. AR_CLD2A.66
! AR_CLD2A.67
INTEGER POINTS ! No. of gridpoints being processed. AR_CLD2A.68
! AR_CLD2A.69
INTEGER PFIELD ! No. of points in global field (at one AR_CLD2A.70
! vertical level). AR_CLD2A.71
! AR_CLD2A.72
REAL PSTAR(PFIELD) ! Surface pressure (Pa). AR_CLD2A.73
! AR_CLD2A.74
REAL RHCRIT(LEVELS) ! Critical relative humidity. See the AR_CLD2A.75
! the paragraph incorporating eqs P292.11 AR_CLD2A.76
! to P292.14; the values need to be tuned AR_CLD2A.77
! for the given set of levels. AR_CLD2A.78
REAL QCF(PFIELD,LEVELS) ! Cloud ice content at processed levels AR_CLD2A.79
! (kg per kg air). AR_CLD2A.80
REAL AK(LEVELS) ! Hybrid "A" co-ordinate. AR_CLD2A.81
REAL BK(LEVELS) ! Hybrid "B" co-ordinate. AR_CLD2A.82
REAL AKH(LEVELS+1) ! Hybrid "A" co-ordinate. AR_CLD2A.83
REAL BKH(LEVELS+1) ! Hybrid "B" co-ordinate. AR_CLD2A.84
!----------------------------------------------------------------------- AR_CLD2A.85
! INOUT variables AR_CLD2A.86
!----------------------------------------------------------------------- AR_CLD2A.87
REAL Q(PFIELD,LEVELS) ! On input: Total water content (QW) AR_CLD2A.88
! (kg per kg air). AR_CLD2A.89
! On output: Specific humidity at process AR_CLD2A.90
! levels (kg water per kg air) AR_CLD2A.91
REAL T(PFIELD,LEVELS) ! On input: Liquid/frozen water AR_CLD2A.92
! temperature (TL) (K). AR_CLD2A.93
! On output: Temperature at processed AR_CLD2A.94
! levels (K). AR_CLD2A.95
!----------------------------------------------------------------------- AR_CLD2A.96
! OUT variables AR_CLD2A.97
!----------------------------------------------------------------------- AR_CLD2A.98
REAL CF_BULK(PFIELD,LEVELS)! Cloud fraction at processed levels AR_CLD2A.99
! (decimal fraction). AR_CLD2A.100
REAL QCL(PFIELD,LEVELS) ! Cloud liquid water content at AR_CLD2A.101
! processed levels (kg per kg air). AR_CLD2A.102
REAL CF_LIQ(PFIELD,LEVELS) ! Grid-box mean cloud AR_CLD2A.103
! condensate at processed AR_CLD2A.104
! levels (kg per kg air). AR_CLD2A.105
REAL CF_ICE(PFIELD,LEVELS) ! Max moisture fluctuation AR_CLD2A.106
! /6*sigma at processed levels AR_CLD2A.107
! (kg per kg air). AR_CLD2A.108
REAL CF_AREA(PFIELD,LEVELS)! Area cloud fraction AR_CLD2A.109
! (decimal fraction). AR_CLD2A.110
REAL RHCPT(PFIELD,LEVELS) ! Critical relative humidity for AR_CLD2A.111
! every grid cell. AR_CLD2A.112
INTEGER ERROR ! 0 if OK; 1 if bad arguments. AR_CLD2A.113
! AR_CLD2A.114
! AR_CLD2A.115
! Local parameters AR_CLD2A.116
! AR_CLD2A.117
REAL LCRCP, ONETHIRD, DRAT_THRESH AR_CLD2A.118
! AR_CLD2A.119
PARAMETER ( AR_CLD2A.120
& LCRCP=LC/CP AR_CLD2A.121
! Latent heat of condensation divided by specific heat at constant AR_CLD2A.122
! pressure AR_CLD2A.123
& , ONETHIRD=1./3. AR_CLD2A.124
! Threshold for change in (QT-QSAT)/QSAT between 2 layer midpoints AR_CLD2A.125
& , DRAT_THRESH=3.0E-01 AR_CLD2A.126
& ) AR_CLD2A.127
! AR_CLD2A.128
! AR_CLD2A.129
! Local Variables AR_CLD2A.130
! AR_CLD2A.131
REAL AR_CLD2A.132
& CF_TEMP(PFIELD,LEVELS) AR_CLD2A.133
! Temporary storage of total cloud fraction in 3 sub-layers AR_CLD2A.134
& ,CF_LIQ_TEMP(PFIELD,LEVELS) AR_CLD2A.135
! Temporary storage of total liquid cloud fraction in 3 sub-layers AR_CLD2A.136
& ,CF_ICE_TEMP(PFIELD,LEVELS) AR_CLD2A.137
! Temporary storage of total ice cloud fraction in 3 sub-layers AR_CLD2A.138
& ,QCL_TEMP(PFIELD,LEVELS) AR_CLD2A.139
! Temporary storage of total cloud frozen qc in 3 sub-layers AR_CLD2A.140
& ,P_LEV(POINTS,LEVELS) AR_CLD2A.141
! Pressure at model levels AR_CLD2A.142
& ,P_HLEV(POINTS,LEVELS) AR_CLD2A.143
! Pressure at model half-levels AR_CLD2A.144
& ,T_MID(PFIELD,LEVELS) AR_CLD2A.145
! Mean temperature in middle third segment of layer AR_CLD2A.146
& ,T_UP(PFIELD,LEVELS) AR_CLD2A.147
! Mean temperature in upper third segment of layer AR_CLD2A.148
& ,T_LOW(PFIELD,LEVELS) AR_CLD2A.149
! Mean temperature in lower third segment of layer AR_CLD2A.150
& ,QT_UP(PFIELD,LEVELS) AR_CLD2A.151
! Mean total water in upper third segment of layer AR_CLD2A.152
& ,QT_LOW(PFIELD,LEVELS) AR_CLD2A.153
! Mean total water in lower third segment of layer AR_CLD2A.154
& ,QT_MID(PFIELD,LEVELS) AR_CLD2A.155
! Mean total water in middle third segment of layer AR_CLD2A.156
& ,QCF_UP(PFIELD,LEVELS) AR_CLD2A.157
! Mean total water in upper third segment of layer AR_CLD2A.158
& ,QCF_LOW(PFIELD,LEVELS) AR_CLD2A.159
! Mean total water in lower third segment of layer AR_CLD2A.160
& ,QCF_MID(PFIELD,LEVELS) AR_CLD2A.161
! Mean total water in middle third segment of layer AR_CLD2A.162
& ,QST(POINTS) AR_CLD2A.163
! Saturated mixing ratio at layer temperature AR_CLD2A.164
& ,DTDP(POINTS,LEVELS) AR_CLD2A.165
! Gradient of temperature w.r.t. pressure AR_CLD2A.166
& ,DQTDP(POINTS,LEVELS) AR_CLD2A.167
! Gradient of (Q+QCL) w.r.t. pressure AR_CLD2A.168
& ,DQCFDP(POINTS,LEVELS) AR_CLD2A.169
! Gradient of QCF w.r.t. pressure AR_CLD2A.170
& ,DRAT(POINTS,LEVELS) AR_CLD2A.171
! Difference in (QT-QSAT)/QSAT between 2 layer midpoints AR_CLD2A.172
& ,T_LHLEV(POINTS,LEVELS) AR_CLD2A.173
! Temperature at lower half-level in a layer AR_CLD2A.174
& ,T_UHLEV(POINTS,LEVELS) AR_CLD2A.175
! Temperature at upper half-level in a layer AR_CLD2A.176
& ,QT_LHLEV(POINTS,LEVELS) AR_CLD2A.177
! (Q+QCL) at lower half-level in a layer AR_CLD2A.178
& ,QT_UHLEV(POINTS,LEVELS) AR_CLD2A.179
! (Q+QCL) at upper half-level in a layer AR_CLD2A.180
& ,QCF_LHLEV(POINTS,LEVELS) AR_CLD2A.181
! QCF at lower half-level in a layer AR_CLD2A.182
& ,QCF_UHLEV(POINTS,LEVELS) AR_CLD2A.183
! QCF at upper half-level in a layer AR_CLD2A.184
& ,DPLH AR_CLD2A.185
! Difference in pressure between layer upper half-level and layer AR_CLD2A.186
! mean. AR_CLD2A.187
& ,NUM1 AR_CLD2A.188
! Temporary variable AR_CLD2A.189
& ,T_LEV AR_CLD2A.190
! Temperature at mid-layer calculated so that vertical profile of AR_CLD2A.191
! T in a layer is conservative. AR_CLD2A.192
& ,QT_LEV AR_CLD2A.193
! (Q+QCL) at mid-layer calculated so that vertical profile of AR_CLD2A.194
! (Q+QCL) in a layer is conservative. AR_CLD2A.195
& ,QCF_LEV AR_CLD2A.196
! QCF at mid-layer calculated so that vertical profile of QCF in AR_CLD2A.197
! a layer is conservative. AR_CLD2A.198
! AR_CLD2A.199
INTEGER AR_CLD2A.200
& I, LEVEL ! HORIZ AND VERT LOOP VARIABLES RESPECTIVELY AR_CLD2A.201
! AR_CLD2A.202
! External subroutine calls: ------------------------------------------ AR_CLD2A.203
EXTERNAL GLUE_CLD, QSAT AR_CLD2A.204
!- End of Header AR_CLD2A.205
! AR_CLD2A.206
! AR_CLD2A.207
! Calculate pressures at model levels and half-levels. AR_CLD2A.208
DO LEVEL=1,LEVELS AR_CLD2A.209
DO I=1,POINTS AR_CLD2A.210
P_LEV(I,LEVEL)=AK(LEVEL)+PSTAR(I)*BK(LEVEL) AR_CLD2A.211
P_HLEV(I,LEVEL)=AKH(LEVEL)+PSTAR(I)*BKH(LEVEL) AR_CLD2A.212
ENDDO AR_CLD2A.213
ENDDO AR_CLD2A.214
! AR_CLD2A.215
! Calculate gradients of T, QCF and (Q+QCL) w.r.t. pressure AR_CLD2A.216
DO LEVEL=2,LEVELS AR_CLD2A.217
DO I=1,POINTS AR_CLD2A.218
num1=1./(P_LEV(I,LEVEL-1)-P_LEV(I,LEVEL)) AR_CLD2A.219
DTDP(I,LEVEL)=(T(I,LEVEL-1)-T(I,LEVEL))*num1 AR_CLD2A.220
DQTDP(I,LEVEL)=(Q(I,LEVEL-1)-Q(I,LEVEL))*num1 AR_CLD2A.221
DQCFDP(I,LEVEL)=(QCF(I,LEVEL-1)-QCF(I,LEVEL))*num1 AR_CLD2A.222
ENDDO AR_CLD2A.223
ENDDO AR_CLD2A.224
DO I=1,POINTS AR_CLD2A.225
DTDP(I,1)=DTDP(I,2) AR_CLD2A.226
DQTDP(I,1)=DQTDP(I,2) AR_CLD2A.227
DQCFDP(I,1)=DQCFDP(I,2) AR_CLD2A.228
ENDDO AR_CLD2A.229
! Calculate the gradient w.r.t. levels of (QT-QSAT)/QSAT. AR_CLD2A.230
LEVEL=1 AR_CLD2A.231
CALL QSAT
(QST,T(1,LEVEL),P_LEV(1,LEVEL),POINTS) AR_CLD2A.232
DO LEVEL=2,(LEVELS-1) AR_CLD2A.233
DO I=1,POINTS AR_CLD2A.234
DRAT(I,LEVEL)=(Q(I,LEVEL-1)+QCF(I,LEVEL-1)-QST(I))/QST(I) AR_CLD2A.235
ENDDO AR_CLD2A.236
CALL QSAT
(QST,T(1,LEVEL),P_LEV(1,LEVEL),POINTS) AR_CLD2A.237
DO I=1,POINTS AR_CLD2A.238
DRAT(I,LEVEL)=ABS(DRAT(I,LEVEL)-(Q(I,LEVEL)+QCF(I,LEVEL)- AR_CLD2A.239
& QST(I))/QST(I)) AR_CLD2A.240
ENDDO AR_CLD2A.241
ENDDO AR_CLD2A.242
! AR_CLD2A.243
! From values at model levels and gradients, calculate values at half- AR_CLD2A.244
! levels. AR_CLD2A.245
DO LEVEL=2,LEVELS AR_CLD2A.246
DO I=1,POINTS AR_CLD2A.247
DPLH=P_HLEV(I,LEVEL)-P_LEV(I,LEVEL) AR_CLD2A.248
T_LHLEV(I,LEVEL)=T(I,LEVEL)+DTDP(I,LEVEL)*DPLH AR_CLD2A.249
QT_LHLEV(I,LEVEL)=Q(I,LEVEL)+DQTDP(I,LEVEL)*DPLH AR_CLD2A.250
QCF_LHLEV(I,LEVEL)=QCF(I,LEVEL)+DQCFDP(I,LEVEL)*DPLH AR_CLD2A.251
T_UHLEV(I,LEVEL-1)=T_LHLEV(I,LEVEL) AR_CLD2A.252
QT_UHLEV(I,LEVEL-1)=QT_LHLEV(I,LEVEL) AR_CLD2A.253
QCF_UHLEV(I,LEVEL-1)=QCF_LHLEV(I,LEVEL) AR_CLD2A.254
ENDDO AR_CLD2A.255
ENDDO AR_CLD2A.256
! AR_CLD2A.257
! Now determine whether gradients in (QT-QSAT)/QSAT exceed a threshold, AR_CLD2A.258
! in which case switch to the other vertical interpolation method. AR_CLD2A.259
DO LEVEL=2,(LEVELS-1) AR_CLD2A.260
DO I=1,POINTS AR_CLD2A.261
IF ((DRAT(I,LEVEL).GT.DRAT_THRESH)) THEN AR_CLD2A.262
num1=P_HLEV(I,LEVEL)-P_LEV(I,LEVEL) AR_CLD2A.263
T_LHLEV(I,LEVEL)=T(I,LEVEL)+DTDP(I,LEVEL+1)*num1 AR_CLD2A.264
QT_LHLEV(I,LEVEL)=Q(I,LEVEL)+DQTDP(I,LEVEL+1)*num1 AR_CLD2A.265
QCF_LHLEV(I,LEVEL)=QCF(I,LEVEL)+DQCFDP(I,LEVEL+1)*num1 AR_CLD2A.266
num1=P_LEV(I,LEVEL-1)-P_HLEV(I,LEVEL) AR_CLD2A.267
T_UHLEV(I,LEVEL-1)=T(I,LEVEL-1)-DTDP(I,LEVEL-1)*num1 AR_CLD2A.268
QT_UHLEV(I,LEVEL-1)=Q(I,LEVEL-1)-DQTDP(I,LEVEL-1)*num1 AR_CLD2A.269
QCF_UHLEV(I,LEVEL-1)=QCF(I,LEVEL-1)-DQCFDP(I,LEVEL-1)*num1 AR_CLD2A.270
ENDIF AR_CLD2A.271
ENDDO AR_CLD2A.272
ENDDO AR_CLD2A.273
! AR_CLD2A.274
! If switch is activated above and below a layer, do no interpolation AR_CLD2A.275
! at all. Values at upper and lower half levels equal layer mean value. AR_CLD2A.276
DO LEVEL=2,(LEVELS-2) AR_CLD2A.277
DO I=1,POINTS AR_CLD2A.278
IF ((DRAT(I,LEVEL).GT.DRAT_THRESH).AND. AR_CLD2A.279
& (DRAT(I,LEVEL+1).GT.DRAT_THRESH)) THEN AR_CLD2A.280
T_LHLEV(I,LEVEL)=T(I,LEVEL) AR_CLD2A.281
T_UHLEV(I,LEVEL)=T(I,LEVEL) AR_CLD2A.282
QT_LHLEV(I,LEVEL)=Q(I,LEVEL) AR_CLD2A.283
QT_UHLEV(I,LEVEL)=Q(I,LEVEL) AR_CLD2A.284
QCF_LHLEV(I,LEVEL)=QCF(I,LEVEL) AR_CLD2A.285
QCF_UHLEV(I,LEVEL)=QCF(I,LEVEL) AR_CLD2A.286
ENDIF AR_CLD2A.287
ENDDO AR_CLD2A.288
ENDDO AR_CLD2A.289
! AR_CLD2A.290
DO LEVEL=2,(LEVELS-1) AR_CLD2A.291
DO I=1,POINTS AR_CLD2A.292
! Re-calculate quantities at midpoint of layer, so as to ensure AR_CLD2A.293
! conservation. AR_CLD2A.294
T_LEV=T(I,LEVEL)+T(I,LEVEL)- AR_CLD2A.295
& 0.5*(T_LHLEV(I,LEVEL)+T_UHLEV(I,LEVEL)) AR_CLD2A.296
QT_LEV=Q(I,LEVEL)+Q(I,LEVEL)- AR_CLD2A.297
& 0.5*(QT_LHLEV(I,LEVEL)+QT_UHLEV(I,LEVEL)) AR_CLD2A.298
QCF_LEV=QCF(I,LEVEL)+QCF(I,LEVEL)- AR_CLD2A.299
& 0.5*(QCF_LHLEV(I,LEVEL)+QCF_UHLEV(I,LEVEL)) AR_CLD2A.300
! Calculate the mean value of each quantity in the 3 sub-layers AR_CLD2A.301
T_LOW(I,LEVEL)=ONETHIRD*(T_LEV-T_LHLEV(I,LEVEL))+ AR_CLD2A.302
& T_LHLEV(I,LEVEL) AR_CLD2A.303
T_UP(I,LEVEL)=0.666*(T_UHLEV(I,LEVEL)-T_LEV)+T_LEV AR_CLD2A.304
T_MID(I,LEVEL)=3.*T(I,LEVEL)-T_LOW(I,LEVEL)- AR_CLD2A.305
& T_UP(I,LEVEL) AR_CLD2A.306
QT_LOW(I,LEVEL)=ONETHIRD*(QT_LEV-QT_LHLEV(I,LEVEL))+ AR_CLD2A.307
& QT_LHLEV(I,LEVEL) AR_CLD2A.308
QT_UP(I,LEVEL)=0.666*(QT_UHLEV(I,LEVEL)-QT_LEV)+QT_LEV AR_CLD2A.309
QT_MID(I,LEVEL)=3.*Q(I,LEVEL)-QT_LOW(I,LEVEL)- AR_CLD2A.310
& QT_UP(I,LEVEL) AR_CLD2A.311
QCF_LOW(I,LEVEL)=ONETHIRD*(QCF_LEV-QCF_LHLEV(I,LEVEL))+ AR_CLD2A.312
& QCF_LHLEV(I,LEVEL) AR_CLD2A.313
QCF_UP(I,LEVEL)=0.666*(QCF_UHLEV(I,LEVEL)-QCF_LEV)+QCF_LEV AR_CLD2A.314
QCF_MID(I,LEVEL)=3.*QCF(I,LEVEL)-QCF_LOW(I,LEVEL)- AR_CLD2A.315
& QCF_UP(I,LEVEL) AR_CLD2A.316
ENDDO AR_CLD2A.317
ENDDO AR_CLD2A.318
! AR_CLD2A.319
! Check for negative values of QT and QCF: set to layer mean value if AR_CLD2A.320
! negative values found. AR_CLD2A.321
DO LEVEL=2,(LEVELS-1) AR_CLD2A.322
DO I=1,POINTS AR_CLD2A.323
IF ((QCF_MID(I,LEVEL).LT.1E-11).OR.(QCF_LOW(I,LEVEL).LT.1E-11) AR_CLD2A.324
& .OR.(QCF_UP(I,LEVEL).LT.1E-11)) THEN AR_CLD2A.325
QCF_MID(I,LEVEL)=QCF(I,LEVEL) AR_CLD2A.326
QCF_LOW(I,LEVEL)=QCF(I,LEVEL) AR_CLD2A.327
QCF_UP(I,LEVEL)=QCF(I,LEVEL) AR_CLD2A.328
ENDIF AR_CLD2A.329
IF ((QT_MID(I,LEVEL).LT.1E-11).OR.(QT_LOW(I,LEVEL).LT.1E-11) AR_CLD2A.330
& .OR.(QT_UP(I,LEVEL).LT.1E-11)) THEN AR_CLD2A.331
QT_MID(I,LEVEL)=Q(I,LEVEL) AR_CLD2A.332
QT_LOW(I,LEVEL)=Q(I,LEVEL) AR_CLD2A.333
QT_UP(I,LEVEL)=Q(I,LEVEL) AR_CLD2A.334
ENDIF AR_CLD2A.335
ENDDO AR_CLD2A.336
ENDDO AR_CLD2A.337
! AR_CLD2A.338
! Set values at top and bottom layer: note gradients are not used here, AR_CLD2A.339
! they are simply set to the adjacent layer's values. AR_CLD2A.340
DO I=1,POINTS AR_CLD2A.341
T_MID(I,LEVELS)=T(I,LEVELS) AR_CLD2A.342
T_UP(I,LEVELS)=T(I,LEVELS) AR_CLD2A.343
T_LOW(I,LEVELS)=T(I,LEVELS) AR_CLD2A.344
QT_MID(I,LEVELS)=Q(I,LEVELS) AR_CLD2A.345
QT_UP(I,LEVELS)=Q(I,LEVELS) AR_CLD2A.346
QT_LOW(I,LEVELS)=Q(I,LEVELS) AR_CLD2A.347
QCF_MID(I,LEVELS)=QCF(I,LEVELS) AR_CLD2A.348
QCF_UP(I,LEVELS)=QCF(I,LEVELS) AR_CLD2A.349
QCF_LOW(I,LEVELS)=QCF(I,LEVELS) AR_CLD2A.350
T_MID(I,1)=T(I,1) AR_CLD2A.351
T_UP(I,1)=T(I,1) AR_CLD2A.352
T_LOW(I,1)=T(I,1) AR_CLD2A.353
QT_MID(I,1)=Q(I,1) AR_CLD2A.354
QT_UP(I,1)=Q(I,1) AR_CLD2A.355
QT_LOW(I,1)=Q(I,1) AR_CLD2A.356
QCF_MID(I,1)=QCF(I,1) AR_CLD2A.357
QCF_UP(I,1)=QCF(I,1) AR_CLD2A.358
QCF_LOW(I,1)=QCF(I,1) AR_CLD2A.359
ENDDO AR_CLD2A.360
! AR_CLD2A.361
! AR_CLD2A.362
CALL GLUE_CLD
(AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD, AR_CLD2A.363
& T_LOW,CF_BULK,QT_LOW,QCF_LOW,QCL,CF_LIQ,CF_ICE,ERROR) AR_CLD2A.364
! AR_CLD2A.365
CALL GLUE_CLD
(AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD, AR_CLD2A.366
& T_MID,CF_TEMP,QT_MID,QCF_MID,QCL_TEMP,CF_LIQ_TEMP, AR_CLD2A.367
& CF_ICE_TEMP,ERROR) AR_CLD2A.368
! AR_CLD2A.369
! The outputs of the cloud scheme combined with previous output AR_CLD2A.370
DO LEVEL=1,LEVELS AR_CLD2A.371
DO I=1,POINTS AR_CLD2A.372
CF_AREA(I, LEVEL) = MAX(CF_BULK(I, LEVEL), CF_TEMP(I, LEVEL)) AR_CLD2A.373
CF_BULK(I, LEVEL) = CF_BULK(I, LEVEL) + CF_TEMP(I, LEVEL) AR_CLD2A.374
CF_LIQ(I, LEVEL) = CF_LIQ(I, LEVEL) + CF_LIQ_TEMP(I, LEVEL) AR_CLD2A.375
CF_ICE(I, LEVEL) = CF_ICE(I, LEVEL) + CF_ICE_TEMP(I, LEVEL) AR_CLD2A.376
QCL(I, LEVEL) = QCL(I, LEVEL) + QCL_TEMP(I, LEVEL) AR_CLD2A.377
ENDDO AR_CLD2A.378
ENDDO AR_CLD2A.379
! AR_CLD2A.380
CALL GLUE_CLD
(AK,BK,PSTAR,RHCRIT,LEVELS,RHCPT,POINTS,PFIELD, AR_CLD2A.381
& T_UP,CF_TEMP,QT_UP,QCF_UP,QCL_TEMP,CF_LIQ_TEMP, AR_CLD2A.382
& CF_ICE_TEMP,ERROR) AR_CLD2A.383
! AR_CLD2A.384
! The outputs of the cloud scheme combined with previous output AR_CLD2A.385
DO LEVEL=1,LEVELS AR_CLD2A.386
DO I=1,POINTS AR_CLD2A.387
CF_AREA(I, LEVEL) = MAX(CF_AREA(I, LEVEL), CF_TEMP(I, LEVEL)) AR_CLD2A.388
CF_BULK(I, LEVEL) = ONETHIRD * (CF_BULK(I, LEVEL) + AR_CLD2A.389
& CF_TEMP(I, LEVEL)) AR_CLD2A.390
CF_LIQ(I, LEVEL) = ONETHIRD * (CF_LIQ(I, LEVEL) + AR_CLD2A.391
& CF_LIQ_TEMP(I, LEVEL)) AR_CLD2A.392
CF_ICE(I, LEVEL) = ONETHIRD * (CF_ICE(I, LEVEL) + AR_CLD2A.393
& CF_ICE_TEMP(I, LEVEL)) AR_CLD2A.394
QCL(I, LEVEL) = ONETHIRD * (QCL(I, LEVEL)+QCL_TEMP(I, LEVEL)) AR_CLD2A.395
! AR_CLD2A.396
! Grid-box mean temperature and water vapour must now be recalculated, AR_CLD2A.397
! from the grid-box mean QCL calculated above. AR_CLD2A.398
Q(I, LEVEL) = Q(I, LEVEL) - QCL(I, LEVEL) AR_CLD2A.399
T(I, LEVEL) = T(I, LEVEL) + QCL(I, LEVEL) * LCRCP AR_CLD2A.400
ENDDO AR_CLD2A.401
ENDDO AR_CLD2A.402
! AR_CLD2A.403
RETURN AR_CLD2A.404
END AR_CLD2A.405
*ENDIF AR_CLD2A.406