SUBROUTINE LAITRITL(KPROMA,KPROMB,KSTART,KPROF,KFLEV,&
 & KFLDN,KFLDX,LDADV55,&
 & PDLAT,PCLA,PDLO,PCLO,PDLAT5,PCLA5,PDLO5,PCLO5,KL0,&
 & PVINTW,PVINTW5,&
 & PXSL,PXSL5,PXF,PXF5)  

!**** *LAITRITL - semi-LAgrangian scheme:   (tangent-linear version)
!                 TRI-dimensional 32 points interpolations.

!     Purpose.
!     --------
!       Performs tri-dimensional 32 points interpolations.

!**   Interface.
!     ----------
!        *CALL* *LAITRITL(KPROMA,KPROMB,KSTART,KPROF,KFLEV
!                      ,KFLDN,KFLDX
!                      ,PDLAT,PCLA,PDLO,PCLO,PDLAT5,PCLA5,PDLO5,PCLO5,KL0
!                      ,PVINTW,PVINTW5
!                      ,PXSL,PXSL5,PXF,PXF5)

!        Explicit arguments :
!        --------------------

!        INPUT:
!          KPROMA  - horizontal dimension for grid-point quantities.
!          KPROMB  - horizontal dimension for interpolation point
!                    quantities.
!          KSTART  - first element of arrays where
!                    computations are performed.
!          KPROF   - depth of work.
!          KFLEV   - vertical dimension.
!          KFLDN   - number of the first field.
!          KFLDX   - number of the last field.
!          LDADV55  - field advected without wind increments
!          PDLAT   - weight (distance) for horizontal linear interpolation
!                    on a same latitude.
!          PCLA    - weights (distances) for horizontal cubic interpolation
!                    on a same latitude.
!          PDLO    - weights (distances) for horizontal cubic interpolation
!                    on a same longitude.
!          PCLO    - weights for horizontal cubic interpolations in longitude 
!               (latitude rows 1, 2)
!---------------------- trajectory variables --------------------------
!          PDLAT5  - weight (distance) for horizontal linear interpolation
!                    on a same latitude.
!          PCLA5   - weights (distances) for horizontal cubic interpolation
!                    on a same latitude.
!          PDLO5   - weights (distances) for horizontal cubic interpolation
!                    on a same longitude.
!          PCLO5   - weights for horizontal cubic interpolations in longitude 
!               (latitude rows 1, 2)
!----------------------------------------------------------------------
!          KL0     - index of the four western points
!                    of the 16 points interpolation grid.
!          PVINTW  - weights for cubic vertical interpolation
!---------------------- trajectory variables --------------------------
!          PVINTW5 - weights for cubic vertical interpolation
!----------------------------------------------------------------------
!          PXSL    - semi-lagrangian variable.
!          PXSL5   - semi-lagrangian variable.   (trajectory)

!        OUTPUT:
!          PXF     - interpolated variable.
!          PXF5    - interpolated variable.   (trajectory)

!        Implicit arguments :
!        --------------------

!     Method.
!     -------
!        See documentation

!     Externals.
!     ----------

!        No external.
!        Called by LARCINTL.

!     Reference.
!     ----------

!     Author.
!     -------
!        C. Temperton (ECMWF)

!     Modifications.
!     --------------
!        Original : 99/07/07
!        Modified 00-03-01 by C. Temperton: precompute functions (PFUN5).
!        M.Hamrud      01-Oct-2003 CY28 Cleaning
!        E.Holm   07/06/27  Field advected without wind increments (LDADV55)
!        F. Vana  2008-May-06: - weights driven interpolation 
!                              - vectorization support
!     ------------------------------------------------------------------

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

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

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMB 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFLEV 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFLDN 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFLDX 
INTEGER(KIND=JPIM),INTENT(IN)    :: KSTART 
INTEGER(KIND=JPIM),INTENT(IN)    :: KPROF 
LOGICAL           ,INTENT(IN)    :: LDADV55
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDLAT(KPROMB,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLA(KPROMB,KFLEV,3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDLO(KPROMB,KFLEV,0:3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLO(KPROMB,KFLEV,3,2) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDLAT5(KPROMB,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLA5(KPROMB,KFLEV,3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDLO5(KPROMB,KFLEV,0:3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLO5(KPROMB,KFLEV,3,2) 
INTEGER(KIND=JPIM),INTENT(IN)    :: KL0(KPROMB,KFLEV,0:3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PVINTW(KPROMB,KFLEV,3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PVINTW5(KPROMB,KFLEV,3) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PXSL(KPROMA*(KFLDX-KFLDN+1)) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PXSL5(KPROMA*(KFLDX-KFLDN+1)) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PXF(KPROMB,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PXF5(KPROMB,KFLEV) 

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

INTEGER(KIND=JPIM) :: IV0L1, IV0L2, IV1L0, IV1L1, IV1L2, IV1L3,&
 & IV2L0, IV2L1, IV2L2, IV2L3, IV3L1, IV3L2, &
 & JLEV, JROF  

REAL(KIND=JPRB) :: ZCLA1, ZCLA2, ZCLA3, ZDLAT, ZDLO0, ZDLO1,&
 & ZDLO2, ZDLO3, ZCLO11, ZCLO21, ZCLO31, ZCLO12, ZCLO22, ZCLO32, &
 & ZF111, ZF112, ZF121, ZF122, ZF211, ZF212, ZF221, ZF222, &
 & Z10, Z20, Z01, Z11, Z21, Z31, Z02, Z12, Z22, Z32, Z13, Z23, &
 & Z0, Z1, Z2, Z3, &
 & ZCLA15, ZCLA25, ZCLA35, ZDLAT5, ZDLO05, ZDLO15, ZDLO25, &
 & ZDLO35, ZCLO115, ZCLO215, ZCLO315, ZCLO125, ZCLO225, ZCLO325, &
 & ZF1115, ZF1125, ZF1215, ZF1225, ZF2115, ZF2125, ZF2215, ZF2225, &
 & Z105, Z205, Z015, Z115, Z215, Z315, Z025, Z125, Z225, Z325, Z135, Z235, &
 & Z05, Z15, Z25, Z35
 
REAL(KIND=JPRB) :: ZHOOK_HANDLE

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

IF (LHOOK) CALL DR_HOOK('LAITRITL',0,ZHOOK_HANDLE)

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

!*       1.    INTERPOLATIONS.
!              ---------------

IV0L1=1
IV0L2=2
IV1L0=  KPROMA
IV1L1=1+KPROMA
IV1L2=2+KPROMA
IV1L3=3+KPROMA
IV2L0=IV1L0+KPROMA
IV2L1=IV1L1+KPROMA
IV2L2=IV1L2+KPROMA
IV2L3=IV1L3+KPROMA
IV3L1=IV2L1+KPROMA
IV3L2=IV2L2+KPROMA

ZDLAT =0._JPRB

ZCLA1 =0._JPRB
ZCLA2 =0._JPRB
ZCLA3 =0._JPRB

ZDLO0 =0._JPRB
ZDLO1 =0._JPRB
ZDLO2 =0._JPRB
ZDLO3 =0._JPRB

ZCLO11=0._JPRB
ZCLO21=0._JPRB
ZCLO31=0._JPRB
ZCLO12=0._JPRB
ZCLO22=0._JPRB
ZCLO32=0._JPRB

!CDIR OUTERUNROLL=4
DO JLEV=1,KFLEV
  DO JROF=KSTART,KPROF

    IF (.NOT. LDADV55) THEN
      ! interpolation distances in longitude
      ZDLO0=PDLO(JROF,JLEV,0)
      ZDLO1=PDLO(JROF,JLEV,1)
      ZDLO2=PDLO(JROF,JLEV,2)
      ZDLO3=PDLO(JROF,JLEV,3)
      ! interpolation distance in latitude
      ZDLAT=PDLAT(JROF,JLEV)
      ! interpolation weights in latitude
      ZCLA1=PCLA(JROF,JLEV,1)
      ZCLA2=PCLA(JROF,JLEV,2)
      ZCLA3=PCLA(JROF,JLEV,3)
      ! interpolation weights in longitude (latitude rows 1, 2)
      ZCLO11=PCLO(JROF,JLEV,1,1)
      ZCLO21=PCLO(JROF,JLEV,2,1)
      ZCLO31=PCLO(JROF,JLEV,3,1)
      ZCLO12=PCLO(JROF,JLEV,1,2)
      ZCLO22=PCLO(JROF,JLEV,2,2)
      ZCLO32=PCLO(JROF,JLEV,3,2)
#if defined(NECSX)
    ELSE
      ! This part must not be moved outside the loop.
      ! Othervise the loop vectorization is uncertain.
      ZDLAT =0._JPRB
      ZCLA1 =0._JPRB
      ZCLA2 =0._JPRB
      ZCLA3 =0._JPRB
      ZDLO0 =0._JPRB
      ZDLO1 =0._JPRB
      ZDLO2 =0._JPRB
      ZDLO3 =0._JPRB
      ZCLO11=0._JPRB
      ZCLO21=0._JPRB
      ZCLO31=0._JPRB
      ZCLO12=0._JPRB
      ZCLO22=0._JPRB
      ZCLO32=0._JPRB
#endif
    ENDIF

    ZF111=PXSL(KL0(JROF,JLEV,1)+IV1L1)
    ZF211=PXSL(KL0(JROF,JLEV,1)+IV1L2)
    ZF121=PXSL(KL0(JROF,JLEV,2)+IV1L1)
    ZF221=PXSL(KL0(JROF,JLEV,2)+IV1L2)
    ZF112=PXSL(KL0(JROF,JLEV,1)+IV2L1)
    ZF212=PXSL(KL0(JROF,JLEV,1)+IV2L2)
    ZF122=PXSL(KL0(JROF,JLEV,2)+IV2L1)
    ZF222=PXSL(KL0(JROF,JLEV,2)+IV2L2)

    ZF1115=PXSL5(KL0(JROF,JLEV,1)+IV1L1)
    ZF2115=PXSL5(KL0(JROF,JLEV,1)+IV1L2)
    ZF1215=PXSL5(KL0(JROF,JLEV,2)+IV1L1)
    ZF2215=PXSL5(KL0(JROF,JLEV,2)+IV1L2)
    ZF1125=PXSL5(KL0(JROF,JLEV,1)+IV2L1)
    ZF2125=PXSL5(KL0(JROF,JLEV,1)+IV2L2)
    ZF1225=PXSL5(KL0(JROF,JLEV,2)+IV2L1)
    ZF2225=PXSL5(KL0(JROF,JLEV,2)+IV2L2)

    ! interpolation distances in longitude
    ZDLO05=PDLO5(JROF,JLEV,0)
    ZDLO15=PDLO5(JROF,JLEV,1)
    ZDLO25=PDLO5(JROF,JLEV,2)
    ZDLO35=PDLO5(JROF,JLEV,3)

    ! interpolation weights in longitude (latitude rows 1, 2)
    ZCLO115=PCLO5(JROF,JLEV,1,1)
    ZCLO215=PCLO5(JROF,JLEV,2,1)
    ZCLO315=PCLO5(JROF,JLEV,3,1)
    ZCLO125=PCLO5(JROF,JLEV,1,2)
    ZCLO225=PCLO5(JROF,JLEV,2,2)
    ZCLO325=PCLO5(JROF,JLEV,3,2)

    ! interpolation distance in latitude
    ZDLAT5=PDLAT5(JROF,JLEV)

    ! interpolation weights in latitude
    ZCLA15=PCLA5(JROF,JLEV,1)
    ZCLA25=PCLA5(JROF,JLEV,2)
    ZCLA35=PCLA5(JROF,JLEV,3)


    ! interpolations in longitude, stencil level 0
    Z105=PXSL5(KL0(JROF,JLEV,1)+IV0L1)+ZDLO15 &
     & *(PXSL5(KL0(JROF,JLEV,1)+IV0L2)-PXSL5(KL0(JROF,JLEV,1)+IV0L1))
    Z205=PXSL5(KL0(JROF,JLEV,2)+IV0L1)+ZDLO25 &
     & *(PXSL5(KL0(JROF,JLEV,2)+IV0L2)-PXSL5(KL0(JROF,JLEV,2)+IV0L1))

    Z10 =PXSL(KL0(JROF,JLEV,1)+IV0L1)+ZDLO15 &
     & *(PXSL(KL0(JROF,JLEV,1)+IV0L2)-PXSL(KL0(JROF,JLEV,1)+IV0L1)) &
     & +ZDLO1 &
     & *(PXSL5(KL0(JROF,JLEV,1)+IV0L2)-PXSL5(KL0(JROF,JLEV,1)+IV0L1))
    Z20 =PXSL(KL0(JROF,JLEV,2)+IV0L1)+ZDLO25 &
     & *(PXSL(KL0(JROF,JLEV,2)+IV0L2)-PXSL(KL0(JROF,JLEV,2)+IV0L1)) &
     & +ZDLO2 &
     & *(PXSL5(KL0(JROF,JLEV,2)+IV0L2)-PXSL5(KL0(JROF,JLEV,2)+IV0L1))

    ! interpolations in longitude, stencil level 1
    Z015=PXSL5(KL0(JROF,JLEV,0)+IV1L1)+ZDLO05 &
     & *(PXSL5(KL0(JROF,JLEV,0)+IV1L2)-PXSL5(KL0(JROF,JLEV,0)+IV1L1))
    Z115=PXSL5(KL0(JROF,JLEV,1)+IV1L0) &
     & +ZCLO115*(ZF1115-PXSL5(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO215*(ZF2115-PXSL5(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO315*(PXSL5(KL0(JROF,JLEV,1)+IV1L3)-PXSL5(KL0(JROF,JLEV,1)+IV1L0))
    Z215=PXSL5(KL0(JROF,JLEV,2)+IV1L0) &
     & +ZCLO125*(ZF1215-PXSL5(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO225*(ZF2215-PXSL5(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO325*(PXSL5(KL0(JROF,JLEV,2)+IV1L3)-PXSL5(KL0(JROF,JLEV,2)+IV1L0))
    Z315=PXSL5(KL0(JROF,JLEV,3)+IV1L1)+ZDLO35 &
     & *(PXSL5(KL0(JROF,JLEV,3)+IV1L2)-PXSL5(KL0(JROF,JLEV,3)+IV1L1))

    Z01=PXSL(KL0(JROF,JLEV,0)+IV1L1)+ZDLO05 &
     & *(PXSL(KL0(JROF,JLEV,0)+IV1L2)-PXSL(KL0(JROF,JLEV,0)+IV1L1)) &
     & +ZDLO0 &
     & *(PXSL5(KL0(JROF,JLEV,0)+IV1L2)-PXSL5(KL0(JROF,JLEV,0)+IV1L1))
    Z11=PXSL(KL0(JROF,JLEV,1)+IV1L0) &
     & +ZCLO115*(ZF111-PXSL(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO11*(ZF1115-PXSL5(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO215*(ZF211-PXSL(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO21*(ZF2115-PXSL5(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO315*(PXSL(KL0(JROF,JLEV,1)+IV1L3)-PXSL(KL0(JROF,JLEV,1)+IV1L0)) &
     & +ZCLO31* &
     & (PXSL5(KL0(JROF,JLEV,1)+IV1L3)-PXSL5(KL0(JROF,JLEV,1)+IV1L0))
    Z21=PXSL(KL0(JROF,JLEV,2)+IV1L0) &
     & +ZCLO125*(ZF121-PXSL(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO12*(ZF1215-PXSL5(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO225*(ZF221-PXSL(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO22*(ZF2215-PXSL5(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO325*(PXSL(KL0(JROF,JLEV,2)+IV1L3)-PXSL(KL0(JROF,JLEV,2)+IV1L0)) &
     & +ZCLO32* &
     & (PXSL5(KL0(JROF,JLEV,2)+IV1L3)-PXSL5(KL0(JROF,JLEV,2)+IV1L0))
    Z31=PXSL(KL0(JROF,JLEV,3)+IV1L1)+ZDLO35 &
     & *(PXSL(KL0(JROF,JLEV,3)+IV1L2)-PXSL(KL0(JROF,JLEV,3)+IV1L1)) &
     & +ZDLO3 &
     & *(PXSL5(KL0(JROF,JLEV,3)+IV1L2)-PXSL5(KL0(JROF,JLEV,3)+IV1L1))

    ! interpolations in longitude, stencil level 2
    Z025=PXSL5(KL0(JROF,JLEV,0)+IV2L1)+ZDLO05 &
     & *(PXSL5(KL0(JROF,JLEV,0)+IV2L2)-PXSL5(KL0(JROF,JLEV,0)+IV2L1))
    Z125=PXSL5(KL0(JROF,JLEV,1)+IV2L0) &
     & +ZCLO115*(ZF1125-PXSL5(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO215*(ZF2125-PXSL5(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO315*(PXSL5(KL0(JROF,JLEV,1)+IV2L3)-PXSL5(KL0(JROF,JLEV,1)+IV2L0))
    Z225=PXSL5(KL0(JROF,JLEV,2)+IV2L0) &
     & +ZCLO125*(ZF1225-PXSL5(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO225*(ZF2225-PXSL5(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO325*(PXSL5(KL0(JROF,JLEV,2)+IV2L3)-PXSL5(KL0(JROF,JLEV,2)+IV2L0))
    Z325=PXSL5(KL0(JROF,JLEV,3)+IV2L1)+ZDLO35 &
     & *(PXSL5(KL0(JROF,JLEV,3)+IV2L2)-PXSL5(KL0(JROF,JLEV,3)+IV2L1))

    Z02=PXSL(KL0(JROF,JLEV,0)+IV2L1)+ZDLO05 &
     & *(PXSL(KL0(JROF,JLEV,0)+IV2L2)-PXSL(KL0(JROF,JLEV,0)+IV2L1)) &
     & +ZDLO0 &
     & *(PXSL5(KL0(JROF,JLEV,0)+IV2L2)-PXSL5(KL0(JROF,JLEV,0)+IV2L1))
    Z12=PXSL(KL0(JROF,JLEV,1)+IV2L0) &
     & +ZCLO115*(ZF112-PXSL(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO11*(ZF1125-PXSL5(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO215*(ZF212-PXSL(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO21*(ZF2125-PXSL5(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO315*(PXSL(KL0(JROF,JLEV,1)+IV2L3)-PXSL(KL0(JROF,JLEV,1)+IV2L0)) &
     & +ZCLO31* &
     & (PXSL5(KL0(JROF,JLEV,1)+IV2L3)-PXSL5(KL0(JROF,JLEV,1)+IV2L0))
    Z22=PXSL(KL0(JROF,JLEV,2)+IV2L0) &
     & +ZCLO125*(ZF122-PXSL(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO12*(ZF1225-PXSL5(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO225*(ZF222-PXSL(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO22*(ZF2225-PXSL5(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO325*(PXSL(KL0(JROF,JLEV,2)+IV2L3)-PXSL(KL0(JROF,JLEV,2)+IV2L0)) &
     & +ZCLO32* &
     & (PXSL5(KL0(JROF,JLEV,2)+IV2L3)-PXSL5(KL0(JROF,JLEV,2)+IV2L0))
    Z32=PXSL(KL0(JROF,JLEV,3)+IV2L1)+ZDLO35 &
     & *(PXSL(KL0(JROF,JLEV,3)+IV2L2)-PXSL(KL0(JROF,JLEV,3)+IV2L1)) &
     & +ZDLO3 &
     & *(PXSL5(KL0(JROF,JLEV,3)+IV2L2)-PXSL5(KL0(JROF,JLEV,3)+IV2L1))

    ! interpolations in longitude, stencil level 3
    Z135=PXSL5(KL0(JROF,JLEV,1)+IV3L1)+ZDLO15 &
     & *(PXSL5(KL0(JROF,JLEV,1)+IV3L2)-PXSL5(KL0(JROF,JLEV,1)+IV3L1))
    Z235=PXSL5(KL0(JROF,JLEV,2)+IV3L1)+ZDLO25 &
     & *(PXSL5(KL0(JROF,JLEV,2)+IV3L2)-PXSL5(KL0(JROF,JLEV,2)+IV3L1))

    Z13=PXSL(KL0(JROF,JLEV,1)+IV3L1)+ZDLO15 &
     & *(PXSL(KL0(JROF,JLEV,1)+IV3L2)-PXSL(KL0(JROF,JLEV,1)+IV3L1)) &
     & +ZDLO1 &
     & *(PXSL5(KL0(JROF,JLEV,1)+IV3L2)-PXSL5(KL0(JROF,JLEV,1)+IV3L1))
    Z23=PXSL(KL0(JROF,JLEV,2)+IV3L1)+ZDLO25 &
     & *(PXSL(KL0(JROF,JLEV,2)+IV3L2)-PXSL(KL0(JROF,JLEV,2)+IV3L1)) &
     & +ZDLO2 &
     & *(PXSL5(KL0(JROF,JLEV,2)+IV3L2)-PXSL5(KL0(JROF,JLEV,2)+IV3L1))


    ! interpolations in latitude, stencil levels 0, 1, 2, 3
    Z05=Z105+ZDLAT5*(Z205-Z105)
    Z15=Z015+ZCLA15*(Z115-Z015)+ZCLA25*(Z215-Z015)+ZCLA35*(Z315-Z015)
    Z25=Z025+ZCLA15*(Z125-Z025)+ZCLA25*(Z225-Z025)+ZCLA35*(Z325-Z025)
    Z35=Z135+ZDLAT5*(Z235-Z135)

    Z0=Z10+ZDLAT5*(Z20-Z10)+ZDLAT*(Z205-Z105)
    Z1=Z01 &
     & +ZCLA15*(Z11-Z01)+ZCLA1*(Z115-Z015) &
     & +ZCLA25*(Z21-Z01)+ZCLA2*(Z215-Z015) &
     & +ZCLA35*(Z31-Z01)+ZCLA3*(Z315-Z015)
    Z2=Z02 &
     & +ZCLA15*(Z12-Z02)+ZCLA1*(Z125-Z025) &
     & +ZCLA25*(Z22-Z02)+ZCLA2*(Z225-Z025) &
     & +ZCLA35*(Z32-Z02)+ZCLA3*(Z325-Z025)
    Z3=Z13+ZDLAT5*(Z23-Z13)+ZDLAT*(Z235-Z135)

    ! final interpolation in vertical
    PXF5(JROF,JLEV)=Z05 &
     & +PVINTW5(JROF,JLEV,1)*(Z15-Z05) &
     & +PVINTW5(JROF,JLEV,2)*(Z25-Z05) &
     & +PVINTW5(JROF,JLEV,3)*(Z35-Z05)  

    IF (.NOT. LDADV55) THEN
      PXF(JROF,JLEV)=Z0 &
       & +PVINTW5(JROF,JLEV,1)*(Z1-Z0) &
       & +PVINTW5(JROF,JLEV,2)*(Z2-Z0) &
       & +PVINTW5(JROF,JLEV,3)*(Z3-Z0) &
       & +PVINTW(JROF,JLEV,1)*(Z15-Z05)&
       & +PVINTW(JROF,JLEV,2)*(Z25-Z05)&
       & +PVINTW(JROF,JLEV,3)*(Z35-Z05)  
    ELSE
      PXF(JROF,JLEV)=Z0 &
       & +PVINTW5(JROF,JLEV,1)*(Z1-Z0) &
       & +PVINTW5(JROF,JLEV,2)*(Z2-Z0) &
       & +PVINTW5(JROF,JLEV,3)*(Z3-Z0)  
    ENDIF

  ENDDO
ENDDO

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

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