*IF DEF,A70_1A ADB1F402.141
*IF DEF,A01_3A,OR,DEF,A02_3A TRSFC3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.14249
C GTS2F400.14250
C Use, duplication or disclosure of this code is subject to the GTS2F400.14251
C restrictions as set forth in the contract. GTS2F400.14252
C GTS2F400.14253
C Meteorological Office GTS2F400.14254
C London Road GTS2F400.14255
C BRACKNELL GTS2F400.14256
C Berkshire UK GTS2F400.14257
C RG12 2SZ GTS2F400.14258
C GTS2F400.14259
C If no contract has been raised with this copy of the code, the use, GTS2F400.14260
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14261
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14262
C Modelling at the above address. GTS2F400.14263
C ******************************COPYRIGHT****************************** GTS2F400.14264
C GTS2F400.14265
!+ Subroutine to calculate transmission and reflection coefficients. TRSFC3A.3
! TRSFC3A.4
! Method: TRSFC3A.5
! Straightforward. TRSFC3A.6
! TRSFC3A.7
! Current Owner of Code: J. M. Edwards TRSFC3A.8
! TRSFC3A.9
! History: TRSFC3A.10
! Version Date Comment TRSFC3A.11
! 4.0 27-07-95 Original Code TRSFC3A.12
! (J. M. Edwards) TRSFC3A.13
! 4.1 29-03-96 Half-precision ADB1F401.1225
! exponential introduced. ADB1F401.1226
! (J. M. Edwards) ADB1F401.1227
! 4.2 Oct. 96 T3E migration: HF functions GSS3F402.409
! replaced by T3E vec_lib functions GSS3F402.410
! (S.J.Swarbrick) GSS3F402.411
! 4.5 12/05/98 Move constant exp(k*log( )) outside of loop. GRB0F405.1
! RBarnes@ecmwf.int GRB0F405.2
! TRSFC3A.14
! Description of Code: TRSFC3A.15
! FORTRAN 77 with extensions listed in documentation. TRSFC3A.16
! TRSFC3A.17
!- --------------------------------------------------------------------- TRSFC3A.18
SUBROUTINE TRANS_SOURCE_COEFF(N_PROFILE 2TRSFC3A.19
& , I_LAYER_FIRST, I_LAYER_LAST TRSFC3A.20
& , ISOLIR, L_IR_SOURCE_QUAD TRSFC3A.21
& , TAU, SUM, DIFF, LAMBDA, SEC_0 TRSFC3A.22
& , GAMMA_UP, GAMMA_DOWN TRSFC3A.23
& , TRANS, REFLECT, TRANS_0, SOURCE_COEFF TRSFC3A.24
& , NPD_PROFILE, NPD_LAYER TRSFC3A.25
& ) TRSFC3A.26
! TRSFC3A.27
! TRSFC3A.28
IMPLICIT NONE TRSFC3A.29
! TRSFC3A.30
! TRSFC3A.31
! SIZES OF DUMMY ARRAYS. TRSFC3A.32
INTEGER !, INTENT(IN) TRSFC3A.33
& NPD_PROFILE TRSFC3A.34
! MAXIMUM NUMBER OF PROFILES TRSFC3A.35
& , NPD_LAYER TRSFC3A.36
! MAXIMUM NUMBER OF LAYERS TRSFC3A.37
! TRSFC3A.38
! COMDECKS INCLUDED TRSFC3A.39
*CALL DIMFIX3A
TRSFC3A.40
*CALL SPCRG3A
TRSFC3A.41
*CALL PRMCH3A
TRSFC3A.42
*CALL SCFPT3A
TRSFC3A.43
! TRSFC3A.44
! DUMMY VARIABLES. TRSFC3A.45
INTEGER !, INTENT(IN) TRSFC3A.46
& N_PROFILE TRSFC3A.47
! NUMBER OF PROFILES TRSFC3A.48
& , I_LAYER_FIRST TRSFC3A.49
! FIRST LAYER TO CONSIDER TRSFC3A.50
& , I_LAYER_LAST TRSFC3A.51
! LAST LAYER TO CONSIDER TRSFC3A.52
! TRSFC3A.53
! ALGORITHMIC CONTROL TRSFC3A.54
LOGICAL !, INTENT(IN) TRSFC3A.55
& L_IR_SOURCE_QUAD TRSFC3A.56
! QUADRATIC SOURCE IN INFRA-RED TRSFC3A.57
INTEGER !, INTENT(IN) TRSFC3A.58
& ISOLIR TRSFC3A.59
! SPECTRAL REGION TRSFC3A.60
! TRSFC3A.61
! OPTICAL PROPERTIES OF THE LAYER TRSFC3A.62
REAL !, INTENT(IN) TRSFC3A.63
& TAU(NPD_PROFILE, NPD_LAYER) TRSFC3A.64
! OPTICAL DEPTHS OF LAYERS TRSFC3A.65
& , SUM(NPD_PROFILE, NPD_LAYER) TRSFC3A.66
! SUM OF ALPHA_1 AND ALPHA_2 TRSFC3A.67
& , DIFF(NPD_PROFILE, NPD_LAYER) TRSFC3A.68
! DIFFERENCE OF ALPHA_1 AND ALPHA_2 TRSFC3A.69
& , LAMBDA(NPD_PROFILE, NPD_LAYER) TRSFC3A.70
! LAMBDA TRSFC3A.71
& , SEC_0(NPD_PROFILE) TRSFC3A.72
! SECANT OF SOLAR ZENITH ANGLE TRSFC3A.73
& , GAMMA_UP(NPD_PROFILE, NPD_LAYER) TRSFC3A.74
! BASIC SOLAR COEFFICIENT FOR UPWARD RADIATION TRSFC3A.75
& , GAMMA_DOWN(NPD_PROFILE, NPD_LAYER) TRSFC3A.76
! BASIC SOLAR COEFFICIENT FOR DOWNWARD RADIATION TRSFC3A.77
! TRSFC3A.78
! TRANSMISSION AND REFLECTION COEFFICIENTS AND COEFFICIENTS FOR TRSFC3A.79
! SOURCE TERMS. TRSFC3A.80
REAL !, INTENT(OUT) TRSFC3A.81
& TRANS(NPD_PROFILE, NPD_LAYER) TRSFC3A.82
! DIFFUSE TRANSMISSION COEFFICIENT TRSFC3A.83
& , REFLECT(NPD_PROFILE, NPD_LAYER) TRSFC3A.84
! DIFFUSE REFLECTION COEFFICIENT TRSFC3A.85
& , TRANS_0(NPD_PROFILE, NPD_LAYER) TRSFC3A.86
! DIRECT TRANSMISSION COEFFICIENT TRSFC3A.87
& , SOURCE_COEFF(NPD_PROFILE, NPD_LAYER, NPD_SOURCE_COEFF) TRSFC3A.88
! SOURCE COEFFICIENTS TRSFC3A.89
! TRSFC3A.90
! TRSFC3A.91
! LOCAL VARIABLES TRSFC3A.92
INTEGER TRSFC3A.93
& I TRSFC3A.94
! LOOP VARIABLE TRSFC3A.95
& , L TRSFC3A.96
! LOOP VARIABLE TRSFC3A.97
REAL TRSFC3A.98
& GAMMA TRSFC3A.99
! GAMMA TRSFC3A.100
& , EXPONENTIAL TRSFC3A.101
! EXPONENTIAL OF SCALED OPTICAL DEPTH TRSFC3A.102
REAL XLAMTAU(N_PROFILE,I_LAYER_LAST-I_LAYER_FIRST+1) !Workspace ADB6F403.1
INTEGER n_input ! No. of inputs for exp_v GSS3F402.413
! TRSFC3A.103
! ADB1F401.1232
! TRSFC3A.104
! TRSFC3A.105
! DETERMINE THE DIFFUSE TRANSMISSION AND REFLECTION COEFFICIENTS. TRSFC3A.106
! TRSFC3A.107
DO I=I_LAYER_FIRST, I_LAYER_LAST TRSFC3A.108
DO L=1, N_PROFILE TRSFC3A.109
XLAMTAU(L,I-I_LAYER_FIRST+1)=-LAMBDA(L,I)*TAU(L,I) GSS3F402.414
ENDDO GSS3F402.415
ENDDO GSS3F402.416
n_input=(I_LAYER_LAST-I_LAYER_FIRST+1)*N_PROFILE GSS3F402.417
*IF DEF,VECTLIB PXVECTLB.148
&/ PXVECTLB.149
call exp_v(
n_input,xlamtau,xlamtau) ADB6F403.2
*ELSE GSS3F402.420
do I=1,I_LAYER_LAST-I_LAYER_FIRST+1 GSS3F402.421
do L=1,n_profile GSS3F402.422
xlamtau(L,I)=exp(xlamtau(L,I)) GSS3F402.423
end do GSS3F402.424
end do GSS3F402.425
*ENDIF GSS3F402.426
! GSS3F402.427
DO I=I_LAYER_FIRST, I_LAYER_LAST GSS3F402.428
DO L=1, N_PROFILE GSS3F402.429
EXPONENTIAL=xlamtau(L,I-I_LAYER_FIRST+1) GSS3F402.430
GAMMA=(SUM(L, I)-LAMBDA(L, I)) TRSFC3A.111
& /(SUM(L, I)+LAMBDA(L, I)) TRSFC3A.112
TRANS(L, I)=(EXPONENTIAL*(1.0E+00-GAMMA**2) TRSFC3A.113
& /(1.0E+00-(EXPONENTIAL*GAMMA)**2)) TRSFC3A.114
REFLECT(L, I)=GAMMA*(1.0E+00-EXPONENTIAL**2) TRSFC3A.115
& /(1.0E+00-(EXPONENTIAL*GAMMA)**2) TRSFC3A.116
ENDDO TRSFC3A.117
ENDDO TRSFC3A.118
! TRSFC3A.119
! TRSFC3A.120
! TRSFC3A.121
IF (ISOLIR.EQ.IP_SOLAR) THEN TRSFC3A.122
! TRSFC3A.123
! CALCULATE THE DIRECT TRANSMISSION AND THE SOURCE COEFFICIENTS TRSFC3A.124
! FOR THE SOLAR BEAM: IN THE SOLAR CASE THESE ARE TRSFC3A.125
! THE COEFFICIENTS WHICH WILL MULTIPLY THE DIRECT FLUX AT THE TRSFC3A.126
! TOP OF THE LAYER TO GIVE THE SOURCE TERMS FOR THE UPWARD TRSFC3A.127
! DIFFUSE FLUX AND THE TOTAL DOWNWARD FLUX. TRSFC3A.128
! TRSFC3A.129
DO I=I_LAYER_FIRST, I_LAYER_LAST TRSFC3A.130
DO L=1, N_PROFILE TRSFC3A.131
TRANS_0(L, I)=EXP(-TAU(L, I)*SEC_0(L)) TRSFC3A.132
SOURCE_COEFF(L, I, IP_SCF_SOLAR_UP) TRSFC3A.133
& =(GAMMA_UP(L, I)-REFLECT(L, I) TRSFC3A.134
& *(1.0E+00+GAMMA_DOWN(L, I))) TRSFC3A.135
& -GAMMA_UP(L, I)*TRANS(L, I)*TRANS_0(L, I) TRSFC3A.136
SOURCE_COEFF(L, I, IP_SCF_SOLAR_DOWN)=TRANS_0(L, I) TRSFC3A.137
& *(1.0E+00+GAMMA_DOWN(L, I) TRSFC3A.138
& -GAMMA_UP(L, I)*REFLECT(L, I)) TRSFC3A.139
& -(1.0E+00+GAMMA_DOWN(L, I))*TRANS(L, I) TRSFC3A.140
ENDDO TRSFC3A.141
ENDDO TRSFC3A.142
! TRSFC3A.143
! TRSFC3A.144
ELSE IF (ISOLIR.EQ.IP_INFRA_RED) THEN TRSFC3A.145
! TRSFC3A.146
! IN THE CASE OF INFRA-RED RADIATION, THE FIRST SOURCE TRSFC3A.147
! COEFFICIENT HOLDS THE MULTIPLIER FOR THE FIRST DIFFERENCE TRSFC3A.148
! OF THE PLANCK FUNCTION ACROSS THE LAYER, AND THE SECOND TRSFC3A.149
! THAT FOR THE SECOND DIFFERENCE. TRSFC3A.150
! TRSFC3A.151
DO I=I_LAYER_FIRST, I_LAYER_LAST TRSFC3A.152
DO L=1, N_PROFILE TRSFC3A.153
! TRSFC3A.154
! A TOLERANCE IS ADDED TO THE NUMERATOR AND THE DENOMIATOR TRSFC3A.155
! TO AVOID ILL-CONDITIONING AT SMALL OPTICAL DEPTHS. TRSFC3A.156
! TRSFC3A.157
SOURCE_COEFF(L, I, IP_SCF_IR_1D)=(1.0E+00-TRANS(L, I) TRSFC3A.158
& +REFLECT(L, I)+SQRT_TOL_MACHINE) TRSFC3A.159
& /(SQRT_TOL_MACHINE+TAU(L, I)*SUM(L, I)) TRSFC3A.160
! TRSFC3A.161
ENDDO TRSFC3A.162
ENDDO TRSFC3A.163
! TRSFC3A.164
! TRSFC3A.165
IF (L_IR_SOURCE_QUAD) THEN TRSFC3A.166
! TRSFC3A.167
! QUADRATIC CORRECTION TO SOURCE FUNCTION. TRSFC3A.168
! THIS CORRECTION IS VERY ILL-CONDITIONED FOR TRSFC3A.169
! SMALL OPTICAL DEPTHS SO THE ASYMPTOTIC FORM IS THEN USED. TRSFC3A.170
! TRSFC3A.171
EXPONENTIAL = EXP(3.3E-01*LOG(TOL_MACHINE)) GRB0F405.3
DO I=I_LAYER_FIRST, I_LAYER_LAST TRSFC3A.172
DO L=1, N_PROFILE TRSFC3A.173
! ADB2F404.1711
! USE A SEPARATE ASYMPTOTIC FORM WHEN THE OPTICAL ADB2F404.1712
! DEPTH IS SMALL, MAKING THE TRANSITION WHEN THE ADB2F404.1713
! OPTICAL DEPTH IS ROUGHLY EQUAL TO THE CUBE ROOT ADB2F404.1714
! OF THE MACHINE'S PRECISION. ADB2F404.1715
! ADB2F404.1716
IF (TAU(L, I).GT.EXPONENTIAL) THEN GRB0F405.4
SOURCE_COEFF(L, I, IP_SCF_IR_2D) TRSFC3A.175
& =-2.0E+00*(1.0E+00-TRANS(L, I)-REFLECT(L, I) TRSFC3A.176
& +SQRT_TOL_MACHINE) TRSFC3A.177
& /(DIFF(L, I)*TAU(L, I)+SQRT_TOL_MACHINE) TRSFC3A.178
ELSE TRSFC3A.179
SOURCE_COEFF(L, I, IP_SCF_IR_2D) TRSFC3A.180
& =-2.0E+00+DIFF(L, I)*TAU(L, I) TRSFC3A.181
ENDIF TRSFC3A.182
! ADB2F404.1717
SOURCE_COEFF(L, I, IP_SCF_IR_2D) TRSFC3A.183
& =-(1.0E+00+REFLECT(L, I)+TRANS(L, I) TRSFC3A.184
& +SOURCE_COEFF(L, I, IP_SCF_IR_2D)) ADB1F401.1234
& /(SUM(L, I)*TAU(L, I)+SQRT_TOL_MACHINE) TRSFC3A.187
! ADB2F404.1718
ENDDO TRSFC3A.188
ENDDO TRSFC3A.189
! TRSFC3A.190
ENDIF TRSFC3A.191
! TRSFC3A.192
ENDIF TRSFC3A.193
! TRSFC3A.194
! TRSFC3A.195
! TRSFC3A.196
RETURN TRSFC3A.197
END TRSFC3A.198
*ENDIF DEF,A01_3A,OR,DEF,A02_3A TRSFC3A.199
*ENDIF DEF,A70_1A ADB1F402.142