Skip to content

strength_shear

checks.eurocode.steel.strength_shear

Module for checking shear force resistance of steel (Eurocode 3).

Classes:

  • CheckStrengthShearClass12

    Class to perform plastic shear force resistance check for steel of cross-section class 1 and 2 based on EN 1993-1-1:2005 art. 6.2.6.

  • CheckStrengthShearClass34

    Class to perform elastic shear force resistance check for steel cross-section class 3 and 4 (Eurocode 3).

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12 dataclass

CheckStrengthShearClass12(
    steel_cross_section: SteelCrossSection,
    v: KN = 0,
    axis: Literal["Vz", "Vy"] = "Vz",
    gamma_m0: DIMENSIONLESS = 1.0,
    name: str = "Plastic shear strength check for steel",
)

Class to perform plastic shear force resistance check for steel of cross-section class 1 and 2 based on EN 1993-1-1:2005 art. 6.2.6.

Coordinate System:

z (vertical, usually strong axis)
    ↑
    |     x (longitudinal beam direction, into screen)
    |    ↗
    |   /
    |  /
    | /
    |/

←-----O y (horizontal/side, usually weak axis)

Notes

Not all profile shapes have been implemented for this check yet. Currently, only I-profiles are supported.

Parameters:

  • steel_cross_section (SteelCrossSection) –

    The steel cross-section to check.

  • v (KN, default: 0 ) –

    The applied shear force (in kN).

  • axis (Literal['Vz', 'Vy'], default: 'Vz' ) –

    Axis along which the shear force is applied. "Vz" (default) for z (vertical), "Vy" for y (horizontal).

  • gamma_m0 (DIMENSIONLESS, default: 1.0 ) –

    Partial safety factor for resistance of cross-sections, default is 1.0.

Example

from blueprints.checks.eurocode.steel.strength_shear import CheckStrengthShearClass12 from blueprints.materials.steel import SteelMaterial, SteelStrengthClass from blueprints.structural_sections.steel.standard_profiles.heb import HEB

steel_material = SteelMaterial(steel_class=SteelStrengthClass.S355) heb_300_profile = HEB.HEB300.with_corrosion(1.5) v = 100 # Applied shear force in kN

heb_300_s355 = SteelCrossSection(profile=heb_300_profile, material=steel_material) calc = CheckStrengthShearClass12(heb_300_s355, v, axis="Vz", gamma_m0=1.0) calc.report().to_word("shear_strength.docx", language="nl")

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12.plastic_resistance

plastic_resistance() -> Formula

Calculate the shear force plastic resistance of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6(2) - Formula (6.18)).

Returns:

  • Formula

    The calculated shear force resistance.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
121
122
123
124
125
126
127
128
129
130
131
def plastic_resistance(self) -> Formula:
    """Calculate the shear force plastic resistance of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6(2) - Formula (6.18)).

    Returns
    -------
    Formula
        The calculated shear force resistance.
    """
    a_v = self.shear_area()
    f_y = self.steel_cross_section.yield_strength
    return formula_6_18.Form6Dot18DesignPlasticShearResistance(a_v=a_v, f_y=f_y, gamma_m0=self.gamma_m0)

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12.report

report(n: int = 2) -> Report

Returns the report for the plastic shear force check.

Parameters:

  • n (int, default: 2 ) –

    Number of decimal places for numerical values in the report (default is 2).

Returns:

  • Report

    Report of the plastic shear force check.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
def report(self, n: int = 2) -> Report:
    """Returns the report for the plastic shear force check.

    Parameters
    ----------
    n : int, optional
        Number of decimal places for numerical values in the report (default is 2).

    Returns
    -------
    Report
        Report of the plastic shear force check.
    """
    report = Report("Check: shear force steel I-beam")

    # will not generate a report if no shear force is applied, as the check is not necessary in that case
    if self.v == 0:
        report.add_paragraph("No shear force was applied; therefore, no shear force check is necessary.")
        return report

    # generate report if shear force is applied
    axis_label = "(vertical) z" if self.axis == "Vz" else "(horizontal) y"
    report.add_paragraph(
        f"Profile {self.steel_cross_section.profile.name} with steel quality {self.steel_cross_section.material.steel_class.name} "
        f"is loaded with a shear force of {abs(self.v):.{n}f} kN in the {axis_label}-direction."
    )
    report.add_newline(n=2)

    # shear area
    report.add_paragraph("The shear area is calculated as follows:")
    report.add_formula(self.shear_area(), n=n, split_after=[(2, "="), (7, "+"), (3, "=")])
    report.add_newline(n=2)

    # resistance
    report.add_paragraph("The shear resistance is calculated as follows:")
    report.add_formula(self.plastic_resistance(), n=n)
    report.add_newline(n=2)

    # unity check
    report.add_paragraph("The unity check is calculated as follows:")
    report.add_formula(self.shear_strength_unity_check(), n=n)
    report.add_newline(n=2)

    # add overall result based on the unity check
    if self.result().is_ok:
        report.add_paragraph("The check for plastic shear force satisfies the requirements.")
    else:
        report.add_paragraph("The check for plastic shear force does NOT satisfy the requirements.")
    return report

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12.result

result() -> CheckResult

Calculate result of plastic shear force resistance.

Returns:

  • CheckResult

    True if the shear force check passes, False otherwise.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
145
146
147
148
149
150
151
152
153
154
155
def result(self) -> CheckResult:
    """Calculate result of plastic shear force resistance.

    Returns
    -------
    CheckResult
        True if the shear force check passes, False otherwise.
    """
    provided = abs(self.v) * KN_TO_N
    required = self.plastic_resistance()
    return CheckResult.from_comparison(provided=provided, required=required)

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12.shear_area

shear_area() -> Formula

Calculate the shear area of the steel cross-section.

Based on the applied shear force axis and fabrication method (EN 1993-1-1:2005 art. 6.2.6(3) - Formulas (6.18a/d/e)).

Source code in blueprints/checks/eurocode/steel/strength_shear.py
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
def shear_area(self) -> Formula:
    """Calculate the shear area of the steel cross-section.

    Based on the applied shear force axis and fabrication method
    (EN 1993-1-1:2005 art. 6.2.6(3) - Formulas (6.18a/d/e)).
    """
    if isinstance(self.steel_cross_section.profile, IProfile):
        # Get parameters from profile, average top and bottom flange properties
        a = float(self.steel_cross_section.profile.area)
        b1 = self.steel_cross_section.profile.top_flange_width
        b2 = self.steel_cross_section.profile.bottom_flange_width
        tf1 = self.steel_cross_section.profile.top_flange_thickness
        tf2 = self.steel_cross_section.profile.bottom_flange_thickness
        tw = self.steel_cross_section.profile.web_thickness
        hw = self.steel_cross_section.profile.total_height - (
            self.steel_cross_section.profile.top_flange_thickness + self.steel_cross_section.profile.bottom_flange_thickness
        )
        r1 = self.steel_cross_section.profile.top_radius
        r2 = self.steel_cross_section.profile.bottom_radius

        assert all(param is not None for param in [a, b1, b2, tf1, tf2, tw, hw, r1, r2]), (
            "All profile parameters must be defined for I-profile shear area calculation."
        )

        if self.axis == "Vz" and self.steel_cross_section.fabrication_method in ["hot-rolled", "cold-formed"]:
            return formula_6_18_sub_av.Form6Dot18SubARolledIandHSection(a=a, b1=b1, b2=b2, hw=hw, r1=r1, r2=r2, tf1=tf1, tf2=tf2, tw=tw, eta=1.0)
        if self.axis == "Vz" and self.steel_cross_section.fabrication_method == "welded":
            return formula_6_18_sub_av.Form6Dot18SubDWeldedIHandBoxSection(hw_list=[hw], tw_list=[tw], eta=1.0)
        # when axis == "Vy"
        return formula_6_18_sub_av.Form6Dot18SubEWeldedIHandBoxSection(a=a, hw_list=[hw], tw_list=[tw])
    raise NotImplementedError("Profile type is not supported")  # pragma: no cover

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12.shear_strength_unity_check

shear_strength_unity_check() -> Formula

Calculate the unity check for shear strength of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6(2) - Formula (6.17)).

Returns:

  • Formula

    The calculated unity check for shear strength.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
133
134
135
136
137
138
139
140
141
142
143
def shear_strength_unity_check(self) -> Formula:
    """Calculate the unity check for shear strength of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6(2) - Formula (6.17)).

    Returns
    -------
    Formula
        The calculated unity check for shear strength.
    """
    v_ed = abs(self.v * KN_TO_N)
    v_pl_rd = self.plastic_resistance()
    return formula_6_17.Form6Dot17CheckShearForce(v_ed=v_ed, v_c_rd=v_pl_rd)

checks.eurocode.steel.strength_shear.CheckStrengthShearClass12.source_docs staticmethod

source_docs() -> list[str]

List of source document identifiers used for this check.

Returns:

  • list[str]
Source code in blueprints/checks/eurocode/steel/strength_shear.py
79
80
81
82
83
84
85
86
87
@staticmethod
def source_docs() -> list[str]:
    """List of source document identifiers used for this check.

    Returns
    -------
    list[str]
    """
    return [EN_1993_1_1_2005]

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34 dataclass

CheckStrengthShearClass34(
    steel_cross_section: SteelCrossSection,
    v: KN = 0,
    axis: Literal["Vz", "Vy"] = "Vz",
    gamma_m0: DIMENSIONLESS = 1.0,
    name: str = "Elastic shear strength check",
)

Class to perform elastic shear force resistance check for steel cross-section class 3 and 4 (Eurocode 3).

Coordinate System:

z (vertical, usually strong axis)
    ↑
    |     x (longitudinal beam direction, into screen)
    |    ↗
    |   /
    |  /
    | /
    |/

←-----O y (horizontal/side, usually weak axis)

Parameters:

  • steel_cross_section (SteelCrossSection) –

    The steel cross-section to check.

  • v (KN, default: 0 ) –

    The applied shear force (in kN).

  • axis (Literal['Vz', 'Vy'], default: 'Vz' ) –

    Axis along which the shear force is applied. "Vz" (default) for z (vertical), "Vy" for y (horizontal).

  • gamma_m0 (DIMENSIONLESS, default: 1.0 ) –

    Partial safety factor for resistance of cross-sections, default is 1.0.

  • section_properties (SectionProperties | None) –

    Pre-calculated section properties. If None, they will be calculated internally.

Example

from blueprints.checks.eurocode.steel.strength_shear import CheckStrengthShearClass34 from blueprints.materials.steel import SteelMaterial, SteelStrengthClass from blueprints.structural_sections.steel.standard_profiles.heb import HEB

steel_material = SteelMaterial(steel_class=SteelStrengthClass.S355) heb_300_profile = HEB.HEB300.with_corrosion(1.5) v = 100 # Applied shear force in kN

heb_300_s355 = SteelCrossSection(profile=heb_300_profile, material=steel_material) calc = CheckStrengthShearClass34(heb_300_s355, v, axis="Vz", gamma_m0=1.0) calc.report().to_word("shear_strength.docx", language="nl")

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.elastic_resistance

elastic_resistance() -> float

Calculate the shear force elastic resistance of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6).

Returns:

  • float

    The calculated shear force resistance in N.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
292
293
294
295
296
297
298
299
300
301
def elastic_resistance(self) -> float:
    """Calculate the shear force elastic resistance of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6).

    Returns
    -------
    float
        The calculated shear force resistance in N.
    """
    unit_stress = self.shear_unit_stress()
    return float(self.steel_cross_section.yield_strength / np.sqrt(3) / self.gamma_m0 / unit_stress * KN_TO_N)

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.report

report(n: int = 2) -> Report

Returns the report for the elastic shear force check.

Parameters:

  • n (int, default: 2 ) –

    Number of decimal places for numerical values in the report (default is 2).

Returns:

  • Report

    Report of the elastic shear force check.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
def report(self, n: int = 2) -> Report:
    """Returns the report for the elastic shear force check.

    Parameters
    ----------
    n : int, optional
        Number of decimal places for numerical values in the report (default is 2).

    Returns
    -------
    Report
        Report of the elastic shear force check.
    """
    report = Report("Check: shear force steel I-beam (Class 3/4)")

    # will not generate a report if no shear force is applied, as the check is not necessary in that case
    if self.v == 0:
        report.add_paragraph("No shear force was applied; therefore, no shear force check is necessary.")
        return report

    # generate report if shear force is applied
    axis_label = "(vertical) z" if self.axis == "Vz" else "(horizontal) y"
    report.add_paragraph(
        f"Profile {self.steel_cross_section.profile.name} with steel quality {self.steel_cross_section.material.steel_class.name} "
        f"is loaded with a shear force of {abs(self.v):.{n}f} kN in the {axis_label}-direction. "
        f"The shear stress is calculated using elastic theory."
    )
    report.add_newline(n=2)

    # shear stress calculation
    tau_ed = self.shear_stress()
    report.add_paragraph(f"The maximum shear stress is: {tau_ed:.{n}f} N/mm².")
    report.add_newline(n=2)

    # maximum allowed stress
    tau_max = round(self.steel_cross_section.yield_strength / (np.sqrt(3) * self.gamma_m0), n)
    report.add_paragraph("The maximum allowed shear stress is calculated as follows:")
    report.add_paragraph(f"$f_y / (\\sqrt{{3}} \\cdot \\gamma_{{M0}})$ = {tau_max} N/mm².")
    report.add_newline(n=2)

    # unity check
    report.add_paragraph("The unity check is calculated as follows:")
    report.add_formula(self.shear_strength_unity_check(), n=n)
    report.add_newline(n=2)

    # add overall result based on the unity check
    if self.result().is_ok:
        report.add_paragraph("The check for elastic shear force satisfies the requirements.")
    else:
        report.add_paragraph("The check for elastic shear force does NOT satisfy the requirements.")
    return report

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.result

result() -> CheckResult

Calculate result of elastic shear force resistance.

Returns:

  • CheckResult

    True if the shear force check passes, False otherwise.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
316
317
318
319
320
321
322
323
324
325
326
def result(self) -> CheckResult:
    """Calculate result of elastic shear force resistance.

    Returns
    -------
    CheckResult
        True if the shear force check passes, False otherwise.
    """
    provided = abs(self.v) * KN_TO_N
    required = self.elastic_resistance()
    return CheckResult.from_comparison(provided=provided, required=required)

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.shear_strength_unity_check

shear_strength_unity_check() -> Formula

Calculate the unity check for shear strength of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6 - Formula (6.19)).

Returns:

  • Formula

    The calculated unity check for shear strength.

Source code in blueprints/checks/eurocode/steel/strength_shear.py
303
304
305
306
307
308
309
310
311
312
313
314
def shear_strength_unity_check(self) -> Formula:
    """Calculate the unity check for shear strength of the steel cross-section (EN 1993-1-1:2005 art. 6.2.6 - Formula (6.19)).

    Returns
    -------
    Formula
        The calculated unity check for shear strength.
    """
    tau_ed = self.shear_stress()
    return formula_6_19.Form6Dot19CheckDesignElasticShearResistance(
        tau_ed=tau_ed, f_y=self.steel_cross_section.yield_strength, gamma_m0=self.gamma_m0
    )

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.shear_stress

shear_stress() -> float

Calculate the maximum shear stress in the steel cross-section using elastic theory.

Returns:

  • float

    The maximum shear stress in N/mm².

Source code in blueprints/checks/eurocode/steel/strength_shear.py
281
282
283
284
285
286
287
288
289
290
def shear_stress(self) -> float:
    """Calculate the maximum shear stress in the steel cross-section using elastic theory.

    Returns
    -------
    float
        The maximum shear stress in N/mm².
    """
    unit_stress = self.shear_unit_stress()
    return unit_stress * abs(self.v)

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.shear_unit_stress

shear_unit_stress() -> float

Calculate the unit shear stress in the steel cross-section.

Returns:

  • float

    The unit shear stress in N/mm².

Source code in blueprints/checks/eurocode/steel/strength_shear.py
270
271
272
273
274
275
276
277
278
279
def shear_unit_stress(self) -> float:
    """Calculate the unit shear stress in the steel cross-section.

    Returns
    -------
    float
        The unit shear stress in N/mm².
    """
    unit_stress = self.steel_cross_section.profile.unit_stress()
    return float(np.max(np.abs(unit_stress["sig_zxy_vy"] if self.axis == "Vz" else unit_stress["sig_zxy_vx"])))

checks.eurocode.steel.strength_shear.CheckStrengthShearClass34.source_docs staticmethod

source_docs() -> list[str]

List of source document identifiers used for this check.

Returns:

  • list[str]
Source code in blueprints/checks/eurocode/steel/strength_shear.py
260
261
262
263
264
265
266
267
268
@staticmethod
def source_docs() -> list[str]:
    """List of source document identifiers used for this check.

    Returns
    -------
    list[str]
    """
    return [EN_1993_1_1_2005]