Modelica数组的局部模型

时间:2015-04-02 23:56:39

标签: modelica openmodelica

A成为部分模型,CD是扩展A的模型。给出一个模型

partial model X
  A a[3];
end X;

如何实例化X,例如

的内容
A X.a = {C,D,C};

更新:我尝试了2种变体。一个是

package P
  partial model A end A;
  model B extends A; end B;
  model C extends A; end C;
  partial model X
    A a[3];
  end X;
  model Y extends X(a={c,b,c});
    B b;
    C c;
  end Y;
end P;

失败并显示警告“可能只设置默认的输入,参数和变量,但修改了一个。”。另一个是

package P
  partial model A end A;
  model B extends A; end B;
  model C extends A; end C;
  partial model X
    replaceable A a[3];
  end X;
  model Y extends X;
    redeclare A a={c,b,c};
    B b;
    C c;
  end Y;
end P;

失败,错误“组件a = {c,b,c},但先前a =<<<>>。组件不相同。”

请注意,可以执行以下操作。

package P
  partial model A end A;
  model B extends A; end B;
  model C extends A; end C;
  partial model X
    A a[3] = {a1,a2,a3};
    replaceable A a1,a2,a3;
  end X;
  model Y extends X;
    redeclare B a1;
    redeclare C a2;
    redeclare B a3;
  end Y;
end P;

但我希望P.X使用参数数组。然后,实现这一目标的以下想法不起作用。

package P
  partial model A end A;
  model B extends A; end B;
  model C extends A; end C;
  partial model X
    parameter Integer N;
    replaceable A a[N] = fill(ai,N);
    A ai;
  end X;
  model Y extends X(N=3);
    redeclare A a[3] = {b,c,b};
    B b;
    C c;
  end Y;
end P;

2 个答案:

答案 0 :(得分:2)

是。在不将其从非部分模型中扩展的情况下实例化部分模型是非法的。这样的事情可能有用:

model Y
  extend X(a = {C, D, C});
end Y;

然后Y.a就是你想要的。

答案 1 :(得分:1)

AFAIK partial关键字表示您的模型无法实例化,因此您可能也需要extend X.