Mike McWilliam
Mike McWilliam

Reputation: 176

How can one iterate over the entries in an OpenMDAO object

The Problem object in OpenMDAO is programmed to behave like a dictionary of all the Problem variables declared in the objects and what-not. Now I can iterate over normal dictionaries with for loops like:

for key,value in my_dict.iteritems():
    do_something(key,value)

Could something like this be done with OpenMDAO problems?

I have a bunch of helpful utilities for working with dictionaries. I would like to use those to work with OpenMDAO problems as well.

Thanks!

Upvotes: 1

Views: 78

Answers (2)

Justin Gray
Justin Gray

Reputation: 5710

The problem isn't really like a dictionary, we just define the __getitem__ and __setitem__ methods on it as a convenience for the user (see code). If you want to access the underlying dict-like object you can access prob.root.unknowns instead. This is still not actually a dictionary, but a VecWrapper instance, but it is dict-like and has the the necessary methods to be used like one in a duck-typing sense.

Upvotes: 1

Kenneth Moore
Kenneth Moore

Reputation: 2202

I'm not exactly sure what you want to do, but it sounds like you want to iterate over all variables in the model? One way you could do that is to iterate over prob.root.unknowns, which is the vector that contains all the connected variables in the top System of your model. It is recursive in the sense that it includes connections that are specified in sub-systems. However, it doesn't include anything that isn't relevant for data-passing, so any Component inputs that aren't at least hooked up to an IndepVarComp won't show up in it.

Upvotes: 1

Related Questions