(cross-posted on StackOverflow)
Unspecified array dimensions using [:] are very important to write flexible components for frequent reuse. While I am aware, that the actual size of an array has to be determined at the time a model is compiled, I was having the opinion that this can be done by binding a variable with a definite dimension to one with an unspecified one.
The following simple example for a block VectorSum that is to sum a vector input will not work:
package VectorFunctions
model Test
VectorSum converter "Component taking the sum of a vector input";
InformationSource source "Vector input";
equation
connect( source.y, converter.u );
end Test;
block VectorSum "Take the sum of an input with unspecified dimension"
Modelica.Blocks.Interfaces.RealInput u[:];
Modelica.Blocks.Interfaces.RealOutput y;
equation
y = sum(u);
end VectorSum;
block InformationSource "Provide some vector output"
Modelica.Blocks.Interfaces.RealOutput y[3];
equation
y = ones( 3 );
end InformationSource;
end VectorFunctions;
Why does this not work out (after all the dimension for u should be clear from the connect statement as the dimension of the input array is a constant)? What other way to do something like this is there?
Edit:
I changed inputs and outputs into connectors so that the use of connect is cleaner. The Modelica Specs imo are not so clear about this as Section 10.2 Flexible Array Sizes simply points to Section 12.4.5 where this is discussed for functions. Functions according to the specs explicitly allow the above use of unspecified array dimensions for inputs. Since blocks share quite a bit with functions I am not seeing a good reason for this not to work out.