Компонент стандартной библиотеки Modelica AbruptAdaptor

Протестировано с:

Версии MSL:

  • 3.2.1, 14.08.2013, сборка 2 (14.08.2013 08: 44: 41Z)
  • 3.2.1, 14.08.2013, сборка 4 (30.09.2015, 09: 15: 00Z)

Ниже представлена ​​модель с 4-мя компонентами:

  1. Источник массового расхода (M_bound)
  2. AbruptAdapter (крутойадаптер)
  3. Динамическая труба (pipeSmall)
  4. Источник давления (P_bound)

В разделе equation также содержатся два варианта подключения модели:

Случай №1: M_bound -> abruptAdaptor -> pipeSmall -> P_bound

Случай № 2: M_bound -> pipeSmall -> abruptAdaptor -> P_bound

Резюме: случай № 1 имитирует нормально, но случай № 2 не работает. Сгенерированная ошибка показана ниже:

The following error was detected at time: 0

Model error - division by zero: (data.zeta1) / ((if data.zeta1_at_a then rho_a_des*A_a^2 else rho_b_des*A_b^2)) = (0.402964) / (0)

The stack of functions is:
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure(
 -pipeBig.port_b.m_flow, 
abruptAdaptor.state_a.d, 
abruptAdaptor.state_b_des.d, 
abruptAdaptor.state_b.d, 
abruptAdaptor.state_a_nondes.d, 
abruptAdaptor.data, 
abruptAdaptor.m_flow_small)
First evaluation failed for non-linear solver.

Вопрос: почему дело №2 не удается и рекомендации по его устранению? Любое понимание было бы здорово. Это может быть даже ошибка в AbruptAdaptor компоненте.

Код модели

model AbruptAdaptor_1Pipe

  replaceable package Medium = Modelica.Media.Water.StandardWater;

  inner Modelica.Fluid.System system;

  Modelica.Fluid.Sources.Boundary_pT P_bound(
    redeclare package Medium = Medium,
    nPorts=1,
    p=system.p_ambient,
    T=M_bound.T);

  Modelica.Fluid.Sources.MassFlowSource_T M_bound(
    redeclare package Medium = Medium,
    m_flow=1,
    T=300,
    nPorts=1);

  Modelica.Fluid.Fittings.AbruptAdaptor abruptAdaptor(
    redeclare package Medium = Medium,
    diameter_a=1,
    diameter_b=0.5,
    m_flow_nominal=M_bound.m_flow,
    m_flow_start=M_bound.m_flow);

  Modelica.Fluid.Pipes.DynamicPipe pipeSmall(
    redeclare package Medium = Medium,
    T_start=M_bound.T,
    m_flow_start=M_bound.m_flow,
    length=1,
    diameter=0.5,
    modelStructure=Modelica.Fluid.Types.ModelStructure.av_b); // switch to av_vb with case #2

equation 

  // Case #1
  connect(M_bound.ports[1],abruptAdaptor.port_a);
  connect(abruptAdaptor.port_b,pipeSmall.port_a);
  connect(pipeSmall.port_b,P_bound.ports[1]);

  // Case #2
  //connect(M_bound.ports[1],pipeSmall.port_b);
  //connect(abruptAdaptor.port_b,pipeSmall.port_a);
  //connect(abruptAdaptor.port_a,P_bound.ports[1]);

  annotation (uses(Modelica(version="3.2.1")));
end AbruptAdaptor_1Pipe;

person Scott G    schedule 29.03.2016    source источник
comment
Два комментария: вы используете старый MSL (сборка 2), текущая сборка 4 ближе к спецификации языка. Второй комментарий: DynamicPipe использует шахматную сетку с чередующимися объемами и элементами потока. Попробуйте изменить modelStructure на вкладке Advanced параметров, может упростить решение системы уравнений. Но ваша ошибка может быть совершенно не связана ...   -  person matth    schedule 30.03.2016
comment
В случае № 2 направление массового потока через компоненты меняется на противоположное. Это нарочно или вы действительно хотели поменять порядок трубы / адаптера?   -  person Rene Just Nielsen    schedule 30.03.2016
comment
С Dymola вы, вероятно, не увидите особой разницы между сборкой 2 и 4. Строгое / приближенное к спецификации языка в основном помогает другим инструментам, таким как OpenModelica и JModelica (вы также добавили эти теги). Тем не менее, вы можете подумать об обновлении до Dymola 2016 FD01, которая на данный момент является последней версией.   -  person matth    schedule 30.03.2016
comment
Извините, что опубликовал раньше, я тоже имел в виду: @matth: 1. Я использую Dymola 2016, который загружает сборку 2, но я сравнил код между версиями и не увидел различий в AbruptAdapter. 2. Я знаю о ступенчатом характере DynamicPipe. Кажется, проблема не в этом. Попробую разобраться, как обновиться до последней сборки. Я также попытался использовать jModelica и получил ту же ошибку.   -  person Scott G    schedule 30.03.2016
comment
@ReneJustNielsen: Направление потока было намеренным. Предполагается, что устройство совместимо в обоих направлениях. Если вы поменяете порядок (например, поменяете местами pipeSmall.port_b и abruptAdaptor.port_a в соединениях), модель будет работать. Однако, если вы поместите трубу по обе стороны от компонента, модель выйдет из строя из-за вышеупомянутой ошибки.   -  person Scott G    schedule 30.03.2016
comment
@matth: я тестировал его со сборкой 4 и обнаружил ту же ошибку.   -  person Scott G    schedule 30.03.2016


Ответы (1)


ваша шахматная сетка в порядке, вы устанавливаете объемы там, где вам нужно. Не волнуйтесь, это не ваша вина, это отладка, я пытался использовать ее несколько раз, и она всегда дает сбой одним из способов (я не знаю положение вашего адаптера, но это не имеет особого значения ). Вы всегда можете использовать отверстия, в которых вы определяете отношения dp (Areas_rate), избегая реверсивных потоков в обоих случаях, таким образом, соединяя два объема до и после отверстий (например, два клапана параллельно). Это должно сработать.

person victor.aer    schedule 13.04.2016
comment
Спасибо за независимую проверку моих наблюдений. Я приму это как ответ. - person Scott G; 20.08.2016