Задание индексируемого вектора в производной модели - PullRequest
0 голосов
/ 27 апреля 2018

Я определяю

type Enum = enumeration(A, B, C);

и

partial model PM
  parameter Real[Enum] a;
...
end PM;

и

model M
  extends PM(a = {1, 2, 3});
...
end M;

, что дает ошибку. Мое лучшее предположение, что a = {1, 2, 3} является виновником. Это действительно незаконно, и если да, то как я могу установить a в M?


UPDATE

После дальнейшего изучения я обнаружил, что все вышеизложенное действительно является законным. Позволь мне пройти всю свинью:

type Enum = enumeration(A, B, C);

connector Conn
  Real[Enum] a;
  flow Real[Enum] f;
end Conn;

model M1
  Conn conn;
equation
  conn.f = -conn.a;
end M1;

model M2
  Conn conn;
initial equation
  conn.a = {1, 2, 3};
equation
  der(conn.a) = conn.f;
end M2;

model M3
  M1 m1;
  M2 m2;
equation
  connect(m1.conn, m2.conn);
end M3;

Это не удается построить. Но если я просто изменю каждый Enum в классе соединителя на 3, то он будет работать.

1 Ответ

0 голосов
/ 27 апреля 2018

Пример является (насколько я могу судить) легальным, и некоторые инструменты уже обрабатывают его (при условии, что больше ничего не скрыто).

Поскольку вам нужен обходной путь для конкретного инструмента, вам нужно указать, какой инструмент.

Законность будет уточнена в последующих версиях спецификации Modelica, поскольку она была неясной - https://trac.modelica.org/Modelica/ticket/2212#comment:3

...