*IF DEF,A02_1A LWTRAN1A.2
C ******************************COPYRIGHT****************************** GTS2F400.5725
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.5726
C GTS2F400.5727
C Use, duplication or disclosure of this code is subject to the GTS2F400.5728
C restrictions as set forth in the contract. GTS2F400.5729
C GTS2F400.5730
C Meteorological Office GTS2F400.5731
C London Road GTS2F400.5732
C BRACKNELL GTS2F400.5733
C Berkshire UK GTS2F400.5734
C RG12 2SZ GTS2F400.5735
C GTS2F400.5736
C If no contract has been raised with this copy of the code, the use, GTS2F400.5737
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.5738
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.5739
C Modelling at the above address. GTS2F400.5740
C ******************************COPYRIGHT****************************** GTS2F400.5741
C GTS2F400.5742
CLL Subroutine LWTRAN ---------------------------------------------- LWTRAN1A.3
CLL LWTRAN1A.4
CLL Purpose : LWTRAN1A.5
CLL It calculates clear-sky transmissivities in each of the NBANDS LWTRAN1A.6
CLL longwave spectral bands (and, optionally, additional diagnostic LWTRAN1A.7
CLL ones) from the pathlengths for each effective absorbing gas. LWTRAN1A.8
CLL (Where the absorption by a gas includes terms with different LWTRAN1A.9
CLL pathlength scaling, like water vapour line & continuum, they are LWTRAN1A.10
CLL different gases as far as LWTRAN is concerned.) It uses look-up LWTRAN1A.11
CLL tables derived from line data as described by Slingo and Wilderspin LWTRAN1A.12
CLL (April 1986, Quart.J.R.Met.Soc., 112, 472, 371-386), or UMDP 23, LWTRAN1A.13
CLL which incorporate a full angular integration. Interpolation is LWTRAN1A.14
CLL logarithmic in the pathlength, with values at half-decade intervals LWTRAN1A.15
CLL from 10**-9 to 10**3 kg/m2. LWTRAN1A.16
CLL The version of routines LWTRAN and LWLKIN LWTRAN1A.17
CLL used in version 1A (gaseous effects treated as in Slingo & LWTRAN1A.18
CLL Wilderspin, 1986) of the UM LW code. LWTRAN1A.19
CLL LWLKIN must be CALLed to initialize TRTAB before LWTRAN is CALLed LWTRAN1A.20
CLL (LWTRAN would normally be CALLed via LWMAST and LWRAD). LWTRAN1A.21
CLL LWTRAN1A.22
CLL Author: William Ingram LWTRAN1A.23
CLL LWTRAN1A.24
CLL Model Modification history from model version 3.0: LWTRAN1A.25
CLL version Date LWTRAN1A.26
CLL 4.2 Sept.96 T3E migration: *DEF CRAY removed; GSS3F402.115
CLL *DEF T3E used for T3E library functions; GSS3F402.116
CLL dynamic allocation no longer *DEF controlled; GSS3F402.117
CLL cray HF functions replaced by T3E lib functions. GSS3F402.118
CLL S.J.Swarbrick GSS3F402.119
CLL LWTRAN1A.27
CLL Programming standard : LWTRAN1A.28
CLL It conforms with standard A of version 3 (07/9/90) of UMDP 4, and LWTRAN1A.29
CLL contains no 8X-deprecated features. LWTRAN1A.30
CLL If UPDATE *DEF CRAY is off, the code is standard FORTRAN 77 except LWTRAN1A.31
CLL for having ! comments (it then sets the "vector length" to 1) but LWTRAN1A.32
CLL otherwise it includes an automatic array also. LWTRAN1A.33
CLL LWTRAN1A.34
CLL Logical components covered : P23 LWTRAN1A.35
CLL Component 232 (longwave radiation), LWTRAN1A.36
CLL It is also intended to be easily extended to perform LWTRAN1A.37
CLL some of the functions of D23 (radiation diagnostics), by diagnosing LWTRAN1A.38
CLL additional transmissivities. LWTRAN1A.39
CLL LWTRAN1A.40
CLL Project task : P23 (radiation) LWTRAN1A.41
CLL LWTRAN1A.42
CLL External documentation: UMDP 23. LWTRAN1A.43
CLL LWTRAN1A.44
CLLEND ----------------------------------------------------------------- LWTRAN1A.45
C*L LWTRAN1A.46
SUBROUTINE LWTRAN (PATH, TRTAB, DTRTAB, FLSTBD, KEXP, 6LWTRAN1A.47
& L, GSS3F402.120
& TRANS) LWTRAN1A.51
C* LWTRAN1A.52
*CALL LWNBANDS
LWTRAN1A.53
*CALL LWNGASES
LWTRAN1A.54
*CALL LWNTRANS
LWTRAN1A.55
*CALL LWNLKUPS
LWTRAN1A.56
*CALL LWTABLE
LWTRAN1A.57
C*L LWTRAN1A.63
INTEGER!, INTENT(IN) :: LWTRAN1A.64
& L, ! Number of points GSS3F402.121
& FLSTBD(NGASES,2) ! First & last band in which each LWTRAN1A.68
C ! effective gas is active LWTRAN1A.69
REAL!, INTENT(IN) :: LWTRAN1A.70
& PATH (L,NGASES), ! Scaled pathlengths for each gas LWTRAN1A.71
& TRTAB(IT,NTRANS,NGASES), ! Transmissivity look-up table LWTRAN1A.72
& DTRTAB(IT,NTRANS,NGASES), ! and table of its differences LWTRAN1A.73
& KEXP(NTRANS) ! k1 in Eq 2.3.6, used instead of LWTRAN1A.74
C ! (D)TRTAB for continuum absorption. LWTRAN1A.75
REAL!, INTENT(OUT) :: LWTRAN1A.76
& TRANS(L,NTRANS) ! Transmissivities LWTRAN1A.77
C* LWTRAN1A.78
CL ! No EXTERNAL routines called LWTRAN1A.79
CL ! Two workspace arrays of size L, one real (Y) & one integer (I) GSS3F402.122
C LWTRAN1A.85
REAL RLNR10, ! NDEC/ln(10) LWTRAN1A.86
& TGAS, ! Transmissivity due to a single "gas" LWTRAN1A.87
& Y(L) ! Used in the interpolation LWTRAN1A.88
INTEGER JTRANS, GAS, J, ! Loop over transmissivity, gas & point LWTRAN1A.89
& I(L) ! INT(Y) LWTRAN1A.90
! GSS3F402.123
! Local workspace GSS3F402.124
REAL LOGPATH(L,3) GSS1F403.2
REAL EXPPATH(FLSTBD(4,2)-FLSTBD(4,1)+1,L) GSS1F403.3
INTEGER fldiff GSS3F402.127
! GSS3F402.128
! No. of rows for exp_v32 function GSS3F402.129
fldiff = FLSTBD(4,2) - FLSTBD(4,1) + 1 GSS3F402.130
! GSS3F402.131
RLNR10 = REAL(NDEC) / LOG(10.) ! Cannot put this in a LWTRAN1A.91
C ! PARAMETER statement in FORTRAN77, but the CRAY compiler's LWTRAN1A.92
C ! optimizer will make it have the same effect as if it were. LWTRAN1A.93
C LWTRAN1A.94
C ! First, initialize the transmissivities to 1 - we will assume LWTRAN1A.95
C ! random overlap of lines of different gases, so that the total LWTRAN1A.96
C ! transmissivity in each band is the product of the LWTRAN1A.97
C ! transmissivities for the individual gases. LWTRAN1A.98
C LWTRAN1A.99
DO 1 JTRANS=1, NTRANS LWTRAN1A.100
Cfpp$ Select(CONCUR) LWTRAN1A.101
DO 1 J=1, L LWTRAN1A.102
TRANS(J,JTRANS) = 1. LWTRAN1A.103
1 CONTINUE LWTRAN1A.104
C LWTRAN1A.105
C ! Then loop through those effective gases which use look-up tables LWTRAN1A.106
C LWTRAN1A.107
*IF DEF,VECTLIB PXVECTLB.99
! Use fast t3e vector function GSS3F402.133
DO J=1,L GSS3F402.134
DO GAS=1,3 GSS3F402.135
logpath(j,gas)=path(j,gas) GSS3F402.136
END DO GSS3F402.137
END DO GSS3F402.138
call alog_v(
l*3, logpath, logpath) GSS1F403.4
*ELSE GSS3F402.140
DO J=1,L GSS3F402.141
DO GAS=1,3 GSS3F402.142
logpath(j,gas)=log(path(j,gas)) GSS3F402.143
END DO GSS3F402.144
END DO GSS3F402.145
*ENDIF GSS3F402.146
! GSS3F402.147
DO 2 GAS=1, 3 LWTRAN1A.108
Cfpp$ Select(CONCUR) LWTRAN1A.109
DO 20 J=1, L LWTRAN1A.110
Y(J) = LOGPATH(J,GAS) * RLNR10 + OFFSET GSS3F402.148
C GSS3F402.149
C OFFSET ALLLOWS FOR THE START-POINT OF THE TABLES (SAME FOR ALL GASES). LWTRAN1A.116
I(J) = INT(Y(J)) LWTRAN1A.120
Y(J) = Y(J) - REAL(I(J)) LWTRAN1A.121
IF (I(J).GT.IT) I(J) = IT LWTRAN1A.122
20 CONTINUE LWTRAN1A.123
DO 22 JTRANS=FLSTBD(GAS,1), FLSTBD(GAS,2) LWTRAN1A.124
Cfpp$ Select(CONCUR) LWTRAN1A.125
DO 22 J=1, L LWTRAN1A.126
IF (I(J).GE.1) THEN LWTRAN1A.127
TGAS = TRTAB(I(J),JTRANS,GAS) + Y(J)*DTRTAB(I(J),JTRANS,GAS) LWTRAN1A.128
ELSE LWTRAN1A.129
TGAS = LWTRAN1A.130
& 1. - ( 1. - TRTAB(1,JTRANS,GAS) ) * PATH(J,GAS) / ZSTART LWTRAN1A.131
ENDIF LWTRAN1A.134
C ! Assume random overlap of lines of different gases, so that LWTRAN1A.135
C ! the total transmissivity is the product of the LWTRAN1A.136
C ! transmissivities for the individual gases: LWTRAN1A.137
TRANS(J,JTRANS) = TRANS(J,JTRANS) * TGAS LWTRAN1A.138
22 CONTINUE LWTRAN1A.139
2 CONTINUE LWTRAN1A.140
C LWTRAN1A.141
C ! Currently H2O continuum is just exponential (2.3.4), & CFCs will LWTRAN1A.142
C ! be too. Again, transmissivities just multiply: LWTRAN1A.143
C LWTRAN1A.144
! Use exppath to store products.... GSS3F402.150
do jtrans = FLSTBD(4,1), FLSTBD(4,2) GSS3F402.151
do j = 1,L GSS3F402.152
exppath(jtrans-FLSTBD(4,1)+1,j) = KEXP(JTRANS)*PATH(J,4) GSS3F402.153
end do GSS3F402.154
end do GSS3F402.155
GSS3F402.156
! ....then compute exp of products in exppath GSS3F402.157
*IF DEF,VECTLIB PXVECTLB.100
! Use fast t3e vector function GSS3F402.159
call exp_v(
fldiff*l,exppath,exppath) GSS1F403.5
*ELSE GSS3F402.161
DO JTRANS=1,FLSTBD(4,2)-FLSTBD(4,1)+1 GSS3F402.162
DO J=1,L GSS3F402.163
exppath(jtrans,j)=exp(exppath(jtrans,j)) GSS3F402.164
end do GSS3F402.165
end do GSS3F402.166
*ENDIF GSS3F402.167
GSS3F402.168
DO 3 JTRANS=FLSTBD(4,1), FLSTBD(4,2) LWTRAN1A.145
Cfpp$ Select(CONCUR) LWTRAN1A.146
DO 30 J=1, L LWTRAN1A.147
TRANS(J,JTRANS) = LWTRAN1A.148
& TRANS(J,JTRANS) * EXPPATH(JTRANS-FLSTBD(4,1)+1,J) GSS3F402.169
30 CONTINUE LWTRAN1A.154
3 CONTINUE LWTRAN1A.155
C LWTRAN1A.156
RETURN LWTRAN1A.157
END LWTRAN1A.158
SUBROUTINE LWLKIN (LWLUT) 2LWTRAN1A.159
*CALL LWNBANDS
LWTRAN1A.160
*CALL LWNGASES
LWTRAN1A.161
*CALL LWNTRANS
LWTRAN1A.162
*CALL LWNLKUPS
LWTRAN1A.163
REAL!, INTENT(OUT) LWTRAN1A.164
& LWLUT(IT,NTRANS,NGASES,2) LWTRAN1A.165
REAL TRTAB(IT,NTRANS,NGASES), LWTRAN1A.166
& CO2(IT), WL(IT,6), WC(IT,4), O3(IT) LWTRAN1A.167
C ! Equivalence arrays named after the various gases to the relevant LWTRAN1A.168
C ! areas of TRTAB, to make the DATA statements easier to understand LWTRAN1A.169
C ! and to change the order in which the gases are treated. LWTRAN1A.170
EQUIVALENCE LWTRAN1A.171
& (CO2(1),TRTAB(1,3,1)), (WL(1,1),TRTAB(1,1,2)), LWTRAN1A.172
& (O3(1),TRTAB(1,4,3)), (WC(1,1),TRTAB(1,2,4)) LWTRAN1A.173
INTEGER JTRANS, GAS, J ! Loop over transmissivity, gas & point LWTRAN1A.174
*CALL LWLKUPNU
LWTRAN1A.175
C ! Initialize unused parts to zero to prevent INDEF problems LWTRAN1A.176
DATA ((TRTAB(J,JTRANS,1),J=1,IT),JTRANS=1,2), LWTRAN1A.177
& ((TRTAB(J,JTRANS,1),J=1,IT),JTRANS=4,6), LWTRAN1A.178
& ((TRTAB(J,JTRANS,3),J=1,IT),JTRANS=1,3), LWTRAN1A.179
& ((TRTAB(J,JTRANS,3),J=1,IT),JTRANS=5,6), LWTRAN1A.180
& ((TRTAB(J,JTRANS,4),J=1,IT),JTRANS=1,6) LWTRAN1A.181
& / IT*0., IT*0., IT*0., IT*0., IT*0., IT*0., IT*0., IT*0., LWTRAN1A.182
& IT*0., IT*0., IT*0., IT*0., IT*0., IT*0., IT*0., IT*0. / LWTRAN1A.183
C LWTRAN1A.184
DO 1 GAS=1, NGASES LWTRAN1A.185
DO 1 JTRANS=1, NTRANS LWTRAN1A.186
DO 1 J=1, IT LWTRAN1A.187
LWLUT(J,JTRANS,GAS,1) = TRTAB(J,JTRANS,GAS) LWTRAN1A.188
1 CONTINUE LWTRAN1A.189
C LWTRAN1A.190
DO 2 GAS=1, NGASES LWTRAN1A.191
DO 2 JTRANS=1, NTRANS LWTRAN1A.192
DO 2 J=1, IT-1 LWTRAN1A.193
LWLUT(J,JTRANS,GAS,2) = LWTRAN1A.194
& LWLUT(J+1,JTRANS,GAS,1) - LWLUT(J,JTRANS,GAS,1) LWTRAN1A.195
2 CONTINUE LWTRAN1A.196
C LWTRAN1A.197
C ! Set the last element for each gas and band to zero, so that the LWTRAN1A.198
C ! extrapolation done for any pathlength greater than the maximum LWTRAN1A.199
C ! catered for just gives the greatest value in TRTAB. LWTRAN1A.200
C LWTRAN1A.201
DO 3 GAS=1, NGASES LWTRAN1A.202
DO 3 JTRANS=1, NTRANS LWTRAN1A.203
LWLUT(IT,JTRANS,GAS,2) = 0. LWTRAN1A.204
3 CONTINUE LWTRAN1A.205
C LWTRAN1A.206
RETURN LWTRAN1A.207
END LWTRAN1A.208
*ENDIF LWTRAN1A.209