{
    "componentChunkName": "component---src-templates-markdown-doc-tsx",
    "path": "/2025.1.3/installation/salvus_flow_configuration",
    "result": {"data":{"mdx":{"id":"aadabd01-1543-5f3c-8a8a-6030bb263747","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, \"SalvusFlow Configuration\"), mdx(\"h2\", null, \"What is a Site?\"), mdx(\"p\", null, \"A major part of Salvus\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Flow\"), \" is its remote job execution framework. Every\\ntime a simulation is run with Salvus\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Flow\"), \", that framework is used. In such\\ncases the \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"site\"), \" at which you want to run a simulation has to be specified.\"), mdx(\"p\", null, \"A \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"site\"), \" is a set of configuration parameters which describe how to run\\nSalvus\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Compute\"), \" on a local or remote machine. Every site must have a unique\\nname.\"), mdx(\"p\", null, \"Most of the Salvus tutorials use a site called \\\"local\\\" with a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"local\"), \" site\\ntype. We recommend to set this up as well if you want to follow along the\\ntutorials.\"), mdx(\"h2\", null, \"Supported Site Types\"), mdx(\"p\", null, \"It is an obvious choice which site type is suitable for any given machine.\\nSalvus currently supports the following site types. Please contact Mondaic if\\nyour cluster's job management system is not listed.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"local\"), \": Runs simulations on the same machine as Salvus\", mdx(\"em\", {\n    parentName: \"li\"\n  }, \"Flow\"), \". This is the\\nonly site type that does not use SSH.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ssh\"), \": For simulations on remote machines/work stations without a job\\nqueuing system. Uses SSH for remote communication.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"slurm\"), \": For clusters with the slurm job submission system. Uses SSH for\\nremote communication.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"pbs\"), \": For clusters with the PbsPro job submission system. Uses SSH for\\nremote communication.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"lsf\"), \": For clusters using the IBM Spectrum LSF job management system. Uses\\nSSH for remote communication.\")), mdx(\"p\", null, \"SSH configuration is sometimes a major hurdle for people who don't regularly\\nuse it, thus we have a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./ssh_configuration\"\n  }, \"separate page\"), \" to help with\\nthat.\"), mdx(\"h2\", null, \"Adding a New Site\"), mdx(\"p\", null, \"There are three recommended ways to add a new site:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The second would be to launch an interactive wizard which will ask you a\\nnumber of questions to initialize a site. This will also offer to download\\nand install \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SalvusCompute\"), \" if necessary. Start it by executing\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-shell\"\n  }, \"salvus-cli add-site\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Use the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./salvus_flow/config_builder\"\n  }, \"Salvus Configuration Builder\"), \".\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The other recommended option it to have a look at our \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./salvus_flow/example_sites\"\n  }, \"library of example\\nsite configurations\"), \" and manually copy and\\nthese to the config TOML file and adjust them to your system.\"))), mdx(\"h2\", null, \"How to Configure Salvus\", mdx(\"em\", {\n    parentName: \"h2\"\n  }, \"Flow\"), \"?\"), mdx(\"p\", null, \"All sites are defined in a global \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://en.wikipedia.org/wiki/TOML\"\n  }, \"TOML\"), \"\\nconfiguration file. The exact location of this file is system dependent but\\ncan be queried with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"$ salvus-cli print-config-paths\"), \". A convenient way to\\nedit this file is to call\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-shell\"\n  }, \"salvus-cli edit-config\\n\")), mdx(\"p\", null, \"which will open the configuration file with your preferred editor (specified\\nwith the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"$EDITOR\"), \" environment variable).\"), mdx(\"p\", null, \"After the configuration has been edited you have to initialize the site by\\ncalling\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-shell\"\n  }, \"salvus-cli init-site SITE_NAME\\n\")), mdx(\"p\", null, \"This command will run all kinds of tests of the configuration to make sure it\\nis correct. If something goes wrong it offers extensive debugging output to\\npinpoint the issue. Once the site initialization has been successful the site\\nis ready to be used. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Any time a site is updated or changed it has to be\\ninitialized again!\")), mdx(\"h2\", null, \"Advanced Configuration\"), mdx(\"p\", null, \"A few more involved topics like \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./ssh_configuration\"\n  }, \"SSH setup\"), \",\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./mpi\"\n  }, \"MPI\"), \", and \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./license_server\"\n  }, \"dark sites\"), \" are detailed in the\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./advanced_topics\"\n  }, \"advanced section\"), \" of the installation manual.\"), mdx(\"h2\", null, \"Run & Tmp Directories\"), mdx(\"p\", null, \"Most parameters, together with the provided comments/documentation should be\\nself-explanatory. The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"run_directory\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tmp_directory\"), \" parameters warrant\\nfurther explanation. Both of them specify directories at the local or remote\\nsite that will be managed by Salvus\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Flow\"), \".\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"run_directory\"), \": Every job run on this site will get its own directory.\\nSalvus\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Flow\"), \" will use that directory to store all inputs and most output\\nfiles there.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tmp_directory\"), \": Every job that produces a lot of output (e.g. volumetric\\ndata output or checkpoints for adjoint simulations) will get a folder in\\nthis directory, as these special output files are often orders-of-magnitude\\nlarger in size than standard output files. Many HPC systems have multiple\\nfile systems: one which stores a limited amount of user data (e.g. where\\nyour \\\"home\\\" directory is located), and one which can performantly store\\nlarge quantities of data, but which also comes with no guarantee of file\\npersistance (e.g. where your \\\"scratch\\\" directory is located). In these\\ncases we recommend to point the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tmp_directory\"), \" parameter to a folder on\\nthe latter file system, keeping in mind that such data may be cleared from\\ntime-to-time by the system's maintenance routines.\"))), mdx(\"p\", null, \"Note that both folders must be read- and writeable from the compute nodes.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Scenario A\"), \": Single filesystem, keep everything in same folder.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"run_directory = \\\"/path/to/salvus_data/run\\\"\\ntmp_directory = \\\"/path/to/salvus_data/tmp\\\"\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Scenario B\"), \": Single filesystem. Use actual \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/tmp\"), \" directory for the large\\nfiles. Please keep in mind that the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/tmp\"), \" directory is cleared upon restart\\non many systems.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"run_directory = \\\"/path/to/salvus_data/run\\\"\\ntmp_directory = \\\"/tmp/salvus_tmp\\\"\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Scenario C\"), \": One smaller filesystem for most files, another large scratch\\nspace for the potentially very large other files.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"run_directory = \\\"/path/to/salvus_data/run\\\"\\ntmp_directory = \\\"/scratch/path/to/salvus_data/tmp\\\"\\n\")));\n}\n;\nMDXContent.isMDXComponent = true;"},"site":{"siteMetadata":{"salvusDocVersions":{"current":"2026.5.0"}}}},"pageContext":{"id":"aadabd01-1543-5f3c-8a8a-6030bb263747"}},
    "staticQueryHashes": ["1756726491","1865182279","3419370438","3597190305","4112489441","519097329"]}