This is Ptera Software: a fast, easy-to-use, and open-source package for analyzing flapping-wing flight.
Install the package with pip (requires Python 3.11, 3.12, or 3.13):
pip install pterasoftwareThen run a simulation. The following snippet defines a simple rectangular wing, solves for its aerodynamics using the steady horseshoe vortex lattice method (VLM), and visualizes the results:
import pterasoftware as ps
airplane = ps.geometry.airplane.Airplane(
wings=[
ps.geometry.wing.Wing(
wing_cross_sections=[
ps.geometry.wing_cross_section.WingCrossSection(
airfoil=ps.geometry.airfoil.Airfoil(
name="naca2412",
),
num_spanwise_panels=8,
control_surface_symmetry_type="asymmetric",
spanwise_spacing="cosine",
),
ps.geometry.wing_cross_section.WingCrossSection(
airfoil=ps.geometry.airfoil.Airfoil(
name="naca2412",
),
num_spanwise_panels=None,
Lp_Wcsp_Lpp=(0, 5, 0),
control_surface_symmetry_type="asymmetric",
),
],
symmetric=True,
symmetryNormal_G=(0, 1, 0),
symmetryPoint_G_Cg=(0, 0, 0),
),
],
)
operating_point = ps.operating_point.OperatingPoint()
problem = ps.problems.SteadyProblem(
airplanes=[airplane], operating_point=operating_point
)
solver = (
ps.steady_horseshoe_vortex_lattice_method.SteadyHorseshoeVortexLatticeMethodSolver(
steady_problem=problem
)
)
solver.run()
ps.output.draw(solver=solver, scalar_type="lift", show_streamlines=True)- Various Aerodynamic Simulation Methods
- Steady simulations can be run with a standard horseshoe vortex-lattice method (VLM) or a ring VLM.
- Unsteady simulations use a ring unsteady VLM (UVLM) solver.
- Unsteady simulations support both fixed and free wakes.
- Unsteady simulations implement vortex aging to reduce numerical instabilities.
- Customizable Aircraft Geometry
- Aircraft can be defined as a collection of one or more wings of any dimensions and positions.
- Wings can be defined as a collection of two or more wing cross sections of any dimensions and positions.
- Wing cross sections can be specified to match the mean camber line of an airfoil.
- The package comes with a massive database of airfoils to choose from, courtesy of the UIUC Airfoil Coordinates Database.
- Wings are automatically discretized into panels with customizable sizes and spacings.
- Customizable Aircraft Motion
- The relative motion of wings and wing cross sections can be defined using any time-dependent functions of sweep, pitch, and heave angles.
- Customizable Operating Points
- Parameters such as the free-stream velocity, density, angle of attack, angle of sideslip, etc. can be changed by the user.
- High-Speed Simulations
- Using Just-In-Time compilation, Ptera Software can solve many unsteady flapping-wing simulations in less than a minute!
- Steady simulations take only seconds!
- Simulations of Formation Flight
- Since v2.0.0, Ptera Software has supported simulations with more than one airplane.
- This feature can be used to analyze the aerodynamics of flapping-wing formation flight!
- Features for Flapping-Wing Vehicle Design
- Ptera Software is focused on developing features to facilitate designing flapping-wing vehicles.
- For example, use the functions in the trim module to automatically search for a trim operating point for steady and unsteady simulations of aircraft.
- A Basic GUI
- This is still in its alpha stage, but we will be adding more functionality soon.
If you haven't already, install Ptera Software from PyPI (see Quick Start above):
pip install pterasoftwareYour IDE should automatically provide docstring hints for the available classes and functions. For more detailed documentation, visit the Ptera Software documentation site.
If you want to browse the example scripts or dig into the source code, you will need a local copy of the repository. Follow the environment setup instructions in the Contributing Guidelines to clone the repository, create a virtual environment, and install dependencies.
Once set up, the examples/ directory contains scripts that demonstrate the full range of Ptera Software's features and solvers.
This package currently supports three different solvers, a steady horseshoe VLM, a steady ring VLM, and an unsteady ring VLM (UVLM). Here are examples of the output you can expect to receive from each of them.
Since the release of version 1.0.0, Ptera Software is now validated against experimental flapping-wing data! See the validation/ directory to run the test case and read a report on the software's accuracy.
For detailed API documentation and guides, visit the Ptera Software documentation site.
The primary goal of this project is to increase the open-source community's understanding and appreciation for unsteady aerodynamics in general and flapping-wing flight in particular. This will only happen through your participation. Feel free to request features, report bugs or security issues, and provide suggestions.
Before contributing, make sure to read through the Contributing Guidelines for how to best help out.
- Cameron Urban (camUrban)
- Zach Tait (Zach10a)
- Jonah Jaffe (JonahJ27)
- Venkata Akhil Mettu (AKHIL-149)
- Savitha N (Savitha-Akhilu)
- Pedro Bornia (BorniaPedro)
- Peter Sharpe
- Suhas Kodali
- Ramesh Agarwal
- E. Farrell Helbling
- Raphael Zufferey
- Joseph Katz
- Allen Plotkin
- Austin Stover
Ptera Software grew out of a desire to make flapping-wing aerodynamics accessible without expensive commercial CFD tools or hard-to-use open-source alternatives. Initially built on AeroSandbox with the support of Peter Sharpe and Suhas Kodali, it has developed into an actively-maintained UVLM package that is well documented, tested, and validated. We hope that with your help, we will increase the open-source community's interest and understanding of biological flight.




