Plastic Analysis#

This example demonstrates how to perform a plastic analysis in sectionproperties.

Create Geometry and Section#

A monosymmetric I-section will be analysed, first we construct the geometry of the 200 mm deep section.

[1]:
from sectionproperties.pre.library import mono_i_section


geom = mono_i_section(d=200, b_t=50, b_b=100, t_ft=12, t_fb=8, t_w=6, r=8, n_r=8)

Like geometric analyses, plastic analyses in sectionproperties are mesh independent.

[2]:
from sectionproperties.analysis import Section


geom.create_mesh(mesh_sizes=0)
sec = Section(geometry=geom)
sec.plot_mesh(materials=False)
../../_images/examples_analysis_plastic_analysis_5_0.svg
[2]:
<Axes: title={'center': 'Finite Element Mesh'}>

Perfom Plastic Analysis#

A plastic analysis first requires a geometric analysis to be performed. Let’s see what happens if we try to first run a plastic analysis.

[3]:
sec.calculate_plastic_properties()
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
Cell In[3], line 1
----> 1 sec.calculate_plastic_properties()

File ~/checkouts/readthedocs.org/user_builds/sectionproperties/envs/latest/lib/python3.10/site-packages/sectionproperties/analysis/section.py:1120, in Section.calculate_plastic_properties(self, verbose)
   1118 if self.section_props.cx is None:
   1119     err = "Calculate geometric properties before performing a plastic analysis."
-> 1120     raise RuntimeError(err)
   1122 # check if any geometry are overlapped
   1123 if isinstance(self.geometry, sp_geom.CompoundGeometry):

RuntimeError: Calculate geometric properties before performing a plastic analysis.

Now we run the geometric analysis first.

[4]:
sec.calculate_geometric_properties()
sec.calculate_plastic_properties()

Plastic Analysis Results#

We can visualise the plastic centroid by calling the plot_centroids() method.

[5]:
sec.plot_centroids()
../../_images/examples_analysis_plastic_analysis_12_0.svg
[5]:
<Axes: title={'center': 'Centroids'}>

sectionproperties will calculate the plastic section moduli of the cross-section during a plastic analysis. Assuming this section is made from steel (\(f_y = 250\) MPa) and there are no local instabilities, we can compare the yield and plastic capacity of the cross-section.

[6]:
fy = 250  # yield stress in MPa

# calculate yield moment for the top & bottom flanges
my_t = fy * sec.get_z()[0]
my_b = fy * sec.get_z()[1]

# calculate plastic moment about x-axis
mp = fy * sec.get_s()[0]

# print results
print(f"My_t = {my_t / 1e6:.1f} kN.m")
print(f"My_b = {my_b / 1e6:.1f} kN.m")
print(f"Mp = {mp / 1e6:.1f} kN.m")
My_t = 36.4 kN.m
My_b = 43.5 kN.m
Mp = 46.2 kN.m

Thus, the section will yield about it’s top flange first at 36.4 kN.m. The plastic capacity of the section is reached at 46.2 kN.m (i.e. the entire cross-section is at yield stress).

The shape factors, i.e. the ratio between the plastic and elastic section moduli, can also be obtained.

[7]:
print(f"SF_t = {sec.get_sf()[0]:.2f}")
print(f"SF_b = {sec.get_sf()[1]:.2f}")
SF_t = 1.27
SF_b = 1.06

Principal Axis Bending#

Plastic section analysis about principal bending axes are also computed. As angle section is analysed to demonstrate the difference between global and principal axis bending.

[8]:
from sectionproperties.pre.library import angle_section


geom = angle_section(d=150, b=90, t=12, r_r=10, r_t=5, n_r=8)
geom.create_mesh(mesh_sizes=0)
sec = Section(geometry=geom)
sec.calculate_geometric_properties()
sec.calculate_plastic_properties()
sec.plot_centroids()
../../_images/examples_analysis_plastic_analysis_19_0.svg
[8]:
<Axes: title={'center': 'Centroids'}>
[9]:
print(f"Sxx = {sec.get_s()[0]:.3e} mm3")
print(f"S11 = {sec.get_sp()[0]:.3e} mm3")
print(f"Syy = {sec.get_s()[1]:.3e} mm3")
print(f"S22 = {sec.get_sp()[1]:.3e} mm3")
Sxx = 1.135e+05 mm3
S11 = 1.210e+05 mm3
Syy = 4.572e+04 mm3
S22 = 4.376e+04 mm3

As expected, the plastic section moduli about the 11-principal axis is larger than any about the global axes.