Equation section : declarative
Algorithm section : imperative
Can anyone help me with examples that show the difference between these two sections in Modelica Language? When to use what section?
The main difference between an algorithm
section and an equation
section is that each equation in an equation
section is used in simulating a model. With an algorithm
section, you have assignment statements that are imperative. This means that you can overwrite the impact of a previous assignment. As a concrete example, in the following equation
section:
equation
a = b;
a = c;
There are two equations. Each will be used. If, on the other hand, I had the following algorithm
section
algorithm
a := b;
a := c;
The second assignment always overrides the first one.
But let me add a little bit of a "big picture" to help you understand the real semantic difference. You can think of an algorithm
as a black box. A bunch of information comes in and certain variables get assigned to. What happens in between isn't important. Consider the following algorithm:
algorithm
sum := 0;
prod := 1;
for i in 1:10 loop
sum := sum + i;
prod := prod * i;
end for;
Both sum
and prod
are assigned to multiple times. But in the end, all this is effectively the same as:
algorithm
sum := 1+2+3+4+5+6+7+8+9+10;
prod := 1*2*3*4*5*6*7*8*9*10;
...or even...
equation
sum = 1+2+3+4+5+6+7+8+9+10;
prod = 1*2*3*4*5*6*7*8*9*10;
But the same doesn't apply to equation
sections. If I did this in an equation
section:
equation
sum = 0;
for i in 1:10 loop
sum = sum + i;
end for;
I'd have a serious problem because this would expand into 11 equations:
equation
sum = 0;
sum = sum + 1;
sum = sum + 2;
...
sum = sum + 10;
So I've got one variable and 11 equations! That's not what we want.
So, to summarize, with an algorithm
you can ignore what happens in the algorithm and only pay attention to what gets assigned a value. It does not matter how many times it is assigned a value it still counts as one "equation" for that variable. With an equation
section, every equation persists.
P.S. - When Modelica tools do things like equation sorting, I'm pretty sure the semantics dictate that an algorithm is treated as a single block. My guess is this doesn't mean anything to you yet. But as you learn more about Modelica, you'll recognize that this can be bad for performance. So the general rule in Modelica is always using an equation
over an algorithm
if you can. Your simulation will be faster as a result.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With