*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.37
*IF DEF,A01_3A,OR,DEF,A02_3A IRS3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13365
C GTS2F400.13366
C Use, duplication or disclosure of this code is subject to the GTS2F400.13367
C restrictions as set forth in the contract. GTS2F400.13368
C GTS2F400.13369
C Meteorological Office GTS2F400.13370
C London Road GTS2F400.13371
C BRACKNELL GTS2F400.13372
C Berkshire UK GTS2F400.13373
C RG12 2SZ GTS2F400.13374
C GTS2F400.13375
C If no contract has been raised with this copy of the code, the use, GTS2F400.13376
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13377
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13378
C Modelling at the above address. GTS2F400.13379
C ******************************COPYRIGHT****************************** GTS2F400.13380
C GTS2F400.13381
!+ Subroutine to calcaulate IR source function for differential flux. IRS3A.3
! IRS3A.4
! Method: IRS3A.5
! The linear contribution to the source function is proportional IRS3A.6
! to the absorption divided by the optical depth. A tolerance is IRS3A.7
! added to the optical depth to allow for the depth's being 0. IRS3A.8
! Corrections may also be made for cwa quadratic variation in the IRS3A.9
! temperature across the layer and for the effects of edges. IRS3A.10
! IRS3A.11
! Current Owner of Code: J. M. Edwards IRS3A.12
! IRS3A.13
! History: IRS3A.14
! Version Date Comment IRS3A.15
! 4.0 27-07-95 Original Code IRS3A.16
! (J. M. Edwards) IRS3A.17
! IRS3A.18
! Description of Code: IRS3A.19
! FORTRAN 77 with extensions listed in documentation. IRS3A.20
! IRS3A.21
!- --------------------------------------------------------------------- IRS3A.22
SUBROUTINE IR_SOURCE(N_PROFILE, I_LAYER_FIRST, I_LAYER_LAST 6,4IRS3A.23
& , SOURCE_COEFF, DEL_PLANCK, L_IR_SOURCE_QUAD, DIFF_PLANCK_2 IRS3A.24
& , L_2_STREAM_CORRECT, PLANCK_SOURCE IRS3A.25
& , GROUND_EMISSION, N_LAYER IRS3A.26
& , TAU, TRANS IRS3A.27
& , S_DOWN, S_UP IRS3A.28
& , NPD_PROFILE, NPD_LAYER IRS3A.29
& ) IRS3A.30
! IRS3A.31
! IRS3A.32
! IRS3A.33
IMPLICIT NONE IRS3A.34
! IRS3A.35
! IRS3A.36
! SIZES OF DUMMY ARRAYS. IRS3A.37
INTEGER !, INTENT(IN) IRS3A.38
& NPD_PROFILE IRS3A.39
! MAXIMUM NUMBER OF PROFILES IRS3A.40
& , NPD_LAYER IRS3A.41
! MAXIMUM NUMBER OF LAYERS IRS3A.42
! IRS3A.43
! INCLUDE COMDECKS. IRS3A.44
*CALL DIMFIX3A
IRS3A.45
*CALL SCFPT3A
IRS3A.46
! IRS3A.47
! DUMMY VARIABLES. IRS3A.48
INTEGER !, INTENT(IN) IRS3A.49
& N_PROFILE IRS3A.50
! NUMBER OF PROFILES IRS3A.51
& , I_LAYER_FIRST IRS3A.52
! FIRST LAYER TO CONSIDER IRS3A.53
& , I_LAYER_LAST IRS3A.54
! LAST LAYER TO CONSIDER IRS3A.55
& , N_LAYER IRS3A.56
! NUMBER OF LAYERS IRS3A.57
! IRS3A.58
LOGICAL !, INTENT(IN) IRS3A.59
& L_IR_SOURCE_QUAD IRS3A.60
! USE A QUADRATIC REPRESENTATION IRS3A.61
& , L_2_STREAM_CORRECT IRS3A.62
! EDGE CORRECTION TO 2-STREAM IRS3A.63
! IRS3A.64
REAL !, INTENT(IN) IRS3A.65
& SOURCE_COEFF(NPD_PROFILE, NPD_LAYER, NPD_SOURCE_COEFF) IRS3A.66
! COEFFICIENTS FOR SOURCE TERMS IRS3A.67
& , DEL_PLANCK(NPD_PROFILE, NPD_LAYER) IRS3A.68
! DIFFERENCE IN PLANCK FUNCTION ACROSS THE LAYER IRS3A.69
& , DIFF_PLANCK_2(NPD_PROFILE, NPD_LAYER) IRS3A.70
! 2x2ND DIFFERENCE OF PLANCKIAN IRS3A.71
& , TAU(NPD_PROFILE, NPD_LAYER) IRS3A.72
! OPTCIAL DEPTH IRS3A.73
& , TRANS(NPD_PROFILE, NPD_LAYER) IRS3A.74
! TRANSMISSION COEFFICIENT IRS3A.75
& , PLANCK_SOURCE(NPD_PROFILE, 0: NPD_LAYER) IRS3A.76
! PLANCKIAN SOURCE FUNCTION IRS3A.77
& , GROUND_EMISSION(NPD_PROFILE) IRS3A.78
! TOTAL FLUX EMITTED FROM GROUND IRS3A.79
! IRS3A.80
REAL !, INTENT(OUT) IRS3A.81
& S_DOWN(NPD_PROFILE, NPD_LAYER) IRS3A.82
! UPWARD SOURCE FUNCTION IRS3A.83
& , S_UP(NPD_PROFILE, NPD_LAYER) IRS3A.84
! UPWARD SOURCE FUNCTION IRS3A.85
! IRS3A.86
! IRS3A.87
! LOCAL VARIABLES. IRS3A.88
! IRS3A.89
INTEGER IRS3A.90
& I IRS3A.91
! LOOP VARIABLE IRS3A.92
& , L IRS3A.93
! LOOP VARIABLE IRS3A.94
! IRS3A.95
REAL IRS3A.96
& TAUC(NPD_PROFILE, 0: NPD_LAYER) IRS3A.97
! CUMULATIVE OPTICAL DEPTH IRS3A.98
& , PLANCK_AVE(NPD_PROFILE, 0: NPD_LAYER) IRS3A.99
! AVERAGE PLANCKIAN IRS3A.100
& , DELTA_TAU_UP_TOP IRS3A.101
! OPTICAL DEPTH: SURF-TOP OF LAYER IRS3A.102
& , DELTA_TAU_UP_BASE IRS3A.103
! OPTICAL DEPTH: SURF-BASE OF LAYER IRS3A.104
! IRS3A.105
! FUNCTIONS CALLED: IRS3A.106
REAL IRS3A.107
& E3_ACC01 IRS3A.108
! THIRD EXPONENTIAL INTEGRAL TO 1% IRS3A.109
EXTERNAL IRS3A.110
& E3_ACC01 IRS3A.111
! IRS3A.112
! IRS3A.113
! IRS3A.114
! MULTIPLY THE SOURCE COEFFICIENTS BY THE PLANCKIAN DIFFERENCES IRS3A.115
! TO THE ORDER REQUIRED. IRS3A.116
! IRS3A.117
IF (L_IR_SOURCE_QUAD) THEN IRS3A.118
! IRS3A.119
DO I=I_LAYER_FIRST, I_LAYER_LAST IRS3A.120
DO L=1, N_PROFILE IRS3A.121
S_UP(L, I)=SOURCE_COEFF(L, I, IP_SCF_IR_1D) IRS3A.122
& *DEL_PLANCK(L, I) IRS3A.123
& +SOURCE_COEFF(L, I, IP_SCF_IR_2D) IRS3A.124
& *DIFF_PLANCK_2(L, I) IRS3A.125
S_DOWN(L, I)=-SOURCE_COEFF(L, I, IP_SCF_IR_1D) IRS3A.126
& *DEL_PLANCK(L, I) IRS3A.127
& +SOURCE_COEFF(L, I, IP_SCF_IR_2D) IRS3A.128
& *DIFF_PLANCK_2(L, I) IRS3A.129
ENDDO IRS3A.130
! IRS3A.131
ENDDO IRS3A.132
! IRS3A.133
ELSE IRS3A.134
! IRS3A.135
DO I=I_LAYER_FIRST, I_LAYER_LAST IRS3A.136
DO L=1, N_PROFILE IRS3A.137
S_UP(L, I)=SOURCE_COEFF(L, I, IP_SCF_IR_1D) IRS3A.138
& *DEL_PLANCK(L, I) IRS3A.139
S_DOWN(L, I)=-S_UP(L, I) IRS3A.140
ENDDO IRS3A.141
ENDDO IRS3A.142
! IRS3A.143
ENDIF IRS3A.144
! IRS3A.145
! IRS3A.146
! EDGE CORRECTIONS TO 2-STREAM EQUATIONS. IRS3A.147
! IRS3A.148
IF (L_2_STREAM_CORRECT) THEN IRS3A.149
! IRS3A.150
DO L=1, N_PROFILE IRS3A.151
TAUC(L, 0)=0.0E+00 IRS3A.152
ENDDO IRS3A.153
DO I=1, N_LAYER IRS3A.154
DO L=1, N_PROFILE IRS3A.155
TAUC(L, I)=TAUC(L, I-1)+TAU(L, I) IRS3A.156
PLANCK_AVE(L, I) IRS3A.157
& =0.5E+00*(PLANCK_SOURCE(L, I-1)+PLANCK_SOURCE(L, I)) IRS3A.158
ENDDO IRS3A.159
ENDDO IRS3A.160
! IRS3A.161
DO I=1, N_LAYER IRS3A.162
DO L=1, N_PROFILE IRS3A.163
DELTA_TAU_UP_TOP=TAUC(L, N_LAYER)-TAUC(L, I-1) IRS3A.164
DELTA_TAU_UP_BASE=TAUC(L, N_LAYER)-TAUC(L, I) IRS3A.165
S_UP(L, I)=S_UP(L, I) IRS3A.166
& +2.0E+00*(GROUND_EMISSION(L)-PLANCK_AVE(L, I)) IRS3A.167
& *(E3_ACC01
(DELTA_TAU_UP_TOP) IRS3A.168
& -TRANS(L, I)*E3_ACC01
(DELTA_TAU_UP_BASE)) IRS3A.169
S_DOWN(L, I)=S_DOWN(L, I) IRS3A.170
& +2.0E+00*PLANCK_AVE(L, I) IRS3A.171
& *(TRANS(L, I)*E3_ACC01
(TAUC(L, I-1)) IRS3A.172
& -E3_ACC01
(TAUC(L, I))) IRS3A.173
ENDDO IRS3A.174
ENDDO IRS3A.175
IRS3A.176
ENDIF IRS3A.177
! IRS3A.178
! IRS3A.179
! IRS3A.180
RETURN IRS3A.181
END IRS3A.182
*ENDIF DEF,A01_3A,OR,DEF,A02_3A IRS3A.183
*ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.38