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)
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$");