OpenMDAO 单位转换能否处理非标准功率缩放?
Can OpenMDAO unit conversion handle nonstandard-power scalings?
在托卡马克等离子体物理学中,比例定律通常用于估计等离子体性能。这些通常需要非标准单位,特别是等离子体密度 n,单位为每立方米 10^19 或 10^20 个粒子,通常称为 n19 和 n20。 (没有人称这些为每立方米 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'
。
在托卡马克等离子体物理学中,比例定律通常用于估计等离子体性能。这些通常需要非标准单位,特别是等离子体密度 n,单位为每立方米 10^19 或 10^20 个粒子,通常称为 n19 和 n20。 (没有人称这些为每立方米 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'
。