esys.downunder.seismic Package¶
Classes¶
-
class
esys.downunder.seismic.
HTIWave
(domain, v_p, v_s, wavelet, source_tag, source_vector=[1.0, 0.0, 0.0], eps=0.0, gamma=0.0, delta=0.0, rho=1.0, dt=None, u0=None, v0=None, absorption_zone=None, absorption_cut=0.01, lumping=True, disable_fast_assemblers=False)¶ Solving the HTI wave equation (along the x_0 axis)
- Note
In case of a two dimensional domain a horizontal domain is considered, i.e. the depth component is dropped.
-
__init__
(domain, v_p, v_s, wavelet, source_tag, source_vector=[1.0, 0.0, 0.0], eps=0.0, gamma=0.0, delta=0.0, rho=1.0, dt=None, u0=None, v0=None, absorption_zone=None, absorption_cut=0.01, lumping=True, disable_fast_assemblers=False)¶ initialize the VTI wave solver
- Parameters
domain (
Domain
) – domain of the problemv_p (
escript.Scalar
) – vertical p-velocity fieldv_s (
escript.Scalar
) – vertical s-velocity fieldwavelet (
Wavelet
) – wavelet to describe the time evolution of source termsource_tag ('str' or 'int') – tag of the source location
source_vector – source orientation vector
eps – first Thompsen parameter
delta – second Thompsen parameter
gamma – third Thompsen parameter
rho – density
dt – time step size. If not present a suitable time step size is calculated.
u0 – initial solution. If not present zero is used.
v0 – initial solution change rate. If not present zero is used.
absorption_zone – thickness of absorption zone
absorption_cut – boundary value of absorption decay factor
lumping – if True mass matrix lumping is being used. This is accelerates the computing but introduces some diffusion.
disable_fast_assemblers – if True, forces use of slower and more general PDE assemblers
-
setQ
(q)¶ sets the PDE q value
- Parameters
q – the value to set
-
class
esys.downunder.seismic.
Ricker
(f_dom=40, t_dom=None)¶ The Ricker Wavelet w=f(t)
-
__init__
(f_dom=40, t_dom=None)¶ Sets up a Ricker wavelet wih dominant frequence
f_dom
and center at timet_dom
. Ift_dom
is not given an estimate for suitablet_dom
is calculated so f(0)~0.- Note
maximum frequence is about 2 x the dominant frequence.
-
getAcceleration
(t)¶ get the acceleration f’’(t) at time
t
-
getCenter
()¶ Return value of wavelet center
-
getTimeScale
()¶ Returns the time scale which is the inverse of the largest frequence with a significant spectral component.
-
getValue
(t)¶ get value of wavelet at time
t
-
getVelocity
(t)¶ get the velocity f’(t) at time
t
-
-
class
esys.downunder.seismic.
SimpleSEGYWriter
(receiver_group=None, source=0.0, sampling_interval=0.004, text='some seimic data')¶ A simple writer for 2D and 3D seismic lines, in particular for synthetic data
Typical usage:
from esys.escript import unitsSI as U sw=SimpleSEGYWriter([0.,100*U.m,200*U,m,300.], source=200*U.m, sampling_interval=4*U.msec) while n < 10: sw.addRecord([i*2., i*0.67, i**2, -i*7]) sw.write('example.segy')
- Note
the writer uses
obspy
-
__init__
(receiver_group=None, source=0.0, sampling_interval=0.004, text='some seimic data')¶ initalize writer
- Parameters
receiver_group – list of receiver coordinates (in meters). For the 2D case a list of floats is given, for the 3D case a list of coordinate tuples are given
source – coordinates of the source (in meters). For the 2D case a single floats is given, for the 3D case a coordinate tuples
sampling_interval – sample rate in seconds
text – a text for the header file (e.g a description)
-
COORDINATE_SCALE
= 1000.0¶
-
addRecord
(record)¶ Adds a record to the traces. A time difference of sample_interval between two records is assumed. The record mast be a list of as many values as given receivers or a float if a single receiver is used.
- Parameters
record – list of tracks to be added to the record.
-
getSamplingInterval
()¶ returns the sampling interval in seconds.
-
obspy_available
()¶ for checking if the obspy module is available
-
write
(filename)¶ writes to segy file
- Parameters
filename – file name
- Note
the function uses the
obspy
module.
-
class
esys.downunder.seismic.
SonicHTIWave
(domain, v_p, wavelet, source_tag, source_vector=[1.0, 0.0], eps=0.0, delta=0.0, azimuth=0.0, dt=None, p0=None, v0=None, absorption_zone=300.0, absorption_cut=0.01, lumping=True)¶ Solving the HTI wave equation (along the x_0 axis) with azimuth (rotation around verticle axis) under the assumption of zero shear wave velocities The unknowns are the transversal (along x_0) and vertial stress (Q, P)
- Note
In case of a two dimensional domain the second spatial dimenion is depth.
-
__init__
(domain, v_p, wavelet, source_tag, source_vector=[1.0, 0.0], eps=0.0, delta=0.0, azimuth=0.0, dt=None, p0=None, v0=None, absorption_zone=300.0, absorption_cut=0.01, lumping=True)¶ initialize the HTI wave solver
- Parameters
domain (
Doamin
) – domain of the problemv_p (
escript.Scalar
) – vertical p-velocity fieldv_s (
escript.Scalar
) – vertical s-velocity fieldwavelet (
Wavelet
) – wavelet to describe the time evolution of source termsource_tag ('str' or 'int') – tag of the source location
source_vector – source orientation vector
eps – first Thompsen parameter
azimuth – azimuth (rotation around verticle axis)
gamma – third Thompsen parameter
rho – density
dt – time step size. If not present a suitable time step size is calculated.
p0 – initial solution (Q(t=0), P(t=0)). If not present zero is used.
v0 – initial solution change rate. If not present zero is used.
absorption_zone – thickness of absorption zone
absorption_cut – boundary value of absorption decay factor
lumping – if True mass matrix lumping is being used. This is accelerates the computing but introduces some diffusion.
-
class
esys.downunder.seismic.
SonicWave
(domain, v_p, wavelet, source_tag, dt=None, p0=None, p0_t=None, absorption_zone=300.0, absorption_cut=0.01, lumping=True)¶ Solving the sonic wave equation
p_tt = (v_p**2 * p_i)_i + f(t) * delta_s
where (p-) velocity v_p.f(t) is wavelet acting at a point source term at positon s
-
__init__
(domain, v_p, wavelet, source_tag, dt=None, p0=None, p0_t=None, absorption_zone=300.0, absorption_cut=0.01, lumping=True)¶ initialize the sonic wave solver
- Parameters
domain (
Domain
) – domain of the problemv_p (
escript.Scalar
) – p-velocity fieldwavelet (
Wavelet
) – wavelet to describe the time evolution of source termsource_tag ('str' or 'int') – tag of the source location
dt – time step size. If not present a suitable time step size is calculated.
p0 – initial solution. If not present zero is used.
p0_t – initial solution change rate. If not present zero is used.
absorption_zone – thickness of absorption zone
absorption_cut – boundary value of absorption decay factor
lumping – if True mass matrix lumping is being used. This is accelerates the computing but introduces some diffusion.
-
-
class
esys.downunder.seismic.
TTIWave
(domain, v_p, v_s, wavelet, source_tag, source_vector=[0.0, 1.0], eps=0.0, delta=0.0, theta=0.0, rho=1.0, dt=None, u0=None, v0=None, absorption_zone=300.0, absorption_cut=0.01, lumping=True)¶ Solving the 2D TTI wave equation with
sigma_xx= c11*e_xx + c13*e_zz + c15*e_xz
sigma_zz= c13*e_xx + c33*e_zz + c35*e_xz
sigma_xz= c15*e_xx + c35*e_zz + c55*e_xz
the coefficients
c11
,c13
, etc are calculated from the tompsen parameterseps
,delta
and the tilttheta
- Note
currently only the 2D case is supported.
-
__init__
(domain, v_p, v_s, wavelet, source_tag, source_vector=[0.0, 1.0], eps=0.0, delta=0.0, theta=0.0, rho=1.0, dt=None, u0=None, v0=None, absorption_zone=300.0, absorption_cut=0.01, lumping=True)¶ initialize the TTI wave solver
- Parameters
domain (
Domain
) – domain of the problemv_p (
escript.Scalar
) – vertical p-velocity fieldv_s (
escript.Scalar
) – vertical s-velocity fieldwavelet (
Wavelet
) – wavelet to describe the time evolution of source termsource_tag ('str' or 'int') – tag of the source location
source_vector – source orientation vector
eps – first Thompsen parameter
delta – second Thompsen parameter
theta – tilting (in Rad)
rho – density
dt – time step size. If not present a suitable time step size is calculated.
u0 – initial solution. If not present zero is used.
v0 – initial solution change rate. If not present zero is used.
absorption_zone – thickness of absorption zone
absorption_cut – boundary value of absorption decay factor
lumping – if True mass matrix lumping is being used. This is accelerates the computing but introduces some diffusion.
-
class
esys.downunder.seismic.
VTIWave
(domain, v_p, v_s, wavelet, source_tag, source_vector=[0.0, 0.0, 1.0], eps=0.0, gamma=0.0, delta=0.0, rho=1.0, dt=None, u0=None, v0=None, absorption_zone=None, absorption_cut=0.01, lumping=True, disable_fast_assemblers=False)¶ Solving the VTI wave equation
- Note
In case of a two dimensional domain the second spatial dimenion is depth.
-
__init__
(domain, v_p, v_s, wavelet, source_tag, source_vector=[0.0, 0.0, 1.0], eps=0.0, gamma=0.0, delta=0.0, rho=1.0, dt=None, u0=None, v0=None, absorption_zone=None, absorption_cut=0.01, lumping=True, disable_fast_assemblers=False)¶ initialize the VTI wave solver
- Parameters
domain (
Domain
) – domain of the problemv_p (
escript.Scalar
) – vertical p-velocity fieldv_s (
escript.Scalar
) – vertical s-velocity fieldwavelet (
Wavelet
) – wavelet to describe the time evolution of source termsource_tag ('str' or 'int') – tag of the source location
source_vector – source orientation vector
eps – first Thompsen parameter
delta – second Thompsen parameter
gamma – third Thompsen parameter
rho – density
dt – time step size. If not present a suitable time step size is calculated.
u0 – initial solution. If not present zero is used.
v0 – initial solution change rate. If not present zero is used.
absorption_zone – thickness of absorption zone
absorption_cut – boundary value of absorption decay factor
lumping – if True mass matrix lumping is being used. This is accelerates the computing but introduces some diffusion.
disable_fast_assemblers (
boolean
) – if True, forces use of slower and more general PDE assemblers
-
setQ
(q)¶ sets the PDE q value
- Parameters
q – the value to set
-
class
esys.downunder.seismic.
WaveBase
(dt, u0, v0, t0=0.0)¶ Base for wave propagation using the Verlet scheme.
u_tt = A(t,u), u(t=t0)=u0, u_t(t=t0)=v0
with a given acceleration force as function of time.
a_n=A(t_{n-1}) v_n=v_{n-1} + dt * a_n u_n=u_{n-1} + dt * v_n
-
__init__
(dt, u0, v0, t0=0.0)¶ set up the wave base
- Parameters
dt – time step size (need to be sufficiently small)
u0 – initial value
v0 – initial velocity
t0 – initial time
-
getTimeStepSize
()¶
-
update
(t)¶ returns the solution for the next time marker t which needs to greater than the time marker from the previous call.
-
Functions¶
-
esys.downunder.seismic.
createAbsorptionLayerFunction
(x, absorption_zone=300.0, absorption_cut=0.01, top_absorption=False)¶ Creates a distribution which is one in the interior of the domain of
x
and is falling down to the value ‘absorption_cut’ over a margin of thickness ‘absorption_zone’ toward each boundary except the top of the domain.- Parameters
x (
escript.Data
) – location of points in the domainabsorption_zone – thickness of the absorption zone
absorption_cut – value of decay function on domain boundary
- Returns
function on ‘x’ which is one in the iterior and decays to almost zero over a margin toward the boundary.
Others¶
OBSPY_AVAILABLE