1"use strict";(self.webpackChunkdune_copasi_docusaurus=self.webpackChunkdune_copasi_docusaurus||[]).push([[4182],{514:(s,e,n)=>{n.r(e),n.d(e,{assets:()=>r,contentTitle:()=>t,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>d});var i=n(4848),a=n(8453);const l={id:"param_tree",title:"Parameter Tree",sidebar_label:"Parameter Tree"},t=void 0,c={id:"param_tree",title:"Parameter Tree",description:"Reference Keys",source:"@site/versioned_docs/version-v1.0.0/param_tree.md",sourceDirName:".",slug:"/param_tree",permalink:"/docs/v1.0.0/param_tree",draft:!1,unlisted:!1,editUrl:"https://gitlab.dune-project.org/copasi/dune-copasi/-/edit/master/doc/docusaurus/versioned_docs/version-v1.0.0/param_tree.md",tags:[],version:"v1.0.0",lastUpdatedBy:"Santiago Ospina De Los Rios",lastUpdatedAt:1713784883e3,frontMatter:{id:"param_tree",title:"Parameter Tree",sidebar_label:"Parameter Tree"},sidebar:"docs",previous:{title:"Ini File",permalink:"/docs/v1.0.0/ini_file"},next:{title:"Input Data",permalink:"/docs/v1.0.0/input_data"}},r={},d=[{value:"Reference Keys",id:"reference-keys",level:2},{value:"<code>[grid]</code>",id:"grid",level:3},{value:"<code>[model]</code>",id:"model",level:3},{value:"<code>[model.data]</code>",id:"modeldata",level:4},{value:"<code>[model.output]</code>",id:"modeloutput",level:4},{value:"<code>[model.time_stepping]</code>",id:"modeltime_stepping",level:4},{value:"<code>[model.newton]</code>",id:"modelnewton",level:4},{value:"<code>[model.newton.linear_search]</code>",id:"modelnewtonlinear_search",level:4},{value:"<code>[model.compartment]</code>",id:"modelcompartment",level:4},{value:"<code>[model.<comp_k>]</code>",id:"modelcomp_k",level:4},{value:"<code>[model.<comp_k>.initial]</code>",id:"modelcomp_kinitial",level:5},{value:"<code>[model.<comp_k>.diffusion]</code>",id:"modelcomp_kdiffusion",level:5},{value:"<code>[model.<comp_k>.reaction]</code>",id:"modelcomp_kreaction",level:5},{value:"<code>[model.<comp_k>.reaction.jacobian]</code>",id:"modelcomp_kreactionjacobian",level:5},{value:"<code>[model.<comp_k>.boundary]</code>",id:"modelcomp_kboundary",level:5},{value:"<code>[model.<comp_k>.boundary.<comp_l>.outflow]</code>",id:"modelcomp_kboundarycomp_loutflow",level:5},{value:"<code>[model.<comp_k>.boundary.<comp_l>.outflow.jacobian]</code>",id:"modelcomp_kboundarycomp_loutflowjacobian",level:5},{value:"<code>[logging]</code>",id:"logging",level:3},{value:"Runge-Kutta methods (<code>rk_id</code>)",id:"runge-kutta-methods-rk_id",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",h5:"h5",math:"math",mi:"mi",mo:"mo",mrow:"mrow",msub:"msub",msubsup:"msubsup",msup:"msup",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,a.R)(),...s.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h2,{id:"reference-keys",children:"Reference Keys"}),"\n",(0,i.jsxs)(e.p,{children:["A parameter tree is a collection of ",(0,i.jsx)(e.em,{children:"key\u2013value pairs"})," that may be grouped by\nsections. We call it a ",(0,i.jsx)(e.em,{children:"tree"})," because sections may contain also other sections.\nHere, we follow the ",(0,i.jsxs)(e.a,{href:"/docs/v1.0.0/ini_file",children:[(0,i.jsx)(e.code,{children:"DUNE"})," ini file convention"]})," to refer to\nsections and keywords. In addition, keywords between angle brackets (i.e.\n",(0,i.jsx)(e.code,{children:"<key>"}),") are references to ",(0,i.jsx)(e.strong,{children:"multiple"})," user-defined keywords of the same kind."]}),"\n",(0,i.jsx)(e.h3,{id:"grid",children:(0,i.jsx)(e.code,{children:"[grid]"})}),"\n",(0,i.jsxs)(e.p,{children:["The grid is entred by a ",(0,i.jsx)(e.a,{href:"http://gmsh.info/",children:"GMSH file"})," and should be formed by triangles and\nrectangles in 2D or tetraedra and hexahedra in 3D. It must define\n",(0,i.jsx)(e.em,{children:"physical group"}),"s, each referring to a different compartment.\nEach ",(0,i.jsx)(e.em,{children:"physical group"})," can only be formed the same collection of geometric types."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"dimension"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"integer"})}),(0,i.jsx)(e.td,{children:"The dimension of the grid"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"file"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"path"})}),(0,i.jsxs)(e.td,{children:[(0,i.jsx)(e.a,{href:"http://gmsh.info/",children:"GMSH v2 file"})," directory absolute or relative to the executable"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"initial_level"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"integer"})}),(0,i.jsx)(e.td,{children:"The refinement level to start the simulation with"})]})]})]}),"\n",(0,i.jsx)(e.admonition,{title:"Bug in GMSH reader",type:"caution",children:(0,i.jsxs)(e.p,{children:["The GMSH file should not contain the ",(0,i.jsx)(e.code,{children:"$PhysicalGroup"})," section at the\nbeginning of the file (this is a known bug in the ",(0,i.jsx)(e.code,{children:"dune-gr
1id"})," GMSH reader)."]})}),"\n",(0,i.jsx)(e.h3,{id:"model",children:(0,i.jsx)(e.code,{children:"[model]"})}),"\n",(0,i.jsx)(e.p,{children:"This section is the one that contains most of the aspects for simulation."}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"order"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"integer"})}),(0,i.jsxs)(e.td,{children:["Finite Element polynomial order. if ",(0,i.jsx)(e.code,{children:"order==0"})," FV else CG"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[data]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"List of input files"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[writer]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Options for vtk writer"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[time_stepping]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Options for time-stepping"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[compartment]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"List of compartmentes to simulate"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[<comp_k>]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Options for equations per each compartment"})]})]})]}),"\n",(0,i.jsx)(e.p,{children:"Whenever a compartment is coposed by cubes (2D) or hexahedra (3D), then such\ncompartment is modeled using Finite Volumes. These compartments are\nsuitable to model membranes processes."}),"\n",(0,i.jsxs)(e.p,{children:["The subsection ",(0,i.jsx)(e.code,{children:"[<comp_k>]"})," is a placeholder for the name of all\ncompartment given in ",(0,i.jsx)(e.code,{children:"[compartment]"}),". See ",(0,i.jsx)(e.code,{children:"[model.compartment]"})," subsection for\nmore information."]}),"\n",(0,i.jsx)(e.h4,{id:"modeldata",children:(0,i.jsx)(e.code,{children:"[model.data]"})}),"\n",(0,i.jsx)(e.p,{children:"This section will contain all the input files for the initial conditions of the\nmodel."}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"<data_name>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"path"})}),(0,i.jsx)(e.td,{children:"16-bit grayscale TIFF file"})]})})]}),"\n",(0,i.jsxs)(e.p,{children:["See ",(0,i.jsx)(e.a,{href:"/docs/v1.0.0/input_data",children:"Input Data"})," section for more information about usage."]}),"\n",(0,i.jsx)(e.h4,{id:"modeloutput",children:(0,i.jsx)(e.code,{children:"[model.output]"})}),"\n",(0,i.jsx)(e.p,{children:"The model output is controlled by the following parameters:"}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"file_path"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"string"})}),(0,i.jsx)(e.td,{children:"Name used to output VTK files"})]})})]}),"\n",(0,i.jsx)(e.h4,{id:"modeltime_stepping",children:(0,i.jsx)(e.code,{children:"[model.time_stepping]"})}),"\n",(0,i.jsx)(e.p,{children:"This section sets the settings for the evolution in time of the forward model."}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"rk_method"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"rk_id"})}),(0,i.jsx)(e.td,{children:"Runge-Kutta method"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"begin"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Initial time of the forward simulation"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"end"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Final time of the forward simulation"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"initial_step"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Time step at the beginning of the simulation"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"min_step"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Maximum time step allowed"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"max_step"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Minimum time step allowed"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"decrease_factor"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Time step decrease factor when time step fails"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"increase_factor"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Time step increase factor when time step succeeds"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[newton]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Parameters for the Newton method at each timestep"})]})]})]}),"\n",(0,i.jsxs)(e.p,{children:["The possible ",(0,i.jsx)(e.code,{children:"rk_id"}),"s can be found at the end of this document."]}),"\n",(0,i.jsx)(e.h4,{id:"modelnewton",children:(0,i.jsx)(e.code,{children:"[model.newton]"})}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"reduction"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Threshold for termination, relative to first linear defect"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"absolute_limit"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Threshold for termination, absolute to linear defect"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"min_linear_reduction"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"The linear reduction will be determined as minimum of this and the one needed to achieve second order newton convergence"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"fixed_linear_reduction"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"bool"})}),(0,i.jsxs)(e.td,{children:["Whenever ",(0,i.jsx)(e.code,{children:"true"}),", the linear reduction rate will always be fixed to ",(0,i.jsx)(e.code,{children:"min_linear_reduction"})]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"max_iterations"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"integer"})}),(0,i.jsx)(e.td,{children:"Maximum number of linear searches allowed"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"reassemble_threshold"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"If the reduction drops below this the linear operator is reassembled to ensure convergence"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"keep_matrix"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"bool"})}),(0,i.jsx)(e.td,{children:"Whether the jacobian matrix should be kept across time steps"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"force_iteration"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"bool"})}),(0,i.jsx)(e.td,{children:"Enforce first iteration even if required reduction is achieved"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[linear_search]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Parameters for linear search"})]})]})]}),"\n",(0,i.jsx)(e.h4,{id:"modelnewtonlinear_search",children:(0,i.jsx)(e.code,{children:"[model.newton.linear_search]"})}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"strategy"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"string"})}),(0,i.jsxs)(e.td,{children:[(0,i.jsx)(e.code,{children:"noLineSearch"})," or ",(0,i.jsx)(e.code,{children:"hackbuschReusken"})," or ",(0,i.jsx)(e.code,{children:"hackbuschReuskenAcceptBest"})]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"max_iterations"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"integer"})}),(0,i.jsx)(e.td,{children:"Maximum iterations on Hackbusch-Reuske
1n linear search"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"damping_factor"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"float"})}),(0,i.jsx)(e.td,{children:"Damping factor for Hackbusch-Reusken linear search"})]})]})]}),"\n",(0,i.jsx)(e.h4,{id:"modelcompartment",children:(0,i.jsx)(e.code,{children:"[model.compartment]"})}),"\n",(0,i.jsxs)(e.p,{children:["The compartment section is filled with ",(0,i.jsx)(e.code,{children:"key=value"})," pairs that assign a physical\ngroup id (",(0,i.jsx)(e.code,{children:"value"}),") to an compartment name (",(0,i.jsx)(e.code,{children:"key"}),")."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"<comp_k>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"integer"})}),(0,i.jsxs)(e.td,{children:["Physical group id assigned to ",(0,i.jsx)(e.code,{children:"<comp_k>"})," subdomain"]})]})})]}),"\n",(0,i.jsxs)(e.p,{children:["Each compartment id maps to a ",(0,i.jsx)(e.em,{children:"physical group"})," in the gmsh identifiers.\nAlthough the gmsh format allows you to name such physical groups.\nNotice that ",(0,i.jsx)(e.code,{children:"dune-copasi"})," uses 0-based\nindices while ",(0,i.jsx)(e.code,{children:"gmsh"})," uses 1-based indices. In other words,\n",(0,i.jsx)(e.code,{children:"<gmsh_physical_group> = <dune_copasi_compartment> + 1"}),"."]}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsxs)(e.p,{children:["Let's say that there is two ",(0,i.jsx)(e.em,{children:"physical groups"})," in our gmsh file\nand we are going to name them as ",(0,i.jsx)(e.code,{children:"nucleus"})," and ",(0,i.jsx)(e.code,{children:"cytoplasm"})," compartments:"]}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",children:"[model.compartments]\n # nucleus corresponds to the physical group 1 in the gmsh file\nnucleus = 0\n # cytoplasm corresponds to the physical group 2 in the gmsh file\ncytoplasm = 1\n\n# They then become available as new compartment subsections\n[model.nucleus]\n# Parameters for the nucleus compartment\n\n[model.cytoplasm]\n# Parameters for the nucleus compartment\n"})})]}),"\n",(0,i.jsx)(e.h4,{id:"modelcomp_k",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>]"})}),"\n",(0,i.jsxs)(e.p,{children:["Each compartment will define its own initial conditions,\nits diffusion-reaction system, etc. A set of ",(0,i.jsx)(e.em,{children:"variables"})," is be assigned to each\ncompartment. The amount ",(0,i.jsx)(e.em,{children:"variables"})," may be different on each compartment, but\nthe same namings must be used on all the ",(0,i.jsx)(e.code,{children:"[model.<comp_k>]"})," subsections."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[initial]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsxs)(e.td,{children:["List of ",(0,i.jsx)(e.em,{children:"variables"})," and their initial conditions"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[diffusion]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsxs)(e.td,{children:["List of ",(0,i.jsx)(e.em,{children:"variables"})," and their diffusion coefficient"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[reaction]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsxs)(e.td,{children:["List of ",(0,i.jsx)(e.em,{children:"variables"})," and their reaction networks"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[boundary]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsxs)(e.td,{children:["Definition of boundary fluxes on this ",(0,i.jsx)(e.code,{children:"<comp_k>"})]})]})]})]}
1),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kinitial",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.initial]"})}),"\n",(0,i.jsxs)(e.p,{children:["The ",(0,i.jsx)(e.code,{children:"initial"})," subsection allows the initialization for each of the ",(0,i.jsx)(e.em,{children:"variables"}),".\nExpressions in this section may contain ",(0,i.jsx)(e.a,{href:"/docs/v1.0.0/input_data",children:"Input Data"})," functions."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"<var>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsxs)(e.td,{children:["Math expression to initialize variable ",(0,i.jsx)(e.code,{children:"<var>"})]})]})})]}),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kdiffusion",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.diffusion]"})}),"\n",(0,i.jsxs)(e.p,{children:["The ",(0,i.jsx)(e.code,{children:"diffusion"})," subsection defines the self-diffusion coefficient associated\nwith each ",(0,i.jsx)(e.em,{children:"variable"}),"."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"<var>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsxs)(e.td,{children:["Diffusion math expression assigned to ",(0,i.jsx)(e.code,{children:"<var>"})]})]})})]}),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kreaction",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.reaction]"})}),"\n",(0,i.jsxs)(e.p,{children:["This subsection defines the reaction network associated with each ",(0,i.jsx)(e.em,{children:"variable"}),"."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"<var>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsxs)(e.td,{children:["Reaction network expression assigned to ",(0,i.jsx)(e.code,{children:"<var>"})]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[jacobian]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Jacobian expressions for compartment reaction networks"})]})]})]}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.em,{children:"Variables"})," (",(0,i.jsx)(e.code,{children:"<var>"}),"s) in this section differ from other math expressions in that\nall ",(0,i.jsx)(e.em,{children:"variables"})," names on this ",(0,i.jsx)(e.code,{children:"<comp_k>"})," are available to form the\nexpression."]}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsxs)(e.p,{children:["The variables ",(0,i.jsx)(e.code,{children:"u"})," and ",(0,i.jsx)(e.code,{children:"v"})," are available to each other for a subsection\n",(0,i.jsx)(e.code,{children:"[model.nucleus.reaction]"})]}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",children:"[model.nucleus.reaction]\nu = u*v\nv = u*v\n"})})]}),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kreactionjacobian",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.reaction.jacobian]"})}),"\n",(0,i.jsxs)(e.p,{children:["This subsection lists the\n",(0,i.jsx)(e.a,{href:"https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant",children:"jacobian matrix"}),"\nentries for the ",(0,i.jsx)(e.code,{children:"reaction"})," section. It must follow the syntax of\n",(0,i.jsx)(e.code,{children:"d<var_i>__d<var_j>"}),", which reads as the ",(0,i.jsxs)(e.em,{children:["partial derivative of ",(0,i.jsx)(e.code,{children:"<var_i>"})," with\nrespect to ",(0,i.jsx)(e.code,{children:"<var_j>"})]}),"."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"d<var_i>__d<var_j>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsx)(e.td,{children:"Reaction network jacobian entries"})]})})]}),"\n",(0,i.jsxs)(e.p,{children:["Similar to ",(0,i.jsx)(e.code,{children:"[model.<comp_k>.reaction]"}),", math expressions here allow all\ncompartmenet ",(0,i.jsx)(e.em,{children:"variables"})," to be used."]}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsxs)(e.p,{children:["The section ",(0,i.jsx)(e.code,{children:"[model.nucleus]"})," for a ",(0,i.jsx)(e.a,{href:"http://mrob.com/pub/comp/xmorphia/F420/F420-k610.html",children:"Gray-Scott model with F=0.0420 and\nk=0.0610"})," may look like\nthis:"]}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",children:"[model.nucleus.initial]\nu = 0.5\nv = (x>0) && (x<0.5) && (y>0.) && (y<0.5) ? 1 : 0\n\n[model.nucleus.diffusion]\nu = 2e-5\nv = 2e-5/2\n\n[model.nucleus.reaction]\nu = -u*v^2+0.0420*(1-u)\nv = u*v^2-(0.0420+0.0610)*v\n\n[model.nucleus.reaction.jacobian]\ndu__du = -v^2-0.0420\ndu__dv = -2*u*v\ndv__du = v^2\ndv__dv = 2*u*v-(0.0420+0.0610)\n"})})]}
1),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kboundary",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.boundary]"})}),"\n",(0,i.jsxs)(e.p,{children:["The boundary section encapsulates the information for the transmmission conditios\n",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msubsup,{children:[(0,i.jsx)(e.mi,{mathvariant:"script",children:"T"}),(0,i.jsx)(e.mo,{children:"\u22c6"}),(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{children:"k"}),(0,i.jsx)(e.mi,{children:"l"})]})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\mathcal{T}^{kl}_\\star"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"1.0961em",verticalAlign:"-0.247em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathcal",style:{marginRight:"0.25417em"},children:"T"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,i.jsxs)(e.span,{className:"vlist-r",children:[(0,i.jsxs)(e.span,{className:"vlist",style:{height:"0.8491em"},children:[(0,i.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.2542em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mbin mtight",children:"\u22c6"})})]}),(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsxs)(e.span,{className:"mord mtight",children:[(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"})]})})]})]}),(0,i.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,i.jsx)(e.span,{})})})]})})]})]})})]}),". It contains subsections for every other compartment\n",(0,i.jsx)(e.code,{children:"<comp_l>"})," making reference to the membrane defined by ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u0393"}),(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{children:"k"}),(0,i.jsx)(e.mi,{children:"l"})]})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\Gamma^{kl}"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord",children:"\u0393"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsxs)(e.span,{className:"mord mtight",children:[(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"})]})})]})})})})})]})]})})]}),", where\n",(0,i.jsx)(e.code,{children:"<comp_k>"})," corresponds to the interior ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsx)(e.mi,{children:"k"})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"k"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.6944em"}}),(0,i.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"})]})})]}),"-th domain ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u03a9"}),(0,i.jsx)(e.mi,{children:"k"})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\Omega^k"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord",children:"\u03a9"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})})]})})})})})]})]})})]})," and ",(0,i.jsx)(e.code,{children:"<comp_l>"}),"\nto the exterior ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsx)(e.mi,{children:"l"})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"l"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.6944em"}}),(0,i.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"})]})})]}),"-th domain ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u03a9"}),(0,i.jsx)(e.mi,{children:"l"})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\Omega^l"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord",children:"\u03a9"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"})})]})})})})})]})]})})]}),"."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsx)(e.tbody,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[<comp_l>.outflow]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsxs)(e.td,{children:["Outflow for membranes between ",(0,i.jsx)(e.code,{children:"<comp_k>"})," and ",(0,i.jsx)(e.code,{children:"<comp_l>"})]})]})})]}),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kboundarycomp_loutflow",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.boundary.<comp_l>.outflow]"})}),"\n",(0,i.jsxs)(e.p,{children:["This section contains the transmmission condition ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msubsup,{children:[(0,i.jsx)(e.mi,{mathvariant:"script",children:"T"}),(0,i.jsx)(e.mi,{children:"i"}),(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{children:"k"}),(0,i.jsx)(e.mi,{children:"l"})]})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\mathcal{T}^{kl}_i"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"1.1078em",verticalAlign:"-0.2587em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathcal",style:{marginRight:"0.25417em"},children:"T"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,i.jsxs)(e.span,{className:"vlist-r",children:[(0,i.jsxs)(e.span,{className:"vlist",style:{height:"0.8491em"}
1,children:[(0,i.jsxs)(e.span,{style:{top:"-2.4413em",marginLeft:"-0.2542em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"})})]}),(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsxs)(e.span,{className:"mord mtight",children:[(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"})]})})]})]}),(0,i.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.2587em"},children:(0,i.jsx)(e.span,{})})})]})})]})]})})]})," for each\n",(0,i.jsx)(e.em,{children:"variable"}),", ",(0,i.jsx)(e.code,{children:"<var_i>"})," in ",(0,i.jsx)(e.code,{children:"<comp_k>"}),"."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"<var_i>"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsxs)(e.td,{children:["Transmission condition for ",(0,i.jsx)(e.code,{children:"<var_i>"})]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"[jacobian]"})}),(0,i.jsx)(e.td,{children:"subsection"}),(0,i.jsx)(e.td,{children:"Outflow jacobian entries"})]})]})]}),"\n",(0,i.jsxs)(e.p,{children:["The math expressions in this subsection are allowed to use all ",(0,i.jsx)(e.em,{children:"variables"})," from\nboth ",(0,i.jsx)(e.code,{children:"<comp_k>"})," and ",(0,i.jsx)(e.code,{children:"<comp_l>"})," compartments. Because they may have the same\nname, the parser distinguish them by assigin a ",(0,i.jsx)(e.code,{children:"_i"})," (inside) sufix for variables\nin ",(0,i.jsx)(e.code,{children:"<comp_k>"})," and ",(0,i.jsx)(e.code,{children:"_o"})," (outside) for variables in ",(0,i.jsx)(e.code,{children:"<comp_l>"}),". Additionally,\ntheir normal gradients, ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u2207"}),(0,i.jsxs)(e.msubsup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"i"}),(0,i.jsx)(e.mi,{children:"k"})]}),(0,i.jsx)(e.mo,{children:"\u22c5"}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"bold",children:"n"}),(0,i.jsx)(e.mi,{children:"k"})]})]}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\nabla u_i^k\\cdot \\mathbf{n}^k"})]})})}),(0,i.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"1.1078em",verticalAlign:"-0.2587em"}}),(0,i.jsx)(e.span,{className:"mord",children:"\u2207"}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,i.jsxs)(e.span,{className:"vlist-r",children:[(0,i.jsxs)(e.span,{className:"vlist",style:{height:"0.8491em"},children:[(0,i.jsxs)(e.span,{style:{top:"-2.4413em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"})})]}),(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})})]})]}),(0,i.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.2587em"},children:(0,i.jsx)(e.span,{})})})]})})]}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,i.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathbf",children:"n"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})})]})})})})})]})]})]})]})," and\n",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u2207"}),(0,i.jsxs)(e.msubsup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"j"}),(0,i.jsx)(e.mi,{children:"l"})]}),(0,i.jsx)(e.mo,{children:"\u22c5"}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"bold",children:"n"}),(0,i.jsx)(e.mi,{children:"l"})]})]}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\nabla u_j^l\\cdot \\mathbf{n}^l"})]})})}),(0,i.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"1.2439em",verticalAlign:"-0.3948em"}}),(0,i.jsx)(e.span,{className:"mord",children:"\u2207"}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,i.jsxs)(e.span,{className:"vlist-r",children:[(0,i.jsxs)(e.span,{className:"vlist",style:{height:"0.8491em"},children:[(0,i.jsxs)(e.span,{style:{top:"-2.4413em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.05724em"},children:"j"})})]}),(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"})})]})]}),(0,i.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.3948em"},children:(0,i.jsx)(e.span,{})})})]})})]}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,i.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathbf",children:"n"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"})})]})})})})})]})]})]})]}),", are also available as ",(0,i.jsx)(e.code,{children:"d<var_i>__dn"}),". Here,\n",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"bold",children:"n"}),(0,i.jsx)(e.mi,{children:"k"})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\mathbf{n}^k"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathbf",children:"n"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})})]})})})})})]})]})})]})," is the unit outer normal vector of ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u03a9"}),(0,i.jsx)(e.mi,{children:"k"})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\Omega^k"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.8491em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord",children:"\u03a9"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.8491em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})})]})})})})})]})]})})]})," on the\nintersection."]}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsxs)(e.p,{children:["Let's say that our configuration file defines two compartments, ",(0,i.jsx)(e.code,{children:"nucleus"})," (",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsx)(e.mi,{children:"n"})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,i.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]}),")\nand ",(0,i.jsx)(e.code,{children:"cytoplasm"})," (",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsx)(e.mi,{children:"c"})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"c"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,i.jsx)(e.span,{className:"mord mathnormal",children:"c"})]})})]}),"), and both of them contain a variable ",(0,i.jsx)(e.code,{children:"u"})," (",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"n"})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"u^n"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.6644em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})})})})})]})]})})]})," and\n",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsx)(e.mrow,{children:(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"c"})]})}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"u^c"})]})})}),(0,i.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.6644em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})})})})})]})]})})]}),"). Then, a boundary condition ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsxs)(e.mrow,{children:[(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"script",children:"T"}),(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{children:"n"}),(0,i.jsx)(e.mi,{children:"c"})]})]}),(0,i.jsx)(e.mo,{stretchy:"false",children:"("}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"n"})]}),(0,i.jsx)(e.mo,{separator:"true",children:","}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"c"})]}),(0,i.jsx)(e.mo,{stretchy:"false",children:")"}),(0,i.jsx)(e.mo,{children:"="}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"n"})]}),(0,i.jsx)(e.mo,{children:"\u2212"}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"c"})]})]}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\mathcal{T}^{nc}(u^n,u^c) =\nu^n-u^c"})]})})}),(0,i.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathcal",style:{marginRight:"0.25417em"},children:"T"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsxs)(e.span,{className:"mord mtight",children:[(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})]})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mopen",children:"("}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mpunct",children:","}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mclose",children:")"}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,i.jsx)(e.span,{className:"mrel",children:"="}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.7477em",verticalAlign:"-0.0833em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,i.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.6644em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})})})})})]})]})]})]})," for the nucleus and ",(0,i.jsxs)(e.span,{className:"katex",children:[(0,i.jsx)(e.span,{className:"katex-mathml",children:(0,i.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(e.semantics,{children:[(0,i.jsxs)(e.mrow,{children:[(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"script",children:"T"}),(0,i.jsxs)(e.mrow,{children:[(0,i.jsx)(e.mi,{children:"c"}),(0,i.jsx)(e.mi,{children:"n"})]})]}),(0,i.jsx)(e.mo,{stretchy:"false",children:"("}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"c"})]}),(0,i.jsx)(e.mo,{separator:"true",children:","}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"n"})]}),(0,i.jsx)(e.mo,{stretchy:"false",children:")"}),(0,i.jsx)(e.mo,{children:"="}),(0,i.jsx)(e.mo,{children:"\u2212"}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{mathvariant:"sans-serif",children:"D"}),(0,i.jsx)(e.mi,{children:"n"})]}),(0,i.jsx)(e.mi,{mathvariant:"normal",children:"\u2207"}),(0,i.jsxs)(e.msup,{children:[(0,i.jsx)(e.mi,{children:"u"}),(0,i.jsx)(e.mi,{children:"n"})]}),(0,i.jsx)(e.mo,{children:"\u22c5"}),(0,i.jsxs)(e.msub,{children:[(0,i.jsx)(e.mi,{mathvariant:"bold",children:"n"}),(0,i.jsx)(e.mi,{children:"T"})]})]}),(0,i.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\mathcal{T}^{cn}(u^c,u^n) =\n-\\mathsf{D}^n\\nabla u^n\\cdot \\mathbf{n}_T"})]})})}),(0,i.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathcal",style:{marginRight:"0.25417em"},children:"T"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsxs)(e.span,{className:"mord mtight",children:[(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"}),(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})]})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mopen",children:"("}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mpunct",children:","}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mclose",children:")"}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,i.jsx)(e.span,{className:"mrel",children:"="}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.7778em",verticalAlign:"-0.0833em"}}),(0,i.jsx)(e.span,{className:"mord",children:"\u2212"}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathsf",children:"D"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mord",children:"\u2207"}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsx)(e.span,{className:"vlist-t",children:(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.6644em"},children:(0,i.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})})})})})]}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,i.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,i.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,i.jsxs)(e.span,{className:"base",children:[(0,i.jsx)(e.span,{className:"strut",style:{height:"0.5944em",verticalAlign:"-0.15em"}}),(0,i.jsxs)(e.span,{className:"mord",children:[(0,i.jsx)(e.span,{className:"mord mathbf",children:"n"}),(0,i.jsx)(e.span,{className:"msupsub",children:(0,i.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,i.jsxs)(e.span,{className:"vlist-r",children:[(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"}
1,children:(0,i.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,i.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,i.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,i.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.13889em"},children:"T"})})]})}),(0,i.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,i.jsx)(e.span,{className:"vlist-r",children:(0,i.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,i.jsx)(e.span,{})})})]})})]})]})]})]})," for the\ncytoplasm is"]}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",children:"[model.nucleus.boundary.cytoplasm.outflow]\n# Flux proportional to the difference of species\nu = u_i-u_o\n\n[model.cytoplasm.boundary.nucleus.outflow]\n# Flux in cytoplasm equal to the outflow of u in nucleus (assume D = 0.1)\nu = 0.1 * du_o__dn\n"})})]}),"\n",(0,i.jsx)(e.admonition,{type:"caution",children:(0,i.jsxs)(e.p,{children:["For compartments solved with Finite Volume method, the normal gradient\n",(0,i.jsx)(e.code,{children:"d<var_i>__dn"})," is only available for variables that exist on both compartments.\nOtherwise, it will be evaluated to\n",(0,i.jsx)(e.a,{href:"https://en.wikipedia.org/wiki/NaN#Quiet_NaN",children:"NaN"}),"."]})}),"\n",(0,i.jsx)(e.h5,{id:"modelcomp_kboundarycomp_loutflowjacobian",children:(0,i.jsx)(e.code,{children:"[model.<comp_k>.boundary.<comp_l>.outflow.jacobian]"})}),"\n",(0,i.jsxs)(e.p,{children:["The jacobian for the outflow works similarly as the one for the reaction. That\nis, all ",(0,i.jsx)(e.em,{children:"variables"})," from inside and outside as well as their normal gradients\nare available. Additionally, you have to distinguish between jacobians with\nrespect to inside and outside ",(0,i.jsx)(e.em,{children:"variables"}),"."]}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Key"}),(0,i.jsx)(e.th,{children:"Type"}),(0,i.jsx)(e.th,{children:"Description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"d<var_i>__d<var_j>_i"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsx)(e.td,{children:"Self-domain jacobian entries"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"d<var_i>__d<var_j>_o"})}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"math_expr"})}),(0,i.jsx)(e.td,{children:"Cross-domain jacobian entries"})]})]})]}),"\n",(0,i.jsx)(e.p,{children:"Now, since in most cases these jacobians are zero, there is only need to specify\nthe non-zero entries. The rest will be assumed to be zero."}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsx)(e.p,{children:"Following the example for the outflow, its jacobian would be"}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",children:"[model.nucleus.boundary.cytoplasm.outflow.jacobian]\ndu__du_i = 1\ndu__du_o = -1\n\n[model.cytoplasm.boundary.nucleus.outflow.jacobian]\n# du__du_i = 0\n# du__du_o = 0\n"})})]}),"\n",(0,i.jsx)(e.h3,{id:"logging",children:(0,i.jsx)(e.code,{children:"[logging]"})}),"\n",(0,i.jsx)(e.admonition,{title:"Work in progress",type:"caution"}),"\n",(0,i.jsxs)(e.p,{children:["The logging settings are directly forwarded to the ",(0,i.jsx)(e.code,{children:"dune-logging"})," module. Please\ncheck its doxygen documentation for detailed information."]}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsx)(e.p,{children:"A simple configuration is the following:"}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",children:"[logging]\n# possible levels: off, critical, error, warn, notice, info, debug, trace, all\ndefault.level = info\n\n[logging.sinks.stdout]\npattern = [{reldays:0>2}-{reltime:8%T}] [{backend}] {msg}\n"})})]}),"\n",(0,i.jsxs)(e.h2,{id:"runge-kutta-methods-rk_id",children:["Runge-Kutta methods (",(0,i.jsx)(e.code,{children:"rk_id"}),")"]}),"\n",(0,i.jsx)(e.p,{children:"The following are the accepted Runge-Kutta methods in our time stepping schemes"}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.th,{children:"Method"})})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"explicit_euler"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"implicit_euler"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"heun"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"shu_3"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"runge_kutta_4"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"alexander_2"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"fractional_step_theta"})})}),(0,i.jsx)(e.tr,{children:(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"alexander_3"})})})]})]}),"\n",(0,i.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,i.jsxs)(e.admonition,{title:"Example",type:"tip",children:[(0,i.jsxs)(e.p,{children:["An example of an ini file with all the parameters required by\n",(0,i.jsx)(e.code,{children:"dune-copasi"})," for the ",(0,i.jsx)(e.a,{href:"http://mrob.com/pub/comp/xmorphia/F420/F420-k610.html",children:"Gray-Scott model"}),"\nis"]}),(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-ini",metastring:'title="config.ini"',children:"[grid]\ndimension = 2\nfile = path/to/grid.msh\ninitial_level = 1\n\n[model]\norder = 1\n\n[model.data]\ninput_data = path/to/image.tiff\n\n[model.time_stepping]\nrk_method = alexander_2\nbegin = 0\nend = 1\ninitial_step = 0.3\nmin_step
1= 1e-3\nmax_step = 0.35\ndecrease_factor = 0.5\nincrease_factor = 1.5\n\n[model.compartments]\ndomain = 0\n\n[model.domain.initial]\nu = 0.5 + input_data(x,y)\nv = (x>0) && (x<0.5) && (y>0.) && (y<0.5) ? 1 : 0\n\n[model.domain.diffusion]\nu = 2e-5\nv = 2e-5/2\n\n[model.domain.reaction]\nu = -u*v^2+0.0420*(1-u)\nv = u*v^2-(0.0420+0.0610)*v\n\n[model.domain.reaction.jacobian]\ndu__du = -v^2-0.0420\ndu__dv = -2*u*v\ndv__du = v^2\ndv__dv = 2*u*v-(0.0420+0.0610)\n\n[model.writer]\nfile_path = gray_scott\n"})})]})]})}function m(s={}){const{wrapper:e}={...(0,a.R)(),...s.components};return e?(0,i.jsx)(e,{...s,children:(0,i.jsx)(h,{...s})}):h(s)}},8453:(s,e,n)=>{n.d(e,{R:()=>t,x:()=>c});var i=n(6540);const a={},l=i.createContext(a);function t(s){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function c(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(a):s.components||a:t(s.components),i.createElement(l.Provider,{value:e},s.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.