【问题标题】:How to broadcast boolean value to an array如何将布尔值广播到数组
【发布时间】:2023-04-06 16:52:02
【问题描述】:

我有一个 Modelica 模型,我正在其中初始化一组子模型。 我想知道如何最好地将一个值广播到所有数组元素。让我来说明一下,三个演示的替代方案中只有一个可以在没有错误/警告的情况下工作。

model test_each_fixed
  model sub
    Real p;
  end sub;

  //sub sub_instance[6](p(start=linspace(0.0, 1.0, 6), fixed=true));
  // gives Translation Error Non-array modification ‘true‘ for 
  // array component ‘fixed‘, possibly due to missing ‘each‘.
  
  // fair enough, let's add an "each":
  
  //sub sub_instance[6](p(start=linspace(0.0, 1.0, 6), each fixed=true));
  // gives Translation Warning 'each' used when modifying non-array element p.
  
  // damned if I do, damned if I don't?
  // The following works, but is there a better way than an explicit fill()?
  sub sub_instance[6](p(start=linspace(0.0, 1.0, 6), fixed=fill(true,6)));
equation
end test_each_fixed;

这是使用 OpenModelica v1.18.0-dev.beta1(64 位)

所以,我的问题:

  • 考虑到在没有each 的情况下引发的错误,我收到的第二个变体的翻译警告是 OpenModelica 错误,还是这是预期的 Modelica 行为?
  • 有没有更好的方法将true 广播到数组元素成员中的所有fixed 属性?

【问题讨论】:

  • 我认为p 不是参数是故意的,对吗?
  • 是的。这是我试图从我正在尝试改进的现有更大模型中提取的 MWE。

标签: modelica openmodelica


【解决方案1】:

each 的第二个变体应该在 Modelica 中工作; https://specification.modelica.org/master/inheritance-modification-and-redeclaration.html#modifiers-for-array-elements

而且我找不到更好的选择。

【讨论】:

  • 它确实“工作”,它只是生成警告,而不是错误。因此,我想知道警告是否合法并且我“使用错误”(即有另一种/更好的方法不会产生警告),或者警告是否错误并且应该向 OM 报告。跨度>
  • 我的意思是它应该在没有警告的情况下工作;所以你不会“用错了”。
  • 谢谢,我向上游报告了:github.com/OpenModelica/OpenModelica/issues/7777
猜你喜欢
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2014-12-20
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多