使用输入值输出初始化

时间:2017-10-31 15:50:15

标签: openmdao

在ExplicitComponent类中,在setup函数的定义中,是否有一种方法可以在声明过程中根据之前在该setup函数中创建的输入值给出输出值?

例如,做一些事情:

class Discipline_1(ExplicitComponent):
    def setup(self):
        self.add_input('Input_1', val=5.0)

        self.add_output('Output_1',val = 0.07*inputs['Input_1'])

这个想法是,因为循环中的'NonlinearBlockGS'求解器使用'val'信息来初始化一个定点方法,我想给出一个适当的初始化来最小化'NonlinearBlockGS'迭代的次数。

1 个答案:

答案 0 :(得分:0)

如果您真的想根据输入值初始化输出,只需将输入值定义为局部变量:

class Discipline_1(ExplicitComponent):
    def setup(self):
        inp_val = 5.0
        self.add_input('Input_1', val=inp_val)

        self.add_output('Output_1',val = 0.07*inp_val)

只有在设置时知道固定值时才会有效。您可以通过metadata将该值传递给类构造函数,使其更加通用。然而,这可能不是最通用的方法。

您的论坛有一定的竞选顺序,您可以set manually if you liked。 GaussSeidel解算器将在该序列上执行循环,因此您只需要初始化作为循环中第一个组件的输入的值。当GS求解器运行时,所有其他人将通过其上游组件源将其值传递给它们。通过使用问题界面设置值,可以在调用setup后手动设置此初始值:

prob['Input_1'] = 5.0

作为openmdao 2.0.2的附注,我们在ImplicitComponents上定义了一个guess_nonlinear方法,您可以使用它来初始化隐式输出变量,但这不适用于此