C
C *** THE HASKELL'S MATRIX: ARR1(ARS1), ALR1(ALS1), 
C                           ARR1,Z(ARS1,Z), AND ALR1,Z(ALS1,Z) ***
C
      SUBROUTINE ARAL1Z(AR,ARZ,AL,ALZ,LL,DEP,OM2,CV2,WN
     *                 ,DNS,VP,VS,THK,ML)
C
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION DNS(ML),THK(ML)
      COMPLEX*16 VP(ML),VS(ML)
     *          ,AR(4,4),SAR(4,4),SBR(4,4)
     *          ,AL(2,2),SAL(2,2),SBL(2,2)
     *          ,ARZ(4,4),SARZ(4,4),SBRZ(4,4)
     *          ,ALZ(2,2),SALZ(2,2),SBLZ(2,2)
     *          ,WP2,WS2,CMP,CMS,BM2,PM,QM,RBM,RAM
     *          ,CQ,SQ,STQ,SDQ,CP,SP,STP,SDP
     *          ,CQZ,SQZ,CPZ,SPZ
C
      WN2=WN*WN
C
C *** MATRIX FOR IL=LL ***
C
      BM2=VS(LL)*VS(LL)
      WP2=OM2/(VP(LL)*VP(LL))
      WS2=OM2/BM2
C
      CMP=CDSQRT(WP2-WN2)
      CMS=CDSQRT(WS2-WN2)
      IF(IMAG(CMP).GT.0.D0)CMP=-CMP
      IF(IMAG(CMS).GT.0.D0)CMS=-CMS
C
      RAM=CMP/WN
      PM=CMP*DEP
      CP=CDCOS(PM)
      SP=CDSIN(PM)
      STP=RAM*SP
      SDP=SP/RAM
C
      RBM=CMS/WN
      QM=CMS*DEP
      CQ=CDCOS(QM)
      SQ=CDSIN(QM)
      STQ=RBM*SQ
      SDQ=SQ/RBM
C
      CALL ARALSB(SBR,SBL,CV2,DNS(LL),BM2
     *           ,CQ,STQ,SDQ,CP,STP,SDP)
C
      CPZ=-CMP*SP
      SPZ= CMP*CP
      STP=RAM*SPZ
      SDP=SPZ/RAM
C
      CQZ=-CMS*SQ
      SQZ= CMS*CQ
      STQ=RBM*SQZ
      SDQ=SQZ/RBM
C
      CALL ARALSB(SBRZ,SBLZ,CV2,DNS(LL),BM2
     *           ,CQZ,STQ,SDQ,CPZ,STP,SDP)
C
      DO 100 I=1,4
        DO 110 J=1,4
          AR(I,J) =SBR(I,J)   
          ARZ(I,J)=SBRZ(I,J)  
  110   CONTINUE
  100 CONTINUE
C
      DO 150 I=1,2
        DO 160 J=1,2
          AL(I,J) =SBL(I,J)   
          ALZ(I,J)=SBLZ(I,J)  
  160   CONTINUE
  150 CONTINUE
C
      IF(LL.EQ.1)RETURN
C
C *** MATRIX FROM IL=LL-1 TO 1 ***
C
      DO 200 IL=LL-1,1,-1
C
        DO 210 I=1,4
          DO 220 J=1,4
            SAR(I,J) =AR(I,J)
            SARZ(I,J)=ARZ(I,J)
  220     CONTINUE
  210   CONTINUE
C
        DO 230 I=1,2
          DO 240 J=1,2
            SAL(I,J) =AL(I,J)
            SALZ(I,J)=ALZ(I,J)
  240     CONTINUE
  230   CONTINUE
C
        BM2=VS(IL)*VS(IL)
        WP2=OM2/(VP(IL)*VP(IL))
        WS2=OM2/BM2
C
        CMP=CDSQRT(WP2-WN2)
        CMS=CDSQRT(WS2-WN2)
        IF(IMAG(CMP).GT.0.D0)CMP=-CMP
        IF(IMAG(CMS).GT.0.D0)CMS=-CMS
C
        RAM=CMP/WN
        PM=CMP*THK(IL)
        CP=CDCOS(PM)
        SP=CDSIN(PM)
        STP=RAM*SP
        SDP=SP/RAM
C
        RBM=CMS/WN
        QM=CMS*THK(IL)
        CQ=CDCOS(QM)
        SQ=CDSIN(QM)
        STQ=RBM*SQ
        SDQ=SQ/RBM
C
        CALL ARALSB(SBR,SBL,CV2,DNS(IL),BM2
     *             ,CQ,STQ,SDQ,CP,STP,SDP)
C
        DO 250 I=1,4
          DO 255 J=1,4
            AR(I,J) =(0.D0,0.D0)
            ARZ(I,J)=(0.D0,0.D0)
            DO 260 K=1,4
              AR(I,J) =AR(I,J) +SAR(I,K) *SBR(K,J)
              ARZ(I,J)=ARZ(I,J)+SARZ(I,K)*SBR(K,J)
  260       CONTINUE
  255     CONTINUE
  250   CONTINUE
C
        DO 270 I=1,2
          DO 275 J=1,2
            AL(I,J) =(0.D0,0.D0)
            ALZ(I,J)=(0.D0,0.D0)
            DO 280 K=1,2
              AL(I,J) =AL(I,J) +SAL(I,K) *SBL(K,J)
              ALZ(I,J)=ALZ(I,J)+SALZ(I,K)*SBL(K,J)
  280       CONTINUE
  275     CONTINUE
  270   CONTINUE
C
  200 CONTINUE
C
      RETURN
      END
