# System Dynamics Metamodel

###### System Dynamics Tutorial
This section provides an overview of all the building blocks we use in our system dynamics models and how they may be connected to each other. We do so using a so-called “metamodel”.
Metamodels are models that define the structure of another model, in this case, the structure of SD models.
System dynamics does not have a standardized metamodel for validating the structure of causal loop diagrams or stock and flow diagrams, in fact, there is no standardizing body that exists for system dynamics. The de facto standard is defined by Jay Forrester’s book “Principles of Systems” (1968), but each system dynamics tool implements this standard in slightly different ways using slightly different notations. The metamodel introduced below defines the set of constructs we use in the system dynamics models and diagrams that you can find on this website.
A simple metamodel for system dynamics is shown in the following figure, using UML notation:
The metamodel has the following constructs:
• Stock.
Stocks represent the state of a system at any given instant in time. Stocks can only be influenced by flows.
• Flow.
Stocks are accumulated over time via flows. The flows represent the rate at which these stocks are changing at that particular instant. Flows are special kinds of converters. Flows directly affect the stocks they flow into or out of. They can also be inputs to other converters.
• Constant.
A converter whose function is constant or just depends on time.
• Converter.
Converters are used to disaggregate the complex functions that define flows into their constituent parts. Converters may be influenced by stocks and can influence other converters. In general, they convert inputs into output. Unlike flows (which are special kinds of converters), they cannot directly influence a stock.
• Module.
Modules are used to aggregate other model elements and thus provide layers of abstraction.
• Initial Value.
A constant specifying the initial value of a stock.
• Function.
A mathematical expression that defines how the converter’s inputs are combined to produce an output. The expression may include functions that depend just on time (e.g. the current date).

## Equations

Based on this metamodel, the equations that form the heart of the simulation model can now be defined as follows:
Stock(0)= Initial_Value
Stock(t) = Stock(t-dt) + dt × (∑ Stock.Inflow(t-dt) − ∑ Stock.Outflow(t-dt))
Converter(t) = Converter.Function(Converter.Input(t))
Flow(t) = Flow.Function(Flow.Input(t))
These equations assume that we use Euler Integration.