Я пытаюсь построить очень простую модель распределенного объема теплоносителя в 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;