Composite beam#
Units: Millimeter [mm], Newton [N]
Geometries and materials#
This template creates a composite beam with the following parts:
concrete slab 2000x100 with concrete of type C30/35
with top-rebar-layer 10/200,
= 25 mmand bottom-rebar-layer 10/100,
= 25 mmHEB 200 steel profile of steel-grade S355
The concrete slab is an ordinary rectangle of width=2000
and height=100
mm.
The concrete-material-strength is computed in line with EN 1992-1-1, Tab. 3.1 [1]
The geometry-values of the Symmetric steel profile are:
top_edge=100
: applies to the height of the concrete-section as the top of the steel profile is arranged at the bottom of the concrete slab.b_fo=200
: width of the top-flange mm (and the bottom-flange due to the symmetric profile)t_fo=15
: thickness of the top-flange mm (and the bottom-flange due to the symmetric profile)h_w=200-2*15
: height of the steel web mmt_w=9.5
: thickness of the steel web mm
The material-model of the HEB200-profile is isotropic steel using following values:
f_y=355
: yield strength of the steel N/mm²f_y=400
: tensile strength of the steel N/mm²failure_strain=0.15
: failure strain of the steel %
Composite cross-section#
from m_n_kappa import IProfile, Steel, Rectangle, Concrete, RebarLayer, Reinforcement
concrete_slab = Rectangle(top_edge=0.0, bottom_edge=100, width=2000)
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=25, width=2000, rebar_horizontal_distance=200, rebar_diameter=10)
top_rebar_layer = reinforcement + top_layer
bottom_layer = RebarLayer(
centroid_z=75, width=2000, rebar_horizontal_distance=100, rebar_diameter=10)
bottom_rebar_layer = reinforcement + bottom_layer
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 + top_rebar_layer + bottom_rebar_layer + steel_section
As nothing is passed to the compression_stress_strain
-argument of Concrete
, the
'Nonlinear'
stress-strain-relationship is applied (default).
Tension is considered for Concrete
, but may be neglected by passing use_tension=False
.
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 )
See also
Moment-Curvature-Curve: further explanations regarding computation of a single moment-curvature-point
The 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 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