esys.downunder.forwardmodels.acoustic Package

Forward model for acoustic wave forms

Classes

class esys.downunder.forwardmodels.acoustic.AcousticWaveForm(domain, omega, w, data, F, coordinates=None, fixAtBottom=False, tol=1e-10, saveMemory=True, scaleF=True)

Bases: esys.downunder.forwardmodels.base.ForwardModel

Forward Model for acoustic waveform inversion in the frequency domain. It defines a cost function:

Math:defect = 1/2 integrate( ( w * ( a * u - data ) ) ** 2 )

where w are weighting factors, data are the measured data (as a 2-comp vector of real and imaginary part) for real frequency omega, and u is the corresponding result produced by the forward model. u (as a 2-comp vector) is the solution of the complex Helmholtz equation for frequency omega, source F and complex, inverse, squared p-velocity sigma:

Math:-u_{ii} - omega**2 * sigma * u = F

It is assumed that the exact scale of source F is unknown and the scaling factor a of F is calculated by minimizing the defect.

__init__(domain, omega, w, data, F, coordinates=None, fixAtBottom=False, tol=1e-10, saveMemory=True, scaleF=True)

initializes a new forward model with acoustic wave form inversion.

Parameters:
  • domain (Domain) – domain of the model
  • w (Scalar) – weighting factors
  • data (escript.Data of shape (2,)) – real and imaginary part of data
  • F (escript.Data of shape (2,)) – real and imaginary part of source given at Dirac points, on surface or at volume.
  • coordinates (ReferenceSystem or SpatialCoordinateTransformation) – defines coordinate system to be used (not supported yet)
  • tol (positive float) – tolerance of underlying PDE
  • saveMemory (bool) – if true stiffness matrix is deleted after solution of PDE to minimize memory requests. This will require more compute time as the matrix needs to be reallocated.
  • scaleF (bool) – if true source F is scaled to minimize defect.
  • fixAtBottom (bool) – if true pressure is fixed to zero at the bottom of the domain
getArguments(sigma)

Returns precomputed values shared by getDefect() and getGradient().

Parameters:sigma (escript.Data of shape (2,)) – a suggestion for complex 1/V**2
Returns:solution, uTar, uTai, uTu
Return type:escript.Data of shape (2,), 3 x float
getCoordinateTransformation()

returns the coordinate transformation being used

Return type:CoordinateTransformation
getDefect(sigma, u, uTar, uTai, uTu)

Returns the defect value.

Parameters:
  • sigma (escript.Data of shape (2,)) – a suggestion for complex 1/V**2
  • u (escript.Data of shape (2,)) – a u vector
  • uTar (float) – equals integrate( w  * (data[0]*u[0]+data[1]*u[1]))
  • uTai – equals integrate( w  * (data[1]*u[0]-data[0]*u[1]))
  • uTu (float) – equals integrate( w  * (u,u))
Return type:

float

getDomain()

Returns the domain of the forward model.

Return type:Domain
getGradient(sigma, u, uTar, uTai, uTu)

Returns the gradient of the defect with respect to density.

Parameters:
  • sigma (escript.Data of shape (2,)) – a suggestion for complex 1/V**2
  • u (escript.Data of shape (2,)) – a u vector
  • uTar (float) – equals integrate( w  * (data[0]*u[0]+data[1]*u[1]))
  • uTai – equals integrate( w  * (data[1]*u[0]-data[0]*u[1]))
  • uTu (float) – equals integrate( w  * (u,u))
getSourceScaling(u)

returns the scaling factor s required to rescale source F to minimize defect |s * u- data|^2

Parameters:u (escript.Data of shape (2,)) – value of pressure solution (real and imaginary part)
Return type:complex
getSurvey(index=None)

Returns the pair (data, weight)

If argument index is ignored.

rescaleWeights(scale=1.0, sigma_scale=1.0)

rescales the weights such that

Math:

integrate( ( w omega**2 * sigma_scale * data * ((1/L_j)**2)**-1) +1 )/(data*omega**2 * ((1/L_j)**2)**-1) * sigma_scale )=scale

Parameters:
  • scale (positive float) – scale of data weighting factors
  • sigma_scale (Scalar) – scale of 1/vp**2 velocity.
setUpPDE()

Creates and returns the underlying PDE.

Return type:lpde.LinearPDE
class esys.downunder.forwardmodels.acoustic.ForwardModel

Bases: object

An abstract forward model that can be plugged into a cost function. Subclasses need to implement getDefect(), getGradient(), and possibly getArguments() and ‘getCoordinateTransformation’.

__init__()

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

getArguments(x)
getCoordinateTransformation()
getDefect(x, *args)
getGradient(x, *args)

Functions

Others

  • HAVE_DIRECT

Packages