T-profile slim-floor beam#

Units: Millimeter [mm], Newton [N]

Geometry and materials#

The code below creates a cross_section that represents a slim-floor-beam where a T-profile of steel is integrated into a solid concrete-slab of type C30/35.

The concrete_slab is split into three parts:

  • concrete-slab above the steel profile

  • concrete-slab left and right of the steel-beam

Each of these parts is an individual Rectangle. The overall bottom-edge of the concrete-slab is similar to the top-edge of the I-profile. The non-linear relationship is used to model the stress-strain-relationship of the used Concrete.

Also integrated into the concrete-slab are rebar_layer s, consisting of a number of reinforcement bars. The bi-linear stress-strain-relationship with hardening is used for the reinforcement-bars as well as for the I-profile (see Reinforcement, Steel).

Cross-section of slim-floor beam with T-shaped steel profile
Cross-section of slim-floor beam with T-shaped steel profile

Geometry: Cross-section of slim-floor beam with T-shaped steel profile#

Defined stress-strain-relationship of structural steel and reinforcement
Defined stress-strain-relationship of structural steel and reinforcement

Material: Bi-linear stress-strain-relationship with hardening of steel#

Defined non-linear stress-strain-relationship of concrete in compression acc. to EN 1992-1-1
Defined non-linear stress-strain-relationship of concrete in compression acc. to EN 1992-1-1

Material: Concrete non-linear stress-strain-relationship in compression acc. EN 1992-1-1 [1]#

Stress-strain-relationship of concrete in tension
Stress-strain-relationship of concrete in tension

Material: Stress-strain-relationship of concrete in tension#

Slim-floor beam with I-profile cross-section#

>>> from m_n_kappa import IProfile, Steel, Rectangle, Concrete, RebarLayer, Reinforcement
>>> t_profile = IProfile(top_edge=50.0, t_w=10.0, h_w=200.0, b_fu=200.0, t_fu=15.0, has_top_flange=False)
>>> steel = Steel(f_y=355.0, f_u=400, failure_strain=0.15)
>>> steel_profile = t_profile + steel
>>> concrete_top_cover = Rectangle(top_edge=0.0, bottom_edge=t_profile.top_edge, width=2000)
>>> concrete_left = Rectangle(
...     top_edge=concrete_top_cover.bottom_edge, bottom_edge=t_profile.top_edge + t_profile.h_w,
...     width=0.5*(2000-t_profile.t_w), left_edge=-1000)
>>> concrete_right = Rectangle(
...     top_edge=concrete_top_cover.bottom_edge, bottom_edge=t_profile.top_edge + t_profile.h_w,
...     width=0.5*(2000-t_profile.t_w), right_edge=1000)
>>> slab = concrete_top_cover + concrete_left + concrete_right
>>> concrete = Concrete(f_cm=30+8, )
>>> concrete_slab = slab + concrete
>>> reinforcement = Reinforcement(f_s=500, f_su=550, failure_strain=0.15)
>>> top_layer = RebarLayer(
...     centroid_z=0.5*50, width=2000, rebar_horizontal_distance=200, rebar_diameter=10)
>>> top_rebar_layer = reinforcement + top_layer
>>> bottom_layer_left = RebarLayer(
...     centroid_z=t_profile.top_edge + t_profile.h_w - 25, width=0.5*(2000 - t_profile.t_w),
...     right_edge=-0.5*t_profile.t_w, rebar_horizontal_distance=200, rebar_diameter=10)
>>> bottom_layer_right = RebarLayer(
...     centroid_z=t_profile.top_edge + t_profile.h_w - 25, width=0.5*(2000 - t_profile.t_w),
...     left_edge=0.5*t_profile.t_w, rebar_horizontal_distance=200, rebar_diameter=10)
>>> rebar_layer = top_layer + bottom_layer_left + bottom_layer_right
>>> rebar = rebar_layer + reinforcement
>>> cross_section = steel_profile + concrete_slab + rebar

Computation#

The cross_section you created above is the basis to do a variety of computations:

In case you want to compute a single curvature-value from a given strain at a given position, you first have to define strain and its position using StrainPosition strain_position is the boundary-condition, that is passed to MKappaByStrainPosition that is computing the curvature.

>>> from m_n_kappa import StrainPosition, MKappaByStrainPosition
>>> strain_position = StrainPosition(strain=-0.002, position=0.0, material="")
>>> computation = MKappaByStrainPosition(
...     cross_section=cross_section,
...     strain_position = strain_position,
...     positive_curvature=True)

After computation you can extract the results as follows:

See also

Moment-Curvature-Curve: further explanations regarding computation of a single moment-curvature-point

The \(M\)-\(\kappa\)-curve is easily computed by passing the created cross_section to MKappaCurve. You only have to decide if you want only the positive moment-curvature-points, the negative moment-curvature-points or both.

>>> from m_n_kappa import MKappaCurve
>>> positive_m_kappa = MKappaCurve(cross_section=cross_section)
>>> negative_m_kappa = MKappaCurve(
...     cross_section=cross_section,
...     include_positive_curvature=False,
...     include_negative_curvature=True)
>>> full_m_kappa = MKappaCurve(
...     cross_section=cross_section,
...     include_positive_curvature=True,
...     include_negative_curvature=True)

The computed points are then stored in the attribute m_kappa_points that returns MKappaCurvePoints-object.

See also

Moment-Curvature-Curve : further explanation regarding computation of the Moment- Curvature-Curve

For computation of the \(M\)-\(\kappa\)-curves in a beam you need the loading-scenario beside your cross_section. And you should decide in how many elements the beam shall be split into (see element_number). In case you also want to consider the effective widths you may set consider_widths=True.

>>> from m_n_kappa import SingleSpanUniformLoad, Beam
>>> loading = SingleSpanUniformLoad(length=8000, load=1.0)
>>> beam = Beam(cross_section=cross_section, element_number=10, load=loading)
>>> beam_consider_widths = Beam(
...     cross_section=cross_section,
...     element_number=10,
...     load=loading,
...     consider_widths=True)

The computed beams allow you to do a number of analysis, like:

See also

Loading: further explanation of loading scenarios

Deformation : further explanation regarding computation of beam-deformation

References#