Moment-Curvature Analysis#

In this example a moment-curvature analysis is performed for a concrete section.

Setup#

import veux
import numpy as np
import matplotlib.pyplot as plt
import xara
from xara.units.iks import kip, ksi, foot, inch

Materials#

Fcc = 6*ksi

materials = {
    "core": xara.UniaxialMaterial(
        type= "Concrete01",
        Fc  =  Fcc,
        ec0 =  0.004,
        Fcu =  5*ksi,
        ecu =  0.014,
        nu  =  0.2
    ),
    "cover": xara.UniaxialMaterial(
        type= "Concrete01",
        Fc  =  -5*ksi,
        ec0 = -0.002,
        Fcu =  0,
        ecu = -0.006,
        nu  =  0.2
    ),
    "rebar": xara.UniaxialMaterial(
        type= "Steel01",
        nu  = 0.3,       # Poisson's ratio
        E   =  30e3*ksi, # Young's modulus
        Fy  =    60*ksi, # yield strength
        b   =     0.01,  # strain hardening ratio
    )
}
print(materials["cover"].E/ksi)
5000.0

Geometry#

from xsection.library import Rectangle, Circle
from xsection import CompositeSection

h = 24*inch
b = 15*inch
d = (7/8)*inch
r = 0 #d/2

c = 1.5*inch

bar = Circle(d/2, z=2, mesh_scale=1/2, divisions=4, group="rebar", material=materials["rebar"])

shape = CompositeSection([
    Rectangle(    b, h,     z=0, group="cover", material=materials["cover"]),
    Rectangle(b-2*c, h-2*c, z=1, group="core",  material=materials["core"]),
    *bar.linspace([-b/2+c+r,  h/2-c-r], [ b/2-c-r, h/2-c-r], 3), # Top bars
    *bar.linspace([-b/2+c+r,        0], [ b/2-c-r,       0], 2), # Center bars
    *bar.linspace([-b/2+c+r, -h/2+c+r], [ b/2-c-r,-h/2+c+r], 3), # Bottom bars
])


veux.draw_shape(shape)

../../_images/e3a50d9d9a9d47eab22bd1d0c9e528503720441a9bc197e2db9d1b870f10dbcf.png

Section#

section = xara.Section("UniaxialFiber", shape)

Analysis#

from xsection.analysis import SectionInteraction
Pmax = 0.85*shape.area*Fcc

axial = np.linspace(-Pmax, Pmax*0.1, 15)

si = SectionInteraction(section, axial=axial)
fig, ax = plt.subplots(1,2, sharey=True, constrained_layout=True, figsize=(10, 5))
mmax = []

for n, m, k in si.moment_curvature():
    ax[0].plot(k, np.array(m)/(kip*foot), '-')

    ax[1].plot([n/kip], [max(m)/(kip*foot)], 'o')

ax[0].grid(True)
ax[0].axvline(0, color="k", lw=1)
ax[0].axhline(0, color="k", lw=1)
ax[1].grid(True)
ax[1].axvline(0, color="k", lw=1)
ax[1].axhline(0, color="k", lw=1)
ax[0].set_xlabel("Curvature, $\\kappa$")
ax[0].set_ylabel("Moment, $M$")
ax[1].set_xlabel("Axial force, $N$");
../../_images/a508a55a4298b2c49444e48c9e52c758afd78087a24cf21c81edd4ad1d6712ec.png