You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:32:00