PageSourceSearch

https://dune-copasi.netlify.app/assets/js/8898d2e9.cd3f8e30.js

js dune-copasi.netlify.app collected 2026-10-03 10:41:38 UTC 31,161 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkdune_copasi_docusaurus=self.webpackChunkdune_copasi_docusaurus||[]).push([[4488],{2697:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var a=i(4848),t=i(8453),r=i(1470),s=i(9365);const l={id:"install_use",title:"Installation and Usage",sidebar_label:"Install & Use"},o=void 0,d={id:"install_use",title:"Installation and Usage",description:"Usage",source:"@site/versioned_docs/version-v1.1.1/install_use.md",sourceDirName:".",slug:"/install_use",permalink:"/docs/v1.1.1/install_use",draft:!1,unlisted:!1,editUrl:"https://gitlab.dune-project.org/copasi/dune-copasi/-/edit/master/doc/docusaurus/versioned_docs/version-v1.1.1/install_use.md",tags:[],version:"v1.1.1",lastUpdatedBy:"Santiago Ospina De Los Rios",lastUpdatedAt:1713784883e3,frontMatter:{id:"install_use",title:"Installation and Usage",sidebar_label:"Install & Use"},sidebar:"docs",previous:{title:"Documentation",permalink:"/docs/v1.1.1/category/docs"},next:{title:"Configuration Options",permalink:"/docs/v1.1.1/category/docs/config"}},c={},u=[{value:"Usage",id:"usage",level:2},{value:"Graphical User Interface",id:"graphical-user-interface",level:3},{value:"Configuration File",id:"configuration-file",level:3},{value:"Application Programming Interface",id:"application-programming-interface",level:3},{value:"Installation",id:"installation",level:2},{value:"Graphical User Interface",id:"graphical-user-interface-1",level:3},{value:"Docker Runner",id:"docker-runner",level:3},{value:"Install Docker",id:"install-docker",level:4},{value:"Prepare a working directory",id:"prepare-a-working-directory",level:4},{value:"Run the program",id:"run-the-program",level:4},{value:"Debian/Ubuntu and macOS Packages",id:"debianubuntu-and-macos-packages",level:3},{value:"Docker Build",id:"docker-build",level:3},{value:"Manual Installation",id:"manual-installation",level:3},{value:"Operating Systems and Compilers",id:"operating-systems-and-compilers",level:4},{value:"Dependencies",id:"dependencies",level:4},{value:"Dune Options File",id:"dune-options-file",level:4},{value:"Installation",id:"installation-1",level:4},{value:"Run the program",id:"run-the-program-1",level:4},{value:"Importing CMake targets",id:"importing-cmake-targets",level:4}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsxs)(n.p,{children:["There are three different ways to use ",(0,a.jsx)(n.code,{children:"dune-copasi"}),":"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#graphical-user-interface",children:"GUI: Graphical User Interface"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#configuration-file",children:"INI: Configuration File"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#application-programming-interface",children:"API: Application Programming Interface"})}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"graphical-user-interface",children:"Graphical User Interface"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"https://github.com/spatial-model-editor/spatial-model-editor",children:"Spatial Model Editor"}),"\nis a ",(0,a.jsx)(n.strong,{children:"user friendly"})," GUI editor to create and edit 2D\nspatial ",(0,a.jsx)(n.em,{children:"Systems Biology Markup Language"})," (",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/SBML",children:"SBML"}),")\nmodels of bio-chemical reactions. Additionally, it can simulate them with ",(0,a.jsx)(n.code,{children:"dune-copasi"}),". A big\nadvantage of this package is that is tailored for biologists and is available\nwith just a pair of clicks on the major plataforms. Find more information\n",(0,a.jsx)(n.a,{href:"https://spatial
1-model-editor.readthedocs.io",children:"here"}),"!"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://spatial-model-editor.readthedocs.io",children:(0,a.jsx)(n.img,{alt:"sme",src:i(4382).A+"",width:"1204",height:"829"})})}),"\n",(0,a.jsx)(n.h3,{id:"configuration-file",children:"Configuration File"}),"\n",(0,a.jsxs)(n.p,{children:["In this form, ",(0,a.jsx)(n.code,{children:"dune-copasi"})," provides one executable for single compartment\nsystems (",(0,a.jsx)(n.code,{children:"dune-copasi-sd"}),") and another one for multiple compartment systems\n(",(0,a.jsx)(n.code,{children:"dune-copasi-md"}),"). Both executables expect one ",(0,a.jsxs)(n.a,{href:"/docs/v1.1.1/ini_file",children:[(0,a.jsx)(n.code,{children:"INI"})," configuration file"]}),"\nwhich shall contain all the information to perform the simulation."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"dune-copasi-md config.ini\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Find more information about available configurations on the\n",(0,a.jsx)(n.a,{href:"/docs/v1.1.1/param_tree",children:"Parameter Tree"})," documentation. This form may be\ninstalled in one of the following procedures:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#docker-runner",children:"Docker Runner"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#debianubuntu-and-macos-packages",children:"Debian/Ubuntu and macOS Packages"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#manual-installation",children:"Manual Installation"})}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"application-programming-interface",children:"Application Programming Interface"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"dune-copasi"})," C++ objects may be consumed by other programs in order\nto generate custom simulation rules, to couple intermediate steps with other\ntools, or to implement another GUI, etc. In such a case, ",(0,a.jsx)(n.code,{children:"dune-copasi"})," must be\navailable in development mode and the downstream library is expected to\n",(0,a.jsx)(n.a,{href:"#importing-cmake-targets",children:"consume the library"})," by using the\n",(0,a.jsx)(n.a,{href:"https://cmake.org",children:"CMake build system"})," and use the ",(0,a.jsx)(n.a,{href:"/docs/v1.1.1/api",children:"C++ objects"})," in code.\nThis form is available on:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#manual-installation",children:"Manual Installation"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#docker-build",children:"Docker Build"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,a.jsx)(n.h3,{id:"graphical-user-interface-1",children:"Graphical User Interface"}),"\n",(0,a.jsx)(n.p,{children:"To install the Spatial Model Editor, please refer to its installation\ninstructions:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://spatial
1-model-editor.readthedocs.io/en/stable/quickstart/get-started.html#installation",children:"https://spatial-model-editor.readthedocs.io/en/stable/quickstart/get-started.html#installation"})}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"docker-runner",children:"Docker Runner"}),"\n",(0,a.jsxs)(n.p,{children:["The easiest form to use our executables for INI usage, is by using a\n",(0,a.jsx)(n.a,{href:"https://www.docker.com/",children:"Docker Container"}),". There, the software is boundled\nsuch that no installation other than docker is required."]}),"\n",(0,a.jsx)(n.h4,{id:"install-docker",children:"Install Docker"}),"\n",(0,a.jsxs)(n.p,{children:["First, get and install Docker following the\n",(0,a.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"docker installation instructions"}),"."]}),"\n",(0,a.jsx)(n.h4,{id:"prepare-a-working-directory",children:"Prepare a working directory"}),"\n",(0,a.jsxs)(n.p,{children:["To be able to easily share data between your operating system and the docker\ncontainer, prepare a working directory with read/write rights to ",(0,a.jsx)(n.em,{children:"other users"}),"\n(e.g. a folder named ",(0,a.jsx)(n.code,{children:"dune-copasi"}),"):"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir -m o+rw dune-copasi && cd dune-copasi\n"})}),"\n",(0,a.jsxs)(n.p,{children:["This working directory will be accessible to your text editor, paraview as\nwell as to the ",(0,a.jsx)(n.code,{children:"dune-copasi-md"}
1)," executable inside the docker container. Thus,\nmove or create your configuration files into it at will."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"# setup/write ini and input files for dune-copasi...\nnano config.ini\n"})}),"\n",(0,a.jsx)(n.h4,{id:"run-the-program",children:"Run the program"}),"\n",(0,a.jsxs)(n.p,{children:["Here, you may pull and run the container from our\n",(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/copasi/dune-copasi/container_registry",children:"GitLab registry"}),".\nTo do so, call the docker container with a configuration\nfile ",(0,a.jsx)(n.code,{children:"config.ini"})," using one of the following commands on the terminal:"]}),"\n",(0,a.jsxs)(r.A,{groupId:"docker-run",defaultValue:"md",values:[{label:"Multi Domain",value:"md"},{label:"Single Domain",value:"sd"}],children:[(0,a.jsx)(s.A,{value:"md",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -v $PWD:/dunecopasi \\\n  registry.dune-project.org/copasi/dune-copasi/dune-copasi:v1.1.1\\\n  config.ini\n"})})}),(0,a.jsx)(s.A,{value:"sd",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -v $PWD:/dunecopasi \\\n  --entrypoint=dune-copasi-sd \\\n  registry.dune-project.org/copasi/dune-copasi/dune-copasi:v1.1.1\\\n  config.ini\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The results of those computations will be written on current\ndirectory as mentioned above. For more information about running docker images,\nvisit the ",(0,a.jsxs)(n.a,{href:"https://docs.docker.com/engine/reference/run/",children:[(0,a.jsx)(n.code,{children:"docker run"})," documentation"]}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"debianubuntu-and-macos-packages",children:"Debian/Ubuntu and macOS Packages"}),"\n",(0,a.jsxs)(n.p,{children:["For Debian/Ubuntu/macOS users that want to make use of ",(0,a.jsx)(n.code,{children:"dune-copasi"}),"\nwith ",(0,a.jsx)(n.a,{href:"#configuration-file",children:"INI"})," usage, installation is as simple as:"]}),"\n",(0,a.jsxs)(r.A,{groupId:"package-manager",defaultValue:"apt",values:[{label:"Debian 11 (apt)",value:"apt"},{label:"macOS/Linux (brew)",value:"brew"}],children:[(0,a.jsx)(s.A,{value:"apt",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://gitlab.dune-project.org/copasi/dune-copasi/-/jobs/artifacts/v1.1.1/raw/packages/dune-copasi-runtime.deb?job=build:debian_clang -o dune-copasi-runtime.deb\napt install ./dune-copasi-runtime.deb\n"})})}),(0,a.jsx)(s.A,{value:"brew",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"brew tap dune-copasi/tap\nbrew install dune-copasi\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Once installed, the programs ",(0,a.jsx)(n.code,{children:"dune-copasi-sd"})," and ",(0,a.jsx)(n.code,{children:"dune-copasi-md"})," will be\navailable on the command line:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"dune-copasi-md config.ini\n"})}),"\n",(0,a.jsx)(n.p,{children:"To remove the package call the following command on the terminal"}),"\n",(0,a.jsxs)(r.A,{groupId:"package-manager",defaultValue:"apt",values:[{label:"Debian/Ubuntu (apt)",value:"apt"},{label:"macOS/Linux (brew)",value:"brew"}],children:[(0,a.jsx)(s.A,{value:"apt",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"apt remove dune-copasi-runtime\n"})})}),(0,a.jsx)(s.A,{value:"brew",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"brew uninstall dune-copasi\n"})})})]}),"\n",(0,a.jsx)(n.h3,{id:"docker-build",children:"Docker Build"}),"\n",(0,a.jsxs)(n.p,{children:["Advanced users, who may want to make modifications on the ",(0,a.jsx)(n.code,{children:"dune-copasi"}),"\ncode but do not to install all the dependencies may opt for a docker build. In\nthis case, you must download the ",(0,a.jsx)(n.code,{children:"dune-copasi"})," source code, modify it, and build\na new local docker image:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# fetch source code from git\ngit clone ssh://[email protected]:22022/copasi/dune-copasi.git\n\n# checkout the branch you want to modify (e.g. latest)\ngit checkout latest\n\n# enter dune-copasi directory\ncd dune-copasi\n\n# modify source code at will\n# ...\n\n# build a new docker image from modified code (tag: dune-copasi)\ndocker build -t dune-copasi .\n"})}),"\n",(0,a.jsxs)(n.p,{children:["This will build all dune dependencies as well as the new modified version of\n",(0,a.jsx)(n.code,{children:"dune-copasi"}),". Then, follow the ",(0,a.jsx)(n.a,{href:"#docker-runner",children:"Docker runner guide"})," to run\nthe new image with tag ",(0,a.jsx)(n.code,{children:"dune-copasi"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"manual-installation",children:"Manual Installation"}),"\n",(0,a.jsxs)(n.p,{children:["Finally, to locally build and install ",(0,a.jsx)(n.code,{children:"dune-copasi"})," we requires to obtain, compile\nand install a variety of dependencies."]}),"\n",(0,a.jsx)(n.h4,{id:"operating-systems-and-compilers",children:"Operating Systems and Compilers"}),"\n",(0,a.jsxs)(n.p,{children:["The manual installation is known to compile and run under Debian/Ubuntu, macOS, and Windows.\nIn all three cases with ",(0,a.jsx)(n.a,{href:"https://clang.llvm.org",children:"Clang"})," and ",(0,a.jsx)(n.a,{href:"https://gcc.gnu.org",children:"GCC"}),"\nbased compilers. It is however, known to not be compatible with Microsoft Visual Studio."]}),"\n",(0,a.jsx)(n.h4,{id:"dependencies",children:"Dependencies"}),"\n",(0,a.jsxs)(n.p,{children:["The following list of software is required to install and use ",(0,a.jsx)(n.code,{children:"dune-copasi"}),":"]}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Software"}),(0,a.jsx)(n.th,{children:"Version/Branch"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://cmake.org/",children:"CMake"})}),(0,a.jsx)(n.td,{children:">= 3.1"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"C++ compiler"}),(0,a.jsxs)(n.td,{children:[">= ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/List_of_compilers#C++_compilers",children:"C++17"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"http://www.libtiff.org/",children:"libTIFF"})}),(0,a.jsx)(n.td,{children:">= 3.6.1"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://beltoforion.de/article.php?a=muparser",children:"muParser"})}),(0,a.jsx)(n.td,{children:">= 2.2.5"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/copasi/dune-common",children:"dune-common"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/core/dune-geometry",children:"dune-geometry"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/core/dune-grid",children:"dune-gr
1id"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/staging/dune-uggrid",children:"dune-uggrid"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/core/dune-istl",children:"dune-istl"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/core/dune-localfunctions",children:"dune-localfunctions"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/staging/dune-functions",children:"dune-functions"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/staging/dune-logging",children:"dune-logging"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/extensions/dune-multidomaingrid",children:"dune-multidomaingrid"})}),(0,a.jsx)(n.td,{children:"== 2.7"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/copasi/dune-typetree",children:"COPASI/dune-typetree"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"support/dune-copasi-v1.1.1"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/copasi/dune-pdelab",children:"COPASI/dune-pdelab"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"support/dune-copasi-v1.1.1"})})]})]})]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["Notice that some required dune modules are forks of original repositories and\nare placed under the ",(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/copasi/",children:"COPASI namespace"}),"\non the ",(0,a.jsx)(n.a,{href:"https://gitlab.dune-project.org/",children:"DUNE GitLab"}),"."]})}),"\n",(0,a.jsx)(n.h4,{id:"dune-options-file",children:"Dune Options File"}),"\n",(0,a.jsxs)(n.p,{children:["An important part of the installation procedure is to tune the build system\
1nflags to accommodate the build to your system. This is done via the ",(0,a.jsx)(n.a,{href:"https://dune-project.org/doc/installation/#storing-flags-in-an-options-file",children:"dune options\nfile"}),".\nIn essence, is just a bash script that sets different flags (mainly the flags\nfor CMake ",(0,a.jsx)(n.code,{children:"CMAKE_FLAGS"}),"). While the dune project usually leaves this open for the user, we\nprovide a ",(0,a.jsx)(n.code,{children:"dune-copasi.opts"})," file with sensible default options for the main\noperating systems."]}),"\n",(0,a.jsx)(n.p,{children:"This file can be called to show the current configuration:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"./dune-copasi.opts\n"})}),"\n",(0,a.jsxs)(n.p,{children:["There are two form to add flags to the ",(0,a.jsx)(n.code,{children:"dune-copasi.opts"})," file:"]}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["Setting environmental variables starging with ",(0,a.jsx)(n.code,{children:"CMAKE_"})," and ",(0,a.jsx)(n.code,{children:"DUNE_"}),".\nThese variables will be automatically included into the list of cmake flags."]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'export CMAKE_INSTALL_PREFIX="/path/to/install/prefix/"\nexport CMAKE_GENERATOR="\'Ninja\'"\n./dune-copasi.opts\n'})}),"\n",(0,a.jsxs)(n.ol,{start:"2",children:["\n",(0,a.jsxs)(n.li,{children:["Appending new flags into the ",(0,a.jsx)(n.code,{children:"CMAKE_FLAGS"})," variable in the ",(0,a.jsx)(n.code,{children:"dune-copasi.opts"})," file\n(care must be taken to scape quotes):"]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'echo \'CMAKE_FLAGS+=" -DCMAKE_INSTALL_PREFIX=/path/to/install/prefix/"\' >> dune-copasi.opts\necho "CMAKE_FLAGS+=\\" -DCMAKE_GENERATOR=\'Ninja\'\\"" >> dune-copasi.opts\n./dune-copasi.opts\n'})}),"\n",(0,a.jsxs)(n.p,{children:["For more information about the possible options and the dune options file, check out\nthe dune ",(0,a.jsx)(n.a,{href:"https://dune-project.org/doc/installation/",children:"installation documentation"}),"\nand the ",(0,a.jsx)(n.a,{href:"https://dune-project.org/sphinx/core-2.7/",children:"build system documentation"}),"."]}),"\n",(0,a.jsx)(n.h4,{id:"installation-1",children:"Installation"}),"\n",(0,a.jsx)(n.p,{children:"The first four dependencies can be obtained by your preferred package manager in\nunix-like operating systems. e.g."}),"\n",(0,a.jsxs)(r.A,{groupId:"package-manager",defaultValue:"apt",values:[{label:"Debian/Ubuntu (apt)",value:"apt"},{label:"macOS/Linux (brew)",value:"brew"}],children:[(0,a.jsx)(s.A,{value:"apt",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"apt update\napt install cmake gcc g++ libtiff-dev libmuparser-dev git\n"})})}),(0,a.jsx)(s.A,{value:"brew",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"brew update\nbrew install cmake gcc libtiff muparser git\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The required ",(0,a.jsx)(n.code,{children:"DUNE"})," modules (including ",(0,a.jsx)(n.code,{children:"dune-copasi"}),") can be obtained via\ninternet by using ",(0,a.jsx)(n.a,{href:"https://git-scm.com/",children:(0,a.jsx)(n.code,{children:"git"})}),". For smooth installation, is\nbetter place all the dune modules within the same directory."]}),"\n",(0,a.jsx)(n.admonition,{title:"DUNE Version incompatibility",type:"caution",children:(0,a.jsx)(n.p,{children:"Notice that this procedure assumes that you don't have other DUNE versions installed in\nyour system. If that's the case, uninstall DUNE before continuing, otherwise, version\nconflicts may be difficult if not impossible to resolve."})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# prepare a folder to download and build dune modules\nmkdir ~/dune-modules && cd ~/dune-modules\n\n# fetch dependencies & dune-copasi in ~/dune-modules folder\ngit clone -b releases/2.7 https://gitlab.dune-project.org/core/dune-common\ngit clone -b releases/2.7 https://gitlab.dune-project.org/core/dune-geometry\ngit clone -b releases/2.7 https://gitlab.dune-project.org/core/dune-grid\ngit clone -b releases/2.7 https://gitlab.dune-project.org/staging/dune-uggrid\ngit clone -b releases/2.7 https://gitlab.dune-project.org/core/dune-istl\ngit clone -b releases/2.7 https://gitlab.dune-project.org/core/dune-localfunctions\ngit clone -b releases/2.7 https://gitlab.dune-project.org/staging/dune-functions\ngit clone -b releases/2.7 https://gitlab.dune-project.org/extensions/dune-multidomaingrid\ngit clone -b releases/2.7 --recursive https://gitlab.dune-project.org/staging/dune-logging\ngit clone -b support/dune-copasi-v1.1.1 https://gitlab.dune-project.org/copasi/dune-typetree\ngit clone -b support/dune-copasi-v1.1.1 https://gitlab.dune-project.org/copasi/dune-pdelab\ngit clone -b v1.1.1 https://gitlab.dune-project.org/copasi/dune-copasi\n\n# apply patches\ngit -C dune-common apply ../dune-copasi/.ci/dune-common.patch\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Then, build and install the ",(0,a.jsx)(n.code,{children:"DUNE"})," modules with the ",(0,a.jsx)(n.code,{children:"dunecontrol"})," script:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# choose an installation path      (this is read by the 'dune-copasi.opts' file)\nexport CMAKE_INSTALL_PREFIX=/opt/dune/\n\n# configure and build dune modules                                (go grab a coffee)\n./dune-common/bin/dunecontrol --opts=dune-copasi/dune-copasi.opts all\n\n# install binaries and libraries                                  (may require sudo)\n./dune-common/bin/dunecontrol --opts=dune-copasi/dune-copasi.opts bexec make install\n\n# remove source and build files\ncd ~ && rm -r ~/dune
1-modules\n\n# include dune binaries into your path\necho \"export PATH=${CMAKE_INSTALL_PREFIX}/bin:\\$PATH\" >> $HOME/.bashrc\n"})}),"\n",(0,a.jsxs)(n.p,{children:["For further information on dune module installation process, please check out\nthe ",(0,a.jsx)(n.a,{href:"https://www.dune-project.org/doc/installation/",children:"dune-project web page"}),"."]}),"\n",(0,a.jsx)(n.h4,{id:"run-the-program-1",children:"Run the program"}),"\n",(0,a.jsxs)(n.p,{children:["Once installed, the programs ",(0,a.jsx)(n.code,{children:"dune-copasi-sd"})," and ",(0,a.jsx)(n.code,{children:"dune-copasi-md"})," will be\navailable on the command line:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"dune-copasi-md config.ini\n"})}),"\n",(0,a.jsx)(n.h4,{id:"importing-cmake-targets",children:"Importing CMake targets"}),"\n",(0,a.jsxs)(n.p,{children:["If you additionally want to use the ",(0,a.jsx)(n.a,{href:"#application-programming-interface",children:"API"})," for\ndevelopment, you must find and consume the CMake targets from ",(0,a.jsx)(n.code,{children:"dune-copasi"}),"\nin your project as follows:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"# ...\nfind_package(dune-copasi IMPORTED REQUIRED)\ntarget_link_libraries(my_app PRIVATE dune-copasi::dune-copasi)\n# ...\n"})}),"\n",(0,a.jsxs)(n.p,{children:["If ",(0,a.jsx)(n.code,{children:"dune-copasi"})," was installed on a custom directory\n(e.g. using ",(0,a.jsx)(n.code,{children:"CMAKE_INSTALL_PREFIX=/opt/dune"}),"), it may be possible that you need to\npass such directory to the ",(0,a.jsx)(n.code,{children:"CMAKE_PREFIX_PATH"})," when building the project. This way,\nCMake can find our targets and configuration:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cmake -DCMAKE_PREFIX_PATH:PATH=/opt/dune /path/to/app/source/\n"})})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},9365:(e,n,i)=>{i.d(n,{A:()=>s});i(6540);var a=i(8215);const t={tabItem:"tabItem_Ymn6"};var r=i(4848);function s(e){let{children:n,hidden:i,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.A)(t.tabItem,s),hidden:i,children:n})}},1470:(e,n,i)=>{i.d(n,{A:()=>y});var a=i(6540),t=i(8215),r=i(3104),s=i(6347),l=i(205),o=i(7485),d=i(1682),c=i(679);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:i}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:i,attributes:a,default:t}}=e;return{value:n,label:i,attributes:a,default:t}}))}(i);return function(e){const n=(0,d.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,i])}function p(e){let{value:n,tabValues:i}=e;return i.some((e=>e.value===n))}function g(e){let{queryString:n=!1,groupId:i}=e;const t=(0,s.W6)(),r=function(e){let{queryString:n=!1,groupId:i}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!i)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:n,groupId:i});return[(0,o.aZ)(r),(0,a.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace({...t.location,search:n.toString()})}),[r,t])]}function m(e){const{defaultValue:n,queryString:i=!1,groupId:t}=e,r=h(e),[s,o]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:i}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=i.find((e=>e.default))??i[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:r}))),[d,u]=g({queryString:i,groupId:t}),[m,j]=function(e){let{groupId:n}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,r]=(0,c.Dv)(i);return[t,(0,a.useCallback)((e=>{i&&r.set(e)}),[i,r])]}({groupId:t}),x=(()=>{const e=d??m;return p({value:e,tabValues:r})?e:null})();(0,l.A)((()=>{x&&o(x)}),[x]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),j(e)}),[u,j,r]),tabValues:r}}var j=i(2303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=i(4848);function b(e){let{className:n,block:i,selectedValue:a,selectValue:s,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.a_)(),c=e=>{const n=e.currentTarget,i=o.indexOf(n),t=l[i].value;t!==a&&(d(n),s(t))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const i=o.indexOf(e.currentTarget)+1;n=o[i]??o[0];break}case"ArrowLeft":{const i=o.indexOf(e.currentTarget)-1;n=o[i]??o[o.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":i},n),children:l.map((e=>{let{value:n,label:i,attributes:r}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>o.push(e),onKeyDown:u,onClick:c,...r,className:(0,t.A)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":a===n}),children:i??n},n)}))})}function v(e){let{lazy:n,children:i,selectedValue:r}=e;
1const s=(Array.isArray(i)?i:[i]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function w(e){const n=m(e);return(0,f.jsxs)("div",{className:(0,t.A)("tabs-container",x.tabList),children:[(0,f.jsx)(b,{...n,...e}),(0,f.jsx)(v,{...n,...e})]})}function y(e){const n=(0,j.A)();return(0,f.jsx)(w,{...e,children:u(e.children)},String(n))}},4382:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/spatial-model-editor-e8ce255f5d48c17da41b6a804a4f54b3.png"},8453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>l});var a=i(6540);const t={},r=a.createContext(t);function s(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.