diff --git a/docs/api/codes/ec2_2004/cracks.md b/docs/api/codes/ec2_2004/cracks.md index 3b081f66..5806064c 100644 --- a/docs/api/codes/ec2_2004/cracks.md +++ b/docs/api/codes/ec2_2004/cracks.md @@ -104,3 +104,9 @@ The following functions are related to calculating crack widths. ```{eval-rst} .. autofunction:: structuralcodes.codes.ec2_2004.As_min_2 ``` + +## Crack widths due to restraint of imposed deformations + +```{eval-rst} +.. autofunction:: structuralcodes.codes.ec2_2004.eps_sm_eps_cm_restraint_end +``` diff --git a/structuralcodes/codes/ec2_2004/__init__.py b/structuralcodes/codes/ec2_2004/__init__.py index 08723763..9f767bd9 100644 --- a/structuralcodes/codes/ec2_2004/__init__.py +++ b/structuralcodes/codes/ec2_2004/__init__.py @@ -45,6 +45,9 @@ k_sargin, n_parabolic_rectangular, ) +from ._cracking_restraint_imposed_deformations import ( + eps_sm_eps_cm_restraint_end, +) from ._reinforcement_material_properties import ( epsud, fyd, @@ -94,6 +97,7 @@ 'Asw_s_required', 'alpha_e', 'eps_sm_eps_cm', + 'eps_sm_eps_cm_restraint_end', 'hc_eff', 'k', 'k1', diff --git a/structuralcodes/codes/ec2_2004/_cracking_restraint_imposed_deformations.py b/structuralcodes/codes/ec2_2004/_cracking_restraint_imposed_deformations.py new file mode 100644 index 00000000..20607e7c --- /dev/null +++ b/structuralcodes/codes/ec2_2004/_cracking_restraint_imposed_deformations.py @@ -0,0 +1,41 @@ +"""Collection of functions from EUROCODE 1992-3:2006.""" + + +def eps_sm_eps_cm_restraint_end( + alpha_e: float, + rho_p_eff: float, + kc: float, + k: float, + fct_eff: float, + Es: float, +) -> float: + """Returns the strain difference (epsilon_sm - epsilon_cm) needed to + compute the crack width for restraint member at its end. + + EN 1992-3:2006, Eq. (M.1). + + Args: + alpha_e (float): Is the ratio Es/Ecm. + rho_p_eff (float): Effective bond ratio between areas given by Eq. + (7.10). + kc (float): is a coefficient which takes account of the stress + distribution within the section immediately prior to cracking and + the change of the lever arm. + k (float): is the coefficient which allow for the effect of + non-uniform self-equilibrating stresses, which lead to a + reduction of restraint forces. + k=1 for webs w<=300mm or flanges widths less than 300mm + k=0.65 for webs w>=800mm or flanges with widths greater than 800mm + Intermediate values may be interpolated. + fct_eff (float): Is the mean value of the tensile strength in MPa of + the concrete effective at the time when the cracks may first be + expected to occur: fct_eff=fctm or fctm(t) if crack is expected + earlier than 28 days. + Es (float): Steel elastic modulus in MPa. + + Returns: + float: The calculated strain difference. + """ + return ( + 0.5 * alpha_e * kc * k * fct_eff * (1 + 1 / (alpha_e * rho_p_eff)) / Es + ) diff --git a/tests/test_ec2_2004/test_ec2_2004_cracking_restrained_imposed_deformations.py b/tests/test_ec2_2004/test_ec2_2004_cracking_restrained_imposed_deformations.py new file mode 100644 index 00000000..50db6975 --- /dev/null +++ b/tests/test_ec2_2004/test_ec2_2004_cracking_restrained_imposed_deformations.py @@ -0,0 +1,32 @@ +"""Tests for EUROCODE 1992-3:2006.""" + +import math + +import pytest + +from structuralcodes.codes.ec2_2004 import ( + _cracking_restraint_imposed_deformations, +) + + +@pytest.mark.parametrize( + 'alpha_e, rho_p_eff, kc, k, fct_eff, Es, expected', + [ + (5.869, 0.01478, 1, 1, 3.2, 200000, 0.000590), + (5.869, 0.009690, 1, 1, 3.2, 200000, 0.000875), + (5.512, 0.01478, 1, 1, 3.8, 200000, 0.000694), + (5.512, 0.009690, 1, 1, 3.8, 200000, 0.001032), + ], +) +def test_eps_sm_eps_cm_m1_returns_expected_values( + alpha_e, kc, k, fct_eff, rho_p_eff, Es, expected +): + """Test that eps_sm_cm_m1 returns expected values.""" + # Assert + assert math.isclose( + _cracking_restraint_imposed_deformations.eps_sm_eps_cm_restraint_end( + alpha_e, rho_p_eff, kc, k, fct_eff, Es + ), + expected, + abs_tol=10e-5, + )