0

pass_by_objOpenMDAO 1.4 支持单位转换吗?我有一个小的复制案例:

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=Trueassert失败。top.setup()报告:

Unit Conversions
p1.x -> p.x : m -> mm

所以我希望完成单位转换。

4

1 回答 1

2

OpenMDAO 目前不支持 pass_by_obj 变量的自动单位转换。在设计 OpenMDAO 时,我们不打算使用 pass_by_obj 传输浮点数据。我们只添加了 pass_by_obj 来处理其他类型的变量。我们应该修复 setup 的诊断输出,这样它就不会列出实际上没有发生的单位转换。我会为此写一个故事。

于 2016-01-14T17:08:43.313 回答