*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.19
*IF DEF,A01_3A,OR,DEF,A02_3A DIAG3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13212
C GTS2F400.13213
C Use, duplication or disclosure of this code is subject to the GTS2F400.13214
C restrictions as set forth in the contract. GTS2F400.13215
C GTS2F400.13216
C Meteorological Office GTS2F400.13217
C London Road GTS2F400.13218
C BRACKNELL GTS2F400.13219
C Berkshire UK GTS2F400.13220
C RG12 2SZ GTS2F400.13221
C GTS2F400.13222
C If no contract has been raised with this copy of the code, the use, GTS2F400.13223
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13224
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13225
C Modelling at the above address. GTS2F400.13226
C ******************************COPYRIGHT****************************** GTS2F400.13227
C GTS2F400.13228
!+ Subroutine to zero an array. DIAG3A.3
! DIAG3A.4
! Purpose: DIAG3A.5
! The routine fills a 1-dimensional array with zeros. DIAG3A.6
! DIAG3A.7
! Method: DIAG3A.8
! Straightforward. DIAG3A.9
! DIAG3A.10
! Current Owner of Code: J. M. Edwards DIAG3A.11
! DIAG3A.12
! History: DIAG3A.13
! Version Date Comment DIAG3A.14
! 4.0 27-07-95 Original Code DIAG3A.15
! (J. M. Edwards) DIAG3A.16
! DIAG3A.17
! Description of Code: DIAG3A.18
! FORTRAN 77 with extensions listed in documentation. DIAG3A.19
! DIAG3A.20
!- --------------------------------------------------------------------- DIAG3A.21
SUBROUTINE R2_ZERO_1D(N, X) 30DIAG3A.22
! DIAG3A.23
! DIAG3A.24
! DIAG3A.25
IMPLICIT NONE DIAG3A.26
! DIAG3A.27
! DIAG3A.28
! DUMMY ARGUMENTS DIAG3A.29
INTEGER !, INTENT(IN) DIAG3A.30
& N DIAG3A.31
! LENGTH OF ARRAY DIAG3A.32
REAL !, INTENT(OUT) DIAG3A.33
& X(N) DIAG3A.34
! ARRAY TO BE ZEROED DIAG3A.35
! DIAG3A.36
! LOCAL VARIABLES DIAG3A.37
INTEGER DIAG3A.38
& I DIAG3A.39
! LOOP VARIABLE DIAG3A.40
! DIAG3A.41
! DIAG3A.42
! DIAG3A.43
DO I=1, N DIAG3A.44
X(I)=0.0E+00 DIAG3A.45
ENDDO DIAG3A.46
! DIAG3A.47
! DIAG3A.48
! DIAG3A.49
RETURN DIAG3A.50
END DIAG3A.51
!+ Subroutine to initialize diagnostics and coupling arrays. DIAG3A.52
! DIAG3A.53
! Purpose: DIAG3A.54
! The coupling and diagnostic arrays are zeroed. DIAG3A.55
! DIAG3A.56
! Method: DIAG3A.57
! Straightforward. DIAG3A.58
! DIAG3A.59
! Current Owner of Code: J. M. Edwards DIAG3A.60
! DIAG3A.61
! History: DIAG3A.62
! Version Date Comment DIAG3A.63
! 4.0 27-07-95 Original Code DIAG3A.64
! (J. M. Edwards) DIAG3A.65
! DIAG3A.66
! Description of Code: DIAG3A.67
! FORTRAN 77 with extensions listed in documentation. DIAG3A.68
! DIAG3A.69
!- --------------------------------------------------------------------- DIAG3A.70
SUBROUTINE R2_INIT_COUPLE_DIAG(N_PROFILE 1,5DIAG3A.71
& , SEA_FLUX DIAG3A.72
& , L_SURFACE_DOWN_FLUX, SURFACE_DOWN_FLUX DIAG3A.73
& , L_SURF_DOWN_CLR, SURF_DOWN_CLR DIAG3A.74
& , L_SURF_UP_CLR, SURF_UP_CLR DIAG3A.75
& , L_FLUX_BELOW_690NM_SURF, FLUX_BELOW_690NM_SURF DIAG3A.76
& , NPD_PROFILE DIAG3A.77
& ) DIAG3A.78
! DIAG3A.79
! DIAG3A.80
! DIAG3A.81
IMPLICIT NONE DIAG3A.82
! DIAG3A.83
! DIAG3A.84
! DUMMY ARGUMENTS DIAG3A.85
! DIAG3A.86
! DIMENSIONS OF ARRAYS DIAG3A.87
INTEGER !, INTENT(IN) DIAG3A.88
& NPD_PROFILE DIAG3A.89
! MAXIMUM NUMBER OF ATMOSPHERIC PROFILES DIAG3A.90
! DIAG3A.91
INTEGER !, INTENT(IN) DIAG3A.92
& N_PROFILE DIAG3A.93
! NUMBER OF ATMOSPHERIC PROFILES DIAG3A.94
! DIAG3A.95
! SWITCHES FOR DIAGNOSTICS: DIAG3A.96
LOGICAL !, INTENT(IN) DIAG3A.97
& L_FLUX_BELOW_690NM_SURF DIAG3A.98
! FLUX BELOW 690NM AT SURFACE TO BE CALCULATED DIAG3A.99
& , L_SURFACE_DOWN_FLUX DIAG3A.100
! DOWNWARD SURFACE FLUX REQUIRED DIAG3A.101
& , L_SURF_DOWN_CLR DIAG3A.102
! CALCULATE DOWNWARD CLEAR FLUX DIAG3A.103
& , L_SURF_UP_CLR DIAG3A.104
! CALCULATE UPWARD CLEAR FLUX DIAG3A.105
! DIAG3A.106
! SURFACE FLUXES FOR COUPLING OR DIAGNOSTIC USE DIAG3A.107
REAL !, INTENT(OUT) DIAG3A.108
& SEA_FLUX(NPD_PROFILE) DIAG3A.109
! NET DOWNWARD FLUX INTO SEA DIAG3A.110
& , SURFACE_DOWN_FLUX(NPD_PROFILE) DIAG3A.111
! DOWNWARD FLUX AT SURFACE DIAG3A.112
& , SURF_DOWN_CLR(NPD_PROFILE) DIAG3A.113
! CLEAR-SKY DOWNWARD FLUX AT SURFACE DIAG3A.114
& , SURF_UP_CLR(NPD_PROFILE) DIAG3A.115
! CLEAR-SKY UPWARD FLUX AT SURFACE DIAG3A.116
& , FLUX_BELOW_690NM_SURF(NPD_PROFILE) DIAG3A.117
! SURFACE FLUX BELOW 690NM DIAG3A.118
! DIAG3A.119
! DIAG3A.120
! DIAG3A.121
CALL R2_ZERO_1D
(N_PROFILE, SEA_FLUX) DIAG3A.122
! DIAG3A.123
IF (L_SURFACE_DOWN_FLUX) THEN DIAG3A.124
CALL R2_ZERO_1D
(N_PROFILE, SURFACE_DOWN_FLUX) DIAG3A.125
ENDIF DIAG3A.126
! DIAG3A.127
IF (L_SURF_DOWN_CLR) THEN DIAG3A.128
CALL R2_ZERO_1D
(N_PROFILE, SURF_DOWN_CLR) DIAG3A.129
ENDIF DIAG3A.130
! DIAG3A.131
IF (L_SURF_UP_CLR) THEN DIAG3A.132
CALL R2_ZERO_1D
(N_PROFILE, SURF_UP_CLR) DIAG3A.133
ENDIF DIAG3A.134
! DIAG3A.135
IF (L_FLUX_BELOW_690NM_SURF) THEN DIAG3A.136
CALL R2_ZERO_1D
(N_PROFILE, FLUX_BELOW_690NM_SURF) DIAG3A.137
ENDIF DIAG3A.138
! DIAG3A.139
! DIAG3A.140
! DIAG3A.141
RETURN DIAG3A.142
END DIAG3A.143
!+ Subroutine to calculate spectral diagnostics and coupling arrays. DIAG3A.144
! DIAG3A.145
! Purpose: DIAG3A.146
! The coupling and diagnostic arrays are calculated. DIAG3A.147
! DIAG3A.148
! Method: DIAG3A.149
! Straightforward. DIAG3A.150
! DIAG3A.151
! Current Owner of Code: J. M. Edwards DIAG3A.152
! DIAG3A.153
! History: DIAG3A.154
! Version Date Comment DIAG3A.155
! 4.0 27-07-95 Original Code DIAG3A.156
! (J. M. Edwards) DIAG3A.157
! 4.1 10-06-96 Formulation over ADB1F401.127
! sea-ice revised. ADB1F401.128
! Corrections to ADB1F401.129
! some diagnostics. ADB1F401.130
! (J. M. Edwards) ADB1F401.131
! DIAG3A.158
! Description of Code: DIAG3A.159
! FORTRAN 77 with extensions listed in documentation. DIAG3A.160
! DIAG3A.161
!- --------------------------------------------------------------------- DIAG3A.162
SUBROUTINE R2_COUPLE_DIAG(N_PROFILE, L_NET, ISOLIR 1DIAG3A.163
& , ALBEDO_FIELD_DIFF, ALBEDO_FIELD_DIR DIAG3A.164
& , ALBEDO_SEA_DIFF, ALBEDO_SEA_DIR DIAG3A.165
& , N_FRAC_ICE_POINT, I_FRAC_ICE_POINT, ICE_FRACTION ADB1F401.132
& , PLANCK_FREEZE_SEA ADB1F401.133
& , PLANCK_AIR_SURFACE, THERMAL_SOURCE_GROUND ADB1F401.134
& , FLUX_DOWN, FLUX_UP, FLUX_DIRECT DIAG3A.167
& , FLUX_DOWN_CLEAR, FLUX_UP_CLEAR, FLUX_DIRECT_CLEAR DIAG3A.168
& , WEIGHT_690NM DIAG3A.169
& , SEA_FLUX DIAG3A.170
& , L_SURFACE_DOWN_FLUX, SURFACE_DOWN_FLUX DIAG3A.171
& , L_SURF_DOWN_CLR, SURF_DOWN_CLR DIAG3A.172
& , L_SURF_UP_CLR, SURF_UP_CLR DIAG3A.173
& , L_FLUX_BELOW_690NM_SURF, FLUX_BELOW_690NM_SURF DIAG3A.174
& , NPD_PROFILE DIAG3A.175
& ) DIAG3A.176
! DIAG3A.177
! DIAG3A.178
! DIAG3A.179
IMPLICIT NONE DIAG3A.180
! DIAG3A.181
! DIAG3A.182
! COMDECKS INCLUDED DIAG3A.183
! SPECTRAL REGIONS DIAG3A.184
*CALL SPCRG3A
DIAG3A.185
! DIAG3A.186
! DUMMY ARGUMENTS DIAG3A.187
! DIAG3A.188
! DIMENSIONS OF ARRAYS DIAG3A.189
INTEGER !, INTENT(IN) DIAG3A.190
& NPD_PROFILE DIAG3A.191
! MAXIMUM NUMBER OF ATMOSPHERIC PROFILES DIAG3A.192
! DIAG3A.193
INTEGER !, INTENT(IN) DIAG3A.194
& N_PROFILE DIAG3A.195
! NUMBER OF ATMOSPHERIC PROFILES DIAG3A.196
& , ISOLIR DIAG3A.197
! SPECTRAL REGION DIAG3A.198
! DIAG3A.199
! LOGICAL SWITCHES FOR THE CODE DIAG3A.200
LOGICAL !, INTENT(IN) DIAG3A.201
& L_NET DIAG3A.202
! FLAG FOR NET FLUXES DIAG3A.203
! DIAG3A.204
! SWITCHES FOR DIAGNOSTICS: DIAG3A.205
LOGICAL !, INTENT(IN) DIAG3A.206
& L_FLUX_BELOW_690NM_SURF DIAG3A.207
! FLUX BELOW 690NM AT SURFACE TO BE CALCULATED DIAG3A.208
& , L_SURFACE_DOWN_FLUX DIAG3A.209
! DOWNWARD SURFACE FLUX REQUIRED DIAG3A.210
& , L_SURF_DOWN_CLR DIAG3A.211
! CALCULATE DOWNWARD CLEAR FLUX DIAG3A.212
& , L_SURF_UP_CLR DIAG3A.213
! CALCULATE UPWARD CLEAR FLUX DIAG3A.214
! DIAG3A.215
! ALBEDOS DIAG3A.216
REAL !, INTENT(IN) DIAG3A.217
& ALBEDO_FIELD_DIFF(NPD_PROFILE) DIAG3A.218
! DIFFUSE ALBEDO MEANED OVER GRID BOX DIAG3A.219
& , ALBEDO_FIELD_DIR(NPD_PROFILE) DIAG3A.220
! DIRECT ALBEDO MEANED OVER GRID BOX DIAG3A.221
& , ALBEDO_SEA_DIFF(NPD_PROFILE) DIAG3A.222
! DIFFUSE ALBEDO OF OPEN SEA DIAG3A.223
& , ALBEDO_SEA_DIR(NPD_PROFILE) DIAG3A.224
! DIRECT ALBEDO MEANED OF OPEN SEA DIAG3A.225
! DIAG3A.226
REAL !, INTENT(IN) DIAG3A.227
& THERMAL_SOURCE_GROUND(NPD_PROFILE) DIAG3A.228
! THERMAL SOURCE AT GROUND DIAG3A.229
& , PLANCK_AIR_SURFACE(NPD_PROFILE) ADB1F401.135
! PLANCK FUNCTION AT NEAR-SURFACE AIR TEMPERATURE IN BAND ADB1F401.136
! DIAG3A.230
! ARGUMENTS RELATING TO SEA ICE. ADB1F401.137
INTEGER !, INTENT(IN) ADB1F401.138
& N_FRAC_ICE_POINT ADB1F401.139
! NUMBER OF POINTS WITH FRACTIONAL ICE COVER ADB1F401.140
& , I_FRAC_ICE_POINT(NPD_PROFILE) ADB1F401.141
! INDICES OF POINTS WITH FRACTIONAL ICE COVER ADB1F401.142
REAL !, INTENT(IN) ADB1F401.143
& ICE_FRACTION(NPD_PROFILE) ADB1F401.144
! ICE FRACTION ADB1F401.145
REAL !, INTENT(IN) ADB1F401.146
& PLANCK_FREEZE_SEA ADB1F401.147
! PLANCK FUNCTION OVER FREEZING SEA ADB1F401.148
! ADB1F401.149
REAL !, INTENT(IN) DIAG3A.231
& WEIGHT_690NM DIAG3A.232
! WEIGHTING APPLIED TO BAND FOR REGION BELOW 690 NM DIAG3A.233
! DIAG3A.234
! CALCULATED FLUXES DIAG3A.235
REAL !, INTENT(IN) DIAG3A.236
& FLUX_DOWN(NPD_PROFILE) DIAG3A.237
! TOTAL DOWNWARD OR NET FLUX AT SURFACE DIAG3A.238
& , FLUX_DIRECT(NPD_PROFILE) DIAG3A.239
! DIRECT SOLAR FLUX AT SURFACE DIAG3A.240
& , FLUX_UP(NPD_PROFILE) DIAG3A.241
! UPWARD FLUX AT SURFACE DIAG3A.242
& , FLUX_DOWN_CLEAR(NPD_PROFILE) DIAG3A.243
! TOTAL CLEAR-SKY DOWNWARD OR NET FLUX AT SURFACE DIAG3A.244
& , FLUX_UP_CLEAR(NPD_PROFILE) DIAG3A.245
! CLEAR-SKY UPWARD FLUX AT SURFACE DIAG3A.246
& , FLUX_DIRECT_CLEAR(NPD_PROFILE) DIAG3A.247
! CLEAR-SKY DIRECT SOLAR FLUX AT SURFACE DIAG3A.248
! DIAG3A.249
! DIAG3A.250
! SURFACE FLUXES FOR COUPLING OR DIAGNOSTIC USE DIAG3A.251
REAL !, INTENT(INOUT) DIAG3A.252
& SEA_FLUX(NPD_PROFILE) DIAG3A.253
! NET DOWNWARD FLUX INTO SEA DIAG3A.254
& , SURFACE_DOWN_FLUX(NPD_PROFILE) DIAG3A.255
! DOWNWARD FLUX AT SURFACE DIAG3A.256
& , SURF_DOWN_CLR(NPD_PROFILE) DIAG3A.257
! CLEAR-SKY DOWNWARD FLUX AT SURFACE DIAG3A.258
& , SURF_UP_CLR(NPD_PROFILE) DIAG3A.259
! CLEAR-SKY UPWARD FLUX AT SURFACE DIAG3A.260
& , FLUX_BELOW_690NM_SURF(NPD_PROFILE) DIAG3A.261
! SURFACE FLUX BELOW 690NM DIAG3A.262
! DIAG3A.263
! DIAG3A.264
! LOCAL VARIABLES DIAG3A.265
INTEGER DIAG3A.266
& L DIAG3A.267
! LOOP VARIABLE DIAG3A.268
! DIAG3A.269
! DIAG3A.270
! DIAG3A.271
! DIAG3A.272
! DEPENDING ON THE SOLVER THE TOTAL FLUX AVAILABLE WILL BE EITHER ADB1F401.150
! THE NET FLUX OR THE SEPARATE UPWARD AND DOWNWARD FLUXES, HENCE DIAG3A.274
! EACH DIAGNOSTIC MUST BE ENFOLDED IN AN IF-TEST. ADB1F401.151
! DIAG3A.276
! SINCE DIFFERENTIAL FLUXES ARE USED IN THE INFRA-RED APPROPRIATE DIAG3A.277
! PLANCKIAN SOURCES MUST BE ADDED TO NON-NET FLUXES. A SLIGHTLY DIAG3A.278
! INEFFICIENT FORM HAS BEEN USED IN THE NON-NET CASE, DERIVED IN DIAG3A.279
! ANALOGY WITH THE CASE OF NET FLUXES SINCE THIS MATCHES THE USE DIAG3A.280
! OF ARRAYS IN THE MAIN CODE. DIAG3A.281
! DIAG3A.282
IF (L_NET) THEN DIAG3A.283
IF (ISOLIR.EQ.IP_SOLAR) THEN DIAG3A.284
DO L=1, N_PROFILE DIAG3A.285
SEA_FLUX(L)=SEA_FLUX(L)+FLUX_DIRECT(L) DIAG3A.286
& *(ALBEDO_SEA_DIFF(L)-ALBEDO_SEA_DIR(L)) DIAG3A.287
& +((1.0E+00-ALBEDO_SEA_DIFF(L)) DIAG3A.288
& /(1.0E+00-ALBEDO_FIELD_DIFF(L))) DIAG3A.289
& *(FLUX_DOWN(L)-FLUX_DIRECT(L) DIAG3A.290
& *(ALBEDO_FIELD_DIFF(L)-ALBEDO_FIELD_DIR(L))) DIAG3A.291
ENDDO DIAG3A.292
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN DIAG3A.293
DO L=1, N_PROFILE DIAG3A.294
SEA_FLUX(L)=SEA_FLUX(L) ADB1F401.152
& +(FLUX_DOWN(L)+THERMAL_SOURCE_GROUND(L)) ADB1F401.153
& *(1.0E+00-ALBEDO_SEA_DIFF(L)) DIAG3A.296
& /(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.297
& -(1.0E+00-ALBEDO_SEA_DIFF(L))*PLANCK_FREEZE_SEA ADB1F401.154
ENDDO DIAG3A.298
ENDIF DIAG3A.299
ELSE DIAG3A.300
IF (ISOLIR.EQ.IP_SOLAR) THEN DIAG3A.301
DO L=1, N_PROFILE DIAG3A.302
SEA_FLUX(L)=SEA_FLUX(L)+FLUX_DOWN(L)-FLUX_UP(L) ADB1F401.155
ENDDO DIAG3A.307
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN DIAG3A.308
DO L=1, N_PROFILE DIAG3A.309
SEA_FLUX(L)=SEA_FLUX(L) DIAG3A.310
& +(1.0E+00-ALBEDO_SEA_DIFF(L)) ADB1F401.156
& *(FLUX_DOWN(L)+PLANCK_AIR_SURFACE(L) ADB1F401.157
& -PLANCK_FREEZE_SEA) ADB1F401.158
ENDDO DIAG3A.312
ENDIF DIAG3A.313
ENDIF DIAG3A.314
! DIAG3A.315
IF (L_SURFACE_DOWN_FLUX) THEN DIAG3A.316
IF (L_NET) THEN DIAG3A.317
IF (ISOLIR.EQ.IP_SOLAR) THEN DIAG3A.318
DO L=1, N_PROFILE DIAG3A.319
SURFACE_DOWN_FLUX(L)=SURFACE_DOWN_FLUX(L) DIAG3A.320
& +(FLUX_DOWN(L)+FLUX_DIRECT(L) DIAG3A.321
& *(ALBEDO_FIELD_DIR(L)-ALBEDO_FIELD_DIFF(L))) DIAG3A.322
& /(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.323
ENDDO DIAG3A.324
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN DIAG3A.325
DO L=1, N_PROFILE DIAG3A.326
SURFACE_DOWN_FLUX(L)=SURFACE_DOWN_FLUX(L) DIAG3A.327
& +(FLUX_DOWN(L)+THERMAL_SOURCE_GROUND(L)) DIAG3A.328
& /(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.329
ENDDO DIAG3A.330
ENDIF DIAG3A.331
ELSE DIAG3A.332
IF (ISOLIR.EQ.IP_SOLAR) THEN ADB1F401.159
DO L=1, N_PROFILE ADB1F401.160
SURFACE_DOWN_FLUX(L)=SURFACE_DOWN_FLUX(L) ADB1F401.161
& +FLUX_DOWN(L) ADB1F401.162
ENDDO ADB1F401.163
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN ADB1F401.164
DO L=1, N_PROFILE ADB1F401.165
SURFACE_DOWN_FLUX(L)=SURFACE_DOWN_FLUX(L) ADB1F401.166
& +FLUX_DOWN(L)+PLANCK_AIR_SURFACE(L) ADB1F401.167
ENDDO ADB1F401.168
ENDIF ADB1F401.169
ENDIF DIAG3A.338
ENDIF DIAG3A.339
! DIAG3A.340
IF (L_SURF_DOWN_CLR) THEN DIAG3A.341
IF (L_NET) THEN DIAG3A.342
IF (ISOLIR.EQ.IP_SOLAR) THEN DIAG3A.343
DO L=1, N_PROFILE DIAG3A.344
SURF_DOWN_CLR(L)=SURF_DOWN_CLR(L) DIAG3A.345
& +(FLUX_DOWN_CLEAR(L)+FLUX_DIRECT_CLEAR(L) DIAG3A.346
& *(ALBEDO_FIELD_DIR(L)-ALBEDO_FIELD_DIFF(L))) DIAG3A.347
& /(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.348
ENDDO DIAG3A.349
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN DIAG3A.350
DO L=1, N_PROFILE DIAG3A.351
SURF_DOWN_CLR(L)=SURF_DOWN_CLR(L) DIAG3A.352
& +(FLUX_DOWN_CLEAR(L)+THERMAL_SOURCE_GROUND(L)) DIAG3A.353
& /(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.354
ENDDO DIAG3A.355
ENDIF DIAG3A.356
ELSE DIAG3A.357
IF (ISOLIR.EQ.IP_SOLAR) THEN ADB1F401.170
DO L=1, N_PROFILE ADB1F401.171
SURF_DOWN_CLR(L)=SURF_DOWN_CLR(L) ADB1F401.172
& +FLUX_DOWN_CLEAR(L) ADB1F401.173
ENDDO ADB1F401.174
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN ADB1F401.175
DO L=1, N_PROFILE ADB1F401.176
SURF_DOWN_CLR(L)=SURF_DOWN_CLR(L) ADB1F401.177
& +FLUX_DOWN_CLEAR(L)+PLANCK_AIR_SURFACE(L) ADB1F401.178
ENDDO ADB1F401.179
ENDIF ADB1F401.180
ENDIF DIAG3A.365
ENDIF DIAG3A.366
! DIAG3A.367
IF (L_SURF_UP_CLR) THEN DIAG3A.368
IF (L_NET) THEN DIAG3A.369
IF (ISOLIR.EQ.IP_SOLAR) THEN DIAG3A.370
DO L=1, N_PROFILE DIAG3A.371
SURF_UP_CLR(L)=SURF_UP_CLR(L) DIAG3A.372
& +((ALBEDO_FIELD_DIR(L)-ALBEDO_FIELD_DIFF(L)) DIAG3A.373
& *FLUX_DIRECT_CLEAR(L) DIAG3A.374
& +ALBEDO_FIELD_DIFF(L)*FLUX_DOWN_CLEAR(L)) DIAG3A.375
& /(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.376
ENDDO DIAG3A.377
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN DIAG3A.378
DO L=1, N_PROFILE DIAG3A.379
SURF_UP_CLR(L)=SURF_UP_CLR(L) DIAG3A.380
& +(THERMAL_SOURCE_GROUND(L)+ALBEDO_FIELD_DIFF(L) DIAG3A.381
& *FLUX_DOWN_CLEAR(L))/(1.0E+00-ALBEDO_FIELD_DIFF(L)) DIAG3A.382
ENDDO DIAG3A.383
ENDIF DIAG3A.384
ELSE DIAG3A.385
IF (ISOLIR.EQ.IP_SOLAR) THEN ADB1F401.181
DO L=1, N_PROFILE ADB1F401.182
SURF_UP_CLR(L)=SURF_UP_CLR(L) ADB1F401.183
& +FLUX_UP_CLEAR(L) ADB1F401.184
ENDDO ADB1F401.185
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN ADB1F401.186
DO L=1, N_PROFILE ADB1F401.187
SURF_UP_CLR(L)=SURF_UP_CLR(L) ADB1F401.188
& +FLUX_UP_CLEAR(L)+PLANCK_AIR_SURFACE(L) ADB1F401.189
ENDDO ADB1F401.190
ENDIF ADB1F401.191
ENDIF DIAG3A.393
ENDIF DIAG3A.394
! DIAG3A.395
! THIS DIAGNOSTIC IS AVAILABLE ONLY IN THE SOLAR REGION. DIAG3A.396
IF (L_FLUX_BELOW_690NM_SURF) THEN DIAG3A.397
IF (ISOLIR.EQ.IP_SOLAR) THEN DIAG3A.398
IF (L_NET) THEN DIAG3A.399
DO L=1, N_PROFILE DIAG3A.400
FLUX_BELOW_690NM_SURF(L)=FLUX_BELOW_690NM_SURF(L) DIAG3A.401
& +WEIGHT_690NM*FLUX_DOWN(L) ADB1F401.192
ENDDO DIAG3A.406
ELSE DIAG3A.407
DO L=1, N_PROFILE DIAG3A.408
FLUX_BELOW_690NM_SURF(L)=FLUX_BELOW_690NM_SURF(L) DIAG3A.409
& +WEIGHT_690NM*(FLUX_DOWN(L)-FLUX_UP(L)) ADB1F401.193
ENDDO DIAG3A.411
ENDIF DIAG3A.412
ENDIF DIAG3A.413
ENDIF DIAG3A.414
! DIAG3A.415
! DIAG3A.416
! DIAG3A.417
RETURN DIAG3A.418
END DIAG3A.419
*ENDIF DEF,A01_3A,OR,DEF,A02_3A DIAG3A.420
*ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.20