Modelica - Как использовать единицы в уравнениях - PullRequest
1 голос
/ 04 февраля 2020

Как я могу использовать единицы измерения непосредственно в уравнениях в Modelica? Это вообще возможно? Простой пример - параметр, который следует сделать зависимым (в качестве значения по умолчанию) от другого параметра другой единицы. В приведенном ниже примере это даст предупреждение модуля (естественно). Как мне сказать, я просто хочу номинальное значение переменной, а не значение + единица измерения?

model customspringdamper
  import SI = Modelica.SIunits;
  parameter SI.TranslationalSpringConstant c =100;
  parameter SI.TranslationalDampingConstant d= 0.01*c;
  ... < rest of stuff > ...
end customspringdamper;

Конечно, я мог бы определить другой параметр с единицей и значением 1, но это кажется более трудоемким, чем необязательным?

1 Ответ

2 голосов
/ 04 февраля 2020

Я вижу три способа:

  1. Объявить параметр как действительный без единицы измерения: parameter Real c =100; Вы теряете проверку модуля, но не похоже, что вы ее используете.
  2. Используйте константы для преобразования значения в другую единицу:

import SI = Modelica.SIunits; parameter SI.TranslationalSpringConstant c= 100; parameter SI.TranslationalDampingConstant d= 0.01*(c/unitSpring)*unitDamping; constant SI.TranslationalSpringConstant unitSpring=1; constant SI.TranslationalDampingConstant unitDamping=1;

Инструменты должны иметь возможность упростить код для удаления этих констант. Тем не менее, вы обходите проверку модулей, что делает ваш код более подверженным ошибкам.

В некоторых случаях допустимо удалять модули таким способом, но не в подобных случаях.

В основном то же, что и 2, но вы ставите единицы на 0.01; и дать ему фактический физический смысл:

import SI = Modelica.SIunits; parameter SI.TranslationalSpringConstant c= 100; parameter SI.Time SpringTime=0.01; parameter SI.TranslationalDampingConstant d= SpringTime*c;

...