Skip to content

Design gap angles and ED2

IEC 61400-6 does not prescribe a single design gap: the gap angles 30°, 60°, 90° and 120° are potentially design-driving, and the one giving the highest fatigue damage is decisive (ref. [2], 6.7.5.3). The design gap height depends on the gap angle. This tutorial runs the four cases for the flange of the L-flange tutorial, first with the AMD1 model and then with the model proposed for ED2.

Download the full script: design_gaps.py

1. Common parameters

All the parameters except the gap and the shell stiffness are the same for the four cases. We store them in a dictionary and pass it to the class with **common:

from pyflange.bolts import StandardMetricBolt, RoundNut, standard_hole_diameter
from pyflange.fatigue import MarkovMatrix, BoltFatigueAnalysis

D = 8000*mm                 # tower outer diameter
R = D/2
s = 54*mm
u_tol = 0.0014              # flatness tolerance, 1.4 mm/m
n_bolts = 156

# Parameters shared by all the flange segments of this study
common = dict(
    a = 150*mm, b = 122*mm, s = s, t = 172*mm, R = R,
    central_angle = 2*pi / n_bolts,
    Zg = -18044*kN / n_bolts,
    bolt = StandardMetricBolt("M80", "10.9", shank_length=160*mm,
                              shank_diameter_ratio="pitch", stud=True),
    Fv = 2876*kN,
    Do = standard_hole_diameter("M80"),
    washer = None,
    nut = RoundNut("M80"),
    tilt_angle = 0.1*deg,
    PPL = 0.05, DFT = 300e-6, settlement_factor = 0.5)

mkvm = MarkovMatrix(
    range  = np.array([ 25,  50, 100, 150, 200, 250,  300, 375, 500, 625]) * 1e6,
    mean   = np.array([100, 100, 100, 100, 100, 100,  100, 100, 100, 100]) * 1e6,
    cycles = np.array([3e8, 1e8, 3e7, 8e6, 2e6, 5e5, 1.5e5, 4e4, 8e3, 1e3]),
    duration = 30)

2. AMD1

For each angle, the design gap height is the 95% quantile of the AMD1 log-normal distribution, and the shell stiffness is interpolated for that angle:

from pyflange.flangesegments import PolynomialLFlangeSegment, Gap, shell_stiffness
from pyflange.stats import gap_height_distribution

print("AMD1: design gap = 95% quantile of the log-normal distribution")
amd1_damage = {}
for angle_deg in (30, 60, 90, 120):
    angle = angle_deg * deg
    k_design = gap_height_distribution(D, u_tol, angle * D/2).ppf(0.95)
    fseg = PolynomialLFlangeSegment(**common,
                                    gap = Gap(height=k_design, angle=angle),
                                    k_shell = shell_stiffness(R, s, angle))
    amd1_damage[angle_deg] = BoltFatigueAnalysis(fseg, mkvm).damage
    print(f"  gap angle {angle_deg:3d} deg   gap height {k_design/mm:4.2f} mm   damage {amd1_damage[angle_deg]:.3f}")

governing = max(amd1_damage, key=amd1_damage.get)
print(f"  governing gap angle: {governing} deg")
AMD1: design gap = 95% quantile of the log-normal distribution
  gap angle  30 deg   gap height 0.89 mm   damage 0.558
  gap angle  60 deg   gap height 1.68 mm   damage 0.869
  gap angle  90 deg   gap height 2.75 mm   damage 1.337
  gap angle 120 deg   gap height 4.12 mm   damage 1.231
  governing gap angle: 90 deg

The design gap heights match Table 2 of ref. [1]. The 30° gap of the L-flange tutorial is not the governing one: with a 90° gap the damage exceeds 1.0 and the flange fails the check.

3. ED2

The model proposed for ED2 (ref. [5], 9.7) changes the gap stiffness, the gap closing force (torsional correction) and the lower bound of the parameter a*. The ED2 design gap height is the 75% quantile of a Weibull distribution (ref. [5], 2.2.4):

from pyflange.flangesegments import PolynomialLFlangeSegmentED2
from pyflange.stats import gap_height_distribution_ED2

print("ED2: design gap = 75% quantile of the Weibull distribution")
for angle_deg in (30, 60, 90, 120):
    angle = angle_deg * deg
    k_design = gap_height_distribution_ED2(D, u_tol, angle * D/2).ppf(0.75)
    fseg = PolynomialLFlangeSegmentED2(**common,
                                       gap = Gap(height=k_design, angle=angle),
                                       k_shell = shell_stiffness(R, s, angle))
    damage = BoltFatigueAnalysis(fseg, mkvm).damage
    print(f"  gap angle {angle_deg:3d} deg   gap height {k_design/mm:4.2f} mm   damage {damage:.3f}")
ED2: design gap = 75% quantile of the Weibull distribution
  gap angle  30 deg   gap height 0.57 mm   damage 0.418
  gap angle  60 deg   gap height 1.27 mm   damage 0.569
  gap angle  90 deg   gap height 2.16 mm   damage 0.760
  gap angle 120 deg   gap height 3.25 mm   damage 0.736

With the smaller ED2 design gaps the same flange passes. Note that the ED2 design gap fractile was selected together with the partial safety factors (ref. [5], 6.7), so a lower damage does not simply mean that ED2 is less conservative.

Warning

The ED2 classes follow the draft background document of 2026-08-04 (ref. [5]) and may change before ED2 is published.

Running the same study from the command line

The determ command accepts --gap-angle and --gap-height:

py -m pyflange determ case.json --gap-angle 90 --gap-height 2.75

When the gap angle is changed, the shell stiffness is interpolated again for the new angle. See the command line page and Writing case files from Python for batches.