![Logo](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/Logo.png)
***
![build](https://app.travis-ci.com/camUrban/PteraSoftware.svg?branch=master)
![coverage](https://img.shields.io/codecov/c/gh/camUrban/PteraSoftware/master)
![code quality](https://img.shields.io/codefactor/grade/github/camUrban/PteraSoftware/master)
![source rank](https://img.shields.io/librariesio/sourcerank/pypi/PteraSoftware?color=blue&label=source%20rank)
![license](https://img.shields.io/github/license/camUrban/PteraSoftware?color=blue)
![code style](https://img.shields.io/badge/code%20style-black-black)
***
![Example Unsteady Formation Flight](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20variable%20formation/Animate.webp)
This is Ptera Software: a fast, easy-to-use, and open-source package for analyzing
flapping-wing flight.
## Motivation
In late 2018, I became curious about biological flight. To sate this curiosity, I
wanted to computationally simulate some flapping-wing fliers. I quickly realized I had
two options:
1. Spend thousands of dollars on a closed-source CFD program, which would take hours to
solve a simple case.
2. Try to learn someone else's open-source, unsteady solver written in a language I
didn't know, or using a framework that is overly complicated for my use case.
Neither of these seemed like the right choice.
Thankfully, my friend, Peter Sharpe, had just released his own open-source aerodynamics
solver: AeroSandbox. With his support, I have used AeroSandbox as a jumping-off point
to develop a solver package capable of unsteady simulations.
Through the combined efforts of Peter Sharpe, Suhas Kodali, and me, Ptera Software was
born. It is an easy-to-use, open-source, and actively-maintained UVLM package capable
of analyzing flapping-wing flight. Moreover, it's written in Python, is well
documented, tested, and validated.
Beginning with version 3.0.0, Ptera Software also includes a GUI developed by Zach Tait.
Although it is still rudimentary, we hope that it will help make this tool accessible to
even more users.
With your help, I hope we will increase the open-source community's interest and
understanding of biological flight.
## Features
1. 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.
2. 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 airfoil to chose from.
* Wings are automatically discretized into panels with customizable sizes and
spacings.
3. 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.
4. Customizable Operating Points
* Parameters such as the free-stream velocity, density, angle of attack, angle of
sideslip, etc. can be changed by the user.
5. 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!
6. 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!
7. 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.
8. A Basic GUI
* This is still in its beta stage, but we will be adding more functionality over the
next several releases.
## Installation and Use
First things first, you will need a copy of Python 3.8. Python 3.9 is not yet supported
due to a dependency issue in VTK. Download Python 3.8 from the official Python website.
At this time, I do not recommend using a version from the Anaconda distribution as it
could introduce compatibility issues with PyPI.
There are two ways to use Ptera Software. The first is by downloading GitHub release,
which will provide you your own copy of the source code, in which you can get a feel
for how it works (this can also be accomplished by forking the main branch). The second
is by importing the Ptera Software package using PyPI, which will allow you to call
Ptera Software's functions in your own scripts. If you are new to this tool, I
recommend first downloading a release, as this will give you access to the "examples"
directory.
Next, make sure you have an IDE in which you can run Ptera Software. I recommend using
the Community Edition of PyCharm, which is free, powerful, and well documented. If
you've never set up a Python project before, follow
[this guide](https://www.jetbrains.com/help/pycharm/quick-start-guide.html) to set up a
new project in PyCharm. If you'll be downloading a release, follow that tutorial's
"Open an existing project guide." Otherwise, follow the "Create a new project guide."
### Downloading A Release
To download a release, navigate to
[the releases page](https://github.com/camUrban/PteraSoftware/releases) and download
the latest zipped directory. Extract the contents, and set up a python project as
described in the PyCharm tutorial.
Then, open a command prompt window in your project's directory and enter:
```pip install -r requirements.txt```
via the command prompt in your fork's directory. You may also want to run:
```pip install -r requirements_dev.txt```
if you plan on making significant changes to the software.
Finally, open the "examples" folder, which contains several heavily commented scripts
that demonstrate different features and simulations. Read through each example, and
then run them to admire their pretty output!
### Importing As A Package
If you wish to use this package as a dependency in your own project, simply run:
```pip install pterasoftware```
via the command prompt in your project's directory. Then, in a script that you'd like
to use features from Ptera Software, add:
```import pterasoftware as ps```
If you haven't previously downloaded Ptera Software's source code, you can also learn
about the available functions by reading their docstrings, which should be fetched
automatically by many IDEs. Otherwise, you can return to the GitHub and read through
the docstrings there.
I am hoping to implement a web-based documentation guide soon! If you'd like to
contribute to this, feel free to open a feature request issue and start a conversation!
### What If I'm Having Trouble Getting Set Up?
Not to worry! I've made [a video](https://www.youtube.com/watch?v=oX8u2ZflJM4) that walks through getting Ptera Software up and
running. It includes every step, from downloading Python for the first time to setting
up your IDE to running the software. If you still run into problems, feel free to open
an issue for guidance.
## Example Code
The following code snippet is all that is needed (after running pip install
pterasoftware) to run the steady horseshoe solver on an airplane with custom geometry.
```
import pterasoftware as ps
airplane = ps.geometry.Airplane(
wings=[
ps.geometry.Wing(
symmetric=True,
wing_cross_sections=[
ps.geometry.WingCrossSection(
airfoil=ps.geometry.Airfoil(name="naca2412"),
),
ps.geometry.WingCrossSection(
y_le=5.0,
airfoil=ps.geometry.Airfoil(name="naca2412"),
),
],
),
],
)
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)
```
## Example Output
This package currently supports three different solvers, a steady horseshoe vortex
lattice method (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.
### Steady Horseshoe VLM
![Example Steady Horseshoe VLM Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/steady%20horseshoe%20vortex%20lattice%20method%20solver/Draw.webp)
### Steady Ring VLM
![Example Steady Ring VLM Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/steady%20ring%20vortex%20lattice%20method%20solver/Draw.webp)
### Unsteady Ring VLM
![Example Unsteady Ring VLM Animation Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20static/Animate.webp)
![Example Unsteady Ring VLM Force Coefficient Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20static/Example%20Airplane%20Force%20Coefficients.png)
![Example Unsteady Ring VLM Moment Coefficient Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20static/Example%20Airplane%20Moment%20Coefficients.png)
## Requirements
Here are the requirements necessary to run Ptera Software:
* matplotlib >= 3.7.2, < 4.0.0
* numpy >= 1.24.4, < 1.25.0
* pyvista >= 0.40.0, < 1.0.0
* scipy >= 1.10.1, < 2.0.0
* numba >= 0.57.1, < 1.0.0
* cmocean >= 3.0.3, < 4.0.0
* tqdm >= 4.65.0, < 5.0.0
* webp >= 0.1.6, < 1.0.0
* PySide2 >= 5.15.2.1, < 6.0.0.0
Additionally, these packages are useful for continued development of the software:
* codecov >= 2.1.13, < 3.0.0
* black >= 23.3.0, < 24.0.0
* pre-commit >= 3.3.3, < 4.0.0
* build >= 0.10.0, < 1.0.0
* twine >= 4.0.2, < 5.0.0
* PyInstaller >= 5.13.0, < 6.0.0
* setuptools >= 68.0.0, < 69.0.0
* wheel >= 0.40.0, < 1.0.0
## Validation
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.
## How to Contribute
As I said before, 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.
No comment is too big or small!
Here is a list of changes I would like to make in the coming releases. If you want to
contribute and don't know where to start, this is for you!
### Testing
* We should make sure that all the integration tests compare output against expected
results. This means getting rid of all the "test_method_does_not_throw" tests.
* We should maintain the repository's testing coverage to be at least 80%.
### Style and Documentation
* Maintain the repository's A CodeFactor Rating.
* We should fill in any of the "Properly document this..." TODO statements.
* We should ensure that all files be at least 30% comment lines.
* We should continue to ensure that all source code is formatted using Black.
### Features
* We should implement a leading-edge model to account for flow separation. See
"Modified Unsteady Vortex-Lattice Method to Study Flapping Wings in Hover Flight." by
Bruno Roccia, Sergio Preidikman, Julio Massa, and Dean Mook for details.
* We should try to implement aeroelastic effects in Ptera Software's solvers.
* Flapping wing controls is both fascinating and complicated. We should try to create a
workflow in Ptera Software for controls systems identification for flapping-wing
vehicles.
## Credits
Here is a list of all the people and packages that helped me created Ptera Software in
no particular order. Specific citations can be found in the source code's docstrings
where applicable.
* Suhas Kodali
* Peter Sharpe
* Zach Tait
* Ramesh Agarwal
* Joseph Katz
* Allen Plotkin
* Austin Stover
* AeroSandbox
* Black
* Codecov
* Travis CI
* NumPy
* SciPy
* PyVista
* MatPlotLib
* Numba
* Pre-Commit
* SetupTools
* GitIgnore
* Shields.io
* PyPI
* Wheel
* Twine
* SemVer
* GitFlow
* Cmocean
* Tqdm
* WebP
* Build
## Notes
To the best of my ability, I am following SemVer conventions in naming my releases. I
am also using the GitFlow method of branching for this project's development. This
means that nightly builds will be available on the develop branch. The latest stable
releases can be found on the master branch.
Raw data
{
"_id": null,
"home_page": "https://github.com/camurban/pterasoftware",
"name": "PteraSoftware",
"maintainer": "",
"docs_url": null,
"requires_python": "<3.9.0,>=3.8.0",
"maintainer_email": "",
"keywords": "python,uav,simulation,aerospace,computational-biology,cfd,solvers,computational-fluid-dynamics,aerodynamics,aeronautics,potential-flow,vlm,aerospace-engineering,unsteady-flows,aircraft-design,unmanned-aerial-vehicle,ornithopter,ornithology,vortex-lattice-method,pyvista",
"author": "Cameron Urban",
"author_email": "camerongurban@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/6f/dd/778ff8fb605ff03fcf82d0ffab9aa04e343af381d990a03bdfea9ee736fb/PteraSoftware-3.0.1.tar.gz",
"platform": null,
"description": "![Logo](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/Logo.png)\r\n\r\n***\r\n\r\n![build](https://app.travis-ci.com/camUrban/PteraSoftware.svg?branch=master)\r\n![coverage](https://img.shields.io/codecov/c/gh/camUrban/PteraSoftware/master)\r\n![code quality](https://img.shields.io/codefactor/grade/github/camUrban/PteraSoftware/master)\r\n![source rank](https://img.shields.io/librariesio/sourcerank/pypi/PteraSoftware?color=blue&label=source%20rank)\r\n![license](https://img.shields.io/github/license/camUrban/PteraSoftware?color=blue)\r\n![code style](https://img.shields.io/badge/code%20style-black-black)\r\n\r\n***\r\n\r\n![Example Unsteady Formation Flight](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20variable%20formation/Animate.webp)\r\n\r\nThis is Ptera Software: a fast, easy-to-use, and open-source package for analyzing \r\nflapping-wing flight.\r\n\r\n## Motivation\r\n\r\nIn late 2018, I became curious about biological flight. To sate this curiosity, I \r\nwanted to computationally simulate some flapping-wing fliers. I quickly realized I had \r\ntwo options:\r\n\r\n1. Spend thousands of dollars on a closed-source CFD program, which would take hours to \r\nsolve a simple case.\r\n2. Try to learn someone else's open-source, unsteady solver written in a language I \r\ndidn't know, or using a framework that is overly complicated for my use case.\r\n\r\nNeither of these seemed like the right choice.\r\n\r\nThankfully, my friend, Peter Sharpe, had just released his own open-source aerodynamics \r\nsolver: AeroSandbox. With his support, I have used AeroSandbox as a jumping-off point \r\nto develop a solver package capable of unsteady simulations.\r\n\r\nThrough the combined efforts of Peter Sharpe, Suhas Kodali, and me, Ptera Software was \r\nborn. It is an easy-to-use, open-source, and actively-maintained UVLM package capable \r\nof analyzing flapping-wing flight. Moreover, it's written in Python, is well \r\ndocumented, tested, and validated.\r\n\r\nBeginning with version 3.0.0, Ptera Software also includes a GUI developed by Zach Tait.\r\nAlthough it is still rudimentary, we hope that it will help make this tool accessible to\r\neven more users.\r\n\r\nWith your help, I hope we will increase the open-source community's interest and \r\nunderstanding of biological flight.\r\n\r\n## Features\r\n\r\n1. Various Aerodynamic Simulation Methods\r\n * Steady simulations can be run with a standard horseshoe vortex-lattice method \r\n (VLM) or a ring VLM.\r\n * Unsteady simulations use a ring unsteady VLM (UVLM) solver.\r\n * Unsteady simulations support both fixed and free wakes.\r\n * Unsteady simulations implement vortex aging to reduce numerical instabilities.\r\n2. Customizable Aircraft Geometry\r\n * Aircraft can be defined as a collection of one or more wings of any dimensions and \r\n positions.\r\n * Wings can be defined as a collection of two or more wing cross sections of any \r\n dimensions and positions.\r\n * Wing cross sections can be specified to match the mean camber line of an airfoil.\r\n * The package comes with a massive database of airfoil to chose from.\r\n * Wings are automatically discretized into panels with customizable sizes and \r\n spacings.\r\n3. Customizable Aircraft Motion\r\n * The relative motion of wings and wing cross sections can be defined using any \r\n time-dependent functions of sweep, pitch, and heave angles.\r\n4. Customizable Operating Points\r\n * Parameters such as the free-stream velocity, density, angle of attack, angle of \r\n sideslip, etc. can be changed by the user.\r\n5. High-Speed Simulations\r\n * Using Just-In-Time compilation, Ptera Software can solve many unsteady \r\n flapping-wing simulations in less than a minute!\r\n * Steady simulations take only seconds!\r\n6. Simulations of Formation Flight\r\n * Since v2.0.0, Ptera Software has supported simulations with more than one \r\n airplane.\r\n * This feature can be used to analyze the aerodynamics of flapping-wing formation \r\n flight!\r\n7. Features for Flapping-Wing Vehicle Design\r\n * Ptera Software is focused on developing features to facilitate designing \r\n flapping-wing vehicles.\r\n * For example, use the functions in the trim module to automatically search for a \r\n trim operating point for steady and unsteady simulations of aircraft.\r\n8. A Basic GUI\r\n * This is still in its beta stage, but we will be adding more functionality over the \r\n next several releases.\r\n\r\n## Installation and Use\r\n\r\nFirst things first, you will need a copy of Python 3.8. Python 3.9 is not yet supported \r\ndue to a dependency issue in VTK. Download Python 3.8 from the official Python website. \r\nAt this time, I do not recommend using a version from the Anaconda distribution as it \r\ncould introduce compatibility issues with PyPI.\r\n\r\nThere are two ways to use Ptera Software. The first is by downloading GitHub release, \r\nwhich will provide you your own copy of the source code, in which you can get a feel \r\nfor how it works (this can also be accomplished by forking the main branch). The second \r\nis by importing the Ptera Software package using PyPI, which will allow you to call \r\nPtera Software's functions in your own scripts. If you are new to this tool, I \r\nrecommend first downloading a release, as this will give you access to the \"examples\" \r\ndirectory.\r\n\r\nNext, make sure you have an IDE in which you can run Ptera Software. I recommend using \r\nthe Community Edition of PyCharm, which is free, powerful, and well documented. If \r\nyou've never set up a Python project before, follow \r\n[this guide](https://www.jetbrains.com/help/pycharm/quick-start-guide.html) to set up a \r\nnew project in PyCharm. If you'll be downloading a release, follow that tutorial's \r\n\"Open an existing project guide.\" Otherwise, follow the \"Create a new project guide.\"\r\n\r\n### Downloading A Release\r\n\r\nTo download a release, navigate to \r\n[the releases page](https://github.com/camUrban/PteraSoftware/releases) and download \r\nthe latest zipped directory. Extract the contents, and set up a python project as \r\ndescribed in the PyCharm tutorial.\r\n\r\nThen, open a command prompt window in your project's directory and enter:\r\n\r\n```pip install -r requirements.txt```\r\n\r\nvia the command prompt in your fork's directory. You may also want to run:\r\n\r\n```pip install -r requirements_dev.txt```\r\n\r\nif you plan on making significant changes to the software.\r\n\r\nFinally, open the \"examples\" folder, which contains several heavily commented scripts \r\nthat demonstrate different features and simulations. Read through each example, and \r\nthen run them to admire their pretty output!\r\n\r\n### Importing As A Package\r\n\r\nIf you wish to use this package as a dependency in your own project, simply run:\r\n\r\n```pip install pterasoftware```\r\n\r\nvia the command prompt in your project's directory. Then, in a script that you'd like \r\nto use features from Ptera Software, add:\r\n\r\n```import pterasoftware as ps```\r\n\r\nIf you haven't previously downloaded Ptera Software's source code, you can also learn \r\nabout the available functions by reading their docstrings, which should be fetched \r\nautomatically by many IDEs. Otherwise, you can return to the GitHub and read through \r\nthe docstrings there.\r\n\r\nI am hoping to implement a web-based documentation guide soon! If you'd like to \r\ncontribute to this, feel free to open a feature request issue and start a conversation!\r\n\r\n### What If I'm Having Trouble Getting Set Up?\r\n\r\nNot to worry! I've made [a video](https://www.youtube.com/watch?v=oX8u2ZflJM4) that walks through getting Ptera Software up and \r\nrunning. It includes every step, from downloading Python for the first time to setting \r\nup your IDE to running the software. If you still run into problems, feel free to open \r\nan issue for guidance.\r\n\r\n## Example Code\r\n\r\nThe following code snippet is all that is needed (after running pip install \r\npterasoftware) to run the steady horseshoe solver on an airplane with custom geometry.\r\n\r\n```\r\nimport pterasoftware as ps\r\n\r\nairplane = ps.geometry.Airplane(\r\n wings=[\r\n ps.geometry.Wing(\r\n symmetric=True,\r\n wing_cross_sections=[\r\n ps.geometry.WingCrossSection(\r\n airfoil=ps.geometry.Airfoil(name=\"naca2412\"),\r\n ),\r\n ps.geometry.WingCrossSection(\r\n y_le=5.0,\r\n airfoil=ps.geometry.Airfoil(name=\"naca2412\"),\r\n ),\r\n ],\r\n ),\r\n ],\r\n)\r\n\r\noperating_point = ps.operating_point.OperatingPoint()\r\n\r\nproblem = ps.problems.SteadyProblem(\r\n airplanes=[airplane], operating_point=operating_point\r\n)\r\n\r\nsolver = (\r\n ps.steady_horseshoe_vortex_lattice_method.SteadyHorseshoeVortexLatticeMethodSolver(\r\n steady_problem=problem\r\n )\r\n)\r\n\r\nsolver.run()\r\n\r\nps.output.draw(solver=solver, scalar_type=\"lift\", show_streamlines=True)\r\n```\r\n\r\n## Example Output\r\n\r\nThis package currently supports three different solvers, a steady horseshoe vortex \r\nlattice method (VLM), a steady ring VLM, and an unsteady ring VLM (UVLM). Here are \r\nexamples of the output you can expect to receive from each of them.\r\n\r\n### Steady Horseshoe VLM\r\n\r\n![Example Steady Horseshoe VLM Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/steady%20horseshoe%20vortex%20lattice%20method%20solver/Draw.webp)\r\n\r\n### Steady Ring VLM\r\n\r\n![Example Steady Ring VLM Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/steady%20ring%20vortex%20lattice%20method%20solver/Draw.webp)\r\n\r\n### Unsteady Ring VLM\r\n\r\n![Example Unsteady Ring VLM Animation Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20static/Animate.webp)\r\n\r\n![Example Unsteady Ring VLM Force Coefficient Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20static/Example%20Airplane%20Force%20Coefficients.png)\r\n\r\n![Example Unsteady Ring VLM Moment Coefficient Output](https://raw.githubusercontent.com/camUrban/PteraSoftware/master/docs/examples%20expected%20output/unsteady%20ring%20vortex%20lattice%20method%20solver%20static/Example%20Airplane%20Moment%20Coefficients.png)\r\n\r\n## Requirements\r\n\r\nHere are the requirements necessary to run Ptera Software:\r\n\r\n* matplotlib >= 3.7.2, < 4.0.0\r\n* numpy >= 1.24.4, < 1.25.0\r\n* pyvista >= 0.40.0, < 1.0.0\r\n* scipy >= 1.10.1, < 2.0.0\r\n* numba >= 0.57.1, < 1.0.0\r\n* cmocean >= 3.0.3, < 4.0.0\r\n* tqdm >= 4.65.0, < 5.0.0\r\n* webp >= 0.1.6, < 1.0.0\r\n* PySide2 >= 5.15.2.1, < 6.0.0.0\r\n\r\nAdditionally, these packages are useful for continued development of the software:\r\n\r\n* codecov >= 2.1.13, < 3.0.0\r\n* black >= 23.3.0, < 24.0.0\r\n* pre-commit >= 3.3.3, < 4.0.0\r\n* build >= 0.10.0, < 1.0.0\r\n* twine >= 4.0.2, < 5.0.0\r\n* PyInstaller >= 5.13.0, < 6.0.0\r\n* setuptools >= 68.0.0, < 69.0.0\r\n* wheel >= 0.40.0, < 1.0.0\r\n\r\n## Validation\r\n\r\nSince the release of version 1.0.0, Ptera Software is now validated against \r\nexperimental flapping-wing data! See the \"validation\" directory to run the test case \r\nand read a report on the software's accuracy.\r\n\r\n## How to Contribute\r\n\r\nAs I said before, the primary goal of this project is to increase the open-source \r\ncommunity's understanding and appreciation for unsteady aerodynamics in general and \r\nflapping-wing flight in particular. This will only happen through your participation. \r\nFeel free to request features, report bugs or security issues, and provide suggestions. \r\nNo comment is too big or small!\r\n\r\nHere is a list of changes I would like to make in the coming releases. If you want to \r\ncontribute and don't know where to start, this is for you!\r\n\r\n### Testing\r\n\r\n* We should make sure that all the integration tests compare output against expected \r\nresults. This means getting rid of all the \"test_method_does_not_throw\" tests.\r\n* We should maintain the repository's testing coverage to be at least 80%.\r\n\r\n### Style and Documentation\r\n\r\n* Maintain the repository's A CodeFactor Rating.\r\n* We should fill in any of the \"Properly document this...\" TODO statements.\r\n* We should ensure that all files be at least 30% comment lines.\r\n* We should continue to ensure that all source code is formatted using Black.\r\n\r\n### Features\r\n\r\n* We should implement a leading-edge model to account for flow separation. See \r\n\"Modified Unsteady Vortex-Lattice Method to Study Flapping Wings in Hover Flight.\" by \r\nBruno Roccia, Sergio Preidikman, Julio Massa, and Dean Mook for details.\r\n* We should try to implement aeroelastic effects in Ptera Software's solvers.\r\n* Flapping wing controls is both fascinating and complicated. We should try to create a \r\nworkflow in Ptera Software for controls systems identification for flapping-wing \r\nvehicles.\r\n\r\n## Credits\r\n\r\nHere is a list of all the people and packages that helped me created Ptera Software in\r\nno particular order. Specific citations can be found in the source code's docstrings\r\nwhere applicable.\r\n\r\n* Suhas Kodali\r\n* Peter Sharpe\r\n* Zach Tait\r\n* Ramesh Agarwal\r\n* Joseph Katz\r\n* Allen Plotkin\r\n* Austin Stover\r\n* AeroSandbox\r\n* Black\r\n* Codecov\r\n* Travis CI\r\n* NumPy\r\n* SciPy\r\n* PyVista\r\n* MatPlotLib\r\n* Numba\r\n* Pre-Commit\r\n* SetupTools\r\n* GitIgnore\r\n* Shields.io\r\n* PyPI\r\n* Wheel\r\n* Twine\r\n* SemVer\r\n* GitFlow\r\n* Cmocean\r\n* Tqdm\r\n* WebP\r\n* Build\r\n\r\n## Notes\r\n\r\nTo the best of my ability, I am following SemVer conventions in naming my releases. I \r\nam also using the GitFlow method of branching for this project's development. This \r\nmeans that nightly builds will be available on the develop branch. The latest stable \r\nreleases can be found on the master branch.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "This is an open-source, unsteady aerodynamics solver for analyzing flapping-wing flight.",
"version": "3.0.1",
"project_urls": {
"Bug Tracker": "https://github.com/camurban/pterasoftware/issues",
"Homepage": "https://github.com/camurban/pterasoftware"
},
"split_keywords": [
"python",
"uav",
"simulation",
"aerospace",
"computational-biology",
"cfd",
"solvers",
"computational-fluid-dynamics",
"aerodynamics",
"aeronautics",
"potential-flow",
"vlm",
"aerospace-engineering",
"unsteady-flows",
"aircraft-design",
"unmanned-aerial-vehicle",
"ornithopter",
"ornithology",
"vortex-lattice-method",
"pyvista"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8e73204c9f3904f9033a92d0ef96ae748cc592c6fdd0b6d9a4705652b4adbac7",
"md5": "d36788b929e0fecd1888754ae15f463d",
"sha256": "dad2120f292badee9967b71f28350d27e8aa1136bf3b8a4fcd4c33bc98a4db51"
},
"downloads": -1,
"filename": "PteraSoftware-3.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d36788b929e0fecd1888754ae15f463d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.9.0,>=3.8.0",
"size": 1093140,
"upload_time": "2023-07-10T14:28:56",
"upload_time_iso_8601": "2023-07-10T14:28:56.487550Z",
"url": "https://files.pythonhosted.org/packages/8e/73/204c9f3904f9033a92d0ef96ae748cc592c6fdd0b6d9a4705652b4adbac7/PteraSoftware-3.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6fdd778ff8fb605ff03fcf82d0ffab9aa04e343af381d990a03bdfea9ee736fb",
"md5": "fa2ae148fee800d144f37350060b28db",
"sha256": "5d1eb951fdb9b812385aa997a4b45ddeee5bec93e6eb26fa4bb5c143daf63bb0"
},
"downloads": -1,
"filename": "PteraSoftware-3.0.1.tar.gz",
"has_sig": false,
"md5_digest": "fa2ae148fee800d144f37350060b28db",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.9.0,>=3.8.0",
"size": 754264,
"upload_time": "2023-07-10T14:28:58",
"upload_time_iso_8601": "2023-07-10T14:28:58.548057Z",
"url": "https://files.pythonhosted.org/packages/6f/dd/778ff8fb605ff03fcf82d0ffab9aa04e343af381d990a03bdfea9ee736fb/PteraSoftware-3.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-10 14:28:58",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "camurban",
"github_project": "pterasoftware",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "matplotlib",
"specs": [
[
">=",
"3.7.2"
],
[
"<",
"4.0.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.24.4"
],
[
"<",
"1.25.0"
]
]
},
{
"name": "pyvista",
"specs": [
[
"<",
"1.0.0"
],
[
">=",
"0.40.0"
]
]
},
{
"name": "scipy",
"specs": [
[
">=",
"1.10.1"
],
[
"<",
"2.0.0"
]
]
},
{
"name": "numba",
"specs": [
[
">=",
"0.57.1"
],
[
"<",
"1.0.0"
]
]
},
{
"name": "cmocean",
"specs": [
[
"<",
"4.0.0"
],
[
">=",
"3.0.3"
]
]
},
{
"name": "tqdm",
"specs": [
[
"<",
"5.0.0"
],
[
">=",
"4.65.0"
]
]
},
{
"name": "webp",
"specs": [
[
"<",
"1.0.0"
],
[
">=",
"0.1.6"
]
]
},
{
"name": "PySide2",
"specs": [
[
"<",
"6.0.0.0"
],
[
">=",
"5.15.2.1"
]
]
}
],
"lcname": "pterasoftware"
}