pyflange.flangesegments

This module contains FlangeSegment classes, which model the mechanical behavior of a flange sector containig one bolt only.

Currently, the only two type of FlangeSegment available are an L-Flange segment and a T-Flange segment, implementing a polinomial relation between shell pull 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.

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 connsections in wind turbine support structures. Draft version 2024-09-27

[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

class pyflange.flangesegments.FlangeSegment

Abstract FlangeSegment class, meant to be extended and not to be instatiated directly.

Each FlangeSegment child class must implement the two methods .bolt_axial_force(Z) and .bolt_bending_moment(Z).

class pyflange.flangesegments.PolynomialFlangeSegment

This is a generic FlangeSegment that implements a polynomial relation between shell pull Z and bolt axial force Fs or bolt bending moment Ms.

It is not meant to be instantiated directly, but to be subclassed instead.

The polynomial functions .bolt_axial_force(Z) and .bolt_bending_moment(Z) are defined based on 4 points, through which the polynomials pass. Those points are implementation specific.

The 4 reference points for the Fs(Z) polynomial are:

  • P1 = (Z1, Fs1) representing the flange segment state at rest (no loads applied, other than the self-weight). Each implementatio of this class should define Z1 as shell_force_at_rest property and Fs1 as bolt_force_at_rest property.

  • P2 = (Z2, Fs2) representing the flange segment ultimate tensile limit state (failure state B). Each implementatio of this class should define Z2 as shell_force_at_tensile_ULS property and Fs2 as bolt_force_at_ultimate_ULS property.

  • P3 = (Z3, Fs3) representing the flange segment in small tensile deformation condition. This point is meant to define the initial slope of the polynomial. Each implementatio of this class should define Z3 as shell_force_at_small_displacement property and Fs3 as bolt_force_at_small_displacement property.

  • P4 = (Z4, Fs4) representing the gap closure state. Each implementatio of this class should define Z4 as shell_force_at_closed_gap property, while Fs4 is automatically defined.

The 4 reference points for the Ms(Z) polynomial are:

  • Q1 = (Z1, Ms1) corresponding to P1 as defined above. Each implementation of this class should define Ms1 as bolt_moment_at_rest property.

  • Q2 = (Z2, Ms2) corresponding to P2 as defined above. Each implementation of this class should define Ms2 as bolt_moment_at_tensile_ULS property.

  • Q3 = (Z3, Ms3) corresponding to P3 as defined above. Each implementation of this class should define Ms3 as bolt_moment_at_small_displacement property.

  • Q4 = (Z4, Ms4) corresponding to P4 as defined above. Each implementatio of this class should define Z4 as shell_force_at_closed_gap property, while Ms4 is automatically defined.

bolt_axial_force(shell_pull)

Bolt axial force due to a given shell pull force Z.

The relation between shell pull force Z and bolt axial force Fs, is a polynomial function, as defined in ref.[1], section 8.2 and in ref.[2], section G.4.2.

The passed shell_pull parameter must be either a real number or a numpy.array. If a numpy.array is passed, then the corresponding array of Fs values will be returned.

bolt_bending_moment(shell_pull)

Bolt bending moment due to a given shell pull force Z.

The relation between shell pull force Z and bolt bending moment Ms, is a polynomial function, as defined in ref.[1], section 8.3 and in Ref.[2], section G.4.2.

The passed shell_pull parameter must be either a real number or a numpy.array. If a numpy.array is passed, then the corresponding array of Ms values will be returned.

class pyflange.flangesegments.PolynomialLFlangeSegment(a: float, b: float, s: float, t: float, R: float, central_angle: float, Zg: float, bolt: Bolt, Fv: float, Do: float, washer: Washer, nut: Nut, gap_height: float, gap_angle: float, gap_shape_factor: float = 1.0, tilt_angle: float = 0.0, E: float = 210000000000.0, G: float = 80770000000.0, s_ratio: float = 1.0, r: float = 0.01, k_shell: float = None)

This class provide a PolynomialFlangeSegment implementation for L-Flanges, based on ref. [1] and Ref. [2].

For this particular case of flange, this class defines the polynomial reference points P1, P2, P3, P4, Q1, Q2, Q3, Q4 and inherits the polynomial functions .bolt_axial_force(Z) and .bolt_bending_moment(Z) from the parent class.

The parameters required by this class are:

  • afloat

    Distance between inner face of the flange and center of the bolt hole.

  • bfloat

    Distance between center of the bolt hole and center-line of the shell.

  • sfloat

    Shell thickness.

  • tfloat

    Flange thickness.

  • Rfloat

    Shell outer curvature radius.

  • central_anglefloat

    Angle subtended by the flange segment arc.

  • Zgfloat

    Load applied to the flange segment shell at rest (normally dead weight of tower + RNA, divided by the number of bolts). Negative if compression.

  • boltpyflange.bolts.Bolt

    Bolt object representing the flange segment bolt.

  • Fvfloat

    Applied bolt preload, after preload losses.

  • Dofloat

    Bolt hole diameter.

  • washerpyflange.bolts.Washer

    Washer object representing the fastener wahsers. If this parameter is None, then no washer is considered to be present.

  • nutpyflange.bolts.Nut

    Nut object representing the fastenrr nut.

  • gap_heightfloat

    Maximum longitudinal gap height.

  • gap_anglefloat

    Angle subtended by the gap arc from the flange center.

  • gap_shape_factorfloat [optional]

    A correction factor that applies to Fs2-Fs1 and to Fs3-Fs1 to account for gap shape different that the default sinusoidal shape. If omitted, it defaults to 1.0 (sinusoida shape).

  • tilt_anglefloat [optional]

    Flange tilt angle, in radians. If omitted, it default to 0 rad.

  • Efloat [optional]

    Young modulus of the flange. If omitted, it will be taken equal to 210e9 Pa.

  • Gfloat [optional]

    Shear modulus of the flange. If omitted, it will be taken equal to 80.77e9 Pa.

  • s_ratiofloat [optional]

    Ratio of bottom shell thickness over s. If omitted, it will be take equal to 1.0, threfore, by default, s_botom = s.

  • rfloat [optional]

    Radius of the rouding between the shell and the flange. If omitted, it defaults to 0.01.

  • k_shellfloat [optional]

    Optional individual initial shell stiffness value. This value can be calculated in a separate FE analysis. The unit must be [N/m/m]. If omitted, the interpolated formula from [1] will be used.

The given parameters are also available as attributes (e.g. fseg.a, fseg.Fv, etc.).

This class is designed to be immutable, therefore modifying the attributes after instantiation is not a good idea. If you need a segment with different attributes, just create a new one.

failure_mode(fy_sh, fy_fl, gamma_0=1.1)

Determine the failure mode of this flange

Parameters:

  • fy_shfloat

    Yield stress of the shell material.

  • fy_flfloat

    Yield stress of the flange material.

  • gamma_0float [optional]

    Material factor. If omitted, it defaults to 1.1.

Return value

It returns a tuple of two values: - A string describing the failure mode: eiter “A”, “B”, “D” or “E”. - The list [Zu_A, Zu_B, Zu_D, Zu_E] of the shell pull values at which each failure mode occurs.

validate(fy_sh, fy_fl, gamma_0=1.1)

Check if this flnage segment matches the model assumptions

Check if this L-Flange Segment matches the assumptions, that is, if it fails according to failure mode B. If not, it will throw an exceptions.

The required parameters are:

  • fy_shfloat

    Yield stress of the shell material.

  • fy_flfloat

    Yield stress of the flange material.

  • gamma_0float [optional]

    Material factor. If omitted, it defaults to 1.1.

property shell_force_at_rest

Shell force when no external loads are applied

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

property bolt_force_at_rest

Bolt axial force when no external loads are applied

The bolt force at rest is just the bolt pretension.

property bolt_moment_at_rest

Bolt bending moment when no external loads are applied

property shell_force_at_small_displacement

Intermediate shell pull, between rest and tensile failure

This is an auxiliary point that gives the polynomial the right value of initial slope. It is evaluated according to ref. [1], sec.8.2.2.3 and to ref. [2], section G.4.2.

property bolt_force_at_small_displacement

Intermediate bolt pull, between rest and tensile failuse

This is an auxiliary point that gives the polynomial the right value of initial slope. It is evaluated according to ref. [1], sec.8.2.2.3 and to ref. [2], section G.4.2.

property bolt_moment_at_small_displacement

Intermediate bolt moment, between rest and tensile failuse

This is the bolt bending moment corresponding to the shell pull Z3 (.shell_force_at_small_displacement)`.`

property shell_force_at_tensile_ULS

Ultimate Limit State shell pull

This is shell pull that brings the flange segment system in its tensile ultimate limit state. It is evaluated according to ref. [1], sec.8.2.2.2 and to ref. [2], section G.4.2, where it is referred to as Z2.

property bolt_force_at_tensile_ULS

Bolt axial force at tensile failure

This is the bolt tensile force corresponding to the ultimate shell pull (.shell_force_at_rensile_ULS).

Assuming the failure mode B, in the ULS, the bolt is subjected to its maximum tensile capacity.

In refs. [1] and [2], this value is colled Fs2.

property bolt_moment_at_tensile_ULS

Bolt bending moment at tensile failure

This is the bolt bending moment corresponding to the ultimate shell pull (.shell_force_at_rensile_ULS).

In refs. [1] and [2], this value is colled Ms2.

property shell_force_at_closed_gap

Shell force necessary to completely close the imperfection gap.

class pyflange.flangesegments.PolynomialTFlangeSegment(a: float, b: float, s: float, t: float, R: float, central_angle: float, Zg: float, bolt: Bolt, Fv: float, Do: float, washer: Washer, nut: Nut, gap_height: float, gap_angle: float, gap_shape_factor: float = 1.0, tilt_angle: float = 0.0, E: float = 210000000000.0, G: float = 80770000000.0, s_ratio: float = 1.0, r: float = 0.01, k_shell: float = None)

This class provide a PolynomialFlangeSegment implementation for T-Flanges, based on ref. [1].

For this particular case of flange, this class defines the polynomial reference points P1, P2, P3, P4, Q1, Q2, Q3, Q4 and inherits the polynomial functions .bolt_axial_force(Z) and .bolt_bending_moment(Z) from the parent class.

The parameters required by this class are:

  • afloat

    Distance between inner face of the flange and center of the bolt hole.

  • bfloat

    Distance between center of the bolt hole and center-line of the shell.

  • sfloat

    Shell thickness.

  • tfloat

    Flange thickness.

  • Rfloat

    Shell outer curvature radius.

  • central_anglefloat

    Angle subtended by the flange segment arc.

  • Zgfloat

    Load applied to the flange segment shell at rest (normally dead weight of tower + RNA, divided by the number of bolts). Negative if compression.

  • boltBolt

    Bolt object representing the flange segment bolt.

  • Fvfloat

    Applied bolt preload, after preload losses.

  • Dofloat

    Bolt hole diameter.

  • washerpyflange.bolts.Washer

    Washer object representing the fastener wahsers. If this parameter is None, then no washer is considered to be present.

  • nutpyflange.bolts.Nut

    Nut object representing the fastenrr nut.

  • gap_heightfloat

    Maximum longitudinal gap height.

  • gap_anglefloat

    Angle subtended by the gap arc from the flange center.

  • gap_shape_factorfloat [optional]

    A correction factor that applies to Fs2-Fs1 and to Fs3-Fs1 to account for gap shape different that the default sinusoidal shape. If omitted, it defaults to 1.0 (sinusoida shape).

  • tilt_anglefloat

    Inclination angle of the Flange, where the inclination angle is defined per side of the connection. If omitted, it will be take equal to 0.0

  • Efloat [optional]

    Young modulus of the flange. If omitted, it will be taken equal to 210e9 Pa.

  • Gfloat [optional]

    Shear modulus of the flange. If omitted, it will be taken equal to 80.77e9 Pa.

  • s_ratiofloat [optional]

    Ratio of bottom shell thickness over s. If omitted, it will be take equal to 1.0, threfore, by default, s_botom = s.

  • rfloat [optional]

    Radius of the rouding between the shell and the flange. If omitted, it defualts to 0.01.

  • k_shellfloat [optional]

    Optional individual initial shell stiffness value. This value can be calculated in a separate FE analysis. The unit must be [N/m/m]. If omitted, the interpolated formula from [1] will be used.

The given parameters are also available as attributes (e.g. fseg.a, fseg.Fv, etc.). This class is designed to be immutable, therefore modifying the attributes after instantiation is not a good idea. If you need a segment with different attributes, just create a new one.

failure_mode(fy_sh, fy_fl, gamma_0=1.1)

Determine the failure mode of this flange

Parameters:

  • fy_shfloat

    Yield stress of the shell material.

  • fy_flfloat

    Yield stress of the flange material.

  • gamma_0float [optional]

    Material factor. If omitted, it defaults to 1.1.

Return value

It returns a tuple of two values: - A string describing the failure mode: eiter “A”, “B”, “D” or “E”. - The list [Zu_A, Zu_B, Zu_D, Zu_E] of the shell pull values at which each failure mode occurs.

validate(fy_sh, fy_fl, gamma_0=1.1)

Check if this flnage segment matches the model assumptions

Check if this L-Flange Segment matches the assumptions, that is, if it fails according to failure mode B. If not, it will throw an exceptions.

The required parameters are:

  • fy_shfloat

    Yield stress of the shell material.

  • fy_flfloat

    Yield stress of the flange material.

  • gamma_0float [optional]

    Material factor. If omitted, it defaults to 1.1.

property shell_force_at_rest

Shell force when no external loads are applied

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

property bolt_force_at_rest

Bolt axial force when no external loads are applied

The bolt force at rest is just the bolt pretension.

property bolt_moment_at_rest

Bolt bending moment when no external loads are applied

property shell_force_at_small_displacement

Intermediate shell pull, between rest and tensile failure

This is an auxiliary point that gives the polynomial the right value of initial slope. It is evaluated according to ref. [1], sec.8.2.2.3 and to ref. [2], section G.4.2.

property bolt_force_at_small_displacement

Intermediate bolt pull, between rest and tensile failuse

This is an auxiliary point that gives the polynomial the right value of initial slope. It is evaluated according to ref. [1], sec.8.2.2.3 and to ref. [2], section G.4.2.

property bolt_moment_at_small_displacement

Intermediate bolt moment, between rest and tensile failuse

This is the bolt bending moment corresponding to the shell pull Z3 (.shell_force_at_small_displacement)`.`

property shell_force_at_tensile_ULS

Ultimate Limit State shell pull

This is shell pull that brings the flange segment system in its tensile ultimate limit state. It is evaluated according to ref. [1], sec.8.2.2.2 and to ref. [2], section G.4.2, where it is referred to as Z2.

property bolt_force_at_tensile_ULS

Bolt axial force at tensile failure

This is the bolt tensile force corresponding to the ultimate shell pull (.shell_force_at_rensile_ULS).

Assuming the failure mode B, in the ULS, the bolt is subjected to its maximum tensile capacity.

In refs. [1] and [2], this value is colled Fs2.

property bolt_moment_at_tensile_ULS

Bolt bending moment at tensile failure

This is the bolt bending moment corresponding to the ultimate shell pull (.shell_force_at_rensile_ULS).

In refs. [1] and [2], this value is colled Ms2.

property shell_force_at_closed_gap

Shell force necessary to completely close the imperfection gap

pyflange.flangesegments.bolt_markov_matrix(fseg, flange_markov_matrix, bending_factor=0.0, macro_geometric_factor=1.0, mean_factor=1.0, range_factor=1.0)

Returns the bolt Markov matrix, given the shell Markov matix

Parameters:

  • fsegpyflange.flangesegments.PolynomialFlangeSegment

    The flange segment object that contains the force and moment transfer function that convert shell forces to bolt forces.

    WARNING: Notice that currently this function works only with PolynomialFlangeSegments, while it should be extended to work with any FlangeSegment object.

  • flange_markov_matrixpandas.DataFrame

    The flanges bending moments markov matrix, containg the colums ‘Cycles’, ‘Range’, ‘Mean’.

  • bending_factorfloat [optional]

    The factor that considers the bending portion of the total stress range. If omitted, it will be taken equal to 0.0.

  • macro_geometric_factorfloat [optional]

    The factor that considers macro geometric influences. The factor affects the deadweigt of the tower, the mean values of the markov matrix and the range values of the markov matrix. If omitted, it will be taken equal to 1.0.

  • mean_factorfloat [optional]

    The factor that multiplies the mean values of the bending moments of the tower If omitted, it will be taken equal to 1.0.

  • range_factorfloat [optional]

    The factor that multiplies the range of the bending moments of the tower If omitted, it will be taken equal to 1.0.

pyflange.flangesegments.shell_stiffness(shell_radius, shell_thickness, gap_angle)

Axial stiffness of a flange-segment shell

This function will return the linear interpolation of the flange stiffnesses measured in 2160 different FEA analyses with several values of shell radius, shell thickness and gap angle.