OpenMDAO:使用 pass_by_obj 进行单位转换
OpenMDAO: unit conversion with pass_by_obj
OpenMDAO 1.4 是否支持 pass_by_obj
的单位转换?我有一个小的复制案例:
from openmdao.api import Component, Problem, Group, IndepVarComp
pass_by_obj=True
class PassByObjParaboloid(Component):
def __init__(self):
super(PassByObjParaboloid, self).__init__()
self.fd_options['force_fd'] = True
self.add_param('x', val=1.0, pass_by_obj=pass_by_obj, units='mm')
self.add_output('f_xy', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
print params['x']
assert params['x'] == 1000.0
unknowns['f_xy'] = params['x']
def linearize(self, params, unknowns, resids):
raise Exception()
top = Problem()
root = top.root = Group()
root.add('p1', IndepVarComp('x', 1.0, pass_by_obj=pass_by_obj, units='m'))
root.add('p', PassByObjParaboloid())
root.connect('p1.x', 'p.x')
top.setup()
top.run()
使用 pass_by_obj=True
,assert
失败。 top.setup()
报告:
Unit Conversions
p1.x -> p.x : m -> mm
所以我希望完成单位转换。
OpenMDAO 当前不支持 pass_by_obj 变量的自动单位转换。在设计 OpenMDAO 时,我们并没有打算使用 pass_by_obj 来传输浮点数据。我们只添加了 pass_by_obj 来处理其他类型的变量。我们应该修复安装程序的诊断输出,这样它就不会列出实际上没有发生的单位转换。我会为此写一个故事。
OpenMDAO 1.4 是否支持 pass_by_obj
的单位转换?我有一个小的复制案例:
from openmdao.api import Component, Problem, Group, IndepVarComp
pass_by_obj=True
class PassByObjParaboloid(Component):
def __init__(self):
super(PassByObjParaboloid, self).__init__()
self.fd_options['force_fd'] = True
self.add_param('x', val=1.0, pass_by_obj=pass_by_obj, units='mm')
self.add_output('f_xy', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
print params['x']
assert params['x'] == 1000.0
unknowns['f_xy'] = params['x']
def linearize(self, params, unknowns, resids):
raise Exception()
top = Problem()
root = top.root = Group()
root.add('p1', IndepVarComp('x', 1.0, pass_by_obj=pass_by_obj, units='m'))
root.add('p', PassByObjParaboloid())
root.connect('p1.x', 'p.x')
top.setup()
top.run()
使用 pass_by_obj=True
,assert
失败。 top.setup()
报告:
Unit Conversions
p1.x -> p.x : m -> mm
所以我希望完成单位转换。
OpenMDAO 当前不支持 pass_by_obj 变量的自动单位转换。在设计 OpenMDAO 时,我们并没有打算使用 pass_by_obj 来传输浮点数据。我们只添加了 pass_by_obj 来处理其他类型的变量。我们应该修复安装程序的诊断输出,这样它就不会列出实际上没有发生的单位转换。我会为此写一个故事。