Modelica 如何';连接';具有相互为子集的接口的元素?

Modelica 如何';连接';具有相互为子集的接口的元素?,modelica,Modelica,我们正在开发一个简单的库来同时模拟水文过程和明渠水流 对于明渠水流要素(1-D浅水方程、堰等),我们使用流量(Q)作为流量变量,水位(H)作为横向变量的连接器。另一方面,在水文应用中,路由模式的流行选择只涉及Q变量。在这种模型中,流动不是由势差(H)驱动的,而是更经验性的 Whe希望以(Q,H)-元素可以连接到仅Q-元素的方式设置包。此外,如果可能,一种类型的元件应易于与另一种类型的元件互换 作为一个例子,下面是一个简单的设置(“集成”)与一个水库(“存储”),一个路由元素(“通行”)和一个源(

我们正在开发一个简单的库来同时模拟水文过程和明渠水流

对于明渠水流要素(1-D浅水方程、堰等),我们使用流量(Q)作为流量变量,水位(H)作为横向变量的连接器。另一方面,在水文应用中,路由模式的流行选择只涉及Q变量。在这种模型中,流动不是由势差(H)驱动的,而是更经验性的

Whe希望以(Q,H)-元素可以连接到仅Q-元素的方式设置包。此外,如果可能,一种类型的元件应易于与另一种类型的元件互换

作为一个例子,下面是一个简单的设置(“集成”)与一个水库(“存储”),一个路由元素(“通行”)和一个源(“排放”)。储层需要同时暴露Q和H,以便能够与(Q-H)明渠流量元件(本例中不存在)相互作用。这里,它连接到原则上仅为Q的元素。它仍然使用(Q,H)-连接器来允许连接。然而,没有水位方程。这意味着我们需要在集成模型中添加一个虚拟方程来关闭系统,这显然是不可取的

within Deltares;

package Test
  connector FlowPort
    flow Real Q;
    Real H;
  end FlowPort;

  model Discharge
    Real Q;
    FlowPort port;
  equation
    port.Q + Q = 0;
  end Discharge;

  model Storage
    FlowPort port;
  equation
    der(port.H) = port.Q;
  end Storage;

  model PassFlow "Inflow is outflow, level is untouched"
    FlowPort upstream;
    FlowPort downstream;
  equation
    upstream.Q + downstream.Q = 0;
  end PassFlow;

  model Integrated
    Deltares.Test.Discharge discharge;
    Deltares.Test.PassFlow passflow;
    Deltares.Test.Storage storage;
  equation
    connect(discharge.port, passflow.upstream);
    connect(passflow.downstream, storage.port);
    discharge.Q = 10;
    passflow.upstream.H = -1;
    //I want to avoid this equation
  end Integrated;
end Test;
是否可以为这两种类型的元素定义一个连接器,而无需添加虚拟方程式?我们尝试使用可扩展连接器,但迄今为止没有成功。可扩展连接器能适应这种想法吗