C   NEWENV.FOR                                                          
      SUBROUTINE NEWENV( Z0, C0, Z1, C1, Z0L, C0L, C1L, Z1L,
     &                                   Z0R, C0R, Z1R, C1R)


C   RKM= -1  :
C   This value signals the first call to sub NEWENV.
C   RKM is subsequently assigned the range coordinate where a new mode
C   set is required.

C   RKM= 0
C   This is the range coordinate of the FIRST environment.
C   If more environments exist, then a second one is read to define
C   the LEFT and RIGHT extremes of the first region.

C   RKM .GT. 0
C   In this case a new region is defined, with the current
C   "end of region properties" becoming the left extreme and with the
C   right extreme defined by the newly read properties.

      INTEGER FIXDZ                                                     
                                                                        
      DOUBLE PRECISION H0L, H1L, CC0L, CC1L
      DOUBLE PRECISION H0R, H1R, CC0R, CC1R
      DOUBLE PRECISION Z0(1), C0(1), Z1(1), C1(1)                       
      DOUBLE PRECISION Z0L(1), C0L(1), Z1L(1), C1L(1)                   
      DOUBLE PRECISION Z0R(1), C0R(1), Z1R(1), C1R(1)                   
      DOUBLE PRECISION H0, H1, CMIN, CC0, CC1, HTMP                     
                                                                        
      COMMON /AB/ BETA(-1:3), SCATT(2), C2S, CC0, CC1, C2               
      COMMON /DENS/ R0, R1, R2                                          
      COMMON /G/ H0, H1                                                 
      COMMON /LEFT/ RKML, BETAL(3), SCATTL(2), R1L, R2L,                
     &               C2L, C2SL, H0L, H1L, ND0L, ND1L
      COMMON /LUNIT/ LUPLP, LUPLT, LUPRT
      COMMON /MESH/ DZH0, DZH1, INPDZ, FIXDZ
      COMMON /NA/ ND0, ND1, CMIN                                        
      COMMON /RIGHT/ RKMR, BETAR(3), SCATTR(2), R1R, R2R,               
     &               C2R, C2SR, H0R, H1R, ND0R, ND1R
      COMMON /RNGPRF/ NSECT, RKM
C ****************************************************************      
                                                                        

      IF( RKM .EQ. -1)  THEN
        IF( ( NSECT .EQ. 1) )   THEN
          READ(10) RKM                                                      
          READ(10) R1, R2, H0, H1, ND0, ND1                                 
          READ(10) (BETA(J), J= 1, 3), SCATT, CC0, CC1                     
C         SVP IN WATER COLUMN                                                 
          READ(10) (Z0(J), C0(J), J= 1, ND0)                                
C         SVP IN SEDIMENT LAYER                                               
          IF(ND1.GT.0)   READ(10) (Z1(J), C1(J), J= 1, ND1)                 
C         BOTTOM                                                              
          READ(10) C2, C2S
          RETURN
        ELSE
          READ(10) RKMR                                                      
          READ(10) R1R, R2R, H0R, H1R, ND0R, ND1R
          READ(10) (BETAR(J), J= 1, 3), SCATTR, CC0R, CC1R
C         SVP IN WATER COLUMN                                                 
          READ(10) (Z0R(J), C0R(J), J= 1, ND0R)                                
C         SVP IN SEDIMENT LAYER                                               
          IF(ND1R.GT.0)   READ(10) (Z1R(J), C1R(J), J= 1, ND1R)                 
C         BOTTOM                                                              
          READ(10) C2R,C2SR

          H0=H0R                                                           
          H1=H1R                                                           
          R1=R1R                                                           
          C2=C2R                                                           
          R2=R2R                                                           
          C2S=C2SR                                                         
          ND0=ND0R                                                         
          ND1=ND1R                                                         
          DO 3000    I=1,ND0R                                               
          Z0(I)=Z0R(I)                                                     
          C0(I)=C0R(I)                                                     
 3000     CONTINUE                                                          
          DO 3200    I=1,ND1R                                               
          Z1(I)=Z1R(I)                                                     
          C1(I)=C1R(I)                                                     
 3200     CONTINUE                                                          
          DO 3400    I=1,3                                                  
          BETA(I)=BETAR(I)                                                 
 3400     CONTINUE                                                          
          SCATT(1)=SCATTR(1)
          SCATT(2)=SCATTR(2) 
          CC0= CC0R
          CC1= CC1R
          RKM= 0
        END IF
      END IF



C   SAVING PROPERTIES OF CURRENT ENVIRONMENT AS
C    "LEFT EXTREME OF REGION PROPERTIES"
      RKML=RKMR                                                         
      H0L=H0R                                                           
      H1L=H1R                                                           
      R1L=R1R                                                           
      C2L=C2R                                                           
      R2L=R2R                                                           
      C2SL=C2SR                                                         
      ND0L=ND0R                                                         
      ND1L=ND1R                                                         
                                                                        
      DO 2000    I=1,ND0R                                               
      Z0L(I)=Z0R(I)                                                     
      C0L(I)=C0R(I)                                                     
 2000 CONTINUE                                                          
                                                                        
      DO 2200    I=1,ND1R                                               
      Z1L(I)=Z1R(I)                                                     
      C1L(I)=C1R(I)                                                     
 2200 CONTINUE                                                          
                                                                        
      DO 2400    I=1,3                                                  
      BETAL(I)=BETAR(I)                                                 
 2400 CONTINUE                                                          
                                                                        
      SCATTL(1)=SCATTR(1)                                               
      SCATTL(2)=SCATTR(2)                                               
                                                                        
      CC0L= CC0R
      CC1L= CC1R


C ****************************************************************      
C   READING NEW PROPERTIES AS NEW "RIGHT EXTREME OF REGION PROPERTIES"
C      PRINT *,' ENTERING NEWENV WITH RKM, INPDZ: ', RKM, INPDZ         
                                                                        
      READ(10) RKMR                                                      
      READ(10) R1R, R2R, H0R, H1R, ND0R, ND1R                                 
C      PRINT 975, RKMR,SNGL(H0R),SNGL(H1R),ND0R,ND1R                         
C  975 FORMAT(1X,' NEWLY READ RKM,H0,H1,ND0,ND1 :',3F11.3,2I4)          
      READ(10) (BETAR(J), J= 1, 3), SCATTR, CC0R, CC1R                      
C   SVP IN WATER COLUMN                                                 
      READ(10) (Z0R(J), C0R(J), J= 1, ND0R)                                
C   SVP IN SEDIMENT LAYER                                               
      IF(ND1R.GT.0)   READ(10) (Z1R(J), C1R(J), J= 1, ND1R)                 
C   BOTTOM                                                              
      READ(10) C2R,C2SR                                                   
C ****************************************************************      

                                                                        
C      WRITE(LUPRT,*) ' NEWENV, INPDZ : ',INPDZ                         
C      PRINT *, ' INPDZ : ', INPDZ                                      
                                                                        
                                                                        
C   Adjust the water and the sediment depth                             
      IF( FIXDZ .EQ. 0 )   RETURN                                       
                                                                        
C                                                                       
      IF( (DZH0 + DZH1) .EQ. 0.0 )   RETURN                             
                                                                        
C     H0R and H1R are modified to be                                      
C     integer multiples of DZH0; ( H0R= Z0R(ND0R), H1R= Z1R(ND1R) )           
C     This guarantees that the mode amplitudes at the coupling interface
C     are known at the same depth (orthonormality problem)              
                                                                        
C      PRINT *,' initial h0r, h1r : ', h0r, h1r                             
C      PRINT *,' initial z0r(nd0r) + z1r(nd1r) ', z0r(nd0r) + z1(nd1r)          
      NH0= NINT(Z0R(ND0R)/DZH0)                                           
      HTMP= NH0 * DZH0                                                  
 4000 CONTINUE                                                          
C      WRITE(LUPRT,*) ' NEWMODSET, Z0R(ND0), HTMP ',Z0R(ND0), HTMP        
      IF(HTMP .LT. Z0R(ND0R-1))   THEN                                    
        ND0R= ND0R-1                                                      
        GO TO 4000                                                      
      ELSE IF(HTMP .NE. Z0R(ND0R))   THEN                                 
        C0R(ND0R)= C0R(ND0R-1) + (C0R(ND0R)-C0R(ND0R-1)) *                      
     &           ((HTMP-Z0R(ND0R-1))/(Z0R(ND0R)-Z0R(ND0R-1)))                 
        H0R= HTMP                                                        
        Z0R(ND0R)= HTMP                                                   
      END IF                                                            
                                                                        
      IF(H1R .GT. 0.0)   THEN                                            
C       PRINT *,' REDEF H1R, PREV H1R= ', SNGL(H1R)                        
        NH1= NINT(Z1R(ND1R)/DZH0)                                         
        HTMP= NH1 * DZH0                                                
 4200   CONTINUE                                                        
C        WRITE(LUPRT,*) ' NEWENV, Z1R(ND1R), HTMP ',Z1R(ND1R), HTMP         
        IF(HTMP .LT. Z1R(ND1R-1))   THEN                                  
          ND1R= ND1R-1                                                    
          GO TO 4200                                                    
        ELSE IF(HTMP .NE. Z1R(ND1R))   THEN                               
          C1R(ND1R)= C1R(ND1R-1) + (C1R(ND1R)-C1R(ND1R-1)) *                    
     &             ((HTMP-Z1R(ND1R-1))/(Z1R(ND1R)-Z1R(ND1R-1)))               
          H1R= HTMP                                                      
          Z1R(ND1R)= HTMP                                                 
        END IF                                                          
      END IF                                                            
                                                                        
C      PRINT *, ' FINAL H0R, H1R :',SNGL(H0R), SNGL(H1R)                    
      RETURN                                                            
      END