使用输入值进行输出初始化

Outputs initialization using input values

在 ExplicitComponent class 中,在设置函数的定义中,有没有办法根据之前在该设置函数中创建的输入值,在其声明期间给出输出值?

例如做这样的事情:

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'信息来初始化不动点方法,我想给出适当的初始化以最小化[=的数量17=] 迭代。

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

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 将该值传递给 class 构造函数,使其更通用一些。然而,这可能不是最通用的方法。

你的小组有一个特定的 运行 顺序,你可以 set manually if you liked。 GaussSeidel 求解器将对该序列执行循环,因此您只需初始化循环中第一个组件的输入值。所有其他人都将通过其上游组件源作为 GS 求解器 运行s 将其值传递给他们。这个初始值可以在调用 setup 之后手动设置,方法是使用问题接口设置值:

prob['Input_1'] = 5.0

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