*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.13
*IF DEF,A01_3A,OR,DEF,A02_3A CLRSP3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13161
C GTS2F400.13162
C Use, duplication or disclosure of this code is subject to the GTS2F400.13163
C restrictions as set forth in the contract. GTS2F400.13164
C GTS2F400.13165
C Meteorological Office GTS2F400.13166
C London Road GTS2F400.13167
C BRACKNELL GTS2F400.13168
C Berkshire UK GTS2F400.13169
C RG12 2SZ GTS2F400.13170
C GTS2F400.13171
C If no contract has been raised with this copy of the code, the use, GTS2F400.13172
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13173
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13174
C Modelling at the above address. GTS2F400.13175
C ******************************COPYRIGHT****************************** GTS2F400.13176
C GTS2F400.13177
!+ Subroutine to calculate clear-sky fluxes. CLRSP3A.3
! CLRSP3A.4
! Method: CLRSP3A.5
! This subroutine is called after fluxes including clouds have CLRSP3A.6
! been calculated to find the corresponding clear-sky fluxes. CLRSP3A.7
! The optical properties of the column are already known. CLRSP3A.8
! CLRSP3A.9
! Current Owner of Code: J. M. Edwards CLRSP3A.10
! CLRSP3A.11
! History: CLRSP3A.12
! Version Date Comment CLRSP3A.13
! 4.0 27-07-95 Original Code CLRSP3A.14
! (J. M. Edwards) CLRSP3A.15
! 4.1 10-04-96 New solver added ADB1F401.31
! (J. M. Edwards) ADB1F401.32
! 4.5 18-05-98 Obsolete solvers ADB1F405.7
! removed. ADB1F405.8
! (J. M. Edwards) ADB1F405.9
! CLRSP3A.16
! Description of Code: CLRSP3A.17
! FORTRAN 77 with extensions listed in documentation. CLRSP3A.18
! CLRSP3A.19
!- --------------------------------------------------------------------- CLRSP3A.20
SUBROUTINE CLEAR_SUPPLEMENT(IERR, N_PROFILE, N_LAYER 3,4CLRSP3A.21
& , I_SOLVER_CLEAR CLRSP3A.22
& , TRANS_FREE, REFLECT_FREE, TRANS_0_FREE, SOURCE_COEFF_FREE CLRSP3A.23
& , ISOLIR, FLUX_INC_DIRECT, FLUX_INC_DOWN CLRSP3A.24
& , S_DOWN_FREE, S_UP_FREE CLRSP3A.25
& , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR CLRSP3A.26
& , SOURCE_GROUND CLRSP3A.27
& , L_SCALE_SOLAR, ADJUST_SOLAR_KE CLRSP3A.28
& , FLUX_DIRECT_CLEAR, FLUX_TOTAL_CLEAR CLRSP3A.29
& , NPD_PROFILE, NPD_LAYER CLRSP3A.30
& ) CLRSP3A.31
! CLRSP3A.32
! CLRSP3A.33
IMPLICIT NONE CLRSP3A.34
! CLRSP3A.35
! CLRSP3A.36
! SIZES OF DUMMY ARRAYS. CLRSP3A.37
INTEGER !, INTENT(IN) CLRSP3A.38
& NPD_PROFILE CLRSP3A.39
! MAXIMUM NUMBER OF PROFILES CLRSP3A.40
& , NPD_LAYER CLRSP3A.41
! MAXIMUM NUMBER OF LAYERS CLRSP3A.42
! CLRSP3A.43
! INCLUDE COMDECKS. CLRSP3A.44
*CALL STDIO3A
CLRSP3A.45
*CALL SPCRG3A
CLRSP3A.46
*CALL SOLVER3A
CLRSP3A.47
*CALL ERROR3A
CLRSP3A.48
! CLRSP3A.49
! DUMMY VARIABLES. CLRSP3A.50
INTEGER !, INTENT(OUT) CLRSP3A.51
& IERR CLRSP3A.52
! ERROR FLAG CLRSP3A.53
INTEGER !, INTENT(IN) CLRSP3A.54
& N_PROFILE CLRSP3A.55
! NUMBER OF PROFILES CLRSP3A.56
& , N_LAYER CLRSP3A.57
! NUMBER OF LAYERS CLRSP3A.58
& , ISOLIR CLRSP3A.59
! SPECTRAL REGION CLRSP3A.60
& , I_SOLVER_CLEAR CLRSP3A.61
! SOLVER FOR CLEAR FLUXES CLRSP3A.62
LOGICAL !, INTENT(IN) CLRSP3A.63
& L_SCALE_SOLAR CLRSP3A.64
! SCALING APPLIED TO SOLAR BEAM CLRSP3A.65
REAL !, INTENT(IN) CLRSP3A.66
& TRANS_FREE(NPD_PROFILE, NPD_LAYER) CLRSP3A.67
! TRANSMISSION COEFFICIENTS CLRSP3A.68
& , REFLECT_FREE(NPD_PROFILE, NPD_LAYER) CLRSP3A.69
! REFLECTION COEFFICIENTS CLRSP3A.70
& , TRANS_0_FREE(NPD_PROFILE, NPD_LAYER) CLRSP3A.71
! DIRECT TRANSMISSION COEFFICIENTS CLRSP3A.72
& , SOURCE_COEFF_FREE(NPD_PROFILE, NPD_LAYER) CLRSP3A.73
! COEFFICIENTS IN SOURCE TERMS CLRSP3A.74
& , S_DOWN_FREE(NPD_PROFILE, NPD_LAYER) CLRSP3A.75
! DOWNWARD SOURCE CLRSP3A.76
& , S_UP_FREE(NPD_PROFILE, NPD_LAYER) CLRSP3A.77
! UPWARD SOURCE CLRSP3A.78
& , ALBEDO_SURFACE_DIFF(NPD_PROFILE) CLRSP3A.79
! DIFFUSE ALBEDO CLRSP3A.80
& , ALBEDO_SURFACE_DIR(NPD_PROFILE) CLRSP3A.81
! DIRECT ALBEDO CLRSP3A.82
& , FLUX_INC_DOWN(NPD_PROFILE) CLRSP3A.83
! INCIDENT TOTAL FLUX CLRSP3A.84
& , FLUX_INC_DIRECT(NPD_PROFILE) CLRSP3A.85
! INCIDENT DIRECT FLUX CLRSP3A.86
& , SOURCE_GROUND(NPD_PROFILE) CLRSP3A.87
! GROUND SOURCE FUNCTION CLRSP3A.88
& , ADJUST_SOLAR_KE(NPD_PROFILE, NPD_LAYER) CLRSP3A.89
! SCALING OF SOLAR BEAM CLRSP3A.90
! CLRSP3A.91
! CLRSP3A.92
REAL !, INTENT(OUT) CLRSP3A.93
& FLUX_DIRECT_CLEAR(NPD_PROFILE, 0: NPD_LAYER) CLRSP3A.94
! CLEAR DIRECT FLUX CLRSP3A.95
& , FLUX_TOTAL_CLEAR(NPD_PROFILE, 2*NPD_LAYER+2) CLRSP3A.96
! CLEAR TOTAL FLUXES CLRSP3A.97
! CLRSP3A.98
! CLRSP3A.99
! DUMMY VARIABALES. CLRSP3A.100
INTEGER CLRSP3A.101
& N_EQUATION CLRSP3A.102
! NUMBER OF EQUATIONS CLRSP3A.103
REAL CLRSP3A.104
& A3(NPD_PROFILE, 3, 2*NPD_LAYER+2) CLRSP3A.105
! TRIDIAGONAL MATRIX CLRSP3A.106
& , A5(NPD_PROFILE, 5, 2*NPD_LAYER+2) CLRSP3A.107
! PENTADIAGONAL MATRIX CLRSP3A.108
& , B(NPD_PROFILE, 2*NPD_LAYER+2) CLRSP3A.109
! RHS OF MATRIX EQUATION CLRSP3A.110
& , WORK_1(NPD_PROFILE, 2*NPD_LAYER+2) CLRSP3A.111
! WORKING ARRAY FOR SOLVER CLRSP3A.112
& , WORK_2(NPD_PROFILE, 2*NPD_LAYER+2) CLRSP3A.113
! WORKING ARRAY FOR SOLVER CLRSP3A.114
! CLRSP3A.115
! SUBROUTINES CALLED: CLRSP3A.116
EXTERNAL CLRSP3A.117
*IF DEF,SCMA AJC0F405.292
& SOLAR_SOURCE AJC0F405.293
*ELSE AJC0F405.294
& SOLAR_SOURCE, SET_MATRIX_NET, TRIDIAG_SOLVER_UP AJC0F405.295
*ENDIF AJC0F405.296
& , SET_MATRIX_FULL, SET_MATRIX_PENTADIAGONAL CLRSP3A.119
& , BAND_SOLVER, SOLVER_HOMOGEN_DIRECT ADB1F401.33
! CLRSP3A.121
! CLRSP3A.122
! THE SOURCE FUNCTIONS ONLY NEED TO BE RECALCULATED IN THE VISIBLE. CLRSP3A.123
IF (ISOLIR.EQ.IP_SOLAR) THEN CLRSP3A.124
CALL SOLAR_SOURCE
(N_PROFILE, N_LAYER CLRSP3A.125
& , FLUX_INC_DIRECT CLRSP3A.126
& , TRANS_0_FREE, SOURCE_COEFF_FREE CLRSP3A.127
& , L_SCALE_SOLAR, ADJUST_SOLAR_KE CLRSP3A.128
& , FLUX_DIRECT_CLEAR CLRSP3A.129
& , S_DOWN_FREE, S_UP_FREE CLRSP3A.130
& , NPD_PROFILE, NPD_LAYER CLRSP3A.131
& ) CLRSP3A.132
ENDIF CLRSP3A.133
! CLRSP3A.134
! CLRSP3A.146
! SELECT AN APPROPRIATE SOLVER FOR THE EQUATIONS OF TRANSFER. ADB1F405.10
! CLRSP3A.154
IF (I_SOLVER_CLEAR.EQ.IP_SOLVER_PENTADIAGONAL) THEN ADB1F405.11
! ADB1F401.35
! CALCULATE THE ELEMENTS OF THE MATRIX EQUATIONS. ADB1F401.36
CALL SET_MATRIX_PENTADIAGONAL
(N_PROFILE, N_LAYER CLRSP3A.177
& , TRANS_FREE, REFLECT_FREE CLRSP3A.178
& , S_DOWN_FREE, S_UP_FREE CLRSP3A.179
& , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR CLRSP3A.180
& , FLUX_DIRECT_CLEAR(1, N_LAYER), FLUX_INC_DOWN CLRSP3A.181
& , SOURCE_GROUND CLRSP3A.182
& , A5, B CLRSP3A.183
& , NPD_PROFILE, NPD_LAYER CLRSP3A.184
& ) CLRSP3A.185
N_EQUATION=2*N_LAYER+2 CLRSP3A.186
! CLRSP3A.187
CALL BAND_SOLVER
(N_PROFILE, N_EQUATION CLRSP3A.188
& , 2, 2 CLRSP3A.189
& , A5, B CLRSP3A.190
& , FLUX_TOTAL_CLEAR CLRSP3A.191
& , NPD_PROFILE, 2*NPD_LAYER+2 CLRSP3A.192
& , WORK_1 CLRSP3A.193
& ) CLRSP3A.194
! CLRSP3A.195
ELSE IF (I_SOLVER_CLEAR.EQ.IP_SOLVER_HOMOGEN_DIRECT) THEN ADB1F401.37
! ADB1F401.38
! SOLVE FOR THE FLUXES IN THE COLUMN DIRECTLY. ADB1F401.39
CALL SOLVER_HOMOGEN_DIRECT
(N_PROFILE, N_LAYER ADB1F401.40
& , TRANS_FREE, REFLECT_FREE ADB1F401.41
& , S_DOWN_FREE, S_UP_FREE ADB1F401.42
& , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR ADB1F401.43
& , FLUX_DIRECT_CLEAR(1, N_LAYER), FLUX_INC_DOWN ADB1F401.44
& , SOURCE_GROUND ADB1F401.45
& , FLUX_TOTAL_CLEAR ADB1F401.46
& , NPD_PROFILE, NPD_LAYER ADB1F401.47
& ) ADB1F401.48
! ADB1F401.49
ELSE CLRSP3A.196
! ADB1F401.50
WRITE(IU_ERR, '(/A)') CLRSP3A.197
& '*** ERROR: THE SOLVER SPECIFIED IS NOT VALID ' CLRSP3A.198
& //'FOR CLEAR FLUXES.' CLRSP3A.199
IERR=I_ERR_FATAL CLRSP3A.200
RETURN CLRSP3A.201
! CLRSP3A.202
ENDIF CLRSP3A.203
! ADB1F401.51
! CLRSP3A.204
! CLRSP3A.205
RETURN CLRSP3A.206
END CLRSP3A.207
*ENDIF DEF,A01_3A,OR,DEF,A02_3A CLRSP3A.208
*ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.14