OpenMDAO v0.10.0 Release Notes



Major API Changes

  1. The CaseIteratorDriver and DOEDriver interface has been completely reworked to make it easier and simpler to use. You now tell it exactly which parameters and quantities of interest it should care about, and then it collects the results of the cases into arrays of data matching those quantities. These arrays can then be passed around to other components, like MetaModel. The new interface is not backwards compatible, but the change is significantly for the better in terms of simplicity and readability.
  2. Lazy Evaluation has been removed from the framework. This change should not directly affect any running models, so we're calling it "backwards compatible." Lazy evaluation happened if you ran a component in an assembly somewhere, but some other upstream component had not yet run. Then the framework would walk backwards up the dependency graph to find those upstream components and execute them first. This feature made sure that no components ever ran without fully valid inputs from all upstream components. But it was also terribly complex to implement and added a significant source of bugs in the derivatives system.
        So we took lazy evaluation out. Its original intended purpose was still a good one, and we wanted to keep the behavior around in some form, so we now scan the data dependency graph one time, just before execution. We look at all the components in the different workflows, and anything that is upstream of components but not in any workflows, gets added to a special initialization group that gets run one (and only one) time at the start of the execution. This means that OpenMDAO still tries to make sure no components are ever run unless all of their upstream components have run first. But it now only enforces this behavior in the context of .run(). If you call a .run method, it will just execute with whatever inputs it has at that time and won't walk backwards up the graph to run anything else first.