'for'

for

Information

This information is part of the Modelica Standard Library maintained by the Modelica Association.

Repeat equations or statements a specific number of times

Examples

for clauses are mostly used in algorithm sections, such as

    parameter Integer np=10;
    Real p[np], x, y;
  algorithm
     y := p[1];
     for i in 2:np loop   // i shall not be declared
        y := y*x + p[i];
     end for;

Other forms of the for condition:

    for i in 1:10 loop            // i takes the values 1,2,3,...,10
    for r in 1.0 : 1.5 : 5.5 loop // r takes the values 1.0, 2.5, 4.0, 5.5
    for i in {1,3,6,7} loop       // i takes the values 1, 3, 6, 7

In equation sections, for clauses are expanded at translation time in order that symbolic transformations can be applied. Typically, a for clause in an equation section is used on component arrays, e.g., to connect elements of an array of components together:

    parameter Integer nR=10 "Number of resistances";
    Modelica.Electrical.Analog.Basic.Resistor R[nR];
  equation
     for i in 1:nR-1 loop
        connect(R[i].p R[i+1].n);   // 9 connect equations
     end for;

Syntax

In equation sections:

  for for_indices loop
     { equation ";" }
  end for;
  for_indices : for_index {"," for_index}
  for_index   : IDENT [ in expression ]

In algorithm sections:

  for for_indices loop
     { algorithm ";" }
  end for;
  for_indices : for_index {"," for_index}
  for_index   : IDENT [ in expression ]

Description

A clause

    for IDENT in expression loop

is one example of a for clause.

The expression of a for clause shall be a vector expression. It is evaluated once for each for clause, and is evaluated in the scope immediately enclosing the for clause. In an equation section, the expression of a for clause shall be a parameter expression (in order that the for clause can be expanded into equations during translation). The loop-variable is in scope inside the loop-construct and shall not be assigned to.

[Example:

The loop-variable may hide other variables as in the following example. Using another name for the loop-variable is, however, strongly recommended.

    constant Integer j=4;
    Real x[j];
  equation
    for j in 1:j loop // The loop-variable j takes the values 1,2,3,4
      x[j]=j; // Uses the loop-variable j
    end for;

]

Several iterators

The notation with several iterators is a shorthand notation for nested for-clauses (or reduction-expressions). For for-clauses it can be expanded into the usual form by replacing each "," by 'loop for' and adding extra 'end for'. For reduction-expressions it can be expanded into the usual form by replacing each ',' by ') for' and prepending the reduction-expression with 'function-name('.

[Example:

    Real x[4,3];
  equation
    for j, i in 1:2 loop
      // The loop-variable j takes the values 1,2,3,4 (due to use)
      // The loop-variable i takes the values 1,2 (given range)
      x[j,i]=j+i;
    end for;

]