atialDistribution () - Оператор и нескалярные градиенты в Modelica - PullRequest
0 голосов
/ 24 мая 2018

Я использую оператор пространственного распределения () в Dymola и получаю следующее сообщение при использовании Hidden.PrintFailureToDifferentiate = true;

"Может вычислять только нескалярные градиенты функций, указывающих производные, а не для: пространственного распределения"

Я вызываю оператора следующим образом:

(time_rev, time_flow) = пространственное распределение (время, время, х / длина, v_water> = 0, {0.0,1.0}, {время, время});

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

Кто-нибудь понял, в чем проблема?Я не совсем понимаю сообщение об ошибке.

Более полный пример:

cp_in = //Calculates specific Heatcap 
cp_out = //Calculates specific Heatcap 
cp = (cp_in+cp_out)*0.5;
C = (Modelica.Constants.pi*(1/4))*diameter_i^2*fluidInlet.d*cp;
R= // Calculates Heatresistance 
//---------Conservation of mass flow and composition
//The usual stuff equal massflow,xi and p at both connectors
//----------Spatial
tau_nom = C*R;
v_water = //Calc Speed of water from Geometric data and inlet rho
der(x) = v_water;
(time_reversed,time_flow) = spatialDistribution(time,time,x/length,v_water>=0, {0.0,1.0}, {time,time});
 tau_delay= time - time_flow;
 tau_reversed= time - time_reversed; //Not used right now
if inlet.m_flow >= 0 then
  T_out = (T_amb + (T_in - heat.T)*exp(-tau_delay/tau_nom));
  heat.Q_flow = -inlet.m_flow*cp*(T_in - T_out);
  inlet.h = inStream(outlet.h);
else
  outlet.h = inStream(inlet.h);
  T_in = T_out;
  heat.Q_flow = -inlet.m_flow*cp*(T_in - T_out);
end if;

1 Ответ

0 голосов
/ 30 января 2019

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

Если вы посмотрите журнал переводаЯ ожидаю, что «Число числовых якобианов:» не равно нулю.

Отсутствующий якобиан для нелинейной системы уравнений обычно не является основной проблемой.

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

Может случиться так, что задержка пространственного распределения должна решить эту проблему, и в этом случае Dymola 2019 FD01 может устранить проблему, если вы установите Advanced.BreakDelayLoops = true;(но сложно сказать без полной модели).(Похоже, у вас есть более ранняя версия, и флаг там не работает.)

Я знаю, что ответ немного поздний, но было сложно исследовать без полной модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...