Back to LEAPS workbench
LEAF-JS Engine v2.4

LEAPS, Documentation

Theory, engine internals, validation cases, sign conventions, distress models and a usage guide for the Linear Elastic Analysis of Pavement Structures workbench. Everything here runs client-side; the numerical engine (LEAF-JS) is a from-scratch multilayer elastic solver.

1 · Overview

LEAPS computes the stress, strain and displacement fields inside a pavement idealized as a stack of homogeneous, isotropic, linear-elastic layers resting on a semi-infinite elastic halfspace. Each layer is defined by a thickness h, an elastic modulus E and a Poisson's ratio ν; the bottom layer is infinitely deep. Surface loads are applied as a uniform circular contact pressure (a tire, the classical layered elastic analysis idealization used throughout mechanistic-empirical pavement design), as a concentrated point force (Boussinesq), or as a line load spread along a straight segment. All three carry the same total force, so the switch changes only how that force is spread.

The tool is meant for intuition, teaching and rapid mechanistic checks, not as a replacement for a validated design package. Its core assumptions are:

  • Each layer is homogeneous, isotropic and linearly elastic (no stress dependence, no visco-elasticity, no temperature gradient).
  • Layers extend infinitely in the horizontal plane; the lowest layer is a halfspace.
  • Loads are static and vertical, applied over a circular contact area, at a point, or along a line.
  • Full continuity, frictionless slip or a linear shear-spring is enforced at each interface.

2 · Multilayer elastic theory

For an axisymmetric vertical load, the elasticity equations admit a solution through a single biharmonic Love stress function φ(r, z) that satisfies ∇⁴φ = 0. Taking the zeroth-order Hankel transform in the radial coordinate maps the biharmonic equation to an ordinary differential equation in the transform variable m, whose general solution in layer i is

φ̄ᵢ(m, z) = (Aᵢ + Bᵢ·m·z)·e^(−m z) + (Cᵢ + Dᵢ·m·z)·e^(+m z)

The four constants Aᵢ … Dᵢ per layer are fixed by boundary and interface conditions. Stresses and displacements are recovered from φ̄ by differentiation in Hankel space and an inverse Hankel transform (an integral over m weighted by Bessel functions J₀, J₁).

Boundary conditions

  • Surface (z = 0): prescribed normal pressure from the load transform, zero shear.
  • Each interface: continuity of vertical stress and vertical displacement always; the treatment of shear stress and radial displacement depends on the bond (see §4).
  • Depth (z → ∞): the growing exponentials in the halfspace must vanish, so C_N = D_N = 0.

These assemble into a 4N − 2 linear system per transform parameter m for an N-layer system, solved independently for every quadrature abscissa.

Overflow control. A naive assembly multiplies e^(+m h) terms that overflow for thick layers or high m·h. LEAF-JS scales each layer's exponentials by its own e^(−m·z) reference and uses partial pivoting, so no modulus ratio or thickness, however extreme, can overflow the double-precision range.

3 · Numerical method

Each response is an infinite integral of an oscillatory, slowly-decaying integrand. LEAF-JS evaluates it with:

  • Panel-wise Gauss-Legendre quadrature between consecutive zeros of the relevant Bessel function, so each panel integrates a smooth half-wave.
  • Wynn ε-acceleration of the sequence of panel partial sums, which converts the slowly-converging alternating tail into a rapidly-convergent estimate.
  • Decay-scale refinement for deep evaluation points, where the integrand's envelope decays fast and panels are re-spaced accordingly.
  • Closed-form surface tails: at z = 0 the integrals reduce to Weber-Schafheitlin forms evaluated with complete elliptic integrals K, E (arithmetic-geometric mean). Surface deflection of a halfspace is therefore returned to machine precision rather than by truncated quadrature.

The solver tolerance (Solver panel) sets the convergence target of the accelerated tail; the contour resolution sets the size of the sampling grid used only for the stress-bulb visualization, not for the reported key responses.

What makes it fast enough to be interactive

A contour grid is 2,600 points and each point is a quadrature, so the whole picture is a few million evaluations of the layered kernels. Three things keep that inside a couple of seconds, and none of them costs accuracy.

  • Shared quadrature nodes. The panel breakpoints come from the zeros of the Bessel families and the exponential decay scale, and both the decay length and the radial distance are quantized to powers of two. Neighboring points then land on exactly the same nodes and every 4N-2 coefficient solve is computed once and reused. Rounding the radius up makes the panels finer than the oscillation needs, so it cannot cost accuracy; measured on a 61x43 grid under a dual tandem it took the linear solves from 34,792 to 3,032.
  • Half the grid, mirrored. When the gear is its own mirror image in x, which is every layout the gear generator builds, only half the columns are solved and the other half is a reflection: the stresses and strains carrying one x index change sign, everything else does not, and the principal values are untouched because a reflection is orthogonal. Exact, not approximate, and it halves the most expensive job in the tool.
  • A coarse pass first. Where the full grid is more than a moment away, a grid at about a third of the resolution is solved first and drawn while the full one runs. The picture arrives in about a second and sharpens rather than appearing all at once two seconds later.

The contour is also not solved at all while the overlay is switched off, and the status bar names what each pass cost, so none of this has to be taken on trust.

4 · Interfaces

Between adjacent layers, vertical stress and vertical displacement are always continuous. The shear behavior is set by a dimensionless slip value, the same input WinJULEA takes, where 0 is fully bonded and 1 is frictionless. Both endpoints are exact. Anything between is Goodman's shear spring:

InterfaceShear conditionTypical use
Fully bondedShear stress and radial displacement continuousWell-constructed flexible layers, tack-coated lifts
FrictionlessZero shear; radial displacement free to slipUnbonded PCC/base, bond-breaker, debonded overlay
Shear springShear stress = k · (radial slip); k in MPa/mmPartial slip, aged tack, transition between the two limits

The spring stiffness k spans the two limits continuously: k → ∞ recovers the fully-bonded solution, k → 0 recovers the frictionless one. Both limits are checked in the validation suite (§9).

Turning a dimensionless slip into a stiffness necessarily introduces a length. The literature, BISAR's shear-spring compliance, Uzan's friction parameter, scales it on the loaded radius, which is why a dimensionless friction parameter is documented as depending on the diameter of the load circle. LEAPS uses

k(s) = (Glower / aref) · (1 − s) / s

with aref the reference contact radius, and prints the resulting stiffness beside the control. An intermediate value is a defensible partial bond, but it is not guaranteed to reproduce another program's intermediate value digit for digit, because each program normalizes its own way. Enter k directly when the number matters.

5 · Loads & gears

The load model selector in the toolbar chooses how each load is applied. Every model carries the same total force F, so switching between them is a direct experiment in Saint-Venant's principle: near the contact the three answers differ by a factor of two or more, and by a couple of contact radii down they agree to a fraction of a per cent.

ModelWhat is appliedWhere it is singular
Circular imprintUniform pressure p over radius a. The LEA standard, and the only model to use when comparing against another layered-elastic program.Nowhere, finite everywhere.
Point loadA concentrated force F (Boussinesq).At the load itself.
Line loadForce per unit length q = F/L along a segment of length L and azimuth θ.Anywhere on the segment, at the surface.

A singular point is reported as such rather than given the finite number a quadrature happens to return there. That the concentrated idealizations have no answer at the load is not a defect in the solver, it is the reason design methods spread a wheel over a contact area in the first place.

Load, pressure and area are one equation

A circular contact is described by three numbers and they are not independent:

F = p · A,  A = π a²,  a = √( F / (π · p) )

Any two fix the third, and which two you have depends on where the number came from: a legal axle load and a placarded inflation pressure, or a measured footprint and a scale reading. The Solve for switch names the one LEAPS computes. That quantity becomes a read-only readout rather than an input, so there is no state in which three numbers can sit on screen that do not satisfy the relation, and no question about which of them the solver believed. Contact radius is offered alongside area because a footprint is quoted both ways.

The same switch governs the gear generator, so a gear built from load and pressure and a gear built from load and area are the same gear.

Multiple wheels are superposed: LEAPS solves each wheel independently in its own axisymmetric frame, then rotates every stress/strain tensor into the global frame before summation, so shear coupling between offset wheels is captured exactly. The Gear generator builds standard layouts, all parameterized by wheel load, pressure, dual spacing Sd (transverse gap between paired tires) and tandem spacing St (longitudinal gap between axles):

GearWheelsLayout
Single1One wheel at the origin
Dual2Pair at ±Sd/2
Dual tandem4Two duals, axles Sd apart at ±St/2
Tridem3Three single wheels, axles St apart
Dual tridem6Three duals (±Sd/2) on axles at −St, 0, +St

Individual wheels can be repositioned and re-loaded in the wheel table after a gear is built, so irregular configurations are fully supported.

6 · Conventions & units

QuantitySI displayUS display
Length / thicknessmmin
Stress / pressureMPapsi
ModulusMPapsi
Wheel loadNlb
Deflectionmmin
Strainµεµε
Interface stiffnessMPa/mmpsi/in

7 · Response quantities

At every evaluation point LEAPS reports the full state:

The Key responses rail highlights the classic design drivers: maximum surface deflection, horizontal tensile strain at the bottom of the asphalt (fatigue), vertical compressive strain at the top of the subgrade (rutting), tensile stress at the bottom of bound layers, and peak interface shear. Those cards carry a tint of their own so they read as conclusions rather than as more of the table, and the one that governs is outlined.

Reading the results table

The table is transposed the way a layered-elastic program prints it: one column per evaluation point, one row per quantity. Every cell also carries a bar scaled to the largest magnitude in its own row and tinted by sign, and the largest cell of each row is marked. A row of numbers in scientific notation is hard to scan and easy to misread by a decade; the bar is there so the shape of a response along the section can be seen before any single value is read. Because each row is scaled to itself, bars are comparable across a row and never across rows.

A response that is zero by symmetry comes back from the quadrature as roundoff rather than as zero: on a wheel axis the shear is 2e-18 where the answer is exactly nought. Anything twelve orders below the largest value in its own row is printed as 0, in the table and in the exported analysis alike. Twelve, not six: the engine agrees with an independent solver to about five significant figures, so a number that small is not a small response, it is the last bits of the double. The project file keeps the raw value.

Greek letters, subscripts and superscripts are typeset rather than spelled: the table, the field picker, the colorbar and the canvas all draw from one notation table, so τxz is the same glyph everywhere it appears and the CSV twin is a plain-text transliteration of the same entry. Real equations are set with KaTeX, each carrying a plain-text twin that shows until it loads.

8 · Distress models

The Performance tab converts the two critical mechanistic strains into allowable load repetitions using the Asphalt Institute transfer functions. Fatigue cracking is driven by the horizontal tensile strain εt at the bottom of the asphalt and the asphalt modulus E (in psi):

N_f = 0.0796 · εt^(−3.291) · E^(−0.854)

Subgrade rutting is driven by the vertical compressive strain εv at the top of the subgrade:

N_r = 1.365 × 10⁻⁹ · εv^(−4.477)

The governing life is the smaller of the two. N_f and N_r are allowable repetitions of the analyzed load, not calendar life, no seasonal, reliability or shift factors are applied.

Scope. These equations are calibrated for conventional flexible pavements with an asphalt-bound surface. LEAPS shows the fatigue estimate only when the surface layer is asphalt-bound; for rigid or composite systems, treat the numbers as indicative and use a slab-fatigue or cracking model appropriate to the structure. Other agency transfer functions (MEPDG, Shell, FAA CDF) can be applied to the same computed strains.

9 · Validation suite

LEAF-JS ships with a 112-check regression suite (run under Node during development; a subset runs in your browser at every startup and drives the status-bar badge). The checks cover:

CategoryWhat is verified
Boussinesq closed formsσz, σr, radial/vertical displacement of a point and circular load on a homogeneous halfspace, at the surface and at depth.
Multilayer reductionAn N-layer stack with equal moduli reproduces the single-halfspace solution.
Interface limitsShear-spring stiffness k → ∞ matches the fully-bonded solution; k → 0 matches the frictionless one.
Vertical equilibriumIntegrated vertical stress on horizontal planes balances the applied load.
Superposition symmetrySymmetric multi-wheel gears yield symmetric response fields.
Burmister two-layerSurface deflection factor F₂ matches Burmister's tabulated two-layer solution.
Extreme contrastA 1000:1 modulus contrast with a 3 mm interlayer solves stably without overflow.
Load idealizationsA point load is the limit of a shrinking circle at constant total force; a line load of vanishing length is a point load; all three carry the applied load through any horizontal plane; a rotated line load gives a rotated field.
Slip valuesSlip 0 reproduces the bonded solution exactly and slip 1 the frictionless one; deflection rises monotonically between them.
Principal valuesσ₁ ≥ σ₂ ≥ σ₃ everywhere, the eigenvalues carry the tensor's own invariants, and the principal strains are Hooke's law on the principal stresses.

Two quadrature defects were found by cross-checking the engine against an independent implementation, and both were converged and wrong, stable at every tolerance, so no amount of tightening would have shown them. The panel mesh near m = 0 now resolves the interface reflections rather than the evaluation depth, and the first panel is graded geometrically toward zero. A surface deflection that came out 0.8 % high on a three-layer section now agrees with the reference to 4e−5. The lesson is recorded here because it generalizes: a single solver cannot check its own quadrature.

The startup self-check compares the engine against the Boussinesq closed forms; a green badge means those passed on your machine, in your browser, this session.

10 · Using LEAPS

Workflow

Two views of one model

The Section view is the cut itself: the x-z plane at the section line, drawn to scale with a ruler along the bottom for x, the depth rail at the left for z, and a gnomon in the corner carrying all three axes. The third one is the reason the gnomon is there: y runs into the page, the drawing is one cut along it, and the gnomon prints which cut. Contour lines carry their own values in a gap broken in the line, the way a contour map engraves them, so a bulb can be read without walking back to the color bar.

The 3D view is the same model in the box it sits in, cut open at the section line. The far half is solid and carries the contour on the exposed face; the near half is drawn as the glass it was cut out of, so the wheels standing on it stay where they are. It answers the question a flat cut cannot: where is the section, and what else is up there? A dual tandem has four wheels and a plane through two of them; a line load at the default azimuth runs along y and crosses the section at a single point, which in the flat view is a knife edge and in this one is a line on the ground. Drag to orbit, scroll to zoom, shift-drag to pan.

Two things about that camera are deliberate. It is orthographic, so nothing foreshortens and a length is a length wherever in the box it sits: the figure can be measured. And the orbit is held within one quadrant, because past about 80 degrees the cut face is edge on, the contour disappears, and the reader is looking along the plane whose values they came to read.

Editing on the section

The section drawing is an input, not an illustration. Three gestures edit the structure directly, and each one changes the same state the panel does, so the two are never out of step:

Before you run

Two things guard a run. The Build button lights when anything the gear is built from has been edited, because those values seed the loads rather than driving them and nothing moves until it is pressed. And the badge beside Run is a preflight checklist: a tick for every input that is complete, a cross for anything that needs review, and the count of the two. Pressing Run with a failing check opens the list instead of solving. A layered-elastic solver will return plausible numbers for a section nobody meant to type, and a wrong answer that looks right is worse than no answer.

The design study

Every other panel answers one question: what does this section do? A design asks the other one. How thick does the asphalt have to be. How much does bonding buy. What happens when the subgrade is soft. Answering that a section at a time means editing a number, pressing Run, writing the answer down, and doing it eight more times, which is enough friction that nobody does it eight times.

So the Design study tab sweeps one quantity across a range: any layer's thickness or modulus, any interface's slip, the wheel load, or the contact pressure. Every step is a full layered-elastic solve of a section that differs from the one on screen in exactly that quantity, read at the same critical points and through the same transfer functions the panels use, so a point on the curve and the panel beside it agree by construction rather than by coincidence.

Two things make it a design tool rather than a plotting one. The current design is marked on the curve, so the study always says where you are standing. And for a life, a target draws a line and the crossing is solved for and printed in words: 1 × 106 repetitions at Dense-graded HMA thickness = 98.8 mm. The crossing is interpolated in log N between the two steps that straddle it, which is the space a transfer function is a straight line in.

A load or pressure sweep holds the other of the two and lets the contact area follow, which is what happens on a truck: inflation pressure is a property of the tire and the load is a property of the trip. The subgrade's thickness is deliberately not on the list, because it is a half-space and its thickness is ignored: a sweep of it would draw a flat line and teach the wrong thing. Every step of the study exports to CSV with all five critical responses and the governing mechanism.

Plan view

The plan inset shows the gear from above with contact footprints, axle and tandem connectors, detected spacings and a grid. Drag the dashed line to move the analysis section along the y-axis; every response updates for the new cut.

Keyboard & interaction

Key / actionEffect
FFit the section view
RRun the analysis
Ctrl/⌘ + Z / YUndo / redo
DeleteRemove the selected evaluation point
Scroll / drag on sectionZoom / pan the viewport
Double-click sectionDrop an evaluation point
Drag an interface lineSet the thickness of the layer above it
Click an interface chipCycle bonded, partial, free
Click a layerSelect it here and in the structure panel
Drag in the 3D viewOrbit the camera (shift-drag pans)
Drag the cut plane in 3DMove the section line through the gear

Exports

Export full analysis writes one file carrying the whole run: the structure, every interface and its slip value, every load with its derived radius or line intensity, the solver settings, and every response at every evaluation point, in the units on screen, with the sign convention named in the header. Values are rounded to six significant figures, because the solver agrees with an independent implementation to about five and the digits past that belong to the double rather than to the pavement. The project .leaps.json keeps full precision and re-opens the run exactly; the contour field exports to CSV, the design study exports to CSV, and the section to PNG. Work autosaves to your browser between sessions.

11 · References

Return to the LEAPS workbench