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
vsapply\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,没有时间将其添加到该版本中)