Salvus 0.11.34
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
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.
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.
Adds a .to_list() function to all receiver collections so that multiple
collections can more easily be appended to each other.
Mitigate an error that sometimes happened upon closing the paramiko SSH and SFTP clients.
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.
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.
Improved the temporal resampling of custom STF functions which is useful for plotting on the Python side.
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"]).
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.
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,
},
)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.
Deleting a volume, topography, or bathymetry model will now delete any dependent, auto-generated meshes.
Make SalvusProject compatible with the latest pyproj 3.1.0 package.