Salvus 0.11.17
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
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.
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.
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.
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
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.
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",
)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.
Minor modifications to create_events_from_segy_file to handle 2-D events.