C  PLEFT.FOR                                                            

C   PRESSURE MATCHING

      SUBROUTINE PLEFT( 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     N(1)= MH0 ;   N(2)= MSED ;
C      INTEGER    N( MAXMED )
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
                                                                        
  100 FORMAT(1H ,I8.8,'.DAT    ')                                         
                                                                        
                                                                        
                                                                        
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)                                                    
                                                                        
      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                                                          
                                                                        
 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        ) ) / RHOMED        
         ELSE IF ( IZ .EQ. NTOT ) THEN                                  
C           ------ Last point                                           
            H = 0.5 * ( ZR( NTOT   ) - ZR( NTOT - 1 ) ) / RHOMED        
         ELSE                                                           
            IF ( ZR( IZ - 1 ) .LT. DEPTH( MED + 1 ) .AND.               
     &           ZR( IZ + 1 ) .GE. DEPTH( MED + 1 ) ) THEN              
C              ------ Point just above or below the interface           
               H = 0.5 * ( ZR( IZ + 1 ) / RHO( MED + 1 )                
     &                   - ZR( IZ - 1 ) / RHO( MED     )                
     &                   - DEPTH( MED + 1 ) / RHO( MED + 1 )            
     &                   + DEPTH( MED + 1 ) / RHO( MED     ) )          
            ELSE                                                        
               H = 0.5 * ( ZR( IZ + 1 ) - ZR( IZ   - 1 ) ) / RHOMED     
            ENDIF                                                       
         ENDIF                                                          
                                                                        
         P( IZ ) = H * P( IZ )                                          
 7000 CONTINUE                                                          
                                                                        
                                                                        
      RETURN                                                            
      END