Учебные модели Modelica Медицинские подразделения без СИ
Я хочу использовать не-СИ единицы в модели Modelica в медицинском контексте. Я использую Modelica в Dymola. Будучи инженером, я предпочитаю единицы СИ. Но параметры моей модели получены из медицинских публикаций, и я хочу избежать ошибок преобразования. Медицинские подразделения также упрощают общение с врачами.
Например, единица «мм рт. Ст.» (Миллиметры ртутного столба) используется вместо «Па» для давления. Переменные давления определяются в модели следующим образом:
type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg")
Перевод модели для симуляции приводит к следующему предупреждению для каждой переменной не-SI в модели (всего ~ 300 предупреждений):
Could not decode the unit symbol "mmHg" appearing in the unit string "mmHg"
Если изменения в модели вызывают новое предупреждение, его почти невозможно обнаружить. Поэтому мне нужно научить Modelica блоку "mmHg".
Мои текущие знания по теме:
- Языковая спецификация Modelica 3.3, Глава 19 Выражения единиц измерения: «Можно поддерживать символы единиц измерения, определенные пользователем». Однако в документе это не уточняется.
- пользователи могут определять единицы отображения (реальный атрибут "displayUnit") для использования в графическом интерфейсе моделирования, если коэффициент преобразования определен в файле "displayunit.mos" в каталоге Dymola следующим образом:
defineUnitConversion("Pa", "mmHg", 760/101325);
Это не вариант, потому что это уменьшает мобильность модели. Это должно быть выполнено вручную на каждом компьютере, на котором запущена модель и требуются права администратора (которых у меня нет).
Заранее спасибо за помощь, это очень ценится!
РЕДАКТИРОВАТЬ (может быть полезно любому, кто столкнется с этим в будущем):
Версии на момент публикации: Стандартная библиотека Modelica 3.2, Dymola Version 2014 (64-bit) 2013-03-25
Я забыл добавить следующее к моим текущим знаниям по этой теме: Physiolibrary 2.1.1 определяет displayUnits для GUI. Для кодирования авторы используют следующий прием:
type Pressure = Modelica.SIunits.Pressure(displayUnit="mmHg", nominal=133.322387415);
Таким образом, Modelica обрабатывает переменные типа Pressure с единицами Паскаля (Н / м2), но делит каждое значение, введенное в коде, на заданный номинал.
КОРРЕКЦИЯ:
В этом разделе я ранее заявлял, что Physiolibrary использует номинальный атрибут Real для преобразования единиц. Это не вариант. Спасибо Марек Матеяк (автор Physiolibrary) за исправление меня. Единственная цель номинала атрибута - масштабирование численной задачи по соображениям устойчивости.