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

openMDAO为何将自抵消单位(如mm/mm)的输出单位设为None而非unitless?

OpenMDAO中比率输出单位mm/mm被设为None而非unitless的问题

问题详情

我在搭建Explicit Component模型时,定义了一个比率类型的输出,代码如下:

self.add_output('diameter_over_thickness', units='mm/mm')

类初始化完成后,通过list_outputs()查看发现,OpenMDAO把这个输出的单位赋值成了None。我觉得用unitless来表示无单位量会更合理,但手动设置units='unitless'又会在使用get_val()函数和预定义单位字典时引发问题。

原因与解决方案

为什么会被设为None

OpenMDAO内置了单位化简逻辑,当识别到分子分母单位完全一致(比如mm/mm)时,会自动判定这是无量纲量,内部统一将其单位置为None,而非显式标记为unitless——这是框架为了标准化无量纲量处理而设计的行为。

手动设unitless引发冲突的原因

框架对None和unitless的处理逻辑存在差异:

  • 单位为None时,get_val()会直接返回原始数值,无需执行单位转换操作
  • 指定unitless后,框架会将其当作一个明确的单位类型,在与预定义单位字典交互时,可能因字典中无对应映射规则而触发报错

可行的处理方式

  1. 接受None作为无量纲量的标准表示:这是OpenMDAO的默认规范,后续使用get_val()时,只要不额外指定单位参数,就能正常获取数值,不会产生转换问题
  2. 添加显式说明保留语义:如果需要明确标记该输出为无量纲比率,可以通过desc参数补充说明,不影响框架的单位处理逻辑:
    self.add_output('diameter_over_thickness', units='mm/mm', desc='直径与厚度的比率(无量纲)')
    

内容的提问来源于stack exchange,提问作者B0bbyDazzler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:35:24