【发布时间】:2020-04-13 14:39:35
【问题描述】:
我有一个具有耦合学科的组,该组嵌套在所有其他组件都未耦合的模型中。我已经为耦合组分配了一个非线性牛顿和线性直接求解器。
当我尝试使用默认的“RunOnce”求解器运行模型时,一切正常,但一旦我尝试运行优化,我就会收到以下来自 linear_block_gs.py 的错误:
文件“...\openmdao\core\group.py”,第 1790 行,在 _apply_linear scope_out, scope_in)
文件“...\openmdao\core\explicitcomponent.py”,第 339 行,在 _apply_linear self.compute_jacvec_product(*args)
文件“...\Thermal_Cycle.py”,第 51 行,compute_jacvec_product d_inputs['T'] = 斜率 * deff_dT / alp_sc setitem 中的文件“...\openmdao\vectors\vector.py”,第 363 行 raise KeyError(msg.format(name)) KeyError: '未找到变量名“T”。'
下面是模型的N2图。错误中提到的变量“T”来自隐含的“temp”组件,并反馈给“sc”组件(错误消息中的文件Thermal_Cycle.py)作为输入。
当我在整个模型之上分配 DirectSolver 时,错误消失了。我的印象是,只要具有隐式组件的组按照 here 的建议应用了适当的求解器,并且在我的情况下已完成,“RunOnce”就可以工作。为什么在尝试计算模型的总导数时不起作用,即为什么compute_jacvec_product找不到耦合变量“T”?
我想使用“RunOnce”求解器的原因是,当我的变量向量“T”增加时,使用 DirecSolver 进行优化会变得很长。我怀疑使用线性“RunOnce”应该更快?
【问题讨论】:
标签: openmdao