Modelica is an open source, object-oriented and equation-based language, used to model complex physical systems involving, for example, mechanics, electronics, hydraulics and controls.
Why is this language born?
- To model the complex and dynamical behaviour of multi-domain systems.
- To models systems whose physical behaviour can be described by differential, algebraic and/or discrete equations (i.e. no partial differential equations can be represented, thus excluding FEM and CFD applications).

Modelica-based Simulation Environment
Dymola is a Modelica-based simulation environment, fully compatible with all its libraries. This means that Dymola is capable of solving and simulate any model developed using the Modelica language.

Modelica Language Features
- Mathematical notation for matrixes and arrays which can be composed not only by numbers, but also by models.
- Replaceable and modifiable models: different versions of the same model can be replaced or switched among with ease.
- Possibility to represent systems characterised by discontinuities, like electrical switches or mechanical frictions.
- Possibility of introducing mathematical functions with a variable number of inputs/outputs, whose content is executed in a procedural way.
- External functions written in C/C++, FORTRAN and Java can be called from within a Modelica model.
- Models can be organised and structured in hierarchical packages and libraries.
Object-Oriented Language
Modelica is an object–oriented modelling language where:
- Every icon can represent a specific physical component (e.g. electrical resistance, pump, etc.).
- A connection line can represent a real physical coupling (e.g. electrical cables, fluid or heat flows, etc.).
- A component can be composed of several connected subsystems (each one characterised in a hierarchical way) and/or described by equations.
- Given a symbolic solver, the high-level Modelica description is translated into C language in order to solve the resulting set of algebraic differential equations.
- For each physical domain or application field, specific connectors are provided; their type can be either causal (whose corresponding connection information flow is well defined) or acausal (whose corresponding connection information flow is not known a priori, but only when solving the equations).

- Each type of connector is compatible only with itself, as it is defined starting from the physical quantities relating to the specific physical/engineering domain it belongs to.
- The connection of acausal connectors belonging to the same domain produces two types of equations, an equality one between the potential variables and a balance one between the flow variables.

- Models consist of a textual representation (the actual Modelica code) and, optionally, of the corresponding graphical representation in terms of a block diagram where components are connected with each other.
- Each graphical block is representative of an instance of a class/model.
- The instances of classes/models can be modified (e.g. in terms of the value of its characteristic parameters) and renamed when declared.
Hardware in the Loop
In each model, Modelica source code can easily be divided into logic units and then partitioned by defining different tasks and subtasks. Once these logic units have been defined, the development tool based on Modelica (Dymola) will be able to automatically split equations, generating the code for each physical target, thanks to the Modelica syntax structure.
