Взаимозависимость переменных завершает симуляцию Димолы и приводит к нелинейной системе уравнений - PullRequest
1 голос
/ 06 августа 2020

Я разрабатываю модель для описания поведения двухтрубной сети. Сеть подключена к резервуару, в котором тепло вводится или извлекается из системы в зависимости от внешнего массового расхода. Предполагается, что массовый расход как для нагрева, так и для охлаждения изменяется во времени. Начальное значение PipeTemp связано с параметром StartTemp. Однако в разные моменты времени PipeTemp вычисляется из функции max.

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

Эту простую модель можно легко смоделировать в Excel, поскольку она способна обрабатывать взаимозависимость между переменными ячейки. Каким может быть обходной путь для этой модели в Димоле, чтобы избежать нелинейной системы уравнений?

model FullyMixedTemperature

  parameter Real StartTemp = 20;      //Assumed mixed temperature in the pipes
  parameter Real dTpipe = 10;        //Temperature difference between the two pipes
  parameter Real TankVol = 150;      //Total volume
  Real DecreasingTemp;               //Mixed temperature in the pipe due to additional cooling mass flow rate
  Real IncreasingTemp;               //Mixed temperature in the pipe due to additional heating mass flow rate
  Real PipeTemp(start=StartTemp);    //Mixed temperature in the pipe
  Real CoolFlowRate;                 //Additional cooling flow rate from external sources
  Real HeatFlowRate;                 //Additional heating flow rate from external sources

equation 

  CoolFlowRate=0.5*time;
  HeatFlowRate=2*time;
  PipeTemp = max(DecreasingTemp, IncreasingTemp);
  DecreasingTemp= PipeTemp-(dTpipe*CoolFlowRate/TankVol);
  IncreasingTemp= PipeTemp+(dTpipe*HeatFlowRate/TankVol);

end FullyMixedTemperature;

1 Ответ

4 голосов
/ 06 августа 2020

Модель в том виде, в котором она написана, не имеет смысла.

Поскольку dTPipe, HeatFlowRate, CoolFlowRate и TankVol неотрицательны, IncreasingTemp больше DecreasingTemp, и, таким образом, уравнение сворачивается к:

PipeTemp=PipeTemp+dTPipe*HeatFlowRate/TankVol;

, и вы не можете вычислить PipeTemp из этого.

Ближайшим вариантом будет то, что в каждой точке выборки мы вычисляем новый PipeTemp, и это будет:

model FullyMixedTemperature

  parameter Real StartTemp = 20;      //Assumed mixed temperature in the pipes
  parameter Real dTpipe = 10;        //Temperature difference between the two pipes
  parameter Real TankVol = 150;      //Total volume
  Real DecreasingTemp;               //Mixed temperature in the pipe due to additional cooling mass flow rate
  Real IncreasingTemp;               //Mixed temperature in the pipe due to additional heating mass flow rate
  Real PipeTemp(start=StartTemp);    //Mixed temperature in the pipe
  Real CoolFlowRate;                 //Additional cooling flow rate from external sources
  Real HeatFlowRate;                 //Additional heating flow rate from external sources

equation 

  CoolFlowRate=0.5*time;
  HeatFlowRate=2*time;
  when sample(1,1) then
    PipeTemp = max(pre(DecreasingTemp), pre(IncreasingTemp));
  end when;
  DecreasingTemp= PipeTemp-(dTpipe*CoolFlowRate/TankVol);
  IncreasingTemp= PipeTemp+(dTpipe*HeatFlowRate/TankVol);

end FullyMixedTemperature;

Но мне кажется более вероятным, что вам нужно дифференциальное уравнение, в котором оба потока вносят вклад:

model FullyMixedTemperature

  parameter Real StartTemp = 20;      //Assumed mixed temperature in the pipes
  parameter Real dTpipe = 10;        //Temperature difference between the two pipes
  parameter Real TankVol = 150;      //Total volume
  Real PipeTemp(start=StartTemp);    //Mixed temperature in the pipe
  Real CoolFlowRate;                 //Additional cooling flow rate from external sources
  Real HeatFlowRate;                 //Additional heating flow rate from external sources

equation 

  CoolFlowRate=0.5*time;
  HeatFlowRate=2*time;
  der(PipeTemp) =(dTpipe*HeatFlowRate/TankVol)-(dTpipe*CoolFlowRate/TankVol);

end FullyMixedTemperature;
...