Mondaic

Salvus 0.11.34

Released: 2021-05-28

This release comes with several small fixes and improvements listed below.

New features include built-in support for two new source time functions, box constraints for inverse problems.

Changes

SalvusCompute

Added new gradient output formats hdf5-full and hdf5-minimal. hdf5-full contains additional fields stored in the input mesh, e.g., the index of layers / regions. hdf5-minimal will only write the data fields of the gradient, but neither coordinates, connectivity nor an xdmf file.

The default format hdf5 remains unchanged.

SalvusFlow

Adds two useful built-in source-time functions: a Tone Burst, commonly used to model ultrasound transducers, and a wavelet with a flattened spectrum, sometimes used in geophysical applications.

SalvusFlow

Adds a .to_list() function to all receiver collections so that multiple collections can more easily be appended to each other.

SalvusFlow

Mitigate an error that sometimes happened upon closing the paramiko SSH and SFTP clients.

SalvusFlow

MPICH sometimes causes a problem on OSX. If this happens during site initialization the error message now points to the section on the Mondaic website that describes how to solve it.

SalvusFlow

The source and receiver placement could previously fail for strongly distorted high-order elements. For these rare cases it now falls back to a slower, more brute-force method that should always work.

SalvusFlow

Improved the temporal resampling of custom STF functions which is useful for plotting on the Python side.

SalvusMesh

A list of side sets can now be passed to the free_surface argument of AbsorbingBoundaryParameters. These side sets will in turn not be extended with absorbing layers (if they are requested), and no absorbing conditions will be placed on them. This is useful, for instance, to model a thing plate (free_surface=["z0", "z1"]).

SalvusMesh

The Jupyter notebook mesh visualization widget now has a “Toggle Mesh” button to quickly toggle the visibility of the mesh. This is to look at sources and receivers inside the mesh.

SalvusOpt

Add optional box constraints to the InverseProblemConfiguration and implement the related projection algorithm for the trust region method.

Here is a snippet that adds lower and upper bounds on VP to an inversion:

mesh = p.simulations.get_mesh("initial_model")
lb = mesh.copy()
lb.elemental_fields["VP"] *= 0.8
lb.elemental_fields["RHO"] *= 0.8

ub = mesh.copy()
ub.elemental_fields["VP"] *= 1.2
ub.elemental_fields["RHO"] *= 1.2

p.inversions.set_constraints(
    inverse_problem_configuration="my_third_inversion",
    constraints={
        "lower_bounds": lb,
        "upper_bounds": ub,
    },
)
SalvusProject

In some rare cases the order of the coordinates in xarray data sets was not passed on correctly to Salvus’ internal interpolation routines. This now works as expected.

SalvusProject

Deleting a volume, topography, or bathymetry model will now delete any dependent, auto-generated meshes.

SalvusProject

Make SalvusProject compatible with the latest pyproj 3.1.0 package.