HybridModeling

class pysit.modeling.HybridModeling(solver, dft_points_per_period=12.0, adjoint_energy_threshold=1e-05)[source]

Bases: object

Class containing a collection of methods needed for seismic inversion in the frequency domain.

This collection is designed so that a collection of like-methods can be passed to an optimization routine, changing how we compute each part, eg, in time, frequency, or the Laplace domain, without having to reimplement the optimization routines.

A collection of inversion functions must contain a procedure for computing: * the foward model: apply script_F (in our notation) * migrate: apply F* (in our notation) * demigrate: apply F (in our notation) * Hessian?

Attributes:
solver : pysit wave solver object

A wave solver that inherits from pysit.solvers.WaveSolverBase

Attributes Summary

modeling_type
solver_type

Methods Summary

adjoint_model(self, shot, m0, …[, …]) Solves for the adjoint field in frequency.
forward_model(self, shot, m0, frequencies[, …]) Applies the forward model to the model for the given solver.
linear_forward_model(self, shot, m0, m1, …) Applies the forward model to the model for the given solver.
migrate_shot(self, shot, m0, …[, …]) Performs migration on a single shot.

Attributes Documentation

modeling_type
solver_type

Methods Documentation

adjoint_model(self, shot, m0, operand_simdata, frequencies, operand_dWaveOpAdj=None, operand_model=None, frequency_weights=None, return_parameters=[], dWaveOp=None)[source]

Solves for the adjoint field in frequency.

m*q_tt - lap q = resid

Parameters:
shot : pysit.Shot

Gives the receiver model for the right hand side.

operand : ndarray

Right hand side, usually the residual.

frequencies : list of 2-tuples

2-tuple, first element is the frequency to use, second element the weight.

return_parameters : list of {‘q’, ‘qhat’, ‘ic’}
dWaveOp : ndarray

Imaging component from the forward model (in frequency).

Returns:
retval : dict

Dictionary whose keys are return_parameters that contains the specified data.

Notes

  • q is the adjoint field.
  • qhat is the DFT of oq at the specified frequencies
  • ic is the imaging component. Because this function computes many of the things required to compute the imaging condition, there is an option to compute the imaging condition as we go. This should be used to save computational effort. If the imaging condition is to be computed, the optional argument utt must be present.
forward_model(self, shot, m0, frequencies, return_parameters=[])[source]

Applies the forward model to the model for the given solver.

Parameters:
shot : pysit.Shot

Gives the source signal approximation for the right hand side.

frequencies : list of 2-tuples

2-tuple, first element is the frequency to use, second element the weight.

return_parameters : list of {‘wavefield’, ‘simdata’, ‘simdata_time’, ‘dWaveOp’}
Returns:
retval : dict

Dictionary whose keys are return_parameters that contains the specified data.

Notes

  • u is used as the target field universally. It could be velocity potential, it could be displacement, it could be pressure.
  • uhat is used to generically refer to the DFT of u that is needed to compute the imaging condition.
linear_forward_model(self, shot, m0, m1, frequencies, return_parameters=[])[source]

Applies the forward model to the model for the given solver.

Parameters:
shot : pysit.Shot

Gives the source signal approximation for the right hand side.

m1 : solver.ModelParameters
frequencies : list of 2-tuples

2-tuple, first element is the frequency to use, second element the weight.

return_parameters : list of {‘dWaveOp0’, ‘wavefield1’, ‘dWaveOp1’, ‘simdata’, ‘simdata_time’}, optional

Values to return.

Returns:
retval : dict

Dictionary whose keys are return_parameters that contains the specified data.

Notes

  • u1 is used as the target field universally. It could be velocity potential, it could be displacement, it could be pressure.
  • u1tt is used to generically refer to the derivative of u1 that is needed to compute the imaging condition.
  • If u0tt is not specified, it may be computed on the fly at potentially high expense.
migrate_shot(self, shot, m0, operand_simdata, frequencies, operand_dWaveOpAdj=None, operand_model=None, frequency_weights=None, dWaveOp=None, adjointfield=None, dWaveOpAdj=None)[source]

Performs migration on a single shot.

Parameters:
shot : pysit.Shot

Shot for which to compute migration.

operand_simdata : ndarray

Operand, i.e., b in F*b. This data is in TIME to properly compute the adjoint.

frequencies : list of 2-tuples

2-tuple, first element is the frequency to use, second element the weight.

utt : list

Imaging condition components from the forward model for each receiver in the shot.

qs : list

Optional return list allowing us to retrieve the adjoint field as desired.