# Recommendations for Julia Packages for FEA to be used in shape and topology optimization of 3D Shell Structures

**URL:** <https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270>\
**Category:** Modelling & Simulations\
**Tags:** question\
**Created:** [December 30, 2024, 6:56am UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270 "2024-12-30T06:56:18Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Edan\_Lazerson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/edan_lazerson/32/214433_2.png) [@Edan\_Lazerson](https://discourse.julialang.org/u/Edan_Lazerson)\
**Post date:** [December 30, 2024, 6:56am UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/1 "2024-12-30T06:56:19Z")

</div>

Hello everyone,

I’m working on my master’s project, which involves shape and topology optimization for a 3D shell structure. Initially, I plan to work within the linear static regime. Instead of writing my own finite element (FE) code, I’d like to leverage an existing Julia package that fits my requirements.

Key features I need:

1. The ability to easily modify element material properties and thickness.
2. The capability to update node coordinates between optimization iterations.

I’ve come across several promising packages, including **Ferrite.jl** , **Gridap.jl** , and **FinEtools.jl** , but I’m unsure which one would suit my needs best. Could anyone provide insights or recommendations based on their experience?

Thank you in advance for your help!

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [December 30, 2024, 2:16pm UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/2 "2024-12-30T14:16:35Z")

</div>

There are more specific packages for topology optimization including

> **[GitHub - JuliaTopOpt/TopOpt.jl: A package for binary and continuous, single and...](https://github.com/JuliaTopOpt/TopOpt.jl)**
>
> A package for binary and continuous, single and multi-material, truss and continuum, 2D and 3D topology optimization on unstructured meshes using automatic differentiation in Julia.

Try to search on JuliaHub for relevant keywords. If you after native mesh types to develop a new package for your master’s project, consider

> **[GitHub - JuliaGeometry/Meshes.jl: Computational geometry in Julia](https://github.com/JuliaGeometry/Meshes.jl)**
>
> Computational geometry in Julia

We are actively working on it and can help you with answering questions.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [December 30, 2024, 3:29pm UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/3 "2024-12-30T15:29:58Z")

</div>

I think you could implement your own shell element in either Gridap or Ferrite. But in order to get good performance and robustness (for instance to eliminate locking, or to be able to handle branching or folds), substantial amount of work would be required.

FinEtoolsFlexStructures.jl provides a robust triangular shell FE.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [December 30, 2024, 3:58pm UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/4 "2024-12-30T15:58:10Z")

</div>

Btw, if you wish to do sizing optimization (thickness), handling offsets of reference surface from the midsurface will be crucial.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [December 31, 2024, 9:32am UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/5 "2024-12-31T09:32:14Z")

</div>

> [@PetrKryslUCSD](#):
>
> branching or folds)

You mean that there are bifurcations wrt to some parameters?

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [December 31, 2024, 2:25pm UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/6 "2024-12-31T14:25:01Z")

</div>

Oh no, I literally mean folds or branching of the surface of the shell.

---

<div class="post-metadata">

**Author:** ![Edan\_Lazerson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/edan_lazerson/32/214433_2.png) [@Edan\_Lazerson](https://discourse.julialang.org/u/Edan_Lazerson)\
**Post date:** [December 31, 2024, 6:57pm UTC](https://discourse.julialang.org/t/recommendations-for-julia-packages-for-fea-to-be-used-in-shape-and-topology-optimization-of-3d-shell-structures/124270/7 "2024-12-31T18:57:55Z")

</div>

Thanks, I’ll definitely look into these and see which one works best for me.
