C
      SUBROUTINE FNC0(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
     *          ,FWZ,FWX,FUZ,FUX,FR,EPD,ESD,CMPN,CMSN
     *          ,B11,B12,B13,B14,B21,B22,B23,B24
      COMMON /FDAT/ OM,NL,SDEP,LS,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 200 IL=NL-1,1,-1
C
        DO 210 I=1,4
          DO 220 J=1,4
            SA(I,J) =AA(I,J)
  220     CONTINUE
  210   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 250 I=1,4
          DO 260 J=1,4
            AA(I,J)=(0.D0,0.D0)
            DO 270 K=1,4
              AA(I,J) =AA(I,J) +SA(I,K)*SB(K,J)
  270       CONTINUE
  260     CONTINUE
  250   CONTINUE
C
  200 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 *** AS2 MATRIX ***
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
      ELSE
C
        DO 300 I=1,4
          DO 310 J=1,4
            AA(I,J) =(0.0D0,0.0D0)
  310     CONTINUE
          AA(I,I)=(1.0D0,0.0D0)
  300   CONTINUE
C
        DO 400 IL=NL-1,LS,-1
C
          DO 410 I=1,4
            DO 420 J=1,4
              SA(I,J) =AA(I,J)
  420       CONTINUE
  410     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)
          IF(IL.EQ.LS)PM=CMP*(THK(IL)-SDEP)
          CP=CDCOS(PM)
          SP=CDSIN(PM)
          STP=RAM*SP
          SDP=SP/RAM
C
          RBM=CMS/WN
          QM=CMS*THK(IL)
          IF(IL.EQ.LS)QM=CMS*(THK(IL)-SDEP)
          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 450 I=1,4
            DO 460 J=1,4
              AA(I,J)=(0.D0,0.D0)
              DO 470 K=1,4
                AA(I,J) =AA(I,J) +SA(I,K)*SB(K,J)
  470         CONTINUE
  460       CONTINUE
  450     CONTINUE
C
  400   CONTINUE
C
        GS2=B11*AA(1,3)+B12*AA(2,3)+B13*AA(3,3)+B14*AA(4,3)
        RS2=B11*AA(1,4)+B12*AA(2,4)+B13*AA(3,4)+B14*AA(4,4)
        HS2=B21*AA(1,3)+B22*AA(2,3)+B23*AA(3,3)+B24*AA(4,3)
        SS2=B21*AA(1,4)+B22*AA(2,4)+B23*AA(3,4)+B24*AA(4,4)
C
      END IF
C
C *** FU0 AND FW0 ***
C
      FWZ=GS2*RN-HS2*RL
      FWX=RS2*RN-SS2*RL
      FUZ=GS2*RM-HS2*RK
      FUX=RS2*RM-SS2*RK
C
      WNX=WN*XX
      CKX=DCOS(WNX)
      SKX=DSIN(WNX)
C
      FW=( FWZ*CKX*QZ-CPX*FWX*SKX*QX)/(WN*FR)
      FU=(-CPX*FUZ*SKX*QZ+FUX*CKX*QX)/(WN*FR)
C
      RETURN
      END
