I have large size tables (A1, A2, ...) with at least 3 dimensions (say b, c, d) which can be represented as shown in the image, where array size n_b, n_c and n_d are variable.
package Arrays
record A
extends Modelica.Icons.Record;
parameter Real b[:] "base array";
parameter Arrays.Baseclasses.B b_target[:] "target array";
end A;
package Baseclasses
record D
extends Modelica.Icons.Record;
parameter Real E[:];
parameter Real F[:];
end D;
record C
extends Modelica.Icons.Record;
parameter Real d[:] "base array";
parameter Arrays.Baseclasses.D d_target[:] "target array";
end C;
record B
extends Modelica.Icons.Record;
parameter Real c[:] "base array";
parameter Arrays.Baseclasses.C c_target[:] "target array";
end B;
end Baseclasses;
package Example
model A
Arrays.A a(b={1}, b_target={Arrays.Baseclasses.B(c={2}, c_target={
Arrays.Baseclasses.C(d={3,4}, d_target={Arrays.Baseclasses.D(E={4,5},
F={5,8}),Arrays.Baseclasses.D(E={2,3}, F={3,4})})})});
end A;
end Example;
annotation (uses(Modelica(version="3.2.2")));
end Arrays;
For this type of structure I get following error:
Current version of the Modelica translator can only handle
array of components with fixed size.
But component a.b_target[1].c_target[1].d_target had non-fixed array dimensions [:].
In file: C:/....../Arrays.mo
All variables used in size expressions must be declared as constants or parameters.
Could not find member c_target[1] in record expression Arrays.Baseclasses.B(
{2},
{Arrays.Baseclasses.C(
{3, 4},
{Arrays.Baseclasses.D({4, 5}, {5, 8}), Arrays.Baseclasses.D({2, 3}, {3, 4})})}).
Could not find member c_target[1] in record expression Arrays.Baseclasses.B(
{2},
{Arrays.Baseclasses.C(
{3, 4},
{Arrays.Baseclasses.D({4, 5}, {5, 8}), Arrays.Baseclasses.D({2, 3}, {3, 4})})}).
The model contained invalid expressions.
Check of class aborted.
WARNINGS have been issued.
ERRORS have been issued.
One observation I had was that, when I make the n_d value constant, as an example:
record C
extends Modelica.Icons.Record;
parameter Real d[2] "base array";
parameter Arrays.Baseclasses.D d_target[2] "target array";
the error goes away. Does that mean Modelica translator allows variable size arrays till two dimensions and beyond that the array size need to be fixed? If so, is there a way around it to have a record with multi-dimensional variable size array?
