*IF DEF,A70_1A ADB1F402.31
*IF DEF,A01_3A,OR,DEF,A02_3A GREYK3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13314
C GTS2F400.13315
C Use, duplication or disclosure of this code is subject to the GTS2F400.13316
C restrictions as set forth in the contract. GTS2F400.13317
C GTS2F400.13318
C Meteorological Office GTS2F400.13319
C London Road GTS2F400.13320
C BRACKNELL GTS2F400.13321
C Berkshire UK GTS2F400.13322
C RG12 2SZ GTS2F400.13323
C GTS2F400.13324
C If no contract has been raised with this copy of the code, the use, GTS2F400.13325
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13326
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13327
C Modelling at the above address. GTS2F400.13328
C ******************************COPYRIGHT****************************** GTS2F400.13329
C GTS2F400.13330
!+ Subroutine to calculate grey extinctions. GREYK3A.3
! GREYK3A.4
! Method: GREYK3A.5
! For each activated optical process, excluding gaseous GREYK3A.6
! absorption, increments are calculated for the total and GREYK3A.7
! scattering extinctions, and the products of the asymmetry GREYK3A.8
! factor and the forward scattering factor in clear and GREYK3A.9
! cloudy regions. These increments are summed, and the grey GREYK3A.10
! total and scattering extinctions and the asymmetry and forward GREYK3A.11
! scattering factors are thus calculated. GREYK3A.12
! GREYK3A.13
! Current Owner of Code: J. M. Edwards GREYK3A.14
! GREYK3A.15
! History: GREYK3A.16
! Version Date Comment GREYK3A.17
! 4.0 27-07-95 Original Code GREYK3A.18
! (J. M. Edwards) GREYK3A.19
! 4.1 06-06-96 Indentation made ADB1F401.474
! consistent ADB1F401.475
! (J. M. Edwards) ADB1F401.476
! 4.2 Nov. 96 T3E migration: CALL WHENFGT replaced GSS2F402.193
! by portable fortran code. GSS2F402.194
! S.J.Swarbrick GSS2F402.195
! 4.4 30-09-96 Effective radius ADB2F404.570
! relabelled as ADB2F404.571
! characteristic ADB2F404.572
! dimension for ADB2F404.573
! generality to cover ADB2F404.574
! parametrizations ADB2F404.575
! of non-spherical ADB2F404.576
! ice. ADB2F404.577
! (J. M. Edwards) ADB2F404.578
! 4.5 18-05-98 Removal of test ADB1F405.307
! for deleted cloud ADB1F405.308
! scheme. ADB1F405.309
! (J. M. Edwards) ADB1F405.310
!LL 4.5 27/04/98 Add Fujitsu vectorization directive. GRB0F405.138
!LL RBarnes@ecmwf.int GRB0F405.139
! GREYK3A.20
! Description of Code: GREYK3A.21
! FORTRAN 77 with extensions listed in documentation. GREYK3A.22
! GREYK3A.23
!- --------------------------------------------------------------------- GREYK3A.24
! Fujitsu directive to encourage vectorization for whole routine GRB0F405.140
!OCL NOVREC GRB0F405.141
SUBROUTINE GREY_EXTINCTION(IERR 1,4GREYK3A.25
& , N_PROFILE, N_LAYER, L_LAYER, P, T, DENSITY GREYK3A.26
& , L_RESCALE GREYK3A.27
& , L_RAYLEIGH, RAYLEIGH_COEFF GREYK3A.28
& , L_CONTINUUM, N_CONTINUUM, I_CONTINUUM_POINTER, K_CONTINUUM GREYK3A.29
& , AMOUNT_CONTINUUM GREYK3A.30
& , L_AEROSOL, N_AEROSOL, AEROSOL_MIX_RATIO GREYK3A.31
& , I_AEROSOL_PARAMETRIZATION GREYK3A.32
& , I_HUMIDITY_POINTER, HUMIDITIES, DELTA_HUMIDITY GREYK3A.33
& , MEAN_REL_HUMIDITY GREYK3A.34
& , AEROSOL_ABSORPTION, AEROSOL_SCATTERING, AEROSOL_ASYMMETRY GREYK3A.35
& , L_CLOUD, N_CLOUD_PROFILE, I_CLOUD_PROFILE, N_CLOUD_TOP GREYK3A.36
& , L_CLOUD_LAYER, I_CLOUD GREYK3A.37
& , N_CONDENSED, L_CLOUD_CMP, I_PHASE_CMP GREYK3A.38
& , I_CONDENSED_PARAM, CONDENSED_PARAM_LIST GREYK3A.39
& , CONDENSED_MIX_RATIO, CONDENSED_DIM_CHAR ADB2F404.579
& , N_CLOUD_TYPE, I_CLOUD_TYPE GREYK3A.41
& , K_EXT_TOT_FREE, K_EXT_SCAT_FREE, ASYMMETRY_FREE GREYK3A.42
& , FORWARD_SCATTER_FREE GREYK3A.43
& , K_EXT_TOT_CLOUD, K_EXT_SCAT_CLOUD GREYK3A.44
& , ASYMMETRY_CLOUD, FORWARD_SCATTER_CLOUD GREYK3A.45
& , NPD_PROFILE, NPD_LAYER, NPD_CONTINUUM GREYK3A.46
& , NPD_AEROSOL_SPECIES, NPD_HUMIDITIES GREYK3A.47
& , NPD_CLOUD_PARAMETER GREYK3A.48
& ) GREYK3A.49
! GREYK3A.50
! GREYK3A.51
! GREYK3A.52
IMPLICIT NONE GREYK3A.53
! GREYK3A.54
! GREYK3A.55
INTEGER !, INTENT(IN) GREYK3A.56
& NPD_PROFILE GREYK3A.57
! MAXIMUM NUMBER OF PROFILES GREYK3A.58
& , NPD_LAYER GREYK3A.59
! MAXIMUM NUMBER OF LAYERS GREYK3A.60
& , NPD_AEROSOL_SPECIES GREYK3A.61
! MAXIMUM NUMBER OF AEROSOLS GREYK3A.62
& , NPD_HUMIDITIES GREYK3A.63
! MAXIMUM NUMBER OF HUMIDITIES GREYK3A.64
& , NPD_CONTINUUM GREYK3A.65
! MAXIMUM NUMBER OF CONTINUA GREYK3A.66
& , NPD_CLOUD_PARAMETER GREYK3A.67
! MAXIMUM NUMBER OF CLOUD PARAMETERS GREYK3A.68
! GREYK3A.69
! INCLUDE COMDECKS GREYK3A.70
*CALL STDIO3A
GREYK3A.71
*CALL DIMFIX3A
GREYK3A.72
*CALL PRMCH3A
GREYK3A.73
*CALL PRECSN3A
GREYK3A.74
*CALL AERPRM3A
GREYK3A.75
*CALL CLSCHM3A
GREYK3A.76
*CALL PHASE3A
GREYK3A.77
*CALL ERROR3A
GREYK3A.78
! GREYK3A.79
! GREYK3A.80
! GREYK3A.81
! DUMMY ARGUMENTS. GREYK3A.82
INTEGER !, INTENT(OUT) GREYK3A.83
& IERR GREYK3A.84
! ERROR FLAG GREYK3A.85
! GREYK3A.86
! GREYK3A.87
! BASIC ATMOSPHERIC PROPERTIES: GREYK3A.88
! GREYK3A.89
LOGICAL !, INTENT(IN) GREYK3A.90
& L_LAYER GREYK3A.91
! VARIABLES GIVEN IN LAYERS GREYK3A.92
! GREYK3A.93
INTEGER !, INTENT(IN) GREYK3A.94
& N_PROFILE GREYK3A.95
! NUMBER OF PROFILES GREYK3A.96
& , N_LAYER GREYK3A.97
! NUMBER OF LAYERS GREYK3A.98
! GREYK3A.99
REAL !, INTENT(IN) GREYK3A.100
& P(NPD_PROFILE, 0: NPD_LAYER) GREYK3A.101
! PRESSURE GREYK3A.102
& , T(NPD_PROFILE, 0: NPD_LAYER) GREYK3A.103
! TEMPERATURE GREYK3A.104
& , DENSITY(NPD_PROFILE, 0: NPD_LAYER) GREYK3A.105
! DENSITY AT LEVELS GREYK3A.106
! GREYK3A.107
! GREYK3A.108
! OPTICAL SWITCHES: GREYK3A.109
LOGICAL !, INTENT(IN) GREYK3A.110
& L_RESCALE GREYK3A.111
! DELTA-RESCALING REQUIRED GREYK3A.112
! GREYK3A.113
! GREYK3A.114
! RAYLEIGH SCATTERING: GREYK3A.115
! GREYK3A.116
LOGICAL !, INTENT(IN) GREYK3A.117
& L_RAYLEIGH GREYK3A.118
! RAYLEIGH SCATTERING ACTIVATED GREYK3A.119
! GREYK3A.120
REAL !, INTENT(IN) GREYK3A.121
& RAYLEIGH_COEFF GREYK3A.122
! RAYLEIGH COEFFICIENT GREYK3A.123
! GREYK3A.124
! GREYK3A.125
! CONTINUUM PROCESSES: GREYK3A.126
LOGICAL !, INTENT(IN) GREYK3A.127
& L_CONTINUUM GREYK3A.128
! CONTINUUM ABSORPTION ACTIVATED GREYK3A.129
! GREYK3A.130
INTEGER !, INTENT(IN) GREYK3A.131
& N_CONTINUUM GREYK3A.132
! NUMBER OF CONTINUA GREYK3A.133
& , I_CONTINUUM_POINTER(NPD_CONTINUUM) GREYK3A.134
! POINTERS TO ACTIVE CONTINUA GREYK3A.135
! GREYK3A.136
REAL !, INTENT(IN) GREYK3A.137
& K_CONTINUUM(NPD_CONTINUUM) GREYK3A.138
! CONTINUUM EXTINCTION GREYK3A.139
& , AMOUNT_CONTINUUM(NPD_PROFILE, 0: NPD_LAYER, NPD_CONTINUUM) ADB2F404.580
! AMOUNTS FOR CONTINUA GREYK3A.142
! GREYK3A.143
! GREYK3A.144
! PROPERTIES OF AEROSOLS: GREYK3A.145
! GREYK3A.146
LOGICAL !, INTENT(IN) GREYK3A.147
& L_AEROSOL GREYK3A.148
! AEROSOLS ACTIVATED GREYK3A.149
! GREYK3A.150
INTEGER !, INTENT(IN) GREYK3A.151
& N_AEROSOL GREYK3A.152
! NUMBER OF AEROSOL SPECIES GREYK3A.153
& , I_AEROSOL_PARAMETRIZATION(NPD_AEROSOL_SPECIES) GREYK3A.154
! PARAMETRIZATIONS OF AEROSOLS GREYK3A.155
& , I_HUMIDITY_POINTER(NPD_PROFILE, NPD_LAYER) GREYK3A.156
! POINTER TO AEROSOL LOOK-UP TABLE GREYK3A.157
! GREYK3A.158
REAL !, INTENT(IN) GREYK3A.159
& AEROSOL_MIX_RATIO(NPD_PROFILE, 0: NPD_LAYER GREYK3A.160
& , NPD_AEROSOL_SPECIES) GREYK3A.161
! NUMBER DENSTY OF AEROSOLS GREYK3A.162
& , AEROSOL_ABSORPTION(NPD_HUMIDITIES, NPD_AEROSOL_SPECIES) GREYK3A.163
! AEROSOL ABSORPTION IN BAND/MIX RT. GREYK3A.164
& , AEROSOL_SCATTERING(NPD_HUMIDITIES, NPD_AEROSOL_SPECIES) GREYK3A.165
! AEROSOL SCATTERING IN BAND/MIX RT. GREYK3A.166
& , AEROSOL_ASYMMETRY(NPD_HUMIDITIES, NPD_AEROSOL_SPECIES) GREYK3A.167
! AEROSOL ASYMMETRY IN BAND GREYK3A.168
& , HUMIDITIES(NPD_HUMIDITIES, NPD_AEROSOL_SPECIES) GREYK3A.169
! ARRAY OF HUMIDITIES GREYK3A.170
& , DELTA_HUMIDITY GREYK3A.171
! INCREMENT IN HUMIDITY GREYK3A.172
& , MEAN_REL_HUMIDITY(NPD_PROFILE, NPD_LAYER) GREYK3A.173
! MIXING RATIO OF WATER VAPOUR GREYK3A.174
! GREYK3A.175
! GREYK3A.176
! GREYK3A.177
! PROPERTIES OF CLOUDS: GREYK3A.178
! GREYK3A.179
LOGICAL !, INTENT(IN) GREYK3A.180
& L_CLOUD GREYK3A.181
! CLOUDS ACTIVATED GREYK3A.182
! GREYK3A.183
! GEOMETRY OF CLOUDS: GREYK3A.184
! GREYK3A.185
LOGICAL !, INTENT(IN) GREYK3A.186
& L_CLOUD_LAYER GREYK3A.187
! CLOUD VARIABLES GIVEN IN LAYERS GREYK3A.188
! GREYK3A.189
INTEGER !, INTENT(IN) GREYK3A.190
& N_CLOUD_TOP GREYK3A.191
! TOPMOST CLOUDY LAYER GREYK3A.192
& , I_CLOUD GREYK3A.193
! CLOUD SCHEME TO BE USED GREYK3A.194
& , N_CLOUD_TYPE GREYK3A.195
! NUMBER OF TYPES OF CLOUDS ADB1F401.477
& , N_CLOUD_PROFILE(NPD_LAYER) GREYK3A.197
! NUMBER OF CLOUDY PROFILES IN EACH LAYER GREYK3A.198
& , I_CLOUD_PROFILE(NPD_PROFILE, NPD_LAYER) GREYK3A.199
! PROFILES CONTAINING CLOUDS GREYK3A.200
& , I_CLOUD_TYPE(NPD_CLOUD_COMPONENT) GREYK3A.201
! TYPES OF CLOUD TO WHICH EACH COMPONENT CONTRIBUTES GREYK3A.202
! GREYK3A.203
! MICROPHYSICAL QUANTITIES: GREYK3A.204
INTEGER !, INTENT(IN) GREYK3A.205
& N_CONDENSED GREYK3A.206
! NUMBER OF CONDENSED COMPONENTS GREYK3A.207
& , I_PHASE_CMP(NPD_CLOUD_COMPONENT) GREYK3A.208
! PHASES OF CLOUDY COMPONENTS GREYK3A.209
& , I_CONDENSED_PARAM(NPD_CLOUD_COMPONENT) GREYK3A.210
! PARAMETRIZATION SCHEMES FOR CLOUDY COMPONENTS GREYK3A.211
! GREYK3A.212
LOGICAL !, INTENT(IN) GREYK3A.213
& L_CLOUD_CMP(NPD_CLOUD_COMPONENT) GREYK3A.214
! FLAGS TO ACTIVATE CLOUDY COMPONENTS GREYK3A.215
! GREYK3A.216
REAL !, INTENT(IN) GREYK3A.217
& CONDENSED_PARAM_LIST(NPD_CLOUD_PARAMETER GREYK3A.218
& , NPD_CLOUD_COMPONENT) GREYK3A.219
! COEFFICIENTS IN PARAMETRIZATION SCHEMES GREYK3A.220
& , CONDENSED_MIX_RATIO(NPD_PROFILE, 0: NPD_LAYER GREYK3A.221
& , NPD_CLOUD_COMPONENT) GREYK3A.222
! MIXING RATIOS OF CLOUDY COMPONENTS GREYK3A.223
& , CONDENSED_DIM_CHAR(NPD_PROFILE, 0: NPD_LAYER ADB2F404.581
& , NPD_CLOUD_COMPONENT) ADB2F404.582
! EFFECTIVE RADII OF CLOUDY COMPONENTS GREYK3A.225
! GREYK3A.226
! GREYK3A.227
! GREYK3A.228
! CALCULATED OPTICAL PROPETIES: GREYK3A.229
! GREYK3A.230
REAL !, INTENT(OUT) GREYK3A.231
& K_EXT_SCAT_FREE(NPD_PROFILE, NPD_LAYER) GREYK3A.232
! FREE SCATTERING EXTINCTION GREYK3A.233
& , K_EXT_TOT_FREE(NPD_PROFILE, NPD_LAYER) GREYK3A.234
! TOTAL FREE EXTINCTION GREYK3A.235
& , ASYMMETRY_FREE(NPD_PROFILE, NPD_LAYER) GREYK3A.236
! FREE ASYMMETRIES GREYK3A.237
& , FORWARD_SCATTER_FREE(NPD_PROFILE, NPD_LAYER) GREYK3A.238
! FREE FORWARD SCATTERING GREYK3A.239
& , K_EXT_SCAT_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE) GREYK3A.240
! CLOUDY SCATTERING EXTINCTION GREYK3A.241
& , K_EXT_TOT_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE) GREYK3A.242
! TOTAL CLOUDY EXTINCTION GREYK3A.243
& , ASYMMETRY_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE) GREYK3A.244
! CLOUDY ASYMMETRIES GREYK3A.245
& , FORWARD_SCATTER_CLOUD(NPD_PROFILE, NPD_LAYER, NPD_CLOUD_TYPE) GREYK3A.246
! CLOUDY FORWARD SCATTERING GREYK3A.247
! GREYK3A.248
! GREYK3A.249
! GREYK3A.250
! LOCAL VARIABLES. GREYK3A.251
INTEGER GREYK3A.252
& I_CONTINUUM GREYK3A.253
! TEMPORARY CONTINUUM INDEX GREYK3A.254
& , I_POINTER GREYK3A.255
! TEMPORARY POINTER GREYK3A.256
& , L GREYK3A.257
! LOOP VARIABLE GREYK3A.258
& , LL GREYK3A.259
! LOOP VARIABLE GREYK3A.260
& , I GREYK3A.261
! LOOP VARIABLE GREYK3A.262
& , J GREYK3A.263
! LOOP VARIABLE GREYK3A.264
& , K GREYK3A.265
! LOOP VARIABLE GREYK3A.266
& , N_INDEX GREYK3A.267
! NUMBER OF INDICES SATISFYING TEST GREYK3A.268
& , INDEX(NPD_PROFILE) GREYK3A.269
! INDICES OF TESTED POINTS GREYK3A.270
! GREYK3A.271
! TEMPORARY OPTICAL PROPERTIES: GREYK3A.272
! GREYK3A.273
REAL GREYK3A.274
& K_EXT_SCAT_CLOUD_COMP(NPD_PROFILE, NPD_LAYER) GREYK3A.275
! SCATTERING EXTINCTION OF CLOUDY COMPONENT GREYK3A.276
& , K_EXT_TOT_CLOUD_COMP(NPD_PROFILE, NPD_LAYER) GREYK3A.277
! TOTAL EXTINCTION OF CLOUDY COMPONENT GREYK3A.278
& , ASYMMETRY_CLOUD_COMP(NPD_PROFILE, NPD_LAYER) GREYK3A.279
! ASYMMETRIES OF CLOUDY COMPONENT GREYK3A.280
& , FORWARD_SCATTER_CLOUD_COMP(NPD_PROFILE, NPD_LAYER) GREYK3A.281
! FORWARD SCATTERING OF CLOUDY COMPONENT GREYK3A.282
& , K_SCATTER(NPD_PROFILE) GREYK3A.283
! SCATTERING VARIABLE GREYK3A.284
& , ASYMMETRY_PROCESS(NPD_PROFILE) GREYK3A.285
! ASYMMETRY FACTOR FOR CURRENT PROC. GREYK3A.286
! GREYK3A.287
! GREYK3A.288
REAL GREYK3A.289
& WEIGHT_UPPER GREYK3A.290
! UPPER WEIGHT FOR INTERPOLATION GREYK3A.291
& , WEIGHT_LOWER GREYK3A.292
! LOWER WEIGHT FOR INTERPOLATION GREYK3A.293
! GREYK3A.294
! SUBROUTINES CALLED: GREYK3A.295
EXTERNAL GREYK3A.296
& OPT_PROP_WATER_CLOUD, OPT_PROP_ICE_CLOUD GREYK3A.297
! GREYK3A.299
! CRAY DIRECTIVES FOR THE WHOLE ROUTINE: ADB1F402.480
! POINTS ARE NOT REPEATED IN THE INDEXING ARRAY, SO IT IS SAFE ADB1F402.481
! TO VECTORIZE OVER INDIRECTLY ADDRESSED ARRAYS. ADB1F402.482
Cfpp$ NODEPCHK R ADB1F402.483
! ADB1F402.484
! GREYK3A.300
! GREYK3A.301
! INITIALIZE THE EXTINCTION COEFFICIENTS AND THE ASYMMETRY PRODUCT. GREYK3A.302
DO I=1, N_LAYER GREYK3A.303
DO L=1, N_PROFILE GREYK3A.304
K_EXT_TOT_FREE(L, I)=0.0E+00 GREYK3A.305
K_EXT_SCAT_FREE(L, I)=0.0E+00 GREYK3A.306
ASYMMETRY_FREE(L, I)=0.0E+00 GREYK3A.307
ENDDO GREYK3A.308
ENDDO GREYK3A.309
! FORWARD SCATTERING IS REQUIRED ONLY IN THE VISIBLE WHERE GREYK3A.310
! DELTA-RESCALING IS PERFORMED. GREYK3A.311
IF (L_RESCALE) THEN GREYK3A.312
DO I=1, N_LAYER GREYK3A.313
DO L=1, N_PROFILE GREYK3A.314
FORWARD_SCATTER_FREE(L, I)=0.0E+00 GREYK3A.315
ENDDO GREYK3A.316
ENDDO GREYK3A.317
ENDIF GREYK3A.318
! GREYK3A.319
IF (L_RAYLEIGH) THEN GREYK3A.320
! INCLUDE RAYLEIGH SCATTERING. GREYK3A.321
DO I=1, N_LAYER GREYK3A.322
DO L=1, N_PROFILE GREYK3A.323
K_EXT_SCAT_FREE(L, I) GREYK3A.324
& =K_EXT_SCAT_FREE(L, I)+RAYLEIGH_COEFF GREYK3A.325
ENDDO GREYK3A.326
ENDDO GREYK3A.327
ENDIF GREYK3A.328
! GREYK3A.329
IF (L_AEROSOL) THEN GREYK3A.330
! INCLUDE THE EFFECTS OF AEROSOL. GREYK3A.331
DO J=1, N_AEROSOL GREYK3A.332
IF (I_AEROSOL_PARAMETRIZATION(J) GREYK3A.333
& .EQ.IP_AEROSOL_PARAM_DRY) THEN GREYK3A.334
DO I=1, N_LAYER GREYK3A.335
DO L=1, N_PROFILE GREYK3A.336
K_EXT_TOT_FREE(L, I)=K_EXT_TOT_FREE(L, I) GREYK3A.337
& +AEROSOL_MIX_RATIO(L, I, J) GREYK3A.338
& *AEROSOL_ABSORPTION(1, J) GREYK3A.339
K_SCATTER(L)=AEROSOL_MIX_RATIO(L, I, J) GREYK3A.340
& *AEROSOL_SCATTERING(1, J) GREYK3A.341
K_EXT_SCAT_FREE(L, I)=K_EXT_SCAT_FREE(L, I) GREYK3A.342
& +K_SCATTER(L) GREYK3A.343
ASYMMETRY_FREE(L, I)=ASYMMETRY_FREE(L, I) GREYK3A.344
& +K_SCATTER(L)*AEROSOL_ASYMMETRY(1, J) GREYK3A.345
ENDDO GREYK3A.346
IF (L_RESCALE) THEN GREYK3A.347
! THIS BLOCK IS PLACED WITHIN THE LOOP OVER I TO SAVE GREYK3A.348
! STORAGE. THE COST OF RE-EXECUTING THE TEST IS QUITE GREYK3A.349
! SMALL. GREYK3A.350
DO L=1, N_PROFILE GREYK3A.351
FORWARD_SCATTER_FREE(L, I) GREYK3A.352
& =FORWARD_SCATTER_FREE(L, I)+K_SCATTER(L) GREYK3A.353
& *(AEROSOL_ASYMMETRY(1, J))**2 GREYK3A.354
ENDDO GREYK3A.355
ENDIF GREYK3A.356
ENDDO GREYK3A.357
ELSE IF (I_AEROSOL_PARAMETRIZATION(J) GREYK3A.358
& .EQ.IP_AEROSOL_PARAM_MOIST) THEN GREYK3A.359
DO I=1, N_LAYER GREYK3A.360
! Optimizer precomputes 1/DELTA_HUMIDITY and causes zero divide, so:- GRB0F405.142
!OCL NOPREEX,NOEVAL GRB0F405.143
DO L=1, N_PROFILE GREYK3A.361
I_POINTER=I_HUMIDITY_POINTER(L, I) GREYK3A.362
WEIGHT_UPPER=(MEAN_REL_HUMIDITY(L, I) GREYK3A.363
& -HUMIDITIES(I_POINTER, J)) GREYK3A.364
& /DELTA_HUMIDITY GREYK3A.365
WEIGHT_LOWER=1.0E+00-WEIGHT_UPPER GREYK3A.366
K_EXT_TOT_FREE(L, I)=K_EXT_TOT_FREE(L, I) GREYK3A.367
& +AEROSOL_MIX_RATIO(L, I, J) GREYK3A.368
& *(AEROSOL_ABSORPTION(I_POINTER, J) GREYK3A.369
& *WEIGHT_LOWER+WEIGHT_UPPER GREYK3A.370
& *AEROSOL_ABSORPTION(I_POINTER+1, J)) GREYK3A.371
K_SCATTER(L)= GREYK3A.372
& AEROSOL_MIX_RATIO(L, I, J) GREYK3A.373
& *(AEROSOL_SCATTERING(I_POINTER, J) GREYK3A.374
& *WEIGHT_LOWER+WEIGHT_UPPER GREYK3A.375
& *AEROSOL_SCATTERING(I_POINTER+1, J)) GREYK3A.376
K_EXT_SCAT_FREE(L, I)=K_EXT_SCAT_FREE(L, I) GREYK3A.377
& +K_SCATTER(L) GREYK3A.378
ASYMMETRY_PROCESS(L)= GREYK3A.379
& AEROSOL_ASYMMETRY(I_POINTER, J) GREYK3A.380
& *WEIGHT_LOWER+WEIGHT_UPPER GREYK3A.381
& *AEROSOL_ASYMMETRY(I_POINTER+1, J) GREYK3A.382
ASYMMETRY_FREE(L, I)=ASYMMETRY_FREE(L, I) GREYK3A.383
& +K_SCATTER(L)*ASYMMETRY_PROCESS(L) GREYK3A.384
ENDDO GREYK3A.385
IF (L_RESCALE) THEN GREYK3A.386
DO L=1, N_PROFILE GREYK3A.387
FORWARD_SCATTER_FREE(L, I) GREYK3A.388
& =FORWARD_SCATTER_FREE(L, I)+K_SCATTER(L) GREYK3A.389
& *(ASYMMETRY_PROCESS(L))**2 GREYK3A.390
ENDDO GREYK3A.391
ENDIF GREYK3A.392
ENDDO GREYK3A.393
ELSE ADB1F401.478
WRITE(IU_ERR, '(/A, I3, A)') ADB1F401.479
& '*** ERROR : I_AEROSOL_PARAMETRIZATION FOR SPECIES ' ADB1F401.480
& , J, ' HAS BEEN SET TO AN ILLEGAL VALUE.' ADB1F401.481
IERR=I_ERR_FATAL ADB1F401.482
RETURN ADB1F401.483
GREYK3A.400
ENDIF GREYK3A.401
ENDDO GREYK3A.402
ENDIF GREYK3A.403
! GREYK3A.404
IF (L_CONTINUUM) THEN GREYK3A.405
! INCLUDE CONTINUUM ABSORPTION. GREYK3A.406
DO J=1, N_CONTINUUM GREYK3A.407
I_CONTINUUM=I_CONTINUUM_POINTER(J) GREYK3A.408
DO I=1, N_LAYER GREYK3A.409
DO L=1, N_PROFILE GREYK3A.410
K_EXT_TOT_FREE(L, I)=K_EXT_TOT_FREE(L, I) GREYK3A.411
& +K_CONTINUUM(I_CONTINUUM) GREYK3A.412
& *AMOUNT_CONTINUUM(L, I, I_CONTINUUM) GREYK3A.413
ENDDO GREYK3A.414
ENDDO GREYK3A.415
ENDDO GREYK3A.416
ENDIF GREYK3A.417
! GREYK3A.418
! GREYK3A.419
! ADD THE SCATTERING ON TO THE TOTAL EXTINCTION. THE FINAL FREE GREYK3A.420
! ASYMMETRY IS NOT CALCULATED HERE SINCE THE PRODUCT OF ASYMMETRY GREYK3A.421
! AND SCATTERING IS ALSO NEEDED TO CALCULATE THE CLOUDY ASYMMETRY. GREYK3A.422
DO I=1, N_LAYER GREYK3A.423
DO L=1, N_PROFILE GREYK3A.424
K_EXT_TOT_FREE(L, I)=K_EXT_TOT_FREE(L, I) GREYK3A.425
& +K_EXT_SCAT_FREE(L, I) GREYK3A.426
ENDDO GREYK3A.427
ENDDO GREYK3A.428
! GREYK3A.429
! GREYK3A.430
! IF THERE ARE NO CLOUDS CALCULATE THE FINAL OPTICAL PROPERTIES GREYK3A.431
! AND RETURN TO THE CALLING ROUTINE. GREYK3A.432
! GREYK3A.433
IF (.NOT.L_CLOUD) THEN GREYK3A.434
! GREYK3A.435
DO I=1, N_LAYER GREYK3A.436
DO L=1, N_PROFILE GREYK3A.437
IF (K_EXT_SCAT_FREE(L, I).GT.TOL_DIV) THEN GREYK3A.438
ASYMMETRY_FREE(L, I)=ASYMMETRY_FREE(L, I) GREYK3A.439
& /K_EXT_SCAT_FREE(L, I) GREYK3A.440
ENDIF GREYK3A.441
ENDDO GREYK3A.442
ENDDO GREYK3A.443
IF (L_RESCALE) THEN GREYK3A.444
DO I=1, N_LAYER GREYK3A.445
DO L=1, N_PROFILE GREYK3A.446
IF (K_EXT_SCAT_FREE(L, I).GT.TOL_DIV) THEN GREYK3A.447
FORWARD_SCATTER_FREE(L, I) GREYK3A.448
& =FORWARD_SCATTER_FREE(L, I) GREYK3A.449
& /K_EXT_SCAT_FREE(L, I) GREYK3A.450
ENDIF GREYK3A.451
ENDDO GREYK3A.452
ENDDO GREYK3A.453
! GREYK3A.454
ENDIF GREYK3A.455
! GREYK3A.456
RETURN GREYK3A.457
! GREYK3A.458
ENDIF GREYK3A.459
! GREYK3A.460
! GREYK3A.461
! GREYK3A.462
! GREYK3A.463
! ADDITION OF CLOUDY PROPERTIES: GREYK3A.464
! GREYK3A.465
! GREYK3A.466
! ADD IN BACKGROUND CONTIBUTIONS: GREYK3A.467
! GREYK3A.468
! GREYK3A.470
! ALL THE PROCESSES OCCURRING OUTSIDE CLOUDS ALSO OCCUR ADB1F405.311
! WITHIN THEM. ADB1F405.312
DO K=1, N_CLOUD_TYPE ADB1F405.313
DO I=1, N_LAYER ADB1F405.314
DO L=1, N_PROFILE ADB1F405.315
K_EXT_TOT_CLOUD(L, I, K)=K_EXT_TOT_FREE(L, I) ADB1F405.316
K_EXT_SCAT_CLOUD(L, I, K)=K_EXT_SCAT_FREE(L, I) ADB1F405.317
ASYMMETRY_CLOUD(L, I, K)=ASYMMETRY_FREE(L, I) ADB1F405.318
FORWARD_SCATTER_CLOUD(L, I, K) ADB1F405.319
& =FORWARD_SCATTER_FREE(L, I) ADB1F405.320
ENDDO GREYK3A.482
ENDDO GREYK3A.483
ENDDO ADB1F405.321
! GREYK3A.484
! GREYK3A.503
! GREYK3A.504
! ADD ON THE TERMS REPRESENTING PROCESSES WITHIN CLOUDS. GREYK3A.505
! GREYK3A.506
! LOOP OVER THE CONDENSED COMPONENTS, CALCULATING THEIR OPTICAL ADB1F401.484
! PROPERTIES AND THEN ASSIGN THEM TO THE ARRAYS FOR THE TYPES OF GREYK3A.508
! CLOUD. GREYK3A.509
! GREYK3A.510
DO K=1, N_CONDENSED GREYK3A.511
! GREYK3A.512
! FLAGS FOR DEALING WITH COMPONENTS WERE SET IN THE SUBROUTINE GREYK3A.513
! SET_CLOUD_POINTER. WE NOW DETERMINE WHETHER THE COMPONENT IS GREYK3A.514
! TO BE INCLUDED AND CALCULATE ITS OPTICAL PROPERTIES ACCORDING GREYK3A.515
! TO THE PHASE OF THE COMPONENT. THESE CONTRIBUTIONS ARE ADDED GREYK3A.516
! TO THE ARRAYS FOR THE SELECTED TYPE OF CLOUD. GREYK3A.517
! GREYK3A.518
IF (L_CLOUD_CMP(K)) THEN GREYK3A.519
! GREYK3A.520
IF (I_PHASE_CMP(K).EQ.IP_PHASE_WATER) THEN GREYK3A.521
! GREYK3A.522
! INCLUDE SCATTERING BY WATER DROPLETS. GREYK3A.523
! GREYK3A.524
CALL OPT_PROP_WATER_CLOUD
(IERR GREYK3A.525
& , N_PROFILE, N_LAYER, N_CLOUD_TOP GREYK3A.526
& , N_CLOUD_PROFILE, I_CLOUD_PROFILE GREYK3A.527
& , L_RESCALE, L_LAYER, L_CLOUD_LAYER GREYK3A.528
& , I_CONDENSED_PARAM(K), CONDENSED_PARAM_LIST(1, K) GREYK3A.529
& , CONDENSED_MIX_RATIO(1, 0, K) ADB2F404.583
& , CONDENSED_DIM_CHAR(1, 0, K) ADB2F404.584
& , K_EXT_TOT_CLOUD_COMP, K_EXT_SCAT_CLOUD_COMP GREYK3A.531
& , ASYMMETRY_CLOUD_COMP, FORWARD_SCATTER_CLOUD_COMP GREYK3A.532
& , NPD_PROFILE, NPD_LAYER GREYK3A.533
& , NPD_CLOUD_PARAMETER GREYK3A.534
& ) GREYK3A.535
! GREYK3A.536
ELSE IF (I_PHASE_CMP(K).EQ.IP_PHASE_ICE) THEN GREYK3A.537
! GREYK3A.538
! INCLUDE SCATTERING BY ICE CRYSTALS. GREYK3A.539
! GREYK3A.540
CALL OPT_PROP_ICE_CLOUD
(IERR GREYK3A.541
& , N_PROFILE, N_LAYER, N_CLOUD_TOP GREYK3A.542
& , N_CLOUD_PROFILE, I_CLOUD_PROFILE GREYK3A.543
& , L_RESCALE, L_LAYER, L_CLOUD_LAYER GREYK3A.544
& , I_CONDENSED_PARAM(K), CONDENSED_PARAM_LIST(1, K) GREYK3A.545
& , CONDENSED_MIX_RATIO(1, 0, K) ADB2F404.585
& , CONDENSED_DIM_CHAR(1, 0, K) ADB2F404.586
& , T, DENSITY GREYK3A.547
& , K_EXT_TOT_CLOUD_COMP, K_EXT_SCAT_CLOUD_COMP GREYK3A.548
& , ASYMMETRY_CLOUD_COMP, FORWARD_SCATTER_CLOUD_COMP GREYK3A.549
& , NPD_PROFILE, NPD_LAYER GREYK3A.550
& , NPD_CLOUD_PARAMETER GREYK3A.551
& ) GREYK3A.552
! GREYK3A.553
ENDIF GREYK3A.554
! GREYK3A.555
! GREYK3A.556
! GREYK3A.557
! INCREMENT THE ARRAYS OF OPTICAL PROPERTIES. GREYK3A.558
! GREYK3A.559
! GREYK3A.560
DO I=N_CLOUD_TOP, N_LAYER GREYK3A.561
DO LL=1, N_CLOUD_PROFILE(I) GREYK3A.562
L=I_CLOUD_PROFILE(LL, I) GREYK3A.563
K_EXT_TOT_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.564
& =K_EXT_TOT_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.565
& +K_EXT_TOT_CLOUD_COMP(L, I) GREYK3A.566
K_EXT_SCAT_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.567
& =K_EXT_SCAT_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.568
& +K_EXT_SCAT_CLOUD_COMP(L, I) GREYK3A.569
ASYMMETRY_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.570
& =ASYMMETRY_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.571
& +ASYMMETRY_CLOUD_COMP(L, I) GREYK3A.572
ENDDO GREYK3A.573
ENDDO GREYK3A.574
IF (L_RESCALE) THEN GREYK3A.575
DO I=N_CLOUD_TOP, N_LAYER GREYK3A.576
DO LL=1, N_CLOUD_PROFILE(I) GREYK3A.577
L=I_CLOUD_PROFILE(LL, I) GREYK3A.578
FORWARD_SCATTER_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.579
& =FORWARD_SCATTER_CLOUD(L, I, I_CLOUD_TYPE(K)) GREYK3A.580
& +FORWARD_SCATTER_CLOUD_COMP(L, I) GREYK3A.581
ENDDO GREYK3A.582
ENDDO GREYK3A.583
ENDIF GREYK3A.584
! GREYK3A.585
ENDIF GREYK3A.586
! GREYK3A.587
ENDDO GREYK3A.588
! GREYK3A.589
! GREYK3A.590
! GREYK3A.591
! GREYK3A.592
! CALCULATE THE FINAL OPTICAL PROPERTIES. GREYK3A.593
! THE SCATTERING WAS INCLUDED IN THE FREE TOTAL EXTINCTION EARLIER, GREYK3A.594
! BUT WE HAVE YET TO DIVIDE THE PRODUCT OF THE ASYMMETRY AND THE GREYK3A.595
! SCATTERING BY THE MEAN SCATTERING. GREYK3A.596
! GREYK3A.597
DO I=1, N_LAYER GREYK3A.598
! GREYK3A.599
N_INDEX=0 GSS2F402.199
DO L =1,N_PROFILE GSS2F402.200
IF (K_EXT_SCAT_FREE(L,I).GT.TOL_DIV) THEN GSS2F402.201
N_INDEX =N_INDEX+1 GSS2F402.202
INDEX(N_INDEX)=L GSS2F402.203
END IF GSS2F402.204
END DO GSS2F402.205
! GSS2F402.206
DO K=1, N_INDEX GREYK3A.602
ASYMMETRY_FREE(INDEX(K), I)=ASYMMETRY_FREE(INDEX(K), I) GREYK3A.603
& /K_EXT_SCAT_FREE(INDEX(K), I) GREYK3A.604
ENDDO GREYK3A.605
! GREYK3A.606
IF (L_RESCALE) THEN GREYK3A.607
DO K=1, N_INDEX GREYK3A.608
FORWARD_SCATTER_FREE(INDEX(K), I) GREYK3A.609
& =FORWARD_SCATTER_FREE(INDEX(K), I) GREYK3A.610
& /K_EXT_SCAT_FREE(INDEX(K), I) GREYK3A.611
ENDDO GREYK3A.612
ENDIF GREYK3A.613
ENDDO GREYK3A.614
! GREYK3A.615
! GREYK3A.616
! REPEAT FOR CLOUDS. GREYK3A.617
DO K=1, N_CLOUD_TYPE GREYK3A.618
DO I=N_CLOUD_TOP, N_LAYER GREYK3A.619
! GSS2F402.207
J =1 GSS2F402.211
N_INDEX=0 GSS2F402.212
DO L =1,N_PROFILE GSS2F402.213
IF (K_EXT_SCAT_CLOUD(L,I,K).GT.TOL_DIV) THEN GSS2F402.214
INDEX(J)=L GSS2F402.215
J =J+1 GSS2F402.216
N_INDEX =N_INDEX+1 GSS2F402.217
END IF GSS2F402.218
END DO GSS2F402.219
GSS2F402.220
DO J=1, N_INDEX GREYK3A.622
ASYMMETRY_CLOUD(INDEX(J), I, K) GREYK3A.623
& =ASYMMETRY_CLOUD(INDEX(J), I, K) GREYK3A.624
& /K_EXT_SCAT_CLOUD(INDEX(J), I, K) GREYK3A.625
ENDDO GREYK3A.626
IF (L_RESCALE) THEN GREYK3A.627
DO J=1, N_INDEX GREYK3A.628
FORWARD_SCATTER_CLOUD(INDEX(J), I, K) GREYK3A.629
& =FORWARD_SCATTER_CLOUD(INDEX(J), I, K) GREYK3A.630
& /K_EXT_SCAT_CLOUD(INDEX(J), I, K) GREYK3A.631
ENDDO GREYK3A.632
ENDIF GREYK3A.633
ENDDO GREYK3A.634
ENDDO GREYK3A.635
! GREYK3A.636
! GREYK3A.637
! GREYK3A.638
! GREYK3A.639
RETURN GREYK3A.640
END GREYK3A.641
*ENDIF DEF,A01_3A,OR,DEF,A02_3A GREYK3A.642
*ENDIF DEF,A70_1A ADB1F402.32