# \[ANN\] SymbolicAWEModels.jl — a compiler for mechanical systems, built for Airborne Wind Energy

**URL:** <https://discourse.julialang.org/t/ann-symbolicawemodels-jl-a-compiler-for-mechanical-systems-built-for-airborne-wind-energy/137473>\
**Category:** Package Announcements\
**Tags:** package, physics, modelingtoolkit, ordinarydiffeq, simulations\
**Created:** [June 6, 2026, 2:24pm UTC](https://discourse.julialang.org/t/ann-symbolicawemodels-jl-a-compiler-for-mechanical-systems-built-for-airborne-wind-energy/137473 "2026-06-06T14:24:12Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bart\_van\_de\_Lint](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bart_van_de_lint/32/212161_2.png) [@Bart\_van\_de\_Lint](https://discourse.julialang.org/u/Bart_van_de_Lint)\
**Post date:** [June 6, 2026, 2:24pm UTC](https://discourse.julialang.org/t/ann-symbolicawemodels-jl-a-compiler-for-mechanical-systems-built-for-airborne-wind-energy/137473/1 "2026-06-06T14:24:13Z")

</div>

Hi all,

I’m happy to announce **[SymbolicAWEModels.jl](https://github.com/OpenSourceAWE/SymbolicAWEModels.jl)** (registered, currently v0.11.1).

 ![coupledmodelreplay](https://global.discourse-cdn.com/julialang/original/3X/0/d/0ddbf0a90c040ca6b214e20d7da594e7739633bb.png)  
It’s best thought of as a **compiler for flexible mechanical systems**. You describe a structure — point masses, spring-damper segments, tethers, winches, pulleys, and wings — in either Julia code or a YAML file, and it compiles that description into an efficient `ODEProblem` via [ModelingToolkit.jl](https://github.com/SciML/ModelingToolkit.jl). The motivating application is **Airborne Wind Energy** (deformable kites that generate power), but the building blocks are general.

```julia-auto
 Define Components Assemble Compile Simulate
┌──────────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌────────────┐
│ Point, Segment, │───▶│ System │───▶│ SymbolicAWE │───▶│ init!() │
│ Wing, Winch, ... │ │ Structure │ │ Model │ │ next_step! │
│ Julia or YAML │ │ (references) │ │ (eqs→ODEProblem)│ │ sim!() │
└──────────────────┘ └──────────────┘ └─────────────────┘ └────────────┘

```

**What you get**

- **Building blocks** : static/dynamic/quasi-static point masses, spring-damper segments (with drag), tethers, torque-controlled winches with Coulomb + viscous friction, equal-tension pulleys, and both particle-system and rigid-body wings.
- **Aerodynamics** : wings couple to the [Vortex Step Method](https://github.com/Albatross-Kite-Transport/VortexStepMethod.jl) — either linearised with rigid body dynamics (cheap) or full per-step nonlinear solve with particle system dynamics.
- **Symbolic → fast** : Because of MTK codegen and structural simplify the generated RHS function is very efficient. The compiled ODEProblem is cached to disk so subsequent runs start in seconds.
- **Built-in visualisation** : a Makie extension — `using GLMakie` for 2D/3D plots and interactive replay.
- **Easy initialisation** : built-in **Transform** system to easily orient your system and re-orient between runs.

**Minimal example — a tether with a winch**

```julia
using SymbolicAWEModels
using SymbolicAWEModels: Point
using KiteUtils: init!, next_step!
using GLMakie

SymbolicAWEModels.copy_data() # writes bundled data/ into your project dir
set_data_path("data/base") # point KiteUtils at it

set = Settings("system.yaml")
set.l_tether = 50.0
set.d_tether = 4.0 # 4 mm

points = [
    Point(:ground, [0, 0, 0], STATIC; transform=:tf),
    Point(:tip, [0, 0, set.l_tether], DYNAMIC; extra_mass=1.0, transform=:tf),
]

# Route 2: tether auto-generates its intermediate points + segments
tethers = [Tether(:main; start_point=:ground, end_point=:tip, n_segments=20)]
winches = [Winch(:winch, set, [:main]; winch_point=:ground)]
transforms = [Transform(:tf, deg2rad(-80), 0, 0;
                        base_pos=[0, 0, set.l_tether],
                        base_point=:ground, rot_point=:tip)]

sys = SystemStructure("tether", set; points, tethers, winches, transforms)
plot(sys)
sam = SymbolicAWEModel(set, sys)
init!(sam; remake=false)
for _ in 1:500
    next_step!(sam; set_values=[15.0]) # positive torque reels the tether out (lengthens) [Nm]
    plot!(sam.sys_struct)
    sleep(0.05)
end

```

The same model can be expressed in YAML. Components support symbolic indexing (`sys.points[:kcu]`, `sys.segments[:bridle_1]`), and because the symbolic getters read from live structs, you can mutate parameters between runs without recompiling.

**Correctness**

Each component is tested in isolation against analytical solutions — terminal velocity, angular-momentum conservation, spring-damper constitutive laws, Coulomb/viscous friction, etc. — so the underlying dynamics are verified physically, not just numerically.

**Ready-made kite models**

SymbolicAWEModels provides the building blocks; complete kite models live in dedicated packages:

- [V3Kite.jl](https://github.com/OpenSourceAWE/V3Kite.jl) — TU Delft V3 leading-edge-inflatable kite. Validated against real flight data.
- [RamAirKite.jl](https://github.com/OpenSourceAWE/RamAirKite.jl) — ram-air kite with bridle system and deformable wing groups

It’s part of the [Open Source AWE](https://github.com/OpenSourceAWE) organisation, which contains many useful packages for **Airborne Wind Energy** simulation and control.

**Links**

- Docs: [Home · SymbolicAWEModels.jl](https://OpenSourceAWE.github.io/SymbolicAWEModels.jl/stable)
- Repo: [GitHub - OpenSourceAWE/SymbolicAWEModels.jl: Symbolic wing, tether and winch models for the simulation of Airborne Wind Energy systems. · GitHub](https://github.com/OpenSourceAWE/SymbolicAWEModels.jl)
- License: LGPL-3.0 · DOI: [10.5281/zenodo.19092013](https://doi.org/10.5281/zenodo.19092013)

Feedback, issues, and contributions very welcome!

— Bart van de Lint (with @ufechner7 and Jelle Poland)

---

<div class="post-metadata">

**Author:** ![franckgaga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/franckgaga/32/218241_2.png) [@franckgaga](https://discourse.julialang.org/u/franckgaga)\
**Post date:** [June 6, 2026, 9:41pm UTC](https://discourse.julialang.org/t/ann-symbolicawemodels-jl-a-compiler-for-mechanical-systems-built-for-airborne-wind-energy/137473/2 "2026-06-06T21:41:03Z")

</div>

This is awesome! 😎

It seems like a very complete and experimentally validated sandbox for mechanical system modeling and simulation. Will certainly give it a try in my next modeling projects!

---

<div class="post-metadata">

**Author:** ![Bart\_van\_de\_Lint](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bart_van_de_lint/32/212161_2.png) [@Bart\_van\_de\_Lint](https://discourse.julialang.org/u/Bart_van_de_Lint)\
**Post date:** [June 7, 2026, 8:17am UTC](https://discourse.julialang.org/t/ann-symbolicawemodels-jl-a-compiler-for-mechanical-systems-built-for-airborne-wind-energy/137473/3 "2026-06-07T08:17:42Z")

</div>

Thanks! Yes, a lot of effort has been put into modularity, validation, ease of use and performance. Some of the features that have come out of these pillars:

- A user can specify their system with just a few lines of code, or if they don’t want to touch code they can use a yaml file.
- All RHS equations are tested to have zero allocations.
- A lot of useful warning / error messages when you specify something wrong in your system definition.
- Every component has it’s own physics-based tests.

Upcoming features:

- Allow for custom winch models
- Improved aerodynamic coupling
- Some kind of beam model (that works well with the 3DOF particles)
