【问题标题】:Can OpenMDAO unit conversion handle nonstandard-power scalings?OpenMDAO 单位转换可以处理非标准功率缩放吗?
【发布时间】:2021-03-26 10:47:59
【问题描述】:

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

我可以想象一个 OpenMDAO ScalingLaw 组件接收带有 units=m**-3 的输入(可能是 ref=1e19 以方便数值计算),然后手动除以 1e19 以获得 n19。

有没有“更好”的方法来自动处理这种比例转换?

【问题讨论】:

  • 我不是 100% 确定这是你想要的,但如果我理解正确,那么有时你想以particles/m**3 为单位工作,有时以particles*10**19/m**3 为单位工作。不同的成分在粒子前面需要不同的系数吗?最有可能的是,所有物理都与基本单位一起工作,然后在最后你应用缩放?我是否正确理解了您的问题?
  • 是的,我想是的。我可能会采用 Rob 的方法来添加自定义单元。

标签: units-of-measurement openmdao


【解决方案1】:

听起来这里的适当方法可能只是将新单元添加到 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'

【讨论】:

    猜你喜欢
    • 2018-08-07
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多