Moment-Curvature#
Units: Millimeter [mm], Newton [N]
In case you have a strain \(\varepsilon\) at a vertical position
\(z\) and you want to know what curvature leads to this strain
in a cross-section, then you can ease your life and use
MKappaByStrainPosition
.
As cross_section
a composite beam consisting of a HEB200 (S355) and
a rectangular concrete-slab (C30/35) with a top and a bottom
reinforcement layer is defined.
>>> 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
The strain and its position is defined using
StrainPosition
.
For our example the strain is defined to \(\varepsilon\) = 0.0035
and its’ position \(z\) = 0.0 is used, what denotes to the top-edge
of the cross-section.
>>> from m_n_kappa import StrainPosition
>>> strain_position = StrainPosition(
... strain=-0.002, position=0.0, material='Concrete'
... )
To find equilibrium axial-forces strain_position
is to be passed to
MKappaByStrainPosition
as well as the
cross-section
.
By default the positive curvature is computed.
In case you want to compute the negative curvature, you only have to
pass argument positive_curvature=False
.
The finding of the horizontal equilibrium \(\sum N_i = 0\) is
conducted during initialization.
If the property successful=True
then horizontal equilibrium of
axial forces is found.
>>> from m_n_kappa import MKappaByStrainPosition
>>> m_kappa_point = MKappaByStrainPosition(
... cross_section=cross_section,
... strain_position=strain_position,
... positive_curvature=True) # default
>>> m_kappa_point.successful
True
The computed sum of axial-forces you may control by calling
axial_force
, that is near zero.
>>> m_kappa_point.axial_force
-4.12702800380066
Moment and curvature are extracted by calling the corresponding
properties of m_kappa_point
.
>>> m_kappa_point.moment, m_kappa_point.curvature
(532343917.20861864, 3.266182702927817e-05)
As well as the vertical position of the neutral_axis
.
>>> m_kappa_point.neutral_axis
61.2335616806492
Further details regarding the computation are described by
MKappaByStrainPosition
.
MKappaByStrainPosition
serves to compute single
moment-curvature points of the Moment-Curvature-Curve.