$ 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
Type | Intent | Optional | 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 |
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