Analytic3D Subroutine

public subroutine Analytic3D(x, t, c, cimag, gradc, cxx, cyy, czz, cxy, cxz, cyz, rho)

$ IF ( x( 3 ) .LT. 5000.0 ) THEN $ ELSE ! HOMOGENEOUS HALF-SPACE $ W = 2.0 * ( 5000.0 - 1300.0 ) / 1300.0 $ c = c0*( 1.0 + 0.00737 * ( W - 1.0 + EXP( -W ) ) ) $ gradc( 2 ) = 0.0 $ gradc( 3 ) = 0.0 $ czz = 0.0 $ cyz = 0.0 $ END IF

Arguments

Type IntentOptional Attributes Name
real(kind=8), intent(in) :: x(3)
real(kind=8), intent(in) :: t(3)
real(kind=8), intent(out) :: c
real(kind=8), intent(out) :: cimag
real(kind=8), intent(out) :: gradc(3)
real(kind=8), intent(out) :: cxx
real(kind=8), intent(out) :: cyy
real(kind=8), intent(out) :: czz
real(kind=8), intent(out) :: cxy
real(kind=8), intent(out) :: cxz
real(kind=8), intent(out) :: cyz
real(kind=8), intent(inout) :: rho

Called by

proc~~analytic3d~~CalledByGraph proc~analytic3d Analytic3D proc~evaluatessp3d EvaluateSSP3D proc~evaluatessp3d->proc~analytic3d proc~bellhopcore BellhopCore proc~bellhopcore->proc~evaluatessp3d proc~traceray3d TraceRay3D proc~bellhopcore->proc~traceray3d proc~traceray2d TraceRay2D proc~bellhopcore->proc~traceray2d proc~evaluatessp2d EvaluateSSP2D proc~evaluatessp2d->proc~evaluatessp3d proc~reflect3d Reflect3D proc~reflect3d->proc~evaluatessp3d proc~step3d Step3D proc~step3d->proc~evaluatessp3d proc~reflect2d Reflect2D proc~reflect2d->proc~evaluatessp2d proc~step2d~2 Step2D proc~step2d~2->proc~evaluatessp2d proc~traceray3d->proc~reflect3d proc~traceray3d->proc~step3d program~bellhop3d BELLHOP3D program~bellhop3d->proc~bellhopcore proc~traceray2d->proc~reflect2d proc~traceray2d->proc~step2d~2

Source Code

SUBROUTINE Analytic3D( x, t, c, cimag, gradc, cxx, cyy, czz, cxy, cxz, cyz, rho )

  REAL (KIND=8), INTENT( IN ) :: x( 3 )
  REAL (KIND=8), INTENT( OUT ) :: c, cimag, gradc( 3 )
  REAL (KIND=8), INTENT( OUT ) :: cxx, cyy, czz, cxy, cxz, cyz
  REAL (KIND=8), INTENT( IN ) :: t( 3 )   ! ray tangent; for edge cases of updating segments
  REAL (KIND=8), INTENT( INOUT ) :: rho

  REAL (KIND=8) :: c0, W, Wz, epsilon, epsilon_y

  iSegz = 1
  c0    = 1500.0
  rho   = 1.0

!!$  IF ( x( 3 ) .LT. 5000.0 ) THEN
     epsilon   = 0.00737 + x( 2 ) / 100000.0 * 0.003
     epsilon_y = 0.003 / 100000.0

     W   = 2.0 * ( x( 3 ) - 1300.0 ) / 1300.0
     Wz  = 2.0 / 1300.0

     c           = c0 * ( 1.0 + epsilon * ( W - 1.0 + EXP( -W ) ) )
     cimag       = 0.
     gradc( 2 )  = c0 * epsilon_y * ( W - 1.0 + EXP( -W ) )
     gradc( 3 )  = c0 * epsilon * ( 1.0 - EXP( -W ) ) * Wz
     czz         = c0 * epsilon * EXP( -W ) * Wz **2
     cyz         = c0 * epsilon_y * ( 1.0 - EXP( -W ) ) * Wz
!!$  ELSE    ! HOMOGENEOUS HALF-SPACE
!!$     W           = 2.0 * ( 5000.0 - 1300.0 ) / 1300.0
!!$     c           = c0*( 1.0 + 0.00737 * ( W - 1.0 + EXP( -W ) ) )
!!$     gradc( 2 )  = 0.0
!!$     gradc( 3 )  = 0.0
!!$     czz         = 0.0
!!$     cyz         = 0.0
!!$  END IF

  gradc( 1 )  = 0.0
  cxx = 0.0
  cyy = 0.0
  cxz = 0.0
  cxy = 0.0

  RETURN
END SUBROUTINE Analytic3D