OpenMDAO Logo

An open-source framework for efficient multidisciplinary optimization.

March 14, 2020
by admin
Comments Off on Say goodbye to IndepVarComp… POEM_015

Say goodbye to IndepVarComp… POEM_015

TL;DR — Check out the proposed POEM_015 for details on how we think we can get rid of the need to manually specify an IndepVarComp in your models.

The IndepVarComp has been a part of OpenMDAO since the start of the version 1 era. In V2.0 its API changed a little bit, but it stayed mostly the same. Its job is to provide the variables the very start of any analysis. We will call these the “model inputs”. Despite providing something that is conceptually an input, the way it works in OpenMDAO is that these variables are the outputs of the IndepVarComp.

No doubt, many users have found this confusing at first though most seem to quickly accept it as wart on the API. A number have asked me why IndepVarComp outputs needed exist at all. It is admittedly confusing, since these model inputs end up being defined by calls to the add_output() method on the IndepVarComp component.

So why can’t you just work directly with the input variables? There is a mathematical reason anchored in the MAUD formulation that OpenMDAO is based on. There is also a practical reason. There is an ambiguity when multiple inputs are promoted to the same name at the group level, but each input has different units. If that promoted variable happens to be a model input, then the IndepVarComp output is used to resolve that ambiguity.

We’ve always thought it would be nice to get rid of the need for the IndepVarComp, but saw no way around it. As of OpenMDAO V2.10, a new addition to the API (which is specified in great detail in POEM_003) has provided us a a way forward. So now we’re proposing POEM_015 to accomplish this. POEM_0015 would let you go from this:

PRE POEM_015


import openmdao.api as om

class AGroup(om.Group): 

    def intialize(self): 
        self.options.declare('owns_dvs', default=True)
    
    def setup(self): 
        if self.options['owns_dvs']: 
            dvs = self.add_subsystem('dvs', IndepVarComp(), promotes=['*'])
            dvs.add_output('X', value=10, units='furlongs/fortnight')

        **do other stuff**
        . 
        . 
        . 

if __name__ == "__main__": 

    # To use G0 stand alond
    p = om.Problem()
    p.model.add_subsystem('G0', AGroup(owns_dvs=True))
    p.model.add_design_var('G0.X', lower=-1, upper=1)

    # To use G0 with some other component
    p = om.Problem()
    
    dvs = p.model.add_subsystem('dvs', IndepVarComp(), promotes=['*'])
    dvs.add_output('speed', -4, units='furlongs/fortnight')
    p.model.connect('speed', 'some_comp.speed')
    p.model.add_subsystem('some_comp', 
                          om.ExecComp('X=speed+3', units='furlongs/fortnight'))
    p.model.add_subsystem('G0', AGroup(owns_dvs=False))
    p.model.connect('some_comp.X', 'G0.X')

    p.model.add_design_var('speed', lower=-4, upper=-2)

POST POEM_015

import openmdao.api as om

class AGroup(om.Group): 
    
    def setup(self): 

        self.add_input('X', units='furlongs/fortnight')
       
        **do stuff**
        . 
        . 
        . 

if __name__ == "__main__": 

    # To use G0 stand alond
    p = om.Problem()
    p.model.add_subsystem('G0', AGroup())
    p.model.add_design_var('G0.X', lower=-1, upper=1)

    # To use G0 with some other component
    p = om.Problem()
    p.model.add_subsystem('some_comp', 
                          om.ExecComp('X=speed+3', units='furlongs/fortnight'))
    p.model.add_subsystem('G0', AGroup())
    p.model.connect('some_comp.X', 'G0.X')

    p.model.add_design_var('some_comp.speed', lower=-4, upper=-2)

Notice the lack of any IndepVarComp instances and the new add_input() method on group… looks better right? We think so!

Minor Backwards Incompatibility

There are some very mild backwards incompatible changes in POEM_015, and we’ve specifically called them out as well as proposed an release plan that would provide you with some deprecation warnings as a means of facilitating the upgrade.

So is this going to happen?

The leadership team (Rob, Eric, and Justin) think it’s a good idea… so it’s probably going to happen. We’ve pinged several users who’ve all expressed strong support. But we’re expressly asking for your opinions (positive or negative). Feel free to post comments or just thumbs up/down on the PR for the poem. We’ll keep an open mind, and if anyone raises any issues we’ll try to address them in the POEM before accepting it.

March 10, 2020
by admin
Comments Off on OpenMDAO V3.0 is out

OpenMDAO V3.0 is out

Version 3.0 is a major release, but not because of any massive new functionality. It’s primarily because we removed all the deprecated APIs from V2.10. So that means that this upgrade is definitely going to break some user code out there. But fear not, we’ve provided a handy-dandy upgrade guide for you! It gives side-by-side comparisons of any code you would need to change.

We’ve tried to make the upgrade path as easy as possible for you. So v2.10 and v3.0 are identical in terms of functionality, except for the deprecations. So the best way manage the upgrade is as follows:

  1. Upgrade to V2.10
  2. Run your models and make sure the answers are still correct
  3. Modify your modes to remove all the deprecation warnings you see
  4. Upgrade to V3.0 and re-check that your answers are still correct!

February 27, 2020
by admin
Comments Off on OpenMDAO V2.10, now get ready for V3.0

OpenMDAO V2.10, now get ready for V3.0

OpenMDAO V2.10 is out in the wild now. You can see the docs here. This will be the last major release of OpenMDAO V2.X. In other words, there will be no V2.11.

This is an important release for two reasons:

  1. Lots of good new stuff is in there. Check out the release notes for full details, but here are some highlights:
    • Refactor of the AkimaSplineComp and BsplineComp into a single SplineComp
    • Improvements/slight tweaks to reverse-mode derivatives for distributed components
    • There is a plugin system now (a simple one, but you gotta start somewhere)
    • The N2 viewer now works for models that run in parallel
  2. This release is intended to be a bridge to V3.0. That means that all or the things that are currently deprecated will be actually removed in V3.0. So to get ready for that update, what you need to do is first upgrade to V2.10, then modify your models to get rid of all the deprecation warnings. Then you should be ready to change to V3.0.

January 21, 2020
by admin
Comments Off on Expanding the Leadership Team for OpenMDAO

Expanding the Leadership Team for OpenMDAO

In 2019 the user base of OpenMDAO grew quite substantially. In order to better support the growing users base, we’re excited to announce a new leadership team for the OpenMDAO project:

  • Rob Falck, Development Team Lead: overseeing the execution of development tasks including feature addition, bug fixes, and technology development for both OpenMDAO and the Dymos library.
  • Eric Hendricks, Application Team Lead: supporting internal NASA users of OpenMDAO and overseeing execution of applications of OpenMDAO at NASA Glenn.
  • Justin Gray, Project Lead: supporting external users of OpenMDAO, designing training materials, and overseeing the overall project.

Most of you have interacted with Justin Gray in the past and you’re more than welcome to continue to do so! However, please also feel free to reach out to Rob or Eric. The three of us will be working in close coordination to manage development, support users, and integrate user feedback into our development pipeline.

Here are some presentations from Eric, Justin, and Rob at the 2019 OpenMDAO workshop:

https://youtu.be/ivLfFGMK9d0
https://youtu.be/tTMftNL-02c
https://youtu.be/e52KczetQX0

January 21, 2020
by admin
Comments Off on 2019 OpenMDAO Workshop Videos are Online

2019 OpenMDAO Workshop Videos are Online

Thank you to all who attended the workshop in person. The dev team got a lot out of your feedback and insights. We really enjoyed getting to know all of you in person and we’re looking forward to hosting the 2020 workshop and real-life optimal-control experiment (i.e. go-karting)

We’re very sorry for the delay, but due to some paperwork issues it took us until now to get final approval to post these online. So, with no further ado here are all the talks from the 2019 OpenMDAO workshop.

If you didn’t attend the workshop, you might consider watching all of the talks in sequence because a few of the later ones do reference earlier talks a bit. This is especially true for some of the demo talks, but most of the presentations from users do stand alone.

One more note. For 2019 workshop presenters were explicitly asked by the Dev Team to come and present any and all criticism they had about any aspect of the project. The specific goal was to gather the feedback for the Dev team and to open up a channel of communication between the devs and the community. So a number of talks were very frank about things they didn’t like, and the dev team greatly appreciated their candor!

December 4, 2019
by admin
Comments Off on OpenMDAO has won a 2019 R&D 100 Award!

OpenMDAO has won a 2019 R&D 100 Award!

We are proud to announce that OpenMDAO has won a 2019 R&D 100 Award in the Software and Services category. The development team honored to be given this recognition, but we can’t take all the credit. It is really thanks to the great support of our broad user community that we were able to show the impact and value of our work to the judging panel. So thank you to all of the OpenMDAO users who helped to make the framework into what it is today! We could not have gotten this far without you, and we look forward to working with you all moving forward.

2019 R&D 100 award recipients (left to right): Herb Schilling, Rob Falck, Tad Kollar, Justin Gray, Ken Moore, Bret Naylor, Tristan Hearn

October 24, 2019
by admin
Comments Off on OpenMDAO 2020 Development Roadmap

OpenMDAO 2020 Development Roadmap

Since the launch of OpenMDAO V2, we’ve seen a significant increase in the size and breath of the framework’s user base. To date, OpenMDAO’s development has been guided almost exclusively by the needs of the NASA projects that are using it and paying for its ongoing development. Fundamentally, that is going to change, however we recognize that our user based adds a significant amount of value to the project and that we need to address your needs as well. Therefore, we are going to be more formal and open about our development plans for your benefit.

What does that mean exactly? For starters, we are going to publish an annual development roadmap. This document, while not all encompassing or strictly binding, is intended to give the community a clear view of what the development team will focus on in the short and mid-term.

The initial version of the OpenMDAO 2020 Development Roadmap has been developed, and is currently the topic of a pull request to the main repo. It has been left as an open PR, to give you a chance to comment on it (via GitHub’s discussion threads and comment board in the PR itself). We will gladly consider any and all feedback from minor edits, to suggestions, and questions about adding or removing topics from the roadmap. The roadmap will be discussed in person during the 2019 OpenMDAO workshop on October 28 and 29, and we will finalize it by the end of November 2019.

We can not promise to accept everyone’s suggestions. The roadmap is not intended to be a document developed by the committee. However, we sincerely do want to hear your thoughts on our plans and are open to considering other topics if you can make a good case for why they deserve higher focus.

We want to highlight one particular part of the 2020 roadmap: Establishing A Community Contribution Process. A key part of letting the community contribute to OpenMDAO will be establishing formal rules that will govern all API and functionality changes to OpenMDAO (including our own changes!). This process will revolve around documents called POEMs. The current POEM rules are our first cut at this and we know they will need to evolve as we actually start to use it. If you think you might write your own POEMs in the future, we encourage you to take a look at what we have so far.

October 9, 2019
by admin
Comments Off on OpenMDAO V2.9.1

OpenMDAO V2.9.1

V2.9.1 is a patch release that address a few small issues that coincidentally were all found on the very same day that we released V2.9.0 (darn you Murphy and your law!)

First, we found a small reversion in the line search. Through some refactoring, one of the default settings for the type of bounds enforcement in the ArmijoGoldstein line search accidentally changed, and we patched it back to the original default. So be warned, that if you updated to 2.9.0 and are using that line search you might see some weird behavior. If you go to 2.9.1 though, it should be all good.

The other issues are really minor and probably not stuff regular users will run into. You can see all the details in the release notes.

October 1, 2019
by admin
Comments Off on OpenMDAO V2.9.0

OpenMDAO V2.9.0

The V2.9 release is live now, and it is a fairly substantial release. Most of the stuff is subtle changes or under the hood improvements, but taken as a whole there is a lot in this release.

See the release notes for full details, but here are some highlights:

  • Metamodel visualization via the openmdao mm_view command line tool (you really should check this one out!)
  • A whole bunch of small solver improvements
  • Modest improvements to the CaseRecorder functionality to make it work just like the problem interface (e.g. get_val and set_val methods)
  • Efficiency improvements in reverse mode data transfers and derivatives solves with the DirectSolver
  • Big efficiency improvements to StructuredMetaModel

There are also a few backwards incompatible api changes as well. We’ve deprecated things wherever we could to (hopefully) make it as painless as possible for you all.

July 16, 2019
by admin
Comments Off on October 2019 OpenMDAO Workshop!

October 2019 OpenMDAO Workshop!

NASA Glenn Research Center will be hosting a public OpenMDAO workshop on October 28 – 29th, 2019 in Cleveland Ohio. We will be meeting at the Ohio Aerospace Institute.

The primary goal for the workshop is for the broad user community get a chance to interact directly with the OpenMDAO development team in order to discuss the current and future development of the framework. We want to focus on topics surrounding current functionality and future development. In other words, we want to talk about what is working and what is not working right now, and hear about things the community would like to see for future development. Your input will help us figure out our long term development roadmap, so this is your chance to have a voice!

Click here to register for the workshop. There is no cost to attend the workshop, but we will be offering an optional catered lunch each day that will cost ~$30 (total for both days).

We are looking for community members who want to give 15 minute talks about their use of OpenMDAO. There is a space on the registration form to indicate if you would like to present. We have space for between 8-12 talks in the schedule, though if there is a lot of volunteers with good topics we will potentially devote more of day 2 to additional talks.

We need to have a head-count for the workshop, so registration is going to close on September 1st, 2019. Please register ASAP and if you are interested in giving a talk then REALLY register ASAP so we can start to figure out the presentation schedule.

Schedule:

October 28:

8:50 Opening Remarks (Justin Gray)

9:00 Overview of evolution of derivative computation, coupled adjoints, and OpenMDAO (Joaquim Martins)

9:30 Level-Set Topology Optimization in OpenMDAO with Cython (Carolina Jauregui)

10:00 Using OpenMDAO as a collaboration platform for a large design team (Eric Hendricks)

10:30 Exploration of active aeroelastic tailoring on the D8 aircraft in OpenMDAO (Tim Brooks)

11:00 Challenges and encountered when wrapping ParOpt and TACS in OpenMDAO (Graeme Kennedy)

11:30 Growing pains for building WISDEM on OM (Garett Barter)

— lunch —

1:00 Demo: Introduction to the openmdao command line tool (Bret Naylor)

1:30 Demo: Using the N2 diagram to inspect your model (Ken Moore)

2:00 Demo: Two new UI concepts for N2 diagram (Herb Schilling)

2:30 Demo: Using MMView to inspect a metamodel (Danny Kilkenny)

3:00 Building an automated install script for the OpenMDAO Dev Cluster local cluster (Tad Kollar)

3:30 OpenMDAO Development Roadmap (Justin Gray)

October 29:

9:00 Modeling Fluid Structure Interaction with CFD in OpenMDAO (Anil Yildirim)

9:30 How Supaero and Onera use OpenMDAO for MDAO Research (Joseph Morlier)

10:00 OpenMDAO Usage for Launch Vehicles (Mathieu Balesdent)

10:30 Orchestrating Model-Based Systems Engineering with OpenMDAO (Santiago Balestrini)

11:00 Large-scale wind farm optimization and integrating Julia with OpenMDAO (Andrew Ning)

11:30 Using OpenMDAO and OpenAeroStruct in the classroom (John Jasa)

— lunch —

1:00 Demo: How to setup and run a pyCycle model (Eric Hendricks)

1:30 Tutorial: Building Models with Analytic Derivatives (John Jasa)

2:30 Tutorial: Solving Multidisciplinary optimal control problems with Dymos (Rob Falck)


Any questions can be directed to justin.s.gray “at” nasa.gov

Fork me on GitHub