July 20, 2015
Comments Off on The Alpha Has Landed. Welcome to OpenMDAO 1.0.0A
You may have noticed that there have not been a lot of commits to the OpenMDAO-Framework repository lately. Don’t worry, we’ve still been working hard on OpenMDAO. We’ve just been doing it under a different repository, for the 1.0 Alpha release. Why a separate repo? Well, it’s because the OpenMDAO 1.0.0 Alpha is a ground-up, from-scratch rewrite of the entire framework guided by three main principles:
- The code base should have as few dependencies as possible
- The user-facing API should be as small and self-consistent as possible
- There should not be any “magic” happening without the user’s knowledge
In order to follow those principles, we needed to free ourselves to consider all aspects of the framework design, including the model-building API. When we started working on this new code, we weren’t even sure that the experiment would work out. Making big, backwards-incompatible API changes was not an easy decision, because we value our users highly, and don’t want to lose you. But as development continued, it became clear that the new code was far superior to the existing one, and the design that caused the backwards-incompatible changes was worth the costs. Here are some of the key highlights of what has improved in the 1.0.0 Alpha:
- 10x smaller code base (~5000 lines of code compared to ~50,000 before)
- Compatible with both Python 2.7+ and Python 3.4+
- Install using pip, just like any other Python package
- No more Traits dependency, and no more weird class-like variable definitions anymore!
- Ability to manually group components to be finite-differenced together
- No more dataflow/workflow duality. Now you just define a single model hierarchy
- No more Assembly overhead. Grouping components no longer introduces large inefficiencies
- Parallel execution (and parallel adjoint derivatives) with an MPI distributed-memory data passing system
- New support forum on StackOverflow
What does “Alpha” Mean?
Alpha means that we’ve got the core of the new OpenMDAO done, and it is fairly stable. But we still reserve the right to make minor tweaks to the API. Also, we are currently missing some functionality when compared to OpenMDAO <= 0.13.0. What’s missing? Well, the major stuff is:
- No External Code (file wrappers)
- No MetaModel or surrogate model generators
- No DOE/CID drivers
- No automatic execution ordering
- No support for our older plugins
That being said, we’re working hard to improve the code every day. So if you do choose to install the Alpha, we hope you’ll clone our Github repo to do it. That way you can pull down the latest code updates easily. A Beta release that will be more feature-complete and with a more written-in-stone API is coming, but you don’t have to wait for the official release. Our repo is getting daily feature additions and bug fixes. In fact, installing the Alpha and giving us feedback is the best way to help get the missing features you most dearly want moved to the top of the pile!
“There is no such thing as a free lunch”
As we said, to get all this shiny awesomeness into 1.0.0 we had to make some major backwards-incompatible changes to the user API. Sadly, your old models aren’t going to work without some fairly significant re-factoring. We know that this is going to cause a bit of pain for a our current users, so we’ve taken a couple steps to help minimize the impact as much as possible. First, we’ll keep all the old versions (and their docs) up and available on our archive page. Second, we’ll keep the old support forum around for help with models on the older version. Keeping support separate for old and new versions will minimize confusion somewhat. Therefore, questions regarding the alpha should go up on StackOverflow. We won’t be actively developing any new features or bug fixes for the older versions, but we’ll do our best to help users with their models on the older versions as long as possible. When you are ready to make the switch, we’ve provided a conversion guide to show you how translate models from old to new.