I-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 steel I-profile (HEB 200) is integrated into a solid concrete-slab of type C30/35.
The concrete_slab
is split into five parts:
concrete-slab left and right of the steel-beam
concrete within each of the two chambers
concrete-cover above the steel-profile
Each of these parts is an individual Rectangle
.
The overall bottom-edge of the concrete-slab is similar to the bottom-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
).
Slim-floor beam with I-profile cross-section#
>>> from m_n_kappa import IProfile, Steel, Rectangle, Concrete, RebarLayer, Reinforcement
>>> concrete_slab_left = Rectangle(top_edge=0.0, bottom_edge=240, width=0.5*(2000-200), left_edge=-1000)
>>> concrete_slab_right = Rectangle(top_edge=0.0, bottom_edge=240, width=0.5*(2000-200), right_edge=1000)
>>> concrete_top_cover = Rectangle(top_edge=0.0, bottom_edge=50, width=200)
>>> concrete_left_chamber = Rectangle(top_edge=50+15.4, bottom_edge=50+200-15.4, width=(200-9.5)/2, left_edge=-200/2)
>>> concrete_right_chamber = Rectangle(top_edge=50+15.4, bottom_edge=50+200-15.4, width=(200-9.5)/2, right_edge=200/2)
>>> concrete_slab = concrete_slab_left + concrete_slab_right + concrete_top_cover + concrete_left_chamber + concrete_right_chamber
>>> concrete = Concrete(f_cm=30+8, )
>>> concrete_section = concrete_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=240-10, width=2000, rebar_horizontal_distance=100, rebar_diameter=10, left_edge=-2000/2+10)
>>> bottom_layer_right = RebarLayer(
... centroid_z=240-10, width=(2000-200-2*10)/2, rebar_horizontal_distance=100, rebar_diameter=10, right_edge=2000/2+10)
>>> bottom_rebar_layer_left = reinforcement + bottom_layer_left
>>> bottom_rebar_layer_right = reinforcement + bottom_layer_right
>>> rebar_layer = top_rebar_layer + bottom_rebar_layer_left + bottom_rebar_layer_right
>>> i_profile = IProfile(
... top_edge=100.0, b_fo=200, t_fo=15, h_w=200-2*15, t_w=15, centroid_y=0.0)
>>> steel = Steel(f_y=355.0, f_u=400, failure_strain=0.15)
>>> steel_section = i_profile + steel
>>> cross_section = concrete_section + rebar_layer + steel_section
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:
m_n_kappa.MKappaByStrainPosition.successful
: ifTrue
equilibrium of horizontal forces has been achieved during computationm_n_kappa.MKappaByStrainPosition.axial_force
: computed axial forces that should be near zero as this is what the computation is aimed atm_n_kappa.MKappaByStrainPosition.moment
: computed momentm_n_kappa.MKappaByStrainPosition.curvature
: computed curvaturem_n_kappa.MKappaByStrainPosition.neutral_axis
: vertical position of the neutral axis (strain \(\varepsilon=0\))
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:
m_n_kappa.Beam.deformation_over_beam_length()
: computes the deformation at each node along the beam under the given loadm_n_kappa.Beam.deformations()
: computes the deformation at the given position for the relevant load-stepsm_n_kappa.Beam.deformations_at_maximum_deformation_position()
: same likem_n_kappa.Beam.deformations()
but at the position of the beam where the maximum deformation occurred under the givenloading
.
See also
Loading: further explanation of loading scenarios
Deformation : further explanation regarding computation of beam-deformation