Source code for simdesign.rcmrf.bdim.eu_cdm.rebars

"""This module provides the rebars class implementation representing the
detailing of structural members for the``eu_cdm`` design class in the BDIM
layer.
"""
# Imports from installed packages
import numpy as np
from pathlib import Path

# Imports from bdim base library
from ..baselib.rebars import RebarsBase
from .materials import Concrete, Steel

# Imports from utils library
from ....utils.units import mm


[docs] class Rebars(RebarsBase): """Rebars implementation for design class ``eu_cdm``. This class extends ``RebarsBase`` by providing the detailing rules appropriate for the ``eu_cdm`` design class. Attributes ---------- concrete : ~simdesign.rcmrf.bdim.eu_cdm.materials.Concrete Concrete material instance considered in design of beams and columns. steel : ~simdesign.rcmrf.bdim.eu_cdm.materials.Steel Steel material instance considered in design of beams and columns. col_max_leg_dist : float Maximum distance between longitudinal bars within a column section that can be considered to be confined without the need to have an extra stirrup leg around them. _data_path : Path | str Path to the json file containing rebar data. See Also -------- :class:`~bdim.baselib.rebars.RebarsBase` Base class defining the core behaviour and configuration. References ---------- REBAP (1983). Regulamento de Estruturas de Betão Armado e Pré-Esforçado. Decreto-Lei N.° 349-C/83, Lisbon, Portugal. """ concrete: Concrete steel: Steel col_max_leg_dist: float = 150 * mm _data_path = Path(__file__).parent / 'data' / 'rebars.json' @property def beam_max_sbl(self) -> float | np.ndarray: """ Returns ------- float Maximum spacing between longitudinal bars (reinforcement) for beams. """ # Art 91 in REBAP (1983) - defined for tensile reinforcement if self.steel.fsyk == 400: return 100 * mm elif self.steel.fsyk == 500: return 125 * mm def _get_col_max_sbh(self, **kwargs) -> float | np.ndarray: """Get maximum spacing between horizontal bars (transverse reinforcement) for columns. Returns ------- float | np.ndarray Maximum spacing between transverse reinforcement. """ # maximum allowed spacing in current iteration by = kwargs['by'] # column width along y bx = kwargs['bx'] # column width along x dbl = kwargs['dbl'] # long. reinf. diameter max_sbh = np.minimum( np.minimum(12 * dbl, 300 * mm), np.minimum(by, bx), ) return max_sbh def _get_beam_max_sbh(self, **kwargs) -> float | np.ndarray: """Get maximum spacing between horizontal bars (transverse reinforcement) for beams. Returns ------- float | np.ndarray Maximum spacing between transverse reinforcement. """ # maximum allowed spacing in current iteration h = kwargs['h'] # beam depth dbh = kwargs['dbh'] # transverse reinf. diameter dbl = kwargs['dbl'] # long. reinf. diameter max_sbh = np.minimum( np.minimum(200 * mm, h), np.minimum(24 * dbh, 12 * dbl) ) return max_sbh