pyflange.flangesegments

Mechanical models of single-bolt flange segments.

This module contains FlangeSegment classes, which model the mechanical behavior of a flange sector containing one bolt only. The module provides:

  • Gap: description of the imperfection gap between two flange faces.
  • FlangeSegment: abstract base class defining the transfer-function interface (bolt axial force and bolt bending moment as functions of the shell pull force).
  • PolynomialFlangeSegment: abstract base class implementing the polynomial transfer functions of refs. [1] and [2].
  • PolynomialLFlangeSegment and PolynomialLFlangeSegmentED2: polynomial L-flange segment models (the latter implementing the modifications expected in IEC 61400-6 ED2).
  • PolynomialTFlangeSegment: polynomial T-flange segment model.
  • bolt_markov_matrix: conversion of a flange bending-moment Markov matrix into a bolt stress Markov matrix, via the segment transfer functions.
  • shell_stiffness: shell stiffness interpolated from tabulated FEA results.

The only types of FlangeSegment currently available are an L-Flange segment and a T-Flange segment, implementing a polynomial relation between tower shell force and bolt force / bolt moment. Nonetheless, this module has been structured to be easily extensible with other types of FlangeSegment model, such as Multilinear (Petersen) L-Flanges, Multilinear T-Flanges, etc.

Units

All parameters must be supplied in a consistent system of units, e.g. meters for lengths, newtons for forces and pascals for stresses. Angles are expressed in radians.

Example

The following example creates an L-flange segment and evaluates the bolt axial force for a given shell pull force.

from math import pi
from pyflange.bolts import StandardMetricBolt, RoundNut
from pyflange.flangesegments import Gap, PolynomialLFlangeSegment

fseg = PolynomialLFlangeSegment(
    a=0.150, b=0.122, s=0.054, t=0.172, R=4.0,
    central_angle=2*pi/156,
    Zg=-115e3,                              # dead weight per bolt (compression)
    bolt=StandardMetricBolt("M80", "10.9", shank_length=0.160, stud=True),
    Fv=2.9e6,                               # bolt preload
    Do=0.086, washer=None, nut=RoundNut("M80"),
    gap=Gap(height=0.002, angle=pi/6))

Fs = fseg.bolt_axial_force(500e3)           # bolt force for a shell pull of 500 kN

The models implemented in this module are based on the following references:

  • [1] Marc Seidel, SGRE TE TF PST: IEC 61400-6 AMD1 Background Document Fatigue design for ring flange connections in wind turbine support structures.
  • [2] IEC 61400-6:2020/AMD1 - Wind energy generation systems - Part 6: Tower and foundation design requirements - Amendment 1. Draft version 2024-10-01.
  • [3] Petersen, C.: Nachweis der Betriebsfestigkeit exzentrisch beanspruchter Ringflansch-verbindungen (Fatigue assessment of eccentrically loaded ring flange connections). Stahlbau 67 (1998), S. 191-203. https://onlinelibrary.wiley.com/doi/abs/10.1002/stab.199800690
  • [4] Petersen, C.: Stahlbau (Steel construction), 4. Auflage Braunschweig: Wiesbaden: Springer Vieweg 2012. https://link.springer.com/book/10.1007%2F978-3-8348-8610-1
  • [9] Tobinaga, I.; Ishihara, T.: A study of action point correction factor for L-type flanges of wind turbine towers. Wind Energy 21 (2018), p. 801-806. https://doi.org/10.1002/we.2193

FlangeSegment

Bases: ABC

Abstract base class for a flange segment.

This class is meant to be extended and not to be instantiated directly. Each FlangeSegment child class must implement the two transfer-function methods: .bolt_axial_force(Z) and .bolt_bending_moment(Z).

bolt_axial_force(shell_pull) abstractmethod

Calculates the bolt axial force generated by a shell pull force.

Parameters:
  • shell_pull (float or ndarray) –

    The shell pull force Z.

Returns:
  • –

    float or numpy.ndarray: The resulting bolt axial force.

bolt_bending_moment(shell_pull) abstractmethod

Calculates the bolt bending moment generated by a shell pull force.

Parameters:
  • shell_pull (float or ndarray) –

    The shell pull force Z.

Returns:
  • –

    float or numpy.ndarray: The resulting bolt bending moment.

Gap dataclass

A flange gap due to imperfections.

Attributes:
  • height (float) –

    Maximum longitudinal gap height.

  • angle (float) –

    Angle subtended by the gap arc from the flange center, in radians.

  • shape_factor (float) –

    Factor accounting for a shape different than sinusoidal. Defaults to 1.0 (sinusoidal gap).

PolynomialFlangeSegment

Bases: FlangeSegment

A generic FlangeSegment with polynomial transfer functions.

This class implements a polynomial relation between tower shell force Z and bolt axial force Fs or bolt bending moment Ms. It is not meant to be instantiated directly but to be subclassed.

The polynomial transfer functions are defined by 4 reference points:

  • P1: Flange segment at rest.
  • P2: Flange segment at ultimate tensile limit state.
  • P3: Flange segment in small tensile deformation.
  • P4: Gap closure state.

Child classes must provide the coordinates of these points (shell force, bolt force and bolt moment) through the abstract properties of this class. The transfer functions are a quadratic polynomial through P1, P2 and P3 in the tensile domain (above the shell force at rest), a quadratic polynomial between P4 and P1 in the compressive domain, and a constant below P4.

_compressive_force_polynomial cached property

Polynomial Fs(Z) for the compressive domain.

This getter returns the polynomial Fs(Z) defined by refs. [1] and [2] between point 1 (flange segment at rest) and point 4 (gap closed).

Returns:
  • –

    numpy.polynomial.polynomial.Polynomial: The polynomial for the compressive domain.

_compressive_moment_polynomial cached property

Polynomial Ms(Z) for the compressive domain.

This getter returns the polynomial Ms(Z) defined by refs. [1] and [2] between point 1 (flange segment at rest) and point 4 (gap closed).

Returns:
  • –

    numpy.polynomial.polynomial.Polynomial: The polynomial for the compressive domain.

_tensile_force_polynomial cached property

Polynomial Fs(Z) for the tensile domain.

This getter returns the polynomial Fs(Z) defined by refs. [1] and [2] between point 1 (flange segment at rest) and point 2 (ultimate tensile limit state of the bolt).

Returns:
  • –

    numpy.polynomial.polynomial.Polynomial: The polynomial for the tensile domain.

_tensile_moment_polynomial cached property

Polynomial Ms(Z) for the tensile domain.

This getter returns the polynomial Ms(Z) defined by refs. [1] and [2] between point 1 (flange segment at rest) and point 2 (ultimate tensile limit state of the bolt).

Returns:
  • –

    numpy.polynomial.polynomial.Polynomial: The polynomial for the tensile domain.

bolt_force_at_rest abstractmethod property

Bolt axial force when no external loads are applied (Fs1).

bolt_force_at_small_displacement abstractmethod property

Intermediate bolt axial force (Fs3).

bolt_force_at_tensile_ULS abstractmethod property

Bolt axial force at tensile failure (Fs2).

bolt_moment_at_rest abstractmethod property

Bolt bending moment when no external loads are applied (Ms1).

bolt_moment_at_small_displacement abstractmethod property

Intermediate bolt bending moment (Ms3).

bolt_moment_at_tensile_ULS abstractmethod property

Bolt bending moment at tensile failure (Ms2).

shell_force_at_closed_gap abstractmethod property

Shell force necessary to completely close the imperfection gap (Z4).

shell_force_at_rest abstractmethod property

Shell force when no external loads are applied (Z1).

shell_force_at_small_displacement abstractmethod property

Intermediate tower shell force (Z3).

shell_force_at_tensile_ULS abstractmethod property

Ultimate Limit State tower shell force (Z2).

bolt_axial_force(shell_pull)

Calculates bolt axial force from tower shell force using a polynomial.

The relation is defined as a polynomial function based on ref. [1], section 8.2 and ref. [2], section G.4.2.

Parameters:
  • shell_pull (float or ndarray) –

    The tower shell force Z.

Returns:
  • –

    float or numpy.ndarray: The corresponding bolt axial force Fs.

bolt_bending_moment(shell_pull)

Calculates bolt bending moment from tower shell force using a polynomial.

The relation is defined as a polynomial function based on ref. [1], section 8.3 and ref. [2], section G.4.2.

Parameters:
  • shell_pull (float or ndarray) –

    The tower shell force Z.

Returns:
  • –

    float or numpy.ndarray: The corresponding bolt bending moment Ms.

PolynomialLFlangeSegment dataclass

Bases: PolynomialFlangeSegment

An L-Flange implementation of a PolynomialFlangeSegment.

This class models an L-flange segment using the polynomial model from ref. [1] and [2]. It defines the reference points for the polynomial functions inherited from the parent class.

The transfer functions are available through the bolt_axial_force and bolt_bending_moment methods, which accept either a scalar or a NumPy array of shell pull forces.

Attributes:
  • a (float) –

    Distance from inner flange face to bolt hole center.

  • b (float) –

    Distance from bolt hole center to shell center-line.

  • s (float) –

    Shell thickness.

  • t (float) –

    Flange thickness.

  • R (float) –

    Shell outer curvature radius.

  • central_angle (float) –

    Angle subtended by the flange segment arc.

  • Zg (float) –

    Load on the shell at rest (e.g., dead weight). Negative for compression.

  • bolt (Bolt) –

    The bolt in the flange segment.

  • Fv (float) –

    Design preload value before losses.

  • Do (float) –

    Bolt hole diameter.

  • washer (Washer) –

    The washer used. None if no washer.

  • nut (Nut) –

    The nut used.

  • gap (Gap) –

    The flange gap.

  • tilt_angle (float) –

    Flange tilt angle in radians.

  • E (float) –

    Young's modulus of the flange material.

  • G (float) –

    Shear modulus of the flange material.

  • s_ratio (float) –

    Ratio of bottom shell thickness to s.

  • r (float) –

    Radius of the rounding between shell and flange.

  • k_shell ((float, callable, None)) –

    Shell stiffness [N/m/m]. Can be a value, a function taking the flange segment as argument and returning the stiffness, or None to use the simplified formula of ref. [1].

  • PPL (float) –

    Percentage of bolt pretension loss due to plastic strain, expressed as a fraction of Fv (e.g. 0.03 for 3%). Defaults to 0.0.

  • DFT (float) –

    Maximum allowable dry film thickness of coating applied on the contact area between washers and flange [m]. Defaults to 0.0 m.

  • settlement_factor (float) –

    Factor reducing the amount of bolt settlement, to be taken as 1.0 for torque tightening and 0.5 for tension tightening. Defaults to 1.0.

_bolt_axial_stiffness cached property

The axial stiffness of the bolt.

_bolt_bending_stiffness cached property

The bending stiffness of the bolt.

_flange_axial_stiffness cached property

The axial stiffness of the flange in the thickness direction.

_gap_stiffness cached property

Stiffness of the design gap.

Returns the gap stiffness as a spring constant per unit of flange-segment arc length, calculated according to ref.[1], sec. 8.1 and ref.[2], eq. G.35.

_ideal_bolt_force_at_tensile_ULS cached property

Bolt axial force at tensile failure for a sinusoidal gap shape.

_ideal_shell_force_at_tensile_ULS cached property

Tower shell force at the theoretical state of full prying (Z0).

_parallel_gap_neutralization_shell_force cached property

Force necessary to close a parallel imperfection gap.

_polynomial_initial_slope cached property

Initial slope of the Fs(Z) polynomial.

This slope is calculated according to ref. [1], section 8.2.2.3 and ref. [2], eq. G.53.

_prying_lever_ratio cached property

Lever ratio A, as defined in [9].

_stiffness_correction_factor cached property

Stiffness correction factor (alpha-k).

This factor modifies the segment force to account for the effect of the gap spring, evaluated according to ref. [1], sec. 8.2.2.2 and ref. [2], eq. G.46.

_tilt_neutralization_shell_force cached property

Force that neutralizes the flange tilt (DZ_gap,incl).

This solves equation (G.64) of ref. [2].

_total_gap_neutralization_shell_force cached property

Incremental force to close the imperfection gap (delta-Z_gap,total).

bolt_force_at_rest cached property

Bolt axial force when no external loads are applied (Fs1).

The bolt force at rest is just the bolt pretension.

bolt_force_at_small_displacement cached property

Intermediate bolt axial force (Fs3).

This auxiliary point gives the polynomial the right initial slope, evaluated according to ref. [1], sec. 8.2.2.3 and ref. [2], sec. G.4.2.

bolt_force_at_tensile_ULS cached property

Bolt axial force at tensile failure (Fs2).

This is the bolt's tensile force at the shell's ULS, assuming failure mode B.

bolt_moment_at_rest cached property

Bolt bending moment when no external loads are applied (Ms1).

bolt_moment_at_small_displacement cached property

Intermediate bolt bending moment (Ms3).

bolt_moment_at_tensile_ULS cached property

Bolt bending moment at tensile failure (Ms2).

bolt_preload cached property

float: Bolt preload after settlement and plastic losses.

The preload Fv is reduced by the settlement loss (function of DFT and settlement_factor) and by the plastic loss (PPL * Fv).

gap_angle property

Deprecated. Use gap.angle instead.

gap_height property

Deprecated. Use gap.height instead.

gap_shape_factor property

Deprecated. Use gap.shape_factor instead.

shell_force_at_closed_gap cached property

Shell force necessary to completely close the imperfection gap (Z4).

shell_force_at_rest cached property

Shell force when no external loads are applied (Z1).

The shell loads at rest are normally the self-weights of the structure supported by the flange.

shell_force_at_small_displacement cached property

Intermediate tower shell force (Z3).

This auxiliary point gives the polynomial the right initial slope, evaluated according to ref. [1], sec. 8.2.2.3 and ref. [2], sec. G.4.2.

shell_force_at_tensile_ULS cached property

Ultimate Limit State tower shell force (Z2).

This is the tower shell force that brings the flange segment to its tensile ULS, evaluated according to ref. [1], sec. 8.2.2.2 and ref. [2], sec. G.4.2.

_bolt_moment(Z, Fs)

Calculates the bolt bending moment.

Parameters:
  • Z (float) –

    Shell pull force.

  • Fs (float) –

    Bolt axial force.

Returns:
  • float –

    The bolt bending moment.

failure_mode(fy_sh, fy_fl, gamma_0=1.1)

Determines the failure mode of the flange.

The ultimate shell force is evaluated for each of the failure modes A, B, D and E of ref. [2], and the governing mode is the one with the lowest ultimate shell force.

Parameters:
  • fy_sh (float) –

    Yield stress of the shell material.

  • fy_fl (float) –

    Yield stress of the flange material.

  • gamma_0 (float, default: 1.1 ) –

    Material factor. Defaults to 1.1.

Returns:
  • tuple –

    A tuple containing:

    • str: The failure mode ("A", "B", "D", or "E").
    • list: A list of the shell force limits for each failure mode [Zu_A, Zu_B, Zu_D, Zu_E].

validate(fy_sh, fy_fl, gamma_0=1.1)

Verifies the applicability of the polynomial model.

Checks if this L-Flange Segment fails according to failure mode B.

Parameters:
  • fy_sh (float) –

    Yield stress of the shell material.

  • fy_fl (float) –

    Yield stress of the flange material.

  • gamma_0 (float, default: 1.1 ) –

    Material factor. Defaults to 1.1.

Raises:
  • ValueError –

    If the failure mode is not "B".

PolynomialLFlangeSegmentED2 dataclass

Bases: PolynomialLFlangeSegment

An L-Flange segment modeled as it will be modified in IEC 61400-6 ED2.

This class has the same parameters and interface as PolynomialLFlangeSegment, but it replaces the a* parameter, the parallel-gap closing force and the gap stiffness with the formulations that will be introduced in IEC 61400-6 ED2.

_a_star cached property

a* parameter As it will be modified in IEC 61400-6 ED2

_gap_stiffness cached property

Stiffness of the design gap.

Returns the gap stiffness as a spring constant per unit of flange-segment arc length, as it will be modified in IEC 61400-6 ED2

_parallel_gap_neutralization_shell_force cached property

Force necessary to close a parallel imperfection gap. As it will be modified in IEC 61400-6 ED2

PolynomialTFlangeSegment dataclass

Bases: PolynomialFlangeSegment

A T-Flange implementation of a PolynomialFlangeSegment.

This class models a T-flange segment using the polynomial model from ref. [1] and [2]. It defines the reference points for the polynomial functions inherited from the parent class.

The transfer functions are available through the bolt_axial_force and bolt_bending_moment methods, which accept either a scalar or a NumPy array of shell pull forces.

Attributes:
  • a (float) –

    Distance from inner flange face to bolt hole center.

  • b (float) –

    Distance from bolt hole center to shell center-line.

  • s (float) –

    Shell thickness.

  • t (float) –

    Flange thickness.

  • R (float) –

    Shell outer curvature radius.

  • central_angle (float) –

    Angle subtended by the flange segment arc.

  • Zg (float) –

    Load on the shell at rest (e.g., dead weight). Negative for compression.

  • bolt (Bolt) –

    The bolt in the flange segment.

  • Fv (float) –

    Design preload value.

  • Do (float) –

    Bolt hole diameter.

  • washer (Washer) –

    The washer used. None if no washer.

  • nut (Nut) –

    The nut used.

  • gap (Gap) –

    The flange gap.

  • tilt_angle (float) –

    Flange tilt angle in radians.

  • E (float) –

    Young's modulus of the flange material.

  • G (float) –

    Shear modulus of the flange material.

  • s_ratio (float) –

    Ratio of bottom shell thickness to s.

  • r (float) –

    Radius of the rounding between shell and flange.

  • k_shell ((float, None)) –

    Shell stiffness [N/m/m]. Can be a value or None to use the simplified formula of ref. [1].

_bolt_axial_stiffness cached property

The axial stiffness of the bolt.

_bolt_bending_stiffness cached property

The bending stiffness of the bolt.

_early_prying_neutralization_shell_force cached property

Increase of the gap closing force due to early prying at the edges.

_flange_axial_stiffness cached property

The axial stiffness of the flange in the thickness direction.

_gap_stiffness cached property

Stiffness of the design gap.

Returns the gap stiffness as a spring constant per unit of flange-segment arc length, calculated according to ref.[1], sec. 9.1.

_ideal_bolt_force_at_tensile_ULS cached property

Bolt axial force at tensile ULS.

_ideal_shell_force_at_tensile_ULS cached property

Ideal shell force at tensile ULS.

_parallel_gap_neutralization_shell_force cached property

Force necessary to close a parallel imperfection gap.

_polynomial_initial_slope cached property

Initial slope of the Fs(Z) polynomial.

This slope is calculated according to ref. [1], eq. 80.

_prying_lever_ratio cached property

Lever ratio A, as defined in [9].

_stiffness_correction_factor cached property

Stiffness correction factor (alpha-k).

This factor modifies the segment force to account for the effect of the gap spring, evaluated according to ref. [1], sec. 9.2.2.2.

_tilt_neutralization_shell_force cached property

Force that neutralizes the flange tilt.

_total_gap_neutralization_shell_force cached property

Total incremental force to close the imperfection gap.

bolt_force_at_rest cached property

Bolt axial force when no external loads are applied (Fs1).

The bolt force at rest is just the bolt pretension.

bolt_force_at_small_displacement cached property

Intermediate bolt axial force (Fs3).

This auxiliary point gives the polynomial the right initial slope, evaluated according to ref. [1], sec. 8.2.2.3 and ref. [2], sec. G.4.2.

bolt_force_at_tensile_ULS cached property

Bolt axial force at tensile failure (Fs2).

This is the bolt's tensile force at the shell's ULS, assuming failure mode A.

bolt_moment_at_rest cached property

Bolt bending moment when no external loads are applied (Ms1).

bolt_moment_at_small_displacement cached property

Intermediate bolt bending moment (Ms3).

bolt_moment_at_tensile_ULS cached property

Bolt bending moment at tensile failure (Ms2).

gap_angle property

Deprecated. Use gap.angle instead.

gap_height property

Deprecated. Use gap.height instead.

gap_shape_factor property

Deprecated. Use gap.shape_factor instead.

shell_force_at_closed_gap cached property

Shell force necessary to completely close the imperfection gap (Z4).

shell_force_at_rest cached property

Shell force when no external loads are applied (Z1).

The shell loads at rest are normally the self-weights of the structure supported by the flange.

shell_force_at_small_displacement cached property

Intermediate tower shell force (Z3).

This auxiliary point gives the polynomial the right initial slope, evaluated according to ref. [1], sec. 8.2.2.3 and ref. [2], sec. G.4.2.

shell_force_at_tensile_ULS cached property

Ultimate Limit State tower shell force (Z2).

This is the tower shell force that brings the flange segment to its tensile ULS, evaluated according to ref. [1], sec. 8.2.2.2 and ref. [2], sec. G.4.2.

_bolt_moment(Z, Fs)

Calculates the bolt bending moment.

Parameters:
  • Z (float) –

    Shell pull force.

  • Fs (float) –

    Bolt axial force.

Returns:
  • float –

    The bolt bending moment.

failure_mode(fy_sh, fy_fl, gamma_0=1.1)

Determines the failure mode of the flange.

The ultimate shell force is evaluated for each of the failure modes A, B, D and E, and the governing mode is the one with the lowest ultimate shell force.

Parameters:
  • fy_sh (float) –

    Yield stress of the shell material.

  • fy_fl (float) –

    Yield stress of the flange material.

  • gamma_0 (float, default: 1.1 ) –

    Material factor. Defaults to 1.1.

Returns:
  • tuple –

    A tuple containing:

    • str: The failure mode ("A", "B", "D", or "E").
    • tuple: The shell force limits for each failure mode (Zu_A, Zu_B, Zu_D, Zu_E).

validate(fy_sh, fy_fl, gamma_0=1.1)

Verifies the applicability of the polynomial model.

Checks if this T-Flange Segment fails according to failure mode A.

Parameters:
  • fy_sh (float) –

    Yield stress of the shell material.

  • fy_fl (float) –

    Yield stress of the flange material.

  • gamma_0 (float, default: 1.1 ) –

    Material factor. Defaults to 1.1.

Raises:
  • ValueError –

    If the failure mode is not "A".

bolt_markov_matrix(fseg, flange_markov_matrix, bending_factor=0.0, macro_geometric_factor=1.0, mean_factor=1.0, range_factor=1.0, SMF=1.0)

Evaluates the bolt Markov matrix from the shell Markov matrix.

The flange bending moment ranges and means are converted into shell pull forces acting on the flange segment, and then into minimum and maximum bolt stresses through the transfer functions of the flange segment. The bolt stress is the sum of the axial stress and of the bending stress scaled by bending_factor, evaluated on the bolt thread cross-section.

Parameters:
  • fseg (PolynomialFlangeSegment) –

    The flange segment containing the transfer functions. WARNING: Currently only works with PolynomialFlangeSegments.

  • flange_markov_matrix (MarkovMatrix) –

    The Markov matrix of bending moments on the flange.

  • bending_factor (float, default: 0.0 ) –

    Factor for the bending portion of the total stress range. Defaults to 0.0 (axial stress only).

  • macro_geometric_factor (float, default: 1.0 ) –

    Factor for macro geometric influences, affecting dead weight, mean, and range values. If omitted, it defaults to 1.0.

  • mean_factor (float, default: 1.0 ) –

    Factor for the mean values of the tower's bending moments. If omitted, it defaults to 1.0.

  • range_factor (float, default: 1.0 ) –

    Factor for the range of the tower's bending moments. If omitted, it defaults to 1.0.

  • SMF (float, default: 1.0 ) –

    Stress Multiplication Factor to be applied to bolt Markov matrix stress ranges. If omitted, it defaults to 1.0.

Returns:
  • –

    pyflange.fatigue.MarkovMatrix: The bolt's Markov matrix representing the stress history. Its cycles and duration are the same as the flange Markov matrix.

shell_stiffness(shell_radius, shell_thickness, gap_angle)

Calculates the axial stiffness of a flange-segment shell via interpolation.

This function interpolates shell stiffness from a dataset of 2160 FEA results. Values outside the range covered by the dataset are not extrapolated, and nan is returned instead.

Parameters:
  • shell_radius (float) –

    Outer radius of the shell.

  • shell_thickness (float) –

    Thickness of the shell.

  • gap_angle (float) –

    Angular length of the flange gap in radians.

Returns:
  • float –

    The interpolated shell stiffness (K_sh), or nan if the arguments are outside the dataset range.