3

I tried use global parameter in code like this:

model testModel
  outer parameter Integer par;
  outer Integer var;
equation
  for i in 1:par loop
    var[i] = 5 * i;
  end for;
end testModel;

model test
  inner parameter Integer par = 3;
  inner Integer var[par];
  testModel mod;
end test;

simulate(test)

And I got the following error:

Error: The iteration range 1:par is not a constant or parameter expression

All works fine if not using global parameter:

model test
  inner parameter Integer par = 3;
  inner Integer var[par];
  testModel mod(par = par);
end test;

How can I use the global parameter in "for", or why can't I? Thank you in advance

Itchydon
  • 2,572
  • 6
  • 19
  • 33
Tyomich
  • 137
  • 9

1 Answers1

-1

This should work:

model testModel
  outer parameter Integer par;
  Integer var[par];
equation 
  for i in 1:par loop
    var[i] = 5 * i;
  end for;
end testModel;

model test
  inner parameter Integer par = 3;
  testModel mod;
end test;
lochel
  • 94
  • 4
  • 1
    This doesn't work in OM: `[:3:3-3:19:writable] Error: Could not evaluate structural parameter (or constant): par which gives dimensions of array: var[par]. Array dimensions must be known at compile time.` `Error: Error occurred while flattening model test` – Tyomich Aug 29 '17 at 18:30
  • Seems like an OpenModelica issue. You can create a ticket for this in the OpenModelica Trac system: https://trac.openmodelica.org/OpenModelica/newticket – lochel Aug 29 '17 at 19:05
  • It works fine in Dymola (tested with Dymola 2015 FD01 and Dymola 2018). – Hans Olsson Aug 30 '17 at 07:37