Modelica propagation/default 变量名

Modelica propagation/default variable name

我想在模型中设置默认变量名称 T (=xx) - 将该模型拖到新模型中并在其中定义变量 xx。 我收到错误消息:使用未声明的变量 xx。

这是子模型

model test
  parameter Real T = xx;
  Real f;
equation 
  f = T + time;
end test;

这是完整模型

model fullmodel
  parameter Real xx = 12;
  Test Test1; 
end fullmodel;

我的问题:你会如何在 Modelica 中做到这一点?我的模型需要 100 个相同的模型,我想将一些参数(直径、长度等)默认设置为一个变量名,然后只定义这个变量。我知道我可以传播变量——但如果我只需要拖动模型然后定义参数就更好了。感谢您的帮助!

您应该可以执行以下操作:

model test
  parameter Real T;
  Real f;
equation 
  f = T + time;
end test;

model fullmodel
  parameter Real xx = 12;
  Test Test1(T = xx);
end fullmodel;

或者您可以使用 inner/outer:

model Test
  outer parameter Real xx;
  parameter Real T = xx;
  Real f;
equation 
  f = T + time;
end Test;

model fullmodel
  inner parameter Real xx = 12;
  Test test1;
end fullmodel;

如果您有同一模型的多个实例并且不想重复修改,另一种可能性是执行如下操作:

model test
  parameter Real T;
  parameter Real S=1;
  Real f;
equation 
  f = S*(T + time);
end test;

model fullmodel
  parameter Real xx = 12;
  // Create an "alias" model using a short class definition that
  // includes a modification (for all instances of PreConfig).
  model PreConfig = Test1(T=xx);
  // Now create instances (potentially with their own unique values
  // for some parameters
  PreConfig pc1(S=1), pc2(S=2), pc3(S=3);
end fullmodel;

正如我在上面的评论中提到的,另一个使用数组的 fullmodel 实现如下所示:

model fullmodel
  parameter Integer n = 100;
  parameter Real xx = 12;
  // Create 100 instances of Test1.  Each on has the same
  // value for T, but they each have different values for
  // S
  Test1 tarray[n](each T=xx, S=linspace(0, 1, n));
end fullmodel;