{"data":{"markdownRemark":{"html":"<p>This will provide an overview of the components and features available using System Dynamics (SD) modelling in the Simudyne SDK.</p>\n<h3 id=\"defining-a-model\"><a href=\"#defining-a-model\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Defining a Model</h3>\n<p>This is simply making sure your main model class extends from <code class=\"language-text\">SystemDynamicsModel</code> </p>\n<h5 class=\"ui top attached header\">Creating a Model (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>sdm<span class=\"token punctuation\">.</span>SystemDynamicsModel<span class=\"token punctuation\">;</span> \n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MyModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"model-settings\"><a href=\"#model-settings\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Model Settings</h3>\n<p>While you're able to use existing annotations for defining model settings, System Dynamics has a defined model settings annotation in <code class=\"language-text\">SystemDynamicsSettings</code>.</p>\n<p>At the moment this is used primarily to define the 'resolution' of the model with the default set at 1.</p>\n<h5 class=\"ui top attached header\">Setting a Resolution of 4 (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>sdm<span class=\"token punctuation\">.</span>SystemDynamicsModel<span class=\"token punctuation\">;</span> \n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>sdm<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>SystemDynamicsSettings<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@SystemDynamicsSettings</span><span class=\"token punctuation\">(</span>resolution <span class=\"token operator\">=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MyModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"stock\"><a href=\"#stock\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Stock</h3>\n<p>When annotating a double value as a Stock (it's generally good practice to use doubles in SD modelling especially at higher resolutions) while you can set a name parameter this is not currently used by the console.</p>\n<p>You can, however, set a boolean called <code class=\"language-text\">nonNegative</code> (default = false) to true. This will alter the behaviour of your stock &#x26; flow model. In short, when the values of a stock are to be manipulated by a flow this puts in a hard block such that a flow cannot take from this stock, and that it will not go below 0.</p>\n<div class=\"ui segment info message\">\n  <h4>Non-Negative Processing</h4>\nIf you have two values taking from a stock set to Non-Negative there is the potential that changes to your model will alter which flow 'gets there first' if there are no dependency conflicts. NonNegative is meant to be a 'shortcut' simplification to accurately model representations of real world stocks.\n</div>\n<h5 class=\"ui top attached header\">Creating Stocks (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> StockA <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@Stock</span><span class=\"token punctuation\">(</span>nonNegative <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> StockB <span class=\"token operator\">=</span> <span class=\"token number\">500</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"flow\"><a href=\"#flow\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Flow</h3>\n<p>A flow must be a function that returns a double. In order to properly build the dependencies such that loops and order of calculations are represented, you'll need to specify the arguments in the annotation.</p>\n<p>This will look at the current values of the provided arguments and pass them into your function - calculating them first if that's not been done so this time step.</p>\n<p>As mentioned in the previous page, not all flows need both a to and from stock so you'll only need to provide them as necessary.</p>\n<h5 class=\"ui top attached header\">Creating Flows (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>to <span class=\"token operator\">=</span> <span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Flow1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">200.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>from <span class=\"token operator\">=</span> <span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Flow2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">100.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    from <span class=\"token operator\">=</span> <span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">,</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"StockB\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Flow1\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Flow2\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Flow3</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> sa<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> f1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> f2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> sa <span class=\"token operator\">+</span> f1 <span class=\"token operator\">-</span> f2\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"intermediate\"><a href=\"#intermediate\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Intermediate</h3>\n<p>An intermediate is a special kind of variable that you can provide arguments to in order to resolve said intermediate as a function. This works similar to flows, and in the context of System Dynamics modelling is used in determining the topological ordering of calculations.</p>\n<p>You can specify a fixed variable as an intermediate if desired as well.</p>\n<h5 class=\"ui top attached header\">Creating Intermediates (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Intermediate</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Inter1 <span class=\"token operator\">=</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@Intermediate</span><span class=\"token punctuation\">(</span>args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"StockB\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Inter2</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> valA<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> valB<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> valA <span class=\"token operator\">-</span> valB\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"delay\"><a href=\"#delay\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Delay</h3>\n<p>A delay is a special function made available in SystemDynamicsModel. There are two steps to using it, defining the delay and annotating the target.</p>\n<h5 class=\"ui top attached header\">Creating a DelayTarget and Calling from a Flow (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">  <span class=\"token annotation punctuation\">@DelayTarget</span>\n  <span class=\"token annotation punctuation\">@Intermediate</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> flowRate <span class=\"token operator\">=</span> <span class=\"token number\">20</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    from <span class=\"token operator\">=</span> <span class=\"token string\">\"sourceStock\"</span><span class=\"token punctuation\">,</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"destinationStock\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"flowRate\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"delayTime\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">delayedFlow</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> fr<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> dt<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t  <span class=\"token keyword\">return</span> <span class=\"token function\">delay</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flowRate\"</span><span class=\"token punctuation\">,</span> dt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n\t  <span class=\"token keyword\">return</span> fr<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>As you'll notice above we have a condition to check the time of the model. Because of the way the delay function works (looking for the value at t-n), it's often likely if you've not set up your checks correctly that you would get a DelayException for being out of bounds.</p>\n<p>You can mitigate this by setting a defaultValue. This way if the time your delay is looking for is before the start of the model, or out of bounds you'll return the default value.</p>\n<h5 class=\"ui top attached header\">Setting a Default Value for a Delay Target (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">  <span class=\"token annotation punctuation\">@DelayTarget</span><span class=\"token punctuation\">(</span>defaultValue <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n  <span class=\"token annotation punctuation\">@Intermediate</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> flowRate <span class=\"token operator\">=</span> <span class=\"token number\">20</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    from <span class=\"token operator\">=</span> <span class=\"token string\">\"sourceStock\"</span><span class=\"token punctuation\">,</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"destinationStock\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"delayTime\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">delayedFlow</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> dt<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">return</span> <span class=\"token function\">delay</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flowRate\"</span><span class=\"token punctuation\">,</span> dt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"stepsetup-functions\"><a href=\"#stepsetup-functions\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step/Setup Functions</h3>\n<p>SystemDynamicsModel has two major functions like most models - setup and step. You optionally can override these functions.</p>\n<h5 class=\"ui top attached header\">(java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token comment\">// Some other actions</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\tSystem<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"The time is: \"</span> <span class=\"token operator\">+</span> <span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token comment\">// Some other actions</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"timesteps\"><a href=\"#timesteps\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TimeSteps</h3>\n<p>A SystemDynamicsModel effectively has a Major and Minor time step. The major time step is the main calculation, what happens when you advance via the console. </p>\n<p>However, because you can set a differing resolution there is a minor step as well that runs within the span of a single major step. To accurately understand the timing of this there are two main functions to use.</p>\n<h5 class=\"ui top attached header\">Explaining timesteps at higher resolutions (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@SystemDynamicsSettings</span><span class=\"token punctuation\">(</span>resolution <span class=\"token operator\">=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MyModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\tSystem<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"The time is: \"</span> <span class=\"token operator\">+</span> <span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// Will always return a whole number of the major step</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n\tfrom <span class=\"token operator\">=</span> <span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">,</span>\n\tto <span class=\"token operator\">=</span> <span class=\"token string\">\"StockB\"</span><span class=\"token punctuation\">,</span>\n\targs <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"StockA\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Flow1\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Flow2\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Flow3</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> sa<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> f1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> f2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\tSystem<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"The time is: \"</span> <span class=\"token operator\">+</span> <span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// Because the resolution is 4. We'll get 0.0, 0.1, 0.2, 0.3, and 1.0 to denote Major.Minor steps.</span>\n\t<span class=\"token keyword\">return</span> sa <span class=\"token operator\">+</span> f1 <span class=\"token operator\">-</span> f2\n  <span class=\"token punctuation\">}</span> \n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>As noted in the explanation of System Dynamics modelling. You can define a resolution of a very high number. Often, however, this has the decreased benefit of being higher fidelity, but costing performance as you basically run the calculations multiple times for a single tick.</p>\n<p>Often a resolution of 4 or 8 is sufficient, but you should test and benchmark this for your model to determine the right breakpoint.</p>\n<h3 id=\"interaction-with-console-as-of-21\"><a href=\"#interaction-with-console-as-of-21\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Interaction with Console as of 2.1</h3>\n<p>As of 2.1, there is no direct System Dynamics support within the console. However, because SystemDynamicsModel is based on a Model we're able to use it within the console as-is by specifying additional annotations to Stock/Flow/Intermediates by usage of the Input &#x26; Variable annotations.</p>\n<p>Based on feedback from modellers using SD in 2.1 we'll begin to develop what features they'll want from integrating SD in the console. This could be as simple as showing annotated stocks/flows as charts, a panel allowing you to directly view the calculation dependencies of your model or even a CLD style diagram.</p>","headings":[{"value":"Defining a Model","depth":3},{"value":"Model Settings","depth":3},{"value":"Stock","depth":3},{"value":"Flow","depth":3},{"value":"Intermediate","depth":3},{"value":"Delay","depth":3},{"value":"Step/Setup Functions","depth":3},{"value":"TimeSteps","depth":3},{"value":"Interaction with Console as of 2.1","depth":3}],"frontmatter":{"title":"Modelling System Dynamics","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.1/reference/system_dynamics/modelling_sd.md","versioned":true,"version":"2.1","kind":"reference","pagePath":"/reference/system_dynamics/modelling_sd","chronology":{"prev":{"name":"What is System Dynamics?","path":"/reference/system_dynamics/what_is_system_dynamics"},"next":{"name":"Savings Model Example","path":"/reference/system_dynamics/savings_model"}},"lastUpdated":"2026-04-21T13:56:54.832Z"}}