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)

Bases: esys.downunder.seismic.WaveBase

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 problem
  • v_p (escript.Scalar) – vertical p-velocity field
  • v_s (escript.Scalar) – vertical s-velocity field
  • wavelet (Wavelet) – wavelet to describe the time evolution of source term
  • source_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
getTimeStepSize()
setQ(q)

sets the PDE q value

Parameters:q – the value to set
update(t)

returns the solution for the next time marker t which needs to greater than the time marker from the previous call.

class esys.downunder.seismic.Ricker(f_dom=40, t_dom=None)

Bases: esys.downunder.seismic.Wavelet

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 time t_dom. If t_dom is not given an estimate for suitable t_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')

Bases: object

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)

Bases: esys.downunder.seismic.WaveBase

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 problem
  • v_p (escript.Scalar) – vertical p-velocity field
  • v_s (escript.Scalar) – vertical s-velocity field
  • wavelet (Wavelet) – wavelet to describe the time evolution of source term
  • source_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.
getTimeStepSize()
update(t)

returns the solution for the next time marker t which needs to greater than the time marker from the previous call.

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)

Bases: esys.downunder.seismic.WaveBase

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 problem
  • v_p (escript.Scalar) – p-velocity field
  • wavelet (Wavelet) – wavelet to describe the time evolution of source term
  • source_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.
getTimeStepSize()
update(t)

returns the solution for the next time marker t which needs to greater than the time marker from the previous call.

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)

Bases: esys.downunder.seismic.WaveBase

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 parameters eps, delta and the tilt theta

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 problem
  • v_p (escript.Scalar) – vertical p-velocity field
  • v_s (escript.Scalar) – vertical s-velocity field
  • wavelet (Wavelet) – wavelet to describe the time evolution of source term
  • source_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.
getTimeStepSize()
update(t)

returns the solution for the next time marker t which needs to greater than the time marker from the previous call.

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)

Bases: esys.downunder.seismic.WaveBase

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 problem
  • v_p (escript.Scalar) – vertical p-velocity field
  • v_s (escript.Scalar) – vertical s-velocity field
  • wavelet (Wavelet) – wavelet to describe the time evolution of source term
  • source_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
getTimeStepSize()
setQ(q)

sets the PDE q value

Parameters:q – the value to set
update(t)

returns the solution for the next time marker t which needs to greater than the time marker from the previous call.

class esys.downunder.seismic.WaveBase(dt, u0, v0, t0=0.0)

Bases: object

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.

class esys.downunder.seismic.Wavelet

Bases: object

place holder for source wavelet

__init__()

Initialize self. See help(type(self)) for accurate signature.

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 domain
  • absorption_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

Packages