0

OpenMDAO の Paraboloid チュートリアルをいじっています。基本的に入力値を放物面コンポーネントに変更して、簡単なことを試しました。次のコードを参照してください。ただし、実行すると、何も起こらなかった場合と同じ結果が出力されます。それで、何が起こっているのですか?グループがある場合、入力をどのように変更しますか?

from __future__ import print_function


from openmdao.api import IndepVarComp, Component, Problem, Group

class Paraboloid(Component):
    """ Evaluates the equation f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 """

    def __init__(self):
        super(Paraboloid, self).__init__()

        self.add_param('x', val=0.0)
        self.add_param('y', val=0.0)

        self.add_output('f_xy', val=0.0)

    def solve_nonlinear(self, params, unknowns, resids):
        """f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3
        """

        x = params['x']
        y = params['y']

        unknowns['f_xy'] = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0

    def linearize(self, params, unknowns, resids):
        """ Jacobian for our paraboloid."""

        x = params['x']
        y = params['y']
        J = {}

        J['f_xy', 'x'] = 2.0*x - 6.0 + y
        J['f_xy', 'y'] = 2.0*y + 8.0 + x
        return J

if __name__ == "__main__":

    top = Problem()

    root = top.root = Group()

    root.add('p1', IndepVarComp('x', 3.0))
    root.add('p2', IndepVarComp('y', -4.0))
    root.add('p', Paraboloid())

    root.connect('p1.x', 'p.x')
    root.connect('p2.y', 'p.y')


    root.p1.x=3.0;
    root.p2.y=-4.0;
    top.setup()
    top.run()
    print(root.p.unknowns['f_xy'])

    root.p1.x=5.0;
    root.p2.y=5.0;
    top.setup()
    top.run()
    print(root.p.unknowns['f_xy'])
4

1 に答える 1