*IF DEF,A02_1B                                                             LWTRAN1B.2      
C ******************************COPYRIGHT******************************    GTS2F400.5743   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.5744   
C                                                                          GTS2F400.5745   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.5746   
C restrictions as set forth in the contract.                               GTS2F400.5747   
C                                                                          GTS2F400.5748   
C                Meteorological Office                                     GTS2F400.5749   
C                London Road                                               GTS2F400.5750   
C                BRACKNELL                                                 GTS2F400.5751   
C                Berkshire UK                                              GTS2F400.5752   
C                RG12 2SZ                                                  GTS2F400.5753   
C                                                                          GTS2F400.5754   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.5755   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.5756   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.5757   
C Modelling at the above address.                                          GTS2F400.5758   
C ******************************COPYRIGHT******************************    GTS2F400.5759   
C                                                                          GTS2F400.5760   
CLL Subroutine LWTRAN   ----------------------------------------------     LWTRAN1B.3      
CLL                                                                        LWTRAN1B.4      
CLL Purpose :                                                              LWTRAN1B.5      
CLL  It calculates clear-sky transmissivities in each of the NBANDS        LWTRAN1B.6      
CLL  longwave spectral bands (and, optionally, additional diagnostic       LWTRAN1B.7      
CLL  ones) from the pathlengths for each effective absorbing gas in        LWTRAN1B.8      
CLL  each band.  (Where the absorption by a gas includes terms with        LWTRAN1B.9      
CLL  different pathlength scaling, like water vapour line & continuum,     LWTRAN1B.10     
CLL  they are treated as two gases.)                                       LWTRAN1B.11     
CLL     The version of routine LWTRAN used in                              LWTRAN1B.12     
CLL  version 1B (gaseous effects treated as Morcrette et al, 1986) of      LWTRAN1B.13     
CLL  the UM LW code, and a dummy version of routine LWLKIN for             LWTRAN1B.14     
CLL  compatibility with other versions.                                    LWTRAN1B.15     
CLL  Version 3, part of the alternative code giving "ECMWF-like"           LWTRAN1B.16     
CLL  treatment of LW gaseous transmissivities, following Morcrette et al   LWTRAN1B.17     
CLL  (J.-J. Morcrette, L.D. Smith & Y. Fouquart, 1986, Beitr. Phys.        LWTRAN1B.18     
CLL  Atmosph., 59, 455-469).  All the calculations are changed: instead    LWTRAN1B.19     
CLL  of look-up tables for line absorption, ozone uses a Malkmus model,    LWTRAN1B.20     
CLL  and CO2 and water vapour use Horner's algorithm, while the            LWTRAN1B.21     
CLL  continuum terms, though still exponential, are calculated rather      LWTRAN1B.22     
CLL  indirectly to save evaluation of exponentials.  Also, different       LWTRAN1B.23     
CLL  pathlengths are generally used for different bands, and the           LWTRAN1B.24     
CLL  pathlengths are assumed to contain a diffusivity factor.  Version 3   LWTRAN1B.25     
CLL  of LWTRAN was set up from version 2.1 to be part of version 1B        LWTRAN1B.26     
CLL  (ECMWF-like gaseous transmissivities) of the LW from release 2.7 of   LWTRAN1B.27     
CLL  the UM.                            William Ingram 22 June 1992        LWTRAN1B.28     
CLL                                                                        LWTRAN1B.29     
CLL           Author: William Ingram                                       LWTRAN1B.30     
CLL                                                                        LWTRAN1B.31     
CLL  Model            Modification history from model version 3.0:         LWTRAN1B.32     
CLL version  Date                                                          LWTRAN1B.33     
CLL   4.2    Sept.96  T3E migration: routine optimised using cray vector   GSS1F403.960    
CLL                   library functions & appropriately restructured.      GSS1F403.961    
CLL                              D.Salmond & S.J.Swarbrick                 GSS1F403.962    
CLL                                                                        LWTRAN1B.34     
CLL Programming standard :                                                 LWTRAN1B.35     
CLL  It conforms with standard A of version 3 (07/9/90) of UMDP 4, and     LWTRAN1B.36     
CLL  contains no 8X-deprecated features.                                   LWTRAN1B.37     
CLL  If UPDATE *DEF CRAY is off, the code is standard FORTRAN 77 except    LWTRAN1B.38     
CLL  for having ! comments (it then sets the "vector length" to 1) but     LWTRAN1B.39     
CLL  otherwise it includes an automatic array also.                        LWTRAN1B.40     
CLL                                                                        LWTRAN1B.41     
CLL Logical components covered : P232                                      LWTRAN1B.42     
CLL  P232 (longwave radiation),                                            LWTRAN1B.43     
CLL  It is also intended to be easily extended to perform                  LWTRAN1B.44     
CLL  some of the functions of D23 (radiation diagnostics), by diagnosing   LWTRAN1B.45     
CLL  additional transmissivities.                                          LWTRAN1B.46     
CLL                                                                        LWTRAN1B.47     
CLL Project task : P23 (radiation)                                         LWTRAN1B.48     
CLL                                                                        LWTRAN1B.49     
CLL External documentation:      UMDP 23.                                  LWTRAN1B.50     
CLL                                                                        LWTRAN1B.51     
CLLEND -----------------------------------------------------------------   LWTRAN1B.52     
C*L                                                                        LWTRAN1B.53     

      SUBROUTINE LWTRAN (PATH, DUMMY1, DUMMY2, DUMMY3, DUMMY4,              6LWTRAN1B.54     
     &     L,                                                              GSS3F402.175    
     &     TRANS)                                                          LWTRAN1B.58     
C*                                                                         LWTRAN1B.59     
*CALL LWNBANDS                                                             LWTRAN1B.60     
*CALL LWNGASES                                                             LWTRAN1B.61     
*CALL LWNTRANS                                                             LWTRAN1B.62     
C*L                                                                        LWTRAN1B.70     
      INTEGER!, INTENT(IN) ::                                              LWTRAN1B.71     
     &     L,                    ! Number of points                        GSS3F402.176    
     &     DUMMY3                ! Not used in this version, but left      LWTRAN1B.75     
C                                !    as an argument for compatibility     LWTRAN1B.76     
      REAL!, INTENT(IN) ::                                                 LWTRAN1B.77     
     &     PATH (L,NGASES),      ! Scaled pathlengths for each gas         LWTRAN1B.78     
     &     DUMMY1, DUMMY2,       ! Not used in this version, but left      LWTRAN1B.79     
     &     DUMMY4                !    as arguments for compatibility       LWTRAN1B.80     
      REAL!, INTENT(OUT) ::                                                LWTRAN1B.81     
     &     TRANS(L,NTRANS)       ! Transmissivities                        LWTRAN1B.82     
C*                                                                         LWTRAN1B.83     
CL    !  No EXTERNAL routines called                                       LWTRAN1B.84     
*CALL LWGAFD                                                               LWTRAN1B.88     
C                                                                          LWTRAN1B.89     
      REAL SRAP,                           ! SQRT ( scaled pathlength )    LWTRAN1B.90     
     &     TCO22,                          ! CO2 transmissivities for      LWTRAN1B.91     
     &     TCO234,                         ! band 2, & for both 3 & 4.     LWTRAN1B.92     
     &     FBWCP1,                         !   Foreign- and Self-          LWTRAN1B.93     
     &     SBWCP1,                         ! Broadened Water vapour        LWTRAN1B.94     
     &     FBWCP2, FBWCP4, FBWCP8,         ! Continuum terms, being two    LWTRAN1B.95     
     &     FBWC16, FBWC32, FBWCPQ, FBWCPH, ! particular exponentials to    GSS3F402.177    
     &     SBWCP2, SBWCP4, SBWCP8,         ! the Powers 1, 2, 4, 8, 16,    LWTRAN1B.97     
     &     SBWC16, SBWC32, SBWCPQ, SBWCPH, ! 32, a Half & a Quarter.       GSS3F402.178    
     &     FBWCB2, FBWCB3,                 !   Foreign- and Self-          LWTRAN1B.99     
     &     FBWCB4, FBWCB5,                 ! Broadened Water vapour        LWTRAN1B.100    
     &     SBWCB2, SBWCB3,                 ! Continuum transmissivities,   LWTRAN1B.101    
     &     SBWCB4, SBWCB5,                 ! in Bands 2-5                  LWTRAN1B.102    
     &     TO31,                           ! Ozone transmissivities in     LWTRAN1B.103    
     &     TO32,                           !  2 fractions of the band.     LWTRAN1B.104    
     &     UXY(2*L),                       ! Used for the Malkmus          GSS1F403.963    
     &     VXY(2*L)                        ! calculation of TO31,2 -       GSS1F403.964    
!  VXY is the ozone-pathlength-weighted mean pressure over the             GSS3F402.179    
!    pathlength, & UXY is twice the unscaled path divided by VXY.          GSS3F402.180    
      INTEGER J, BAND,K                    ! Loopers over point & band     GSS1F403.965    
C                                                                          LWTRAN1B.110    
! Local workspace used for t3e optimisation                                GSS3F402.181    
      REAL sqrt_uxy(2*L)                                                   GSS1F403.966    
      REAL exp_vxy(2*L)                                                    GSS1F403.967    
      REAL utemp,vtemp                                                     GSS1F403.968    
      REAL EXPPATH(L,4)                                                    GSS1F403.969    
*IF DEF,VECTLIB                                                            PXVECTLB.101    
      REAL sqrt_PATH (L,8)                                                 PXVECTLB.102    
      call sqrt_v(L*8,path,sqrt_path)                                      PXVECTLB.103    
*ENDIF                                                                     PXVECTLB.104    
C                                                                          LWTRAN1B.111    
      DO JTRANS=1, NTRANS                                                  GSS3F402.183    
        DO J=1, L                                                          GSS3F402.184    
CL        !   Horner's algorithm for H2O transmission                      LWTRAN1B.115    
*IF DEF,VECTLIB                                                            PXVECTLB.105    
          SRAP  = sqrt_path(J,JTRANS)                                      GSS1F403.978    
*ELSE                                                                      GSS1F403.979    
          SRAP  = sqrt(PATH(j,jtrans))                                     GSS1F403.980    
*ENDIF                                                                     GSS1F403.981    
          TRANS(J,JTRANS) = ( PADE(1,JTRANS) + SRAP * PADE(2,JTRANS) )     LWTRAN1B.117    
     &          /( PADE(1,JTRANS)+SRAP*(PADE(3,JTRANS)+SRAP) )             GSS3F402.186    
        END DO                                                             GSS3F402.187    
      END DO                                                               GSS3F402.188    
C                                                                          LWTRAN1B.121    
      DO J=1,L                                                             GSS3F402.191    
        EXPPATH(J,1)=-0.002*PATH(J, 9)                                     GSS3F402.192    
        EXPPATH(J,2)=0.25*EXPPATH(J,1)                                     GSS1F403.982    
        EXPPATH(J,3)=      -PATH(J,10)                                     GSS1F403.983    
        EXPPATH(J,4)=0.25*EXPPATH(J,3)                                     GSS1F403.984    
      END DO                                                               GSS3F402.194    
*IF DEF,VECTLIB                                                            PXVECTLB.106    
! Use t3e fast vector functions                                            GSS1F403.986    
      call exp_v(L*4,EXPPATH,EXPPATH)                                      GSS1F403.987    
*ELSE                                                                      GSS3F402.196    
      DO K=1,4                                                             GSS1F403.988    
        DO J=1,L                                                           GSS1F403.989    
          EXPPATH(J,K)=EXP(EXPPATH(J,K))                                   GSS1F403.990    
        END DO                                                             GSS1F403.991    
      END DO                                                               GSS1F403.992    
*ENDIF                                                                     GSS3F402.202    
      DO J = 1, L                                                          LWTRAN1B.123    
      utemp = 4. * PATH(J,11) * PATH(J,11)                                 GSS1F403.993    
     &          /( PIALF * PATH(J,12) )                                    GSS1F403.994    
      uxy(j)=1.+O3M1*utemp                                                 GSS1F403.995    
      uxy(j+l)=1.+O3M2*utemp                                               GSS1F403.996    
      ENDDO                                                                GSS1F403.997    
*IF DEF,VECTLIB                                                            PXVECTLB.107    
      call sqrt_v(2*l,uxy,sqrt_uxy)                                        GSS1F403.999    
*ELSE                                                                      GSS1F403.1000   
      DO J=1,2*L                                                           GSS1F403.1001   
      sqrt_uxy(j)=sqrt(uxy(j))                                             GSS1F403.1002   
      ENDDO                                                                GSS1F403.1003   
*ENDIF                                                                     GSS1F403.1004   
      DO J = 1, L                                                          GSS1F403.1005   
      vtemp = PIALF * PATH(J,12)                                           GSS1F403.1006   
     &         /( 2. * PATH(J,11) )                                        GSS1F403.1007   
      vxy(j)=-(sqrt_uxy(j)-1.)*vtemp                                       GSS1F403.1008   
      vxy(j+l)=-(sqrt_uxy(j+l)-1.)*vtemp                                   GSS1F403.1009   
      ENDDO                                                                GSS1F403.1010   
*IF DEF,VECTLIB                                                            PXVECTLB.108    
      call exp_v(2*l,vxy,exp_vxy)                                          GSS1F403.1012   
*ELSE                                                                      GSS1F403.1013   
      DO J=1,2*L                                                           GSS1F403.1014   
      exp_vxy(j)=exp(vxy(j))                                               GSS1F403.1015   
      ENDDO                                                                GSS1F403.1016   
*ENDIF                                                                     GSS1F403.1017   
      DO J = 1, L                                                          GSS1F403.1018   
CL      !   Horner's algorithm for CO2 transmission                        LWTRAN1B.124    
*IF DEF,VECTLIB                                                            PXVECTLB.109    
        SRAP=   sqrt_path(j,7)                                             GSS1F403.1020   
*ELSE                                                                      GSS1F403.1021   
        SRAP  = sqrt(PATH(j,7))                                            GSS3F402.203    
*ENDIF                                                                     GSS1F403.1022   
        TCO22 = ( PADE(1,7) + SRAP*PADE(2,7) ) /                           GSS3F402.204    
     &              ( PADE(1,7)+ SRAP * ( PADE(3,7) + SRAP ) )             GSS3F402.205    
C                                                                          LWTRAN1B.129    
*IF DEF,VECTLIB                                                            PXVECTLB.110    
        SRAP=   sqrt_path(j,8)                                             GSS1F403.1024   
*ELSE                                                                      GSS1F403.1025   
        SRAP  = sqrt(PATH(j,8))                                            GSS3F402.206    
*ENDIF                                                                     GSS1F403.1026   
                                                                           GSS1F403.1027   
        TCO234 = ( PADE(1,8) + SRAP*PADE(2,8) ) /                          GSS3F402.207    
     &              ( PADE(1,8) + SRAP * ( PADE(3,8) + SRAP ) )            LWTRAN1B.132    
C                                                                          LWTRAN1B.135    
        FBWCP1 = EXPPATH(J,1)                                              GSS3F402.208    
                                                                           GSS3F402.209    
        FBWCP2 = FBWCP1 * FBWCP1                                           LWTRAN1B.141    
        FBWCP4 = FBWCP2 * FBWCP2                                           LWTRAN1B.142    
        FBWCP8 = FBWCP4 * FBWCP4                                           LWTRAN1B.143    
        FBWC16 = FBWCP8 * FBWCP8                                           LWTRAN1B.144    
        FBWC32 = FBWC16 * FBWC16                                           LWTRAN1B.145    
                                                                           GSS1F403.1028   
        FBWCPQ = EXPPATH(J,2)                                              GSS1F403.1029   
C                                                                          LWTRAN1B.148    
        FBWCB5 = FBWC32 * FBWC32 * FBWC16                                  GSS1F403.1030   
        FBWCB2 = FBWC32 * FBWCB5                                           GSS1F403.1031   
        FBWCB3 = FBWCP4 * FBWCP2 * FBWCPQ                                  LWTRAN1B.150    
        FBWCB4 = FBWCP4 * FBWCP1                                           LWTRAN1B.151    
C                                                                          LWTRAN1B.153    
        SBWCP1 = EXPPATH(J,3)                                              GSS1F403.1032   
C                                                                          GSS3F402.211    
        SBWCP2 = SBWCP1 * SBWCP1                                           LWTRAN1B.159    
        SBWCP4 = SBWCP2 * SBWCP2                                           LWTRAN1B.160    
        SBWCP8 = SBWCP4 * SBWCP4                                           LWTRAN1B.161    
        SBWC16 = SBWCP8 * SBWCP8                                           LWTRAN1B.162    
        SBWC32 = SBWC16 * SBWC16                                           LWTRAN1B.163    
                                                                           GSS1F403.1033   
        SBWCPQ = EXPPATH(J,4)                                              GSS1F403.1034   
C                                                                          LWTRAN1B.166    
        SBWCB2 = SBWCP8 * SBWCP4                                           LWTRAN1B.167    
        SBWCB3 = SBWCP4 * SBWCP2 * SBWCPQ                                  LWTRAN1B.168    
        SBWCB4 = SBWCP4 * SBWCP1                                           LWTRAN1B.169    
        SBWCB5 = SBWC32 * SBWC32 * SBWC16                                  LWTRAN1B.170    
C                                                                          LWTRAN1B.171    
        TRANS(J,2) = TRANS(J,2) * FBWCB2 * SBWCB2 * TCO22                  GSS1F403.1035   
        TRANS(J,3) = TRANS(J,3) * FBWCB3 * SBWCB3 * TCO234                 GSS1F403.1036   
        TRANS(J,4) = TRANS(J,4) * FBWCB4 * SBWCB4 * TCO234                 GSS1F403.1037   
     1   * ( O3WT1 * exp_vxy(j) +  O3WT2 * exp_vxy(j+l))                   GSS1F403.1038   
        TRANS(J,5) = TRANS(J,5) * FBWCB5 * SBWCB5                          LWTRAN1B.175    
C                                                                          LWTRAN1B.176    
      ENDDO                                                                LWTRAN1B.187    
C                                                                          LWTRAN1B.188    
      RETURN                                                               LWTRAN1B.189    
      END                                                                  LWTRAN1B.190    

      SUBROUTINE LWLKIN (DUMMY)                                             2LWTRAN1B.191    
CLL   ! Dummy routine provided in version 1B of the LW from release 2.7    LWTRAN1B.192    
CLL   !   of the UM for compatibility with version 1A and the              LWTRAN1B.193    
CLL   !   control-level routines.                                          LWTRAN1B.194    
      REAL DUMMY                       ! A dummy argument in all senses.   LWTRAN1B.195    
      RETURN                                                               LWTRAN1B.196    
      END                                                                  LWTRAN1B.197    
*ENDIF A02_1B                                                              LWTRAN1B.198