-
-
Notifications
You must be signed in to change notification settings - Fork 214
/
Copy pathindex.html
2 lines (2 loc) · 18.1 KB
/
index.html
1
2
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Internal Details · ModelingToolkit.jl</title><meta name="title" content="Internal Details · ModelingToolkit.jl"/><meta property="og:title" content="Internal Details · ModelingToolkit.jl"/><meta property="twitter:title" content="Internal Details · ModelingToolkit.jl"/><meta name="description" content="Documentation for ModelingToolkit.jl."/><meta property="og:description" content="Documentation for ModelingToolkit.jl."/><meta property="twitter:description" content="Documentation for ModelingToolkit.jl."/><meta property="og:url" content="https://docs.sciml.ai/ModelingToolkit/stable/internals/"/><meta property="twitter:url" content="https://docs.sciml.ai/ModelingToolkit/stable/internals/"/><link rel="canonical" href="https://docs.sciml.ai/ModelingToolkit/stable/internals/"/><script data-outdated-warner src="../assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.050/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../search_index.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/catppuccin-mocha.css" data-theme-name="catppuccin-mocha"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/catppuccin-macchiato.css" data-theme-name="catppuccin-macchiato"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/catppuccin-frappe.css" data-theme-name="catppuccin-frappe"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/catppuccin-latte.css" data-theme-name="catppuccin-latte"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="ModelingToolkit.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../">ModelingToolkit.jl</a></span></div><button class="docs-search-query input is-rounded is-small is-clickable my-2 mx-auto py-1 px-2" id="documenter-search-query">Search docs (Ctrl + /)</button><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/ode_modeling/">Getting Started with ModelingToolkit.jl</a></li><li><span class="tocitem">Tutorials</span><ul><li><a class="tocitem" href="../tutorials/acausal_components/">Acausal Component-Based Modeling</a></li><li><a class="tocitem" href="../tutorials/nonlinear/">Modeling Nonlinear Systems</a></li><li><a class="tocitem" href="../tutorials/initialization/">Initialization of ODESystems</a></li><li><a class="tocitem" href="../tutorials/optimization/">Modeling Optimization Problems</a></li><li><a class="tocitem" href="../tutorials/modelingtoolkitize/">Modelingtoolkitize: Automatically Translating Numerical to Symbolic Code</a></li><li><a class="tocitem" href="../tutorials/programmatically_generating/">Programmatically Generating and Scripting ODESystems</a></li><li><a class="tocitem" href="../tutorials/stochastic_diffeq/">Modeling with Stochasticity</a></li><li><a class="tocitem" href="../tutorials/discrete_system/">(Experimental) Modeling Discrete Systems</a></li><li><a class="tocitem" href="../tutorials/parameter_identifiability/">Parameter Identifiability in ODE Models</a></li><li><a class="tocitem" href="../tutorials/change_independent_variable/">Changing the independent variable of ODEs</a></li><li><a class="tocitem" href="../tutorials/bifurcation_diagram_computation/">Bifurcation Diagrams</a></li><li><a class="tocitem" href="../tutorials/SampledData/">Clocks and Sampled-Data Systems</a></li><li><a class="tocitem" href="../tutorials/domain_connections/">Domains</a></li><li><a class="tocitem" href="../tutorials/callable_params/">Callable parameters and interpolating data</a></li><li><a class="tocitem" href="../tutorials/linear_analysis/">Linear Analysis</a></li><li><a class="tocitem" href="../tutorials/fmi/">Importing FMUs</a></li></ul></li><li><span class="tocitem">Examples</span><ul><li><input class="collapse-toggle" id="menuitem-4-1" type="checkbox"/><label class="tocitem" for="menuitem-4-1"><span class="docs-label">Basic Examples</span><i class="docs-chevron"></i></label><ul class="collapsed"><li><a class="tocitem" href="../examples/higher_order/">Automatic Transformation of Nth Order ODEs to 1st Order ODEs</a></li><li><a class="tocitem" href="../examples/spring_mass/">Component-Based Modeling of a Spring-Mass System</a></li><li><a class="tocitem" href="../examples/modelingtoolkitize_index_reduction/">Automated Index Reduction of DAEs</a></li><li><a class="tocitem" href="../examples/remake/">Optimizing through an ODE solve and re-creating MTK Problems</a></li></ul></li><li><input class="collapse-toggle" id="menuitem-4-2" type="checkbox"/><label class="tocitem" for="menuitem-4-2"><span class="docs-label">Advanced Examples</span><i class="docs-chevron"></i></label><ul class="collapsed"><li><a class="tocitem" href="../examples/tearing_parallelism/">Exposing More Parallelism By Tearing Algebraic Equations in ODESystems</a></li><li><a class="tocitem" href="../examples/sparse_jacobians/">Automated Sparse Analytical Jacobians</a></li><li><a class="tocitem" href="../examples/perturbation/">Symbolic-Numeric Perturbation Theory for ODEs</a></li></ul></li></ul></li><li><span class="tocitem">Basics</span><ul><li><a class="tocitem" href="../basics/AbstractSystem/">The AbstractSystem Interface</a></li><li><a class="tocitem" href="../basics/ContextualVariables/">Contextual Variable Types</a></li><li><a class="tocitem" href="../basics/Variable_metadata/">Symbolic Metadata</a></li><li><a class="tocitem" href="../basics/Composition/">Composing Models and Building Reusable Components</a></li><li><a class="tocitem" href="../basics/Events/">Event Handling and Callback Functions</a></li><li><a class="tocitem" href="../basics/Linearization/">Linearization</a></li><li><a class="tocitem" href="../basics/InputOutput/">Input output</a></li><li><a class="tocitem" href="../basics/MTKLanguage/">ModelingToolkit Language: Modeling with <code>@mtkmodel</code>, <code>@connectors</code> and <code>@mtkbuild</code></a></li><li><a class="tocitem" href="../basics/Validation/">Model Validation and Units</a></li><li><a class="tocitem" href="../basics/Debugging/">Debugging</a></li><li><a class="tocitem" href="../basics/DependencyGraphs/">Dependency Graphs</a></li><li><a class="tocitem" href="../basics/Precompilation/">Working with Precompilation and Binary Building</a></li><li><a class="tocitem" href="../basics/FAQ/">Frequently Asked Questions</a></li></ul></li><li><span class="tocitem">System Types</span><ul><li><a class="tocitem" href="../systems/ODESystem/">ODESystem</a></li><li><a class="tocitem" href="../systems/SDESystem/">SDESystem</a></li><li><a class="tocitem" href="../systems/JumpSystem/">JumpSystem</a></li><li><a class="tocitem" href="../systems/NonlinearSystem/">NonlinearSystem</a></li><li><a class="tocitem" href="../systems/OptimizationSystem/">OptimizationSystem</a></li><li><a class="tocitem" href="../systems/PDESystem/">PDESystem</a></li><li><a class="tocitem" href="../systems/DiscreteSystem/">DiscreteSystem</a></li><li><a class="tocitem" href="../systems/ImplicitDiscreteSystem/">ImplicitDiscreteSystem</a></li></ul></li><li><a class="tocitem" href="../comparison/">Comparison of ModelingToolkit vs Equation-Based and Block Modeling Languages</a></li><li class="is-active"><a class="tocitem" href>Internal Details</a><ul class="internal"><li><a class="tocitem" href="#Observables-and-Variable-Elimination"><span>Observables and Variable Elimination</span></a></li><li><a class="tocitem" href="#Preparing-a-system-for-simulation"><span>Preparing a system for simulation</span></a></li><li><a class="tocitem" href="#Creating-an-MTKParameters-object"><span>Creating an <code>MTKParameters</code> object</span></a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><a class="docs-sidebar-button docs-navbar-link fa-solid fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Internal Details</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Internal Details</a></li></ul></nav><div class="docs-right"><a class="docs-navbar-link" href="https://github.com/SciML/ModelingToolkit.jl" title="View the repository on GitHub"><span class="docs-icon fa-brands"></span><span class="docs-label is-hidden-touch">GitHub</span></a><a class="docs-navbar-link" href="https://github.com/SciML/ModelingToolkit.jl/blob/master/docs/src/internals.md" title="Edit source on GitHub"><span class="docs-icon fa-solid"></span></a><a class="docs-settings-button docs-navbar-link fa-solid fa-gear" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-article-toggle-button fa-solid fa-chevron-up" id="documenter-article-toggle-button" href="javascript:;" title="Collapse all docstrings"></a></div></header><article class="content" id="documenter-page"><h1 id="Internal-Details"><a class="docs-heading-anchor" href="#Internal-Details">Internal Details</a><a id="Internal-Details-1"></a><a class="docs-heading-anchor-permalink" href="#Internal-Details" title="Permalink"></a></h1><p>This is a page for detailing some of the inner workings to help future contributors to the library.</p><h2 id="Observables-and-Variable-Elimination"><a class="docs-heading-anchor" href="#Observables-and-Variable-Elimination">Observables and Variable Elimination</a><a id="Observables-and-Variable-Elimination-1"></a><a class="docs-heading-anchor-permalink" href="#Observables-and-Variable-Elimination" title="Permalink"></a></h2><p>In the variable “elimination” algorithms, what is actually done is that variables are removed from being unknowns and equations are moved into the <code>observed</code> category of the system. The <code>observed</code> equations are explicit algebraic equations which are then substituted out to completely eliminate these variables from the other equations, allowing the system to act as though these variables no longer exist.</p><p>However, a user may want to interact with such variables, for example, plotting their output. For this reason, these relationships are stored, and are then used to generate the <code>observed</code> equation found in the <code>SciMLFunction</code> interface, so that <code>sol[x]</code> lazily reconstructs the observed variable when necessary. In this sense, there is an equivalence between observables and the variable elimination system.</p><p>The procedure for variable elimination inside <a href="../systems/ODESystem/#ModelingToolkit.structural_simplify"><code>structural_simplify</code></a> is</p><ol><li><a href="@ref"><code>ModelingToolkit.initialize_system_structure</code></a>.</li><li><a href="@ref"><code>ModelingToolkit.alias_elimination</code></a>. This step moves equations into <code>observed(sys)</code>.</li><li><a href="../systems/ODESystem/#ModelingToolkit.StructuralTransformations.dae_index_lowering"><code>ModelingToolkit.dae_index_lowering</code></a> by means of <a href="@ref"><code>pantelides!</code></a> (if the system is an <a href="../systems/ODESystem/#ODESystem"><code>ODESystem</code></a>).</li><li><a href="../systems/ODESystem/#ModelingToolkit.StructuralTransformations.tearing"><code>ModelingToolkit.tearing</code></a>.</li></ol><h2 id="Preparing-a-system-for-simulation"><a class="docs-heading-anchor" href="#Preparing-a-system-for-simulation">Preparing a system for simulation</a><a id="Preparing-a-system-for-simulation-1"></a><a class="docs-heading-anchor-permalink" href="#Preparing-a-system-for-simulation" title="Permalink"></a></h2><p>Before a simulation or optimization can be performed, the symbolic equations stored in an <a href="@ref"><code>AbstractSystem</code></a> must be converted into executable code. This step typically occurs after the simplification explained above, and is performed when an instance of a <a href="@ref"><code>SciMLBase.AbstractSciMLProblem</code></a>, such as a <a href="../systems/ODESystem/#SciMLBase.ODEProblem-Tuple{ModelingToolkit.AbstractODESystem, Vararg{Any}}"><code>ODEProblem</code></a>, is constructed. The call chain typically looks like this, with the function names in the case of an <code>ODESystem</code> indicated in parentheses</p><ol><li>Problem constructor (<a href="../systems/ODESystem/#SciMLBase.ODEProblem-Tuple{ModelingToolkit.AbstractODESystem, Vararg{Any}}"><code>ODEProblem</code></a>)</li><li>Build an <code>DEFunction</code> (<a href="@ref"><code>process_DEProblem</code></a> -> <a href="../systems/ODESystem/#SciMLBase.ODEFunction-Tuple{ModelingToolkit.AbstractODESystem, Vararg{Any}}"><code>ODEFunction</code></a></li><li>Write actual executable code (<a href="@ref"><code>generate_function</code></a> or <a href="@ref"><code>generate_custom_function</code></a>)</li></ol><p>Apart from <a href="@ref"><code>generate_function</code></a>, which generates the dynamics function, <code>ODEFunction</code> also builds functions for observed equations (<code>build_explicit_observed_function</code>) and Jacobians (<code>generate_jacobian</code>) etc. These are all stored in the <code>ODEFunction</code>.</p><h2 id="Creating-an-MTKParameters-object"><a class="docs-heading-anchor" href="#Creating-an-MTKParameters-object">Creating an <code>MTKParameters</code> object</a><a id="Creating-an-MTKParameters-object-1"></a><a class="docs-heading-anchor-permalink" href="#Creating-an-MTKParameters-object" title="Permalink"></a></h2><p>It may be useful to create a parameter object without creating the problem. For this purpose, the <code>MTKParameters</code> constructor is exposed as public API.</p><article class="docstring"><header><a class="docstring-article-toggle-button fa-solid fa-chevron-down" href="javascript:;" title="Collapse docstring"></a><a class="docstring-binding" id="ModelingToolkit.MTKParameters" href="#ModelingToolkit.MTKParameters"><code>ModelingToolkit.MTKParameters</code></a> — <span class="docstring-category">Type</span><span class="is-flex-grow-1 docstring-article-toggle-button" title="Collapse docstring"></span></header><section><div><pre><code class="language-julia hljs">function MTKParameters(sys::AbstractSystem, p, u0 = Dict(); t0 = nothing)</code></pre><p>Create an <code>MTKParameters</code> object for the system <code>sys</code>. <code>p</code> (<code>u0</code>) are symbolic maps from parameters (unknowns) to their values. The values can also be symbolic expressions, which are evaluated given the values of other parameters/unknowns. <code>u0</code> is only required if the values of parameters depend on the unknowns. <code>t0</code> is the initial time, for time- dependent systems. It is only required if the symbolic expressions also use the independent variable of the system.</p><p>This requires that <code>complete</code> has been called on the system (usually via <code>structural_simplify</code> or <code>@mtkbuild</code>) and the keyword <code>split = true</code> was passed (which is the default behavior).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fe19d26ce81115f3c6cc98c7820ca108e4108317/src/systems/parameter_buffer.jl#L15-L28">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../comparison/">« Comparison of ModelingToolkit vs Equation-Based and Block Modeling Languages</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.9.0 on <span class="colophon-date" title="Sunday 30 March 2025 12:52">Sunday 30 March 2025</span>. Using Julia version 1.10.9.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>