将模型实例化为参数时的固定属性

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 编译器将方程转换为参数实例的初始方程?因为否则不可能隐式定义复杂模型的参数实例。

tbe*_*beu 3

从 Modelica 规范 v3.4 开始,这是无效的 Modelica,因为前缀parameter不得与专用类一起使用model

有一些建议可以改进此行为(并满足您的要求),请参阅https://github.com/modelica/ModelicaSpecification/issues/2311及其来源https://github.com/modelica/ModelicaStandardLibrary/issues/1860