OpenMDAO/OpenMDAO-Framework — pull request #1386 by Kenneth-T-Moore (2013-06-10 15:05:53+00:00)
Title: New solver and infrastructure for solving MDAs.

1. New Workflow CyclicWorkflow allows the specification of cyclic workflows
- Provides the driver a topological sort after automatically making cutting the loops in a local copy of the graph
- Provides a method to get the residual vector that contains the residuals at all interior edges.
- Provides a method to increment the residual vector at all severed edges
- Provides a callback to perform matrix vector product on the workflow's components using the new derivatives API

2. New Solver for converging systems with cyclic workflows.
- Implements both Guass-Seidel and Newton-Krylov methods.
- Uses scipy's GMRES to solve for the jacobian problem

3. ComponentWithDerivatives is now deprecated
- Functionality moved to Component
- ComponentWithDerivatives exists and gives deprecation warning
- The check_derivatives capability is not implemented in Component
- Component now keeps track of derivative function execution (i.e., linearize or calc_*_derivative)

4. New derivatives API for Components
- linearize will replace calc_first_derivatives, but the latter is still there
- applyJ allows specification of the product of the local J with an incoming vector
- User decides how to store his local Jacobian, rather than forcing the use of the derivatives object.

5. Infrastructure changes
- The "Force=True" attributes of a Variable's set() method now allows you to set a connected output.
- Workflow base class now has a method to get a set of interior edges
- The baseline save for fake finite difference is now triggered by the "savebase=True" attribute to calc_derivatives. This prevents unnecessary saving of component data.
- Assembly now keeps track of its graph loops so that it doesn't try to run the source connections of a component when they are both in the same loop.