diff --git a/blueprints/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/__init__.py b/blueprints/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/__init__.py new file mode 100644 index 00000000..9dc81d02 --- /dev/null +++ b/blueprints/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/__init__.py @@ -0,0 +1 @@ +"""Module containing all formulas from 1993-1-1+C2+A1:2016: Chapter 6 - Ultimate limit state.""" diff --git a/blueprints/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/formula_6_5.py b/blueprints/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/formula_6_5.py new file mode 100644 index 00000000..d16c5b1c --- /dev/null +++ b/blueprints/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/formula_6_5.py @@ -0,0 +1,44 @@ +"""Formula 6.5 from NEN-EN 1993-1-1+C2+A1:2016: Chapter 6 - Ultimate limit state.""" +# pylint: disable=arguments-differ +from blueprints.codes.eurocode.nen_en_1993_1_1_c2_a1_2016 import NEN_EN_1993_1_1_C2_A1_2016 +from blueprints.codes.formula import Formula +from blueprints.type_alias import KN + + +class Form6Dot5UnityCheckTensileStrength(Formula): + """Class representing formula 6.5 for the unity check for tensile strength.""" + + label = "6.5" + source_document = NEN_EN_1993_1_1_C2_A1_2016 + + def __init__( + self, + n_ed: KN, + n_t_rd: KN, + ) -> None: + """[N_ed/N_t_rd] Unity check for tensile strength of an element in tension. + + NEN-EN 1993-1-1+C2+A1:2016 art.6.2.3(1) - Formula (6.5) + + Parameters + ---------- + n_ed : KN + [NEd] Design value of the normal tensile force [kN]. + n_t_rd : KN + [Nt,Rd] Design value of the resistance against tenslie force [kN]. + """ + super().__init__() + self.n_ed = n_ed + self.n_t_rd = n_t_rd + + @staticmethod + def _evaluate( + n_ed: KN, + n_t_rd: KN, + ) -> None: + """Evaluates the formula, for more information see the __init__ method""" + if n_t_rd <= 0: + raise ValueError(f"Negative or zero n_t_rd: {n_t_rd}. n_t_rd cannot zero or be negative") + if n_ed < 0: + raise ValueError(f"Negative n_ed: {n_ed}. n_ed cannot be negative (that would be compression).") + return n_ed / n_t_rd diff --git a/tests/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/__init__.py b/tests/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/__init__.py new file mode 100644 index 00000000..1ec97fa0 --- /dev/null +++ b/tests/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/__init__.py @@ -0,0 +1 @@ +"""Module containing all formulas from NEN_EN_1993_1_1_C2_A1_2016: Chapter 6 - Ultimate limit state.""" diff --git a/tests/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/test_formula_6_5.py b/tests/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/test_formula_6_5.py new file mode 100644 index 00000000..a74a060d --- /dev/null +++ b/tests/codes/eurocode/nen_en_1993_1_1_c2_a1_2016/chapter_6_ultimate_limit_state/test_formula_6_5.py @@ -0,0 +1,50 @@ +"""Testing formula 6.5 of NEN-EN 1993-1-1+C2+A1:2016.""" +# pylint: disable=arguments-differ +import pytest + +from blueprints.codes.eurocode.nen_en_1993_1_1_c2_a1_2016.chapter_6_ultimate_limit_state.formula_6_5 import Form6Dot5UnityCheckTensileStrength + +# pylint: disable=arguments-differ + + +class TestForm6Dot5UnityCheckTensileStrength: + """Validation for formula 6.5 from NEN-EN 1993-1-1+C2+A1:2016.""" + + def test_evaluation(self): + """Test the evaluation of the result.""" + # Example values + n_ed = 7 # kN + n_t_rd = 10 # kN + form = Form6Dot5UnityCheckTensileStrength(n_ed=n_ed, n_t_rd=n_t_rd) + + # Expected result, manually calculated + expected = 0.7 + + assert form == expected + + def test_raise_error_when_negative_n_ed_is_given(self): + """Test a negative value for v_rd_s.""" + # Example values + n_ed = -7 + n_t_rd = 10 + + with pytest.raises(ValueError): + Form6Dot5UnityCheckTensileStrength(n_ed=n_ed, n_t_rd=n_t_rd) + + def test_raise_error_when_negative_n__t_rd_is_given(self): + """Test a negative value for v_ccd.""" + # Example values + n_ed = 7 + n_t_rd = -10 + + with pytest.raises(ValueError): + Form6Dot5UnityCheckTensileStrength(n_ed=n_ed, n_t_rd=n_t_rd) + + def test_raise_error_when_zero_n_t_rd_is_given(self): + """Test a negative value for v_td.""" + # Example values + n_ed = 10 + n_t_rd = 0 + + with pytest.raises(ValueError): + Form6Dot5UnityCheckTensileStrength(n_ed=n_ed, n_t_rd=n_t_rd)