Можно ли смоделировать рециркуляцию жидкости с помощью параллельных труб в OpenModelica?

В настоящее время я работаю над моделированием системы, включающей рециркуляцию жидкости (см. изображение, показывающее поток жидкости). В этой системе жидкость поступает через входное отверстие и проходит через трубу 1. Прежде чем попасть в отверстие ДПС, часть жидкости отводится через параллельную трубу. Кто-нибудь раньше сталкивался с подобной задачей моделирования? Мы будем очень признательны за любые идеи или предыдущий опыт решения проблем такого типа. Заранее спасибо!

Можно ли смоделировать рециркуляцию жидкости с помощью параллельных труб в OpenModelica?

открытая версия модели:

Подключено к OpenModelica v1.14.1 (64-разрядная версия). Подключено к OMSimulator v2.1.0-dev-147-g36ec2c7-mingw.

код :

model separation
  replaceable package Medium = Modelica.Media.Water.WaterIF97_ph constrainedby Modelica.Media.Interfaces.PartialMedium;
  /* Déclaration de la convection forcée*/
  replaceable model heatTransfet = Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.ConstantFlowHeatTransfer(alpha0 = conv_ext);
  /* Déclaration de la conduite */
  Modelica.Fluid.Pipes.DynamicPipe pipe(redeclare package Medium = Medium, allowFlowReversal = false, diameter = 5e-3, energyDynamics = Modelica.Fluid.Types.Dynamics.SteadyState, isCircular = true, length = 15, m_flows(fixed = true, start = 0.08), massDynamics = Modelica.Fluid.Types.Dynamics.SteadyState, momentumDynamics = Modelica.Fluid.Types.Dynamics.SteadyState, nNodes = 5, roughness = 3.2e-05, use_HeatTransfer = false) annotation(
    Placement(visible = true, transformation(origin = {-2, 10}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  /*  Paroi */
  /* Conditions aux limites */
  Modelica.Fluid.Sources.Boundary_pT inlet(redeclare package Medium = Medium, T = 40 + 273.15, nPorts = 1, p = 14e+5, use_p_in = false) annotation(
    Placement(visible = true, transformation(origin = {-86, -26}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
  Modelica.Fluid.Fittings.SimpleGenericOrifice DPSs(redeclare package Medium = Medium, diameter = 10e-3, use_zeta = true, zeta = 200) annotation(
    Placement(visible = true, transformation(origin = {37, -26}, extent = {{-7, -8}, {7, 8}}, rotation = 0)));
  inner Modelica.Fluid.System system(energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, momentumDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial) annotation(
    Placement(visible = true, transformation(origin = {-80, 22}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Fluid.Fittings.SimpleGenericOrifice DPSe(redeclare package Medium = Medium, diameter = 10e-3, use_zeta = true, zeta = 1) annotation(
    Placement(visible = true, transformation(origin = {-47, -26}, extent = {{-11, -8}, {11, 8}}, rotation = 0)));
  Modelica.Fluid.Sources.MassFlowSource_T boundary(redeclare package Medium = Medium,T = 40 + 273.15, m_flow = -0.32, nPorts = 1)  annotation(
    Placement(visible = true, transformation(origin = {72, -26}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Fluid.Pipes.DynamicPipe pipe1(redeclare package Medium = Medium,diameter = 10e-3, energyDynamics = Modelica.Fluid.Types.Dynamics.SteadyState, isCircular = true, length = 15, massDynamics = Modelica.Fluid.Types.Dynamics.SteadyState, momentumDynamics = Modelica.Fluid.Types.Dynamics.SteadyState, nNodes = 5, roughness = 3.2e-05, use_HeatTransfer = false) annotation(
    Placement(visible = true, transformation(origin = {-2, -26}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(inlet.ports[1], DPSe.port_a) annotation(
    Line(points = {{-80, -26}, {-58, -26}, {-58, -26}, {-58, -26}}, color = {0, 127, 255}));
  connect(DPSe.port_b, pipe1.port_a) annotation(
    Line(points = {{-36, -26}, {-12, -26}}, color = {0, 127, 255}));
  connect(pipe1.port_b, DPSs.port_a) annotation(
    Line(points = {{8, -26}, {30, -26}}, color = {0, 127, 255}));
  connect(DPSs.port_b, boundary.ports[1]) annotation(
    Line(points = {{44, -26}, {62, -26}}, color = {0, 127, 255}));
  connect(pipe.port_b, DPSe.port_b) annotation(
    Line(points = {{-12, 10}, {-36, 10}, {-36, -26}, {-36, -26}}, color = {0, 127, 255}));
  connect(pipe.port_a, DPSs.port_a) annotation(
    Line(points = {{8, 10}, {30, 10}, {30, -26}}, color = {0, 127, 255}));
algorithm

  annotation(
    uses(Modelica(version = "3.2.3")),
    Diagram);
end separation;

Я попытался предотвратить изменение направления потока жидкости в «трубе», но столкнулся с ошибкой:

«Решатель попытается выполнить деление на ноль в момент 0: Pipe.m_flows[1] + max(DPSe.m_flow, 1e-007). Это деление приводит к бесконечности или NaN в момент 0 с (a=27123.8) / (b=0), где делитель b равен: Pipe.m_flows[1] + max(DPSe.m_flow, 1e-007)».

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашей модели давление монотонно уменьшается от inlet к boundary. Таким образом, в pipe нет «физического закона» (гравитация, ускорение из-за кипения и т. д.), который заставил бы поток идти против создаваемого перепада давления.

Кроме того, установка allowFlowReversal на false не заставляет pipe действовать как обратный клапан. Он просто останавливает симуляцию с сообщением об ошибке, в котором говорится, что вы нарушили требование m_flow>0.

Другие вопросы по теме