|
|
|
# OMFlut
|
|
|
|
OMFlut is a framework built on top of OpenMDAO and is designed to perform flutter analysis and flutter-constrained optimization calculations. The package interfaces a structural solver, an aerodynamic solver, a transfer scheme and a flutter solution method.
|
|
|
|
|
|
|
|
## Install and run
|
|
|
|
If you only want to use OMFlut, you can install it using
|
|
|
|
```bash
|
|
|
|
python3 -m pip install . [--user]
|
|
|
|
```
|
|
|
|
and then run a case using
|
|
|
|
```bash
|
|
|
|
python3 path/to/case.py
|
|
|
|
```
|
|
|
|
If you need to develop in OMFlut before using it, you do not need to install anything, and you can just run your case from the repo folder using
|
|
|
|
```bash
|
|
|
|
python3 run.py path/to/case.py
|
|
|
|
```
|
|
|
|
|
|
|
|
## Use
|
|
|
|
OMFlut being built on top of OpenMDAO, any model must derive from an OpenMDAO group. The flutter calculation is carried out in the class `FlutterGroup`, which is also OpenMDAO group. The class requires four underlying builders: structural, aerodynamic, transfer scheme and flutter computation. These builders must instantiate and initialize all the components required by each individual methodology. A template for building custom builders is provided with the code and examples of already existing builders can be found in their respective repository.
|
|
|
|
A typical model for computing flutter will look like:
|
|
|
|
```python
|
|
|
|
from omflut import FlutterGroup
|
|
|
|
import openmdao.api as om
|
|
|
|
class MyModel(om.Group):
|
|
|
|
def setup(self):
|
|
|
|
s = StructuralBuilder(...)
|
|
|
|
a = AerodynamicBuilder(...)
|
|
|
|
x = XferBuilder(s, a, ...)
|
|
|
|
f = FlutterBuilder(...)
|
|
|
|
self.add_subsystem('flutter', FlutterGroup(struct=s, xfer=x, aero=a, flutter=f))
|
|
|
|
```
|
|
|
|
|
|
|
|
## Interfaced codes
|
|
|
|
Structural solvers:
|
|
|
|
- [TACS](https://github.com/acrovato/tacs)
|
|
|
|
- OMFlut's fake structural solver (reads a modal solution from disk)
|
|
|
|
|
|
|
|
Aerodynamic solvers:
|
|
|
|
- [SDPM](https://gitlab.uliege.be/am-dept/sdpm) (panel method)
|
|
|
|
|
|
|
|
Transfer schemes:
|
|
|
|
- OMFlut's RBF (interface to scipy RBF)
|
|
|
|
|
|
|
|
Flutter solutions:
|
|
|
|
# OMFlut
|
|
|
|
OMFlut is a framework built on top of OpenMDAO and is designed to perform flutter analysis and flutter-constrained optimization calculations. The package interfaces a structural solver, an aerodynamic solver, a transfer scheme and a flutter solution method.
|
|
|
|
|
|
|
|
## Install and run
|
|
|
|
If you only want to use OMFlut, you can install it using
|
|
|
|
```bash
|
|
|
|
python3 -m pip install . [--user]
|
|
|
|
```
|
|
|
|
and then run a case using
|
|
|
|
```bash
|
|
|
|
python3 path/to/case.py
|
|
|
|
```
|
|
|
|
If you need to develop in OMFlut before using it, you do not need to install anything, and you can just run your case from the repo folder using
|
|
|
|
```bash
|
|
|
|
python3 run.py path/to/case.py
|
|
|
|
```
|
|
|
|
|
|
|
|
## Use
|
|
|
|
OMFlut being built on top of OpenMDAO, any model must derive from an OpenMDAO group. The flutter calculation is carried out in the class `FlutterGroup`, which is also OpenMDAO group. The class requires four underlying builders: structural, aerodynamic, transfer scheme and flutter computation. An optional geometry builder can also be provided. These builders must instantiate and initialize all the components required by each individual methodology. A template for building custom builders is provided with the code and examples of already existing builders can be found in their respective repository.
|
|
|
|
A typical model for computing flutter will look like:
|
|
|
|
```python
|
|
|
|
from omflut import FlutterGroup
|
|
|
|
import openmdao.api as om
|
|
|
|
class MyModel(om.Group):
|
|
|
|
def setup(self):
|
|
|
|
g = GeometryBuilder(...) # optional
|
|
|
|
s = StructuralBuilder(...)
|
|
|
|
a = AerodynamicBuilder(...)
|
|
|
|
x = XferBuilder(s, a, ...)
|
|
|
|
f = FlutterBuilder(...)
|
|
|
|
self.add_subsystem('flutter', FlutterGroup(struct=s, xfer=x, aero=a, flutter=f, geo=g))
|
|
|
|
```
|
|
|
|
|
|
|
|
## Interfaced codes
|
|
|
|
Structural solvers:
|
|
|
|
- [TACS](https://github.com/smdogroup/tacs) (structural solver, builder currently stored in this repo)
|
|
|
|
- OMFlut's fake structural solver (reads a modal solution from disk)
|
|
|
|
|
|
|
|
Aerodynamic solvers:
|
|
|
|
- [SDPM](https://gitlab.uliege.be/am-dept/sdpm) (panel method)
|
|
|
|
|
|
|
|
Transfer schemes:
|
|
|
|
- OMFlut's RBF (interface to scipy RBF)
|
|
|
|
|
|
|
|
Flutter solutions:
|
|
|
|
- [PyPK](https://gitlab.uliege.be/am-dept/pypk) (collection of p-k methods) |
|
|
\ No newline at end of file |