/G2Aero

Separable shape tensors for aerodynamic design

Primary LanguageHTMLBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

test paper Documentation Status

G2Aero: Separable shape tensors for aerodynamic design

G2Aero is a flexible and practical tool for design and deformation of 2D airfoils and 3D blades using data-driven approaches. G2Aero utilizes the geometry of matrix manifolds—specifically the Grassmannian—to build a novel framework for representing physics-based separable deformations of shapes. G2Aero offers the flexibility to generate perturbations in a customizable way over any portion of the blade. The G2Aero framework utilizes data-driven methods based on a curated database of physically relevant airfoils. Specific tools include:

  • principal geodesic analysis over normal coordinate neighborhoods of matrix manifolds;
  • a variety of data-regularized deformations to nominal 2D airfoil shapes;
  • Riemannian interpolation connecting a sequence of airfoil cross-sections to build 3D blades from 2D data;
  • consistent perturbations over the span of interpolated 3D blades based on dominant modes from the data-driven analysis.

More details can be found in the G2Aero documentation.

Installation

Install G2Aero from sources with Python3.x:

git clone https://github.com/NREL/G2Aero.git
cd G2Aero
python setup.py install

Installing via conda-forge

conda install -c conda-forge g2aero

Testing

You can run the tests from the root g2aero folder (once you installed pytest):

pip install pytest
pytest

Usage

Example

Grassmannian interpolation combined with parametrized affine deformations: blade gif

Contributing

Contributions are always welcome! See contributing.md for ways to get started. Please adhere to this project's code of conduct.

Citations

If you use this software in your research or publications, please cite the following paper:

@article{Doronina_JOSS_2023, 
  author = {Olga A. Doronina and Zachary J. Grey and Andrew Glaws}, 
  title = {G2Aero: A Python package for separable shape tensors}, 
  journal = {Journal of Open Source Software}, 
  publisher = {The Open Journal}, 
  year = {2023}, 
  volume = {8}, 
  number = {89}, 
  pages = {5408},
  doi = {10.21105/joss.05408}, 
  url = {https://doi.org/10.21105/joss.05408}, 
}

@article{GreyJCDE2023,
  author = {Grey, Zachary J and Doronina, Olga A and Glaws, Andrew},
  title = "{Separable shape tensors for aerodynamic design}",
  journal = {Journal of Computational Design and Engineering},
  volume = {10},
  number = {1},
  pages = {468-487},
  year = {2023},
  month = {01},
  doi = {10.1093/jcde/qwac140},
  url = {https://doi.org/10.1093/jcde/qwac140},
}

@inproceedings{grassmannian2022,
   title={Grassmannian Shape Representations for Aerodynamic Applications},
   author={Olga Doronina and Zachary Grey and Andrew Glaws},
   booktitle={AAAI 2022 Workshop on AI for Design and Manufacturing (ADAM)},
   year={2022},
   url={https://openreview.net/forum?id=1RRU6ud9YC}
}