C  PLEFTR.FOR

C   REDUCED PRESSURE MATCHING

      SUBROUTINE PLEFTR( RHO, DEPTH, NMEDIA,              
     &   MR, CPL, P, NL, NR, NTOT,                    
     &   BCTOP, RHOT, KTOP2, DEPTTR,                                   
     &   BCBOT, RHOB, KBOT2, DEPTBR,                                   
     &   ML, FREQ )                                                     
                                                                        
                                                                        
                                                                        
C     Computes the pressure field along the interface.                  
C     Also returns information needed for the tails in the halfspaces   
                                                                        
C      PARAMETER ( MAXMED = 50, MAXNRD = 501 )                          
      PARAMETER ( MAXMED = 50 )                                         
                                                                        
      INCLUDE 'param.inc'                                               
      INCLUDE 'acommon.inc'                                             
                                                                        
C      REAL       RHOL( MAXMED )
      REAL       RHO( MAXMED ), DEPTH( MAXMED )
C      REAL       DEPTHL( MAXMED )
      COMPLEX CST, CSB
      COMPLEX    CPL( * ), P( * ), KTOP2, KBOT2
      CHARACTER  MATER( MAXMED ) * 8, BCBOT * 1, BCTOP * 1
                                                                        
                                                                        
                                                                        
C     *** Get modal info at end of last segment ***                     
C ************************************************************************* 
C      CURRNT= ALEFT                                                       
C ************************************************************************* 
      ML= AMQTY(CURRNT)                                            
      NL= ALTOT(CURRNT)                                            
      NLMAX= NL                                                        
      NMEDIA= ANMED(CURRNT)                                          
      DEPTTL= 0.0                                                     
C      DEPTHL(1)= 0.0                                                   
C      RHOTL= 0.0                                                       
C      RHOL(1)= 1.0                                                     
                                                                        
      IF(NMEDIA .GT. 1 )   THEN                                        
C        DEPTHL(2)= AH0(CURRNT)                                     
C        RHOL(2)= AR1(CURRNT)                                         
      END IF                                                           
                                                                        
C      RHOBL= AR2(CURRNT)                                           
      DEPTBL= AH0H1(CURRNT)                                        
                                                                        
      ZL(1)= 0.0
      DO 1200   IZ= 1, AMH0(ALEFT) - 1
      ZL(IZ+1)= ADH0(ALEFT)*IZ * AH0(ALEFT)
 1200 CONTINUE
      IF( AH1(ALEFT) .GT. 0.0 )   THEN
       ISTART= AMH0(ALEFT)
       DO 1400   IZ= 1, AMSED(ALEFT)
       ZL(ISTART+IZ)= ADSED(ALEFT)*IZ*AH0(ALEFT) + AH0(ALEFT)
 1400  CONTINUE
      END IF

                                                                        
C     *** Get modal data in new segment ***                             
C ************************************************************************* 
      CURRNT= ARIGHT                                                      
C ************************************************************************* 
      CALL MODHDR( FREQ, NMEDIA, NR, NMAT,
     &   MATER, DEPTH, RHO,                                          
     &   BCTOP, CST, RHOT, DEPTTR,                                          
     &   BCBOT, CSB, RHOB, DEPTBR,                                          
     &   MR, ZR, KTOP2, KBOT2 )


C     *** Upslope? Extend the Z vector with data from ZL ***

      NTOT = NR

      DO 500 IZL = 1, NL                                                
         IF ( ZL( IZL ) .GT. ZR( NTOT ) ) THEN                          
            NTOT  = NTOT + 1                                            
            ZR( NTOT ) = ZL( IZL )                                      
         ENDIF                                                          
  500 CONTINUE                                                          


C     *** Retabulate the pressure on the new grid ***                   
                                                                        
      IZL = 1                                                           
      MED= 1                                                            
      RHOMED= RHO(1)
      RHOSVL= RHOMED

      RL= AR1(ALEFT)
      IF( AR1(ALEFT) .EQ. 0.0 )    RL= AR2(ALEFT)
      RR= AR1(ARIGHT)
      IF( AR1(ARIGHT) .EQ. 0.0 )   RR= AR2(ARIGHT)

C     W : WATER
C     S : SEDIMENT
C     L : LEFT
C     R : RIGHT
      WLWR= 1.0
      WLSR= SQRT( RR )
      SLWR= SQRT( RL )
      SLSR= SQRT(RL * RR )
      IF( AH0(ALEFT) .GE. AH0(ARIGHT) )  THEN
C  UPSLOPE CASE
        FRST= AH0(ARIGHT)
        DEEPST= AH0(ALEFT)
        CROSS= WLSR
      ELSE
C  DOWNSLOPE CASE
        FRST= AH0(ALEFT)
        DEEPST= AH0(ARIGHT)
        CROSS= SLWR
      END IF


      SQRHO= 1.0

                                                                        
      DO 7000 IZ = 1, NTOT                                              
         ZT = ZR( IZ )                                                  
                                                                        
C        ------ Get medium density in right segment
         IF      ( ZT .LT. DEPTTR ) THEN                               
            RHOMED = RHOT                                               
         ELSE IF ( ZT .GT. DEPTBR ) THEN                               
            RHOMED = RHOB                                               
         ELSE IF ( MED .LT. NMEDIA ) THEN                               
            IF   ( ZT .GT. DEPTH( MED + 1 ) ) THEN                      
               MED    = MED + 1                                         
               RHOMED = RHO( MED )                                      
            ENDIF                                                       
         ENDIF
         RHOSVR= RHOMED

C        ------ Get medium density in left segment
         IF      ( ZT .LT. DEPTTL ) THEN                               
            RHOSVL = RHOT
         ELSE IF ( ZT .GT. DEPTBL ) THEN                               
            RHOSVL = AR2(ALEFT)                                               
         ELSE IF ( ZT .GT. REAL(AH0(ALEFT)) ) THEN
            RHOSVL= AR1(ALEFT)
         ENDIF
         SQRHO= SQRT(RHOSVL*RHOSVR)

 4000    IF ( ZT .GT. ZL( IZL + 1 ) .AND. IZL .LT. NL - 1 ) THEN        
            IZL = IZL + 1                                               
            GOTO 4000                                                   
         ENDIF                                                          
                                                                        
C        ------ Calculate P at that depth                               
                                                                        
         IF      ( ZT .GT. DEPTBL ) THEN                               
            IF ( BCBOT .EQ. 'A' ) THEN                                  
               P( IZ ) = CMPLX( 0.0, 0.0 )
               DO 5000 MODE = 1, ML                                     
                  P( IZ ) = P( IZ ) + PHIBL( MODE ) *                   
     &                 EXP( -GAMBL( MODE ) * ( ZT - DEPTBL ) )         
 5000          CONTINUE                                                 
               NLMAX= NLMAX + 1                                         
               CPL(NLMAX)= P(IZ)                                        
               ZL(NLMAX)= ZT                                            
            ENDIF                                                       
         ELSE IF ( ZT .LT. DEPTTL ) THEN                               
            IF ( BCTOP .EQ. 'A' ) THEN                                  
               P( IZ ) = CMPLX( 0.0, 0.0 )
               DO 6000 MODE = 1, ML                                     
                  P( IZ ) = P( IZ ) + PHITL( MODE ) *                   
     &                 EXP( -GAMTL( MODE ) * ( DEPTTL - ZT ) )         
 6000          CONTINUE                                                 
            ENDIF                                                       
         ELSE                                                           
                                                                        
                                                                        
            I1= MAX(1,IZL-1)                                            
            I1= MIN(I1,NL-3)                                            
            CALL LAGCMP( 4, ZL(I1), CPL(I1), ZT, P(IZ) )              
         ENDIF                                                          
                                                                        

         IF ( IZ .EQ. 1 ) THEN                                          
C           ------ First point                                          
            H = 0.5 * ( ZR( 2      ) - ZR( 1        ) ) / SQRHO        


         ELSE IF ( IZ .EQ. NTOT ) THEN                                  
C           ------ Last point                                           
            IF( FRST .LE. ZR(NTOT-1) )   THEN
              H = 0.5 * ( ZR( NTOT   ) - ZR( NTOT - 1 ) ) / SQRHO
            ELSE IF ( FRST .LE. ZR(NTOT-1) )   THEN
                H = 0.5 * (
     &                    ( ZR( NTOT ) - DEEPST        ) / SLSR
     &                  + ( DEEPST     - ZR( NTOT - 1 )) / CROSS )
            ELSE
              H = 0.5 * (
     &                   ( ZR( NTOT ) - DEEPST        ) / SLSR
     &                +  ( DEEPST     - FRST          ) / CROSS
     &                +  ( FRST       - ZR( NTOT - 1 )) / WLWR  )
            END IF



         ELSE IF ( FRST .GT. ZR( IZ - 1) .AND.               
     &             FRST .LT. ZR( IZ + 1 ) )      THEN              
C              ------ Point just above or below the SHALLOWEST interface
C           WHAT ABOUT THE DEEPEST INTERFACE ?
            IF ( DEEPST .GT. ZR( IZ - 1) .AND.               
     &           DEEPST .LT. ZR( IZ + 1 ) )      THEN              
                 H = 0.5 * ( 
     &                      (ZR( IZ + 1 ) - DEEPST        ) / SLSR
     &                    + (DEEPST       - FRST          ) / CROSS
     &                    + (FRST         - ZR( IZ - 1 )  ) / WLWR  )
            ELSE
               H = 0.5 * (
     &                     (ZR( IZ + 1 ) - FRST        ) / CROSS
     &                   + (FRST         - ZR( IZ - 1 )) / WLWR   )
            END IF


         ELSE IF ( DEEPST .GT. ZR( IZ - 1) .AND.               
     &             DEEPST .LT. ZR( IZ + 1 ) )      THEN
C              ------ Point just above or below the DEEPEST interface

              H = 0.5 * (
     &                    (ZR( IZ + 1 ) - DEEPST      ) / SLSR
     &                  + (DEEPST       - ZR( IZ - 1 )) / CROSS   )

         ELSE                                                        
            H = 0.5 * ( ZR( IZ + 1 ) - ZR( IZ   - 1 ) ) / SQRHO
         ENDIF                                                          
                                                                        
         P( IZ ) = H * P( IZ )


 7000 CONTINUE
                                                                        
                                                                        
      RETURN                                                            
      END