Moment-Curvature#

Units: Millimeter [mm], Newton [N]

In case you have a strain ε 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 ε = 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 Ni=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

The computed sum of axial-forces you may control by calling axial_force, that is near zero.

>>>
m_kappa_point.axial_force

Moment and curvature are extracted by calling the corresponding properties of m_kappa_point.

>>>
m_kappa_point.moment, m_kappa_point.curvature

As well as the vertical position of the neutral_axis.

>>>
m_kappa_point.neutral_axis

Further details regarding the computation are described by MKappaByStrainPosition.

MKappaByStrainPosition serves to compute single moment-curvature points of the Moment-Curvature-Curve.