AeroSandbox


NameAeroSandbox JSON
Version 4.2.4 PyPI version JSON
download
home_pagehttps://peterdsharpe.github.io/AeroSandbox/
SummaryAeroSandbox is a Python package that helps you design and optimize aircraft and other engineered systems.
upload_time2024-04-25 15:17:18
maintainerNone
docs_urlNone
authorPeter Sharpe
requires_python>=3.8
licenseNone
keywords aerodynamics airplane cfd mdo mdao aircraft design aerospace optimization automatic differentiation structures propulsion
VCS
bugtrack_url
requirements numpy scipy casadi pandas matplotlib seaborn tqdm sortedcontainers dill neuralfoil plotly pyvista ipyvtklink trimesh sympy cadquery shapely pytest
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # [AeroSandbox](https://peterdsharpe.github.io/AeroSandbox/) :airplane:

by [Peter Sharpe](https://peterdsharpe.github.io) (<pds [at] mit [dot] edu>)

[![Downloads](https://pepy.tech/badge/aerosandbox)](https://pepy.tech/project/aerosandbox)
[![Monthly Downloads](https://pepy.tech/badge/aerosandbox/month)](https://pepy.tech/project/aerosandbox)
[![Build Status](https://github.com/peterdsharpe/AeroSandbox/workflows/Tests/badge.svg)](https://github.com/peterdsharpe/AeroSandbox/actions/workflows/run-pytest.yml)
[![PyPI](https://img.shields.io/pypi/v/aerosandbox.svg)](https://pypi.python.org/pypi/aerosandbox)
[![Documentation Status](https://readthedocs.org/projects/aerosandbox/badge/?version=master)](https://aerosandbox.readthedocs.io/en/master/?badge=master)
[![License: MIT](https://img.shields.io/badge/License-MIT-g.svg)](https://opensource.org/licenses/MIT)

**AeroSandbox is a Python package that helps you design and optimize aircraft and other engineered systems.**

At its heart, AeroSandbox is an optimization suite that combines the ease-of-use of [familiar NumPy syntax](aerosandbox/numpy) with the power of [modern automatic differentiation](./tutorial/10%20-%20Miscellaneous/03%20-%20Resources%20on%20Automatic%20Differentiation.md).

This automatic differentiation dramatically improves optimization performance on large problems: **design problems with tens of thousands of decision variables solve in seconds on a laptop**. AeroSandbox also comes with dozens of end-to-end-differentiable aerospace physics models, allowing you to **simultaneously optimize an aircraft's aerodynamics, structures, propulsion, mission trajectory, stability, and more.** 

Keeping AeroSandbox easy to learn and use is a top priority. *Complexity is optional* - you can use AeroSandbox's built-in physics models where helpful, or you can drop in arbitrary custom physics models of your own.

```
pip install aerosandbox[full]
```

-----

### What can I do with AeroSandbox?

Use AeroSandbox to design and optimize entire aircraft:

<table>
    <tr>
        <td width="50%" valign="top">
            <p align="center">
                <a href="https://github.com/peterdsharpe/Feather-RC-Glider"><i>Feather</i> (an ultra-lightweight 1-meter-class RC motor glider)</a>
            </p>
            <img src="https://raw.githubusercontent.com/peterdsharpe/Feather-RC-Glider/master/CAD/feather.png" alt="Feather first page">
        </td>
        <td width="50%" valign="top">
            <p align="center">
                <a href="https://github.com/peterdsharpe/solar-seaplane-preliminary-sizing"><i>SEAWAY-Mini</i> (a solar-electric, 13' wingspan seaplane)</a>
            </p>
            <img src="https://raw.githubusercontent.com/peterdsharpe/solar-seaplane-preliminary-sizing/main/CAD/renders/seaway_mini_packet_Page_1.png" alt="Seaway-Mini first page">
        </td>
    </tr>
</table>

Use AeroSandbox to support real-world aircraft development programs, all the way from your very first sketch to your first-flight and beyond:

<table>
    <tr>
        <td width="50%" valign="top">
            <p align="center">
                <a href="https://github.com/peterdsharpe/DawnDesignTool">Initial concept sketches + sizing of <i>Dawn</i> (a solar-electric airplane for climate science research) in AeroSandbox, Spring 2020</a>
            </p>
            <img src="./media/images/dawn1-first-sketch.png" alt="Dawn initial design">
        </td>
        <td width="50%" valign="top">
            <p align="center">
                <a href="https://youtu.be/CyTzx9UCvyo"><i>Dawn</i> (later renamed <i>SACOS</i>) in first flight, Fall 2022</a>
            </p>
            <p align="center"><a href="https://www.electra.aero/news/sacos-first-flight">(A massive build effort with excellent engineering and coordination by Electra.aero!)</a></p>
            <img src="./media/images/SACOS%20First%20Flight%20Zoomed.jpg" alt="SACOS first flight">
        </td>
    </tr>
</table>

Use AeroSandbox to explore counterintuitive, complicated design tradeoffs, all at the earliest stages of conceptual design *where these insights make the most difference*:

<table>
	<tr>
		<td width="33%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/DawnDesignTool">Exploring how big a solar airplane needs to be to fly, as a function of seasonality and latitude</a>
			</p>
			<img src="https://github.com/peterdsharpe/DawnDesignTool/raw/master/docs/30kg_payload.svg" alt="Dawn seasonality latitude tradespace">
		</td>
		<td width="33%" valign="top">
			<p align="center">
				<a href="https://www.popularmechanics.com/military/aviation/a13938789/mit-developing-mach-08-rocket-drone-for-the-air-force/">Exploring how the mission range of <i>Firefly</i>, a Mach 0.8 rocket drone, changes if we add an altitude limit, simultaneously optimizing aircraft design and trajectories</a>
			</p>
			<img src="./media/images/firefly-range-ceiling-trade.png" alt="Firefly range ceiling trade">
		</td>
		<td width="33%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/transport-aircraft">Exploring how many LH2 aircraft classes an airline fleet needs to cover the market, considering off-design performance</a>
			</p>
			<img src="https://github.com/peterdsharpe/transport-aircraft/raw/master/figures/lh2_market_segmentation_2.svg" alt="LH2 Market Coverage">
		</td>
	</tr>
</table>

Use AeroSandbox as a pure aerodynamics toolkit:

<table>
	<tr>
		<td width="33%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/AeroSandbox/blob/master/tutorial/06%20-%20Aerodynamics/01%20-%20AeroSandbox%203D%20Aerodynamics%20Tools/01%20-%20Vortex%20Lattice%20Method/01%20-%20Vortex%20Lattice%20Method.ipynb">VLM simulation of a glider, aileron deflections of +-30°</a>
			</p>
			<img src="./media/images/vlm3_with_control_surfaces.png" alt="VLM simulation">
		</td>
		<td width="33%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/AeroSandbox/blob/master/tutorial/06%20-%20Aerodynamics/01%20-%20AeroSandbox%203D%20Aerodynamics%20Tools/01%20-%20Vortex%20Lattice%20Method/01%20-%20Vortex%20Lattice%20Method.ipynb">Aerodynamic shape optimization of a wing planform, using an arbitrary objective and constraints</a>
			</p>
			<img src="./media/images/wing_optimization.png" alt="Wing optimization">
		</td>
		<td width="33%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/AeroSandbox/blob/master/tutorial/06%20-%20Aerodynamics/02%20-%20AeroSandbox%202D%20Aerodynamics%20Tools/02%20-%20NeuralFoil%20Optimization.ipynb">Optimize airfoil shapes with aerodynamic, structural, and manufacturing considerations</a>
			</p>
			<img src="./media/images/airfoil_optimization.png" alt="Airfoil optimization">
		</td>
	</tr>
</table>

Among many other discplines:

<table>
	<tr>
		<td width="50%" valign="top">
			<p align="center">
				Structural optimization of a composite tube spar
			</p>
			<img src="./media/images/beam-optimization.png" alt="Beam optimization">
		</td>
		<td width="50%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/AeroSandbox/blob/master/aerosandbox/library/propulsion_electric.py">Electric motor analysis for propeller matching</a>
			</p>
			<img src="./media/images/motor_perf.png" alt="Motor performance">
		</td>
	</tr>
	<tr>
		<td>
			<p align="center" valign="top">
				<a href="https://github.com/peterdsharpe/transport-aircraft">Tools to analyze unconventional propulsion (e.g., LH2)</a>
			</p>
			<img src="https://github.com/peterdsharpe/transport-aircraft/raw/master/figures/three_view_annotated.svg" alt="LH2 airplane three-view">
		</td>
		<td>
			<p align="center" valign="top">
				<a href="https://github.com/peterdsharpe/AeroSandbox/tree/master/aerosandbox/library/weights">Detailed weights estimation for aircraft ranging from micro-UAVs to airliners</a>
			</p>
			<img src="https://github.com/peterdsharpe/transport-aircraft/raw/master/figures/mass_budget.png" alt="Mass Budget">
		</td>
</tr>
</table>

Easily interface AeroSandbox with all your favorite tools:

<table>
    <tr>
        <td width="33%" valign="top">
            <p align="center">
                Other conceptual design tools (AVL, XFLR5, XFoil, ASWING, MSES, etc.)
            </p>
            <img src="./media/images/airfoil_contours.png" alt="XFoil">
        </td> 
          <td width="33%" valign="top">
                <p align="center">
                    CAD tools via STEP export (SolidWorks, Fusion 360, etc.)
                </p>
				<p align="center">
				(STL, OBJ, etc. supported too)
				</p>
                <img src="https://github.com/peterdsharpe/solar-seaplane-preliminary-sizing/raw/main/CAD/renders/raytrace-lowres.jpg" alt="CAD">
            </td>
          <td width="33%" valign="top">
			<p align="center">
				User-provided models + code (for custom aerodynamics, structures, propulsion, or anything else - e.g., for optimizing flight through a probabilistic wind field, shown below) 
			</p>
			<img src="./media/images/wind_speeds_model.png" alt="Wind speed">
		</td>
	</tr>
</table>

Or, throw all the airplane-design-specific code out entirely, and use AeroSandbox purely as an optimization solver or as a solver for nonlinear systems of equations (or ODEs, or PDEs):

<table>
	<tr>
		<td width="50%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/AeroSandbox/blob/develop/tutorial/01%20-%20Optimization%20and%20Math/01%20-%202D%20Rosenbrock.ipynb">Optimize the 2D Rosenbrock function</a>
			</p>
			<img src="./media/images/optimization.png" alt="Optimization">
		</td>
		<td width="50%" valign="top">
			<p align="center">
				<a href="https://github.com/peterdsharpe/AeroSandbox/tree/develop/tutorial/03%20-%20Trajectory%20Optimization%20and%20Optimal%20Control/01%20-%20Solving%20ODEs%20with%20AeroSandbox">Specify the Falkner Skan ODE (nonlinear, 3rd-order BVP) and let AeroSandbox automatically take care of the discretization, solution, and even inverse solving.</a>
			</p>
			<img src="./media/images/falkner-skan.png" alt="FS ODE">
		</td>
</tr>
</table>

And much, much more. Best of all, combine these tools arbitrarily without any loss in optimization speed and without any tedious derivative math, all thanks to AeroSandbox's end-to-end automatic-differentiability.

## Getting Started

### Installation

In short:

* `pip install aerosandbox[full]` for a complete install.

* `pip install aerosandbox` for a lightweight (headless) installation with minimal dependencies. All optimization, numerics, and physics models are included, but optional visualization dependencies are skipped.

For more installation details (e.g., if you're new to Python), [see here](./INSTALLATION.md).

### Tutorials, Examples, and Documentation

To get started, [check out the tutorials folder here](./tutorial/)! All tutorials are viewable in-browser, or you can open them as Jupyter notebooks by cloning this repository.

For a more detailed and theory-heavy introduction to AeroSandbox, [please see this thesis](./tutorial/sharpe-pds-sm-AeroAstro-2021-thesis.pdf).

For a yet-more-detailed developer-level description of AeroSandbox modules, [please see the developer README](aerosandbox/README.md).

For fully-detailed API documentation, see [the documentation website](https://aerosandbox.readthedocs.io/en/master/).

You can print documentation and examples for any AeroSandbox object by using the built-in `help()` function (e.g., `help(asb.Airplane)`). AeroSandbox code is also documented *extensively* in the source and contains hundreds of unit test examples, so examining the source code can also be useful.

### Usage Details

#### Units

One final point to note: **all inputs and outputs to AeroSandbox are expressed in base SI units, or derived units thereof** (e.g., m, kg, sec, N, m/s, J, Pa). Since this unit system is [coherent](https://en.wikipedia.org/wiki/Coherence_(units_of_measurement)), an [enormous number of quantities](https://en.wikipedia.org/wiki/SI_derived_unit) can be converted without any scaling factors. This improves readability and reduces the likelihood of errors.

There are only two exceptions to this SI-everywhere rule:
1. If alternate units are noted in a variable name's suffix. For example:

   * `battery_capacity` → Joules
   * `battery_capacity_watt_hours` → Watt-hours
   * `aircraft_endurance` → Seconds
   * `aircraft_endurance_hours` → Hours

2. Angle of attack (`alpha`, α) and sideslip angle (`beta`, β) are given in degrees due to long-standing aerospace convention. All other angles and angular rates use radians. 
 
Also, in case of any confusion on the units of a function's inputs and outputs, units are listed on all function docstrings.

If you wish to use other units, consider using [`aerosandbox.tools.units`](./aerosandbox/tools/units.py) to convert easily.

## Project Details

### Contributing

Please feel free to join the development of AeroSandbox - contributions are always so welcome! If you have a change you'd like to make, the easiest way to do that is by submitting a pull request.

The text file [`CONTRIBUTING.md`](./CONTRIBUTING.md) has more details for developers and power users.

If you've already made several additions and would like to be involved in a more long-term capacity, please message me!
Contact information can be found next to my name near the top of this README.

### Donating

If you like this software, please consider donating to support development [via PayPal](https://paypal.me/peterdsharpe)
or [GitHub Sponsors](https://github.com/sponsors/peterdsharpe/)! Proceeds will go towards more coffee for the grad students.

### Bugs

Please, please report all bugs by [creating a new issue](https://github.com/peterdsharpe/AeroSandbox/issues)!

### Versioning

AeroSandbox loosely uses [semantic versioning](https://semver.org/), which should give you an idea of whether or not you can probably expect backward-compatibility and/or new features from any given update.

For more details, see the [changelog](./CHANGELOG.md).

### Citation & Commercial Use

If you find AeroSandbox useful in a research publication, please cite it using the following BibTeX snippet:

```bibtex
@mastersthesis{aerosandbox,
    title = {AeroSandbox: A Differentiable Framework for Aircraft Design Optimization},
    author = {Sharpe, Peter D.},
    school = {Massachusetts Institute of Technology},
    year = {2021}
}
```

Commercial users: I'm more than happy to discuss consulting work for active AeroSandbox support if this package proves helpful - use the email address in the header of this README to get in touch.

#### License

[MIT License applies, full terms here](LICENSE.txt). In short: use AeroSandbox for anything you want (commercial or non-commercial). AeroSandbox is released in hope that it will be useful but without any warranty of merchantability (either express or implied). 

If you use AeroSandbox, attribution is appreciated.

## Stargazers over time

[![Stargazers over time](https://starchart.cc/peterdsharpe/AeroSandbox.svg)](https://starchart.cc/peterdsharpe/AeroSandbox) 

            

Raw data

            {
    "_id": null,
    "home_page": "https://peterdsharpe.github.io/AeroSandbox/",
    "name": "AeroSandbox",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "aerodynamics airplane cfd mdo mdao aircraft design aerospace optimization automatic differentiation structures propulsion",
    "author": "Peter Sharpe",
    "author_email": "pds@mit.edu",
    "download_url": "https://files.pythonhosted.org/packages/09/46/85399e8f330240fc25d1f77b65885ea908295c11a2600fd659076392985b/aerosandbox-4.2.4.tar.gz",
    "platform": null,
    "description": "# [AeroSandbox](https://peterdsharpe.github.io/AeroSandbox/) :airplane:\n\nby [Peter Sharpe](https://peterdsharpe.github.io) (<pds [at] mit [dot] edu>)\n\n[![Downloads](https://pepy.tech/badge/aerosandbox)](https://pepy.tech/project/aerosandbox)\n[![Monthly Downloads](https://pepy.tech/badge/aerosandbox/month)](https://pepy.tech/project/aerosandbox)\n[![Build Status](https://github.com/peterdsharpe/AeroSandbox/workflows/Tests/badge.svg)](https://github.com/peterdsharpe/AeroSandbox/actions/workflows/run-pytest.yml)\n[![PyPI](https://img.shields.io/pypi/v/aerosandbox.svg)](https://pypi.python.org/pypi/aerosandbox)\n[![Documentation Status](https://readthedocs.org/projects/aerosandbox/badge/?version=master)](https://aerosandbox.readthedocs.io/en/master/?badge=master)\n[![License: MIT](https://img.shields.io/badge/License-MIT-g.svg)](https://opensource.org/licenses/MIT)\n\n**AeroSandbox is a Python package that helps you design and optimize aircraft and other engineered systems.**\n\nAt its heart, AeroSandbox is an optimization suite that combines the ease-of-use of [familiar NumPy syntax](aerosandbox/numpy) with the power of [modern automatic differentiation](./tutorial/10%20-%20Miscellaneous/03%20-%20Resources%20on%20Automatic%20Differentiation.md).\n\nThis automatic differentiation dramatically improves optimization performance on large problems: **design problems with tens of thousands of decision variables solve in seconds on a laptop**. AeroSandbox also comes with dozens of end-to-end-differentiable aerospace physics models, allowing you to **simultaneously optimize an aircraft's aerodynamics, structures, propulsion, mission trajectory, stability, and more.** \n\nKeeping AeroSandbox easy to learn and use is a top priority. *Complexity is optional* - you can use AeroSandbox's built-in physics models where helpful, or you can drop in arbitrary custom physics models of your own.\n\n```\npip install aerosandbox[full]\n```\n\n-----\n\n### What can I do with AeroSandbox?\n\nUse AeroSandbox to design and optimize entire aircraft:\n\n<table>\n    <tr>\n        <td width=\"50%\" valign=\"top\">\n            <p align=\"center\">\n                <a href=\"https://github.com/peterdsharpe/Feather-RC-Glider\"><i>Feather</i> (an ultra-lightweight 1-meter-class RC motor glider)</a>\n            </p>\n            <img src=\"https://raw.githubusercontent.com/peterdsharpe/Feather-RC-Glider/master/CAD/feather.png\" alt=\"Feather first page\">\n        </td>\n        <td width=\"50%\" valign=\"top\">\n            <p align=\"center\">\n                <a href=\"https://github.com/peterdsharpe/solar-seaplane-preliminary-sizing\"><i>SEAWAY-Mini</i> (a solar-electric, 13' wingspan seaplane)</a>\n            </p>\n            <img src=\"https://raw.githubusercontent.com/peterdsharpe/solar-seaplane-preliminary-sizing/main/CAD/renders/seaway_mini_packet_Page_1.png\" alt=\"Seaway-Mini first page\">\n        </td>\n    </tr>\n</table>\n\nUse AeroSandbox to support real-world aircraft development programs, all the way from your very first sketch to your first-flight and beyond:\n\n<table>\n    <tr>\n        <td width=\"50%\" valign=\"top\">\n            <p align=\"center\">\n                <a href=\"https://github.com/peterdsharpe/DawnDesignTool\">Initial concept sketches + sizing of <i>Dawn</i> (a solar-electric airplane for climate science research) in AeroSandbox, Spring 2020</a>\n            </p>\n            <img src=\"./media/images/dawn1-first-sketch.png\" alt=\"Dawn initial design\">\n        </td>\n        <td width=\"50%\" valign=\"top\">\n            <p align=\"center\">\n                <a href=\"https://youtu.be/CyTzx9UCvyo\"><i>Dawn</i> (later renamed <i>SACOS</i>) in first flight, Fall 2022</a>\n            </p>\n            <p align=\"center\"><a href=\"https://www.electra.aero/news/sacos-first-flight\">(A massive build effort with excellent engineering and coordination by Electra.aero!)</a></p>\n            <img src=\"./media/images/SACOS%20First%20Flight%20Zoomed.jpg\" alt=\"SACOS first flight\">\n        </td>\n    </tr>\n</table>\n\nUse AeroSandbox to explore counterintuitive, complicated design tradeoffs, all at the earliest stages of conceptual design *where these insights make the most difference*:\n\n<table>\n\t<tr>\n\t\t<td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/DawnDesignTool\">Exploring how big a solar airplane needs to be to fly, as a function of seasonality and latitude</a>\n\t\t\t</p>\n\t\t\t<img src=\"https://github.com/peterdsharpe/DawnDesignTool/raw/master/docs/30kg_payload.svg\" alt=\"Dawn seasonality latitude tradespace\">\n\t\t</td>\n\t\t<td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://www.popularmechanics.com/military/aviation/a13938789/mit-developing-mach-08-rocket-drone-for-the-air-force/\">Exploring how the mission range of <i>Firefly</i>, a Mach 0.8 rocket drone, changes if we add an altitude limit, simultaneously optimizing aircraft design and trajectories</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/firefly-range-ceiling-trade.png\" alt=\"Firefly range ceiling trade\">\n\t\t</td>\n\t\t<td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/transport-aircraft\">Exploring how many LH2 aircraft classes an airline fleet needs to cover the market, considering off-design performance</a>\n\t\t\t</p>\n\t\t\t<img src=\"https://github.com/peterdsharpe/transport-aircraft/raw/master/figures/lh2_market_segmentation_2.svg\" alt=\"LH2 Market Coverage\">\n\t\t</td>\n\t</tr>\n</table>\n\nUse AeroSandbox as a pure aerodynamics toolkit:\n\n<table>\n\t<tr>\n\t\t<td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/blob/master/tutorial/06%20-%20Aerodynamics/01%20-%20AeroSandbox%203D%20Aerodynamics%20Tools/01%20-%20Vortex%20Lattice%20Method/01%20-%20Vortex%20Lattice%20Method.ipynb\">VLM simulation of a glider, aileron deflections of +-30\u00b0</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/vlm3_with_control_surfaces.png\" alt=\"VLM simulation\">\n\t\t</td>\n\t\t<td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/blob/master/tutorial/06%20-%20Aerodynamics/01%20-%20AeroSandbox%203D%20Aerodynamics%20Tools/01%20-%20Vortex%20Lattice%20Method/01%20-%20Vortex%20Lattice%20Method.ipynb\">Aerodynamic shape optimization of a wing planform, using an arbitrary objective and constraints</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/wing_optimization.png\" alt=\"Wing optimization\">\n\t\t</td>\n\t\t<td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/blob/master/tutorial/06%20-%20Aerodynamics/02%20-%20AeroSandbox%202D%20Aerodynamics%20Tools/02%20-%20NeuralFoil%20Optimization.ipynb\">Optimize airfoil shapes with aerodynamic, structural, and manufacturing considerations</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/airfoil_optimization.png\" alt=\"Airfoil optimization\">\n\t\t</td>\n\t</tr>\n</table>\n\nAmong many other discplines:\n\n<table>\n\t<tr>\n\t\t<td width=\"50%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\tStructural optimization of a composite tube spar\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/beam-optimization.png\" alt=\"Beam optimization\">\n\t\t</td>\n\t\t<td width=\"50%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/blob/master/aerosandbox/library/propulsion_electric.py\">Electric motor analysis for propeller matching</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/motor_perf.png\" alt=\"Motor performance\">\n\t\t</td>\n\t</tr>\n\t<tr>\n\t\t<td>\n\t\t\t<p align=\"center\" valign=\"top\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/transport-aircraft\">Tools to analyze unconventional propulsion (e.g., LH2)</a>\n\t\t\t</p>\n\t\t\t<img src=\"https://github.com/peterdsharpe/transport-aircraft/raw/master/figures/three_view_annotated.svg\" alt=\"LH2 airplane three-view\">\n\t\t</td>\n\t\t<td>\n\t\t\t<p align=\"center\" valign=\"top\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/tree/master/aerosandbox/library/weights\">Detailed weights estimation for aircraft ranging from micro-UAVs to airliners</a>\n\t\t\t</p>\n\t\t\t<img src=\"https://github.com/peterdsharpe/transport-aircraft/raw/master/figures/mass_budget.png\" alt=\"Mass Budget\">\n\t\t</td>\n</tr>\n</table>\n\nEasily interface AeroSandbox with all your favorite tools:\n\n<table>\n    <tr>\n        <td width=\"33%\" valign=\"top\">\n            <p align=\"center\">\n                Other conceptual design tools (AVL, XFLR5, XFoil, ASWING, MSES, etc.)\n            </p>\n            <img src=\"./media/images/airfoil_contours.png\" alt=\"XFoil\">\n        </td> \n          <td width=\"33%\" valign=\"top\">\n                <p align=\"center\">\n                    CAD tools via STEP export (SolidWorks, Fusion 360, etc.)\n                </p>\n\t\t\t\t<p align=\"center\">\n\t\t\t\t(STL, OBJ, etc. supported too)\n\t\t\t\t</p>\n                <img src=\"https://github.com/peterdsharpe/solar-seaplane-preliminary-sizing/raw/main/CAD/renders/raytrace-lowres.jpg\" alt=\"CAD\">\n            </td>\n          <td width=\"33%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\tUser-provided models + code (for custom aerodynamics, structures, propulsion, or anything else - e.g., for optimizing flight through a probabilistic wind field, shown below) \n\t\t\t</p>\n\t\t\t<img src=\"./media/images/wind_speeds_model.png\" alt=\"Wind speed\">\n\t\t</td>\n\t</tr>\n</table>\n\nOr, throw all the airplane-design-specific code out entirely, and use AeroSandbox purely as an optimization solver or as a solver for nonlinear systems of equations (or ODEs, or PDEs):\n\n<table>\n\t<tr>\n\t\t<td width=\"50%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/blob/develop/tutorial/01%20-%20Optimization%20and%20Math/01%20-%202D%20Rosenbrock.ipynb\">Optimize the 2D Rosenbrock function</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/optimization.png\" alt=\"Optimization\">\n\t\t</td>\n\t\t<td width=\"50%\" valign=\"top\">\n\t\t\t<p align=\"center\">\n\t\t\t\t<a href=\"https://github.com/peterdsharpe/AeroSandbox/tree/develop/tutorial/03%20-%20Trajectory%20Optimization%20and%20Optimal%20Control/01%20-%20Solving%20ODEs%20with%20AeroSandbox\">Specify the Falkner Skan ODE (nonlinear, 3rd-order BVP) and let AeroSandbox automatically take care of the discretization, solution, and even inverse solving.</a>\n\t\t\t</p>\n\t\t\t<img src=\"./media/images/falkner-skan.png\" alt=\"FS ODE\">\n\t\t</td>\n</tr>\n</table>\n\nAnd much, much more. Best of all, combine these tools arbitrarily without any loss in optimization speed and without any tedious derivative math, all thanks to AeroSandbox's end-to-end automatic-differentiability.\n\n## Getting Started\n\n### Installation\n\nIn short:\n\n* `pip install aerosandbox[full]` for a complete install.\n\n* `pip install aerosandbox` for a lightweight (headless) installation with minimal dependencies. All optimization, numerics, and physics models are included, but optional visualization dependencies are skipped.\n\nFor more installation details (e.g., if you're new to Python), [see here](./INSTALLATION.md).\n\n### Tutorials, Examples, and Documentation\n\nTo get started, [check out the tutorials folder here](./tutorial/)! All tutorials are viewable in-browser, or you can open them as Jupyter notebooks by cloning this repository.\n\nFor a more detailed and theory-heavy introduction to AeroSandbox, [please see this thesis](./tutorial/sharpe-pds-sm-AeroAstro-2021-thesis.pdf).\n\nFor a yet-more-detailed developer-level description of AeroSandbox modules, [please see the developer README](aerosandbox/README.md).\n\nFor fully-detailed API documentation, see [the documentation website](https://aerosandbox.readthedocs.io/en/master/).\n\nYou can print documentation and examples for any AeroSandbox object by using the built-in `help()` function (e.g., `help(asb.Airplane)`). AeroSandbox code is also documented *extensively* in the source and contains hundreds of unit test examples, so examining the source code can also be useful.\n\n### Usage Details\n\n#### Units\n\nOne final point to note: **all inputs and outputs to AeroSandbox are expressed in base SI units, or derived units thereof** (e.g., m, kg, sec, N, m/s, J, Pa). Since this unit system is [coherent](https://en.wikipedia.org/wiki/Coherence_(units_of_measurement)), an [enormous number of quantities](https://en.wikipedia.org/wiki/SI_derived_unit) can be converted without any scaling factors. This improves readability and reduces the likelihood of errors.\n\nThere are only two exceptions to this SI-everywhere rule:\n1. If alternate units are noted in a variable name's suffix. For example:\n\n   * `battery_capacity` \u2192 Joules\n   * `battery_capacity_watt_hours` \u2192 Watt-hours\n   * `aircraft_endurance` \u2192 Seconds\n   * `aircraft_endurance_hours` \u2192 Hours\n\n2. Angle of attack (`alpha`, \u03b1) and sideslip angle (`beta`, \u03b2) are given in degrees due to long-standing aerospace convention. All other angles and angular rates use radians. \n \nAlso, in case of any confusion on the units of a function's inputs and outputs, units are listed on all function docstrings.\n\nIf you wish to use other units, consider using [`aerosandbox.tools.units`](./aerosandbox/tools/units.py) to convert easily.\n\n## Project Details\n\n### Contributing\n\nPlease feel free to join the development of AeroSandbox - contributions are always so welcome! If you have a change you'd like to make, the easiest way to do that is by submitting a pull request.\n\nThe text file [`CONTRIBUTING.md`](./CONTRIBUTING.md) has more details for developers and power users.\n\nIf you've already made several additions and would like to be involved in a more long-term capacity, please message me!\nContact information can be found next to my name near the top of this README.\n\n### Donating\n\nIf you like this software, please consider donating to support development [via PayPal](https://paypal.me/peterdsharpe)\nor [GitHub Sponsors](https://github.com/sponsors/peterdsharpe/)! Proceeds will go towards more coffee for the grad students.\n\n### Bugs\n\nPlease, please report all bugs by [creating a new issue](https://github.com/peterdsharpe/AeroSandbox/issues)!\n\n### Versioning\n\nAeroSandbox loosely uses [semantic versioning](https://semver.org/), which should give you an idea of whether or not you can probably expect backward-compatibility and/or new features from any given update.\n\nFor more details, see the [changelog](./CHANGELOG.md).\n\n### Citation & Commercial Use\n\nIf you find AeroSandbox useful in a research publication, please cite it using the following BibTeX snippet:\n\n```bibtex\n@mastersthesis{aerosandbox,\n    title = {AeroSandbox: A Differentiable Framework for Aircraft Design Optimization},\n    author = {Sharpe, Peter D.},\n    school = {Massachusetts Institute of Technology},\n    year = {2021}\n}\n```\n\nCommercial users: I'm more than happy to discuss consulting work for active AeroSandbox support if this package proves helpful - use the email address in the header of this README to get in touch.\n\n#### License\n\n[MIT License applies, full terms here](LICENSE.txt). In short: use AeroSandbox for anything you want (commercial or non-commercial). AeroSandbox is released in hope that it will be useful but without any warranty of merchantability (either express or implied). \n\nIf you use AeroSandbox, attribution is appreciated.\n\n## Stargazers over time\n\n[![Stargazers over time](https://starchart.cc/peterdsharpe/AeroSandbox.svg)](https://starchart.cc/peterdsharpe/AeroSandbox) \n",
    "bugtrack_url": null,
    "license": null,
    "summary": "AeroSandbox is a Python package that helps you design and optimize aircraft and other engineered systems.",
    "version": "4.2.4",
    "project_urls": {
        "Bug Reports": "https://github.com/peterdsharpe/AeroSandbox/issues",
        "Homepage": "https://peterdsharpe.github.io/AeroSandbox/",
        "Source": "https://github.com/peterdsharpe/AeroSandbox"
    },
    "split_keywords": [
        "aerodynamics",
        "airplane",
        "cfd",
        "mdo",
        "mdao",
        "aircraft",
        "design",
        "aerospace",
        "optimization",
        "automatic",
        "differentiation",
        "structures",
        "propulsion"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6cb5e0ed966b3e4fb93f3a95791e025ea19bcc7024f4660671222af38e36019e",
                "md5": "6b22b2d44d6519d3ba63133300ae3487",
                "sha256": "441a060161da4a0812ea533f41a97e726bc060350b6cbc7d48743ec5c621af5f"
            },
            "downloads": -1,
            "filename": "AeroSandbox-4.2.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6b22b2d44d6519d3ba63133300ae3487",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 6907235,
            "upload_time": "2024-04-25T15:17:14",
            "upload_time_iso_8601": "2024-04-25T15:17:14.801460Z",
            "url": "https://files.pythonhosted.org/packages/6c/b5/e0ed966b3e4fb93f3a95791e025ea19bcc7024f4660671222af38e36019e/AeroSandbox-4.2.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "094685399e8f330240fc25d1f77b65885ea908295c11a2600fd659076392985b",
                "md5": "df6dbf242d780c27b2e68d686881ebed",
                "sha256": "98036b9f417a4b48c36ce1d546a36f78e3202052709b7a92de60f7bc2eb8c51b"
            },
            "downloads": -1,
            "filename": "aerosandbox-4.2.4.tar.gz",
            "has_sig": false,
            "md5_digest": "df6dbf242d780c27b2e68d686881ebed",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 6162116,
            "upload_time": "2024-04-25T15:17:18",
            "upload_time_iso_8601": "2024-04-25T15:17:18.442790Z",
            "url": "https://files.pythonhosted.org/packages/09/46/85399e8f330240fc25d1f77b65885ea908295c11a2600fd659076392985b/aerosandbox-4.2.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-25 15:17:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "peterdsharpe",
    "github_project": "AeroSandbox",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    "~=",
                    "1.26.4"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "~=",
                    "1.12.0"
                ]
            ]
        },
        {
            "name": "casadi",
            "specs": [
                [
                    "~=",
                    "3.6.4"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "~=",
                    "2.0.3"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    "~=",
                    "3.8.3"
                ]
            ]
        },
        {
            "name": "seaborn",
            "specs": [
                [
                    "~=",
                    "0.13.2"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "~=",
                    "4.66.2"
                ]
            ]
        },
        {
            "name": "sortedcontainers",
            "specs": [
                [
                    "~=",
                    "2.4.0"
                ]
            ]
        },
        {
            "name": "dill",
            "specs": [
                [
                    "~=",
                    "0.3.8"
                ]
            ]
        },
        {
            "name": "neuralfoil",
            "specs": [
                [
                    "~=",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "plotly",
            "specs": [
                [
                    "~=",
                    "5.19.0"
                ]
            ]
        },
        {
            "name": "pyvista",
            "specs": [
                [
                    "~=",
                    "0.43.3"
                ]
            ]
        },
        {
            "name": "ipyvtklink",
            "specs": [
                [
                    "~=",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "trimesh",
            "specs": [
                [
                    "~=",
                    "3.22.4"
                ]
            ]
        },
        {
            "name": "sympy",
            "specs": [
                [
                    "~=",
                    "1.12"
                ]
            ]
        },
        {
            "name": "cadquery",
            "specs": [
                [
                    "~=",
                    "2.3.1"
                ]
            ]
        },
        {
            "name": "shapely",
            "specs": [
                [
                    "~=",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "~=",
                    "8.0.2"
                ]
            ]
        }
    ],
    "lcname": "aerosandbox"
}
        
Elapsed time: 0.26958s