C GETONE.FOR SUBROUTINE GETONE( MODE, NTOT, WSD, ISD, WRD, IRD, C & N, MATER, NMEDIA, COMP, EIGF, & MATER, NMEDIA, EIGF, & KTOP2, DEPTHT, BCTOP, & KBOT2, DEPTHB, BCBOT, & SD, NSD, RD, NRD, CK, CKTAIL, PHIT, PHIS ) C Read in a single eigenfuntion and extract receiver values C Results are returned in PHIT COMPLEX CZERO PARAMETER ( CZERO= ( 0.0, 0.0 ) ) INCLUDE 'param.inc' INCLUDE 'acommon.inc' LOGICAL TUFLUK INTEGER ISD( * ), IRD( * ) REAL SD( * ), RD( * ), WSD( * ), WRD( * ) DOUBLE PRECISION EIGF( * ) COMPLEX PHIS( * ), PHIT( * ), & GAMT, GAMB, KTOP2, KBOT2, SNAPCK, & CK( * ), CKTAIL( * ) C COMPLEX*16 PEKRT COMPLEX PEKRT C CHARACTER MATER( * )*8, COMP*( *), BCTOP*1, BCBOT*1 CHARACTER MATER( * )*8, BCTOP*1, BCBOT*1 CHARACTER*8 MODEL COMMON /LUNIT/ LUPLP, LUPLT, LUPRT COMMON /MODEL/ MODEL CX CALL SINMOD( MODFIL, MODE, PHI, NMAT, LRECL ) C *** Is there an elastiC medium in the problem? *** TUFLUK = .FALSE. DO 2000 MED = 1, NMEDIA IF ( MATER( MED ) .EQ. 'ELASTIC' ) TUFLUK = .TRUE. 2000 CONTINUE C ------ Extract the component specified by 'COMP' IF ( TUFLUK ) THEN C CALL EXTRACT( PHI, MODE, N, MATER, NMEDIA, COMP ) PRINT *,' ERROR IN SUB GETONE ' PRINT *, ' SUB EXTRACT NOT IN ORDER ' STOP END IF C *** Extract values at receiver depths *** GAMT = CZERO GAMB = CZERO IF( MODEL(1:7) .EQ. 'C-SNAP ' ) THEN SNAPCK = CMPLX( REAL( CKTAIL( MODE ) )**2, 0.0 ) ELSE SNAPCK = CK( MODE ) ** 2 END IF IF ( BCTOP(1:1) .EQ. 'A' ) GAMT = PEKRT( SNAPCK - KTOP2 ) IF ( BCBOT(1:1) .EQ. 'A' ) GAMB = PEKRT( SNAPCK - KBOT2 ) C IF ( BCTOP(1:1) .EQ. 'A' ) GAMT = PEKRT( CK( MODE )** 2 - KTOP2 ) C IF ( BCBOT(1:1) .EQ. 'A' ) GAMB = PEKRT( CK( MODE )** 2 - KBOT2 ) DO 3000 IR = 1, NRD IF ( RD( IR ) .LT. DEPTHT ) THEN C ------ Rcvr in upper halfspace C PHIT( IR ) = MODSET( 1, MODE) * PHIT( IR ) = SNGL(EIGF( 1 )) * & EXP( -GAMT * ( DEPTHT - RD( IR ) ) ) ELSE IF ( RD( IR ) .GT. DEPTHB ) THEN C ------ Rcvr in lower halfspace C PHIT( IR ) = MODSET( NTOT, MODE) * PHIT( IR ) = SNGL(EIGF( NTOT )) * & EXP( -GAMB * ( RD( IR ) - DEPTHB ) ) ELSE IZ = IRD( IR ) C PHIT( IR ) = MODSET( IZ, MODE) + C & WRD( IR ) * ( MODSET( IZ+1, MODE) - C & MODSET( IZ, MODE) ) PHIT( IR ) = SNGL(EIGF( IZ )) + & WRD( IR ) * ( SNGL(EIGF( IZ+1 )) - & SNGL(EIGF( IZ )) ) ENDIF 3000 CONTINUE DO 4000 IS = 1, NSD IF ( SD( IS ) .LT. DEPTHT ) THEN C ------ Source in upper halfspace C PHIS( MODE ) = MODSET( 1, MODE) * PHIS( MODE ) = SNGL(EIGF( 1 )) * & EXP( -GAMT * ( DEPTHT - SD( IS ) ) ) ELSE IF ( SD( IS ) .GT. DEPTHB ) THEN C ------ Source in lower halfspace C PHIS( MODE ) = MODSET( NTOT, MODE) * PHIS( MODE ) = SNGL(EIGF( NTOT )) * & EXP( -GAMB * ( SD( IS ) - DEPTHB ) ) ELSE IZ = ISD( IS ) C PHIS( MODE ) = MODSET( IZ, MODE) + C & WSD( IS ) * ( MODSET( IZ+1, MODE) - C & MODSET( IZ, MODE) ) PHIS( MODE ) = SNGL(EIGF( IZ )) + & WSD( IS ) * ( SNGL(EIGF( IZ+1 )) - & SNGL(EIGF( IZ )) ) ENDIF 4000 CONTINUE RETURN END