!OPTIONS XOPT(HSFUN)
SUBROUTINE SWUTL &
 & ( KIDIA , KFDIA  , KLON   , KLEV,&
 !- trajectory inputs     
 & PSCT5 , PCARDI5, PCLDSW5, PPMB5 , PPSOL5,&
 & PRMU05, PTAVE5 , PWV5,&
 !- trajectory outputs     
 & PAKI5 , PCLD5  , PCLEAR5, PDSIG5, PFACT5, PRMU5,&
 & PSEC5 , PUD5,&
 !- perturbation inputs     
 & PSCT  , PCARDI , PCLDSW , PPMB  , PPSOL,&
 & PRMU0 , PTAVE  , PWV,&
 !- perturbation outputs     
 & PAKI  , PCLD   , PCLEAR , PDSIG , PFACT , PRMU,&
 & PSEC  , PUD &
 & )  

!**** *SWUTL* - SHORTWAVE RADIATION, ABSORBER AMOUNTS
!               -> TANGENT LINEAR <-

!     PURPOSE.
!     --------
!           COMPUTES THE ABSORBER AMOUNTS USED IN SHORTWAVE RADIATION
!     CALCULATIONS

!**   INTERFACE.
!     ----------
!          *SWUTL* IS CALLED BY *SWTL*

!        IMPLICIT ARGUMENTS :
!        --------------------

!     ==== INPUTS ===
!     ==== OUTPUTS ===

!     METHOD.
!     -------

!          1. COMPUTES ABSORBER AMOUNTS WITH TEMPERATURE AND PRESSURE
!     SCALING.

!     EXTERNALS.
!     ----------

!          *SWTT*

!     REFERENCE.
!     ----------

!        SEE RADIATION'S PART OF THE ECMWF RESEARCH DEPARTMENT
!        DOCUMENTATION, AND FOUQUART AND BONNEL (1980)

!     AUTHOR.
!     -------
!        JEAN-JACQUES MORCRETTE  *ECMWF*

!     MODIFICATIONS.
!     --------------
!        ORIGINAL : 96-09-26
!        Modified : 2002-05-06 M. Janiskova - including Hogan&Illingworth
!                                             overlap assumption
!        M.Hamrud      01-Oct-2003 CY28 Cleaning
!        2008-03-27  M.Janiskova - code optimization
!     ------------------------------------------------------------------

USE PARKIND1  ,ONLY : JPIM     ,JPRB
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK

USE YOECLD   , ONLY : REPSEC
USE YOERAD   , ONLY : NOVLP    ,NSW
USE YOERDU   , ONLY : REPSCQ
USE YOESW    , ONLY : RPDH1    ,RPDU1    ,RPNH     ,RPNU     ,&
 & RTDH2O   ,RTDUMG   ,RTH2O    ,RTUMG  
USE YOEOVLP  , ONLY : RA1OVLP

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KLON 
INTEGER(KIND=JPIM),INTENT(IN)    :: KLEV 
INTEGER(KIND=JPIM),INTENT(IN)    :: KIDIA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFDIA 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSCT5 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCARDI5 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLDSW5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PPMB5(KLON,KLEV+1) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PPSOL5(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRMU05(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAVE5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PWV5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PAKI5(KLON,2,NSW) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCLD5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCLEAR5(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PDSIG5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFACT5(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PRMU5(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PSEC5(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PUD5(KLON,5,KLEV+1) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSCT 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCARDI 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLDSW(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PPMB(KLON,KLEV+1) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PPSOL(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRMU0(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAVE(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PWV(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PAKI(KLON,2,NSW) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCLD(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCLEAR(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PDSIG(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFACT(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PRMU(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PSEC(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PUD(KLON,5,KLEV+1) 
!     ------------------------------------------------------------------

!*       0.1   ARGUMENTS
!              ---------

!- trajectory inputs

!- trajectory outputs

!- perturbation inputs

!- perturbation outputs

INTEGER(KIND=JPIM) :: INUIR

!     ------------------------------------------------------------------

!              ------------

INTEGER(KIND=JPIM) :: IIND(2)

REAL(KIND=JPRB) :: ZC1J5(KLON,KLEV+1)&
 & ,  ZCLEAR5(KLON,KLEV+1), ZCLOUD5(KLON,KLEV+1)&
 & ,  Z1755(KLON,KLEV+1)  , Z1905(KLON,KLEV+1)&
 & ,  ZSIG5(KLON,KLEV+1)&
 & ,  ZR5(KLON,2) , ZUD5(KLON,2)  

REAL(KIND=JPRB) :: ZC1J(KLON,KLEV+1)&
 & ,  ZCLEAR(KLON,KLEV+1) , ZCLOUD(KLON,KLEV+1)&
 & ,  Z175(KLON,KLEV+1)   , Z190(KLON,KLEV+1)&
 & ,  ZSIG(KLON,KLEV+1)&
 & ,  ZR(KLON,2)  ,  ZUD(KLON,2)  

INTEGER(KIND=JPIM) :: IKL, IKLP1, IKP1, JA, JK, JL, JNU

REAL(KIND=JPRB) :: ZDEN, ZDEN5, ZDSCO2, ZDSCO25, ZDSH2O, ZDSH2O5,&
 & ZFPPW, ZFPPW5, ZNUM, ZNUM5, ZRTH, ZRTH5, &
 & ZRTU, ZRTU5, ZWH2O, ZWH2O5, ZALPHA1  
REAL(KIND=JPRB) :: ZITAVE5, ZIPSOL5, ZIWH2O5, ZICLEAR5, ZICLOUD5
REAL(KIND=JPRB) :: ZLOG15
REAL(KIND=JPRB) :: ZITAVE
!REAL(KIND=JPRB) :: ZIPSOL , ZIWH2O , ZICLEAR , ZICLOUD
REAL(KIND=JPRB) :: ZHOOK_HANDLE

#include "swtt1tl.intfb.h"

!     ------------------------------------------------------------------

!*         1.     COMPUTES AMOUNTS OF ABSORBERS
!                 -----------------------------

! 100 CONTINUE

IF (LHOOK) CALL DR_HOOK('SWUTL',0,ZHOOK_HANDLE)
IIND(1)=1
IIND(2)=2

!*         1.1    INITIALIZES QUANTITIES
!                 ----------------------

! 110 CONTINUE

DO JL = KIDIA,KFDIA
  PUD (JL,1,KLEV+1)=0.0_JPRB
  PUD5(JL,1,KLEV+1)=0.0_JPRB
  PUD (JL,2,KLEV+1)=0.0_JPRB
  PUD5(JL,2,KLEV+1)=0.0_JPRB
  PUD (JL,3,KLEV+1)=0.0_JPRB
  PUD5(JL,3,KLEV+1)=0.0_JPRB
  PUD (JL,4,KLEV+1)=0.0_JPRB
  PUD5(JL,4,KLEV+1)=0.0_JPRB
  PUD (JL,5,KLEV+1)=0.0_JPRB
  PUD5(JL,5,KLEV+1)=0.0_JPRB
  PFACT(JL) = PRMU0 (JL)*PSCT5 + PRMU05(JL)*PSCT
  PFACT5(JL)= PRMU05(JL)*PSCT5
  PRMU (JL) = PRMU0 (JL)
  PRMU5(JL) = PRMU05(JL)
  PSEC5(JL) = 1.0_JPRB/PRMU5(JL)
  PSEC(JL)  = -PRMU (JL)*(PSEC5(JL)**2)
  ZC1J (JL,KLEV+1)=0.0_JPRB
  ZC1J5(JL,KLEV+1)=0.0_JPRB
ENDDO

!*          1.3    AMOUNTS OF ABSORBERS
!                  --------------------

! 130 CONTINUE

DO JL= KIDIA,KFDIA
  ZUD (JL,1) = 0.0_JPRB
  ZUD (JL,2) = 0.0_JPRB
  ZUD5(JL,1) = 0.0_JPRB
  ZUD5(JL,2) = 0.0_JPRB
  Z175 (JL,1) = RPDU1*PPSOL(JL) * PPSOL5(JL)**(RPDU1-1.0_JPRB)
  Z1755(JL,1) = PPSOL5(JL)**RPDU1
  Z190 (JL,1) = RPDH1*PPSOL(JL) * PPSOL5(JL)**(RPDH1-1.0_JPRB)
  Z1905(JL,1) = PPSOL5(JL)**RPDH1
  ZSIG (JL,1) = PPSOL (JL)
  ZSIG5(JL,1) = PPSOL5(JL)
  ZCLEAR (JL,KLEV+1)=0.0_JPRB
  ZCLEAR5(JL,KLEV+1)=1.0_JPRB
  ZCLOUD (JL,KLEV+1)=0.0_JPRB
  ZCLOUD5(JL,KLEV+1)=0.0_JPRB
ENDDO

DO JK = 1 , KLEV
  IKP1 = JK + 1
  IKL = KLEV+1 - JK
  IKLP1 = IKL+1
  ZALPHA1=RA1OVLP(KLEV+1-JK)
  
  DO JL = KIDIA,KFDIA
    ZITAVE5 = 1.0_JPRB/PTAVE5(JL,JK)
    ZITAVE  = -PTAVE(JL,JK)*(ZITAVE5**2)
    ZRTH = (RTH2O**RTDH2O)*RTDH2O*ZITAVE*ZITAVE5**(RTDH2O-1.0_JPRB)
    ZRTH5=(RTH2O*ZITAVE5)**RTDH2O
    ZRTU = (RTUMG**RTDUMG)*RTDUMG*ZITAVE*ZITAVE5**(RTDUMG-1.0_JPRB)
    ZRTU5=(RTUMG*ZITAVE5)**RTDUMG

    IF (PWV5(JL,IKL) >= REPSCQ) THEN
      ZWH2O  = PWV (JL,IKL)
      ZWH2O5 = PWV5(JL,IKL)
    ELSE
      ZWH2O  = 0.0_JPRB
      ZWH2O5 = REPSCQ
    ENDIF
    ZSIG (JL,IKP1) = 100._JPRB * PPMB (JL,IKP1)
    ZSIG5(JL,IKP1) = 100._JPRB * PPMB5(JL,IKP1)

    ZIPSOL5 = 1.0_JPRB/PPSOL5(JL)
!    ZIPSOL  = -PPSOL(JL)*(ZIPSOL5**2)  ! directly imported to PDSIG
    PDSIG (JL,JK) = (ZSIG (JL,JK)- ZSIG (JL,IKP1))*ZIPSOL5 &
     & - (ZSIG5(JL,JK)- ZSIG5(JL,IKP1))*PPSOL(JL)*(ZIPSOL5**2)
    PDSIG5(JL,JK) = (ZSIG5(JL,JK)- ZSIG5(JL,IKP1))*ZIPSOL5

    Z175 (JL,IKP1) = RPDU1*ZSIG(JL,IKP1) * ZSIG5(JL,IKP1)**(RPDU1-1.0_JPRB)
    Z1755(JL,IKP1) = ZSIG5(JL,IKP1) ** RPDU1
    Z190 (JL,IKP1) = RPDH1*ZSIG(JL,IKP1) * ZSIG5(JL,IKP1)**(RPDH1-1.0_JPRB)
    Z1905(JL,IKP1) = ZSIG5(JL,IKP1) ** RPDH1

    ZDSCO2  = Z175 (JL,JK) - Z175 (JL,IKP1)
    ZDSCO25 = Z1755(JL,JK) - Z1755(JL,IKP1)
    ZDSH2O  = Z190 (JL,JK) - Z190 (JL,IKP1)
    ZDSH2O5 = Z1905(JL,JK) - Z1905(JL,IKP1)
    PUD (JL,1,JK) = RPNH * ( ZDSH2O  * ZWH2O5  * ZRTH5 &
     & + ZDSH2O5 * ZWH2O   * ZRTH5 &
     & + ZDSH2O5 * ZWH2O5  * ZRTH  )  
    PUD5(JL,1,JK) = RPNH * ZDSH2O5 * ZWH2O5  * ZRTH5
    PUD (JL,2,JK) = RPNU * ( ZDSCO2  * PCARDI5 * ZRTU5 &
     & + ZDSCO25 * PCARDI  * ZRTU5 &
     & + ZDSCO25 * PCARDI5 * ZRTU  )  
    PUD5(JL,2,JK) = RPNU * ZDSCO25 * PCARDI5 * ZRTU5
    PUD (JL,3,JK) = 0.0_JPRB
    PUD5(JL,3,JK) = 0.0_JPRB

    ZIWH2O5 = 1.0_JPRB/(1.0_JPRB+0.608_JPRB*ZWH2O5)
!    ZIWH2O  = -0.608_JPRB*ZWH2O*(ZIWH2O5**2)  ! directly imported to ZFPPW
    ZFPPW =1.6078_JPRB*ZWH2O *ZIWH2O5&
     & -1.6078_JPRB*ZWH2O5*0.608_JPRB*ZWH2O*(ZIWH2O5**2)
    ZFPPW5=1.6078_JPRB*ZWH2O5*ZIWH2O5

    PUD (JL,4,JK)=PUD (JL,1,JK)*ZFPPW5+PUD5(JL,1,JK)*ZFPPW
    PUD5(JL,4,JK)=PUD5(JL,1,JK)*ZFPPW5
    PUD (JL,5,JK)=PUD (JL,1,JK)*(1.0_JPRB-ZFPPW5)+PUD5(JL,1,JK)*(  -ZFPPW )
    PUD5(JL,5,JK)=PUD5(JL,1,JK)*(1.0_JPRB-ZFPPW5)

    ZUD (JL,1) = ZUD (JL,1) + PUD (JL,1,JK)
    ZUD5(JL,1) = ZUD5(JL,1) + PUD5(JL,1,JK)
    ZUD (JL,2) = ZUD (JL,2) + PUD (JL,2,JK)
    ZUD5(JL,2) = ZUD5(JL,2) + PUD5(JL,2,JK)

!-

    IF (NOVLP == 1) THEN
      IF (PCLDSW5(JL,IKL) >= ZCLOUD5(JL,IKLP1)) THEN
        ZNUM = PCLDSW (JL,IKL)
        ZNUM5= PCLDSW5(JL,IKL)
      ELSE
        ZNUM = ZCLOUD (JL,IKLP1)
        ZNUM5= ZCLOUD5(JL,IKLP1)
      ENDIF
      IF (ZCLOUD5(JL,IKLP1) <= 1.0_JPRB-REPSEC) THEN
        ZDEN = ZCLOUD (JL,IKLP1)
        ZDEN5= ZCLOUD5(JL,IKLP1)
      ELSE
        ZDEN = 0.0_JPRB
        ZDEN5= 1.0_JPRB-REPSEC
      ENDIF

      ZICLEAR5 = 1.0_JPRB/(1.0_JPRB-ZDEN5)
!      ZICLEAR  = ZDEN*(ZICLEAR5**2)  ! directly imported in ZCLEAR
      ZCLEAR (JL,IKL) = ZCLEAR (JL,IKLP1)*(1.0_JPRB-ZNUM5)*ZICLEAR5 &
       & - ZCLEAR5(JL,IKLP1)*ZNUM*ZICLEAR5 &
       & + ZCLEAR5(JL,IKLP1)*(1.0_JPRB-ZNUM5)*ZDEN*(ZICLEAR5**2)
      ZCLEAR5(JL,IKL) = ZCLEAR5(JL,IKLP1)*(1.0_JPRB-ZNUM5)*ZICLEAR5

      ZC1J (JL,IKL)=     - ZCLEAR (JL,IKL)
      ZC1J5(JL,IKL)= 1.0_JPRB - ZCLEAR5(JL,IKL)
      ZCLOUD (JL,IKL) = PCLDSW (JL,IKL)
      ZCLOUD5(JL,IKL) = PCLDSW5(JL,IKL)
    ELSEIF (NOVLP == 2) THEN
      IF (PCLDSW5(JL,IKL) >= ZCLOUD5(JL,IKLP1)) THEN
        ZCLOUD (JL,IKL) = PCLDSW (JL,IKL)
        ZCLOUD5(JL,IKL) = PCLDSW5(JL,IKL)
      ELSE
        ZCLOUD (JL,IKL) = ZCLOUD(JL,IKLP1)
        ZCLOUD5(JL,IKL) = ZCLOUD5(JL,IKLP1)
      ENDIF
      ZC1J (JL,IKL) = ZCLOUD (JL,IKL)
      ZC1J5(JL,IKL) = ZCLOUD5(JL,IKL)
    ELSEIF (NOVLP == 3) THEN
      ZCLEAR (JL,IKL)   = ZCLEAR (JL,IKLP1)*(1.0_JPRB-PCLDSW5(JL,IKL))&
       & + ZCLEAR5(JL,IKLP1)*(  -PCLDSW (JL,IKL))  
      ZCLEAR5(JL,IKL)   = ZCLEAR5(JL,IKLP1)*(1.0_JPRB-PCLDSW5(JL,IKL))
      ZCLOUD (JL,IKL)   =     - ZCLEAR (JL,IKL)
      ZCLOUD5(JL,IKL)   = 1.0_JPRB - ZCLEAR5(JL,IKL)
      ZC1J (JL,IKL) = ZCLOUD (JL,IKL)
      ZC1J5(JL,IKL) = ZCLOUD5(JL,IKL)
    ELSEIF (NOVLP == 4) THEN
!** Hogan & Illingworth (2001)
      IF (PCLDSW5(JL,IKL) >= ZCLOUD5(JL,IKLP1)) THEN
        ZNUM  = PCLDSW (JL,IKL)
        ZNUM5 = PCLDSW5(JL,IKL)
      ELSE
        ZNUM  = ZCLOUD (JL,IKLP1)
        ZNUM5 = ZCLOUD5(JL,IKLP1)
      ENDIF
      IF (ZCLOUD5(JL,IKLP1) <= 1.0_JPRB-REPSEC) THEN
        ZDEN = ZCLOUD (JL,IKLP1)
        ZDEN5= ZCLOUD5(JL,IKLP1)
      ELSE
        ZDEN = 0.0_JPRB
        ZDEN5= 1.0_JPRB-REPSEC
      ENDIF

      ZICLEAR5 = 1.0_JPRB/(1.0_JPRB-ZDEN5)
!      ZICLEAR  = ZDEN*(ZICLEAR5**2)  ! directly imported in ZCLEAR
      ZCLEAR (JL,IKL) = -(ZALPHA1*ZCLEAR5(JL,IKLP1)*ZICLEAR5)*ZNUM&
       & + (ZALPHA1*ZCLEAR5(JL,IKLP1)*(1.0_JPRB-ZNUM5)*ZICLEAR5**2)  &
       & * ZDEN &
       & - (1.0_JPRB-ZALPHA1)*ZCLEAR5(JL,IKLP1)*PCLDSW(JL,IKL) &
       & + (ZALPHA1*(1.0_JPRB-ZNUM5)*ZICLEAR5 &
       & + (1.0_JPRB-ZALPHA1)*(1.0_JPRB-PCLDSW5(JL,IKL)))*ZCLEAR(JL,IKLP1)  
      ZCLEAR5(JL,IKL)=ZCLEAR5(JL,IKLP1) &
       & * (ZALPHA1*(1.0_JPRB-ZNUM5)*ZICLEAR5 &
       & + (1.0_JPRB-ZALPHA1)*(1.0_JPRB-PCLDSW5(JL,IKL)) )  

      ZC1J (JL,IKL) = - ZCLEAR(JL,IKL)
      ZC1J5(JL,IKL) = 1.0_JPRB - ZCLEAR5(JL,IKL)
      ZCLOUD (JL,IKL) = PCLDSW (JL,IKL)
      ZCLOUD5(JL,IKL) = PCLDSW5(JL,IKL)
    ENDIF
  ENDDO
ENDDO
DO JL=KIDIA,KFDIA
  PCLEAR (JL)=  -ZC1J (JL,1)
  PCLEAR5(JL)=1.0_JPRB-ZC1J5(JL,1)
ENDDO

DO JK=1,KLEV
  DO JL=KIDIA,KFDIA
    IF (PCLEAR5(JL) < 1.0_JPRB) THEN
      ZICLOUD5 = 1.0_JPRB/(1.0_JPRB-PCLEAR5(JL))
!      ZICLOUD  = PCLEAR(JL)*(ZICLOUD5**2)  ! directly imported in PCLD
      PCLD (JL,JK)=PCLDSW (JL,JK)*ZICLOUD5&
       & +PCLDSW5(JL,JK)*PCLEAR (JL)*(ZICLOUD5**2)
      PCLD5(JL,JK)=PCLDSW5(JL,JK)*ZICLOUD5
    ELSE
      PCLD (JL,JK)=0.0_JPRB
      PCLD5(JL,JK)=0.0_JPRB
    ENDIF
  ENDDO
ENDDO

!*         1.4    COMPUTES CLEAR-SKY GREY ABSORPTION COEFFICIENTS
!                 -----------------------------------------------

! 140 CONTINUE

DO JA = 1,2
  DO JL = KIDIA,KFDIA
    ZUD (JL,JA) = ZUD (JL,JA)*PSEC5(JL) + ZUD5(JL,JA)*PSEC (JL)
    ZUD5(JL,JA) = ZUD5(JL,JA)*PSEC5(JL)
  ENDDO
ENDDO

!mj DO JNU= 1,NSW

IF (NSW <= 4) THEN
  INUIR=2
ELSEIF (NSW == 6) THEN
  INUIR=4
ENDIF

DO JNU=INUIR,NSW 

  CALL SWTT1TL ( KIDIA, KFDIA, KLON, JNU, 2, IIND, ZUD5, ZR5 , ZUD, ZR )

  DO JA = 1,2
    DO JL = KIDIA,KFDIA
      ZLOG15 = LOG(ZR5(JL,JA))
      PAKI (JL,JA,JNU) = -ZR (JL,JA)/(ZR5(JL,JA)*ZUD5(JL,JA))&
       & + ZLOG15*ZUD(JL,JA)/(ZUD5(JL,JA)**2)   
      PAKI5(JL,JA,JNU) = -ZLOG15 / ZUD5(JL,JA)
    ENDDO
  ENDDO
ENDDO

!     ------------------------------------------------------------------

IF (LHOOK) CALL DR_HOOK('SWUTL',1,ZHOOK_HANDLE)
END SUBROUTINE SWUTL
