79743687

Date: 2025-08-22 17:24:41
Score: 0.5
Natty:
Report link

While a Newton solver with solve_subsystems=False is truly monolithic, I wouldn’t describe the solve_subsystems=True case as hierarchical. Even though the inner subsystems are solved first, the outer Newton solver still acts on the full residual vector of its group — including both the inner subsystem residuals _and_ any coupling between inner and outer subsystems. That's why the implicit component's residual is being driven to zero at each iteration. The solve_subsystems method helps the outer solver by solving a smaller chunk of the residual first, with some computational expense. In either case, the outer solver is always trying to solve everything below it.

Diving into the OpenMDAO internals a bit...

In OpenMDAO, everything is really implicit. You can think of explicit components are a special case of implicit components. The residual is the difference between the value that is in the output vector of that component, and the value that compute produces based on the inputs. Now in the case of a feed-forward system, the explicit component's compute method effectively "solves itself", driving that residual to zero.

If theres a feedback into that explicit component, system's residual vector will show some nonzero residual for that components outputs. A Nonlinear Block Gauss Seidel solver can resolve this residual just by repeateldy executing the system until this residual is driven to zero (assuming that architecture works). Alternatively, the Newton solver just sees it as another residual to be solved.

Do you have an XDSM diagram of your system? That might make it easier to understand the behavior of your model.

Reasons:
  • RegEx Blacklisted phrase (2.5): Do you have an
  • Long answer (-1):
  • Has code block (-0.5):
  • Contains question mark (0.5):
  • High reputation (-1):
Posted by: Rob Falck