LEP Studio and it’s Playground

Further work on Lep Studio : work from 21 September to 26 October 2026

A report for the LEparagliding open-source community -  Francois de Villiers  -  26 October 2026

1. Background

LEP Studio is listed under Software on the LEparagliding project page (LEP Studio page); it is based on LEparagliding 3.28). Michael Holm built it. I had a meeting with him on 21 September to request the 0.4.2 update with the solid STEP file for use with CFD, as it is much better as input to structured CFD analysis than trying to use STL. Michael did an excellent job of using high-end AI to build a graphical input and output for the text-based Fortran paragliding program that Pere Casellas developed, and of providing a cloth simulation of a paraglider, using XPBD with internal equation based aerodynamics, to make it fly.  Sadly it seems that he is not interested in developing it further.

I was not really familiar with XPBD, but I knew some work done by Johan Hammes on paragliding https://www.johanhammes.com/earthworks/clothphysics  (video: "XPBD with local vicinity velocity damping")

I wanted to consider the possibility of utilising  Lep Studio for proper engineering design, and decided to simulate only a part of the wing structure first. I had to recompile and then modify the code and concentrated on a single cell with applied external aerodynamic forces from Flow5. I introduced meshing, modified the  mini-ribs, studied the resulting ballooning, added diagnostics and learned XPBD along the way. An interim report on aspects of the single-cell analyses is on the gnuC2 news page.

After seeing what was possible I moved to improving  the complete paraglider modeling  in the Playground with proper aerodynamic input, improved structured meshing with the idea of using it for design purposes.  See next section 2 for improvements made so far.

2. What has been introduced in Lep Studio since version 0.4.2  - 21 Sept 2026

3. Outstanding

4. What is XPBD?

XPBD, extended position-based dynamics, is a way of simulating soft and rigid bodies by working directly on positions. Each step predicts where every node would go under the external forces, then moves the nodes to satisfy constraints (edge length, area, bending, cables, pressure, contact), one constraint at a time, and finally derives the velocities from the position change. It is fast, robust and easy to extend, which is why it is used for real-time cloth and soft bodies.

What was seen in this work (measured): the XPBD end frame of a 10 to 30 s flight is 2.6 to 3.3 mm rms from the static equilibrium of the same model (section 5), which is why the other solvers are used to confirm it; very stiff lines and small elements need many substeps or iterations; with low damping the K calage of the whole wing swung about +-1.5 % with a 3 s period and had not decayed after 4.5 s, and a constraint-damping option was added to the single-cell model on 30 September.

5. Who is using XPBD?

Organisation

Where XPBD appears

Source

NVIDIA (research group of M. Müller, M. Macklin, N. Chentanez)

Authors of the XPBD paper (2016), "Small Steps in Physics Simulation" (2019), "Detailed Rigid Body Simulation with XPBD" (2020) and the 2017 Eurographics survey (course notes list Müller and Macklin at NVIDIA PhysX Research).

publication list, course notes

NVIDIA Isaac Lab

Has an XPBD solver configuration in its Newton physics module.

Isaac Lab source documentation

SideFX (Houdini)

Vellum, its cloth, hair and soft-body framework: "uses an extended Position Based Dynamics approach".

Vellum overview

Epic Games (Unreal Engine)

Chaos Cloth has optional XPBD constraints (flag bUseXPBDConstraints, marked experimental by Epic).

Chaos Cloth API

Blender (open source)

An XPBD solver node for cloth, hair and particles in the simulation nodes.

developer documentation

Michael Holm (SoftWingLab, LEP Studio)

The XPBD soft-body core of the Playground.

section 6

Johan Hammes (paragliding)

XPBD for paraglider simulation, shown with a velocity-damping variant.

video

Xueliang Wen a, Hui Cheng b, Humberto Afonso c, Muk Chen Ong a 

Development of XPBD algorithm for Mooring Lines and Aquaculture Nets: Comparisons with Mass-spring Model and FEM

https://www.sciencedirect.com/science/article/abs/pii/S0029801824010096

5.1 Earlier paraglider and ram-air kite work this builds on

Who

What

Links

Tom Lolies, Bruce Goldsmith Design R&D and ISAE-SUPAERO (with Miguel Charlotte and Nicolas Gourdain)

2019: "Numerical methods for efficient FSI simulations of paragliders": mass-spring cloth on a quad mesh, implicit Euler written as an optimisation problem and solved with L-BFGS, 0.5 to 1.5 million nodes, coupled to a low-fidelity flow solver.
2022: "A fluid-structure interaction methodology to design ram-air parachutes and paragliders", 26th AIAA Aerodynamic Decelerator Systems Technology Conference, Toulouse, 16-19 May 2022, AIAA 2022-2752. Triangular Delingette springs (isotropic, E t = 100,000 N/m), ESDIRK4 time integration with a Newton loop, a 3D unsteady panel method with an integral boundary layer and a separation model, internal pressure taken as the mean Cp over the inlets, line attachments modelled as three springs, wrinkling classified by the Pauletti criterion. Compared with paraglider flight-test observations and ram-air parachute wind-tunnel tests.
This is a paraglider fluid-structure model built on the same ingredients as the Playground (cloth, lines, panel-method loads), solved globally by implicit integration. The 2022 paper does not use XPBD.

PEGASUS 2019 paper, AIAA 2022-2752

Paul Thedens (SkySails Power) and Roland Schmehl (TU Delft)

"An Aero-Structural Model for Ram-Air Kite Simulations", Energies 16(6), 2603, 9 March 2023. A structural finite-element solver with kinetic dynamic relaxation, mem4py, staggered-coupled to the potential-flow code APAME through preCICE; validated against SkySails Power flight data; the potential-flow solver overestimates the glide ratio by roughly 10 to 15 %. mem4py is open source (MIT licence) and is the fourth solver added to the Playground in this work (section 4).

paper, TU Delft copy, mem4py code

5.2 The solvers used for verification: SPG and mem4py

SPG ("Spring") is a research-focused C++ library by Alex Rodriguez (MIT licence, first release October 2024) in which every solver works with every mechanical energy through one interface: github.com/alexrodag/spg. The solvers it implements, with the reference its author gives for each:

SPG solver

Reference

Used here

XPBD

Macklin, Müller, Chentanez 2016

The Playground's own XPBD core is the reference solver; SPG's XPBD is not used for results

Static equilibrium (static Newton)

ETH lecture notes

Yes: converged-shape check of every captured frame

Quasistatic equilibrium

pcs-sim.github.io

Yes: quasi-static Newton

Baraff-Witkin implicit Euler

Baraff and Witkin 1998

Yes

VBD (Vertex Block Descent)

arXiv 2403.06321, author's code

No,not beneficial

Robust Newton backward Euler

author's PDF

No

BDF2

Kim and Eberle, Dynamic Deformables

No

The fourth verification solver is mem4py (section 5.1), a separate membrane finite-element code rather than part of SPG.

6. The tools this work is built on

6.1 LEP Studio 0.4.2

6.2 The Playground, and why it has that name

6.3 ParaCFD - More work by Micheal

Development - 21 Sept - 26 October - AI style

Work during last month

1. The closed STEP input  and ParaCFD (5-9 October)

Single-skin designs are not supported. Eventually got paracfd to get gnuc2 input. Min cell size limited by GPU memory. A possibility if the solving iteratively using normal PC memory. Something to resolve later.

Route to a closed solid for ParaCFD

What happened

Studio STEP of the gnuC2 CFD copy (ParaCFD reads STEP only)

Refused at grid build on 5-6 October: "1 unresolved EB cell ... candidate triangle 125173, CAD face 153". The logs do not name which of the Studio's STEP files it was.

LEP's STL files

A 3.4 mm high sliver triangle and open surfaces. With a zero-thickness tip rib the OpenSCAD STL crosses itself (302 crossing triangles at the tip).

Flow5 panel mesh (38,400 triangles), tip holes capped, written as one flat STEP face per triangle (38,556 faces)

Accepted as one solid. Grid build failed with 83 (whole wing) or 37 (half wing) "unresolved cells" until a one-line local patch; with it the half wing builds with none.

OpenVSP 3.54 "split and stitched" STEP, round tip cap (1 manifold solid, 124 B-spline faces, 7.23 m3)

Passes ParaCFD's strict grid build: unresolved 0, no closure defects.

ParaCFD results

gnuC2 (projected area 22.989 m2, 10 m/s, rho 1.225), finest cell 26.6 mm, one run per case. All numbers are measured unless marked.

At 8 degrees

Lift (N)

Drag (N)

Flow5, viscous (XFoil polars, trip at 2 % chord)

1032.9

66.5 (induced 43.2, profile 23.3)

VSPAERO, total lift, original / fine mesh

947.5 / 960.0

induced about 36 (wake based)

ParaCFD, wall law on (mean)

922.7

69.8 (friction 16.2, pressure 53.2: one instant)

ParaCFD, wall law off (mean)

978.6

52.7 (all pressure)

Element size limit on paracfd due to GPU memory limit

Paracfd with step gnuC2 step input


Paracfd gnuc2 tip vortex

Lift and drag at 8 degrees, the same plain wing in two codes, and the nose of the root section as each code sees it.

2. Aerodynamics of gnuC2 and what was found in the LEP geometry output (1-26 October)

2.1 Reference set-up

2.2 Findings in LEP's output (reported to Pere and Pawel on 5 October)

Finding

Evidence

State

Tip rib position. Rib 31 is 17.44 cm from rib 30 along the arch; the xwimp writes the flat 12.07 cm. The Flow5 and OpenVSP tips end about 55 mm from LEP's.

Fix in a fork of the xwimp export (arch distance). Explicit-geometry Flow5 fork: all 31 ribs match the engine's rib loops to 0.69 mm worst, against 56 mm at the tip and 7.6 mm mean in the old chain; six regression tests pass. The twist pivot differs too (25 % in Flow5 and OpenVSP; 33.33 % in LEP).

measured; fork is local

Washin. The twist is computed inside the loop that reads the ribs, before the last rib's chord exists. For gnuC2 the applied twist is 0.7408 of the intended one on ribs 2 to 30 (rib 30: 4.05 against 5.47 degrees; the last cell steps 1.95 degrees instead of 0.53); only the tip gets the full 6 degrees.

Reproduced from the engine output. Pere's 3.29.1 (12 Oct) leaves cases 1 and 2 unchanged and adds case 3, which we ran: it matches the intended twist to 0.0006 degrees. Studio's translated C++ core has the same loop and no case 3.

measured; not ported to Studio

Decimal commas. Section 8 written as "47,77" is read as 47: calage 47.00 instead of 47.77, K 119.99 cm instead of 121.96.

Studio's input migration now normalises numeric-only records in every section; test added.

fixed locally

disp (Section 2) is not written to the xwimp.

3.29.1 still writes no disp column and the flat rib 31 spacing.

open, asked

Effect on Flow5 at 7 degrees (viscous, 10 m/s, measured): the arch-distance and yaw fixes change CL by +0.6 %; the intended washin changes CL by +2.7 %, CD by +20 counts and Cm by -0.0085, the largest of the five variants tried.

2.3 Mac build kit for Pere's Fortran program

A macOS build of the Fortran LEparagliding 3.29.1 (Apple silicon and Intel) was made without touching the Fortran sources. On GitHub's macOS runners the output is byte-identical to Pere's committed example files and the programs are self-contained. Pere merged pull request 1 (six new files) on 21 October; pull request 2 (the six ready-made Mac programs) was waiting for him when last checked, on 21 October. Not tested by a person on a physical Mac.

3. The whole-wing Playground against LEP Section 35 (9-16 October)

The single-cell model (22 September to 4 October) has one cell between two ribs: orthotropic XPBD membranes (8000, 5000, 1000, 1500 N/m warp, weft, coupling, shear), ribs with holes, rods and patches, the mini-ribs "stitched from the back", lip cords, A/B/C line attachments, and pressure from a two-dimensional Cp. At its review on 28 September it had not converged to a result I would trust: the nose was still settling and the mini-rib and skin seam lengths conflicted at the trailing edge. From 9 October the work moved to the whole-wing Playground, with Flow5 pressure coefficients (30 cells, upper and lower, 40 cosine chord bins, 3 to 15 degrees) as the load source.

3.1 Result

Design calage 47.77 %, flexible wing, auto risers (A 3.4 cm, B 1.8 cm pull), my live check of 14 October (measured):

Quantity

LEP Section 35

Playground

Calage

47.77 %

47.74 %

Angle of attack

8.00 deg

7.82 deg

Airspeed

10.01 m/s

10.12 m/s

Glide ratio

8.46

8.59

Lift

1036 N

1041 N

Wing drag / total drag (Cde = 1)

66.7 / 122.5 N

64.2 / 121.2 N

A / B / C line load shares

40 / 40 / 20 %

56.7 / 34.5 / 8.9 % (not matched)

With the wing, the whole line tree and the carabiners locked as one rigid body, plus LEP's forces, centre of gravity and line-drag point, the Playground reproduces LEP exactly (theta -0.897 against -0.896, alpha 8.00, K and pilot positions within 2 mm). So LEP's statics are consistent with the Playground; what differs is its aerodynamic load and line network (measured, 9 Oct).

3.2 Defects found and fixed in the Playground

Defect

Effect

Cp mapping: 1126 lower-surface faces under the nose took the upper-surface Cp from their mesh tag.

Lift 10 to 13 % low, pressure thrust. After the fix lift at 8 degrees 1030.7 N (was 903.0; Flow5 1032.9).

Frame: built on the first skin node of the central rib, not LEP's chord axis.

0.254 degrees of tilt, 34 mm at K. At rest K now equals LEP's (y 1.1744, z 7.7956 m).

Nothing held the two carabiners apart in free flight.

They closed from 0.21 to 0.106 m each side of the centre and the pilot sank 0.27 m instead of 0.20. A rigid spreader link was added.

Angle of attack read on a span-averaged chord, and rib twist counted twice in the Cp lookup.

Reported alpha 1.4 degrees off LEP's central chord. Now read on the central chord (or on a chosen chord station).

Gravity cancellation of the numerical node mass was wiped each step.

About 15 N of extra weight; settled lift 1054.7 down to 1039.9 N.

Viscous drag missing: Flow5's friction (35 % of the drag at 8 degrees) is not in the Cp field.

Now applied as tangential shear sized from Flow5's CDv; the earlier one-direction traction (26.6 N) became 22.2 N and the glide ratio moved from 8.63 to 8.92.

Decimal commas (section 2.2).

Calage 47.00 instead of 47.77 in every earlier export.

3.3 Where K settles, and the line shares

4. Meshing, solvers,add ons and the wing tip (16-23 October)

Cloth/structural mesh of the all the parts of the wing

Deformation due to trim speed

Convergence parameters

Some of the parameters that can be set - Groundhandling, Trim speed etc

Realtime comparison between rigid and flexible wing

Realtime comparison between rigid and flexible wing (continue)


Various comparisons of flex wing vs Rigid

Magnified rib displacement from rigid comparison

Line connection point and the modeling of the v-strap in a halfcircle reinforcement strap

Material properties overrides

Trim balance diagrams - LP vs Playground - Chord line can be determined by the front part of the chord for comparison.

5. The deformed wing back into Flow5, and the calage sweep (21-26 October) - First FSI

5.1 Is the Playground's drag drop real? (21 Oct)

No (measured). A Playground flight with the deformed wing gave a wing drag 13 to 22 N lower than the design wing. Flow5 rebuilt on the deformed wing's ribs gives the same drag as the design wing at the same lift (-0.3 N); the drop is an artefact of the Playground's fixed pressure map on a tilting skin.

5.2 FSI loop at 47.77 %

Each cycle: take the flight's frame, extract its ribs as Flow5 sections (explicit geometry, 2 strips per cell, viscous, 3 to 10 degrees, about 13 minutes), build a new pressure table, continue the flight for 10 s, check against a static Newton solve.

47.77 %

Fixed table (cycle 0)

FSI converged (cycle 3)

LEP Section 35

Angle of attack, wing

7.25 deg

7.84 deg

8.00 deg

Airspeed

10.45 m/s

10.02 m/s

10.01 m/s

Wing drag

51.3 N

71.5 N

66.7 N

Total drag / glide ratio

111.6 N / 9.29

127.0 N / 8.16

122.5 N / 8.46

Lift

1037 N

1035 N

1036 N

Wing L/D

20.3

14.5

15.5

The Playground reads its angle of attack 0.25 degrees below the angle to the rib node line; this is a fixed offset between the node line and LEP's chord line (the same for rigid and flexible wings and every calage), and the Flow5 sections use LEP's chord reference (CL times area 15.240 against 15.301 m2, Cm identical), so no correction of the Flow5 table is needed.

The remaining 4.8 N of wing drag against LEP (5.5 N against Flow5's own result) was traced (measured, exterior pressure only): the mouth faces are loaded and the interior pressure is exactly the stagnation pressure, so the Playground flies as a closed wing, like Flow5 and like LEP at Cde = 1; the mouth band itself agrees with Flow5. The excess sits in the nose (x/c below 0.06): the Playground has 0.30 m2 more wind-facing area there (10 %, +8.6 N drag), partly offset by -3.8 N on the rear lower surface. Rib outline nodes of the Playground lie on the Flow5 sections to 0.8 mm rms; the cloth between the ribs is outside the straight loft that Flow5 uses (upper skin about 31 mm and lower about 5 mm at 3 to 9 % chord), which is the designed ballooning. A crude estimate of that billow gives 0.37 to 0.44 m2, the same size as the measured excess (inferred; billow was not switched off to isolate it). The rear lower surface is not explained.

Centre cell, nose, in LEP's chord frame: green squares are the Playground's rib nodes (on the Flow5 section), red dots its skin nodes half way between the ribs, dashed line the straight Flow5 loft at mid-cell.

5.3 Calage sweep

Zero risers (K calage about 55 %) down to 30 % in steps of 5 %, flexible and rigid, 20 to 30 s flights, on two machines. Static Newton and mem4py were run on every flexible end frame. The workbook (15 tabs, 28 charts, also uploaded as a Google Sheet) holds all aerodynamic parameters, twist per rib, movements, edge and strap tensions, and the solver comparison.

Flexible: end frame of each XPBD flight; star: the deformed-shape-into-Flow5 result at 47.77 %; diamond: LEP Section 35. All flights except the star used the fixed pressure table.

Twist of all 61 ribs relative to the centre rib: top, change from the rigid design wing for each sweep point and the FSI result; bottom, total twist against the twist the design file intends (dashed green, 6 degrees at the tip) and the twist the engine applied (grey), which is the washin finding of section 2.2. The straight tip ribs 59 and 60 use their neighbour's axis.

6. Known limits of these results