Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preliminary support for multiple rotors in AeroDyn #672

Merged
merged 6 commits into from
Mar 19, 2021

Conversation

ebranlard
Copy link
Contributor

@ebranlard ebranlard commented Mar 2, 2021

This pull request is ready to merge

Feature or improvement description
Provide support for multiple rotors in AeroDyn.
This feature is not yet supported by the glue-code, nor the current aerodyn-driver, but it has been tested using a new aerodyn driver that will be shipped in a future pull request. This is an example of VTK outputs with the new driver, both rotors are handled by BEM:

MultiBEM

Actions:

Impacted areas of the software
AeroDyn, OpenFAST library, Openfoam coupling

Additional supporting information

General info:

  • Only AeroDyn supports multiple rotors, so only 1 rotor is used in the OpenFAST library and Openfoam. For loops were not added there.
  • Most of the changes involve introducing %rotors(1) in the glue code and other caller of AeroDyn.
  • Support for multiple rotors with OLAF is not part of this pull request and will come through another pull request (either WEIS, or the new aerodyn driver)
  • Each rotor has a nacelle, tower, hub.
  • For BEM, the tower influences only the rotor to which it is attached to (simpler for now). For OLAF, all the towers will influence the wake.

Some points to review/comment on:

  • Most of the AeroDyn data is now stored per rotor, even things like AirDensity, BEM Options, this offer the most flexibility, but might be overkill (say one rotor in the water and one in the air, one with UA the other without). I can easily change this, most AeroDyn functions now have two set of parameters coming in, p (the rotor parameters), and p_AD` the AeroDyn parameters (very few for now, but we can shift AirDensity there for instance).
  • The WriteOuputs are stored per rotor, leaving it to the glue code to decide whether these should be written to different files. This means AeroDyn does not have WriteOutputs directly, and I had to add an if statement in the glue code at the point where the write outputs from each modules are packed.
  • The linearization of AeroDyn is currently dedicated to BEM, and one rotor. To try to keep the changes minimal, I've made Jacobian routines that deal with one rotor at a time. The downside is that the Jacobian routine have then to call a 'CalcOutput' and 'CalcResidual' that are per rotor as well. In general, I've kept the convention AD_RoutineName -> RotRoutineName for routines that are rotor specific. The code will return an error if linearization is done for multiple rotors.
  • I'm happy replacing %rotors with %rot for shorter notations

@ebranlard ebranlard requested a review from andrew-platt March 10, 2021 02:45
@ebranlard
Copy link
Contributor Author

@bjonkman if you have time, can you have a look at these code changes? Thanks a lot!

Copy link
Collaborator

@andrew-platt andrew-platt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I looked through quickly and didn't see anything problematic.

The glue code changes look ok.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants