Stress: Shear Using Jourawski’s Formula#

In this example, we calculate the shear stress in a rectangular cross-section using Jourawski’s formula:

\[\tau(z) = \frac{V \cdot S(z)}{I \cdot t(z)}\]

where:

  • \(V\) is the applied shear force,

  • \(S(z)\) is the first moment of area above (or below) the point \(z\),

  • \(I\) is the second moment of area (moment of inertia),

  • \(t(z)\) is the thickness at the location \(z\).

Note: This method assumes thin-walled cross-sections.
For thick or solid sections, \(\tau(z)\) varies across the thickness and results may be approximate.

You can find the example as an executable Python file here.

Import Modules#

We start by importing the required classes for defining the Stress object.

[1]:
import numpy as np
from sstatics.core.preprocessing import CrossSection
from sstatics.core.preprocessing.geometry.objects import Polygon
from sstatics.core.postprocessing import CrossSectionStress

Create Cross-Section#

We start by creating a basic rectangle with a width of 10 units and a height of 40 units. This geometry is passed into the CrossSection class, which provides access to several geometric properties including area, centroid, and boundary values.

[2]:
# 1. Create a simple rectangular cross-section (width 10, height 40)
rect = Polygon(points=[(0, 0), (10, 0), (10, 40), (0, 40), (0, 0)])
cs = CrossSection(geometry=[rect])

Create Stress-Object#

Using the previously defined cross-section, we create an instance of CrossSectionStress.
This object provides methods for evaluating stresses resulting from axial forces, shear forces, and bending moments.
[3]:
stress = CrossSectionStress(cs)

Specify the Applied Shear Force#

For this example, we apply a shear force of:

\[V = 2000\]

acting along the vertical axis of the cross-section.

[4]:
V = 1000

Determine the Section Boundaries#

We retrieve the top and bottom \(z\)-coordinates of the cross-section, which will be used to evaluate shear stress at specific heights.

[5]:
_, zb = cs.boundary()
z_top, z_bottom = zb[0], zb[1]

Maximum Shear Stress#

By default, the maximum shear stress occurs at the centroid of the section.
We compute this value using:
[6]:
tau_max = stress.shear_stress(v_z=V)
print("Maximum shear stress (at centroid):", tau_max)
Maximum shear stress (at centroid): 3.7500000000000013

Shear Stress Distribution Along the Height#

We can calculate the shear stress at multiple points along the height \(z\) of the section. This allows us to see how \(\tau(z)\) varies along the cross-section:

[7]:
z_values = np.linspace(z_top, z_bottom, 9)
print("\nShear stress distribution along height:")
for z in z_values:
    tau = stress.shear_stress(v_z=V, z=z)
    print(f"z = {z:6.2f}  tau = {tau:10.6f}")

Shear stress distribution along height:
z =   0.00  tau =   0.000000
z =   5.00  tau =   1.640625
z =  10.00  tau =   2.812500
z =  15.00  tau =   3.515625
z =  20.00  tau =   3.750000
z =  25.00  tau =   3.515625
z =  30.00  tau =   2.812500
z =  35.00  tau =   1.640625
z =  40.00  tau =   0.000000