{
    "componentChunkName": "component---src-templates-notebook-tsx",
    "path": "/2025.1.3/examples/tutorials/models_and_topo/parameterizations/tutorial",
    "result": {"data":{"site":{"siteMetadata":{"salvusDocVersions":{"current":"2026.5.0"}}},"jupyterNotebook":{"slug":"/2025.1.3/examples/tutorials/models_and_topo/parameterizations/tutorial","notebook_widgets_root_path":"/jupyter_notebook_widgets","notebook_json":"{\"cells\":[{\"cell_type\":\"markdown\",\"id\":\"ccc43258\",\"metadata\":{},\"source\":[\"# Model Parameterizations in Salvus\\n\",\"\\n\",\"In this notebook we will explore all the different options to parameterize the\\n\",\"material properties, which are\\n\",\"currently supported in Salvus. As always, the first step is to import the\\n\",\"requisite Python modules.\"]},{\"cell_type\":\"code\",\"execution_count\":1,\"id\":\"ac336f46\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[]}],\"source\":[\"%matplotlib inline\\n\",\"import os\\n\",\"from functools import partial\\n\",\"from pathlib import Path\\n\",\"\\n\",\"import h5py\\n\",\"import matplotlib.pyplot as plt\\n\",\"import numpy as np\\n\",\"\\n\",\"import salvus.namespace as sn\\n\",\"import salvus.toolbox.toolbox as st\\n\",\"\\n\",\"SALVUS_FLOW_SITE_NAME = os.environ.get(\\\"SITE_NAME\\\", \\\"local\\\")\"]},{\"cell_type\":\"markdown\",\"id\":\"0b4274a7\",\"metadata\":{\"lines_to_next_cell\":2},\"source\":[\"First we set up a simple function to return simple meshes for testing in both\\n\",\"2- and 3-D dimensions. The size of the mesh is small as these examples will\\n\",\"only run for a trivial duration, and are just meant to be used to explore the\\n\",\"possible parameterizations.\"]},{\"cell_type\":\"code\",\"execution_count\":2,\"id\":\"eea72276\",\"metadata\":{},\"outputs\":[],\"source\":[\"def get_basic_mesh(dim: int, epd: int = 20) -> sn.UnstructuredMesh:\\n\",\"    \\\"\\\"\\\"Get a simple mesh to outline allowed parameter types.\\n\",\"\\n\",\"    Parameters\\n\",\"    ----------\\n\",\"    dim : int\\n\",\"        Dimension of the mesh.\\n\",\"    epd : int, optional\\n\",\"        Elements per dimension, by default 20\\n\",\"\\n\",\"    Returns\\n\",\"    -------\\n\",\"    um.UnstructuredMesh\\n\",\"        An unstructured mesh free of any parameters.\\n\",\"\\n\",\"    \\\"\\\"\\\"\\n\",\"    x = 2.0\\n\",\"    h = x / float(epd)\\n\",\"    vp = 1000.0\\n\",\"\\n\",\"    if dim == 2:\\n\",\"        mesh = sn.simple_mesh.basic_mesh.CartesianHomogeneousAcoustic2D(\\n\",\"            x_max=x,\\n\",\"            y_max=x,\\n\",\"            rho=1000.0,\\n\",\"            vp=vp,\\n\",\"            max_frequency=0.5 * vp / h,\\n\",\"            tensor_order=4,\\n\",\"        ).create_mesh()\\n\",\"\\n\",\"    elif dim == 3:\\n\",\"        mesh = sn.simple_mesh.basic_mesh.CartesianHomogeneousAcoustic3D(\\n\",\"            x_max=x,\\n\",\"            y_max=x,\\n\",\"            z_max=x,\\n\",\"            rho=1000.0,\\n\",\"            vp=vp,\\n\",\"            max_frequency=0.5 * vp / h,\\n\",\"            tensor_order=4,\\n\",\"        ).create_mesh()\\n\",\"\\n\",\"    # Delete the material properties as they will be added later on.\\n\",\"    mesh.elemental_fields.clear()\\n\",\"    return mesh\"]},{\"cell_type\":\"markdown\",\"id\":\"7cd1aac0\",\"metadata\":{},\"source\":[\"Second, we will define some basic parameter values to use (all SI units).\"]},{\"cell_type\":\"code\",\"execution_count\":3,\"id\":\"eccab1e0\",\"metadata\":{},\"outputs\":[],\"source\":[\"vs = 500.0\\n\",\"vp = 1000.0\\n\",\"rho = 1000.0\"]},{\"cell_type\":\"markdown\",\"id\":\"780327b4\",\"metadata\":{},\"source\":[\"Now we will define a set of sources which can be used in all of our testing\\n\",\"environments. We'll use a Ricker wavelet in all cases, but we'll change the\\n\",\"spatial type of our source depending on the dimension of the problem and the\\n\",\"physics.\"]},{\"cell_type\":\"code\",\"execution_count\":4,\"id\":\"f972c9b1\",\"metadata\":{},\"outputs\":[],\"source\":[\"stf = sn.simple_config.stf.Ricker(center_frequency=2e3)\\n\",\"\\n\",\"src_scalar_2d = sn.simple_config.source.cartesian.ScalarPoint2D(\\n\",\"    f=1, x=1, y=1, source_time_function=stf\\n\",\")\\n\",\"src_scalar_3d = sn.simple_config.source.cartesian.ScalarPoint3D(\\n\",\"    f=1, x=1, y=1, z=1, source_time_function=stf\\n\",\")\\n\",\"src_vector_2d = sn.simple_config.source.cartesian.VectorPoint2D(\\n\",\"    fx=1, fy=1, x=1, y=1, source_time_function=stf\\n\",\")\\n\",\"src_vector_3d = sn.simple_config.source.cartesian.VectorPoint3D(\\n\",\"    fx=1, fy=1, fz=1, x=1, y=1, z=1, source_time_function=stf\\n\",\")\"]},{\"cell_type\":\"markdown\",\"id\":\"b502655c\",\"metadata\":{},\"source\":[\"An finally we'll partially fill in Salvus _Flow_'s `api.run` function. We'll\\n\",\"be running the function many times with mostly the same setup, so this is a nice\\n\",\"space saving method.\"]},{\"cell_type\":\"code\",\"execution_count\":5,\"id\":\"e9609199\",\"metadata\":{},\"outputs\":[],\"source\":[\"run_salvus = partial(\\n\",\"    sn.api.run, ranks=2, get_all=True, site_name=SALVUS_FLOW_SITE_NAME\\n\",\")\"]},{\"cell_type\":\"markdown\",\"id\":\"3a26fc2e\",\"metadata\":{},\"source\":[\"Now, onto the examples themselves.\\n\",\"\\n\",\"## 2D domains\\n\",\"\\n\",\"We'll start with all of the 2-D parameterizations. Again, to save space,\\n\",\"we'll prepare our `simulation.Waveform` object with values which will\\n\",\"be re-used.\"]},{\"cell_type\":\"code\",\"execution_count\":6,\"id\":\"6cde6195\",\"metadata\":{},\"outputs\":[],\"source\":[\"w = sn.simple_config.simulation.Waveform()\\n\",\"\\n\",\"w.domain.dimension = 2\\n\",\"w.output.volume_data.format = \\\"hdf5\\\"\\n\",\"w.output.volume_data.filename = \\\"output.h5\\\"\\n\",\"w.output.volume_data.sampling_interval_in_time_steps = 100\"]},{\"cell_type\":\"markdown\",\"id\":\"4dd13c99\",\"metadata\":{},\"source\":[\"### Acoustic\\n\",\"\\n\",\"Acoustic meshes can be parameterized either using p-velocity and density, or\\n\",\"a linear parameterization using M0 and M1. Acoustic elements must have the\\n\",\"`fluid` flag set to 1.\\n\",\"\\n\",\"#### Velocity (sound speed) and density\"]},{\"cell_type\":\"code\",\"execution_count\":7,\"id\":\"3867c8b8\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409168001_b4f0cc1451` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"-> Current Task: Time loop complete* Downloaded 546.9 KB of results to `acoustic_rhovp`.\\n\",\"* Total run time: 0.54 seconds.\\n\",\"* Pure simulation time: 0.16 seconds.\\n\"]},{\"data\":{\"text/plain\":[\"<matplotlib.tri._tricontour.TriContourSet at 0x7894ea7c8b90>\"]},\"execution_count\":7,\"metadata\":{},\"output_type\":\"execute_result\"},{\"data\":{\"image/png\":\"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m5aWevdLL72UWrZs2SwCO378eLNILUuXLl0Kbl9ZWUmXXHJJyW2KvScAAACgXXqtWrWKph5s3ry50fPi9xEjRhR8zfDhw5tt/+6779L1119PF110Ucltir0nAAAAkAjZQcDVq1dnLrroosyyZcsyv//97zOzZ8/OfOc738n88Y9/jP7/F7/4RWbq1Km57f/whz9kLr744szDDz8cbS9eJ17/z//8z7lt/u3f/i0qkPnVr36V2bdvX/RTFLp88sknsffr7NmzUXGL+OkS2G8cb7QVnuDc9PN4S0tP8OKLL2Z69uyZadWqVWbQoEGZrVu35v7v3nvvzfzwhz9stP2WLVsyAwcOjLb/3ve+l1m6dGmz93zjjTcyV199dSTEPn36ZNauXZtk1wAAAICiSM/TAwAAAFwFszcBAAAEA6QHAAAgGCA9AAAAwQDpAQAACAa20nP19kUy+71u3Tq67bbb6LLLLotWfRDzFd95551G26xYsSJamabp4+zZs9b2e8uWLQX3af/+/VZuFyWz7/fdd1/Bfb/mmmuMHvNt27bRxIkTqVu3btF7b9iwoexrOLRx2f3m0sZl95tLG5fdby7te/78+TRkyBBq27YtXX755dENCQ4cOMCijbOUnqu3L5Ldb9GgRYewceNG2rVrF40aNSpq4OK1+YjOoqamptFDNApb+51FNOL8ferdu7fx20XJ7vuiRYsa7bNYn1Cs9Xf33XcbPeZnzpyhAQMG0AsvvBBrey5tXHa/ubRx2f3m0sZl95tL+966dSs98MAD9Mknn0QLj4i1lseMGRN9HuttPMOQG264ITNz5sxGz4m5e2LieyH+7u/+Lvr/fH76059mhg0blvt98uTJmXHjxjXaZuzYsZm//uu/trbfhejXr19m3rx5ud9fffXVTPv27TM6kd3vDz74IFoN/auvvir6niaOt4pjvn79+kxFRUVucQVTxzwfcSzFfpSCSxuX3W8ubVx2vzm18TTHm0P7Fhw/fjza//w53bbaOLtI79y5c9EVobgqyEf8vn379oKvEfZvuv3YsWNp586d9O2335bcpth7mtjvply4cIFqa2ubrTJeV1cX3UHiiiuuoDvuuKPZVbKt/R44cGB0l4xbb72VPvjgg0b/p/t4p933LMuWLaPRo0dHx9fUMU8ChzauAhttPA2223hauLTvU6dORT9L3UHBVBtnJz0dty8qtU2p2xfp3u+mPPvss1H4L8L1LH369Ily8OJGvOKGuiIFceONN9LBgwet7bfoBF555ZUo7SDGbK6++uqoUxCprCy6j3fSfc9HpHTEjYt//OMfN3pe9zFPAoc2rgIbbTwJXNp4Gri070wmE90G7qabbqL+/ftbb+OJbi1kAg63L0pC0r8hGt8TTzxBb775ZjTwm2XYsGHRI4tonOLO9c8//zwtXrzYyn6LDkA8sojiBDF28Mwzz9DNN9+c6D1N7Xs+4sTv0KFDNMiej6ljLguXNp4U221cBm5tPAlc2veDDz5Iv/vd7+ijjz5i0cbZRXqu3r4oyX7nF2PMmDGDXn/99SgVUe5eU6IqStVVWZr9zkecRPn7ZOJ2UWn2XZwoy5cvjwbCxd1DTB7zJHBo42mw2cZVYaONJ4VL+/7Zz34WRZQiNSxSqRzaODvpuXr7oiT7nb36FWXGK1eupAkTJsRqzHv27InSLzb3uyliTCB/n0zcLirNvovqss8++yzqiE0f8yRwaONJsd3GVWGjjSfFdvvOZDJRhCdSw++//340pYhNG88whOvti1Tv98qVK6N9EHetqKmpyT1OnjyZ2+aJJ57I/Ou//mvm888/z+zevTszffr06DU7duywtt+/+c1voqqw//zP/8z8x3/8R/T/oinl3xnDxPFOsu9Z7rnnnszQoUMLvqeJY15bWxu9t3iIY/fcc89F//7iiy9Yt3HZ/ebSxmX3m0sbl91vLu37b//2b6MKUXGHnfzv/euvv85tY6uNs5Sey7cvktlv8W/RkJs+xHZZRCfeo0eP6P0uu+yyzJgxYzLbt2+3ut8LFizIXHXVVZnq6upMx44dMzfddFPm7bfftna7KNm2Ijrc1q1bZ1555ZWC72fimGdL4ot991zbuOx+c2njsvvNpY0naScc2jcV2GfxENMlsthq47i1EAAAgGBgN6YHAAAA6ALSAwAAEAyQHgAAgGCA9AAAAAQDpAcAACAYID0AAADBAOkBAAAIBkgPAABAMEB6AAAAggHSAwAAEAyQHgAAAAqF/wfdDtDe0aDhWwAAAABJRU5ErkJggg==\",\"text/plain\":[\"<Figure size 640x480 with 1 Axes>\"]},\"metadata\":{},\"output_type\":\"display_data\"}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(2)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"VP\\\", par_template * vp)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.ones(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"phi\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_scalar_2d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"acoustic_rhovp\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"f, ax = plt.subplots(1, 1)\\n\",\"ax.set_aspect(\\\"equal\\\")\\n\",\"t, da0 = st.visualize_wavefield_2d(output_file, \\\"phi\\\")\\n\",\"ax.tricontourf(t, da0[-1, :])\"]},{\"cell_type\":\"markdown\",\"id\":\"c3ec112b\",\"metadata\":{},\"source\":[\"#### (Linear) compliance parameters\"]},{\"cell_type\":\"code\",\"execution_count\":8,\"id\":\"60c808ff\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409928275_7c0eb3585e` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"-> Current Task: Time loop complete* Downloaded 546.5 KB of results to `acoustic_linear`.\\n\",\"* Total run time: 0.42 seconds.\\n\",\"* Pure simulation time: 0.17 seconds.\\n\"]},{\"data\":{\"image/png\":\"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\",\"text/plain\":[\"<Figure size 640x480 with 1 Axes>\"]},\"metadata\":{},\"output_type\":\"display_data\"}],\"source\":[\"# Re-parameterize as m0 and m1.\\n\",\"m0, m1 = (1 / rho) / vp**2, 1 / rho\\n\",\"\\n\",\"# Generate the mesh.\\n\",\"m = get_basic_mesh(2)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"M0\\\", par_template * m0)\\n\",\"m.attach_field(\\\"M1\\\", par_template * m1)\\n\",\"m.attach_field(\\\"fluid\\\", np.ones(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"phi\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_scalar_2d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"acoustic_linear\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"f, ax = plt.subplots(1, 1)\\n\",\"ax.set_aspect(\\\"equal\\\")\\n\",\"t, da1 = st.visualize_wavefield_2d(output_file, \\\"phi\\\")\\n\",\"ax.tricontourf(t, da1[-1, :])\\n\",\"\\n\",\"# All parameterizations should have produced the same output.\\n\",\"np.testing.assert_allclose(da0, da1, atol=1e-3)\"]},{\"cell_type\":\"markdown\",\"id\":\"8f3a3896\",\"metadata\":{},\"source\":[\"### Elastic\\n\",\"\\n\",\"Isotropic elastic models can be parameterized using either:\\n\",\"\\n\",\"* velocities {VP, VS, RHO}\\n\",\"\\n\",\"* Lame's first parameter, shear modulus, and density {LAMBDA, MU, RHO}\\n\",\"\\n\",\"* Bulk modulus, shear modulus, and density {KAPPA, MU, RHO}\\n\",\"\\n\",\"#### Velocities and density\"]},{\"cell_type\":\"code\",\"execution_count\":9,\"id\":\"23c6f578\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409561241_d6fa650ce0` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"-> Current Task: Time loop complete* Downloaded 698.2 KB of results to `elastic_vpvsrho`.\\n\",\"* Total run time: 0.39 seconds.\\n\",\"* Pure simulation time: 0.16 seconds.\\n\"]},{\"data\":{\"text/plain\":[\"<matplotlib.tri._tricontour.TriContourSet at 0x7894f4e832d0>\"]},\"execution_count\":9,\"metadata\":{},\"output_type\":\"execute_result\"},{\"data\":{\"image/png\":\"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1VdfpZ6bO3euFW4q7BQVeBcvXpSdO3em5pk8ebK0bdtW1q9fn3M5GhsbrSmpvr5eevToIb1/9pI0L69w8pEAI85lADq72dAgZ379/+TChQtSWVnp3y9KONDY2Jho3rx5YvPmzRnPz5s3LzFu3Licrxk7dqz183Tq9S1atEhcu3bNety9e/fEm2++mTGPetyjR4+8y/LrX/9ahTUT64A2QBugDcSoDXzzzTcJP7VwEpDnz5+XGzduSKdOnTKeV4/r6upyvkY9n2v+69evW+/XpUuXvPPke09l0aJFsnDhwtRjdXTQs2dPq5vV16MEj6kKt3v37nLmzBlp06aNRAXLzTqnregpqttm/Z9669q1a+fr73EUekllZWUZj1UPafZzxebPft7pe6oBL2rKpgIvSn/oJLXMLDfrm7aiH7bNYDVr5u9FBY7evX379tK8efMmFdi5c+eaVGpJnTt3zjl/ixYt5M477yw4T773BADA99Br2bKldenB7t27M55Xj0ePHp3zNaNGjWoy/65du2To0KFy2223FZwn33sCAOCK05OAGzZsSNx2222J1atXJ373u98lFixYkPiLv/iLxH/9139ZP3/hhRcSs2bNSs3/n//5n4nWrVsnnn32WWt+9Tr1+n/+539OzfNv//Zv1gCZf/zHf0x89dVX1r9qoMuXX35pe7kaGhqswS3q3yhhuVnftBU9sW3Gc307Dj1lxYoViZ49eyZatmyZGDx4cGLv3r2pnz355JOJv/qrv8qYf8+ePYlBgwZZ8991112JlStXNnnPjz76KHHvvfdagdinT5/Epk2b3CwaAAB5Ob5ODwCAqOLemwAAYxB6AABjEHoAAGMQegAAY2gbelH9+iIny71582Z56KGHpEOHDtZdH9T1ip988knGPGvWrLHuTJM9NTQ0hLbce/bsyblMx48fD+Xropws++zZs3Mue//+/QNd5/v27ZNp06ZJ165drffeunVr0dfo0MadLrcubdzpcuvSxp0uty7tu6qqSoYNGya33367dOzY0fpCgq+//lqLNq5l6EX164ucLrdq0GqHsGPHDjly5IiMHz/eauDqtenUzqK2tjZjUo0irOVOUo04fZl69+4d+NdFOV325cuXZyyzuj+hutff448/Hug6v3LligwcOFDefvttW/Pr0sadLrcubdzpcuvSxp0uty7te+/evfLMM8/Il19+ad14RN1reeLEidbnCb2NJzQ0fPjwxNy5czOeU9fuqQvfc/mHf/gH6+fpfvaznyVGjhyZejxjxozE5MmTM+aZNGlS4m//9m9DW+5c+vXrl1iyZEnq8QcffJCorKxM+Mnpcn/++efW3dC/++67vO8ZxPr2Yp1v2bIlUVZWlrq5QlDrPJ1al2o5CtGljTtdbl3auNPl1qmNl7K+dWjfyrlz56zlT7+mO6w2rl2ld+3aNeuIUB0VpFOPDxw4kPM1Kv2z5580aZIcPnxYvv/++4Lz5HvPIJY7282bN+XSpUtN7jJ++fJl6xskunXrJo888kiTo+SwlnvQoEHWt2Q8+OCD8vnnn2f8zO/1XeqyJ61evVomTJhgrd+g1rkbOrRxL4TRxksRdhsvlS7tu76+3vq30DcoBNXGtQs9P76+qNA8hb6+yO/lzvbGG29Y5b8q15P69Olj9cGrL+JVX6iruiDGjBkjJ06cCG251U5g1apVVreDOmdz7733WjsF1ZWV5Pf6drvs6VSXjvri4p/+9KcZz/u9zt3QoY17IYw27oYubbwUurTvRCJhfQ3cAw88IAMGDAi9jbv6aqEg6PD1RW64/R2q8b388suybds268Rv0siRI60pSTVO9c31b731llRXV4ey3GoHoKYkNThBnTt4/fXXZdy4ca7eM6hlT6c2/DvuuMM6yZ4uqHXulC5t3K2w27gTurVxN3Rp3z//+c/lt7/9rezfv1+LNq5dpRfVry9ys9zpgzHmzJkjv/nNb6yuiGLfNaVGRXl1VFbKcqdTG1H6MgXxdVGlLLvaUN5//33rRLj69pAg17kbOrTxUoTZxr0SRht3S5f2/Ytf/MKqKFXXsOpK1aGNaxd6Uf36IjfLnTz6VcOM161bJw8//LCtxnz06FGr+yXM5c6mzgmkL1MQXxdVyrKr0WUnT560dsRBr3M3dGjjboXdxr0SRht3K+z2nUgkrApPdQ1/9tln1iVF2rTxhIZ0/foir5d73bp11jKob62ora1NTRcuXEjN8/LLLyf+9V//NfHNN98kampqEk899ZT1mkOHDoW23P/0T/9kjQr7j//4j8S///u/Wz9XTSn9mzGCWN9ulj3pJz/5SWLEiBE53zOIdX7p0iXrvdWk1t2bb75p/f/3v/+91m3c6XLr0sadLrcubdzpcuvSvv/+7//eGiGqvmEn/e9+9erV1DxhtXEtQy/KX1/kZLnV/1VDzp7UfElqJ96jRw/r/Tp06JCYOHFi4sCBA6Eu99KlSxP33HNPoqKiItG2bdvEAw88kPj4449D+7oop21F7XBbtWqVWLVqVc73C2KdJ4fE5/vb69rGnS63Lm3c6XLr0sbdtBMd2rfkWGY1qcslksJq43y1EADAGNqd0wMAwC+EHgDAGIQeAMAYhB4AwBiEHgDAGIQeAMAYhB4AwBiEHgDAGIQeAMAYhB4AwBiEHgBATPH/AcCImd3OKVj/AAAAAElFTkSuQmCC\",\"text/plain\":[\"<Figure size 640x480 with 1 Axes>\"]},\"metadata\":{},\"output_type\":\"display_data\"}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(2)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"VP\\\", par_template * vp)\\n\",\"m.attach_field(\\\"VS\\\", par_template * vs)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.zeros(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"displacement\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_vector_2d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"elastic_vpvsrho\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"f, ax = plt.subplots(1, 1)\\n\",\"ax.set_aspect(\\\"equal\\\")\\n\",\"t, de0 = st.visualize_wavefield_2d(output_file, \\\"displacement\\\")\\n\",\"ax.tricontourf(t, de0[-1, :])\"]},{\"cell_type\":\"markdown\",\"id\":\"8171cf79\",\"metadata\":{},\"source\":[\"#### Lame parameters and density\"]},{\"cell_type\":\"code\",\"execution_count\":10,\"id\":\"e5247f9e\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409132581_d3c7c142d1` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"-> Current Task: Time loop complete* Downloaded 698.5 KB of results to `elastic_lambdamurho`.\\n\",\"* Total run time: 0.43 seconds.\\n\",\"* Pure simulation time: 0.20 seconds.\\n\"]},{\"data\":{\"text/plain\":[\"<matplotlib.tri._tricontour.TriContourSet at 0x7894ea7cc110>\"]},\"execution_count\":10,\"metadata\":{},\"output_type\":\"execute_result\"},{\"data\":{\"image/png\":\"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1VdfpZ6bO3euFW4q7BQVeBcvXpSdO3em5pk8ebK0bdtW1q9fn3M5GhsbrSmpvr5eevToIb1/9pI0L69w8pEAI85lADq72dAgZ379/+TChQtSWVnp3y9KONDY2Jho3rx5YvPmzRnPz5s3LzFu3Licrxk7dqz183Tq9S1atEhcu3bNety9e/fEm2++mTGPetyjR4+8y/LrX/9ahTUT64A2QBugDcSoDXzzzTcJP7VwEpDnz5+XGzduSKdOnTKeV4/r6upyvkY9n2v+69evW+/XpUuXvPPke09l0aJFsnDhwtRjdXTQs2dPq5vV16MEj6kKt3v37nLmzBlp06aNRAXLzTqnregpqttm/Z9669q1a+fr73EUekllZWUZj1UPafZzxebPft7pe6oBL2rKpgIvSn/oJLXMLDfrm7aiH7bNYDVr5u9FBY7evX379tK8efMmFdi5c+eaVGpJnTt3zjl/ixYt5M477yw4T773BADA99Br2bKldenB7t27M55Xj0ePHp3zNaNGjWoy/65du2To0KFy2223FZwn33sCAOCK05OAGzZsSNx2222J1atXJ373u98lFixYkPiLv/iLxH/9139ZP3/hhRcSs2bNSs3/n//5n4nWrVsnnn32WWt+9Tr1+n/+539OzfNv//Zv1gCZf/zHf0x89dVX1r9qoMuXX35pe7kaGhqswS3q3yhhuVnftBU9sW3Gc307Dj1lxYoViZ49eyZatmyZGDx4cGLv3r2pnz355JOJv/qrv8qYf8+ePYlBgwZZ8991112JlStXNnnPjz76KHHvvfdagdinT5/Epk2b3CwaAAB5Ob5ODwCAqOLemwAAYxB6AABjEHoAAGMQegAAY2gbelH9+iIny71582Z56KGHpEOHDtZdH9T1ip988knGPGvWrLHuTJM9NTQ0hLbce/bsyblMx48fD+Xropws++zZs3Mue//+/QNd5/v27ZNp06ZJ165drffeunVr0dfo0MadLrcubdzpcuvSxp0uty7tu6qqSoYNGya33367dOzY0fpCgq+//lqLNq5l6EX164ucLrdq0GqHsGPHDjly5IiMHz/eauDqtenUzqK2tjZjUo0irOVOUo04fZl69+4d+NdFOV325cuXZyyzuj+hutff448/Hug6v3LligwcOFDefvttW/Pr0sadLrcubdzpcuvSxp0uty7te+/evfLMM8/Il19+ad14RN1reeLEidbnCb2NJzQ0fPjwxNy5czOeU9fuqQvfc/mHf/gH6+fpfvaznyVGjhyZejxjxozE5MmTM+aZNGlS4m//9m9DW+5c+vXrl1iyZEnq8QcffJCorKxM+Mnpcn/++efW3dC/++67vO8ZxPr2Yp1v2bIlUVZWlrq5QlDrPJ1al2o5CtGljTtdbl3auNPl1qmNl7K+dWjfyrlz56zlT7+mO6w2rl2ld+3aNeuIUB0VpFOPDxw4kPM1Kv2z5580aZIcPnxYvv/++4Lz5HvPIJY7282bN+XSpUtN7jJ++fJl6xskunXrJo888kiTo+SwlnvQoEHWt2Q8+OCD8vnnn2f8zO/1XeqyJ61evVomTJhgrd+g1rkbOrRxL4TRxksRdhsvlS7tu76+3vq30DcoBNXGtQs9P76+qNA8hb6+yO/lzvbGG29Y5b8q15P69Olj9cGrL+JVX6iruiDGjBkjJ06cCG251U5g1apVVreDOmdz7733WjsF1ZWV5Pf6drvs6VSXjvri4p/+9KcZz/u9zt3QoY17IYw27oYubbwUurTvRCJhfQ3cAw88IAMGDAi9jbv6aqEg6PD1RW64/R2q8b388suybds268Rv0siRI60pSTVO9c31b731llRXV4ey3GoHoKYkNThBnTt4/fXXZdy4ca7eM6hlT6c2/DvuuMM6yZ4uqHXulC5t3K2w27gTurVxN3Rp3z//+c/lt7/9rezfv1+LNq5dpRfVry9ys9zpgzHmzJkjv/nNb6yuiGLfNaVGRXl1VFbKcqdTG1H6MgXxdVGlLLvaUN5//33rRLj69pAg17kbOrTxUoTZxr0SRht3S5f2/Ytf/MKqKFXXsOpK1aGNaxd6Uf36IjfLnTz6VcOM161bJw8//LCtxnz06FGr+yXM5c6mzgmkL1MQXxdVyrKr0WUnT560dsRBr3M3dGjjboXdxr0SRht3K+z2nUgkrApPdQ1/9tln1iVF2rTxhIZ0/foir5d73bp11jKob62ora1NTRcuXEjN8/LLLyf+9V//NfHNN98kampqEk899ZT1mkOHDoW23P/0T/9kjQr7j//4j8S///u/Wz9XTSn9mzGCWN9ulj3pJz/5SWLEiBE53zOIdX7p0iXrvdWk1t2bb75p/f/3v/+91m3c6XLr0sadLrcubdzpcuvSvv/+7//eGiGqvmEn/e9+9erV1DxhtXEtQy/KX1/kZLnV/1VDzp7UfElqJ96jRw/r/Tp06JCYOHFi4sCBA6Eu99KlSxP33HNPoqKiItG2bdvEAw88kPj4449D+7oop21F7XBbtWqVWLVqVc73C2KdJ4fE5/vb69rGnS63Lm3c6XLr0sbdtBMd2rfkWGY1qcslksJq43y1EADAGNqd0wMAwC+EHgDAGIQeAMAYhB4AwBiEHgDAGIQeAMAYhB4AwBiEHgDAGIQeAMAYhB4AwBiEHgBATPH/AcCImd3OKVj/AAAAAElFTkSuQmCC\",\"text/plain\":[\"<Figure size 640x480 with 1 Axes>\"]},\"metadata\":{},\"output_type\":\"display_data\"}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(2)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"mu = rho * vs**2\\n\",\"lam = rho * vp**2 - 2 * mu\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"LAMBDA\\\", par_template * lam)\\n\",\"m.attach_field(\\\"MU\\\", par_template * mu)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.zeros(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"displacement\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_vector_2d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"elastic_lambdamurho\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"f, ax = plt.subplots(1, 1)\\n\",\"ax.set_aspect(\\\"equal\\\")\\n\",\"t, de1 = st.visualize_wavefield_2d(output_file, \\\"displacement\\\")\\n\",\"ax.tricontourf(t, de1[-1, :])\"]},{\"cell_type\":\"markdown\",\"id\":\"d3717c1e\",\"metadata\":{},\"source\":[\"#### Elastic moduli and density\"]},{\"cell_type\":\"code\",\"execution_count\":11,\"id\":\"103b73c3\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409800254_4eb264135b` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"-> Current Task: Time loop complete* Downloaded 697.8 KB of results to `elastic_kappamurho`.\\n\",\"* Total run time: 0.39 seconds.\\n\",\"* Pure simulation time: 0.16 seconds.\\n\"]},{\"data\":{\"image/png\":\"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1VdfpZ6bO3euFW4q7BQVeBcvXpSdO3em5pk8ebK0bdtW1q9fn3M5GhsbrSmpvr5eevToIb1/9pI0L69w8pEAI85lADq72dAgZ379/+TChQtSWVnp3y9KONDY2Jho3rx5YvPmzRnPz5s3LzFu3Licrxk7dqz183Tq9S1atEhcu3bNety9e/fEm2++mTGPetyjR4+8y/LrX/9ahTUT64A2QBugDcSoDXzzzTcJP7VwEpDnz5+XGzduSKdOnTKeV4/r6upyvkY9n2v+69evW+/XpUuXvPPke09l0aJFsnDhwtRjdXTQs2dPq5vV16MEj6kKt3v37nLmzBlp06aNRAXLzTqnregpqttm/Z9669q1a+fr73EUekllZWUZj1UPafZzxebPft7pe6oBL2rKpgIvSn/oJLXMLDfrm7aiH7bNYDVr5u9FBY7evX379tK8efMmFdi5c+eaVGpJnTt3zjl/ixYt5M477yw4T773BADA99Br2bKldenB7t27M55Xj0ePHp3zNaNGjWoy/65du2To0KFy2223FZwn33sCAOCK05OAGzZsSNx2222J1atXJ373u98lFixYkPiLv/iLxH/9139ZP3/hhRcSs2bNSs3/n//5n4nWrVsnnn32WWt+9Tr1+n/+539OzfNv//Zv1gCZf/zHf0x89dVX1r9qoMuXX35pe7kaGhqswS3q3yhhuVnftBU9sW3Gc307Dj1lxYoViZ49eyZatmyZGDx4cGLv3r2pnz355JOJv/qrv8qYf8+ePYlBgwZZ8991112JlStXNnnPjz76KHHvvfdagdinT5/Epk2b3CwaAAB5Ob5ODwCAqOLemwAAYxB6AABjEHoAAGMQegAAY2gbelH9+iIny71582Z56KGHpEOHDtZdH9T1ip988knGPGvWrLHuTJM9NTQ0hLbce/bsyblMx48fD+Xropws++zZs3Mue//+/QNd5/v27ZNp06ZJ165drffeunVr0dfo0MadLrcubdzpcuvSxp0uty7tu6qqSoYNGya33367dOzY0fpCgq+//lqLNq5l6EX164ucLrdq0GqHsGPHDjly5IiMHz/eauDqtenUzqK2tjZjUo0irOVOUo04fZl69+4d+NdFOV325cuXZyyzuj+hutff448/Hug6v3LligwcOFDefvttW/Pr0sadLrcubdzpcuvSxp0uty7te+/evfLMM8/Il19+ad14RN1reeLEidbnCb2NJzQ0fPjwxNy5czOeU9fuqQvfc/mHf/gH6+fpfvaznyVGjhyZejxjxozE5MmTM+aZNGlS4m//9m9DW+5c+vXrl1iyZEnq8QcffJCorKxM+Mnpcn/++efW3dC/++67vO8ZxPr2Yp1v2bIlUVZWlrq5QlDrPJ1al2o5CtGljTtdbl3auNPl1qmNl7K+dWjfyrlz56zlT7+mO6w2rl2ld+3aNeuIUB0VpFOPDxw4kPM1Kv2z5580aZIcPnxYvv/++4Lz5HvPIJY7282bN+XSpUtN7jJ++fJl6xskunXrJo888kiTo+SwlnvQoEHWt2Q8+OCD8vnnn2f8zO/1XeqyJ61evVomTJhgrd+g1rkbOrRxL4TRxksRdhsvlS7tu76+3vq30DcoBNXGtQs9P76+qNA8hb6+yO/lzvbGG29Y5b8q15P69Olj9cGrL+JVX6iruiDGjBkjJ06cCG251U5g1apVVreDOmdz7733WjsF1ZWV5Pf6drvs6VSXjvri4p/+9KcZz/u9zt3QoY17IYw27oYubbwUurTvRCJhfQ3cAw88IAMGDAi9jbv6aqEg6PD1RW64/R2q8b388suybds268Rv0siRI60pSTVO9c31b731llRXV4ey3GoHoKYkNThBnTt4/fXXZdy4ca7eM6hlT6c2/DvuuMM6yZ4uqHXulC5t3K2w27gTurVxN3Rp3z//+c/lt7/9rezfv1+LNq5dpRfVry9ys9zpgzHmzJkjv/nNb6yuiGLfNaVGRXl1VFbKcqdTG1H6MgXxdVGlLLvaUN5//33rRLj69pAg17kbOrTxUoTZxr0SRht3S5f2/Ytf/MKqKFXXsOpK1aGNaxd6Uf36IjfLnTz6VcOM161bJw8//LCtxnz06FGr+yXM5c6mzgmkL1MQXxdVyrKr0WUnT560dsRBr3M3dGjjboXdxr0SRht3K+z2nUgkrApPdQ1/9tln1iVF2rTxhIZ0/foir5d73bp11jKob62ora1NTRcuXEjN8/LLLyf+9V//NfHNN98kampqEk899ZT1mkOHDoW23P/0T/9kjQr7j//4j8S///u/Wz9XTSn9mzGCWN9ulj3pJz/5SWLEiBE53zOIdX7p0iXrvdWk1t2bb75p/f/3v/+91m3c6XLr0sadLrcubdzpcuvSvv/+7//eGiGqvmEn/e9+9erV1DxhtXEtQy/KX1/kZLnV/1VDzp7UfElqJ96jRw/r/Tp06JCYOHFi4sCBA6Eu99KlSxP33HNPoqKiItG2bdvEAw88kPj4449D+7oop21F7XBbtWqVWLVqVc73C2KdJ4fE5/vb69rGnS63Lm3c6XLr0sbdtBMd2rfkWGY1qcslksJq43y1EADAGNqd0wMAwC+EHgDAGIQeAMAYhB4AwBiEHgDAGIQeAMAYhB4AwBiEHgDAGIQeAMAYhB4AwBiEHgBATPH/AcCImd3OKVj/AAAAAElFTkSuQmCC\",\"text/plain\":[\"<Figure size 640x480 with 1 Axes>\"]},\"metadata\":{},\"output_type\":\"display_data\"}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(2)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"mu = rho * vs**2\\n\",\"kap = rho * (vp**2 - 4 / 3 * vs**2)\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"KAPPA\\\", par_template * kap)\\n\",\"m.attach_field(\\\"MU\\\", par_template * mu)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.zeros(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"displacement\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_vector_2d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"elastic_kappamurho\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"f, ax = plt.subplots(1, 1)\\n\",\"ax.set_aspect(\\\"equal\\\")\\n\",\"t, de2 = st.visualize_wavefield_2d(output_file, \\\"displacement\\\")\\n\",\"ax.tricontourf(t, de2[-1, :])\\n\",\"\\n\",\"# All parameterizations should have produced the same output.\\n\",\"np.testing.assert_allclose(de0, de1, atol=1e-7)\\n\",\"np.testing.assert_allclose(de1, de2, atol=1e-7)\"]},{\"cell_type\":\"markdown\",\"id\":\"1d64db70\",\"metadata\":{},\"source\":[\"## 3D domains\\n\",\"We'll generate a new partially-filled waveform simulation object for 3-D.\"]},{\"cell_type\":\"code\",\"execution_count\":12,\"id\":\"57c3dcc6\",\"metadata\":{},\"outputs\":[],\"source\":[\"w = sn.simple_config.simulation.Waveform()\\n\",\"\\n\",\"w.domain.dimension = 3\\n\",\"w.output.volume_data.format = \\\"hdf5\\\"\\n\",\"w.output.volume_data.filename = \\\"output.h5\\\"\\n\",\"w.output.volume_data.sampling_interval_in_time_steps = 100\"]},{\"cell_type\":\"markdown\",\"id\":\"2bd57cf3\",\"metadata\":{},\"source\":[\"### Acoustic\\n\",\"\\n\",\"Acoustic meshes can be parameterized either using p-velocity and density, or\\n\",\"a linear parameterization using M0 and M1. Acoustic elements must have the\\n\",\"`fluid` flag set to 1.\\n\",\"\\n\",\"#### Velocity (sounds speed) and density\"]},{\"cell_type\":\"code\",\"execution_count\":13,\"id\":\"ac15c797\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409870914_f36de6c5b7` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"                                          \\r\"]},{\"data\":{\"image/png\":\"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\\n/wHXM0F1js20XAAAAABJRU5ErkJggg==\\n\"},\"metadata\":{\"needs_background\":\"light\"},\"output_type\":\"display_data\"},{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"* Downloaded 66.0 MB of results to `acoustic_rhovp`.\\n\",\"* Total run time: 3.67 seconds.\\n\",\"* Pure simulation time: 3.15 seconds.\\n\"]}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(3)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"VP\\\", par_template * vp)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.ones(m.nelem))\\n\",\"\\n\",\"# Attach the mesh.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"phi\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_scalar_3d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"acoustic_rhovp\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder, overwrite=True)\\n\",\"\\n\",\"# Read the results.\\n\",\"with h5py.File(output_file, \\\"r\\\") as fh:\\n\",\"    da0 = fh[\\\"/volume/phi\\\"][:]\"]},{\"cell_type\":\"markdown\",\"id\":\"cf9fe8ac\",\"metadata\":{},\"source\":[\"#### (Linear) compliance parameters\"]},{\"cell_type\":\"code\",\"execution_count\":14,\"id\":\"7fc7c4b8\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409002012_81493921b3` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"                                          \\r\"]},{\"data\":{\"image/png\":\"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\\nhBBCCC38Pw3ILU+jVSU4AAAAAElFTkSuQmCC\\n\"},\"metadata\":{\"needs_background\":\"light\"},\"output_type\":\"display_data\"},{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"* Downloaded 66.0 MB of results to `acoustic_linear`.\\n\",\"* Total run time: 3.65 seconds.\\n\",\"* Pure simulation time: 3.09 seconds.\\n\"]}],\"source\":[\"# Re-parameterize as m0 and m1.\\n\",\"m0, m1 = (1 / rho) / vp**2, 1 / rho\\n\",\"\\n\",\"# Generate the mesh.\\n\",\"m = get_basic_mesh(3)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"M0\\\", par_template * m0)\\n\",\"m.attach_field(\\\"M1\\\", par_template * m1)\\n\",\"m.attach_field(\\\"fluid\\\", np.ones(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"phi\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_scalar_3d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"acoustic_linear\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder, overwrite=True)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"with h5py.File(output_file, \\\"r\\\") as fh:\\n\",\"    da1 = fh[\\\"/volume/phi\\\"][:]\\n\",\"\\n\",\"# All parameterizations should have produced the same output.\\n\",\"da0_l2 = np.linalg.norm(da0)\\n\",\"da1_l2 = np.linalg.norm(da1)\\n\",\"np.testing.assert_allclose(da0_l2, da1_l2, atol=da0_l2 * 1e-6)\"]},{\"cell_type\":\"markdown\",\"id\":\"2b34a9ab\",\"metadata\":{},\"source\":[\"### Elastic\\n\",\"\\n\",\"Isotropic elastic models can be parameterized using either:\\n\",\"* velocities {VP, VS, RHO}\\n\",\"* Lame's first parameter, shear modulus, and density {LAMBDA, MU, RHO}\\n\",\"* Bulk modulus, shear modulus, and density {KAPPA, MU, RHO}\\n\",\"\\n\",\"#### Velocities and density\"]},{\"cell_type\":\"code\",\"execution_count\":15,\"id\":\"332dc701\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409113302_6bdcba9475` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"                                                     \\r\"]},{\"data\":{\"image/png\":\"iVBORw0KGgoAAAANSUhEUgAAA9IAAAAsCAYAAACJ44AqAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\\nCHwIZIgAAB+qSURBVHic7d15XM1p//jx1ymlEOUmtChKC5HIkkxoEWFkNNaM5WvJmrGM2RhuyzDM\\nMIMx7lF3M27bGGKQLS2yZ5lIlmGkEBIZomj5/dGvz92pnM4xi3tm3s/Ho8fD8fmc67o+2/lc7+tz\\nXddHVVRUVIQQQgghhBBCCCG0oveqCyCEEEIIIYQQQvyZSCAthBBCCCGEEELoQAJpIYQQQgghhBBC\\nBxJICyGEEEIIIYQQOpBAWgghhBBCCCGE0IEE0kIIIYQQQgghhA4kkBZCCCGEEEIIIXQggbQQQggh\\nhBBCCKEDCaSFEEIIIYQQQggdSCAthBBCCCGEEELoQAJpIYQQQgghhBBCB1VedQGEEEL8sRJuHmbd\\nhfXcfHzrVRdFCCHE78yyhgWDnQfxmqXnqy6KEH8p8kRaCCH+ZiSIFkKIv4+bj2+x7sL6V10MIf5y\\nJJAWQoi/GQmihRDi70V+94X47UkgLYQQQgghhBBC6EACaSGEEEIIIYQQQgcSSAshhBBCCCGEEDrQ\\nKpAODw/H1dWVevXqUbduXdq3b09UVJRWGQwbNowPP/xQ4zqpqamoVCry8/O1SvNl3Lp1CycnJ+rV\\nq8fNmzd/t3xe1p49e7C3t/9D84yIiKBjx44VLvs9j8k777zDJ598AsDdu3cJCQnBysqKqlWrYmVl\\nxZgxY7h3795vnu/LunPnDlu3blU+29raEh0d/bvm2aNHD8zMzIiMjPxd83kZubm5qFQqbty48aqL\\nolHpfajtMdO03rvvvsvIkSNfqiyHDh2iUaNGBAUFqf1/YWEh06dPp27dupiamtK3b18ePHigLF+7\\ndi2NGzemZs2atG3blqSkJADy8vIYOHAgw4YNY8iQIRQUFCjfuXLlCm5ubuTl5b1UWYUQQogSL7p/\\nPX36lAkTJmBlZYWZmRlvvfUWT548UZYvW7aMRo0aYWZmhru7O/Hx8WrfL10XTE9Px9vbmzp16pTL\\nf+XKldjb22NqaoqXlxdXrlxRlu3bt49WrVphZmaGnZ0dq1at0mqbJkyYQN26dXFxcaGgoIB79+7R\\np08fTE1NMTc357333qOoqAhA47KytF33008/RaVScfv2ba3KqyndyuoRv0c6miQmJqKnp4eRkZHy\\nZ2trqyx/Ub2mIprWPXXqFG3atKFmzZrY2dmxceNGZVnputymTZu4f/++Wrpt27blxIkTFeaZnp6O\\ni4sLtWrVYtmyZZVub6WB9IEDB5gxYwYRERHcuXOHO3fuMHHiRAIDA0lNTa00A21YW1uTkZFBlSq/\\n39u4jhw5QkFBAbdv38bS0lLr75WuoP5Wfo80X2U+uoqKiqJ79+48fPgQT09PUlNTiYqK4tGjR8TG\\nxnLv3j06duxIbm7uqy4qANHR0WqBdGJiIl5eXr9bfvfu3SMqKopz587Rp08frb/3Zz5Xf2tl9+Hv\\nfcw0Wb9+PVOmTKkw/1WrVrFv3z7OnTtHRkYGhoaGTJw4EYBz584xadIk1q9fT3Z2NkOGDCEwMJDn\\nz5/zww8/YGFhQUREBMbGxuzbtw+AoqIiRo8ezfLly6lateofup1CCCH+WjTdv+bMmUNSUhLJycmk\\np6eTkZHBBx98AMDWrVv57LPPiI6O5v79+4wYMUK5f5UoqQteunQJX19fOnToUC6PvXv3Mnv2bHbu\\n3ElWVhZeXl68+eabQPEDsr59+zJ//nwePHjApk2bmDp1KidPntRq2/7v//6P5ORk9PX1GTt2LLVq\\n1SIjI4OkpCS2bdtGWFgYgMZlZWmz7qVLlwgLC0NPT3MIdvv2bXbs2FFpuprqEbqUT5d0NMnOzsbJ\\nyYnc3FzlryRe1FSvKUvTunl5efTu3ZuRI0eSnZ3N2rVrGT16NBcvXgTU6+kffvihWiCdmZnJ9evX\\ncXd3r7D81tbWJCcn4+fnp9X2VhpInz9/Hnt7e9zc3Iq/oKfH4MGDSU5OVgLS69ev06tXLxwcHHB0\\ndGTs2LHk5OSopbN3717Mzc3VKuYrVqygY8eOpKen06BBA/Lz81m7di3+/v5MmzaNTp06YW9vzxdf\\nfKF8Jzw8HDs7O5o2bcqMGTPw8fHhm2++0bgNBw4cIDQ0lBs3buDs7MzNmzeJj4+nTZs2ODg44Ozs\\nzOeff66sb2Njw+LFi7G0tGTlypVUr15dOchRUVGoVCqlVSQzM5OqVavy6NEj9uzZg6urK7a2ttjb\\n2/Pvf/+7wjQ3b95MZmYmAQEB2NjY0K5dO06dOlXZoQDg6tWrGBkZsXz5cry9vXF2dmbixInKfi2b\\nT0mLoaOjIw4ODnTv3p1r166ppTlx4kSsrKxo2LDhC38cjh07hoeHB46Ojri6urJhwwZlmZ2dHZ99\\n9hn+/v7Y2toSHBzM7t278ff3x97enqlTpyrrpqen8/DhQ5o3b84XX3xBYWEhP/zwAy1atMDQ0JAm\\nTZqwYcMGQkNDlSdqmo6VtnlXtt/q169PXFycku7kyZOZMGECcXFxhIaGsmPHDl577TUA2rRpw8GD\\nB0lPT8fY2JiIiAh8fX1p2rQpwcHBSuteYmIiLVu2xN7enj59+jBt2jSGDx+u8fg+evQIDw8PAHx8\\nfIiMjNR4fQ0dOpRp06bRvHlzQkNDsbW15ciRI0paBgYGavurWbNm7N27l6tXr+Lt7Y2trS3W1tZM\\nmjRJKXfZNAsKCggNDcXa2hpXV1ciIiI0bkOJoUOHsmDBAuVzu3bt1BoGxo8fz3vvvQfA4sWLsbOz\\nw8bGhtatW3P8+HEAPDw81K7/goIC6tevT3R0NHl5eUydOhVHR0ecnJzo168f9+7dq3AflhwzKL75\\nvvHGGzg6OtK0aVPef//9CntenDx5EldXV+zs7OjZsydZWVnKsm3btlXYcl6RZs2acejQIZo0aVJu\\n2fr165k+fTr169fH2NiYf/7zn3z//ffk5eWxceNG+vbtS/v27dHT02PixIk8f/6cI0eOcPHiRaUH\\ni729vXLz+Oqrr3BxcXlhTxMhhBBCW5ruX3v27GHSpEmYmppSo0YNZs6cyfr1xa/YsrW1Zf369djZ\\n2aFSqRg0aBDZ2dncuXMHUK8LVqtWjYMHD9KtW7dyeezevZt+/frh5OSEvr4+s2bN4sKFC1y4cIGi\\noiIiIiLo3r07AO7u7jg4OCj3Q209efKE7du3M2/ePIyNjWnQoAFTpkxh3bp1GpeBel2gsnWhuA4z\\nbNgwlixZgkqlqrA8R44cYdCgQXh6enLv3r1K09VUj8jOzkalUpGcnPyr0tFFdnY2pqamFS7TVK/R\\nZd2DBw9iZGTEmDFj0NPTo0OHDvTq1YtNmzYB/62nBwUFceXKFfz9/ZVlu3fvxs/PDz09PcLCwnBy\\ncqJJkyY4OTmxZs0anbYVtAikAwICSElJYeDAgfzwww9KVO/g4ICBgQEAwcHBuLi4cPnyZc6ePcvF\\nixf5+OOP1dLx9fVFX19fLVjZuHEjQ4YMUVvPwMCA2NhYAgMDiY+PZ926dUyfPp3c3Fxu3LhBSEgI\\nGzduJCUlBTs7Ow4fPoy+vr7GbfDx8eHTTz+lWbNmXLx4EWNjY3r37s28efO4fPky+/fvZ/78+Uo3\\nACMjI2JiYrh69SqTJk3CwsJCaeGKiYnB09NT2Y64uDg6dOiAoaEh/fv3Z8GCBaSmphIeHs7o0aPJ\\nzMwsl+aAAQP46KOPMDQ05Nq1a8TFxbF3797KDgUA+vr65OXl8eTJE2JiYkhMTGTnzp1s2bKlwnwW\\nLFhASkoKSUlJXL58GTc3N7V9fuLECby8vLhx4wbffvstY8eOLdf1PTs7mx49ejB9+nQuXbpEZGQk\\n48aN4/z588oxO336NHv27OH06dNs3ryZrVu3snfvXg4fPsznn3/OrVvFr13YtWuX8qMXHR1Nv379\\nMDQ0VMvP0NBQaTW7f/++xmOlbd6V7bcX6dy5MyEhIfTq1YuEhAS1ZQYGBuTm5nLnzh2io6M5fvw4\\n+/btIzY2lqKiIoYOHUpwcDBXrlxhzpw5hIWFVXqumpiYKPmcOnWKPn36aLy+jIyM2Lx5M7t27WLF\\nihX4+fkp3afi4+Np166dcq7evXuX1NRUOnXqxLhx42jdujWpqamcOXOGTZs2sW3btgrT3LJlC9u3\\nb+fs2bMkJSVx9epVjdtQomvXrkpZHj58SG5uLufOnVMC9ri4OLp168bRo0eZN28ehw4d4vr16/Tu\\n3ZvRo0cDxb8tmzdvVtKMjY2lSpUqeHt7s2jRIo4ePcqpU6e4ePEi9evXZ/z48RXuw9KGDBmCtbU1\\nFy9eJDExkdjYWL7++uty5R86dCjDhg3j6tWrrFixQtk/UNwtqHRDmSaurq7lzvESFy5cwNnZWfls\\nb29PQUEBP//8c7llAI6OjqSkpFClShUl+H/+/DkGBgakp6ezatUqhg0bRs+ePfH39+fQoUNalVEI\\nIYQoS9P9q6ioiMLCQuVz9erVuXv3Lg8fPqRVq1ZKg+7jx49ZsmQJbdu2VR7Ala4LWltbU69ePa3y\\nqFKlCkZGRly+fBlLS0v69u0LFN8Ht23bRkZGBl26dNFpG69cuaIMLSzh5ORESkqKxmWgXheobF0o\\nfmjg7OxMQECAWhmePn1KWFgYrVq1YsaMGQQGBnLp0iWGDx9eabqa6hHVq1dn8+bNNGzY8Felo4sH\\nDx5w7949OnXqhIWFBZ6enkqdTFO9pixN61a0rOy+BpTu3nv37qV///5A8QPRgIAAnjx5wpgxY4iK\\niuKnn35i//79bN++XefesJUG0vb29qSkpGBra8vcuXOpX78+rVu3VlowMjMzOXTokPL4v2rVqgwf\\nPpydO3eqpaOvr0///v2VSnF6ejqnT59WNqw0W1tb5QJ0c3Pj2bNnZGRkcPDgQRwdHWnTpg0Ao0aN\\neuEFrsmBAwcwNzfH398fACsrK3r27KmUWaVSERQUhJGREVAcEJQ8zYqJiWH69OlKcBIbG0u3bt2o\\nWrUqaWlpysXh5eWFgYGB8vS3bJrR0dEMGjQIPT09jI2NGTZsmE7bEBwcDECNGjXw9/dXylM2n61b\\ntzJy5Ejlc0hICIcPHyY7OxuABg0aKN1kOnfuTMOGDTl8+HC5/VW7dm3eeOMNABo3bkyvXr3UApzA\\nwEBUKhW1a9fG3Nyc3r17A1CvXj3MzMyU4LykKw8UX2wWFhYat7OyY6VL3pr2269R0jBhYmKCvb09\\n169fJyMjgwsXLihPoFu0aPFSTwkru75UKhVeXl40bNgQKH+uhoSEcObMGYqKioiLi8PLywsjIyO2\\nbdvGvHnzAKhTpw6tW7fmp59+qjDN6OhoAgICMDMzA4q7BmnDz8+PY8eOUVBQQHx8PB4eHjg4OHD2\\n7Fnu3r3LjRs36NChA+3btyctLY0GDRoA0K1bN6Us/fv358SJE0pDzMaNGxk8eDB6enps3ryZ8ePH\\nU6NGDaC4F8GWLVs0juvPysoiJiaGd955B5VKRfXq1Rk1apTSUlni1q1bpKSkMHjwYKD4N6nkvAWw\\nsLCgV69eWu0HTXJycpRrE4r3vZGRETk5OeWWAVSrVo2cnBzc3d2VIPngwYO4u7sTEhLCkiVLmD17\\nNlOmTGHNmjWMGTPmV5dRCCGEKCsgIIClS5eSmZnJ/fv3Wbx4MVAcFJYYO3YsJiYmbN++nW+++UZ5\\nClu6LlhZHt999x1JSUnk5uayaNEicnNz1fLYsGEDRkZGjBo1itWrV+s0fBPK34fhv/daTctAvS5Q\\n2brnz58nLCyMpUuXlitDaGgo4eHhhIeHk5CQQL9+/ZThrpWlq6keYWBgQFBQEDVr1vxV6ejCxsYG\\nPz8/wsLCSEtLY/jw4fTo0YObN29WWobSfs1xeZGCggIOHDhA165dMTIywtzcnNWrV3Pp0iWsra3Z\\nsWNHuXQro9VkY5aWlnz88cckJiaSlZXFpEmTCAkJYdu2bUo3jbp16yrr16lTR/n/0oKDg9m6dSsF\\nBQV899139OjRo8LH/zVr1vxvAf//GIKCggKysrL4xz/+oSxTqVRqA9i1defOHbXyVlRmc3Nz5d/+\\n/v4cPHiQ+/fv8/TpU3r06MHp06eV4KSkO0p4eDienp60b9+e9u3b8+zZM7WWtNJpZmVlUbt2bbX8\\ndVF6P5Q8ua0on7LbWpJPybbWr1+/XLplB+Xfvn2b9PR0bG1tlb99+/apTQhWEsxAcaNJ2c8FBQXk\\n5eWRkJCAr6+vUs60tDSN26nNsdIm79LbV6LsfntZZc/XknMVUDvGjRo10jltba6v0sfb19eX48eP\\nU1BQQExMDN7e3jg6OnL27Fm1czUuLo4ePXrQtm1b2rdvz7Fjx37zc9Xc3Bw7OztOnz7NgQMH6NSp\\nE6+99hpxcXHExcXh7e2NgYEBjx8/5sMPP6Rt27a0a9eOkSNHKmWpU6cOfn5+fP/99zx//pzIyEje\\neustoPi8nDp1qnJOent7U6NGDY2Td5Qs8/T0VL43a9YspWGp9DYDv+oa1UaNGjV4+PCh8jk/P5+c\\nnBxMTEzKLYPi3iEmJib4+vrSqFEjfH196dixIz/99BP16tWja9eu/Pjjj3h4eGBtbc3jx4/VKhxC\\nCCHEb2HmzJm0bNkSNzc3unTpQpcuXVCpVGr1+lWrVvHkyRPef/99XnvtNdLS0srVBTXx9/dn5syZ\\n9O3bV3kCaW1trXZvHjhwIHl5eezatYvQ0FC13mPa0HSv1bRMl3Ty8/MZPnw4X375JbVq1Sr33Z49\\ne/LgwQMmT56sxEnapFvR8tL1CG3Lp0s6lfH391cmiKtSpQojR47E1taWmJiY32x/6pJOaUeOHMHO\\nzo46deqgp6dHfHw8Dx48wM/Pj0aNGlXYO7EylQbS+/bt48KFC8pnExMThg4dire3NydOnFACsdIV\\n+8zMTOXpUmnu7u7Url2b+Ph4Nm3aVK5bd2VMTU3LVXivX7+uUxpQHDyWDfTLlrn02IUuXbpw4sQJ\\nDhw4gJeXF1WqVMHBwYH9+/fz8OFDXF1d2bFjB/Pnz2fdunUcO3aMI0eOlHtaXjpNMzMztSAuIyND\\np224e/eu8u+srCy1Sn7pfMpua0lX85JtLT3uE+D+/fvlAgYLCwuaNGlCamqq8nf79m1WrFihU5nj\\n4uJwc3NTTvSuXbuyfv36ci1IBQUFjB49mmvXrml1rHTxov2mr6+vNrPiL7/88lLplyi5kZS+0F9m\\ncj5trq+y55WDg4MyhtjCwgIvLy/i4uKU3hNZWVn07t2bSZMmceLECY4dO6b08nhRmi97rpY8IY+N\\njaVz587lygIwe/Zszp49S0xMDMePH2f16tVqaQwePJjvv/+e/fv3Y2NjQ7NmzYDi83LlypVq52V2\\ndrZat6WySnpAnDp1SvnOjRs3+PHHH9XWK3n6/muuUW00bdqU5ORk5XNycjLGxsY0atSo3LKCggIu\\nXLiAi4sLKpWKhQsXEh0dzZgxY1i0aBGffvqpsl7JEIKShh0hhBDit1StWjW++uorbty4QVJSEnXr\\n1qVp06YYGRlx4MABZVZkY2NjBg4ciLm5OQkJCeXqgpWZPHkyV65c4dq1a4wYMYK0tDRatmxJSkqK\\nEjRXqVKFtm3b0rNnT3bt2qXTdtjb26NSqbh8+bLyf+fOncPFxUXjMl3SSU5O5sqVK4waNUppxC8o\\nKKBNmzbs2LGD119/nZSUFGbNmsW6detwcHBg0aJFZGVlVVoGTfUIbcunSzqVuXTpUrkhgM+ePcPQ\\n0FBjvaYsTes2bdqU8+fPq9XbX3RcSivp1l2iSZMm/Otf/yItLY21a9fy9ttvV9jNXJNKA+moqCj6\\n9+/P2bNngeLp0WNiYkhISKBz587UqVMHLy8vVq5cCRS/GicsLEzpBlzW4MGDWb16NampqVp16yjN\\nw8OD8+fPK2Nzw8PDX+r1TD4+PmRlZbFnzx6gOBjfuXPnC2dINjExwdnZmeXLlytjL7y8vJg3bx5d\\nu3YFioMbc3NzbGxsKCwsZMGCBahUKh4/flxhmp06dWLdunUUFhbyyy+/aD2BU4mSAfFZWVns3r0b\\nHx+fCtfr27cva9asUSYLWLlyJT4+PspT1OvXryvjjY8ePUpaWlq5Lsje3t5kZGQorzzLyclh1KhR\\nnDlzRqcyl+3KM378eGrWrImfnx/Hjx/nyZMnXLhwgT59+nDmzBmsrKx0PlaVedF+s7a2Vs6ru3fv\\nqo1ZNzQ01PkVAJaWltjY2CjjM5KTkzl69KjO5dX1+oLi4HX+/Pl06tQJKD5Xt2zZQl5eHo6Ojjx8\\n+JDnz58rwfPOnTtJSkrSeK7u2rWLrKwsioqKWL58udbl79q1K9u2beP58+c0aNCANm3acPLkSRIS\\nEpRAOjMzEycnJ2rUqMGjR4/44osvyM/PV87Z3r17c+7cOcLDw5Wn0QBBQUF8+eWXSkNMVFQUU6ZM\\n0VgeMzMzfHx8lC5ohYWFLFy4kLVr16qtZ2lpib29vTKR4cWLF5WZsaE4qN69e7fW++FFhgwZwtKl\\nS7lx4waPHj3io48+Ijg4GENDQwYNGsTOnTtJSEggPz+fTz75BHNzc2UitRITJkxg7ty5SvBfcoO5\\nf/8+BgYGaj00hBBCiN/CJ598wsCBA3n27Bm3bt3io48+UoZ+JSYmMnz4cNLT04HiYXo///wzrq6u\\nWnfrBkhISKBly5bcvXuXp0+fMm3aNF5//XXMzc15+PAhwcHByjCn1NRU9uzZQ6tWrXTaDmNjY/r2\\n7cusWbPIyckhNTWV5cuXM2LECI3LQL0uoGndli1bcv/+fbWGf319fRITE9WGiXl7e7Nlyxbi4+N5\\n/Pgx7777bqVl0FSPKBk7/ujRo1+VTn5+PmvWrNGqF2dkZCS9e/fm1q1bFBYWsnr1au7evUuXLl0q\\nrddERkYqgaymdUuGz37++efk5+cTHR1NbGysMhyvhJ6eHvr6+kodvvS5l5SURJcuXZRtcnJyomrV\\nqi98tdmLVBpIL1myhKCgIN58801MTU2pV68eH3zwAatWrVKCyLVr13Lu3DkcHBxwdXXF3d2dadOm\\nVZje4MGD2bx5MwMGDFAmK9OWvb09CxcupFu3bri6unLr1i2aN2/+wpnvXsTMzIzt27czc+ZMHB0d\\nCQgIYMGCBcqszBXx9/dXGg+gODgpHQy8+eabSuW7VatWODs7M2TIEIYOHar2RL/E3LlzycnJwcLC\\ngk6dOtGvXz+dnhxZWFjQokULXF1d6devnzIuuKx3332X5s2b06JFCxwcHLh8+bIStBcUFNClSxe2\\nbt2Kk5MTgwYN4uuvvy7X3btWrVrs3LmTuXPnYm9vT/PmzalduzYtWrTQurxQPpCuXr06R44cwd3d\\nnX79+mFmZkb37t1xdHQkNjYWAwODlzpWmrxov82bN4+VK1fSuXNnQkNDCQoKUo5H9+7dOX78OA0b\\nNtT6GJXMBrh06VKlZXHgwIE6n6ug2/UF5c/Vtm3bkpiYqIwzb9y4MZMnT6ZNmza4uLhw/PhxFi9e\\nzPLly9VmYy8xYMAAunXrRrNmzXB0dMTd3V3rJ50dO3bkzJkzSlBvaGioTGBhY2MDwNSpUzl8+DBO\\nTk50796dGTNm0KxZM9q2bQsUt3r36tWL7du3M2jQICXtd955Bzc3N9zc3LCzs2Pu3LkMHDiw0jJ9\\n++23XL58GTs7Oxo3bszJkyeVfVNCpVIRERFBREQElpaWTJ48We19zcePH9e6R42Pjw9GRkbMmTOH\\nyMhIjIyMcHV1BYrneejTpw8tW7bEysoKExMT5cmys7MzX3/9NUOHDqVWrVpERUURGRmp9sqMktb4\\n0g1L8+fPZ9KkSQQGBrJkyRKtyiiEEEKUVdn96/HjxzRo0AA3NzcCAwMZN24cANOmTSMgIAAPDw9M\\nTU2ZNGkS4eHhuLi4lKsLzpkzByMjI+XBScm7h+/cuUPHjh3x8/OjefPmWFhY8OzZM6X7rYeHBytW\\nrGDUqFHKO6b79+//UnODrFy5Umnwb9euHSNGjFDqE5qWla0LaFpXF1ZWVsydO1fZVk3paqpH5OTk\\n0KdPH6X37sumk5uby6hRo8pNRlyR6dOn0717d9zd3alTpw5r164lKioKc3PzSus1c+bMISYmBtBc\\nBzIwMGD79u2sX7+eWrVqMW7cOP7zn/+UG+6rp6fHgAED8PX1Zfbs2dy+fZvWrVsDxXMXde7cGXd3\\ndxo1aoSnpyezZs1Sej1qS1Wka+j9ipXutgjFM7gtW7ZM56fbf1apqak0atSI/Pz8SmeAFv/1qvZb\\nYWGh8gMxZswYTE1NWbRo0R+WvxAV6bXt5Xp0CCGE+PPaERj5qovwP2HChAnUqFGDhQsXvuqi/GmE\\nhIQwf/58tbmG/sqCgoLo2LEjkydP1rieVpON/a948uQJ5ubmSjff2NhYbt68qbQu/J38ydo//mf8\\nkfutW7dufPDBB0Bx958dO3YoL4gXQgghhBDif11RUREdOnT42wTRuvhTBdLVqlUjPDyct99+Gxsb\\nGyZOnMiGDRvUZhgW4n/FsmXLOHToENbW1nh6ejJ+/Hh69OjxqoslhBBCCPG3FhYWhouLi0zIqQWV\\nSqU2R81fWXp6Oi4uLuzfv1+r9f90XbuFEEL8OiHR47n5+NarLoYQQog/iGUNC77yXfmqiyHEX0qV\\nV10AIYQQf6w+1oF8m/gtGb+8+J3bQggh/hoa1KxPH+fAV10MIf5y5Im0EEIIIYQQQgihgz/VGGkh\\nhBBCCCGEEOJVk0BaCCGEEEIIIYTQgQTSQgghhBBCCCGEDiSQFkIIIYQQQgghdCCBtBBCCCGEEEII\\noQMJpIUQQgghhBBCCB1IIC2EEEIIIYQQQuhAAmkhhBBCCCGEEEIHEkgLIYQQQgghhBA6kEBaCCGE\\nEEIIIYTQgQTSQgghhBBCCCGEDv4fx0Wa/41FPc8AAAAASUVORK5CYII=\\n\"},\"metadata\":{\"needs_background\":\"light\"},\"output_type\":\"display_data\"},{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"* Downloaded 89.5 MB of results to `elastic_vpvsrho`.\\n\",\"* Total run time: 6.27 seconds.\\n\",\"* Pure simulation time: 5.87 seconds.\\n\"]}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(3)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"VP\\\", par_template * vp)\\n\",\"m.attach_field(\\\"VS\\\", par_template * vs)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.zeros(m.nelem))\\n\",\"\\n\",\"# # Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"displacement\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_vector_3d]\\n\",\"\\n\",\"# # Run the solver.\\n\",\"output_folder = Path(\\\"elastic_vpvsrho\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder, overwrite=True)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"with h5py.File(output_file, \\\"r\\\") as fh:\\n\",\"    de0 = fh[\\\"/volume/displacement\\\"][:]\"]},{\"cell_type\":\"markdown\",\"id\":\"2a0a44ba\",\"metadata\":{},\"source\":[\"#### Lame parameters and density\"]},{\"cell_type\":\"code\",\"execution_count\":16,\"id\":\"decada3e\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409918157_e2d4bd8bcf` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"                                          \\r\"]},{\"data\":{\"image/png\":\"iVBORw0KGgoAAAANSUhEUgAAA9IAAAAsCAYAAACJ44AqAAAAAXNSR0IArs4c6QAAAARzQklUCAgI\\nCHwIZIgAAB/3SURBVHic7d17XE3Z//jx1ymlEOVDSKmULkQiuWRCSoSRcSfj8nXJuGRchrkwDBmG\\nGWYwxmfUpxkPtzHkmlu6iEguE8llGFFEFIYIpd8f/dqfTuV0jrn4zMz7+Xh4PJz2PmutvffaZ6/3\\n2muvrSosLCxECCGEEEIIIYQQWtF73QUQQgghhBBCCCH+SiSQFkIIIYQQQgghdCCBtBBCCCGEEEII\\noQMJpIUQQgghhBBCCB1IIC2EEEIIIYQQQuhAAmkhhBBCCCGEEEIHEkgLIYQQQgghhBA6kEBaCCGE\\nEEIIIYTQgQTSQgghhBBCCCGEDiSQFkIIIYQQQgghdCCBtBBCCCGEEEIIoYNKr7sAQggh/lzxN46w\\n7vx6bjy6+bqLIoQQ4g9Wv5oFQ5wH80Z9z9ddFCH+VuSOtBBC/MNIEC2EEP8cNx7dZN359a+7GEL8\\n7UggLYQQ/zASRAshxD+L/O4L8fuTQFoIIYQQQgghhNCBBNJCCCGEEEIIIYQOJJAWQgghhBBCCCF0\\noFUgHRYWhqurK3Xq1KF27dq0adOGyMhIrTIYPnw4H330kcZ10tLSUKlU5Ofna5Xmq7h58yZOTk7U\\nqVOHGzdu/GH5vKq9e/dib2//p+YZHh5O+/bty132Rx6T9957j88++wyArKwsgoKCsLS0pHLlylha\\nWjJ27Fju3r37u+f7qm7fvs3WrVuVzzY2NkRFRf2heXbv3h0zMzMiIiL+0HxeRV5eHiqVioyMjNdd\\nFI1K7kNtj5mm9WbOnMmoUaNeqSyHDx/G1taWvn37qv39xYsXTJ8+ndq1a2NqakqfPn24d++esnzt\\n2rU0bNiQ6tWr4+HhQXJyMgBPnz5l0KBBDB8+nKFDh1JQUKB85/Lly7i5ufH06dNXKqsQQghR7GXX\\nrydPnjBhwgQsLS0xMzPj7bff5vHjx8ryZcuWYWtri5mZGe7u7sTFxal9v2RbMD09HW9vb2rVqlUm\\n/5UrV2Jvb4+pqSleXl5cvnxZWbZ//35atGiBmZkZdnZ2rFq1SqttmjBhArVr18bFxYWCggLu3r1L\\n7969MTU1xdzcnPfff5/CwkIAjctK03bdzz//HJVKxa1bt7Qqr6Z0K2pH/BHpaOv48eNUqlSJjRs3\\nAvDuu+9iZGSk9k9PT48tW7aU+31NdSg2NhZ3d3dq1qyJo6Mje/bsUZaVbMtt2rSJnJwctXQ9PDw4\\nfvx4uXmmp6fj4uJCjRo1WLZsWYXbWGEgffDgQWbMmEF4eDi3b9/m9u3bTJw4kYCAANLS0irMQBtW\\nVlZkZmZSqdIf9zauhIQECgoKuHXrFvXr19f6eyUbqL+XPyLN15mPriIjI+nWrRsPHjzA09OTtLQ0\\nIiMjefjwITExMdy9e5f27duTl5f3uosKQFRUlFognZSUhJeX1x+W3927d4mMjOTs2bP07t1b6+/9\\nlevq7630Pvyjj5km69evZ8qUKeXmv2rVKvbv38/Zs2fJzMzE0NCQiRMnAnD27FkmTZrE+vXruX//\\nPkOHDiUgIIDnz5+zY8cOLCwsCA8Px9jYmP379wNQWFjImDFjWL58OZUrV/5Tt1MIIcTfi6br19y5\\nc0lOTiYlJYX09HQyMzP58MMPAdi6dStffPEFUVFR5OTkMHLkSOX6Vay4LXjx4kV8fHxo165dmTz2\\n7dvHnDlz2LVrF9nZ2Xh5edGvXz+g6AZZnz59CAkJ4d69e2zatImpU6dy4sQJrbbt//7v/0hJSUFf\\nX59x48ZRo0YNMjMzSU5OZtu2bYSGhgJoXFaaNutevHiR0NBQ9PQ0h2C3bt1i586dFaarqR2hS/l0\\nSUcbeXl5jBo1CktLS+VvS5cuJS8vT/l39uxZrK2t8fHxKfN9TXUoKyuLXr16MXPmTHJycli2bBn9\\n+vUjMzMTUG+nf/TRR2qB9J07d7h27Rru7u7lltvKyoqUlBR8fX212s4KA+lz585hb2+Pm5tb0Rf0\\n9BgyZAgpKSlKQHrt2jV69uyJg4MDjo6OjBs3jtzcXLV09u3bh7m5uVrDfMWKFbRv35709HTq1atH\\nfn4+a9euxc/Pj2nTptGhQwfs7e356quvlO+EhYVhZ2dH48aNmTFjBp07d+a7777TuA0HDx4kODiY\\njIwMnJ2duXHjBnFxcbRq1QoHBwecnZ358ssvlfWtra1ZvHgx9evXZ+XKlVStWlU5+SMjI1GpVMqd\\noTt37lC5cmUePnzI3r17cXV1xcbGBnt7e/7zn/+Um+bmzZu5c+cO/v7+WFtb07p1a06ePFnRoQDg\\nypUrGBkZsXz5cry9vXF2dmbixInKfi2dT3GPoaOjIw4ODnTr1o2rV6+qpTlx4kQsLS1p0KDBS38c\\n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\\nrkJggg==\\n\"},\"metadata\":{\"needs_background\":\"light\"},\"output_type\":\"display_data\"},{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"* Downloaded 89.5 MB of results to `elastic_lambdamurho`.\\n\",\"* Total run time: 7.10 seconds.\\n\",\"* Pure simulation time: 6.70 seconds.\\n\"]}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(3)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"mu = rho * vs**2\\n\",\"lam = rho * vp**2 - 2 * mu\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"LAMBDA\\\", par_template * lam)\\n\",\"m.attach_field(\\\"MU\\\", par_template * mu)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.zeros(m.nelem))\\n\",\"\\n\",\"# # Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"displacement\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_vector_3d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"elastic_lambdamurho\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder, overwrite=True)\\n\",\"\\n\",\"# # Visualize the results.\\n\",\"with h5py.File(output_file, \\\"r\\\") as fh:\\n\",\"    de1 = fh[\\\"/volume/displacement\\\"][:]\"]},{\"cell_type\":\"markdown\",\"id\":\"1436360f\",\"metadata\":{},\"source\":[\"#### Elastic moduli and density\"]},{\"cell_type\":\"code\",\"execution_count\":17,\"id\":\"1275969d\",\"metadata\":{},\"outputs\":[{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"SalvusJob `job_2605011409300432_7bffe6ac6a` running on `local` with 2 rank(s).\\n\",\"\\u001b[32m\\u001b[1mSite information:\\u001b[0m\\n\",\"\\u001b[1m  * Salvus version: \\u001b[0m2025.1.3\\n\",\"\\u001b[1m  * Floating point size: \\u001b[0m32\\n\",\"                                          \\r\"]},{\"data\":{\"image/png\":\"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\\n\"},\"metadata\":{\"needs_background\":\"light\"},\"output_type\":\"display_data\"},{\"name\":\"stdout\",\"output_type\":\"stream\",\"text\":[\"* Downloaded 89.5 MB of results to `elastic_kappamurho`.\\n\",\"* Total run time: 6.54 seconds.\\n\",\"* Pure simulation time: 6.01 seconds.\\n\"]}],\"source\":[\"# Generate the mesh.\\n\",\"m = get_basic_mesh(3)\\n\",\"\\n\",\"# Attach parameter to the nodes of each element.\\n\",\"mu = rho * vs**2\\n\",\"kap = rho * (vp**2 - (4 / 3) * vs**2)\\n\",\"par_template = np.ones_like(m.get_element_nodes()[:, :, 0])\\n\",\"m.attach_field(\\\"KAPPA\\\", par_template * kap)\\n\",\"m.attach_field(\\\"MU\\\", par_template * mu)\\n\",\"m.attach_field(\\\"RHO\\\", par_template * rho)\\n\",\"m.attach_field(\\\"fluid\\\", np.zeros(m.nelem))\\n\",\"\\n\",\"# Attach the mesh and set some custom output.\\n\",\"w.set_mesh(m)\\n\",\"w.output.volume_data.fields = [\\\"displacement\\\"]\\n\",\"w.physics.wave_equation.point_source = [src_vector_3d]\\n\",\"\\n\",\"# Run the solver.\\n\",\"output_folder = Path(\\\"elastic_kappamurho\\\")\\n\",\"output_file = output_folder / \\\"output.h5\\\"\\n\",\"run_salvus(input_file=w, output_folder=output_folder, overwrite=True)\\n\",\"\\n\",\"# Visualize the results.\\n\",\"with h5py.File(output_file, \\\"r\\\") as fh:\\n\",\"    de2 = fh[\\\"/volume/displacement\\\"][:]\\n\",\"\\n\",\"# All parameterizations should have produced the same output.\\n\",\"np.testing.assert_allclose(de0, de1, atol=1e-7)\\n\",\"np.testing.assert_allclose(de1, de2, atol=1e-7)\"]}],\"metadata\":{\"jupytext\":{\"cell_metadata_filter\":\"tags,-all\"},\"kernelspec\":{\"display_name\":\"Python 3 (ipykernel)\",\"language\":\"python\",\"name\":\"python3\"},\"language_info\":{\"codemirror_mode\":{\"name\":\"ipython\",\"version\":3},\"file_extension\":\".py\",\"mimetype\":\"text/x-python\",\"name\":\"python\",\"nbconvert_exporter\":\"python\",\"pygments_lexer\":\"ipython3\",\"version\":\"3.11.15\"}},\"nbformat\":4,\"nbformat_minor\":5}","notebook_widget_size_map":"{}","path_to_zip_file":"/2025.1.3/examples/tutorials/models_and_topo/parameterizations/tutorial.zip","zip_file_size":"124.24 kB"}},"pageContext":{"slug":"/2025.1.3/examples/tutorials/models_and_topo/parameterizations/tutorial","pagePath":"2025.1.3/examples/tutorials/models_and_topo/parameterizations/tutorial"}},
    "staticQueryHashes": ["1756726491","1865182279","3419370438","3597190305","4112489441","519097329"]}