OpenMDAO 单位转换能否处理非标准功率缩放?

Can OpenMDAO unit conversion handle nonstandard-power scalings?

在托卡马克等离子体物理学中,比例定律通常用于估计等离子体性能。这些通常需要非标准单位,特别是等离子体密度 n,单位为每立方米 10^19 或 10^20 个粒子,通常称为 n19n20。 (没有人称这些为每立方米 10 或 100 个 exa 粒子。)与此同时,许多物理公式在“标准”m^-3 中要求这些值。

我可以想象一个 OpenMDAO ScalingLaw 组件接收一个带有 units=m**-3 的输入(并且可能 ref=1e19 为了便于数字计算),然后手动除以 1e19 得到 n19。

是否有 'better' 自动处理这种比例转换的方法?

听起来这里合适的方法可能只是向 OpenMDAO 的单元库添加新单元。这将使转换在数据传递时自动进行。

例如,在天体动力学中,我们有时会发明“规范”单位,其中距离单位设置为某个特定值(如地球半径),引力参数 GM 假定为 1,时间单位不适用这个的。在 OpenMDAO 中,在开始定义输入和输出之前,可以在脚本中的某处使用以下代码设置距离单位 (DU):

import openmdao.utils.units as units

# Add canonical units to OpenMDAO
MU_earth = 3.986592936294783e14
R_earth = 6378137.0

period = 2 * np.pi * np.sqrt(R_earth**3 / MU_earth)

units.add_unit('TU', f'{period}*s')
units.add_unit('DU', f'{R_earth}*m')

您可以通过添加单元然后使用 OpenMDAO convert_units 函数测试它们来验证功能:

import openmdao.utils.units as units
from openmdao.api import convert_units

units.add_unit('n19', '10**19/m**3')
units.add_unit('n20', '10**20/m**3')

print(convert_units(1, 'n19', 'm**-3'))

输出

1e+19

将这些单元添加到系统后,您可以在添加输入或输出时指定 units='n19'units='n20'