是否可以将全局值发送到 OpenModelica 中的另一个模型?

Is it possible to send global values to another model in OpenModelica?

我正在尝试在 OpenModelica 中创建一个模型,其中包含几个其他组件(管道、水库)。目前我正在使用交错网格修改 Modelica.Fluid-library 中的管道,并且需要确定整个模型中的最小步长 dx。

是否可以进行以下操作?

  1. 在管道 1 中计算 dx_1,在管道 2 中计算 dx_2。
  2. 将dx_1和dx_2发送到全局模型中的数组(类似于Modelica.Fluid.System)。
  3. 确定最小的dx = min(dx_1,dx_2)并同时传回管道1和管道2

我计算了管道1中的dx_1和管道2中的dx_2,并在类似于Fluid.System的数据存储模型中创建了一个数组。然而,我正在努力将步长发送到数据存储模型,并在确定最小 dx 后再次将它们发送回来。

这可能吗?怎么会这样做呢?

是的,有几种可能性。

正如您提到的,如果在您的全局模型中实例化为 inner 并在每个管道模型中声明为 outer,则管道可以访问数据存储模型中的 variables/parameters。与引用 Fluid.SystemModelica.Fluid 模型一样,管道可以访问数据存储模型中的 dx_min

这是一个代码示例,大致基于您的问题:

model Pipe
  outer DataStorage dataStorage;

  Real dx_min = dataStorage.dx_min;
  Real dx "calculated in this model";
  ...
end Pipe;

model DataStorage
  parameter Integer nPipes;
  input Real dx_array[nPipes];
  Real dx_min=min(dx_array);
  ...
end DataStorage;

model GlobalModel
  Pipe pipe1;
  Pipe pipe2;
  inner DataStorage dataStorage(nPipes=2, dx_array={pipe1.dx, pipe2.dx});

  ...
end GlobalModel;

您应该注意不同“dx”的可变性,因为您不能将随时间变化的“dx”分配给声明为 parameter.

的“dx”

如果 DataStorage 模型的唯一目的是获取数组中的最小条目,那么您也可以将其三行代码放在 GlobalModel 中,将代码简化为:

model Pipe
  input Real dx_min;
  Real dx "calculated in this model";
  ...
end Pipe;

model GlobalModel
  parameter Integer nPipes=2;
  Real dx_array[nPipes]={pipe1.dx, pipe2.dx};
  Real dx_min=min(dx_array);

  Pipe pipe1(dx_min=dx_min);
  Pipe pipe2(dx_min=dx_min);

  ...
end GlobalModel;