Mondaic

Salvus 0.11.17

Released: 2020-09-18

This release contains improvements in a number of different areas.

Salvus can now compute consistent adjoint sources for measurements on the time derivative fields, e.g. adjoint sources for receivers recording velocity and phi_t. Additionally the (time frequency) phase misfits have seen some significant improvements and added flexibility.

On the model building side there is a new function to derive a 1-D background model required for meshing from 2- or 3-D Cartesian volumen models.

Aside from that there are a few minor additions and bugfixes, please refer to the full changelog for details.

Changes

SalvusFlow

Add a new Cartesian receiver collection which creates a 2-D array of side set receivers for use with 3-D models. The presence of a "z1" side-set is assumed, and the receivers will be buried exactly depth_in_meters meters below this side-set.

SalvusFlow

A minimal taper (the first and last 5 samples) will now be applied to every waveform trace before the misfits and adjoint sources are computed in the EventMisfit object. This should not have any (or only a very minimal) effect on existing inversions but is more stable in certain edge cases.

SalvusFlow

The EventMisfit object can now compute fully consistent adjoint sources for measurements on receivers recording velocity or phi_t with any misfit functional. This functionality is also available from within SalvusProject.

SalvusMesh

Fix a bug where 1 layer of boundary elements would be added to a Cartesian mesh, even if an absorbing boundary width of 0 meters was requested.

Changes to Experimental Features

SalvusOpt

The phase misfit now does a better selection of which frequencies to use. One can control which frequency to use and the minimum energy level of the frequencies to use for the phase difference measurement.

from salvus.opt.misfits import get_misfit_function

misfit, adjoint_source = get_misfit_function("phase_misfit")(
    data_observed=data_observed,
    data_synthetic=data_synthetic,
    sampling_rate_in_hertz=sampling_rate_in_hertz,
    frequency_limits=(0.1, 0.5),
    # These two are optional.
    absolute_value_threshold=1e-3,
    taper_type="hanning",
)

The old implementation is still valid (but not recommended) and can be accessed with

get_misfit_function("phase_misfit", version=1)

Existing projects that used the old phase misfit will keep using it until a new MisfitConfiguration has been created.

SalvusOpt

Fixed a bug in the adjoint source scaling of time-frequency adjoint sources that occurred for phase-shifted signals.

Additionally the time frequency phase misfit is now a lot more flexible with more options.

from salvus.opt.misfits import get_misfit_function

misfit, adjoint_source = get_misfit_function("time_frequency_phase_misfit")(
    data_observed=data_observed,
    data_synthetic=data_synthetic,
    sampling_rate_in_hertz=sampling_rate_in_hertz,
    # These two are mandatory.
    segment_length_in_seconds=15.0,
    frequency_limits=(0.1, 0.5),
    # The others are optional.
    segment_overlap_fraction=0.75,
    absolute_value_threshold=1e-3,
    taper_type="hanning",
    stft_window="hann",
)
SalvusProject

Add a function derive_bm_file() to derive a 1-D background model from a 2- or 3-D Cartesian volume model. This is useful, for instance, when the 3-D model has a significant increase in velocity with depth, and when no appropriate 1-D model exists a-priori. If the velocity profile allows, using the 1-D model output by this function may result in the insertion of doubling layers when a simulation mesh is created, and as a consequence may allow for a reduction of computational cost.

SalvusProject API CHANGE

Minor modifications to create_events_from_segy_file to handle 2-D events.