C  MODPRT.FOR
      SUBROUTINE MODPRT(ZSTEP, XTS, EIGF, MH0I, MSP, FREQ,
     & MINMOD, MAXMOD, MODE )


      CHARACTER*9 LAMP

      REAL XTS( 12, MSP )

      DOUBLE PRECISION EIGF(*)
      DOUBLE PRECISION DEL, PZ

      COMMON /LUNIT/ LUPLP, LUPLT, LUPRT

      DATA LAMP/'AMPLITUDE'/
      DATA IC / 10 /


  500 FORMAT(1H1,' MODE AMPLITUDES FOR SOURCE FREQUENCY =',F9.2,' Hz')
  510 FORMAT(10X,12(3X,I3,'MODE'))
  520 FORMAT(1X,' DEPTH (m)',1X,12(1X,A9))
  530 FORMAT(F8.2,2X,12F10.3)
                                                                        
                                                                        

      INDEX= MOD(MODE-MINMOD,IC) + 1

C     SAMPLING THE EIGENFUNCTIONS
      XTS(INDEX,1)= 0.0
      DEL= DBLE(MH0I)/DBLE(MSP-1)

      DO 1000   I= 2, MSP
      PZ= DEL*(I-1)
      N1= INT(PZ)
      N2= N1+1
      IF(N1.EQ.0)   THEN
       XTS(INDEX,I)= (PZ-N1)*EIGF(N2)
      ELSE
       XTS(INDEX,I)= (PZ-N1)*(EIGF(N2)-EIGF(N1))+EIGF(N1)
      END IF
 1000 CONTINUE
      XTS(INDEX,MSP)= EIGF(MH0I)

      IF( (INDEX .EQ. IC) .OR. (MODE .EQ. MAXMOD) )   THEN
        ISTART= MODE - INDEX + 1
        WRITE(LUPRT,500) FREQ
        WRITE(LUPRT,510) (K,K=ISTART, MODE)
        WRITE(LUPRT,520) (LAMP,K=ISTART,MODE)
        DO 2000   JP=1,MSP
 2000   WRITE(LUPRT,530) (JP-1)*ZSTEP, (XTS(K,JP),K=1,INDEX)
      END IF

      RETURN

      END