Modelica:层次模型中的方程平衡
Modelica: Equation balance in hierarchical model
我有以下简单的分层模型,其中包含腔室内的反应。反应模型简单地将质量速率设置为质量,并将其连接到封闭它的腔室。
connector Conn
Real mass;
flow Real massRate;
end Conn;
model Reaction
Conn conn;
equation
conn.massRate = conn.mass;
end Reaction;
model Chamber
Real mass(start = 1);
Reaction reaction;
Conn conn;
equation
conn.mass = mass;
der(mass) = conn.massRate;
connect(reaction.conn, conn);
end Chamber;
现在在我看来,总共有五个变量:mass
、reaction.conn.mass
、reaction.conn.massRate
、conn.mass
和conn.massRate
。并且有五个方程:方程部分有两个,即
conn.mass = mass
der(mass) = conn.massRate
一个来自反应
reaction.conn.massRate = reaction.conn.mass
和连接方程中的两个:
reaction.conn.mass = conn.mass
reaction.conn.massRate = conn.massRate
所以我们在五个变量中有五个方程。求解器逻辑可以像这样简单地组合这些方程
der(mass) = conn.massRate = reaction.conn.massRate = reaction.conn.mass
= conn.mass = mass
并且由于质量被赋予了起始值,所以 Bob 是你的叔叔。 mass
应该随时间增加。但是我的模拟环境(Wolfram|One)说
Error: Simulation model is not globally balanced, having 1 variable and 2 equations.
有人可以解释一下这是怎么回事吗?请注意,如果我将反应器带到腔室外(将反应中的符号反转为 conn.massRate = -conn.mass
),它会按预期工作。
Modelica 规范中的“4.7 平衡模型”部分对此进行了描述。
问题是腔室有一个顶层连接器conn
并且还有一个与此相关的方程式;例如conn.massRate=0;
对应于分层模型中默认连接的连接器。不仅一个方程太多了,而且还错了。
此外,如果您将 Chamber 用作子模型,并且想要添加 Chamber 的外部流量 into/out,您可以连接到 conn
- 但方程式不会感觉。
当您将反应堆移出腔室时,您可以避开悬空的连接器。
另一种可能更清楚的选择是有两个模型,例如:
model Chamber
Reaction reaction;
MassPart source;
equation
connect(reaction.conn, source.conn);
end Chamber;
model MassPart
Conn conn;
Real mass(start=1);
equation
conn.mass = mass;
der(mass) = -conn.massRate;
end MassPart;
(假设我的符号部分正确)。在这里,当您为连接器的流量变量添加一个方程时,您可以看到 MassPart 和 Reaction 本身都具有相同数量的方程和变量。
我有以下简单的分层模型,其中包含腔室内的反应。反应模型简单地将质量速率设置为质量,并将其连接到封闭它的腔室。
connector Conn
Real mass;
flow Real massRate;
end Conn;
model Reaction
Conn conn;
equation
conn.massRate = conn.mass;
end Reaction;
model Chamber
Real mass(start = 1);
Reaction reaction;
Conn conn;
equation
conn.mass = mass;
der(mass) = conn.massRate;
connect(reaction.conn, conn);
end Chamber;
现在在我看来,总共有五个变量:mass
、reaction.conn.mass
、reaction.conn.massRate
、conn.mass
和conn.massRate
。并且有五个方程:方程部分有两个,即
conn.mass = mass
der(mass) = conn.massRate
一个来自反应
reaction.conn.massRate = reaction.conn.mass
和连接方程中的两个:
reaction.conn.mass = conn.mass
reaction.conn.massRate = conn.massRate
所以我们在五个变量中有五个方程。求解器逻辑可以像这样简单地组合这些方程
der(mass) = conn.massRate = reaction.conn.massRate = reaction.conn.mass
= conn.mass = mass
并且由于质量被赋予了起始值,所以 Bob 是你的叔叔。 mass
应该随时间增加。但是我的模拟环境(Wolfram|One)说
Error: Simulation model is not globally balanced, having 1 variable and 2 equations.
有人可以解释一下这是怎么回事吗?请注意,如果我将反应器带到腔室外(将反应中的符号反转为 conn.massRate = -conn.mass
),它会按预期工作。
Modelica 规范中的“4.7 平衡模型”部分对此进行了描述。
问题是腔室有一个顶层连接器conn
并且还有一个与此相关的方程式;例如conn.massRate=0;
对应于分层模型中默认连接的连接器。不仅一个方程太多了,而且还错了。
此外,如果您将 Chamber 用作子模型,并且想要添加 Chamber 的外部流量 into/out,您可以连接到 conn
- 但方程式不会感觉。
当您将反应堆移出腔室时,您可以避开悬空的连接器。 另一种可能更清楚的选择是有两个模型,例如:
model Chamber
Reaction reaction;
MassPart source;
equation
connect(reaction.conn, source.conn);
end Chamber;
model MassPart
Conn conn;
Real mass(start=1);
equation
conn.mass = mass;
der(mass) = -conn.massRate;
end MassPart;
(假设我的符号部分正确)。在这里,当您为连接器的流量变量添加一个方程时,您可以看到 MassPart 和 Reaction 本身都具有相同数量的方程和变量。