C
      SUBROUTINE FNC2(WN,FW,FU,XX,DNS,VP,VS,THK,ML)
C
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION DNS(ML),THK(ML)
      COMPLEX*16 FW,FU,VP(ML),VS(ML)
     *          ,AA(4,4),SA(4,4),SB(4,4),CPX
     *          ,WP2,WS2,CMP,CMS,BM2,PM,QM,RBM,RAM
     *          ,CQ,SQ,STQ,SDQ,CP,SP,STP,SDP,GM
     *          ,C11,C12,C13,C14,C15,C16,D11,D12,D13,D14,D15
     *          ,GN,RAN,RBN,RL,RK,RN,RM,GS2,RS2,HS2,SS2
     *          ,FWZ0,FWX0,FUZ0,FUX0,FR,EPD,ESD,CMPN,CMSN
     *          ,B11,B12,B13,B14,B21,B22,B23,B24
     *          ,AS2(4,4),AR1(4,4),AR2(4,4),FWZR,FWXR,FUZR,FUXR
     *          ,FWZN,FWXN,FUZN,FUXN,FSZN,FSXN,FNZN,FNXN
     *          ,AN11,AN12,AN21,AN22,GAB,EAO,EBO,GAB1
     *          ,AS1(4,4),FWZS,FWXS,FUZS,FUXS
     *          ,CJ11,CJ12,CJ31,CJ32,DNZ,DNX,ONZ,ONX
     *          ,EPZ,ESZ,PANZ,PANX,FANZ,FANX
      COMMON /FDAT/ OM,NL,SDEP,LS,ODEP,LO,QX,QZ
C
      WN2=WN*WN
      OM2=OM*OM
      CV=OM/WN
      CV2=CV*CV
      CPX=DCMPLX(0.D0,1.D0)
C
C *** AA MATRIX ***
C
      DO 100 I=1,4
        DO 110 J=1,4
          AA(I,J) =(0.0D0,0.0D0)
  110   CONTINUE
        AA(I,I)=(1.0D0,0.0D0)
  100 CONTINUE
C
      DO 150 IL=NL-1,1,-1
C
        DO 160 I=1,4
          DO 170 J=1,4
            SA(I,J) =AA(I,J)
  170     CONTINUE
  160   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
        GM=2.D0*BM2/CV2
        C11=GM
        C12=GM-1.D0
        C13=GM*GM
        C14=C12*C12
        C16=DNS(IL)*CV2
        C15=1.D0/C16
C
        D11=CP-CQ
        D12=SDP+STQ
        D13=STP+SDQ
        D14=C14*SDP+C13*STQ
        D15=C13*STP+C14*SDQ
C
        SB(1,1)= C11*CP-C12*CQ
        SB(1,2)= (C12*SDP+C11*STQ)*CPX
        SB(1,3)=-C15*D11
        SB(1,4)= C15*D12*CPX
        SB(2,1)=-(C11*STP+C12*SDQ)*CPX
        SB(2,2)=-C12*CP+C11*CQ
        SB(2,3)= C15*D13*CPX
        SB(2,4)= SB(1,3)
        SB(3,1)= C16*C11*C12*D11
        SB(3,2)= C16*D14*CPX
        SB(3,3)= SB(2,2)
        SB(3,4)= SB(1,2)
        SB(4,1)= C16*D15*CPX
        SB(4,2)= SB(3,1)
        SB(4,3)= SB(2,1)
        SB(4,4)= SB(1,1)
C
        DO 180 I=1,4
          DO 190 J=1,4
            AA(I,J)=(0.D0,0.D0)
            DO 195 K=1,4
              AA(I,J) =AA(I,J) +SA(I,K)*SB(K,J)
  195       CONTINUE
  190     CONTINUE
  180   CONTINUE
C
  150 CONTINUE
C
C *** RL-RM AND FR ***
C
      BM2=VS(NL)*VS(NL)
      WP2=OM2/(VP(NL)*VP(NL))
      WS2=OM2/BM2
      CMPN=CDSQRT(WP2-WN2)
      CMSN=CDSQRT(WS2-WN2)
      IF(IMAG(CMPN).GT.0.D0)CMPN=-CMPN
      IF(IMAG(CMSN).GT.0.D0)CMSN=-CMSN
C
      GN=2.D0*BM2/CV2
      RAN=CMPN/WN
      RBN=CMSN/WN
C
      B11=GN*RAN
      B12=GN-1.D0
      B14=1.D0/(DNS(NL)*CV2)
      B13=-RAN*B14
      B21=-B12
      B22=GN*RBN
      B23=B14
      B24=RBN*B14
C
      RL=B11*AA(1,1)+B12*AA(2,1)+B13*AA(3,1)+B14*AA(4,1)
      RK=B11*AA(1,2)+B12*AA(2,2)+B13*AA(3,2)+B14*AA(4,2)
      RN=B21*AA(1,1)+B22*AA(2,1)+B23*AA(3,1)+B24*AA(4,1)
      RM=B21*AA(1,2)+B22*AA(2,2)+B23*AA(3,2)+B24*AA(4,2)
C
      FR=RN*RK-RL*RM
C
C *** SP AND OB ***
C
      IF(LS.EQ.NL)THEN
C
        EPD=CDEXP(-CPX*CMPN*SDEP)
        ESD=CDEXP(-CPX*CMSN*SDEP)
        RS2= B14*EPD
        GS2=-RAN*RS2
        HS2= B14*ESD
        SS2= RBN*HS2
C
        FWZ0=GS2*RN-HS2*RL
        FWX0=RS2*RN-SS2*RL
        FUZ0=GS2*RM-HS2*RK
        FUX0=RS2*RM-SS2*RK
C
        IF((LO.LT.LS).OR.((LO.EQ.LS).AND.(ODEP.LE.SDEP)))THEN
C
          ODEP1=ODEP
          LO1=LO
          CALL FNC21(AR1,LO1,ODEP1,OM2,CV2,WN,DNS,VP,VS,THK,ML)
C
          FWZR=AR1(2,2)*FWZ0-AR1(2,1)*FUZ0
          FWXR=AR1(2,2)*FWX0-AR1(2,1)*FUX0
          FUZR=AR1(1,1)*FUZ0-AR1(1,2)*FWZ0
          FUXR=AR1(1,1)*FUX0-AR1(1,2)*FWX0
C
        ELSE
C
          CJ11=B11*AA(1,1)+B13*AA(3,1)
          CJ12=B11*AA(1,2)+B13*AA(3,2)
          CJ31=B21*AA(1,1)+B23*AA(3,1)
          CJ32=B21*AA(1,2)+B23*AA(3,2)
C
          DNZ=-(CJ11*FUZ0-CJ12*FWZ0+FR*GS2*0.5D0)/RAN
          DNX=-(CJ11*FUX0-CJ12*FWX0+FR*RS2*0.5D0)/RAN
          ONZ=+(CJ31*FUZ0-CJ32*FWZ0+FR*HS2*0.5D0)/RBN
          ONX=+(CJ31*FUX0-CJ32*FWX0+FR*SS2*0.5D0)/RBN
C
          EAO=CDEXP(-CPX*CMPN*(ODEP-SDEP))
          EBO=CDEXP(-CPX*CMSN*(ODEP-SDEP))
          EPZ=CDEXP(-CPX*CMPN*ODEP)
          ESZ=CDEXP(-CPX*CMSN*ODEP)
C
          PANZ=DNZ*EPZ+FR*EAO*B14*0.5D0
          PANX=DNX*EPZ+FR*EAO*B14*0.5D0/RAN
          FANZ=ONZ*ESZ+FR*EBO*B14*0.5D0/RBN
          FANX=ONX*ESZ-FR*EBO*B14*0.5D0
C
          FWZR=RAN*PANZ+FANZ
          FWXR=RAN*PANX+FANX
          FUZR=-PANZ+RBN*FANZ
          FUXR=-PANX+RBN*FANX
C
        END IF
C
      ELSE
C
        SDEP1=SDEP
        LS1=LS
        CALL FNC22(AS2,LS1,SDEP1,OM2,CV2,WN,DNS,VP,VS,THK,ML,NL)
C
        GS2=B11*AS2(1,3)+B12*AS2(2,3)+B13*AS2(3,3)+B14*AS2(4,3)
        RS2=B11*AS2(1,4)+B12*AS2(2,4)+B13*AS2(3,4)+B14*AS2(4,4)
        HS2=B21*AS2(1,3)+B22*AS2(2,3)+B23*AS2(3,3)+B24*AS2(4,3)
        SS2=B21*AS2(1,4)+B22*AS2(2,4)+B23*AS2(3,4)+B24*AS2(4,4)
C
        FWZ0=GS2*RN-HS2*RL
        FWX0=RS2*RN-SS2*RL
        FUZ0=GS2*RM-HS2*RK
        FUX0=RS2*RM-SS2*RK
C
C *** OP : FWZR - FURX ***
C
        IF((LO.LT.LS).OR.((LO.EQ.LS).AND.(ODEP.LE.SDEP)))THEN
C
          ODEP1=ODEP
          LO1=LO
          CALL FNC21(AR1,LO1,ODEP1,OM2,CV2,WN,DNS,VP,VS,THK,ML)
C
          FWZR=AR1(2,2)*FWZ0-AR1(2,1)*FUZ0
          FWXR=AR1(2,2)*FWX0-AR1(2,1)*FUX0
          FUZR=AR1(1,1)*FUZ0-AR1(1,2)*FWZ0
          FUXR=AR1(1,1)*FUX0-AR1(1,2)*FWX0
C
        ELSE
C
C          FWZN=AA(2,2)*FWZ0-AA(2,1)*FUZ0-AS2(2,3)*FR
C          FWXN=AA(2,2)*FWX0-AA(2,1)*FUX0-AS2(2,4)*FR
C          FUZN=AA(1,1)*FUZ0-AA(1,2)*FWZ0+AS2(1,3)*FR
C          FUXN=AA(1,1)*FUX0-AA(1,2)*FWX0+AS2(1,4)*FR
C          FSZN=AA(4,2)*FWZ0-AA(4,1)*FUZ0-AS2(4,3)*FR
C          FSXN=AA(4,2)*FWX0-AA(4,1)*FUX0-AS2(4,4)*FR
C          FNZN=AA(3,1)*FUZ0-AA(3,2)*FWZ0+AS2(3,3)*FR
C          FNXN=AA(3,1)*FUX0-AA(3,2)*FWX0+AS2(3,4)*FR
C
          FWZN=AA(2,2)*FWZ0-AA(2,1)*FUZ0
          FWXN=AA(2,2)*FWX0-AA(2,1)*FUX0
          FUZN=AA(1,1)*FUZ0-AA(1,2)*FWZ0
          FUXN=AA(1,1)*FUX0-AA(1,2)*FWX0
          FSZN=AA(4,2)*FWZ0-AA(4,1)*FUZ0
          FSXN=AA(4,2)*FWX0-AA(4,1)*FUX0
          FNZN=AA(3,1)*FUZ0-AA(3,2)*FWZ0
          FNXN=AA(3,1)*FUX0-AA(3,2)*FWX0
C
          IF(LO.NE.NL)THEN
C
            ODEP1=ODEP
            CALL FNC22(AR2,LO,ODEP1,OM2,CV2,WN,DNS,VP,VS,THK,ML,NL)
C
            FWZR=AR2(4,3)*FUZN+AR2(3,3)*FWZN
     *          +AR2(2,3)*FNZN+AR2(1,3)*FSZN
            FWXR=AR2(4,3)*FUXN+AR2(3,3)*FWXN
     *          +AR2(2,3)*FNXN+AR2(1,3)*FSXN
            FUZR=AR2(4,4)*FUZN+AR2(3,4)*FWZN
     *          +AR2(2,4)*FNZN+AR2(1,4)*FSZN
            FUXR=AR2(4,4)*FUXN+AR2(3,4)*FWXN
     *          +AR2(2,4)*FNXN+AR2(1,4)*FSXN
C
          ELSE
C
            DNZ=B14*FNZN-GN*FUZN
            DNX=B14*FNXN-GN*FUXN
            ONZ=(B21*FUZN+B14*FNZN)/RBN
            ONX=(B21*FUXN+B14*FNXN)/RBN
C
            EPZ=CDEXP(-CPX*CMPN*ODEP)
            ESZ=CDEXP(-CPX*CMSN*ODEP)
C
            FWZR=+RAN*DNZ*EPZ+ONZ*ESZ
            FWXR=+RAN*DNX*EPZ+ONX*ESZ
            FUZR=-DNZ*EPZ+RBN*ONZ*ESZ
            FUXR=-DNX*EPZ+RBN*ONX*ESZ
C
          END IF
C
        END IF
C
      END IF
C
      WNX=WN*XX
      CKX=DCOS(WNX)
      SKX=DSIN(WNX)
C
      FW=( FWZR*CKX*QZ-CPX*FWXR*SKX*QX)/(WN*FR)
      FU=(-CPX*FUZR*SKX*QZ+FUXR*CKX*QX)/(WN*FR)
C
      RETURN
      END
