Skip to content

Eurocode 3 module: ec3

Overview

The ec3 module provides tools for the design of steel structures according to EN 1993-1-1: material properties, standard rolled profiles, bolted and welded connections, section classification and the ULS section and member checks.

Profile properties are those of the catalogue: dimensions in cm, areas in cm², inertia in cm⁴. The checks take strengths in N/mm², forces in kN and moments in kNm, and read the geometry of a profile converting cm to mm.


Materials

Steel

from eurocodepy.ec3 import Steel

steel = Steel('S355')
steel.fyk        # yield strength [MPa] (t ≤ 40 mm)
steel.fuk        # ultimate tensile strength [MPa]
steel.fyk40      # yield strength, 40 mm < t ≤ 80 mm
steel.Es         # elastic modulus [MPa]
steel.fyd        # design yield strength fyk/γM0
steel.gamma_M0, steel.gamma_M1, steel.gamma_M2

Grades (enum SteelEnum): S235, S275, S355, S450, and the others of the database.

Bolts

from eurocodepy.ec3 import Bolt, BoltGrade

bolt = Bolt(20, '8.8')             # M20, grade 8.8
bolt.fub, bolt.fyb                 # ultimate and yield strength [MPa]
bolt.d, bolt.d0                    # nominal and hole diameter [mm]
bolt.A, bolt.Athread               # gross and tensile stress area As [cm²]

Grades: 4.6, 5.6, 6.6, 6.8, 8.8, 9.8, 10.9, 12.9 (BoltGrades, BoltsEnum). Bolt('M20', '8.8') reads the areas of the database; Bolt(20, '8.8') uses those of the standard size when it exists, 0,78·A otherwise, or the athread= you give.

Weld

from eurocodepy.ec3 import Weld, WeldConnection, WeldTypeEnum

weld = Weld(a=5.0, length=200.0, steel_grade='S355')     # throat thickness a, length
group = WeldConnection()
group.add(weld)
group.total_length()
group.area, group.xg, group.yg                      # throat area and centroid [mm², mm]
group.inertia_xx, group.inertia_yy, group.inertia_xy  # about the centroid [mm⁴]
group.w_el_xx_sup, group.w_el_xx_inf                  # elastic moduli to the extreme welds [mm³]

WeldTypeEnum: SLIDE, SHEAR, NORMAL, SHEARNORMAL, SLIDENORMAL, SLIDESHEAR, SLINESHEARNORMAL.


Steel profiles

ProfilesI, ProfilesCHS, ProfilesRHS and ProfilesSHS are dictionaries of the rolled profiles of the database, keyed by name; the profile classes hold the catalogue values.

from eurocodepy.ec3 import ProfilesI, ProfilesCHS, ProfilesRHS, ProfilesSHS

section = ProfilesI['IPE300']
section.h, section.b, section.tw, section.tf        # [cm]
section.A, section.Iy, section.Iz                   # [cm², cm⁴]
section.Wel_y, section.Wpl_y, section.Wel_z, section.Wpl_z    # [cm³]
section.IT, section.Iw, section.Av_z                # torsion, warping, shear area
section.Npl_Rd, section.Mpl_Rd_y, section.Vpl_Rd_z  # S235 resistances of the catalogue

list(ProfilesI)[:3]                                  # 'HEA100', 'HEA1000', 'HEA120'

I profiles: IPE, HEA, HEB, HEM; hollow sections: circular (CHS), rectangular (RHS) and square (SHS), with the enums ProfilesIEnum, ProfilesCHSEnum, ProfilesRHSEnum, ProfilesSHSEnum.

SteelPlate

from eurocodepy.ec3 import SteelPlate

plate = SteelPlate(thickness=10.0, steel=steel, width=200.0)     # mm

Connections

Bolted connections

import numpy as np
from eurocodepy.ec3 import BoltedConnection

conn = BoltedConnection(bolt, outer_plate=plate)
conn.Fv_Rd(), conn.Ft_Rd(), conn.Bp_Rd()           # shear, tension and punching resistance per bolt [kN]
r = conn.check(Fv_Ed=np.array([100.0]), Ft_Ed=np.array([0.0]))
r['ShearRatio'], r['BearingRatio'], r['TensileRatio'], r['PunchingRatio']

PinnedConnection and PinnedConnectionDouble add the bending of the pin (gap, M_Rd).


ULS checks — ec3

Classification (EN 1993-1-1, 5.5)

from eurocodepy.ec3 import classify_section

c = classify_section(section, fy=355.0, n_ed=0.0, m_ed=100.0)     # kN, kNm
c.section_class

Section resistance (6.2)

from eurocodepy.ec3 import section_check_profile, SectionForces

r = section_check_profile(section, 355.0, SectionForces(n_ed=0.0, my_ed=100.0, vz_ed=80.0))
r.utilization

eurocode3_section_check(SectionResistanceInput(...), SectionForces(...)) is the same check for a section described by its dimensions instead of a profile.

Member buckling (6.3, Eqs. 6.61 and 6.62)

from eurocodepy.ec3 import member_check_profile

r = member_check_profile(section, 355.0, n_ed=-200.0, my_ed=80.0,
                         lcr_y=4000.0, lcr_z=4000.0, l_lt=4000.0)      # buckling lengths [mm]
r.utilization

eurocode3_member_check(MemberInput(...)) takes the section properties directly. All the checks accept trace= (a CalcReport) to record the steps.


Compliance

Calculations follow EN 1993-1-1:2005 and EN 1993-1-8 (connections).

Further reading