!pip install concreteproperties
import matplotlib.pyplot as plt
import numpy as np
from sectionproperties.pre.library import rectangular_section
from concreteproperties import (
BilinearStressStrain,
Concrete,
ConcreteLinearNoTension,
EurocodeNonLinear,
PrestressedSection,
SteelStrand,
StrandHardening,
add_bar_rectangular_array,
)
from concreteproperties.post import si_kn_m, si_n_mm
from concreteproperties.results import MomentCurvatureResults
concrete_ultimate = Concrete(
name="C50/60 Concrete (Ultimate)",
density=2.4e-6,
stress_strain_profile=ConcreteLinearNoTension(
elastic_modulus=37.0e3,
ultimate_strain=0.0035,
compressive_strength=50 / 1.5,
),
ultimate_stress_strain_profile=BilinearStressStrain(
compressive_strength=50 / 1.5,
compressive_strain=0.00175,
ultimate_strain=0.0035,
),
flexural_tensile_strength=4.1,
colour="lightgrey",
)
strand_ultimate = SteelStrand(
name="Y1860S7 Strand (Ultimate)",
density=7.85e-6,
stress_strain_profile=StrandHardening(
yield_strength=1522,
elastic_modulus=195e3,
fracture_strain=0.035,
breaking_strength=1691,
),
colour="grey",
prestress_stress=1148.6,
)
ax = concrete_ultimate.stress_strain_profile.plot_stress_strain(
units=si_n_mm, render=False
)
ax.legend(loc="center left", bbox_to_anchor=(1, 0.5))
plt.title("Concrete C50/60")
plt.show()
ax = strand_ultimate.stress_strain_profile.plot_stress_strain(
eng=True, units=si_kn_m, render=False
)
plt.title("Strand Y1860S7")
plt.show()
h_rec = 1100 # box depth
b_rec = 1500 # box width
# strand properties
strand_area = 140 # area of each strand
duct_diameter = 72 # diameter of the tendon ducts
strand_d1 = 125 # distance from bottom to layer 1
concrete_sec = rectangular_section(d=h_rec, b=b_rec, material=concrete_ultimate)
PSC_sec = add_bar_rectangular_array(
geometry=concrete_sec,
area=9 * strand_area,
material=strand_ultimate,
n_x=2,
x_s=1500-2*300,
anchor=(300, strand_d1),
)
PSC_sec = PrestressedSection(PSC_sec)
PSC_sec.plot_section()
gross_props_ult = PSC_sec.get_gross_properties()
gross_props_ult.print_results(units=si_kn_m)
ult_res = PSC_sec.ultimate_bending_capacity()
ult_res.print_results(units=si_kn_m)
ult_stress = PSC_sec.calculate_ultimate_stress(ultimate_results=ult_res)
ult_stress.plot_stress(units=si_kn_m)
ult_stress.strand_stresses