oli*_*ver 5 modelica openmodelica
我想将一个复杂模型实例化为另一个模型中的参数,并在初始方程部分中对其进行初始化,就像我可以对任何实数参数所做的那样。对于一个简单的实数参数我会写
parameter Real y(fixed = true);
Run Code Online (Sandbox Code Playgroud)
表明y应该在初始化时使用初始方程(待定义...)进行计算。但我不能对复杂的模型这样做,即
parameter ComplexModel m(fixed = true);
Run Code Online (Sandbox Code Playgroud)
不编译。例如,考虑以下平面模型
model FlatModel
parameter Real x = 4;
parameter Real y(fixed = false);
Real z;
// ... + many other model elements
initial equation
y*y = x;
// ... + many other equations
equation
z*z = 4*x;
end FlatModel;
Run Code Online (Sandbox Code Playgroud)
这里,隐式解 y=2 是在初始化时计算的,而解 z=4 是以时间相关的方式计算的(至少原则上,尽管可能进行优化......)。但两者都表示基本相同的二次关系,因此我想将这个方程封装到一个单独的模型中(请注意,并非每个这样的方程组都像本示例中那样简单):
model ComplexModel
Real x(fixed = false);
Real y(fixed = false);
equation
y * y = x;
end ComplexModel;
Run Code Online (Sandbox Code Playgroud)
并尝试这样使用它:
model RefactoredFlatModel
parameter Real x = 4;
parameter Real y(fixed = false);
Real z;
parameter ComplexModel mStatic;
ComplexModel mDynamic;
initial equation
mStatic.x = x;
y = mStatic.y;
equation
mDynamic.x = 4*x;
z = mDynamic.y;
end RefactoredFlatModel;
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用(编译器报告过度确定系统)。检查编译器扁平化的模型可以看出原因:
class FixedTests.RefactoredFlatModel
parameter Real x = 4.0;
parameter Real y(fixed = false);
Real z;
parameter Real mStatic.x(fixed = false);
parameter Real mStatic.y(fixed = false);
Real mDynamic.x(fixed = false);
Real mDynamic.y(fixed = false);
initial equation
mStatic.x = x;
y = mStatic.y;
equation
mStatic.y ^ 2.0 = mStatic.x;
mDynamic.y ^ 2.0 = mDynamic.x;
mDynamic.x = 4.0 * x;
z = mDynamic.y;
end FixedTests.RefactoredFlatModel;
Run Code Online (Sandbox Code Playgroud)
因此mStatic.y ^ 2.0 = mStatic.x被放入(时间相关的)方程部分,而不是我想要的初始方程部分。很明显,该模型是超定的,因为它试图及时求解 mStatic.y,尽管 mStatic.y 是一个参数,因此是时不变的。
有没有办法告诉 modelica 编译器将方程转换为参数实例的初始方程?因为否则不可能隐式定义复杂模型的参数实例。
从 Modelica 规范 v3.4 开始,这是无效的 Modelica,因为前缀parameter不得与专用类一起使用model。
有一些建议可以改进此行为(并满足您的要求),请参阅https://github.com/modelica/ModelicaSpecification/issues/2311及其来源https://github.com/modelica/ModelicaStandardLibrary/issues/1860。
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |