!pip install concreteproperties
import matplotlib.pyplot as plt
import numpy as np
from sectionproperties.pre.library import circular_section
from concreteproperties import (
BilinearStressStrain,
Concrete,
ConcreteLinearNoTension,
EurocodeNonLinear,
PrestressedSection,
SteelStrand,
StrandHardening,
add_bar_circular_array,
)
from concreteproperties.post import si_kn_m, si_n_mm
from concreteproperties.results import MomentCurvatureResults
concrete_ultimate = Concrete(
name="C50/60 Concrete (Service)",
density=2.4e-6,
stress_strain_profile=EurocodeNonLinear(
elastic_modulus=37.0e3,
ultimate_strain=0.0035,
compressive_strength=58,
compressive_strain=0.00245,
tensile_strength=4.1,
tension_softening_stiffness=10e3,
),
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=1100,
)
# combine both stress-strain profiles on the same plot
ax = concrete_ultimate.stress_strain_profile.plot_stress_strain(
units=si_n_mm, render=False
)
concrete_ultimate.stress_strain_profile.plot_stress_strain(units=si_n_mm, ax=ax)
ax.lines[0]
plt.title("Concrete C50/60")
plt.show()
# stress-strain profiles of Strand
ax = strand_ultimate.stress_strain_profile.plot_stress_strain(
eng=True, units=si_kn_m, render=False
)
ax.lines[0]
plt.title("Strand Y1860S7")
plt.show()
# box properties
d_box = 1500 # box diameter
t_box = 250 # box thickness
# strand properties
strand_area = 140 # area of each strand
duct_diameter = 72 # diameter of the tendon ducts
# generate a service and ultimate PrestressedConcrete object
conc_secs = []
# construct concrete hollow box
box_outer = circular_section(d=d_box, material=concrete_ultimate, n=24)
box_inner = circular_section(d=d_box - t_box, n=24).align_center(align_to=box_outer)
box = box_outer - box_inner
# add strands
geom = add_bar_circular_array(
geometry=box,
area=12 * strand_area,
material=strand_ultimate,
n_bar=12,
r_array=(d_box-t_box-t_box/2)/2)
conc_sec_ult = PrestressedSection(geom)
# plot each object
conc_sec_ult.plot_section()
gross_props_ult = conc_sec_ult.get_gross_properties()
gross_props_ult.print_results(units=si_n_mm)
# stress due to prestressing only
uncr_stress_p = conc_sec_ult.calculate_uncracked_stress()
uncr_stress_p.plot_stress(units=si_n_mm)
ult_res = conc_sec_ult.ultimate_bending_capacity()
ult_res.print_results(units=si_kn_m)
ult_stress = conc_sec_ult.calculate_ultimate_stress(ultimate_results=ult_res)
ult_stress.plot_stress(units=si_n_mm)
stress_u_1 = conc_sec_ult.calculate_uncracked_stress(n=1000e3, m=3000e6)
stress_u_1.plot_stress()