Python 为什么每次Gauss-Seidel迭代都要执行两次组件?(OpenMDAO 2.4.0)

Python 为什么每次Gauss-Seidel迭代都要执行两次组件?(OpenMDAO 2.4.0),python,openmdao,Python,Openmdao,我一直在使用nonlinearblocks作为由ExplicitComponents组成的MDO系统的nonlinearblocks解算器,这是可以预期的。首先,我将其用于简单的数学函数(因此,您的问题有两个不同的方面。首先,我将介绍solve\u noneralvsapply\u noneral的详细信息。使用OpenMDAO的底层数学算法,基于,solve\u noneral仅计算输出值的值(不设置残差).apply\u非线性仅计算残差(不设置输出)。 对于ExplicitComponent

我一直在使用
nonlinearblocks
作为由
ExplicitComponents
组成的MDO系统的
nonlinearblocks
解算器,这是可以预期的。首先,我将其用于简单的数学函数(因此,您的问题有两个不同的方面。首先,我将介绍
solve\u noneral
vs
apply\u noneral
的详细信息。使用OpenMDAO的底层数学算法,基于,
solve\u noneral
仅计算输出值的值(不设置残差).
apply\u非线性
仅计算残差(不设置输出)。 对于
ExplicitComponent
的子类,用户仅实现
compute
方法,基类使用
compute
实现
solve\u nonlinear
apply\u nonlinear

正如您所描述的,在OpenMDAO V2.4中,对于每个迭代,当前的非线性BlockGausSeidel实现对其组执行一个递归的
solve\u nonlinear
调用,然后调用
apply\u nonlinear
检查残差并寻找收敛

不过,你也说得对,我们可以更有效地完成这项工作。你建议对算法进行的修改会起作用,我们将把它放在V2.6的开发管道上(截至本文发布时,我们刚刚发布V2.5,没有时间将其添加到该版本中)