diff --git a/README.md b/README.md index a52ae79..fc09062 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/documentation/getting_started.md b/docs/documentation/getting_started.md index dbddaa3..250ab8b 100644 --- a/docs/documentation/getting_started.md +++ b/docs/documentation/getting_started.md @@ -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 diff --git a/docs/documentation/index.md b/docs/documentation/index.md index 40330bd..9f8f9de 100644 --- a/docs/documentation/index.md +++ b/docs/documentation/index.md @@ -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. @@ -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 - +#### Wing-tip static loading - +- 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) - +#### Dynamic loads at large scale: gust envelopes +- 512 different gust cases run on A100 GPU NVIDIA in 14 seconds! + +![Gust response](./media/BugGust1.gif) - - ## Theoretical background diff --git a/docs/media/BugDiscrete3_L0.gif b/docs/media/BugDiscrete3_L0.gif new file mode 100644 index 0000000..03b30b3 Binary files /dev/null and b/docs/media/BugDiscrete3_L0.gif differ diff --git a/docs/media/BugDiscrete3_L2.gif b/docs/media/BugDiscrete3_L2.gif new file mode 100644 index 0000000..82b5bf2 Binary files /dev/null and b/docs/media/BugDiscrete3_L2.gif differ diff --git a/docs/media/BugDiscrete3_L4.gif b/docs/media/BugDiscrete3_L4.gif new file mode 100644 index 0000000..14a06f0 Binary files /dev/null and b/docs/media/BugDiscrete3_L4.gif differ diff --git a/docs/media/BugGust1.gif b/docs/media/BugGust1.gif new file mode 100644 index 0000000..8417861 Binary files /dev/null and b/docs/media/BugGust1.gif differ diff --git a/docs/schemas/draft2.org b/docs/schemas/draft2.org index 72fe71e..afe1e3d 100644 --- a/docs/schemas/draft2.org +++ b/docs/schemas/draft2.org @@ -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 |