Modelica中用PPM表示痕量物质:能否复用SI单位库类型?
在Modelica中用PPM跟踪痕量物质的实现方案
能否复用Modelica.Units.SI的现有类型?
可以,但SI库没有直接提供PPM的预定义类型——因为PPM本质是无量纲的比例(比如1 PPM = 1e-6 mol/mol),所以可以基于Modelica.Units.SI.Dimensionless这个核心类型来实现,同时通过自定义单位或显示单位来明确PPM的含义,和百分比、千分比的实现逻辑一致。
具体实现方法
1. 直接用无量纲类型+手动转换
最基础的方式是用Dimensionless定义参数/变量,计算时自行转换为PPM对应的比值:
// 直接以PPM为输入,计算时转成无量纲比值 parameter Modelica.Units.SI.Dimensionless tracePPM = 3.2 "痕量物质浓度(PPM)"; Modelica.Units.SI.Dimensionless traceRatio = tracePPM * 1e-6;
2. 自定义PPM类型(更清晰)
如果想让代码更具可读性,避免重复转换,可以扩展Dimensionless类型,自定义PPM单位:
// 自定义PPM类型,继承SI无量纲类型 type PPM = Modelica.Units.SI.Dimensionless( final quantity="Dimensionless", final unit="ppm" ); // 直接使用自定义类型 parameter PPM traceConcentration = 3.2 "痕量物质浓度";
这样在模型中直接用PPM类型,既符合SI的类型体系,又能明确表达单位含义,仿真工具也能识别这个单位并正确显示。
3. 设置显示单位(仅可视化需求)
如果只是希望仿真工具(如Dymola、OpenModelica)的界面上显示为PPM,不需要修改类型定义,可以给变量添加displayUnit注释:
parameter Modelica.Units.SI.Dimensionless traceRatio = 3.2e-6 "痕量物质浓度比值"; annotation (Dialog(displayUnit="ppm"));
工具会自动把底层的无量纲数值(3.2e-6)显示为3.2 ppm,不影响实际计算逻辑。
关键注意点
- 明确PPM的定义:是摩尔比PPM(mol/mol × 1e6)还是质量比PPM(kg/kg × 1e6),两者转换系数不同,要和你的物理场景匹配。
- 自定义单位时,
final unit="ppm"的设置必须正确,否则仿真工具可能无法识别单位转换规则。
内容的提问来源于stack exchange,提问作者qpdbqpdb
相关产品推荐
相关产品推荐

