Правильное использование inStream () в Modelica

Я пытаюсь построить очень простую модель распределенного объема теплоносителя в Modelica и изо всех сил пытаюсь правильно реализовать ее с помощью оператора потока. В этом томе в качестве среды используется DryAirNasa, и я хотел бы, чтобы в нем не было накопителя большой емкости, падения давления и накопления энергии (как в модели Modelica.Fluid.Pipes.StaticPipe). Тем не менее, я хотел бы явно выполнить баланс энергии, чтобы могли быть взаимодействия теплопередачи. Я бы также предпочел не определять массовый расход в этой модели, но пусть он будет определен в одной из границ, прикрепленных к концу трубы (например, Modelica.Fluid.Sources.MassFlowSource_h).

Я создал тестовую реализацию такой модели, но, по мнению Димолы, в этой модели явно отсутствует одно уравнение. Я был бы признателен за любое понимание того, как исправить эту модель, чтобы она была правильной. Если я добавлю уравнение

port_a.h_outflow = Medium.specificEnthalpy(state_a)

Что касается раздела уравнений, модель имеет такое же количество уравнений и неизвестных, но у меня нет веских оснований для добавления такого уравнения.

 model AirFlowTemp

  // Objective: create a component that has no pressure drop, no mass storage,
   and no energy storage, but that has a heat input.

  import SI=Modelica.SIunits;

  final replaceable package Medium=Modelica.Media.Air.DryAirNasa;

  AirFlow.AirFlowPort port_a(redeclare package Medium
      = Medium);
  AirFlow.AirFlowPort port_b(redeclare package Medium
      = Medium);
  Interfaces.HeatPort heatPort;

  Medium.EnthalpyFlowRate[2] H_flow "enthalpy flow";
  SI.HeatFlowRate Q_flow "heat flow rate";

  Medium.Temperature T_mean;
  Medium.ThermodynamicState state_a;
  Medium.ThermodynamicState state_b;

equation 
  // no pressure drop across the component.
  port_a.p = port_b.p;

  // Assume that there is no mass storage in the volume
  0 = port_a.m_flow + port_b.m_flow;

  // Energy balance
  H_flow[1] = semiLinear(port_a.m_flow, inStream(port_a.h_outflow), inStream(port_b.h_outflow));
  H_flow[2] = semiLinear(port_b.m_flow, inStream(port_b.h_outflow), inStream(port_a.h_outflow));
  0 = Q_flow + H_flow[1] + H_flow[2];

  state_a = Medium.setState_ph(port_a.p, inStream(port_a.h_outflow));
  state_b = Medium.setState_ph(port_b.p, inStream(port_b.h_outflow));

  T_mean = (Medium.temperature(state_a) +
            Medium.temperature(state_b))/2;

  heatPort.Q_flow = Q_flow;
  heatPort.T = T_mean;

end AirFlowTemp;

connector AirFlowPort

  replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;

  Medium.AbsolutePressure p;
  flow Medium.MassFlowRate m_flow;
  stream Medium.SpecificEnthalpy h_outflow;
  stream Medium.MassFraction Xi_outflow[Medium.nXi];

end AirFlowPort;


connector HeatPort
  extends Modelica.Thermal.HeatTransfer.Interfaces.HeatPort;
end HeatPort;

person user424211    schedule 25.07.2013    source источник


Ответы (1)


У меня была такая же проблема, когда я делал то же самое около 4 недель назад. Попробуйте, если это сработает, как шаг, чтобы приблизиться к правильному использованию inStream.

  1. Удалить Medium.EnthalpyFlowRate [2] H_flow "поток энтальпии" SI.HeatFlowRate Q_flow "скорость теплового потока"; Интерфейсы.HeatPort heatPort; SI.HeatFlowRate Q_flow «расход тепла»; Средняя.Температура T_mean; T_mean = (Средняя температура (state_a) + Средняя температура (state_b)) / 2;

    heatPort.Q_flow = Q_flow; heatPort.T = T_mean; => просто тестируем трубу, без теплового порта

  2. Используйте port_a.outflow * port_a.m_flow = inStream (port_b.outflow) * port_b.m_flow; port_b.outflow * port_b.m_flow = inStream (port_a.outflow) * port_a.m_flow;

вместо: H_flow [1] = полулинейный (port_a.m_flow, inStream (port_a.h_outflow), inStream (port_b.h_outflow)); H_flow [2] = полулинейный (port_b.m_flow, inStream (port_b.h_outflow), inStream (port_a.h_outflow)); 0 = Q_flow + H_flow [1] + H_flow [2];

  1. Измените свой тест на отсутствие теплового порта

=> Это работает?

С уважением, Уве

person user2686132    schedule 15.08.2013