simdesign.rcmrf.bnsm.baselib.beam
This module provides a base class for representing beams within the BNSM layer and for building and exporting their OpenSees representations.
- class simdesign.rcmrf.bnsm.baselib.beam.BeamBase(design, bondslip_factor, load_factors, cyclic_model=False, cracked_section=None, load_type='point', yield_mom_curv='empirical')[source]
Bases:
ABCAbstract Base Class for beam implementations in BNSM layer.
This class defines the common interface and core behaviour required to: (1) define a beam member in the OpenSees domain, and (2) export equivalent Python and Tcl commands.
The member is modelled using a force-based beam-column element (
forceBeamColumn) with a plastic-hinge integration scheme (e.g.,HingeRadau). Nonlinear behaviour is concentrated within finite hinge lengths at the element ends.Hinge behaviour is defined through phenomenological moment-rotation relationships implemented using uniaxial materials and section aggregators. The interior region is represented by an elastic section, with optional use of cracked-section (effective) stiffness properties.
A bond-slip modification factor is applied when determining hinge properties (i.e., rotation capacities). Uniformly distributed gravity loads are assigned to the beam element.
Many section-level quantities are stored as
Array3values, corresponding to the (i, mid, j) sections.- Parameters:
design (BeamBase)
bondslip_factor (float)
load_factors (Dict[Literal['G', 'Q'], float])
cyclic_model (bool)
cracked_section (None | bool | float)
load_type (Literal['uniform', 'point'])
yield_mom_curv (Literal['empirical', 'analytical'])
- bondslip_factor
Bondslip factor.
- Type:
float
- ele_load
Uniformly distributed gravity load along the beam.
- Type:
float
- load_type
How the gravity load is applied: ‘uniform’ as a uniformly distributed element load, ‘point’ as equivalent point loads at the element ends (as in O’Reilly and Sullivan, 2019).
- Type:
Literal[‘uniform’, ‘point’]
- jnt_offsets
Rigid joint offset values (dx_i, dy_i, dz_i, dx_j, dy_j, dz_j), specified with respect to the global coordinate system.
- Type:
List[float]
- cracked
Cracked-section (effective) flexural properties of the elastic sections: True for
EIeff = My / phi_ywith the yield moment and curvature of the plastic hinges computed with the empirical or analytical approach (see yield_mom_curv), or a float as the ratio of effective to gross flexural stiffness. If None or False, gross-section properties are used. The class attribute is the method used for the BNSM option'auto'(see the model classes).- Type:
None | bool | float
- yield_mom_curv
Method to compute yield moment and curvature of the plastic hinges:
'empirical'(Panagiotakos and Fardis, 2001) or'analytical'(simplified section analysis).- Type:
Literal[‘empirical’, ‘analytical’]
- cyclic_model
If True, the model parameters will be adjusted for cyclic analysis.
- Type:
bool
- _Iz_eff
Effective beam moment of inertia around local-z.
- Type:
float
Notes
Section view of beams along X direction:
Z (3) |__Y (2) -------------- ---- | y | | | | | | | z--+ | h | | | | | | -------------- ---- |---- b -----| Vectors defining the local axes in Global Coordinate System: vx = np.array([1.0, 0.0, 0.0]) vy = np.array([0.0, 0.0, 1.0]) vz = np.array([0.0, -1.0, 0.0]) vecxz = np.array([0.0, -1.0, 0.0]) Compatibility check: np.allclose(vy, np.cross(vecxz, vx)) np.allclose(vz, np.cross(vx,vy))Section view of beams along Y direction:
Z (3) |__X (1) -------------- ---- | y | | | | | | | +--z | h | | | | | | -------------- ---- |---- b -----| Vectors defining the local axes in Global Coordinate System: vx = np.array([0.0, 1.0, 0.0]) vy = np.array([0.0, 0.0, 1.0]) vz = np.array([1.0, 0.0, 0.0]) vecxz = np.array([1.0, 0.0, 0.0]) Compatibility check: np.allclose(vy, np.cross(vecxz, vx)) np.allclose(vz, np.cross(vx,vy))- property ele_tag: int
- Returns:
Tag of beam-column element representing the beam.
- Return type:
int
- property Ecm_q: float
- Returns:
Elastic young’s modulus of concrete (in base units).
- Return type:
float
Note
Based on quality adjusted concrete strength.
- property Gcm_q: float
- Returns:
Elastic shear modulus of concrete (in base units).
- Return type:
float
Note
Based on quality adjusted concrete strength.
- property rhoh_z_q: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) transverse reinforcement ratio in local-z.
- Return type:
Array3[np.float64]
- property rhoh_y_q: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) transverse reinforcement ratio in local-y.
- Return type:
Array3[np.float64]
- property rhol_top_q: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) top longitudinal reinforcement ratio.
- Return type:
Array3[np.float64]
- property rhol_bot_q: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) bottom longitudinal reinforcement ratio.
- Return type:
Array3[np.float64]
- property rhol_q: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) total longitudinal reinforcement ratio.
- Return type:
Array3[np.float64]
- property rhoh_z_q_: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) transverse reinforcement ratio in local-z. Computed using confined concrete dimensions.
- Return type:
Array3[np.float64]
- property rhoh_y_q_: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) transverse reinforcement ratio in local-y. Computed using confined concrete dimensions.
- Return type:
Array3[np.float64]
- property rhol_top_q_: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) top longitudinal reinforcement ratio. Computed using confined concrete dimensions.
- Return type:
Array3[np.float64]
- property rhol_bot_q_: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) bottom longitudinal reinforcement ratio. Computed using confined concrete dimensions.
- Return type:
Array3[np.float64]
- property rhol_q_: Annotated[ndarray[tuple[Any, ...], dtype[float64]], Literal[3]]
- Returns:
In situ (quality adjusted) total longitudinal reinforcement ratio. Computed using confined concrete dimensions.
- Return type:
Array3[np.float64]
- property vecxz: List[float]
Local x-z plane vector in global coordinates for OpenSees geometric transformation.
- Returns:
(X, Y, Z) components of
vecxzused byops.geomTransfto define the local element axes.- Return type:
List[float]
Notes
For beams along global X (1): [0, -1, 0]
For beams along global Y (2): [1, 0, 0]
- property mz_i_mat_tag: int
Material tag for the i-end flexural hinge about local-z (Mz).
- property mz_j_mat_tag: int
Material tag for the j-end flexural hinge about local-z (Mz).
- property elastic_sec_tag: int
Section tag for the elastic (interior) section.
- property inelastic_sec_i_tag: int
Section tag for the inelastic (hinge) section at i-end.
- property inelastic_sec_j_tag: int
Section tag for the inelastic (hinge) section at j-end.
- property int_tag: int
Beam integration tag used by OpenSees.
- property geo_transf_tag: int
Geometric transformation tag used by OpenSees.
- property clear_length: float
Length of the deformable element, without the rigid joint offsets.
- add_to_ops()[source]
Adds beam components to the OpenSees domain (i.e, elastic beam element and nodes).
- Return type:
None
- to_py()[source]
Gets the Python commands to construct beam components in OpenSees domain (i.e, beam element and nodes).
- Returns:
List of Python commands for constructing the components of beam object in OpenSees.
- Return type:
List[str]
- to_tcl()[source]
Gets the Tcl commands to construct beam components in OpenSees domain (i.e, beam element and nodes).
- Returns:
List of Tcl commands for constructing the components of beam object in OpenSees.
- Return type:
List[str]
- property end_gaps: Tuple[float, float]
Lengths of the beam line at the i and j ends that are not part of the deformable element (rigid joint offsets or links).
- Returns:
Gap lengths at the i and j ends.
- Return type:
Tuple[float, float]
- add_grav_loads_to_ops()[source]
Adds gravity load objects to the OpenSees domain (i.e, uniformly distributed loads, or point loads at both ends).
Notes
Both options apply the total load over the beam line length.
- Return type:
None