Skip to content

Commit

Permalink
update documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
ACea15 committed Jan 3, 2025
1 parent 3cf3104 commit dd16ece
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 23 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# Finite Element models 4 Nonlinear Intrinsic Aeroelastics in JAX [FENIAX]

FENIAX is an aeroelastic toolbox written and parallelized in Python, which acts as a post-processor of commercial software such as MSC Nastran.
Arbitrary FE models built for linear aeroelastic analysis are enhanced with geometric nonlinear effects, flight dynamics and linearized state-space solutions about nonlinear equilibrium.
FENIAX is an aeroelastic toolbox written in Python using JAX. It acts as a post-processor of commercial software such as MSC Nastran.

Some of the key features of the software are:
- Arbitrary FE models built for linear aeroelastic analysis are enhanced with geometric nonlinear effects, flight dynamics and linearized state-space solutions about nonlinear equilibrium.
- Leveraging on the numerical library JAX and optimised algorithms, a high performance is achieved that leads to simulation times comparable to the linear counterparts on conventional platforms.
- The software runs on modern hardware architectures such as GPUs in a addition to standard CPUs.
- Algorithm differentiation (AD) of the aeroelastic response is available via JAX primitives.
- Concurrent simulations for multiple load cases are being developed.
- Concurrent simulations for multiple load cases have been developed.

## Installation

Expand Down
35 changes: 29 additions & 6 deletions docs/documentation/getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,48 @@ pip install .
pip install -e .[all]
```

- see setup.py file for the options available. Python 3.9+ is required but 3.11+ is recommended.
- see pyproject.toml file for the options available. Python 3.10+ is required.

- To install with GPU support install jax first:
```
pip install -U "jax[cuda12]"
pip install -e ".[all]"
```


### Python environment
Although it is not necessary, it is recommended that the software is installed in its own environment. Options that have been tested out follow.

- _Conda_:

Although it is not necessary, If conda is being used as package manager, one can make a specific environment as,

```
conda create -n feniax python=3.11
conda activate fem4inas
conda activate feniax
```

- If pytest has been installed, check everything is OK by running the tests:
If pytest has been installed, check everything is OK by running the tests:

```
pytest tests
pytest
```

- Thus a typical installation would comprise of these 4 steps:
```
conda create -n feniax.python=3.11
conda activate fem4inas
conda activate feniax
pip install -e .[all]
pytest tests
pytest
```

- _pyenv_: Navigate to the root directory and run the following:

```
pyenv install 3.11.10
pyenv virtualenv 3.11.10 feniax
pyenv local feniax
pip install -e .[all]
pytest
```
By setting pyenv local to feniax, every time one moves to feniax directory the environment is automatically activated
31 changes: 19 additions & 12 deletions docs/documentation/index.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# Finite Element models 4 Nonlinear Intrinsic Aeroelastics in JAX
# Finite Element models 4 Nonlinear Intrinsic Aeroelastics in JAX [FENIAX]

FENIAX is an aeroelastic toolbox written in Python using JAX. It acts as a post-processor of commercial software such as MSC Nastran.

Some of the key features of the software are:
- Arbitrary FE models built for linear aeroelastic analysis are enhanced with geometric nonlinear effects, flight dynamics and linearized state-space solutions about nonlinear equilibrium.
- Nonlinear solutions run very fast, at or close to real time.
- Algorithmic differentiation (AD) of the response is available via JAX. The code is carefully crafted to perform all computations on tensor data structures and via algorithms available for AD, much like Machine Learning models are built.
- The code can be run on modern hardware architectures such as GPUs.
- Leveraging on the numerical library JAX and optimised algorithms, a high performance is achieved that leads to simulation times comparable to the linear counterparts on conventional platforms.
- The software runs on modern hardware architectures such as GPUs in a addition to standard CPUs.
- Algorithm differentiation (AD) of the aeroelastic response is available via JAX primitives.
- Concurrent simulations for multiple load cases have been developed.

!!! warning
The software is in beta, and while it has been thoroughly tested, new features keep being added and it is likely features for your analysis might be missing. Get in touch if you encounter problems.
Expand Down Expand Up @@ -57,21 +59,26 @@ This example first appeared in the work of Juan Carlos Simo (see [Bio](https://m
#### 3D dynamics
![Free flying structure 3D](./media/SimoFFB3D_optimized.gif)

### Industrial Aircraft model
### Concurrent aeroelastic simulations on ultra-high aspect ratio aircraft
!!! success
- Linear response validated with MSC Nastran linear aeroelastic solution (sol 146)
- Nonlinear response in our solvers takes similar times to the linear Nastran solution!!
- Nonlinear aeroelastic response in our solvers takes similar times to the linear Nastran solution!!
- Concurrent simulations for various loading settings

<!-- #### Gust clamped model -->
#### Wing-tip static loading

<!-- [Notebook](./examples/industrialAC/main.md) -->
- Extremely large deformations
- Validation of concurrent solution

![In-plane](./media/BugDiscrete3_L0.gif)
![Out-of-plane](./media/BugDiscrete3_L2.gif)
![Torsion](./media/BugDiscrete3_L4.gif)

<!-- ![XRF1-gustclamped](./media/xrf1_gust_optimized.gif) -->
#### Dynamic loads at large scale: gust envelopes

- 512 different gust cases run on A100 GPU NVIDIA in 14 seconds!

![Gust response](./media/BugGust1.gif)

<!-- #### Gust trimmed flight -->
<!-- ![XRF1-Trim+gust](./media/xrf1_trimgust_optimized.gif) -->

## Theoretical background

Expand Down
Binary file added docs/media/BugDiscrete3_L0.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/media/BugDiscrete3_L2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/media/BugDiscrete3_L4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/media/BugGust1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions docs/schemas/draft2.org
Original file line number Diff line number Diff line change
Expand Up @@ -409,14 +409,15 @@ TODO: make automatic label as the first
| 10G75 | Manoeuvre under qalpha+controls+Gravity | [1,0,'G',0,1,2] | N |
| 20g1 | Clamped Structural dynamics, free vibrations | [2,0,'g'] | Y |
| 20G2 | Free Structural dynamic with gravity forces | [2,0,'G',1] | Y |
| 20g2 | Free Structural dynamic | [2,0,'g',1] | Y |
| 20g11 | Structural dynamic follower point forces | [2,0,'g',0,0,0,0,1] | Y |
| 20g121 | Structural dynamic dead point forces | [2,0,'g',0,0,0,0,2] | Y |
| 20g22 | Free Structural dynamic follower point forces | [2,0,'g',1,0,0,0,1] | Y |
| 20g242 | Free Structural dynamic dead point forces | [2,0,'g',1,0,0,0,2] | Y |
| 11G6 | Static trimmed State (elevator-qalpha, | [1,1,'G',1,1] | Y |
| | no gravity updating) | | |
| | no gravity updating) | | |
| 12G2 | Static trimmed State (elevator-qalpha, | [1,2,'G',1] | N |
| | gravity updating) | | |
| | gravity updating) | | |
| 21G150 | Dynamic trimmed State | [2,1,'G',1,1,2] | N |
| 20g21 | Gust response | [2,0,'g',0,1,0,1] | Y |
| 20g273 | Gust response, q0 obtained via integrator q1 | [2,0,'g',0,1,0,1,0,1] | Y |
Expand Down

0 comments on commit dd16ece

Please sign in to comment.