seisflows.workflow.migration

Seismic migration performs a ‘time-reverse migration’, or backprojection. In the terminology of seismic imaging, we are running a forward and adjoint simulation to derive the gradient of the objective function. This workflow sets up the machinery to derive a scaled, smoothed gradient from an initial model

Warning

Misfit kernels require large amounts of disk space for storage. Setting `export_kernel`==True when PAR.NTASK is large and model files are large may lead to large file overhead.

Note

Migration workflow includes an option to mask the gradient. While both masking and preconditioning involve scaling the gradient, they are fundamentally different operations: masking is ad hoc, preconditioning is a change of variables; For more info, see Modrak & Tromp 2016 GJI

Module Contents

Classes

Migration

Migration Workflow

class seisflows.workflow.migration.Migration(modules=None, path_mask=None, export_gradient=True, export_kernels=False, **kwargs)

Bases: seisflows.workflow.forward.Forward

Migration Workflow

Run forward and adjoint solver to produce event-dependent misfit kernels. Sum and postprocess kernels to produce gradient. In seismic exploration this is ‘reverse time migration’.

Parameters

type export_gradient

bool

param export_gradient

export the gradient after it has been generated in the scratch directory. If False, gradient can be discarded from scratch at any time in the workflow

type export_kernels

bool

param export_kernels

export each sources event kernels after they have been generated in the scratch directory. If False, gradient can be discarded from scratch at any time in the workflow

Paths

type path_mask

str

param path_mask

optional path to a masking function which is used to mask out or scale parts of the gradient. The user-defined mask must match the file format of the input model (e.g., .bin files).

***

property task_list

USER-DEFINED TASK LIST. This property defines a list of class methods that take NO INPUT and have NO RETURN STATEMENTS. This defines your linear workflow, i.e., these tasks are to be run in order from start to finish to complete a workflow.

This excludes ‘check’ (which is run during ‘import_seisflows’) and ‘setup’ which should be run separately

Note

For workflows that require an iterative approach (e.g. inversion), this task list will be looped over, so ensure that any setup and teardown tasks (run once per workflow, not once per iteration) are not included.

Return type

list

Returns

list of methods to call in order during a workflow

__doc__
run_adjoint_simulations()

Performs adjoint simulations for a single given event. File manipulation to ensure kernels are discoverable by other modules

postprocess_event_kernels()

Combine/sum NTASK event kernels into a single volumetric kernel and then (optionally) smooth the output misfit kernel by convolving with a 3D Gaussian function with user-defined horizontal and vertical half-widths.

evaluate_gradient_from_kernels()

Generates the ‘gradient’ from the ‘misfit kernel’. This involves scaling the gradient by the model vector (log dm –> dm) and applying an optional mask function to the gradient.