gpt4 book ai didi

Modelica 编码标准/新的 OpenModelica 编译器前端

转载 作者:行者123 更新时间:2023-12-02 21:45:28 27 4
gpt4 key购买 nike

看起来像是新的 OpenModelica 编译器前端的问题。我在 windows-7 64 位操作系统上使用 openmodelica 1.14 的正式发行版本。

package Test1_14
model M1
parameter Integer size = 2 "matrix size";
parameter Real A[size] = {1.0, 1.0};
Real B[size];
Real T = 1;
Real P = 2;
equation
B = A * (T/P);
end M1;

model M1_Extn
Real C[size];
Real D[size];
equation
for J in 1:size loop
C[J] = Func1(T);
D[J] = C[J] / P;
end for;
end M1_Extn;

function Func1
input Real a;
output Real b;
algorithm
b := a*a;
end Func1;

model M1_Combined
parameter Integer size = 2 "matrix size";
Real B[size];
Real T = 1;
Real P = 2;
extends M1_Extn;
equation
B = D;
end M1_Combined;
end Test1_14;

当我编译模型“M1_Combined”时,新的 OpenModelica 编译器前端代码生成失败。导出 FMU 也失败并出现相同的错误。

我的代码符合 Modelica 编程标准吗?

如何在模型 M1_Extn 中声明变量 - size、T、P,并在“M1_Combined”中仍然使用关键字“extends”?

最佳答案

这是因为根据 Modelica 规范,旧前端没有正确处理“扩展”。新的前端可以正确执行此操作。

要明确的是,您不能在此类中定义变量,然后在扩展中使用它除了通过修改(以及通过内部/外部,通过重新声明为元素)之外的任何其他方式。下面是一个示例,您不能在 M1 中使用 a

package TestExtends

model M1
parameter Real b = a;
end M1;

model M2
parameter Real a = 1;
extends M1;
end M2;

end TestExtends;

要修复您的模型,使其符合 Modelica 标准,您可以执行以下操作:

package Test1_14
model M1
parameter Integer size = 2 "matrix size";
parameter Real A[size] = {1.0, 1.0};
Real B[size];
Real T = 1;
Real P = 2;
equation
B = A * (T/P);
end M1;

model M1_Extn
parameter Integer size = 2;
Real T = 1;
Real P = 2;
Real C[size];
Real D[size];
equation
for J in 1:size loop
C[J] = Func1(T);
D[J] = C[J] / P;
end for;
end M1_Extn;

function Func1
input Real a;
output Real b;
algorithm
b := a*a;
end Func1;

model M1_Combined
extends M1_Extn(size=2, T = 1, P = 2);
Real B[size]; // this one works as you can use things defined in extends.
equation
B = D;
end M1_Combined;
end Test1_14;

关于Modelica 编码标准/新的 OpenModelica 编译器前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59304631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com