Как я могу получить размер временного шага для реального значения в Modelica? - PullRequest
1 голос
/ 06 мая 2020

Мне интересно, как я получаю размер каждого временного шага для реальных значений, чтобы использовать это в уравнении. Я пытался найти функции или что-то еще, но не смог.

На самом деле, я пытаюсь интегрировать давление по объему, но интегратор в Modelica поддерживает только интеграл по времени. Поэтому я решил умножить (delta_volume / delta_time) на интеграл давления. Вот почему я это делаю.

Псевдокод выглядит следующим образом.

  Work=Integral(pressure);

enter image description here

Но с учетом давления по объему - это то, что я хочу, а не по времени. Поэтому его следует изменить следующим образом:

  Work=(Integral(pressure)) * (delta Volume/delta time);

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

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

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Не уверен, правильно ли я понимаю ваш вопрос, но не могли ли вы вычислить мощность с помощью

Power = pressure * volumeFlowRate = pressure * der(volume);

, а затем вычислить

der(Work) = Power;

Помимо этого, относительно вашего фактического вопроса: Это невозможно получить размер шага решателя из кода Modelica модели.

2 голосов
/ 06 мая 2020

Если вы не хотите интегрировать p dt, а p dV=p dV/dt dt, тогда вам нужно умножить p на der(V), есть блоки для умножения Modelica.Blocks.Math.Product и дифференцирования Modelica.Blocks.Continuous.Der; в качестве альтернативы используйте Modelica.Blocks.Continuous.Derivative для приблизительной производной.

Обратите внимание, что Dymola автоматически проверяет единицы, в этом случае проверяется, что интеграл p*der(V) совместим с работой (например, «J») - что должно быть .

...