Skip to content

Commit 7150677

Browse files
committed
comparing inits
2 parents db4cfa9 + 972719b commit 7150677

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

examples/ansys/forum.md

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
# Grid fin optimization with ANSYS SpaceClaim and PyANSYS
1+
# Grid Fin optimization with ANSYS SpaceClaim and PyANSYS
22

3-
We want to perform a parameter optimization on a SpaceX-style grid fin geometry to maximize stiffness while maintaining a strict mass limit. This ensures the fin remains rigid during re-entry Max-Q (maximum dynamic pressure) for robust aerodynamic control. For this optimization the starting and ending positions of all the bar segments can be control by setting its angular positions. Hence for 8 segments this results in 16 free parameters. Below there are two images of two selected initial conditions:
3+
Eagle-eyed viewers of a SpaceX Super Heavy rocket launch may have noticed that during booster re-entry the speed at which the booster passes the ascent Maximum Dynamic Pressure altitude (Max-Q) is actually higher than ascent. This means that the always-deployed grid fins are experiencing their maximum loading during this critical stage of aerodynamic control guiding the booster back to the pad.
4+
5+
| Grid Fin Example | SpaceX Super Heavy Rocket |
6+
| ------------- | ------------- |
7+
| ![grid](imgs/grid_fin_example.png) | ![star](imgs/superheavy.png) |
8+
9+
We are going to use software from the Ansys product collection along with Tesseracts to perform a parameter optimization on a SpaceX-style grid fin geometry. The goal is to maximize stiffness while maintaining a strict mass limit of 8 grid bars. This ensures the grid fin has a near constant freestream surface and remains rigid during re-entry Max-Q, keeping constant lift and drag characteristics, enabling robust and authoritative aerodynamic control. For this optimization the starting and ending positions of all the bar segments can be control by setting its angular positions. Hence for 8 segments this results in 16 free parameters. Below there are two images of two selected initial conditions:
410

511
| Grid initial conditions | Random initial conditions |
612
| ------------- | ------------- |
713
| ![grid](imgs/grid_surface.png) | ![star](imgs/rnd_surface.png) |
814

9-
For the boundary conditions, we fix the nuckles as they would be bolted to the rocket by setting the corresponding mesh vertices to Dirichlet. Additionally we add an out of plane load at the very end of the fin geometry. The boundary conditions are illustrated here:
15+
For the Boundary Conditions (BC) we fix the knuckles, as they would be attached to the rocket, by setting the corresponding mesh vertices to Dirichlet. Additionally we add an out of plane load at the very end of the fin geometry. Placing the load here allows us to approximate the aerodynamic forces experience by the whole grid fin whilst de-coupling the load from the bars movement. The boundary conditions are illustrated here:
1016

1117
![BCs](imgs/boundary_conditions.png)
1218

@@ -15,7 +21,7 @@ To simulate the grid fin under Max-Q loads, we employ a linear elastic solver, a
1521

1622
## Workflow
1723

18-
To demonstrate a realistic engineering workflow, we perform a gradient based end to optimization that plugs into ANSYS SpaceClaim as a design software and uses PyANSYS to setup a differentiable finite element simulation. We containerize the individual components into Tesseracts and compose them together using Tesseract-JAX, a library that allows us to use the automatic differentiation (AD) capabilites of JAX in conjunction with Tesseracts. An illustration of the complete workflow is given below:
24+
To demonstrate a realistic engineering workflow, we perform a gradient based end to optimization that plugs into ANSYS SpaceClaim as a design software and uses PyANSYS to setup a differentiable finite element simulation. We containerize the individual components into Tesseracts and compose them together using Tesseract-JAX, a library that allows us to use the automatic differentiation (AD) capabilities of JAX in conjunction with Tesseracts. An illustration of the complete workflow is given below:
1925

2026
![Workflow](imgs/workflow_1.png)
2127

@@ -27,9 +33,9 @@ The workflow involves three Tesseracts:
2733

2834
- **SDF & Finite Difference Tesseract** takes the same set of geometry parameters, passes them to the SpaceClaim Tesseract (could be any other Tesseract that returns a polygon mesh) and computes the signed distance field for the geometry on a regular grid. Additionally, the Tesseract is differentiable and computes Jacobian of the SDF field with respect to the design space parameters using finite differences. It has some additional features, such as precomputing the Jacobian while the rest of the pipeline is busy with computing primals and vector Jacobian products (vjp) of later steps. In theory, we can plug any Tesseract that conforms to the in and output schema of the SpaceClaim Tesseract.
2935

30-
- **PyMapDL Tesseract** takes a hex mesh, the boundary descriptions and computes the strain energy for all cells as well as the total compliance. It uses the PyMapDL library to setup a fully differentiable FEM solver for linear elasticity. More about this here: ...
36+
- **PyMAPDL Tesseract** takes a hex mesh, the boundary descriptions and computes the strain energy for all cells as well as the total compliance. It uses the PyMAPDL library to setup a fully differentiable FEM solver for linear elasticity. More about this here: ...
3137

32-
Aditionally there is python code that is responsible for setting the boundary condtions, constructing the hex mesh and deriving the density from an SDF. The functions responsible for setting the boundary conditions and mesh construction do not need to be differentiable. This is because we are differentiating with respect to the quantities that are carried on mesh cells. We are not differentating with respect to the mesh structure or the boundary conditions. The functions that computes rho from SDF is similar to a sigmoid function and is made differentiable with JAXs AD.
38+
Aditionally there is python code that is responsible for setting the boundary conditions, constructing the hex mesh and deriving the density from an SDF. The functions responsible for setting the boundary conditions and mesh construction do not need to be differentiable. This is because we are differentiating with respect to the quantities that are carried on mesh cells. We are not differentiating with respect to the mesh structure or the boundary conditions. The functions that computes rho from SDF is similar to a sigmoid function and is made differentiable with JAXs AD.
3339

3440

3541
## Optimization
@@ -39,3 +45,8 @@ As a very first experiment we compare the compliance of the two initial conditio
3945
![Workflow](imgs/sim_comparision.png)
4046

4147
If we apply
48+
...
49+
50+
## Results
51+
52+
The optimization results show how a non-uniform grid pattern can provide a stiffer grid fin for the same mass. This stiffness is desirable as it will reduce deformation, keeping the lift and drag coefficients of the grid fin close to those assumed by the aerodynamic control laws.
75.2 KB
Loading

examples/ansys/imgs/superheavy.png

109 KB
Loading

0 commit comments

Comments
 (0)