*IF DEF,A70_1A ADB1F402.131
*IF DEF,A01_3A,OR,DEF,A02_3A TCF3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.14164
C GTS2F400.14165
C Use, duplication or disclosure of this code is subject to the GTS2F400.14166
C restrictions as set forth in the contract. GTS2F400.14167
C GTS2F400.14168
C Meteorological Office GTS2F400.14169
C London Road GTS2F400.14170
C BRACKNELL GTS2F400.14171
C Berkshire UK GTS2F400.14172
C RG12 2SZ GTS2F400.14173
C GTS2F400.14174
C If no contract has been raised with this copy of the code, the use, GTS2F400.14175
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14176
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14177
C Modelling at the above address. GTS2F400.14178
C ******************************COPYRIGHT****************************** GTS2F400.14179
C GTS2F400.14180
!+ Subroutine to calculate coefficients in the two-stream equations. TCF3A.3
! TCF3A.4
! Method: TCF3A.5
! The basic two-stream coefficients in the differential equations TCF3A.6
! are calculated. These are then used to determine the TCF3A.7
! transmission and reflection coefficients. Coefficients for TCF3A.8
! determining the solar or infra-red source terms are calculated. TCF3A.9
! TCF3A.10
! Current Owner of Code: J. M. Edwards TCF3A.11
! TCF3A.12
! History: TCF3A.13
! Version Date Comment TCF3A.14
! 4.0 27-07-95 Original Code TCF3A.15
! (J. M. Edwards) TCF3A.16
! 4.2 Nov. 96 T3E migration: CALL WHENFGT replaced GSS2F402.63
! by portable fortran code. GSS2F402.64
! S.J.Swarbrick GSS2F402.65
!LL 4.5 27/04/98 Add Fujitsu vectorization directive. GRB0F405.156
!LL RBarnes@ecmwf.int GRB0F405.157
! TCF3A.17
! Description of Code: TCF3A.18
! FORTRAN 77 with extensions listed in documentation. TCF3A.19
! TCF3A.20
!- --------------------------------------------------------------------- TCF3A.21
! Fujitsu directive to encourage vectorization for whole routine GRB0F405.158
!OCL NOVREC GRB0F405.159
SUBROUTINE TWO_COEFF(IERR 8,6TCF3A.22
& , N_PROFILE, I_LAYER_FIRST, I_LAYER_LAST TCF3A.23
& , I_2STREAM, L_IR_SOURCE_QUAD TCF3A.24
& , ASYMMETRY, OMEGA, TAU TCF3A.25
& , ISOLIR, SEC_0 TCF3A.26
& , TRANS, REFLECT, TRANS_0 TCF3A.27
& , SOURCE_COEFF TCF3A.28
& , NPD_PROFILE, NPD_LAYER TCF3A.29
& ) TCF3A.30
! TCF3A.31
! TCF3A.32
! TCF3A.33
IMPLICIT NONE TCF3A.34
! TCF3A.35
! TCF3A.36
! SIZES OF DUMMY ARRAYS. TCF3A.37
INTEGER !, INTENT(IN) TCF3A.38
& NPD_PROFILE TCF3A.39
! MAXIMUM NUMBER OF PROFILES TCF3A.40
& , NPD_LAYER TCF3A.41
! MAXIMUM NUMBER OF LAYERS TCF3A.42
! TCF3A.43
! INCLUDE COMDECKS. TCF3A.44
*CALL DIMFIX3A
TCF3A.45
*CALL SPCRG3A
TCF3A.46
*CALL PRMCH3A
TCF3A.47
*CALL PRECSN3A
TCF3A.48
*CALL ERROR3A
TCF3A.49
! TCF3A.50
! TCF3A.51
! TCF3A.52
! DUMMY ARGUMENTS. TCF3A.53
INTEGER !, INTENT(OUT) TCF3A.54
& IERR TCF3A.55
! ERROR FLAG TCF3A.56
INTEGER !, INTENT(IN) TCF3A.57
& N_PROFILE TCF3A.58
! NUMBER OF PROFILES TCF3A.59
& , I_LAYER_FIRST TCF3A.60
! FIRST LAYER TO CONSIDER TCF3A.61
& , I_LAYER_LAST TCF3A.62
! LAST LAYER TO CONSIDER TCF3A.63
& , ISOLIR TCF3A.64
! SPECTRAL REGION TCF3A.65
& , I_2STREAM TCF3A.66
! TWO STREAM SCHEME TCF3A.67
LOGICAL !, INTENT(IN) TCF3A.68
& L_IR_SOURCE_QUAD TCF3A.69
! USE A QUADRATIC SOURCE FUNCTION TCF3A.70
! TCF3A.71
! OPTICAL PROPERTIES OF LAYER: TCF3A.72
REAL !, INTENT(IN) TCF3A.73
& ASYMMETRY(NPD_PROFILE, NPD_LAYER) TCF3A.74
! ASYMMETRY FACTOR TCF3A.75
& , OMEGA(NPD_PROFILE, NPD_LAYER) TCF3A.76
! ALBEDO OF SINGLE SCATTERING ADB1F401.1125
& , TAU(NPD_PROFILE, NPD_LAYER) TCF3A.78
! OPTICAL DEPTH TCF3A.79
! TCF3A.80
! SOLAR BEAM TCF3A.81
REAL !, INTENT(IN) TCF3A.82
& SEC_0(NPD_PROFILE) TCF3A.83
! SECANT OF ZENITH ANGLE TCF3A.84
! TCF3A.85
! TCF3A.86
! COEFFICIENTS IN THE TWO-STREAM EQUATIONS: TCF3A.87
REAL !, INTENT(OUT) TCF3A.88
& TRANS(NPD_PROFILE, NPD_LAYER) TCF3A.89
! DIFFUSE TRANSMISSION COEFFICIENT TCF3A.90
& , REFLECT(NPD_PROFILE, NPD_LAYER) TCF3A.91
! DIFFUSE REFLECTION COEFFICIENT TCF3A.92
& , TRANS_0(NPD_PROFILE, NPD_LAYER) TCF3A.93
! DIRECT TRANSMISSION COEFFICIENT TCF3A.94
& , SOURCE_COEFF(NPD_PROFILE, NPD_LAYER, NPD_SOURCE_COEFF) TCF3A.95
! SOURCE COEFFICIENTS IN TWO-STREAM EQUATIONS TCF3A.96
! TCF3A.97
! TCF3A.98
! LOCAL VARIABLES. TCF3A.99
INTEGER TCF3A.100
& I TCF3A.101
! LOOP VARIABLE TCF3A.102
& , L TCF3A.103
! LOOP VARIABLE TCF3A.104
& , K TCF3A.105
! LOOP VARIABLE TCF3A.106
& , N_INDEX TCF3A.107
! NUMBER OF INDICES SATISFYING TEST TCF3A.108
& , INDEX(NPD_PROFILE) TCF3A.109
! INDICES OF TESTED POINTS TCF3A.110
! TCF3A.111
! COEFFICIENTS IN THE TWO-STREAM EQUATIONS: TCF3A.112
REAL TCF3A.113
& LAMBDA(NPD_PROFILE, NPD_LAYER) TCF3A.114
! COEFFICIENTS IN TWO-STREAM EQUATIONS TCF3A.115
& , SUM(NPD_PROFILE, NPD_LAYER) TCF3A.116
! SUM OF ALPHA_1 AND ALPHA_2 TCF3A.117
& , DIFF(NPD_PROFILE, NPD_LAYER) TCF3A.118
! DIFFERENCE OF ALPHA_1 AND ALPHA_2 TCF3A.119
& , GAMMA_UP(NPD_PROFILE, NPD_LAYER) TCF3A.120
! BASIC SOLAR COEFFICIENT FOR UPWARD RADIATION TCF3A.121
& , GAMMA_DOWN(NPD_PROFILE, NPD_LAYER) TCF3A.122
! BASIC SOLAR COEFFICIENT FOR DOWNWARD RADIATION TCF3A.123
! TCF3A.124
REAL TCF3A.125
& TARGET TCF3A.126
! TARGET TO SEARCH FOR TCF3A.127
! TCF3A.128
! TCF3A.129
! SUBROUTINES CALLED: TCF3A.130
EXTERNAL TCF3A.131
& TWO_COEFF_BASIC, SOLAR_COEFFICIENT_BASIC GSS1F403.55
& , TRANS_SOURCE_COEFF TCF3A.133
! TCF3A.134
! CRAY DIRECTIVES FOR THE WHOLE ROUTINE: ADB1F402.747
! POINTS ARE NOT REPEATED IN THE INDEXING ARRAY, SO IT IS SAFE ADB1F402.748
! TO VECTORIZE OVER INDIRECTLY ADDRESSED ARRAYS. ADB1F402.749
Cfpp$ NODEPCHK R ADB1F402.750
! ADB1F402.751
! TCF3A.135
! TCF3A.136
! PERTURB THE SINGLE SCATTERING ALBEDO AWAY FROM 1 TO AVOID TCF3A.137
! LATER DIVISION BY 0. TCF3A.138
TARGET=1.0E+00-TOL_DIV TCF3A.139
DO I=I_LAYER_FIRST, I_LAYER_LAST TCF3A.140
! GSS2F402.68
N_INDEX=0 GSS2F402.69
DO L =1,N_PROFILE GSS2F402.70
IF (OMEGA(L,I).GT.TARGET) THEN GSS2F402.71
N_INDEX =N_INDEX+1 GSS2F402.72
INDEX(N_INDEX)=L GSS2F402.73
END IF GSS2F402.74
END DO GSS2F402.75
! GSS2F402.76
DO K=1, N_INDEX TCF3A.143
OMEGA(INDEX(K), I)=TARGET TCF3A.144
ENDDO TCF3A.145
ENDDO TCF3A.146
! TCF3A.147
! CALCULATE THE BASIC TWO-STREAM COEFFICIENTS. TCF3A.148
CALL TWO_COEFF_BASIC
(IERR TCF3A.149
& , N_PROFILE, I_LAYER_FIRST, I_LAYER_LAST TCF3A.150
& , I_2STREAM TCF3A.151
& , ASYMMETRY, OMEGA TCF3A.152
& , SUM, DIFF TCF3A.153
& , NPD_PROFILE, NPD_LAYER TCF3A.154
& ) TCF3A.155
IF (IERR.NE.I_NORMAL) THEN TCF3A.156
RETURN TCF3A.157
ENDIF TCF3A.158
! TCF3A.159
! LAMBDA IS NOW CALCULATED. TCF3A.160
DO I=I_LAYER_FIRST, I_LAYER_LAST TCF3A.161
DO L=1, N_PROFILE TCF3A.162
LAMBDA(L, I)=SQRT(SUM(L, I)*DIFF(L, I)) TCF3A.163
ENDDO TCF3A.164
ENDDO TCF3A.165
! TCF3A.166
! TCF3A.167
! CALCULATE THE BASIC COEFFICIENTS FOR THE SOLAR SOURCE TERMS. TCF3A.168
IF (ISOLIR.EQ.IP_SOLAR) THEN TCF3A.169
! LAMBDA MAY BE PERTURBED BY THIS ROUTINE TO AVOID TCF3A.170
! ILL-CONDITIONING FOR THE SINGULAR ZENITH ANGLE. TCF3A.171
CALL SOLAR_COEFFICIENT_BASIC
(IERR TCF3A.172
& , N_PROFILE, I_LAYER_FIRST, I_LAYER_LAST TCF3A.173
& , OMEGA, ASYMMETRY, SEC_0 TCF3A.174
& , I_2STREAM TCF3A.175
& , SUM, DIFF, LAMBDA TCF3A.176
& , GAMMA_UP, GAMMA_DOWN TCF3A.177
& , NPD_PROFILE, NPD_LAYER TCF3A.178
& ) TCF3A.179
IF (IERR.NE.I_NORMAL) RETURN TCF3A.180
ENDIF TCF3A.181
! TCF3A.182
! TCF3A.183
! DETERMINE THE TRANSMISSION AND REFLECTION COEFFICIENTS. TCF3A.184
CALL TRANS_SOURCE_COEFF
(N_PROFILE, I_LAYER_FIRST, I_LAYER_LAST TCF3A.185
& , ISOLIR, L_IR_SOURCE_QUAD TCF3A.186
& , TAU, SUM, DIFF, LAMBDA, SEC_0 TCF3A.187
& , GAMMA_UP, GAMMA_DOWN TCF3A.188
& , TRANS, REFLECT, TRANS_0, SOURCE_COEFF TCF3A.189
& , NPD_PROFILE, NPD_LAYER TCF3A.190
& ) TCF3A.191
! TCF3A.192
! TCF3A.193
! TCF3A.194
RETURN TCF3A.195
END TCF3A.196
*ENDIF DEF,A01_3A,OR,DEF,A02_3A TCF3A.197
*ENDIF DEF,A70_1A ADB1F402.132