我想在医学背景下使用Modelica模型中的非SI单位。我在Dymola使用Modelica。作为工程师,我更喜欢SI单位。但我的模型参数来自医学出版物,我想避免转换错误。医疗单位还简化了与医生的沟通。
例如,单位" mmHg" (毫米汞柱)代替" Pa"压力。压力变量在模型中定义如下:
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章单元表达式:
"可以支持用户定义的单位符号。"
但是该文件没有详细说明这一点
- 用户可以定义显示单位(Real属性" displayUnit"),以便在模拟GUI中使用,只要转换因子在" displayunit.mos"中定义。 Dymola目录中的文件如下:
defineUnitConversion("Pa", "mmHg", 760/101325);
这不是一个选项,因为它会降低模型的可移植性。它必须在运行模型的每台计算机上手动执行,并且需要管理员权限(我没有)。
在此先感谢您的帮助,非常感谢!
编辑(对未来遇到这种情况的人可能会有所帮助):
发布时的版本:Modelica标准库3.2,Dymola版本2014(64位)2013-03-25
我忘了将以下内容添加到我目前对该主题的了解中: Physiolibrary 2.1.1定义了GUI的displayUnits。对于编码,作者使用以下技巧:
type Pressure = Modelica.SIunits.Pressure(displayUnit="mmHg", nominal=133.322387415);
这样,Modelica将Pressure类型的变量处理为单位Pascal(N / m2),但将代码中输入的每个值除以给定的名义值。
CORRECTION :
在本节中,我之前曾说过,Physiolibrary使用Real属性名义单位转换。不是这种情况。感谢Marek Matejak(Physiolibrary的作者)纠正我。名词属性的唯一目的是出于稳定性原因缩放数值问题。
答案 0 :(得分:3)
据我所知,没有好办法以便携的方式做到这一点。
Modelica规范没有说明如何处理用户定义的单位,因此每个工具都以自己的方式做到(或不做)。
我认为最好的方法就是通过在模型或库中定义类型来做,即使在某些工具中有警告也是如此。
在Dymola你可以通过以下方式摆脱警告:
Advanced.CheckUnits = false
在命令窗口中。
答案 1 :(得分:3)
Dymola中的Modelica医疗非SI(显示)单位:
要为医疗非SI(显示)单位提供支持,请尝试扩展Dymola文件“C:\ Program Files * \ Dymola * \ insert \ displayunit.mos”,例如https://github.com/MarekMatejak/Physiolibrary/blob/master/Physiolibrary/Resources/DisplayUnits/displayunit.mos < / p>
参数或变量的定义应该将属性单元始终设置为SI单位,displayUnit可以是在Dymola文件“displayunit.mos”中定义转换的所有内容:
例如:
参数Real systolicPressure(final unit =“Pa”,displayUnit =“mmHg”)= 16000;
参数Real diastolicPressure(最终单位=“Pa”,displayUnit =“torr”)= 10000;
Modelica将始终以SI单位计算模型,但Dymola中的参数对话框和输出图将以显示单位显示。所以要小心 - 文本代码中的每个值都必须是SI单位。
名词与转换没有直接联系。它们仅用于数值数学背后的相对容差。
如果您在Physiolibrary显示单元中发现任何错误,请不要犹豫,报告。谢谢!
答案 2 :(得分:2)
@Jay_At_Play,你可能想再看看@MichaelTiller分享的the Modelica Trac site。我刚刚讨论了一种可能有用的方法。但是,作为警告,它是非标准的,并且与Modelica标准库不直接兼容。
(我想将此添加到原始问题的评论中,但我没有信誉点。)