0

単位変換pass_by_objは OpenMDAO 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 を追加しただけです。実際には発生しない単位変換が表示されないように、セットアップの診断出力を修正する必要があります。そのための物語を入れます。

于 2016-01-14T17:08:43.313 に答える