{
    "componentChunkName": "component---src-templates-markdown-doc-tsx",
    "path": "/2025.1.3/updates/0_11/release_notes",
    "result": {"data":{"mdx":{"id":"44cb38c3-9a27-5c3f-91b9-f37e627a391b","frontmatter":{"title":"","images":null},"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", null, \"Release Notes for Salvus 0.11\"), mdx(\"p\", null, \"Released: \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"March 31st 2020\")), mdx(\"p\", null, \"Salvus 0.11 contains a large number of internal improvements, bug fixes, and\\noptimizations as well as already some preparations for the next release. This\\npages documents the major user facing changes of the Salvus software suite.\"), mdx(\"h2\", null, \"Headline Features\"), mdx(\"h3\", null, \"GPU support for CUDA-capable GPUs\"), mdx(\"p\", null, \"GPU support for CUDA capable GPUs is now available for forward modelling\\napplications! The following system requirements apply:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"CudaToolkit 10.x and the associated CUDA runtime libraries\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"An NVIDIA GPU with a compute capability >= 6.0\")), mdx(\"p\", null, \"If these requirements are satisfied, GPU support can be enabled by updating\\nyour site configuration file as follows:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"[sites.site_name]\\n   ...\\n   use_cuda_capable_gpus = true\\n   ...\\n   [sites.site_name.site_specific]\\n   ...\\n\")), mdx(\"p\", null, \"With this new line in place, go ahead and \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"../../installation/salvus_flow_configuration\"\n  }, \"re-run\\n\", mdx(\"inlineCode\", {\n    parentName: \"a\"\n  }, \"init-site\")), \" for the Salvus\\n\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Flow\"), \" site in question. If this completes successfully, you're up and running\\nwith GPU support!\"), mdx(\"p\", null, \"The relationship between the number of MPI ranks and the number of GPUs used\\nis as follows. First, when the simulation is initialized, the number of\\nCUDA-capable GPUs on each compute node is queried. Following this, the ranks\\nwhich reside on each compute node are assigned in a round-robin fashion to\\nthe CUDA devices visible to the node. For example, if a simulation is run on\\ntwo compute nodes, and each node has two CUDA-capable GPUs:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Running with 1 rank per node will result in a total of two GPUs being used\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Running with 2 ranks per node will result in a total of four GPUs being used\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Running with 12 ranks per node will result in a total of four GPUs being used\")), mdx(\"p\", null, \"For the best performance we recommend running Salvus with 1 rank per GPU.\\nThis recommendation is however expected to change as the GPU capability of\\nSalvus evolves, so please either check back here, or contact the development\\nteam through the designated support channels, for updates to these\\nbest-practice guidelines.\"), mdx(\"h3\", null, \"Single Python Package\"), mdx(\"p\", null, \"Up to version \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"0.10\"), \" Salvus came with several Python packages: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"SalvusMesh\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"SalvusFlow\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"SalvusFEM\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"SalvusToolbox\")), mdx(\"p\", null, \"There is now a single Salvus Python package.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Before:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import salvus_mesh\\nimport salvus_flow\\nimport salvus_fem\\nimport salvus_toolbox\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Now:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import salvus.mesh\\nimport salvus.flow\\nimport salvus.fem\\nimport salvus.toolbox\\n\")), mdx(\"h3\", null, \"Quality of Life Improvements to Site Handling\"), mdx(\"p\", null, \"We greatly improved all aspects of settings up and updating local as well as\\nremote sites.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"salvus-flow init-site\"), \": Better checks and error messages for all\\naspects including SSH connections and site setup. Will now emit actionable\\nsuggestions of what to do when something breaks amongst other things.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"salvus-flow add-site\"), \": Can now automatically install Salvus on a remote\\nsite.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"salvus-flow upgrade\"), \": Command to upgrade the local Python installation for\\nany future update.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"salvus-flow upgrade-site\"), \": Command to upgrade Salvus on a remote site for\\nall future updates.\")), mdx(\"h3\", null, \"Ocean Loading\"), mdx(\"p\", null, \"Salvus can now simulate the effect the weight of the ocean (or another load)\\nhas on the wave field.\"), mdx(\"h2\", null, \"Other User-Facing Improvements\"), mdx(\"h3\", null, \"SalvusCompute\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Parallel mesh loading powered by \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://petsc.org/release/\"\n  }, \"PETSc\\nv3.13\"), \" and DMPlex.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Consistent naming conventions in JSON schema.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Anisotropic smoothing on spherical and cartesian domains.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Fix error handling for invalid material coefficients\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Much faster TTI gradient computation.\")), mdx(\"h3\", null, \"SalvusFlow\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The environment variables on slurm are now explicitly passed\\nin the sbatch file. Thus the environment variables set in the startup\\ndotfiles no longer pollute the Salvus run.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The module switching/(un)loading in the LSF site can now also\\nhappen inside the batch file.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ability to force update jobs and job arrays.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"New command to remove all Salvus managed files from a remote\\nsite.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Added API and CLI function to cancel all running jobs on a\\ngiven site.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Allow sites with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"max_ranks\"), \" set to 1.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ability to recover from ProxyCommand failures which for some\\nreason also always seem to happen on \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"KeyboardInterrupt\"), \" exceptions.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sources and receivers are now immutable.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Added simplified smoothing interface.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Better error message when the JSON output parsing fails.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Allow \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"\\\"SITE_NAME:...\\\"\"), \" remote file in the waveform\\nsimulation \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"simple_config\"), \" helper objects.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Raising a proper error message if one tries to add side\\nset sources/receivers to a waveform simulation object without a locally a\\navailable mesh.\")), mdx(\"h3\", null, \"SalvusMesh\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Auto-band is now the default in the mesher.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Removing the deprecated \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"salvus.mesh.simple_config\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"More flexible way to determine the data set names in the\\nglobal topography files.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Fix handling of fluid regions for absorbing BCs.\")), mdx(\"h3\", null, \"Varia\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Nicer logging interface for all of SalvusPy.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Salvus version number included in all output files.\")));\n}\n;\nMDXContent.isMDXComponent = true;"},"site":{"siteMetadata":{"salvusDocVersions":{"current":"2026.5.0"}}}},"pageContext":{"id":"44cb38c3-9a27-5c3f-91b9-f37e627a391b"}},
    "staticQueryHashes": ["1756726491","1865182279","3419370438","3597190305","4112489441","519097329"]}