Salvus 2024.1.3
Minor bugfix release with changes as listed below.
Changes
Improved perforrmance reporting for task chain based workflows.
Replace distutils by packaging when comparing version numbers and checking
for Salvus updates.
Fix a bug that prevented the use of event dependent mesh masking in inversions outside of task chains.
Fix a bug where explicitly setting time axis in the simulation by means of (auto) start time, time step, and end time does work in the simulation, but not the data retrieval, leading to an assertion error when accessing simulated data.
Changes to Experimental Features
Reduces the threshold above which an inverse coordinate transform is allowed to be unstable, from 1.05 to 1.0001 (in element reference coordinates). This change is driven by some instabilities encountered in a typical use case involving high-order topography and a deformed interface.
Salvus now supports the as of now latest version 3.5.1 of Paramiko.
The LD_LIBRARY_PATH can now be overwritten for local exectutors. This is useful when the Salvus binary is not in the default path or when one wants to use a non-standard MPI.
Add support in SalvusProject for combining side-set and point receivers in the same event.
Isotropic acoustic materials can now be parameterized in terms of bulk modulus and density.
import salvus.namespace as sn
sn.material.acoustic.isotropic.BulkModulus.from_params(rho=1500, kappa=6e9)Adds a new force_monotonic_top_down function in
layered_meshing.layered_model.filters. This is useful when the partitioning
field is known a-priori to be primarily monotonically increasing in the negative
vertical direction, especially when slight variations in the model lead to local
deviations from monotonicity. Without applying this filter a naive
partitioning may behave unexpectedly as variations in monotonicity can cause
holes in simple predicates (i.e., those based on threshold velocity values)
which will in turn prevent the partitioning algorithms from forming a clean
partition.
It’s usage for a simple acoustic model parametrized via velocites might look something like the following:
...
partition(
d=domain,
lm=layered_model,
model_predicate=filters.force_monotonic_top_down(lambda x: x.ds.VP),
mode="discontinuous"
)
...
where the goal is to partition across a “blurred” sea bottom.
Added a new attachment component to Salvus project to allow for attaching arbitrary files.
Can be used for notes, images, or other files that are relevant to the project.
# Attach something. By default most things must be passed as bytes.
p.attachments.add(
name="document.pdf",
content=b"...",
description="An optional description"
)
# For some file types strings, ...
p.attachments.add(
name="my_note.txt",
content="This project is super interesting."
)
# ... and dictionaries are also supported.
p.attachments.add(
name="info.json",
content={"some": "content"}
)
# Retrieve the attached files again.
p.attachments.get_content("document.pdf")
p.attachments.get_content_str("my_note.txt")
p.attachments.get_content_dict("info.json")
# Delete them.
p.attachments.delete("my_note.txt")
# Get a list of all available attachements.
p.attachments.list()
# Retrieve some meta data for an attached file.
p.attachments.get_details("document.pdf")