The semantics of an if-statement is:
if expression then
{ algorithm ";" }
{ elseif expression then
{ algorithm ";" }
}
[ else
{ algorithm ";" }
]
end if;
inside an algorithm section and
if expression then
{ equation ";" }
{ elseif expression then
{ equation ";" }
}
[ else
{ equation ";" }
]
end if;
inside an equation section.
If the condition after the keyword if evaluates to true, the statements after then are executed. Otherwise if there are one or more elseif-parts there conditions are evaluated in order; the first that evaluates to true causes the corresponding statements to be executed. Otherwise, if present, the statements in the else-part are executed. The elseif part is conditional and can appear in zero or more iterations. The else-clause is conditional depending on the variability of the if-expression. In case the expression is of parameter type then the else-clause can be emitted. In case the variability of the expression condition is higher than parameter then the else-clause cann't be omitted since the single assignment rule would not hold, because the number of equations may change during a simualtion.
In the class SumVector there is an exmple of an if-statement which performs a combined summation and computation on a vector v.
After we have simulated SumVector we see that the sum of the absolute value of the elements in the vecor is 1500.
There are a special feature regarding assignment statements inside if-statements. Modelica guarantees that all the outputs of an algorithm section always have well-defined values, and that an algorithm section does not have memory of previous invocations. This is achieved by initializing all conditionally assigned variables to their start-values whenever the algorithm is invoked.
The algorithm section in the class CondAssign below automatically assigns the start values 35 and 45 to the variables x and y respectively when entering the algorithm section since these variables are conditionally assigned within the algorithm section. This means that the condition x>5 becomes 35>5 which is always true. On the other hand, the variable z is not given its start value when entering the algorithm section since it is not conditionally assigned; it is actually an input to the algorithm section.
The function CondAssignFunc below behaves similarily. Here the local variables x and y are automatically assigned the default initial values 35 and 45 on entry to the algorithm section that comprises its function body.