Проблема с реализацией очень простого источника массового расхода

В настоящее время я изучаю Modelica, пробуя несколько очень простых примеров. Я определил соединитель Incompressible для несжимаемой жидкости следующим образом:

connector Incompressible
  flow Modelica.SIunits.VolumeFlowRate V_dot;
  Modelica.SIunits.SpecificEnthalpy h;
  Modelica.SIunits.Pressure p;
end Incompressible;

Теперь я хочу определить источник массового или объемного расхода:

model Source_incompressible
  parameter Modelica.SIunits.VolumeFlowRate V_dot;
  parameter Modelica.SIunits.Temperature T;
  parameter Modelica.SIunits.Pressure p;
  Incompressible outlet;
equation 
  outlet.V_dot = V_dot;
  outlet.h = enthalpyWaterIncompressible(T);  // quick'n'dirty enthalpy function
  outlet.p = p;
end Source_incompressible;

Однако при проверке Source_incompressible я получаю следующее:

The problem is structurally singular for the element type Real.
The number of scalar Real unknown elements are 3.
The number of scalar Real equation elements are 4.

Я здесь в растерянности. Ясно, что в модели три уравнения - откуда взялось четвертое уравнение?

Большое спасибо за понимание.


person Dominic Jefferies    schedule 22.05.2014    source источник


Ответы (2)


Доминик,

Здесь возникает пара проблем. Как указывает Мартин, разъем несбалансирован (в этом разъеме нет совпадающих пар «сквозной» и «поперечный»). Для жидкостных систем это приемлемо. Однако интенсивные свойства текучей среды (например, энтальпия) должны быть отмечены как так называемые переменные «потока».

По общему признанию, эта тема довольно сложная. Я планирую добавить расширенную главу в мою онлайн-книгу Modelica по этой теме, но у меня не было время еще нет. А пока я предлагаю вам взглянуть на библиотеку Modelica.Fluid и / или эта презентация одного из ее авторов, Франческо Казелла.

person Michael Tiller    schedule 26.05.2014
comment
Спасибо, Майкл и @ sjoelund.se! Я до сих пор не совсем понимаю достоинства балансного или физического разъема (эти термины синонимы, не так ли?). Почему желательно иметь совпадающие пары потоковых и потенциальных переменных? В моем случае нужно было бы добавить переменную потока энтальпии H_dot, которая является продуктом других переменных соединения - ситуации, которую хотелось бы избежать. Еще меня смущает то, почему создание экземпляра коннектора в модели (без connect()) генерирует уравнение для каждой переменной потока. Это сделано для того, чтобы справиться с неподключенными разъемами? - person Dominic Jefferies; 03.06.2014
comment
Хорошо, баланс и физика немного отличаются. Физический соединитель - это тот, который формулирует уравнения, основанные на принципах сохранения (вспомните законы напряжения и тока Кирхгофа). Сбалансированная МОДЕЛЬ - это модель, в которой обязательно есть правильное количество уравнений. Вы можете найти обсуждение сбалансированных моделей в моей книге. - person Michael Tiller; 04.06.2014
comment
Майкл, для протокола, я специально спрашивал о сбалансированных разъемах, а не об общей концепции сбалансированных моделей. Вы использовали термин несимметричный соединитель, но я не смог найти его формального определения, поэтому у меня вопрос. (Возможно, сокращение моего ответа до 600 символов сказалось на этом.;) Кроме того, опять же, для протокола, я провел часы с вашей онлайн-книгой, а также с вашей книгой в мягкой обложке 2001 года. Ваши усилия очень ценны!) - person Dominic Jefferies; 16.06.2014

Этот разъем не является физическим разъемом. Вам нужна одна переменная потока для каждой потенциальной переменной. Это сообщение об ошибке OpenModelica, если это немного помогает:

Warning: Connector .Incompressible is not balanced: The number of potential variables (2) is not equal to the number of flow variables (1).
Error: Too many equations, over-determined system. The model has 4 equation(s) and 3 variable(s).
Error: Internal error Found Equation without time dependent variables outlet.V_dot = V_dot

Это связано с тем, что неподключенный соединитель будет генерировать одно уравнение для потока:

outlet.V_dot = 0.0;

Это означает, что розетка. V_dot заменяется в:

outlet.V_dot = V_dot;

И вы получите:

0.0 = V_dot;

Но V_dot является параметром и не может быть назначен в разделе уравнения (требуется исходное уравнение, если параметр имеет fixed = false, или уравнение привязки в случае по умолчанию).

person sjoelund.se    schedule 23.05.2014