Skip to content

Model overview

This page summarizes the model implemented by PyFlange and tells where each part is found in the code and in the references. It is not a substitute for IEC 61400-6 Annex G (ref. [2]) and its background documents (refs. [1] and [5]), which give the full derivation.

From tower loads to bolt fatigue

flowchart TD
    M["Tower bending moment<br/>Markov matrix"] -->|"Z = M / W · A<sub>seg</sub><br/>(G.33)"| Z["Shell force Z<br/>per segment"]
    Z -->|"bolt force and<br/>moment curves"| F["F<sub>S</sub>(Z), M<sub>S</sub>(Z)"]
    F -->|"σ = F<sub>S</sub>/A<sub>s</sub> + κ<sub>b</sub>·M<sub>S</sub>/W<sub>s</sub><br/>(42), (43)"| S["Bolt stress<br/>Markov matrix"]
    S -->|"S-N curve, Miner<br/>6.7.5.4"| D["Damage,<br/>fatigue life"]
Step PyFlange
Moment to shell force bolt_markov_matrix
Bolt force and moment curves PolynomialLFlangeSegment, PolynomialTFlangeSegment
Bolt stress, S-N curve, damage BoltFatigueAnalysis, BoltFatigueCurve

The flange segment

The flange is divided into segments, each containing one bolt (L-flange) or one pair of bolts (T-flange). A segment is loaded by the meridional shell force Z, positive in tension. In the unloaded state the segment carries the dead weight Zg (negative) and the bolt carries its preload. The geometric parameters are shown in the Nomenclature.

A gap between the two flanges, caused by flatness imperfections, is described by its height, its angle and its shape (Gap). Before the flanges are in full contact, part of the external load is needed to close the gap, which makes the bolt force increase faster than in a perfect flange.

Bolt force curve

The bolt force FS(Z) is defined by four points (ref. [2], Table G.1):

Point Meaning PyFlange property
P1 Flange at rest: Z1 = dead weight, FS,1 = preload after losses shell_force_at_rest, bolt_force_at_rest
P2 Ultimate tensile state shell_force_at_tensile_ULS, bolt_force_at_tensile_ULS
P3 Small displacement: sets the initial slope of the curve shell_force_at_small_displacement, bolt_force_at_small_displacement
P4 Gap completely closed shell_force_at_closed_gap
  • For Z ≥ Z1, FS is the quadratic polynomial through P1, P2 and P3 (ref. [2], eq. G.32).
  • For Z4 < Z < Z1, it is a quadratic polynomial with the same slope at P1 and zero slope at P4.
  • For Z ≤ Z4, it is constant.

The main ingredients of the points are:

  • Preload after losses (ref. [2], 6.7.5.1): the preload Fv reduced by settlement (eqs. (27), (28)) and plastic strain (eq. (24)). Property bolt_preload.
  • Lever ratio and a' (ref. [2], G.1.3; ref. [6]): the effective inner lever arm of an L-flange, with the action point correction of Tobinaga and Ishihara.
  • Gap stiffness (ref. [2], eqs. G.41 to G.46): the shell stiffness kshell (simplified formula G.43, a value given by the user, or the FEA database of shell_stiffness) plus the flange bending stiffness kfl.
  • Gap closing force ΔZgap (ref. [2], eqs. G.39, G.40), reduced by the flange inclination (ref. [2], G.2.4, eqs. G.66 to G.70) and, for T-flanges, increased by early prying (eqs. G.47, G.48).
  • Stiffness correction factor αk (ref. [2], eqs. G.49 to G.52), which scales Z2 and Z3.
  • The gap shape factor scales FS,2 − FS,1 and the initial slope, to represent gaps that are not sinusoidal (used in Monte Carlo simulations).

The values of all intermediate quantities are reported by pyflange determ (see JSON result files).

Bolt bending moment

The bolt moment MS(Z) is computed from the rotation of the flange at the bolt (ref. [2], G.2.3): eqs. G.59 and G.60 for L-flanges, which give a quadratic curve in Z, and eqs. G.61 to G.63 for T-flanges, which give a cubic curve. The compressive branch is built as for the bolt force.

Validity of the model

The polynomial model is valid only when the flange fails in the intended mode at the ultimate limit state (ref. [2], G.1.2 and G.2.1):

  • L-flanges: failure mode B (bolt failure with plastic hinges in the flange and shell, eq. G.30);
  • T-flanges: failure mode A (bolt failure, eq. G.31).

failure_mode(fy_sh, fy_fl) computes the ultimate shell force of the modes A, B, D and E and returns the governing one; validate(fy_sh, fy_fl) raises an error if it is not the required mode. PyFlange does not call validate automatically: call it in your scripts.

Other limits of the model, given in ref. [2], are not checked by PyFlange, for example the flatness tolerance of 1.4 mm/m for the analytical design gap (6.7.5.2) and the conditions for the simplified plastic preload loss (6.7.5.1.3, 6.7.5.1.4).

Fatigue damage

The bolt stress range is the axial stress range plus the bending stress range reduced by κb (ref. [2], eqs. (42), (43)), on the bolt stress area. The S-N curve has detail category 50 MPa at 2·106 cycles, slopes 3 and 5, knee point at 2·106 cycles, size reduction ks (eq. (44)), γM = 1.1 and no endurance limit. The damage is the Miner's sum; the allowable damage is 1.0 (6.7.5.4).

The stress ranges can be multiplied by a stress multiplication factor (SMF), which represents the model uncertainty of the analytical model (ref. [5], 6.5).

ED2

The changes proposed for IEC 61400-6 ED2 (ref. [5], section 9.7) are implemented in separate classes, which have the same interface as the AMD1 ones:

# Change L-flange T-flange
1 Torsional correction factor fk,gap on the gap closing force PolynomialLFlangeSegmentED2 not applicable
2 Gap stiffness: ftot applied to the shell stiffness only PolynomialLFlangeSegmentED2 PolynomialTFlangeSegmentED2
3 Lower bound of a* reduced from 0.4·a' to 0.3·a' PolynomialLFlangeSegmentED2 not applicable
– Weibull gap height distribution, 75% design fractile (ref. [5], 2.2.4) gap_height_distribution_ED2 gap_height_distribution_ED2

Monte Carlo simulation

The probabilistic model of refs. [1] and [5] (section 6) treats preload, preload losses, gap, flange inclination, fatigue loads, S-N curve, Miner's rule and model uncertainty as random variables. PyFlange provides random samplers for each of them in pyflange.stats; the sample command and sample_fatiguecase combine them as described in the JSON format.

Implementation notes

Where PyFlange deviates from the text of ref. [2], it does so to reproduce the reference results it is validated against (see Validation), or because the standard leaves room for interpretation. The notable cases are:

  • ftot for small gap angles. For L-flanges, the gap stiffness factor ftot (eq. G.42) is further reduced by the factor min(αgap/30°, 1)², which only matters for gap angles below 30°, i.e. in Monte Carlo simulations.
  • Wall thickness. The segment width and the shell parameters use the mean of the upper and lower wall thickness (s_ratio).
  • Tower section modulus. The conversion from bending moment to shell force uses the section modulus at the shell mid-surface, which is slightly conservative.
  • Macro-geometric factor. In bolt_markov_matrix, the macro_geometric_factor (SCF of 6.7.5.3) is applied to the dead weight as well as to the mean and range values.
  • T-flange bolt moment. The tensile branch is the exact cubic of eq. G.61, while the SGRE reference workbooks fit a quadratic through three points (differences of about 1%).