[{"content":"Derivation of EI · y″ = M(x) A straight beam is subjected to bending. We want a relation between the bending moment at a cross-section and the curvature of the beam axis.\n\\(y\\) is the vertical axis of the cross-section, origin on the neutral axis. \\(\\rho\\) is the radius of curvature of the deformed axis. \\(x\\) runs along the beam.\nIf cross-sections remain plane after deformation, a section rotating by \\(d\\theta\\) produces between two adjacent sections a relative displacement \\(y \\, d\\theta\\) over an arc \\(\\rho \\, d\\theta\\) :\n\\[\\varepsilon(y) = \\frac{y}{\\rho} \\tag{1}\\] Breaks down for beams with depth-to-span ratio above roughly 1/5, where shear deformation is no longer negligible.\nHooke\u0026rsquo;s law (\\(\\sigma = E\\varepsilon\\) ) applied to (1):\n\\[\\sigma(y) = \\frac{Ey}{\\rho} \\tag{2}\\] Requires homogeneous material with no fibre beyond the elastic limit.\nNo net axial force acts on the section. Integrating (2) over the area:\n\\[N = \\int_A \\sigma \\, dA = \\frac{E}{\\rho}\\int_A y \\, dA = 0 \\tag{3}\\] \\(E/\\rho \\neq 0\\) , so \\(\\int_A y \\, dA = 0\\) : the neutral axis passes through the centroid of the section. This anchors the origin of \\(y\\) .\nEach strip \\(dA\\) at distance \\(y\\) from the neutral axis carries a force \\(\\sigma \\, dA\\) with lever arm \\(y\\) :\n\\[dM = \\sigma(y) \\cdot y \\cdot dA \\tag{4}\\] Integrating (4) over the section and substituting (2):\n\\[M = \\int_A \\sigma(y) \\cdot y \\, dA = \\frac{E}{\\rho} \\int_A y^2 \\, dA \\tag{5}\\] \\(E\\) and \\(\\rho\\) do not depend on position over the section and come out of the integral. \\(\\int_A y^2 \\, dA = I\\) , a purely geometric property of the section. For a rectangle \\(b \\times h\\) :\n\\[I = \\int_{-h/2}^{h/2} y^2 \\cdot b \\, dy = b \\left[\\frac{y^3}{3}\\right]_{-h/2}^{h/2} = \\frac{bh^3}{12} \\tag{6}\\] The cube of \\(h\\) comes from integrating \\(y^2\\) over a domain of width \\(h\\) .\n(5) with \\(I\\) :\n\\[\\frac{1}{\\rho} = \\frac{M}{EI} \\tag{7}\\] The exact curvature of a plane curve \\(y(x)\\) (full derivation):\n\\[\\frac{1}{\\rho} = \\frac{y\u0026#39;\u0026#39;}{\\left(1 \u0026#43; y\u0026#39;^2\\right)^{3/2}} \\tag{8}\\] Where it comes from: the tangent angle is \\(\\theta = \\arctan(y\u0026#39;)\\) , giving \\(d\\theta/dx = y\u0026#39;\u0026#39;/(1\u0026#43;y\u0026#39;^2)\\) . The arc length element is \\(ds = \\sqrt{1\u0026#43;y\u0026#39;^2}\\,dx\\) . Curvature is \\(d\\theta/ds = (d\\theta/dx)/(ds/dx)\\) , which yields (8).\nFor small deformations \\(y\u0026#39;^2 \\ll 1\\) , the denominator tends to 1:\n\\[\\frac{1}{\\rho} \\approx y\u0026#39;\u0026#39; \\tag{9}\\] Approximation within 1% for slopes below 6° (\\(y\u0026#39; \u0026lt; 0.1\\) ).\n(9) into (7):\n\\[\\boxed{EI \\cdot y\u0026#39;\u0026#39;(x) = M(x)} \\tag{10}\\] Assumptions, in the order they entered: plane sections (1), linear elastic material (2), no net axial force (3), section geometry known (6), small deformations (9). If any one fails, (10) does not hold.\n","permalink":"https://eng-tools.dev/series-b/b1-euler-bernoulli/","summary":"From plane sections to the moment–curvature relation EI·y″ = M(x), step by step.","title":"Derivation of the Euler-Bernoulli Beam Equation EI·y″ = M(x)"},{"content":"Quick Example What this tool does, in 30 seconds. Given a bearing designation and a radial load, the pipeline computes the maximum subsurface shear stress and tells you how close you are to the material limit.\nInput: Bearing 6206, radial load 1000 N, AISI 52100 steel ( \\(E = 210\\) GPa, \\(\\nu = 0.3\\) ). Ball Ø 9.525 mm, inner groove radius 4.89 mm, pitch diameter 46.0 mm, 9 balls, \\(\\alpha = 0°\\) .\n\\[ \\boxed{\\tau_{\\max} = 519 \\text{ MPa} \\quad \\text{at} \\quad z_{cr} = 88 \\;\\mu\\text{m below the surface}} \\] The maximum subsurface shear stress is 69 % of the shear yield strength of hardened AISI 52100 ( \\(\\tau_y \\approx 750\\) MPa, Tresca). Margin to yield: 31 %. Infinite fatigue life expected at this load level.\nCheck Value Limit Status \\(\\tau_{\\max} / \\tau_y\\) 69 % 100 % Safe — 31 % margin \\(\\tau_{\\max} / \\tau_{fatigue}\\) 76 % 100 % Below fatigue limit \\(F_r / C_0\\) 8.9 % 100 % Light load Node Quantity Value Unit 1 Reduced elastic modulus \\(E^*\\) 115.4 GPa 2 Equivalent radius \\(R_{eq}\\) 3.700 mm 2b Ellipticity \\(k = a/b\\) 12.19 — 3 Contact semi-axes \\(a \\times b\\) 1.368 × 0.112 mm 4 Max contact pressure \\(p_0\\) 1728 MPa 5 Max shear stress \\(\\tau_{\\max}\\) 519 MPa 5 Critical depth \\(z_{cr}\\) 88 μm 📓 Open in Google Colab to run the calculation with your own bearing data.\nPipeline Overview The pipeline takes bearing geometry, material properties, and radial load as input. It outputs the maximum subsurface shear stress \\(\\tau_{\\max}\\) and its depth \\(z_{cr}\\) , which govern fatigue initiation at the ball–raceway contact.\nThe pipeline is linear and non-iterative. The only potentially iterative step (elliptic integrals in Node 2b) is handled by the Hamrock-Brewe closed-form approximation.\nNode 1 — Reduced Elastic Modulus \\(E^*\\) Purpose: combine the elastic properties of ball and raceway into a single equivalent modulus.\nSymbol Description Unit \\(E_1\\) Young\u0026rsquo;s modulus, ball Pa \\(\\nu_1\\) Poisson\u0026rsquo;s ratio, ball — \\(E_2\\) Young\u0026rsquo;s modulus, raceway Pa \\(\\nu_2\\) Poisson\u0026rsquo;s ratio, raceway — \\[ \\frac{1}{E^*} = \\frac{1 - \\nu_1^2}{E_1} \u0026#43; \\frac{1 - \\nu_2^2}{E_2} \\] Harris convention (used in Nodes 3–4):\n\\[E\u0026#39; = 2 \\, E^*\\] Output Description Unit \\(E^*\\) Reduced elastic modulus Pa \\(E\u0026#39;\\) Harris reduced modulus Pa Node 2 — Curvatures and Equivalent Radius Purpose: compute the four principal curvatures at the ball–inner-race contact and combine them into an equivalent radius \\(R_{eq}\\) and an ellipticity parameter.\nInput Description Unit \\(D_w\\) Ball diameter m \\(r_i\\) Inner race groove radius m \\(D_m\\) Pitch (mean) diameter m \\(\\alpha\\) Contact angle rad The two principal planes at the contact point are:\nPlane I (rolling direction): circumferential plane through ball centre. Plane II (transverse direction): axial cross-section through ball centre. Ball (sphere): \\[\\rho_{1x} = \\rho_{1y} = \\frac{2}{D_w}\\] Inner raceway: \\[ \\rho_{2x} = \\frac{2}{D_m - D_w \\cos\\alpha} \\qquad\\text{(convex, rolling)} \\] \\[ \\rho_{2y} = -\\frac{1}{r_i} \\qquad\\text{(concave, transverse)} \\] The negative sign indicates that the groove is concave — it wraps around the ball.\nCurvature sums: \\[ \\frac{1}{R_x} = \\rho_{1x} \u0026#43; \\rho_{2x} \\qquad \\frac{1}{R_y} = \\rho_{1y} \u0026#43; \\rho_{2y} \\] \\[ \\Sigma\\rho = \\frac{1}{R_x} \u0026#43; \\frac{1}{R_y} \\qquad R_{eq} = \\frac{1}{\\Sigma\\rho} \\] Ellipticity (Hamrock-Brewe 1983) The ratio \\(R_y/R_x\\) determines the shape of the contact ellipse. The Hamrock-Brewe closed-form approximation replaces iterative evaluation of complete elliptic integrals:\n\\[ k = 1.0339\\left(\\frac{R_y}{R_x}\\right)^{0.6360} \\] \\[ \\mathcal{E} = 1.0003 \u0026#43; \\frac{0.5968}{R_y/R_x} \\qquad \\mathcal{F} = 1.5277 \u0026#43; 0.6023 \\, \\ln\\!\\left(\\frac{R_y}{R_x}\\right) \\] where \\(k = a/b\\) is the ellipticity ratio, \\(\\mathcal{E}\\) the complete elliptic integral of the second kind, \\(\\mathcal{F}\\) the first kind. Accurate to \u0026lt; 1 % for \\(R_y/R_x \u0026gt; 1\\) .\nWhy Hamrock-Brewe? Exact evaluation requires iterative root-finding (the argument depends on \\(k\\) , which depends on the integrals). The Hamrock-Brewe formulas break this circularity, keeping the pipeline non-iterative and scipy-free.\nOutput Description Unit \\(R_{eq}\\) Equivalent radius m \\(k\\) Ellipticity ratio \\(a/b\\) — \\(\\mathcal{E}\\) Elliptic integral, 2nd kind — \\(\\mathcal{F}\\) Elliptic integral, 1st kind — Node 3 — Contact Ellipse Semi-Axes Purpose: compute the dimensions of the elliptical contact patch.\nThe load on the most-loaded ball follows the Stribeck equation (zero clearance):\n\\[ Q_{\\max} = \\frac{5 \\, F_r}{Z \\, \\cos\\alpha} \\] Contact semi-axes (Hamrock-Dowson):\n\\[ b = \\left(\\frac{6 \\, \\mathcal{E} \\, Q \\, R_{eq}}{\\pi \\, k \\, E\u0026#39;}\\right)^{1/3} \\qquad a = k \\, b \\] where \\(a\\) is the major semi-axis (transverse) and \\(b\\) the minor (rolling direction).\nOutput Description Unit \\(Q_{\\max}\\) Load on most-loaded ball N \\(a\\) Major semi-axis m \\(b\\) Minor semi-axis m Node 4 — Maximum Contact Pressure Purpose: peak Hertzian pressure at the centre of the contact ellipse.\n\\[ p(x, y) = p_0 \\sqrt{1 - \\frac{x^2}{a^2} - \\frac{y^2}{b^2}} \\] \\[ p_0 = \\frac{3 \\, Q}{2 \\, \\pi \\, a \\, b} \\] Output Description Unit \\(p_0\\) Maximum contact pressure Pa Node 5 — Maximum Shear Stress and Critical Depth Purpose: maximum subsurface shear stress (Tresca) and the depth where fatigue cracks initiate.\nFor \\(k \\gg 1\\) (highly elliptical, typical of ball bearings), the stress field approximates 2D plane-strain Hertz contact in the \\(b\\) -direction (\u0026lt; 1 % error for \\(k \u0026gt; 5\\) ).\nSubsurface stresses along the \\(z\\) -axis:\n\\[ \\frac{\\sigma_x}{p_0} = -\\left[\\frac{1 \u0026#43; 2\\zeta^2}{\\sqrt{1\u0026#43;\\zeta^2}} - 2\\zeta\\right] \\qquad \\frac{\\sigma_z}{p_0} = -\\frac{1}{\\sqrt{1\u0026#43;\\zeta^2}} \\qquad \\zeta = z/b \\] \\[ \\sigma_y = \\nu \\, (\\sigma_x \u0026#43; \\sigma_z) \\qquad \\tau = \\frac{\\sigma_x - \\sigma_z}{2} \\] Analytical maximum:\n\\[ \\tau_{\\max} = 0.300 \\, p_0 \\qquad\\text{at}\\qquad \\zeta_{cr} = 0.786 \\qquad\\Rightarrow\\qquad z_{cr} = 0.786 \\, b \\] Output Description Unit \\(\\tau_{\\max}\\) Maximum subsurface shear stress Pa \\(z_{cr}\\) Critical depth below surface m Numerical Verification — Bearing 6206 Input Data Parameter Symbol Value Unit Source Bore diameter \\(d\\) 30 mm Catalog Outer diameter \\(D\\) 62 mm Catalog Ball diameter \\(D_w\\) 9.525 mm Catalog Number of balls \\(Z\\) 9 — Catalog Inner groove radius \\(r_i\\) 4.89 mm Catalog ( \\(f_i = 0.513\\) ) Pitch diameter \\(D_m\\) 46.0 mm \\((d\u0026#43;D)/2\\) Contact angle \\(\\alpha\\) 0 ° Deep groove, radial Young\u0026rsquo;s modulus \\(E\\) 210 GPa AISI 52100 Poisson\u0026rsquo;s ratio \\(\\nu\\) 0.3 — AISI 52100 Radial load \\(F_r\\) 1000 N Test condition Static load rating \\(C_0\\) 11.2 kN SKF catalog Node-by-Node Computation Node 1: \\[ \\frac{1}{E^*} = 2 \\times \\frac{1 - 0.3^2}{210\\,000} = 8.667 \\times 10^{-6} \\text{ MPa}^{-1} \\qquad\\Rightarrow\\qquad E^* = 115.4 \\text{ GPa}, \\quad E\u0026#39; = 230.8 \\text{ GPa} \\] Node 2: Ball radius \\(r_{ball} = 4.7625\\) mm. Curvatures: \\(\\rho_{1x} = \\rho_{1y} = 209.97\\) m \\(^{-1}\\) .\nInner race: \\(R_{2x} = (46.0 - 9.525)/2 = 18.238\\) mm → \\(\\rho_{2x} = 54.83\\) m \\(^{-1}\\) . \\(\\rho_{2y} = -1/4.89 = -204.50\\) m \\(^{-1}\\) (concave groove).\n\\(1/R_x = 264.81\\) m \\(^{-1}\\) → \\(R_x = 3.776\\) mm. \\(1/R_y = 5.475\\) m \\(^{-1}\\) → \\(R_y = 182.7\\) mm. \\(\\Sigma\\rho = 270.3\\) m \\(^{-1}\\) , \\(R_{eq} = 3.700\\) mm, \\(R_y/R_x = 48.37\\) .\nHamrock-Brewe: \\(k = 12.19\\) , \\(\\mathcal{E} = 1.013\\) , \\(\\mathcal{F} = 3.864\\) .\nNode 3: \\(Q_{\\max} = 5 \\times 1000 / 9 = 555.6\\) N.\n\\[ b = \\left(\\frac{6 \\times 1.013 \\times 555.6 \\times 3.700 \\times 10^{-3}} {\\pi \\times 12.19 \\times 230\\,769}\\right)^{1/3} = 0.1122 \\text{ mm} \\] \\(a = 12.19 \\times 0.1122 = 1.368\\) mm. Contact area: \\(A = 0.482\\) mm².\nNode 4:\n\\[ p_0 = \\frac{3 \\times 555.6}{2\\pi \\times 1.368 \\times 0.112} = 1728 \\text{ MPa} \\] Cross-check: sphere-on-flat gives \\(p_0 = 3981\\) MPa — groove conformity reduces pressure by 2.3×.\nNode 5: \\(\\tau_{\\max} = 0.300 \\times 1728 = 518.5\\) MPa at \\(z_{cr} = 0.786 \\times 0.112 = 88\\) μm. Numerical scan confirms \\(\\tau_{\\max} = 518.9\\) MPa at \\(\\zeta = 0.786\\) (deviation \u0026lt; 0.1 %).\nVerification Summary Quantity Computed Unit Check \\(E^*\\) 115.4 GPa Matches \\(E/(2(1-\\nu^2))\\) for same-steel contact \\(R_{eq}\\) 3.700 mm \\(R_x \\ll R_y\\) confirms high ellipticity \\(k\\) 12.19 — Typical range 8–15 for DGBB \\(a\\) 1.368 mm Contact patch ≈ grain of rice \\(b\\) 0.112 mm \\(a/b = k\\) ✓ \\(p_0\\) 1728 MPa Well below 4600 MPa ( \\(C_0\\) limit) at 9 % \\(C_0\\) \\(\\tau_{\\max}\\) 519 MPa 69 % of \\(\\tau_y\\) — safe, consistent with light load \\(z_{cr}\\) 88 μm ≈ \\(0.8 b\\) , matches 2D Hertz theory Graphical Results Figure 1 — Left: Hertzian pressure distribution on the contact ellipse (1728 MPa peak, ellipse ≈ 2.7 × 0.22 mm). Right: subsurface shear stress profile showing the maximum at \\(z_{cr} = 88\\) μm.\nFigure 2 — Maximum contact pressure \\(p_0\\) and subsurface shear stress \\(\\tau_{\\max}\\) vs radial load. Horizontal lines: shear yield and fatigue limits. Vertical lines: current load (1000 N) and static rating ( \\(C_0 = 11.2\\) kN).\nHow to Use the Notebook Requirements Only numpy and matplotlib — both pre-installed in Google Colab.\nRunning Open hertz_contact_stress_pipeline.ipynb directly in Colab. Edit the Input Parameters cell with your bearing data. Run all cells (Runtime → Run all). Adapting to Other Bearings Look up \\(D_w\\) , \\(Z\\) , \\(d\\) , \\(D\\) from manufacturer catalog. Compute \\(r_i = f_i \\times D_w\\) (typical \\(f_i = 0.515\\) –\\(0.52\\) ; use 0.52 if unknown). Update E1, E2, nu1, nu2 if material differs from steel. Set alpha \u0026gt; 0 for angular contact bearings. Limitations Inner race contact only. Outer race (less critical for DGBB) not computed. Zero clearance assumed. Stribeck factor assumes no radial clearance or preload. Plane-strain approximation for \\(\\tau_{\\max}\\) . Valid for \\(k \u0026gt; 5\\) . Static/quasi-static only. No centrifugal or gyroscopic effects. References Anoopnath, P. R., Suresh Babu, V., \u0026amp; Vishwanath, A. K. (2018). Hertz Contact Stress of Deep Groove Ball Bearing. Materials Today: Proceedings, 5(1), 3283–3288. Hamrock, B. J. \u0026amp; Brewe, D. E. (1983). Simplified equation for elliptical-contact deformation between two elastic solids. ASME J. Lub. Tech., 105(2), 171–177. Harris, T. A. \u0026amp; Kotzalas, M. N. (2006). Rolling Bearing Analysis, 5th ed. CRC Press. Johnson, K. L. (1985). Contact Mechanics. Cambridge University Press, §4.2. Budynas, R. G. \u0026amp; Nisbett, J. K. (2020). Shigley\u0026rsquo;s Mechanical Engineering Design, 11th ed. McGraw-Hill, §3.19. SKF Group. Product data: 6206 Deep Groove Ball Bearing. ","permalink":"https://eng-tools.dev/series-a/a2-hertz-contact/","summary":"Given a bearing and a radial load → maximum subsurface shear stress → engineering verdict. Pipeline, notebook, and verification case for bearing 6206.","title":"Hertz Contact Stress in Deep Groove Ball Bearings — Analytical Pipeline"},{"content":"Where \\(P_{cr} = \\dfrac{\\pi^2 EI}{L^2}\\) comes from Straight column, centred axial load, pinned at both ends. The goal is the value of \\(P\\) at which the straight configuration ceases to be the only equilibrium shape and the column can sustain a laterally deflected one — the critical load.\nAxis \\(x\\) along the column, origin at the lower pin, \\(x = L\\) at the upper pin. Axis \\(y\\) perpendicular, in the plane of buckling. \\(P \u0026gt; 0\\) denotes compression.\nThe column is in equilibrium in the straight configuration under any \\(P\\) . The question is whether a \\(P\\) exists for which a slightly deflected configuration \\(y(x) \\neq 0\\) is also an equilibrium.\nCut the column at a generic point \\(x\\) . Consider the segment from \\(x\\) to \\(L\\) . In the deflected configuration the section at \\(x\\) is displaced laterally by \\(y(x)\\) with respect to the line of action of \\(P\\) . That displacement is the lever arm of the moment.\nEquilibrium on the deflected geometry (second-order analysis) gives the bending moment at section \\(x\\) :\n\\[M(x) = -P \\cdot y(x) \\tag{1}\\] Sign: \\(P\\) acting on a positive lateral displacement \\(y\\) produces a moment that curves the column back toward \\(y = 0\\) — negative under the convention \\(y\u0026#39;\u0026#39; \u0026gt; 0\\) for concavity toward positive \\(y\\) .\nValidity of (1): the moment is written on the deflected geometry, but the lever arm \\(y(x)\\) does not account for the axial shortening of the column. This is consistent as long as rotations are small, \\(y\u0026#39;^2 \\ll 1\\) .\nThe Euler-Bernoulli moment–curvature relation, with linearised curvature (\\(\\kappa \\approx y\u0026#39;\u0026#39;\\) , curvature of the deformed axis, valid for \\(y\u0026#39;^2 \\ll 1\\) ; hypothesis: plane sections remain plane and perpendicular to the deformed axis):\n\\[EI \\cdot y\u0026#39;\u0026#39;(x) = M(x) \\tag{2}\\] \\(E\\) is the Young\u0026rsquo;s modulus (linear elastic material, \\(\\sigma = E\\varepsilon\\) ); \\(I\\) is the second moment of area of the cross-section.\n(1) into (2), rearranging:\n\\[EI \\cdot y\u0026#39;\u0026#39;(x) \u0026#43; P \\cdot y(x) = 0 \\tag{3}\\] The cross-section is constant along \\(x\\) , so \\(EI\\) in (3) is a constant coefficient.\nDefine:\n\\[k^2 = \\frac{P}{EI} \\tag{4}\\] with \\(k \u0026gt; 0\\) (real, since \\(P \u0026gt; 0\\) and \\(EI \u0026gt; 0\\) ). Dividing (3) by \\(EI\\) :\n\\[y\u0026#39;\u0026#39;(x) \u0026#43; k^2 \\, y(x) = 0 \\tag{5}\\] (5) is a linear, homogeneous, second-order ODE with constant coefficients. Characteristic equation \\(\\lambda^2 \u0026#43; k^2 = 0\\) , roots \\(\\lambda = \\pm ik\\) . General solution:\n\\[y(x) = A \\sin(kx) \u0026#43; B \\cos(kx) \\tag{6}\\] \\(A\\) and \\(B\\) are constants fixed by the boundary conditions.\nBoundary condition at the lower pin — zero displacement:\n\\[y(0) = 0 \\tag{7}\\] (7) into (6): \\(A \\sin(0) \u0026#43; B \\cos(0) = B = 0\\) . There remains:\n\\[y(x) = A \\sin(kx) \\tag{8}\\] Boundary condition at the upper pin — zero displacement:\n\\[y(L) = 0 \\tag{9}\\] (9) into (8):\n\\[A \\sin(kL) = 0 \\tag{10}\\] (10) is satisfied if \\(A = 0\\) or \\(\\sin(kL) = 0\\) .\n\\(A = 0\\) gives \\(y(x) = 0\\) for all \\(x\\) : the straight configuration, which is a solution for every \\(P\\) .\nFor a deflected configuration (\\(A \\neq 0\\) ):\n\\[\\sin(kL) = 0 \\tag{11}\\] (11) requires \\(kL = n\\pi\\) with \\(n = 1, 2, 3, \\ldots\\) (\\(n = 0\\) gives \\(k = 0\\) , i.e. \\(P = 0\\) ; negative \\(n\\) adds no independent solutions).\nHence:\n\\[k = \\frac{n\\pi}{L} \\tag{12}\\] (12) into (4), solving for \\(P\\) :\n\\[P_n = \\frac{n^2 \\pi^2 EI}{L^2}, \\qquad n = 1, 2, 3, \\ldots \\tag{13}\\] (13) is an infinite sequence of loads, each associated with a buckling mode of \\(n\\) half-sine-waves over \\([0, L]\\) . The corresponding deflected shape follows from (8) and (12):\n\\[y_n(x) = A \\sin\\!\\left(\\frac{n\\pi x}{L}\\right) \\tag{14}\\] The amplitude \\(A\\) remains undetermined: the linearised stability analysis identifies at which load the column buckles, not by how much. (14) defines the shape, not the amplitude.\nValidity of (13)–(14): the entire derivation assumes small rotations. As \\(A\\) grows, the linearisation of curvature breaks down and the exact (elliptic-integral) elastica governs.\nThe critical load is the lowest in the sequence, \\(n = 1\\) :\n\\[\\boxed{P_{cr} = \\frac{\\pi^2 EI}{L^2}} \\tag{15}\\] with associated deflected shape:\n\\[y_{cr}(x) = A \\sin\\!\\left(\\frac{\\pi x}{L}\\right) \\tag{16}\\] Validity of (15): the critical stress \\(\\sigma_{cr} = P_{cr}/A_{s}\\) (where \\(A_s\\) is the cross-sectional area) must remain below the yield stress \\(f_y\\) . Substituting (15): \\(\\sigma_{cr} = \\pi^2 E / \\lambda^2\\) , where \\(\\lambda = L / \\sqrt{I/A_s}\\) is the slenderness ratio. For stocky columns (\\(\\lambda\\) below the limiting value \\(\\lambda_{lim} = \\pi\\sqrt{E/f_y}\\) ), material yielding precedes buckling and (15) overestimates the actual failure load. This is the domain where the Euler hyperbola is replaced by empirical or semi-empirical column curves (Johnson parabola, EC3 curves a/b/c/d).\nThe reason \\(n = 1\\) governs: in a real column the load increases from zero. \\(P_1\\) is the first value of \\(P\\) that admits a deflected equilibrium. Higher modes (\\(n \\geq 2\\) ) require higher loads and are not reached unless intermediate restraints prevent the lower modes.\nAssumptions, in the order they entered Assumption Where it entered Formula Equilibrium written on the deflected geometry (second-order analysis) Lever arm proportional to \\(y(x)\\) (1) Small rotations (\\(y\u0026#39;^2 \\ll 1\\) ) Linearised curvature \\(\\kappa \\approx y\u0026#39;\u0026#39;\\) ; consistency of the lever arm in (1) (1), (2) Plane sections remain plane and perpendicular to the deformed axis (Euler-Bernoulli) Moment–curvature relation (2) Linear elastic material (\\(\\sigma = E\\varepsilon\\) ) \\(E\\) constant in the constitutive law (2) Constant cross-section along \\(x\\) (\\(I = \\text{const}\\) ) \\(EI\\) treated as a constant coefficient (3) Pinned supports at both ends \\(y(0) = 0\\) , \\(y(L) = 0\\) (7), (9) Column sufficiently slender (\\(\\sigma_{cr} \u0026lt; f_y\\) ) Elastic buckling precedes yielding (15) If any of these fails, (15) does not hold. Changed end restraints (fixed-free, fixed-pinned, fixed-fixed) replace \\(kL = n\\pi\\) with a different transcendental equation and alter the numerical coefficient \\(\\pi^2\\) in (15) — conventionally expressed through the effective length \\(L_0\\) . If \\(EI\\) varies along \\(x\\) , (5) has non-constant coefficients and the solution is no longer sinusoidal. If rotations are not small, the exact curvature \\(\\kappa = y\u0026#39;\u0026#39;/(1\u0026#43;y\u0026#39;^2)^{3/2}\\) replaces \\(y\u0026#39;\u0026#39;\\) and (5) becomes nonlinear.\n","permalink":"https://eng-tools.dev/series-b/b2-euler-buckling/","summary":"From equilibrium on the deflected geometry to the Euler critical load Pcr = π²EI/L², step by step.","title":"Derivation of the Euler Critical Buckling Load Pcr = π²EI/L²"},{"content":"Curvature of a plane curve: \\(\\kappa = \\dfrac{y\u0026#39;\u0026#39;}{(1 \u0026#43; y\u0026#39;^2)^{3/2}}\\) A smooth curve \\(y(x)\\) lies in a plane. We want an expression for the curvature \\(\\kappa\\) at a generic point, in terms of the derivatives of \\(y\\) , and then the conditions under which \\(\\kappa\\) reduces to \\(y\u0026#39;\u0026#39;\\) alone.\nCoordinates: \\(x\\) horizontal, \\(y\\) vertical, \\(y(x)\\) single-valued and at least twice differentiable in the interval of interest.\nAt every point the tangent makes an angle \\(\\theta\\) with the \\(x\\) -axis. The curvature is the rate at which \\(\\theta\\) rotates per unit arc length:\n\\[\\kappa = \\frac{d\\theta}{ds} \\tag{1}\\] This is a definition, not an approximation. It is equivalent to \\(\\kappa = 1/R\\) , where \\(R\\) is the radius of the osculating circle. (1) holds for any smooth plane curve described by any parametrisation; what follows specialises it to the Cartesian form \\(y(x)\\) .\nSince \\(y(x)\\) is single-valued, the tangent angle at any point is\n\\[\\theta = \\arctan(y\u0026#39;) \\tag{2}\\] where \\(y\u0026#39; = dy/dx\\) . (2) requires the curve to be expressible as a function of \\(x\\) — it fails at vertical tangents, where \\(y\u0026#39; \\to \\pm\\infty\\) .\nDifferentiating (2) with respect to \\(x\\) by the chain rule:\n\\[\\frac{d\\theta}{dx} = \\frac{y\u0026#39;\u0026#39;}{1 \u0026#43; y\u0026#39;^2} \\tag{3}\\] The derivative of \\(\\arctan(u)\\) is \\(1/(1 \u0026#43; u^2)\\) ; composed with \\(u = y\u0026#39;\\) , the numerator picks up \\(dy\u0026#39;/dx = y\u0026#39;\u0026#39;\\) .\nThe arc-length element along \\(y(x)\\) satisfies\n\\[ds = \\sqrt{1 \u0026#43; y\u0026#39;^2}\\; dx \\tag{4}\\] which is Pythagoras on the infinitesimal triangle \\((dx, dy, ds)\\) : \\(ds^2 = dx^2 \u0026#43; dy^2 = (1 \u0026#43; y\u0026#39;^2) \\, dx^2\\) .\nNow (1) can be rewritten as a ratio of rates with respect to \\(x\\) . Dividing (3) by \\(ds/dx\\) from (4):\n\\[\\kappa = \\frac{d\\theta/dx}{ds/dx} = \\frac{y\u0026#39;\u0026#39;}{(1 \u0026#43; y\u0026#39;^2)^{3/2}} \\tag{5}\\] The exponent \\(3/2\\) comes from the product of \\((1 \u0026#43; y\u0026#39;^2)\\) in the denominator of (3) and \\((1 \u0026#43; y\u0026#39;^2)^{1/2}\\) from (4). (5) is exact for any twice-differentiable single-valued curve \\(y(x)\\) . No approximation has been made; the only restriction is that \\(y\u0026#39;\\) must be finite (no vertical tangent).\nThe sign convention: with the axes oriented as above, \\(\\kappa \u0026gt; 0\\) means the curve is concave upward (centre of curvature above the curve), \\(\\kappa \u0026lt; 0\\) concave downward. This follows from the sign of \\(y\u0026#39;\u0026#39;\\) .\nWhen the slope of the curve is small — specifically, when\n\\[y\u0026#39;^2 \\ll 1 \\tag{6}\\] the term \\((1 \u0026#43; y\u0026#39;^2)^{3/2}\\) in the denominator of (5) tends to 1. The curvature becomes\n\\[\\kappa \\approx y\u0026#39;\u0026#39; \\tag{7}\\] To see how fast the approximation degrades: at \\(y\u0026#39; = 0.1\\) , the denominator is \\((1.01)^{3/2} \\approx 1.015\\) — error below 2%. At \\(y\u0026#39; = 0.3\\) , the denominator is \\((1.09)^{3/2} \\approx 1.14\\) — error around 13%. At \\(y\u0026#39; = 1\\) (45° slope), the denominator is \\(2\\sqrt{2} \\approx 2.83\\) — the linearised curvature overestimates the true value by a factor of nearly 3.\n(7) is the curvature that enters the Euler–Bernoulli beam equation \\(EI \\cdot y\u0026#39;\u0026#39; = M(x)\\) . Every derivation that starts from \u0026ldquo;curvature equals \\(y\u0026#39;\u0026#39;\\) \u0026rdquo; is using (7), not (5), and therefore carries the restriction (6): the beam slope must remain small everywhere along the span. For ordinary structural members this is satisfied by wide margins; for cables, arches, or post-buckled configurations it is not.\nExact curvature: \\[\\boxed{\\kappa = \\frac{y\u0026#39;\u0026#39;}{(1 \u0026#43; y\u0026#39;^2)^{3/2}}}\\] Linearised curvature (small slopes): \\[\\boxed{\\kappa \\approx y\u0026#39;\u0026#39;}\\] Definitions and restrictions, in the order they entered the pipeline: smooth curve \\(y(x)\\) with finite slope (2), geometric definition of curvature as \\(d\\theta/ds\\) (1), Cartesian arc-length element (4), small-slope assumption \\(y\u0026#39;^2 \\ll 1\\) (6). The exact formula (5) requires only the first three. The linearised formula (7) requires all four. If (6) fails, (7) is invalid but (5) still holds.\nThis is the \\(\\kappa\\) that, multiplied by \\(EI\\) , gives the bending moment in the Euler–Bernoulli derivations.\n","permalink":"https://eng-tools.dev/series-b/b3-curvature/","summary":"From the geometric definition of curvature to κ = y″/(1+y′²)^(3/2), and when it reduces to y″.","title":"Derivation of the Curvature Formula κ = y″/(1+y′²)^(3/2)"},{"content":"Where \\(\\delta = \\dfrac{PL^3}{3EI}\\) comes from Cantilever beam, concentrated load \\(P\\) at the free end. The goal is the vertical displacement of the tip, starting from the moment–curvature relation \\(EI \\cdot y\u0026#39;\u0026#39; = M(x)\\) .\nAxis \\(x\\) along the beam, origin at the fixed end, \\(x = L\\) at the free end. Axis \\(y\\) vertical, positive upward. \\(P \u0026gt; 0\\) is the magnitude of the load, directed downward.\nCut at a generic section \\(x\\) . Free body of the segment from \\(x\\) to \\(L\\) : the only external force is \\(P\\) downward, applied at distance \\((L - x)\\) from the section. Moment equilibrium about the cut, \\(M(x)\\) drawn in the assumed positive sense:\n\\[M(x) = -P(L - x) \\tag{1}\\] Sign: \\(P\\) downward with positive lever arm \\((L - x)\\) produces concavity downward — negative under the convention \\(y\u0026#39;\u0026#39; \u0026gt; 0\\) for upward concavity.\nThe moment is written on the undeformed geometry (first-order analysis). Consistent with the small-deformation hypothesis already embedded in \\(EI \\cdot y\u0026#39;\u0026#39; = M(x)\\) .\n(1) into \\(EI \\cdot y\u0026#39;\u0026#39; = M(x)\\) :\n\\[EI \\cdot y\u0026#39;\u0026#39;(x) = -P(L - x) \\tag{2}\\] \\(EI\\) constant along \\(x\\) : the cross-section does not change. (2) is a second-order, linear, non-homogeneous ODE with a first-degree polynomial forcing term.\nIntegrating (2) with respect to \\(x\\) :\n\\[EI \\cdot y\u0026#39;(x) = -P\\!\\left(Lx - \\frac{x^2}{2}\\right) \u0026#43; C_1 \\tag{3}\\] At the fixed end the section does not rotate:\n\\[y\u0026#39;(0) = 0 \\tag{4}\\] (4) into (3): \\(C_1 = 0\\) . There remains:\n\\[EI \\cdot y\u0026#39;(x) = -P\\!\\left(Lx - \\frac{x^2}{2}\\right) \\tag{5}\\] Integrating (5) with respect to \\(x\\) :\n\\[EI \\cdot y(x) = -P\\!\\left(\\frac{Lx^2}{2} - \\frac{x^3}{6}\\right) \u0026#43; C_2 \\tag{6}\\] At the fixed end the displacement is zero:\n\\[y(0) = 0 \\tag{7}\\] (7) into (6): \\(C_2 = 0\\) . Full deflection curve:\n\\[y(x) = -\\frac{P}{EI}\\left(\\frac{Lx^2}{2} - \\frac{x^3}{6}\\right) \\tag{8}\\] A cubic polynomial in \\(x\\) . The third degree comes from a moment that is linear in \\(x\\) (first degree), integrated twice.\n\\(x = L\\) in (8):\n\\[y(L) = -\\frac{P}{EI}\\left(\\frac{L \\cdot L^2}{2} - \\frac{L^3}{6}\\right) = -\\frac{P}{EI}\\cdot\\frac{L^3}{3} \\tag{9}\\] The algebra: \\(L \\cdot L^2/2 - L^3/6 = L^3(3 - 1)/6 = L^3/3\\) . The \\(L^3\\) factor is \\(L\\) from the moment arm times \\(L^2\\) from the double integration. The \\(1/3\\) factor is the combination \\(1/2 - 1/6\\) .\nThe tip deflection is the absolute value of \\(y(L)\\) :\n\\[\\boxed{\\delta = \\frac{PL^3}{3EI}} \\tag{10}\\] Assumptions, in the order they entered: plane sections, linear elastic material, small deformations (all three from \\(EI \\cdot y\u0026#39;\u0026#39; = M(x)\\) , the starting point), moment on the undeformed geometry (1), \\(EI\\) constant along \\(x\\) (2), perfect fixed end — zero rotation (4) and zero displacement (7). If any one fails, (10) does not hold.\n","permalink":"https://eng-tools.dev/series-b/b4-cantilever/","summary":"From the moment–curvature relation to the cantilever tip deflection δ = PL³/(3EI), step by step.","title":"Derivation of Cantilever Tip Deflection δ = PL³/(3EI)"},{"content":"International Journal of Impact Engineering - Dimensionless formulae for penetration depth of concrete target impacted by a non-deformable projectile\nOver six decades of ballistic testing have produced dozens of empirical formulae for concrete penetration — NDRC, Barr (UKAEA), ACE. All three share the same structural defects: unit-dependent coefficients that break when switching from SI to imperial, nose shape parameters assigned as discrete lookup values rather than computed from geometry, and calibration ranges limited to shallow impacts (\\(0.6 \u0026lt; X/d \u0026lt; 2.0\\) ) that collapse at deep penetration (\\(X/d \u0026gt; 5\\) ) with errors exceeding 20%.\nLi \u0026amp; Chen (2003) resolved these defects by building on two independent pillars. The Buckingham Pi theorem reduces the 10 physical variables of the problem to three dimensionless groups: the impact factor \\(I^*\\) , the mass ratio \\(\\lambda\\) , and the nose factor \\(N^*\\) . Dynamic cavity expansion theory (Forrestal \u0026amp; Luk 1988) then provides the axial force law — static confinement resistance plus inertial resistance — and introduces the empirical parameter \\(S\\) that bridges uniaxial compressive strength to effective confined resistance. Combining the two theories recombines the three Pi groups into two operational numbers, \\(I\\) and \\(N\\) , which govern the result entirely.\nThe outcome is two closed-form formulae — Eq. (15a) for shallow penetration, Eq. (15b) for deep — validated against approximately 130 data points covering \\(X/d\\) from 0.07 to 92.8.\nQuick Example 4340-steel ogive projectile, CRH = 2, impacting 35 MPa concrete at 277 m/s. Data: Forrestal et al. (1994), Table 3, shot 14.\nInput Value Mass \\(M\\) 0.906 kg Diameter \\(d\\) 26.9 mm Nose type Ogive, CRH \\(\\psi = 2\\) Impact velocity \\(V_0\\) 277 m/s Compressive strength \\(f_c\\) 35.2 MPa Concrete density \\(\\rho_c\\) 2370 kg/m³ Penetration depth: \\(X = 167\\,\\text{mm}\\) (\\(X/d = 6.21\\) , deep regime) Test measurement: 173 mm. Model error: 3.4%. NDRC prediction: 137 mm. NDRC error: 20.5%.\nThe 26.9 mm ogive projectile at 277 m/s penetrates 167 mm into 35 MPa concrete — about 6.2 calibers. At this velocity the static resistance term accounts for 94% of the retarding force; the dynamic inertia term contributes only 6%. NDRC, calibrated on shallow impacts, underestimates by a factor that grows with penetration depth.\nPipeline summary:\nNode Operation Key output 0 Validity check ✅ \\(V_0 = 277\\) m/s \\(\u0026lt; 800\\) m/s, rigid projectile 1 Nose geometry \\(N^* = 0.156\\) , \\(k = 2.030\\) 2 Target resistance \\(S = 12\\) (paper) 3 Dimensionless numbers \\(I = 8.455\\) , \\(N = 125.9\\) 4 Regime \\(I = 8.455 \u0026gt; \\pi k/4 = 1.571\\) → deep penetration 5b Eq. (15b) \\(X/d = 6.21\\) 6 Dimensional output \\(X = 167\\,\\text{mm}\\) Pipeline Overview The pipeline is sequential with one bifurcation. Nodes 0–3 are always executed. Node 4 selects the depth formula based on whether \\(I\\) exceeds the crater threshold \\(\\pi k/4\\) . Node 5a (shallow) or 5b (deep) computes the dimensionless depth; Node 6 converts to metres or millimetres.\n📄 Download: The A4 Ballistic Pipeline — slide deck (PDF) - A visual representation of the calculation\n📄Download The Theory Behind the Calculation (PDF) — A visual walkthrough of the physics: from Buckingham Pi to cavity expansion to the final dimensionless equations.\nNode 0 — Validity Pre-Check Purpose. Verify that the model assumptions hold before computing. If a condition is violated, the pipeline emits a warning but does not block execution — the engineering judgement remains with the user.\nInput Symbol Unit Impact velocity \\(V_0\\) m/s Shank diameter \\(d\\) m Aggregate size (optional) \\(a\\) m Condition Criterion Reference Rigid (non-deformable) projectile \\(V_0 \\lesssim 800\\,\\text{m/s}\\) for hardened steel Paper §2.1 Semi-infinite target thickness \\(\\geq 3X\\) — verify after calculation Model assumption Normal incidence impact angle = 90° Model assumption Aggregate small vs. diameter \\(d/a \\gg 1\\) (ideally \\(\u0026gt; 5\\) ) Paper §2.1 Light or no reinforcement \\(\u0026lt; 1.5\\%\\) per direction Paper §2.1 Output Symbol Status (pass / warning list) — Node 1 — Nose Geometry Purpose. Compute the nose shape factor \\(N^*\\) and the dimensionless crater depth \\(k\\) .\nInput Symbol Unit Nose type — flat / ogive / conical / spherical Nose parameter \\(\\psi\\) — Nose factor \\(N^*\\) — Eqs. (2), (3a)–(3c) \\(N^*\\) is defined by a surface integral over the nose profile. For standard geometries the integral has closed form:\nNose type \\(\\psi\\) definition \\(N^*\\) formula Range Flat — \\(1.0\\) — Ogive CRH \\(= R/d\\) \\(\\dfrac{1}{3\\psi} - \\dfrac{1}{24\\psi^2}\\) \\(0 \u0026lt; N^* \u0026lt; 0.5\\) Conical \\(H/d\\) \\(\\dfrac{1}{1 \u0026#43; 4\\psi^2}\\) \\(0 \u0026lt; N^* \u0026lt; 1.0\\) Spherical \\(r/d\\) \\(1 - \\dfrac{1}{8\\psi^2}\\) \\(0.5 \u0026lt; N^* \u0026lt; 1.0\\) \\(N^*\\) is a continuous function of geometry, not a discrete lookup. A lower value means a sharper, more penetration-efficient nose: flat nose \\(N^* = 1.0\\) , hemispherical \\(N^* = 0.5\\) , ogive CRH=2 \\(N^* = 0.156\\) , ogive CRH=4.5 \\(N^* = 0.076\\) .\nNose height \\(H/d\\) Nose type \\(H/d\\) Flat \\(0\\) Ogive \\(\\sqrt{\\psi - 1/4}\\) Conical \\(\\psi\\) Spherical \\(\\psi - \\sqrt{\\psi^2 - 1/4}\\) Crater depth parameter \\(k\\) — Eq. (25) The crater–tunnel transition depth is the sum of the Prandtl plastic slip depth for a flat punch (\\(0.707d\\) ) and the nose height \\(H\\) :\n\\[\\boxed{k = 0.707 \u0026#43; \\frac{H}{d}}\\] Nose \\(\\psi\\) \\(k\\) Flat — 0.707 Hemispherical 0.5 1.207 Ogive CRH=2 2 2.030 Ogive CRH=3 3 2.365 Ogive CRH=4.5 4.5 2.769 Output Symbol Unit Nose shape factor \\(N^*\\) — Dimensionless crater depth \\(k\\) — Node 2 — Target Resistance Purpose. Compute the empirical constant \\(S\\) that scales the uniaxial compressive strength \\(f_c\\) to the effective resistance under dynamic triaxial confinement. \\(S\\) cannot be derived analytically; it is back-calculated from penetration tests and then fitted as a function of \\(f_c\\) .\nInput Symbol Unit Unconfined compressive strength \\(f_c\\) MPa Two correlations are provided (\\(f_c\\) in MPa for both):\nOriginal — Forrestal et al. (1994), Eq. (12):\n\\[S_{\\text{orig}} = 82.6 \\; f_c^{-0.544}\\] Simplified — Li \u0026amp; Chen (2003), Eq. (21):\n\\[S_{\\text{simpl}} = 72.0 \\; f_c^{-0.5}\\] The simplified form makes \\(I\\) proportional to \\(f_c^{-1/2}\\) , aligning with the \\(f_c\\) dependence in NDRC, Hughes and Chang and enabling direct comparison. For \\(f_c \u0026gt; 30\\,\\text{MPa}\\) the two correlations are practically equivalent.\n\\(f_c\\) (MPa) \\(S_{\\text{orig}}\\) \\(S_{\\text{simpl}}\\) \\(S\\) (paper) 13.5 21.0 19.6 21 23 15.5 15.0 15.2 35.2 12.7 12.1 12 62.8 9.2 9.1 — 97 7.2 7.3 7 For shot 14 (\\(f_c = 35.2\\,\\text{MPa}\\) , \\(S = 12\\) from Table 2), both correlations agree to within 0.7 units.\nOutput Symbol Unit Target resistance constant \\(S\\) — Node 3 — Dimensionless Numbers Purpose. Compute the two numbers that govern the penetration depth.\nInput Symbol Unit Projectile mass \\(M\\) kg Impact velocity \\(V_0\\) m/s Shank diameter \\(d\\) m Compressive strength \\(f_c\\) Pa Concrete density \\(\\rho_c\\) kg/m³ Nose factor (Node 1) \\(N^*\\) — Target resistance (Node 2) \\(S\\) — Intermediate quantities Impact factor (Eq. 5): \\[I^* = \\frac{M V_0^2}{d^3 f_c}\\] Mass ratio (Eq. 6): \\[\\lambda = \\frac{M}{\\rho_c \\, d^3}\\] Johnson damage number (Eq. 7, informational): \\[\\Phi_J = \\frac{I^*}{\\lambda} = \\frac{\\rho_c V_0^2}{f_c}\\] \\(\\Phi_J\\) depends only on velocity and target — not on the projectile. It classifies impact severity independently of the launcher.\nOperational numbers \\[\\boxed{I = \\frac{I^*}{S} = \\frac{M V_0^2}{S \\, d^3 f_c}}\\] \\(I\\) is the ratio of projectile kinetic energy to the concrete\u0026rsquo;s effective absorption capacity (resistance under confinement, scaled by \\(S\\) , over volume \\(d^3\\) ).\n\\[\\boxed{N = \\frac{\\lambda}{N^*} = \\frac{M}{N^* \\rho_c \\, d^3}}\\] \\(N\\) combines relative projectile mass and nose sharpness. A heavy, sharp projectile has large \\(N\\) and penetrates more for equal \\(I\\) .\nOutput Symbol Unit Impact function \\(I\\) — Geometry function \\(N\\) — (Intermediate) impact factor \\(I^*\\) — (Intermediate) mass ratio \\(\\lambda\\) — (Intermediate) Johnson number \\(\\Phi_J\\) — Node 4 — Regime Selection Purpose. Determine whether the projectile stops inside the crater or advances into the tunnel.\nInput Symbol Unit Impact function (Node 3) \\(I\\) — Crater depth (Node 1) \\(k\\) — The projectile exits the crater zone with residual velocity \\(V_1 \u0026gt; 0\\) if and only if \\(I \u0026gt; \\pi k / 4\\) :\n\\[\\text{If } I \\leq \\frac{\\pi k}{4} \\quad \\Rightarrow \\quad \\textbf{shallow} \\text{ — projectile stops in crater, use Eq. (15a)}\\] \\[\\text{If } I \u0026gt; \\frac{\\pi k}{4} \\quad \\Rightarrow \\quad \\textbf{deep} \\text{ — projectile enters tunnel, use Eq. (15b)}\\] Output — Regime: shallow or deep Threshold value \\(\\pi k / 4\\) Node 5a — Shallow Penetration — Eq. (15a) Condition: \\(X/d \\leq k\\) (projectile stops within the crater zone)\nDerived from the energy balance \\(X^2 = MV_0^2/c\\) with the crater force constant \\(c\\) from the continuity condition at \\(x = kd\\) :\n\\[\\boxed{\\frac{X}{d} = \\sqrt{\\frac{4kI}{\\pi} \\cdot \\frac{1 \u0026#43; k\\pi/(4N)}{1 \u0026#43; I/N}}}\\] Consistency checks. At the regime boundary \\(I = \\pi k/4\\) : the formula gives \\(X/d = k\\) , matching the deep formula below. For \\(N \\gg 1\\) : reduces to Eq. (16a) of the paper. For \\(N \\gg 1\\) and \\(I/N \\ll 1\\) : reduces to \\(X/d = \\sqrt{4kI/\\pi}\\) , Eq. (17a).\nNote on shallow correction. For \\(X/d \u0026lt; 0.5\\) the formula systematically overestimates (paper Fig. 11). The empirical correction Eq. (27) — \\(\\left(X/d\\right)_{\\text{corr}} = 1.628\\,(X/d)^{2.789}\\) — is available in the notebook as an opt-in flag. It is off by default: the correction was fitted on flat-nosed, low-energy data where scatter is large, and its applicability to other nose types is uncertain.\nOutput Symbol Unit Dimensionless penetration depth \\(X/d\\) — Node 5b — Deep Penetration — Eq. (15b) Condition: \\(X/d \u0026gt; k\\) (projectile traverses the crater and bores a tunnel)\nDerived by integrating the equation of motion \\(MV\\,dV/dx = -(\\pi d^2/4)(Sf_c \u0026#43; N^*\\rho_c V^2)\\) from \\(x = kd\\) to \\(x = X\\) , then non-dimensionalising through \\(I\\) and \\(N\\) :\n\\[\\boxed{\\frac{X}{d} = \\frac{2}{\\pi} \\, N \\ln\\!\\left(\\frac{1 \u0026#43; I/N}{1 \u0026#43; k\\pi/(4N)}\\right) \u0026#43; k}\\] Penetration depth grows logarithmically with \\(I\\) at fixed \\(N\\) — not linearly. Each additional unit of velocity buys progressively less depth.\nConsistency checks. At the regime boundary \\(I = \\pi k/4\\) : \\(\\ln(1) = 0\\) , giving \\(X/d = k\\) — exact continuity with Eq. (15a). For \\(N \\gg 1\\) : reduces to Eq. (16b). For \\(N \\gg 1\\) and \\(I/N \\ll 1\\) : reduces to \\(X/d = k/2 \u0026#43; 2I/\\pi\\) , Eq. (17b).\nOutput Symbol Unit Dimensionless penetration depth \\(X/d\\) — Node 6 — Dimensional Output Purpose. Convert \\(X/d\\) to physical depth and summarise all intermediate values.\n\\[X = \\frac{X}{d} \\times d\\] Report also: regime, \\(I\\) , \\(N\\) , \\(k\\) , \\(S\\) , \\(I^*\\) , \\(\\lambda\\) , \\(\\Phi_J\\) , and the semi-infinite check (\\(3X\\) minimum target thickness).\nNumerical Verification — Shot 14 Forrestal et al. (1994), Table 3. Ogive CRH=2, \\(f_c = 35.2\\,\\text{MPa}\\) .\nInput Quantity Value \\(M\\) 0.906 kg \\(d\\) 0.0269 m \\(V_0\\) 277 m/s Nose ogive, \\(\\psi = 2\\) \\(f_c\\) 35.2 MPa \\(\\rho_c\\) 2370 kg/m³ Node 1 \\[N^* = \\frac{1}{3 \\times 2} - \\frac{1}{24 \\times 4} = \\frac{1}{6} - \\frac{1}{96} = \\frac{15}{96} = 0.15625 \\quad (\\text{paper: } 0.156) \\checkmark\\] \\[\\frac{H}{d} = \\sqrt{2 - 0.25} = \\sqrt{1.75} = 1.3229 \\qquad k = 0.707 \u0026#43; 1.323 = 2.030\\] Note: paper Tables 2–4 use \\(k = 2\\) (empirical value from Forrestal 1994). The tool uses \\(k = 2.030\\) from Eq. (25). For this verification, \\(k = 2\\) is used to reproduce the paper tables.\nNode 2 \\[S_{\\text{simpl}} = 72.0 \\times 35.2^{-0.5} = 12.13 \\qquad S_{\\text{paper}} = 12\\] Node 3 \\[I^* = \\frac{0.906 \\times 277^2}{(0.0269)^3 \\times 35.2 \\times 10^6} = \\frac{69\\,537}{684.6} = 101.46 \\quad (\\text{paper: } 101.46) \\checkmark\\] \\[\\lambda = \\frac{0.906}{2370 \\times (0.0269)^3} = \\frac{0.906}{0.04609} = 19.65 \\quad (\\text{paper: } 19.64) \\checkmark\\] \\[I = \\frac{101.46}{12} = 8.455 \\quad (\\text{paper: } 8.45) \\checkmark \\qquad N = \\frac{19.64}{0.156} = 125.9 \\quad (\\text{paper: } 125.9) \\checkmark\\] \\[\\Phi_J = \\frac{101.46}{19.64} = 5.17 \\quad (\\Phi_J \\gg 1 \\text{: fully dynamic regime})\\] Node 4 \\[\\frac{\\pi k}{4} = \\frac{\\pi \\times 2}{4} = 1.571 \\qquad I = 8.455 \u0026gt; 1.571 \\quad \\Rightarrow \\quad \\textbf{deep penetration}\\] Node 5b \\[\\frac{I}{N} = \\frac{8.455}{125.9} = 0.06716 \\qquad \\frac{k\\pi}{4N} = \\frac{2\\pi}{4 \\times 125.9} = 0.01248\\] \\[\\frac{1 \u0026#43; I/N}{1 \u0026#43; k\\pi/(4N)} = \\frac{1.06716}{1.01248} = 1.05400 \\qquad \\ln(1.05400) = 0.05261\\] \\[\\frac{2}{\\pi} N = \\frac{2}{\\pi} \\times 125.9 = 80.15 \\qquad \\frac{X}{d} = 80.15 \\times 0.05261 \u0026#43; 2 = 4.217 \u0026#43; 2 = 6.217\\] Paper Table 2, shot 14: \\(X/d_{\\text{anal}} = 6.21\\) ✓ — \\(X/d_{\\text{test}} = 6.43\\) — \\(X/d_{\\text{NDRC}} = 5.11\\) Node 6 \\[X = 6.217 \\times 26.9\\,\\text{mm} = \\mathbf{167.2\\,\\text{mm}}\\] Test: 173 mm. Error: 3.4%. Semi-infinite check: \\(3X = 502\\,\\text{mm}\\) minimum target thickness.\nFigures For fixed \\(N\\) , \\(X/d\\) grows logarithmically with \\(I\\) in the deep regime. The shallow-to-deep transition (knee of each curve) shifts with \\(k\\) and \\(N\\) . The current case is marked in red.\nFor fixed \\(I\\) , deeper penetration results from a heavier, sharper projectile (large \\(N\\) ). The sensitivity to \\(N\\) decreases as \\(I/N \\to 0\\) — for shot 14 (\\(I/N = 0.067\\) ) geometry contributes marginally and \\(X/d\\) is driven almost entirely by \\(I\\) .\nHow to Use the Notebook The Python notebook implements the full pipeline (Nodes 0–6) and runs directly on Google Colab. No installation required: numpy and matplotlib are preinstalled.\nOpen in Colab\nModify only the INPUT PARAMETERS cell. Parameters:\nParameter Variable Unit Note Projectile mass M kg Shank diameter d m Impact velocity V0 m/s Nose type nose_type — \u0026quot;flat\u0026quot;, \u0026quot;ogive\u0026quot;, \u0026quot;conical\u0026quot;, \u0026quot;spherical\u0026quot; Nose parameter psi — CRH for ogive, \\(H/d\\) for conical, \\(r/d\\) for spherical Compressive strength fc Pa e.g. 35.2e6 for 35.2 MPa Concrete density rho_c kg/m³ \\(S\\) correlation S_correlation — \u0026quot;simplified\u0026quot; (default) or \u0026quot;original\u0026quot; Shallow correction apply_shallow_correction — False (default); enable for \\(X/d \u0026lt; 0.5\\) Each node prints its full output — all intermediate values are visible.\nKnown limitations. The model requires: rigid (non-deformable) projectile — erosion becomes significant above ~800 m/s for hardened steel; semi-infinite target — rear boundary effects (scabbing, perforation) not modelled, verify thickness \\(\\geq 3X\\) ; normal incidence — oblique impact not covered; unreinforced or lightly reinforced concrete (\\(\u0026lt; 1.5\\%\\) per direction); aggregate size small relative to diameter (\\(d/a \u0026gt; 5\\) recommended, continuum assumption breaks down below \\(d/a \\approx 2\\) ).\nReferences [1] Li QM, Chen XW (2003). Dimensionless formulae for penetration depth of concrete target impacted by a non-deformable projectile. Int. J. Impact Eng. 28, 93–116.\n[2] Forrestal MJ, Altman BS, Cargile JD, Hanchak SJ (1994). An empirical equation for penetration depth of ogive-nose projectiles into concrete targets. Int. J. Impact Eng. 15(4), 395–405.\n[3] Forrestal MJ, Luk VK (1988). Dynamic spherical cavity-expansion in a compressible elastic-plastic solid. ASME J. Appl. Mech. 55, 275–279.\n[4] Sliter GE (1980). Assessment of empirical concrete impact formulas. ASCE J. Struct. Div. 106(ST5), 1023–1045.\n","permalink":"https://eng-tools.dev/series-a/a4-penetration-depth/","summary":"From projectile geometry and impact velocity to penetration depth — dimensionless formulation, regime selection (shallow/deep), and numerical verification against 82 test points.","title":"Concrete Penetration Depth — Analytical Pipeline (Li \u0026 Chen 2003)"},{"content":"Fatigue in Notched Plates — Worked Example When a notched component fails by fatigue, it is rarely a sudden surprise. It is the result of a calculation not done, or done wrong. The method to do it exists, is well established, but is scattered across Peterson, Shigley, and the FEM literature in a way that no single reference makes it immediately applicable.\nHazizi, Ghaleeh, and Rasool (2023) published in Applied Mechanics a method to answer this question for flat steel plates with opposite semicircular edge notches — the typical case of tabs, reduced flanges, seal-groove joints, and structural connection plates. The method combines an analytical calculation based on Peterson and Shigley with a FEM verification, and produces both the maximum stress at the notch and the fatigue life in cycles.\nThis document structures that method as a calculation chain with explicit inputs and outputs for each step, corrects three errors present in the original paper, adds two missing nodes (Marin factors and real-component endurance limit), and includes the tools to replicate it — a Python script and a PrePoMax model — so you can apply it directly to your own case with different geometry and material.\nThe reference numerical case is the one from the paper: \\(\\sigma_{max}\\) analytical \\(= 379\\) MPa, \\(\\sigma_{max}\\) FEM \\(= 395.914\\) MPa, \\(N_f\\) analytical \\(= 2891\\) cycles, \\(N_f\\) FEM \\(= 2882\\) cycles (Table 7, Hazizi et al.).\n📓 Open in Google Colab to run the calculation with your own geometry and material.\nWhat you will find here Section 1 — The physics of the notch problem, explained before any formula. Section 2 — The analytical method: the calculation chain commented node by node, with corrections to the paper\u0026rsquo;s errors. Section 3 — The Python script: geometry and material in, S-N curve and \\(N_f\\) out. Section 4 — The PrePoMax model: step-by-step instructions to replicate the FEM. Section 5 — How to adapt it to your case: which parameters change, and the limits of the method.\nReference numbers Geometry: \\(D = 25.4\\) mm, \\(d = 20.32\\) mm, \\(h = r = 2.54\\) mm, \\(t = 6.35\\) mm, \\(L = 31\\) mm, \\(F = 20195\\) N. Material: alloy steel, \\(E = 210000\\) N/mm², \\(\\nu = 0.28\\) , \\(S_{ut} = 724\\) N/mm², \\(\\sigma_y = 620\\) N/mm². Paper results (Table 7): \\(\\sigma_{max}\\) analytical \\(= 379\\) MPa, \\(\\sigma_{max}\\) FEM \\(= 395.914\\) MPa, \\(N_f\\) analytical \\(= 2891\\) cycles, \\(N_f\\) FEM \\(= 2882\\) cycles.\nSection 1 — The physics Why a notch is dangerous A plate under axial load transmits the applied force through its cross-section. Without discontinuities the stress flow lines are parallel and uniformly distributed — every point of the section carries the same share of the load.\nA notch interrupts this flow. The lines must detour around the discontinuity and crowd into the narrowed zone at the notch tip. The material in that zone carries a stress much higher than it would if the plate were smooth. This phenomenon is called stress concentration.\nThe stress concentration factor \\(K_t\\) The ratio between the actual maximum stress at the notch tip and the nominal stress that would be calculated on the net section without perturbation is the stress concentration factor:\n\\[K_t = \\frac{\\sigma_{max}}{\\sigma_{nom}}\\] \\(K_t\\) is always greater than 1. A notch with \\(K_t = 3\\) means the stress at the tip is three times the nominal one. The values of \\(K_t\\) depend exclusively on geometry — not on the material, not on the load.\n\\(K_t\\) and \\(K_f\\) — geometric concentration and fatigue behaviour \\(K_t\\) is a purely geometric and elastic factor. In fatigue, however, two notches with the same \\(K_t\\) but different tip radii behave differently under cyclic loading.\nThe reason is the stress gradient. With a small radius the gradient is steep — the high-stress zone is confined to a few grains of material. With a large radius the gradient is gentle — the high-stress zone is extensive and involves many grains. The probability that such a zone contains a critical defect capable of initiating a crack is proportional to its volume.\nThe fatigue notch factor \\(K_f\\) captures this effect. It is defined through the notch sensitivity \\(q\\) (\\(0 \\leq q \\leq 1\\) ):\n\\[K_f = 1 \u0026#43; q(K_t - 1)\\] When \\(q = 0\\) the material is insensitive to the notch (\\(K_f = 1\\) ). When \\(q = 1\\) the material feels the full elastic peak (\\(K_f = K_t\\) ). Real values lie in between.\nThe operational choice in the calculation is binary: use \\(K_t\\) or \\(K_f\\) , never both. \\(K_f\\) replaces \\(K_t\\) — it does not multiply by it. Using \\(K_t\\) directly, as the Hazizi paper does, is a conservative choice because \\(K_t \\geq K_f\\) : it overestimates the effective fatigue concentration and therefore underestimates life. Those who want to refine the calculation can substitute \\(K_f\\) for \\(K_t\\) in node 3 of the chain — the structure does not change.\nThe S-N curve and the endurance limit Under cyclic loading the material accumulates damage at each cycle even if the stress is well below the static ultimate strength. The relationship between stress amplitude and number of cycles to failure is represented in the S-N curve (or Wöhler curve): stress on the vertical axis, number of cycles on a logarithmic horizontal axis.\nFor steel the S-N curve features an endurance limit \\(S_e\\) : below this threshold the life is theoretically infinite. For aluminium and other non-ferrous materials the endurance limit does not exist — the curve drops continuously.\nMean stress and the Goodman diagram The classical S-N curve is built for fully reversed cycles — stress oscillating symmetrically about zero, zero mean stress. In reality the cycle is often asymmetric.\nA cycle described by \\(\\sigma_{max}\\) and \\(\\sigma_{min}\\) has:\n\\[\\sigma_m = \\frac{\\sigma_{max} \u0026#43; \\sigma_{min}}{2} \\qquad \\sigma_a = \\frac{\\sigma_{max} - \\sigma_{min}}{2}\\] A positive mean stress (tension) adds to the cyclic peak and reduces fatigue life. The Goodman diagram corrects the endurance limit in the presence of non-zero mean stress. The safety condition is:\n\\[\\frac{\\sigma_a}{S_e} \u0026#43; \\frac{\\sigma_m}{S_{ut}} \\leq 1\\] From which the fully reversed equivalent stress \\(\\sigma_{ar}\\) — the symmetric cycle that produces the same damage as the actual asymmetric cycle:\n\\[\\sigma_{ar} = \\frac{\\sigma_a}{1 - \\dfrac{\\sigma_m}{S_{ut}}}\\] Section 2 — The analytical method The calculation chain — 10 nodes The method is articulated in 10 nodes. Each node has declared inputs and outputs. The starting point is geometry and load; the end point is \\(N_f\\) .\n\\[\\underbrace{F,\\ t,\\ D,\\ h}_{\\text{geometry and load}} \\xrightarrow{1} \\sigma_{nom} \\xrightarrow{2} K_t \\xrightarrow{3} \\sigma_{max} \\xrightarrow{4} S\u0026#39;_e \\xrightarrow{5} \\underbrace{k_a,\\ k_b,\\ \\ldots}_{\\text{Marin}} \\xrightarrow{6} S_e \\xrightarrow{7} f \\xrightarrow{8} a,\\ b \\xrightarrow{9} \\sigma_{ar} \\xrightarrow{10} N_f\\] Nodes 1–3 convert geometry and load into maximum stress at the notch. Node 4 produces the endurance limit of the standard specimen. Nodes 5–6 build the real-component endurance limit through the Marin factors. Nodes 7–8 calibrate the component\u0026rsquo;s S-N curve. Nodes 9–10 compare stress and curve to obtain life.\nCompared to the Hazizi et al. chain, this version adds two explicit nodes — node 5 (Marin) and node 6 (\\(S_e\\) ) — absent in the original paper, where the S-N curve is calibrated on the specimen limit \\(S\u0026#39;_e\\) instead of the component limit \\(S_e\\) .\nNode 1 — Nominal stress \\(\\sigma_{nom}\\) Input: \\(F\\) , \\(t\\) , \\(D\\) , \\(h\\) Output: \\(\\sigma_{nom}\\) The nominal stress is calculated on the net section — what remains after removing the material of the two notches:\n\\[\\sigma_{nom} = \\frac{F}{t \\times (D - 2h)} = \\frac{20195}{6.35 \\times (25.4 - 2 \\times 2.54)} = \\frac{20195}{6.35 \\times 20.32} = \\frac{20195}{129.03} = 156.5 \\ \\text{MPa}\\] The denominator \\(t \\times (D - 2h)\\) is the area of the resisting section at the notches.\nNode 2 — Stress concentration factor \\(K_t\\) Input: \\(h\\) , \\(D\\) Output: \\(K_t\\) For rectangular plates with opposite semicircular notches, Peterson provides the polynomial formula:\n\\[K_t = 3.065 - 3.370\\left(\\frac{2h}{D}\\right) \u0026#43; 0.647\\left(\\frac{2h}{D}\\right)^2 \u0026#43; 0.658\\left(\\frac{2h}{D}\\right)^3\\] The dimensionless parameter \\(2h/D\\) measures the fraction of total width removed by the notches. In our case:\n\\[\\frac{2h}{D} = \\frac{2 \\times 2.54}{25.4} = \\frac{5.08}{25.4} = 0.2\\] The notches remove 20% of the width. Substituting:\n\\[K_t = 3.065 - 3.370 \\times 0.2 \u0026#43; 0.647 \\times 0.04 \u0026#43; 0.658 \\times 0.008\\] \\[K_t = 3.065 - 0.674 \u0026#43; 0.026 \u0026#43; 0.005 = 2.422\\] Node 3 — Maximum stress \\(\\sigma_{max}\\) Input: \\(K_t\\) , \\(\\sigma_{nom}\\) Output: \\(\\sigma_{max}\\) Direct definition of \\(K_t\\) :\n\\[\\sigma_{max} = K_t \\times \\sigma_{nom} = 2.422 \\times 156.5 = 379 \\ \\text{MPa}\\] This is the first validation result: it is compared directly with the peak stress that PrePoMax returns at the notch — \\(395.914\\) MPa in the Hazizi et al. simulation. The difference (4.5%) is typical of analytical-FEM comparison on geometries with stress concentration.\nNode 4 — Specimen endurance limit \\(S\u0026#39;_e\\) Input: \\(S_{ut}\\) Output: \\(S\u0026#39;_e\\) \\(S\u0026#39;_e\\) is the endurance limit measured on a standard specimen — a cylinder of 7.62 mm diameter, mirror-polished finish, rotating bending load, room temperature. For steels with \\(S_{ut} \u0026lt; 1400\\) MPa the Shigley empirical correlation is:\n\\[S\u0026#39;_e = 0.55 \\times S_{ut} = 0.55 \\times 724 = 398 \\ \\text{MPa}\\] This is the specimen limit, not the real component\u0026rsquo;s. The differences between specimen and component — surface finish, dimensions, load type — are corrected in nodes 5 and 6.\nNode 5 — Marin factors Input: \\(S_{ut}\\) , section geometry, operating conditions Output: \\(k_a\\) , \\(k_b\\) , \\(k_c\\) , \\(k_d\\) , \\(k_e\\) The Marin factors translate the differences between standard specimen and real component into numerical coefficients. Each factor is \\(\\leq 1\\) and corrects a specific discrepancy. The Hazizi paper does not apply them — it uses \\(S\u0026#39;_e\\) directly as if the component were a specimen. This omission is at the root of the \\(N_f\\) divergence discussed at the end of this section.\n\\(k_a\\) — surface finish. Surface irregularities act as micro-notches and reduce fatigue life. For a machined surface, Shigley provides (Table 6-2, constants in MPa):\n\\[k_a = a_M \\cdot S_{ut}^{b_M} = 4.51 \\times 724^{-0.265}\\] Intermediate step: \\(\\log_{10}(724) = 2.860\\) , so \\(724^{0.265} = 10^{0.265 \\times 2.860} = 10^{0.758} = 5.727\\) .\n\\[k_a = \\frac{4.51}{5.727} = 0.788\\] \\(k_b\\) — section size. The mechanism behind \\(k_b\\) is statistical: larger sections have more volume of highly stressed material, hence a higher probability of containing a critical defect. This applies in bending and torsion, where a stress gradient exists through the section. In pure axial tension the distribution is uniform — no gradient exists, and the mechanism does not operate:\n\\[k_b = 1.0\\] \\(k_c\\) — load type. The standard specimen is tested in rotating bending. For axial loading Shigley (Table 6-7) indicates:\n\\[k_c = 0.85\\] \\(k_d\\) , \\(k_e\\) — temperature and reliability. At room temperature and 50% reliability (median):\n\\[k_d = 1.0 \\qquad k_e = 1.0\\] For 90% reliability, \\(k_e = 0.897\\) (Shigley, Table 6-5). The effect of \\(k_e\\) is discussed at node 10.\nMarin factor product:\n\\[k_a \\times k_b \\times k_c \\times k_d \\times k_e = 0.788 \\times 1.0 \\times 0.85 \\times 1.0 \\times 1.0 = 0.670\\] Node 6 — Component endurance limit \\(S_e\\) Input: \\(S\u0026#39;_e\\) , Marin product Output: \\(S_e\\) \\[S_e = 0.670 \\times 398 = 266.6 \\ \\text{MPa}\\] This is the real component\u0026rsquo;s endurance limit — the fully reversed stress below which life is theoretically infinite for this steel plate, with this finish and this load type.\nThe Hazizi paper uses \\(S\u0026#39;_e = 398\\) MPa to calibrate the S-N curve. The correct value is \\(S_e = 266.6\\) MPa. The difference is a factor of 1.49 — not negligible.\nNode 7 — Fatigue strength fraction \\(f\\) Input: \\(S_{ut}\\) Output: \\(f\\) (dimensionless, \\(0 \u0026lt; f \u0026lt; 1\\) )\n\\(f\\) is the fraction of \\(S_{ut}\\) at which the material endures \\(10^3\\) cycles. It fixes the left anchor point of the S-N curve in the high-cycle range (\\(10^3\\) –\\(10^6\\) cycles). Without \\(f\\) the Basquin line cannot be drawn.\nShigley provides the empirical formula (with \\(S_{ut}\\) in MPa):\n\\[f = 1.06 - 4.1 \\times 10^{-4} \\times S_{ut} \u0026#43; 1.5 \\times 10^{-7} \\times S_{ut}^2\\] \\[f = 1.06 - 4.1 \\times 10^{-4} \\times 724 \u0026#43; 1.5 \\times 10^{-7} \\times 724^2 = 1.06 - 0.297 \u0026#43; 0.079 = 0.842\\] The strength at \\(10^3\\) cycles is therefore \\(f \\cdot S_{ut} = 0.842 \\times 724 = 609.5\\) MPa.\nNote on units: Shigley also provides an equivalent formula with \\(S_{ut}\\) in ksi, with different constants. The Hazizi paper uses the ksi version without declaring the conversion — see the critical notes at the end of this section.\nNode 8 — Basquin constants \\(a\\) and \\(b\\) Input: \\(f\\) , \\(S_{ut}\\) , \\(S_e\\) Output: \\(a\\) [MPa], \\(b\\) [dimensionless]\nThe S-N curve in the \\(10^3\\) –\\(10^6\\) cycle range is approximately linear in log-log scale. Basquin describes it with a power law \\(S_f = a \\cdot N^b\\) , calibrated on two anchor points:\n\\[\\text{Point 1:} \\quad (N = 10^3, \\ S_f = f \\cdot S_{ut} = 609.5 \\ \\text{MPa})\\] \\[\\text{Point 2:} \\quad (N = 10^6, \\ S_f = S_e = 266.6 \\ \\text{MPa})\\] Point 2 uses \\(S_e\\) — the component limit — not the specimen\u0026rsquo;s \\(S\u0026#39;_e\\) . This is the structural difference from the paper, where point 2 is \\((10^6, \\ 398)\\) .\nThe constants:\n\\[a = \\frac{(f \\cdot S_{ut})^2}{S_e} = \\frac{609.5^2}{266.6} = \\frac{371{,}490}{266.6} = 1393 \\ \\text{MPa}\\] \\[b = -\\frac{1}{3} \\log_{10}\\left(\\frac{f \\cdot S_{ut}}{S_e}\\right) = -\\frac{1}{3} \\log_{10}\\left(\\frac{609.5}{266.6}\\right) = -\\frac{1}{3} \\log_{10}(2.286) = -\\frac{1}{3} \\times 0.359 = -0.120\\] The slope \\(|b| = 0.120\\) is about twice that of the paper (\\(|b| = 0.061\\) ). A steeper curve means that life \\(N_f\\) is more sensitive to the applied stress — small changes in \\(\\sigma_{ar}\\) produce large changes in \\(N_f\\) .\nNode 9 — Equivalent stress \\(\\sigma_{ar}\\) Input: \\(\\sigma_{max}\\) , \\(S_{ut}\\) Output: \\(\\sigma_{ar}\\) The paper\u0026rsquo;s load goes from zero to \\(F_{max}\\) — a pulsating cycle with \\(\\sigma_{min} = 0\\) . The maximum stress at the notch is \\(\\sigma_{max} = 379\\) MPa, so:\n\\[\\sigma_m = \\sigma_a = \\frac{\\sigma_{max}}{2} = \\frac{379}{2} = 189.5 \\ \\text{MPa}\\] Applying the Goodman criterion to convert to the fully reversed equivalent cycle:\n\\[\\sigma_{ar} = \\frac{\\sigma_a}{1 - \\dfrac{\\sigma_m}{S_{ut}}} = \\frac{189.5}{1 - \\dfrac{189.5}{724}} = \\frac{189.5}{0.738} = 256.8 \\ \\text{MPa}\\] Local stress approach — declared choice. In this calculation \\(\\sigma_{max} = K_t \\cdot \\sigma_{nom}\\) is the local stress at the notch, and both \\(\\sigma_a\\) and \\(\\sigma_m\\) carry the \\(K_t\\) amplification. This differs from the standard nominal approach of Shigley (Ch. 6), where \\(K_f\\) multiplies only the alternating component:\n\\[\\sigma_{ar}^{nom} = \\frac{K_f \\cdot \\sigma_{nom,a}}{1 - \\dfrac{\\sigma_{nom,m}}{S_{ut}}} = \\frac{2.422 \\times 78.3}{1 - \\dfrac{78.3}{724}} = \\frac{189.5}{0.892} = 212.5 \\ \\text{MPa}\\] The local approach gives \\(\\sigma_{ar} = 256.8\\) MPa; the nominal one gives \\(212.5\\) MPa — a 21% difference. The local approach is more conservative because it amplifies the mean stress as well, and the justification for not amplifying it (local plastic relaxation of the mean stress) requires the material to yield at the notch tip, which is reasonable for finite fatigue life but less defensible in the elastic regime. The paper uses the local approach and this document follows suit for consistency.\nNode 10 — Fatigue life \\(N_f\\) Input: \\(\\sigma_{ar}\\) , \\(a\\) , \\(b\\) , \\(S_e\\) Output: \\(N_f\\) The inverted Basquin formula gives:\n\\[N_f = \\left(\\frac{\\sigma_{ar}}{a}\\right)^{1/b}\\] but it is applicable only if \\(\\sigma_{ar} \u0026gt; S_e\\) . If \\(\\sigma_{ar} \\leq S_e\\) the equivalent stress is below the endurance limit and life is theoretically infinite.\nResult: \\(\\sigma_{ar} = 256.8\\) MPa \\(\u0026lt; S_e = 266.6\\) MPa → \\(N_f = \\infty\\) (infinite life).\nThe margin is 9.8 MPa, equal to 3.7% of \\(S_e\\) . This is a minimal margin — any variation in the assumptions will eliminate it.\nEffect of reliability. With \\(k_e = 0.897\\) (90% reliability) the Marin product drops to 0.601, \\(S_e\\) drops to 239.1 MPa, and the situation reverses: \\(\\sigma_{ar} = 256.8\\) MPa \\(\u0026gt; S_e = 239.1\\) MPa → \\(N_f\\) is finite. With recalculated Basquin parameters (\\(a = 1553\\) MPa, \\(b = -0.135\\) ):\n\\[N_f = \\left(\\frac{256.8}{1553}\\right)^{1/(-0.135)} = \\left(0.165\\right)^{-7.39} \\approx 591{,}000 \\ \\text{cycles}\\] This is \\(\\approx 205\\) times the FEM result of 2882 cycles. The discrepancy is not a calculation error — it is the comparison of two incompatible frameworks, as clarified in the critical notes that follow.\nCritical notes on the Hazizi et al. paper This subsection documents the errors identified in the paper and the reason why the original result \\(N_f = 2891\\) cycles coincides only apparently with the FEM.\nError 1 — Units on \\(f\\) (node 7). The paper uses the Shigley formula calibrated in ksi but works in MPa in the header. In the calculations it substitutes \\(S_{ut} = 105\\) — which is \\(724 \\div 6.895 = 105.0\\) ksi — without documenting the conversion. The result \\(f = 0.842\\) is numerically correct, but anyone substituting 724 MPa in the same formula gets \\(f = 2.65\\) — physically impossible.\nError 2 — Constant \\(a\\) (node 8). The paper obtains \\(a = 1108\\) MPa. With the consistent values (\\(f = 0.842\\) , \\(S_{ut} = 724\\) MPa, \\(S\u0026#39;_e = 398\\) MPa) the result is \\(a = 933\\) MPa — a 19% difference. The origin of the value 1108 is not reconstructible from the formula \\(a = (f \\cdot S_{ut})^2 / S\u0026#39;_e\\) with any consistent combination of inputs.\nError 3 — \\(\\sigma_{ar}\\) (node 9). The paper writes \\(S\u0026#39;_e = \\sigma_a = \\sigma_{ar} = 0.941 \\times S_{ut} = 682\\) MPa, conflating three physically distinct quantities in a single expression without justification. The coefficient 0.941 is not reconstructible from any known analytical path (Goodman, Gerber, ASME-elliptic). The correct Goodman calculation gives \\(\\sigma_{ar} = 256.8\\) MPa — a factor of 2.66 lower.\nThe error compensation. Error 3 inflates \\(\\sigma_{ar}\\) from 256.8 to 682 MPa (\\(\\times 2.66\\) ). Error 2 produces a curve with \\(|b| = 0.061\\) instead of 0.120 — halved slope that attenuates the sensitivity of \\(N_f\\) to stress. The two effects balance out and produce \\(N_f = 2891\\) cycles, which happens to approach the FEM (2882 cycles).\nWhy the analytical-FEM comparison in the paper does not hold. The Hazizi FEM uses the ASME Carbon Steel S-N curves (Table 8 of the paper) — tabulated data for carbon steel derived from specimen tests per ASME BPVC. They do not have the same form as the Basquin curve calibrated with Shigley and are not built with the same parameters. The two methods use different material data, built with different methodologies, for different applications. The convergence \\(2891 \\approx 2882\\) is not a genuine agreement — it is the product of three compensating errors applied to a non-homogeneous comparison.\nThe discrepancy of \\(\\approx 200\\times\\) between the correct result (591,000 cycles at 90% reliability) and the FEM (2882 cycles) is not anomalous in this context: it is the expected difference when two frameworks use radically different S-N curves. It cannot be resolved by adjusting analytical parameters — it requires choosing a single set of S-N data and applying it consistently in both methods.\nWhat remains valid. The geometry is correct. Nodes 1–3 (\\(\\sigma_{nom}\\) , \\(K_t\\) , \\(\\sigma_{max} = 379\\) MPa analytical, 395.9 MPa FEM) are correct and replicable — the FEM is a valid benchmark for the maximum stress. The conceptual structure of the method (analytical chain + FEM verification) is correct. The errors are in nodes 7–9 of the paper\u0026rsquo;s original chain and do not invalidate the approach — they make it inapplicable without the corrections documented here.\nSection 3 — The Python script What it does The notebook fatica_catena_10_nodi.ipynb implements the complete analytical chain described in Section 2. It takes geometry, load, and material as input, and returns three outputs: numerical values of each node printed to console, the component\u0026rsquo;s S-N curve with the operating point highlighted, and the \\(N_f\\) verdict with the margin relative to \\(S_e\\) .\nThe dependencies are two: numpy and matplotlib. No external fatigue library — the chain is more transparent written from scratch with the formulas documented in Section 2.\nNotebook structure The notebook has 19 cells, alternating between markdown (explanations with formulas) and code (calculations and plots). The sequence follows the 10 nodes of the chain.\nInput cell — all modifiable parameters are grouped in the first code cell: geometry (\\(D\\) , \\(h\\) , \\(r\\) , \\(t\\) , \\(L\\) ), load (\\(F\\) ), material (\\(S_{ut}\\) , \\(S_y\\) ), surface finish constants (\\(a_M\\) , \\(b_M\\) ), load type (\\(k_c\\) ), and reliability (\\(k_e\\) ). To adapt the calculation to your own case it is sufficient to modify this cell and rerun everything.\nNodes 1–3 — from geometry to maximum stress at the notch. Peterson\u0026rsquo;s formula for opposite semicircular notches calculates \\(K_t\\) , then \\(\\sigma_{max} = K_t \\cdot \\sigma_{nom}\\) .\nNodes 4–6 — from material to component endurance limit. \\(S\u0026#39;_e = 0.55 \\cdot S_{ut}\\) for the specimen, then the Marin factors (\\(k_a\\) finish, \\(k_b\\) size, \\(k_c\\) load, \\(k_d\\) temperature, \\(k_e\\) reliability) reduce it to the real component\u0026rsquo;s \\(S_e\\) .\nNodes 7–8 — S-N Basquin curve calibration. The fraction \\(f\\) fixes the point at \\(10^3\\) cycles, then constants \\(a\\) and \\(b\\) define the log-log line between \\((10^3,\\, f \\cdot S_{ut})\\) and \\((10^6,\\, S_e)\\) .\nNode 9 — equivalent stress \\(\\sigma_{ar}\\) with Goodman (local stress approach, pulsating cycle \\(0 \\to \\sigma_{max}\\) ).\nNode 10 — verdict: if \\(\\sigma_{ar} \\leq S_e\\) life is infinite, otherwise \\(N_f = (\\sigma_{ar}/a)^{1/b}\\) .\nS-N plot — Basquin curve + \\(S_e\\) plateau + operating point \\(\\sigma_{ar}\\) highlighted. If life is finite, projection lines show where the point intercepts the curve.\nReliability comparison — the final cell reruns the chain for \\(k_e = 1.000\\) (50%) and \\(k_e = 0.897\\) (90%) and overlays the two S-N curves. The summary table shows how the reliability change flips the verdict from infinite life to \\(N_f = 591{,}000\\) cycles.\nReference values The following table compares the notebook results with the values verified in Section 2. The script does not round intermediate results — small differences in the last digit (e.g. 379.1 vs 379) are due to the rounding chain in the text.\nNode Quantity Section 2 Notebook 1 \\(\\sigma_{nom}\\) 156.5 MPa 156.5 MPa 2 \\(K_t\\) 2.422 2.422 3 \\(\\sigma_{max}\\) 379 MPa 379.1 MPa 4 \\(S\u0026#39;_e\\) 398 MPa 398.2 MPa 5 \\(k_a\\) 0.788 0.788 5 Marin 0.670 0.670 6 \\(S_e\\) 266.6 MPa 266.6 MPa 7 \\(f\\) 0.842 0.842 8 \\(a\\) 1393 MPa 1393 MPa 8 \\(b\\) \\(-0.120\\) \\(-0.120\\) 9 \\(\\sigma_{ar}\\) 256.8 MPa 256.8 MPa 10 \\(N_f\\) (50%) \\(\\infty\\) \\(\\infty\\) 10 \\(N_f\\) (90%) 591,000 591,467 How to use it The notebook is designed for Google Colab: open it, modify the input cell with your geometry and material, and press Runtime → Run all. The surface finish constants (\\(a_M\\) , \\(b_M\\) ) are commented in the input cell with values for ground, machined, hot-rolled, and as-forged — choose the one matching your component. Same for \\(k_c\\) (bending, axial, torsion) and \\(k_e\\) (reliability).\nTwo points to check when changing case:\nPeterson\u0026rsquo;s formula at node 2 is valid for rectangular plates with opposite semicircular notches (\\(h = r\\) ). For other notch geometries (V-notch, U-notch, keyhole) the polynomial changes — replace with the correct coefficients from Peterson or Pilkey.\nThe coefficient \\(k_b = 1.0\\) is valid for pure axial loading. If the load is in bending or torsion, \\(k_b\\) depends on the section size according to Shigley\u0026rsquo;s correlations (Tab. 6-8) — it must be calculated as a function of the equivalent diameter.\nNote — pyLife for full-field analysis This notebook covers the calculation at a single point: the notch tip. To extend the fatigue analysis to the entire stress field returned by FEM — evaluating every mesh node — the reference is pyLife (Bosch Research): an open-source library that integrates Wöhler curves, mean stress correction, and post-processing of FEM results in standard formats. The workflow would be: CalculiX → .frd file → pyLife → \\(N_f\\) map over the entire component.\nSection 4 — The PrePoMax model Objective Replicate the paper\u0026rsquo;s FEM result: \\(\\sigma_{max} = 395.914\\) MPa at the notch tip, under axial load \\(F = 20195\\) N. The model uses the same geometric and material data as the analytical chain — the verification is cross-checked.\nThe sequence is in three blocks: CAD geometry in Onshape → STEP export → setup and analysis in PrePoMax.\nBlock 1 — CAD geometry in Onshape Modelling strategy The notched plate profile is not drawn as a closed contour with arcs. Instead, the extrude + boolean strategy is used:\nExtrude the full rectangle \\(L \\times D \\times t\\) Extrude two cylinders of radius \\(r\\) , centred on the edges \\(Y = \\pm D/2\\) at mid-length Subtract the cylinders from the plate with a boolean subtraction This approach is more robust than the arc-profile method because it avoids ambiguities in sketch region selection.\nOpening the Feature Studio In Onshape, Part Studio → {} button in the toolbar (or Tools → FeatureScript editor). The Feature Studio 1 tab opens. Paste the following script, replacing all content.\nFeatureScript script FeatureScript 2909; import(path : \u0026#34;onshape/std/common.fs\u0026#34;, version : \u0026#34;2909.0\u0026#34;); annotation { \u0026#34;Feature Type Name\u0026#34; : \u0026#34;Notched Plate\u0026#34; } export const notchedPlate = defineFeature(function(context is Context, id is Id, definition is map) precondition {} { // Geometry from the paper — Hazizi et al. 2023 const L = 31 * millimeter; // total length const D = 25.4 * millimeter; // total width const t = 6.35 * millimeter; // thickness const r = 2.54 * millimeter; // notch radius = depth h // Step 1 - full rectangle var skRect = newSketch(context, id + \u0026#34;skRect\u0026#34;, { \u0026#34;sketchPlane\u0026#34; : qCreatedBy(makeId(\u0026#34;Front\u0026#34;), EntityType.FACE) }); skRectangle(skRect, \u0026#34;rect\u0026#34;, { \u0026#34;firstCorner\u0026#34; : vector(-L/2, -D/2), \u0026#34;secondCorner\u0026#34; : vector( L/2, D/2) }); skSolve(skRect); var regionRect = qSketchRegion(id + \u0026#34;skRect\u0026#34;); var normalRect = evOwnerSketchPlane(context, { \u0026#34;entity\u0026#34; : regionRect }).normal; opExtrude(context, id + \u0026#34;extRect\u0026#34;, { \u0026#34;entities\u0026#34; : regionRect, \u0026#34;direction\u0026#34; : normalRect, \u0026#34;endBound\u0026#34; : BoundingType.BLIND, \u0026#34;endDepth\u0026#34; : t }); // Step 2 - lower notch cylinder (edge Y = -D/2) var skBot = newSketch(context, id + \u0026#34;skBot\u0026#34;, { \u0026#34;sketchPlane\u0026#34; : qCreatedBy(makeId(\u0026#34;Front\u0026#34;), EntityType.FACE) }); skCircle(skBot, \u0026#34;circ\u0026#34;, { \u0026#34;center\u0026#34; : vector(0 * millimeter, -D/2), \u0026#34;radius\u0026#34; : r }); skSolve(skBot); var regionBot = qSketchRegion(id + \u0026#34;skBot\u0026#34;); var normalBot = evOwnerSketchPlane(context, { \u0026#34;entity\u0026#34; : regionBot }).normal; opExtrude(context, id + \u0026#34;extBot\u0026#34;, { \u0026#34;entities\u0026#34; : regionBot, \u0026#34;direction\u0026#34; : normalBot, \u0026#34;endBound\u0026#34; : BoundingType.BLIND, \u0026#34;endDepth\u0026#34; : t }); // Step 3 - upper notch cylinder (edge Y = +D/2) var skTop = newSketch(context, id + \u0026#34;skTop\u0026#34;, { \u0026#34;sketchPlane\u0026#34; : qCreatedBy(makeId(\u0026#34;Front\u0026#34;), EntityType.FACE) }); skCircle(skTop, \u0026#34;circ\u0026#34;, { \u0026#34;center\u0026#34; : vector(0 * millimeter, D/2), \u0026#34;radius\u0026#34; : r }); skSolve(skTop); var regionTop = qSketchRegion(id + \u0026#34;skTop\u0026#34;); var normalTop = evOwnerSketchPlane(context, { \u0026#34;entity\u0026#34; : regionTop }).normal; opExtrude(context, id + \u0026#34;extTop\u0026#34;, { \u0026#34;entities\u0026#34; : regionTop, \u0026#34;direction\u0026#34; : normalTop, \u0026#34;endBound\u0026#34; : BoundingType.BLIND, \u0026#34;endDepth\u0026#34; : t }); // Step 4 - boolean subtraction opBoolean(context, id + \u0026#34;bool\u0026#34;, { \u0026#34;targets\u0026#34; : qCreatedBy(id + \u0026#34;extRect\u0026#34;, EntityType.BODY), \u0026#34;tools\u0026#34; : qUnion([ qCreatedBy(id + \u0026#34;extBot\u0026#34;, EntityType.BODY), qCreatedBy(id + \u0026#34;extTop\u0026#34;, EntityType.BODY) ]), \u0026#34;operationType\u0026#34; : BooleanOperationType.SUBTRACTION }); }); FeatureScript version The version number in the header (2909) must match the one shown by Onshape in the editor when opened. If different, replace 2909 with the correct number — the geometric logic does not change.\nGeometric verification After clicking Commit and activating the feature in the Part Studio, check in the viewport:\nWidth at the notch section: \\(d = D - 2r = 25.4 - 5.08 = 20.32\\) mm The two notches are symmetric and centred at mid-length (\\(x = 0\\) ) The thickness is uniform: \\(t = 6.35\\) mm STEP export Right-click on Part 1 in the feature tree → Export → Format: STEP, Version: AP214 → file name: piastra_intagliata.step.\nBlock 2 — Setup in PrePoMax Model creation File → New → Model space: 3D → Unit system: mm, ton, s, °C (standard mechanical units, forces in N, stresses in MPa).\nFile → Import → select piastra_intagliata.step.\nMaterial Model → Materials → Create:\nName: Steel_Hazizi Elasticity → Elastic: Young\u0026rsquo;s modulus: 210000 MPa Poisson\u0026rsquo;s ratio: 0.28 Note on units: \\(1 \\ \\text{MPa} = 1 \\ \\text{N/mm}^2\\) . The value 210000 is correct in the mm/N system.\nSection Model → Sections → Create → Solid Section:\nMaterial: Steel_Hazizi Region: click the solid in the viewport → OK Global mesh with local refinement Local refinement at the notch is essential. Without it the default mesh underestimates \\(\\sigma_{max}\\) by about 10%.\nTab Geometry → menu Mesh → Mesh Setup Item → Create → Local Mesh Size:\nRegion: select the curved face of the notch in the viewport (both semicircular faces) Element size: 0.5 mm The value 0.5 mm corresponds to about \\(r/5 = 2.54/5\\) — it guarantees at least 8–10 elements on the semicircular profile.\nAfter setting the Local Mesh Size, menu Mesh → Create Mesh.\nStep and boundary conditions Tree → Steps → right-click → New → Static Step (linear elastic analysis, static load).\nExpand Step-1:\nConstraint — right-click on BCs → New → Fixed:\nSelect the left short face (end \\(x = -L/2\\) ) All degrees of freedom locked Load — right-click on Loads → New → Surface Traction:\nSelect the right short face (end \\(x = \u0026#43;L/2\\) ) Component 1 (X direction): 20195 N Components 2 and 3: 0 Note: Surface Traction in PrePoMax accepts the total force in N, not the pressure. Do not divide by the area.\nExecution Right-click on PiastraIntagliata in Analyses → Run.\nBlock 3 — Reading the results Component to read The load is axial in the X direction. The relevant stress component is S11 — normal stress in the load direction. Von Mises (MISES) is not the correct quantity for comparison with \\(K_t \\cdot \\sigma_{nom}\\) .\nTab Results → STRESS → S11.\nResult obtained Quantity Paper (Table 7) FEM obtained Deviation \\(\\sigma_{max}\\) S11 \\(395.914\\) MPa \\(395.8\\) MPa \\(0.03\\%\\) The deviation is negligible. The model is validated.\nStress map interpretation The S11 peak concentrates at the notch tip on the tension side. The expected distribution is:\nRed (maximum): notch tip, tension-loaded side Green (nominal): zone away from the notches — corresponds to \\(\\sigma_{nom} = 156.5\\) MPa Blue (minimum, negative): opposite edge of the notch, transverse compression due to Poisson\u0026rsquo;s effect The symmetry of the map across both notches is the most immediate qualitative check of model correctness.\nFEM-derived \\(K_t\\) verification The FEM allows extracting \\(K_t\\) experimentally as the ratio of peak to nominal:\n\\[K_t^{FEM} = \\frac{\\sigma_{max}^{FEM}}{\\sigma_{nom}} = \\frac{395.8}{156.5} = 2.529\\] The analytical value from Peterson is \\(K_t = 2.422\\) . The 4.4% difference is expected: the FEM captures local three-dimensional effects that Peterson\u0026rsquo;s formula, calibrated on infinite plane geometries, does not include.\nOperational notes Mesh convergence: the result with Local Mesh Size = 0.5 mm is converged for this case. For geometries with smaller notch radii (\\(r \u0026lt; 1\\) mm) it may be necessary to go down to 0.2 mm or less.\nElement type: PrePoMax generates second-order tetrahedra (C3D10) by default with STEP geometry. Second-order elements are necessary to capture the stress gradient at the notch — do not use linear elements (C3D4) for this type of analysis.\nConstraint condition: the full Fixed constraint on the left face overrides transverse degrees of freedom and can introduce local edge effects. For a geometry with \\(L/D = 31/25.4 = 1.22\\) the ratio is low — in a refined model one would use symmetry constraints or a constraint that allows free transverse contraction. For the peak stress verification at the notch, far from the constraint, the effect is negligible.\nSection 5 — How to adapt it to your case The entire calculation of Sections 2 and 3 is built on a specific case: rectangular alloy steel plate, opposite semicircular notches, pulsating axial load. This section explains how to go from that case to yours.\nFrom component to parameters The following table maps four typical components to the chain nodes that change relative to the notebook. Unlisted nodes remain unchanged — only the numerical values in the input cell change.\nComponent Description Nodes to modify What changes Bolted tab Plate with semicircular notches, axial load, structural steel none Numbers only: \\(D\\) , \\(h\\) , \\(t\\) , \\(F\\) , \\(S_{ut}\\) , finish (typically hot-rolled: \\(a_M = 57.7\\) , \\(b_M = -0.718\\) ) Grooved flange Plate with deeper notches (\\(2h/D \u0026gt; 0.3\\) ), same type none Numbers only. Peterson\u0026rsquo;s polynomial remains valid for \\(2h/D\\) up to \\(\\sim 0.5\\) . Beyond that, verify with Peterson/Pilkey Plate with hole Central circular hole instead of edge notches Node 2 Peterson\u0026rsquo;s polynomial changes: need coefficients for hole in finite plate (Peterson, Fig. 4.1). Nodes 4–10 remain identical Shaft with groove Cylindrical section, circumferential notch, rotating bending load Nodes 2, 5 \\(K_t\\) from Peterson for grooved shaft (Fig. 2.26). \\(k_b\\) depends on diameter (\\(k_b \u0026lt; 1\\) for \\(d \u0026gt; 7.62\\) mm). \\(k_c = 1.0\\) (the specimen is in rotating bending) If your component does not fit any of these four cases but has simple geometry, uniaxial loading, and ferrous material, the method is probably still applicable — you just need to identify which \\(K_t\\) to use and which Marin factors to update.\nWhat to replace The notebook parameters are organised in four categories. For each, the reference where to find the values for your own case.\nGeometry — \\(D\\) , \\(h\\) , \\(r\\) , \\(t\\) . In the notebook \\(h = r\\) because the notch is semicircular. For a U-notch with flat bottom \\(h \\neq r\\) and the ratio \\(h/r\\) enters separately in the \\(K_t\\) polynomial. The parameter \\(L\\) (total length) is not used in the analytical calculation — it is only needed for the FEM model.\nLoad — \\(F\\) and cycle type. The notebook assumes a pulsating cycle \\(0 \\to F\\) , which produces \\(\\sigma_a = \\sigma_m = \\sigma_{max}/2\\) . If the cycle is different, for example fully reversed (\\(\\sigma_{min} = -\\sigma_{max}\\) , hence \\(\\sigma_m = 0\\) ) or with a generic ratio \\(R = \\sigma_{min}/\\sigma_{max}\\) , the formulas at node 9 must be recalculated:\n\\[\\sigma_a = \\frac{\\sigma_{max} - \\sigma_{min}}{2} \\qquad \\sigma_m = \\frac{\\sigma_{max} \u0026#43; \\sigma_{min}}{2}\\] With \\(\\sigma_m = 0\\) the Goodman correction vanishes and \\(\\sigma_{ar} = \\sigma_a\\) directly.\nMaterial — \\(S_{ut}\\) and surface finish constants. The constants \\(a_M\\) and \\(b_M\\) depend on the type of machining and are tabulated in Shigley (Tab. 6-2) for four categories: ground (\\(a_M = 1.58\\) , \\(b_M = -0.085\\) ), machined/cold-drawn (\\(4.51\\) , \\(-0.265\\) ), hot-rolled (\\(57.7\\) , \\(-0.718\\) ), as-forged (\\(272\\) , \\(-0.995\\) ). Values are in MPa units — do not use the ksi constants without converting. For \\(S_{ut} \\geq 1400\\) MPa the correlation \\(S\u0026#39;_e = 0.55 \\cdot S_{ut}\\) no longer holds and the ceiling \\(S\u0026#39;_e = 700\\) MPa is used.\nMarin factors — each has its own reference: \\(k_a\\) follows from the finish (Shigley Tab. 6-2, see above). \\(k_b\\) equals 1.0 for axial loading. For bending and torsion it depends on the equivalent diameter (Shigley Eq. 6-19 and Tab. 6-8): \\(k_b = 1.24 \\cdot d^{-0.107}\\) for \\(2.79 \\leq d \\leq 51\\) mm, \\(k_b = 1.51 \\cdot d^{-0.157}\\) for \\(51 \u0026lt; d \\leq 254\\) mm. For non-circular sections the equivalent diameter \\(d_e\\) from Shigley (Tab. 6-8) is used. \\(k_c\\) equals 0.85 for axial loading, 1.0 for rotating bending, 0.59 for torsion (Shigley Tab. 6-7). \\(k_d\\) equals 1.0 at room temperature. For elevated temperatures Shigley provides the correlation (Tab. 6-11 and Eq. 6-27). \\(k_e\\) depends on the desired reliability: 1.000 at 50%, 0.897 at 90%, 0.868 at 95%, 0.814 at 99% (Shigley Tab. 6-5).\nWhat requires a different equation Three chain nodes cannot be updated by changing a number — they require a different equation.\nNode 2 — the \\(K_t\\) polynomial. The formula in the notebook is valid exclusively for rectangular plates with two opposite semicircular notches (\\(h = r\\) ). For other notch geometries the polynomial changes. The main references are Peterson\u0026rsquo;s Stress Concentration Factors (Pilkey \u0026amp; Pilkey, 3rd ed.) and the ESDU online charts. Some common cases: circular hole in finite plate (Peterson Fig. 4.1), grooved shaft under bending (Fig. 2.26), grooved shaft under torsion (Fig. 2.47). Each case has its own set of coefficients and its own dimensionless parameter — always verify the range of validity.\nNode 5 — \\(k_b\\) in bending and torsion. In axial loading \\(k_b = 1.0\\) because the stress distribution is uniform. In bending and torsion a gradient exists and the volume of highly stressed material grows with section size. The Shigley correlations for \\(k_b\\) as a function of diameter are reported in the previous block. For non-circular sections (rectangular, tubular) one goes through the equivalent diameter \\(d_e\\) that preserves the same highly stressed volume (\\(\\geq 95\\%\\) of peak).\nNode 9 — the mean stress criterion. The notebook uses Goodman, which is the most common and most conservative among linear criteria. For situations where Goodman is too conservative it can be replaced with Gerber (parabolic) or ASME-elliptic. The formulas for \\(\\sigma_{ar}\\) :\nGoodman: \\(\\displaystyle\\sigma_{ar} = \\frac{\\sigma_a}{1 - \\dfrac{\\sigma_m}{S_{ut}}}\\) Gerber: \\(\\displaystyle\\sigma_{ar} = \\frac{\\sigma_a}{1 - \\left(\\dfrac{\\sigma_m}{S_{ut}}\\right)^2}\\) ASME-elliptic: \\(\\displaystyle\\sigma_{ar} = \\frac{\\sigma_a}{\\sqrt{1 - \\left(\\dfrac{\\sigma_m}{S_y}\\right)^2}}\\) Goodman uses \\(S_{ut}\\) in the denominator, ASME-elliptic uses \\(S_y\\) . For \\(\\sigma_m \u0026gt; 0\\) Gerber gives lower \\(\\sigma_{ar}\\) than Goodman — it estimates a longer life. The choice depends on the acceptable level of conservatism and sector practice.\nLimits of the method Four conditions where the 10-node chain is not applicable. In each case the alternative framework is indicated.\nNon-ferrous materials (aluminium, titanium, copper). The S-N curve has no plateau — no endurance limit \\(S_e\\) exists in the steel sense. A conventional limit at \\(5 \\times 10^8\\) cycles (or the value specified by the applicable standard) is used and the Basquin line extends beyond \\(10^6\\) . The Marin factors and the \\(f\\) formula are calibrated on steels — for other materials, specific experimental data are needed.\nNotch-tip plasticity. If \\(\\sigma_{max} \u0026gt; S_y\\) the material yields locally and the elastic approach (\\(\\sigma_{max} = K_t \\cdot \\sigma_{nom}\\) ) overestimates the actual stress. Neuber\u0026rsquo;s rule (\\(K_t \\cdot \\sigma_{nom} = \\sqrt{K_\\sigma \\cdot K_\\varepsilon} \\cdot \\sigma_{nom}\\) ) and a strain-life approach (Coffin-Manson) working in strain rather than stress are needed. This is typical of low-cycle fatigue (\\(N_f \u0026lt; 10^3\\) ).\nMultiaxiality. The chain assumes a uniaxial stress state. If stresses in multiple directions coexist at the notch (bending + torsion, internal pressure + axial load), an equivalent stress criterion is needed: von Mises for ductile materials (Sines, Crossland) or maximum principal stress for brittle materials. The choice of criterion and the definition of equivalent multiaxial \\(\\sigma_a\\) and \\(\\sigma_m\\) are a chapter on their own — Shigley Ch. 6.14 and Socie \u0026amp; Marquis (2000).\nVariable amplitude loading spectrum. The chain runs a constant-amplitude cycle. If the real load is a spectrum with variable amplitudes (vibrations, measured operational loads), Palmgren-Miner\u0026rsquo;s cumulative damage rule (\\(\\sum n_i / N_{f,i} = 1\\) ) and a cycle counting method (rainflow) are needed. The notebook computes \\(N_f\\) for a single stress level — Miner combines multiple levels into cumulative damage. pyLife (Bosch Research) handles this complete workflow from FEM results.\nAppendix — Basquin equation: origin and limits Oswald Basquin in 1910 observed that experimental fatigue data, when plotted in log-log scale (log \\(S\\) vs log \\(N\\) ), show an approximately linear trend in the finite-life range. This log-log linearity is equivalent to a power law in linear scale:\n\\[S_f = a \\cdot N^b\\] It is not a physical law derived from first principles — it is an empirical fit. It is used because it is simple to calibrate with only two points, it allows analytical inversion to find \\(N\\) given \\(S\\) , and it works well in the \\(10^3\\) –\\(10^6\\) cycle range for steels and common alloys.\nInverting for \\(N\\) :\n\\[N_f = \\left(\\frac{S_f}{a}\\right)^{1/b}\\] The formula is valid only in the range \\([S_e,\\ f \\cdot S_{ut}]\\) . Outside: for \\(S_f \u0026lt; S_e\\) the curve is horizontal (infinite life for steel); for \\(S_f \u0026gt; f \\cdot S_{ut}\\) the line is not calibrated.\nThe main limitations are three: it is not valid outside the calibration range; it does not describe the endurance limit plateau (which requires separate treatment); the parameters \\(a\\) and \\(b\\) depend on the load type (rotating bending, axial, torsion) and must be derived for the specific load type.\nReferences Hazizi, K., Ghaleeh, M., \u0026amp; Rasool, G. (2023). Stress analysis and fatigue life prediction of notched plate. Applied Mechanics, 4(2), 586–607. Peterson, R. E. (1974). Stress Concentration Factors. Wiley. See also: Pilkey, W. D. \u0026amp; Pilkey, D. F. (2008), 3rd ed. Budynas, R. G. \u0026amp; Nisbett, J. K. (2020). Shigley\u0026rsquo;s Mechanical Engineering Design, 11th ed. McGraw-Hill. Basquin, O. H. (1910). The exponential law of endurance tests. Proc. ASTM, 10, 625–630. ","permalink":"https://eng-tools.dev/series-a/a1-fatigue-notched-plate/","summary":"10-node analytical pipeline for fatigue life of plates with semicircular notches, with corrections to Hazizi et al. (2023).","title":"Fatigue Life of Notched Plates — Analytical Pipeline (Hazizi 2023)"},{"content":"The classical Lamé equations handle a single thick-walled cylinder under internal and external pressure. Real shaft–hub assemblies are rarely that simple: multiple coaxial rings of different materials, interference fits at each interface, and a rotating load case that adds centrifugal body forces to the stress field. Croccolo \u0026amp; Vincenzi (2009) derived a closed-form analytical solution that covers exactly this configuration — nn n isotropic coaxial cylinders with arbitrary interference and rotation — and validated it against finite element analysis to within 2% on all stress components.\nThis tool implements that solution as a seven-node calculation pipeline. The pipeline takes geometry, material properties, interferences, boundary pressures, and angular velocity as input, solves the tridiagonal compatibility system at the interfaces, and returns contact pressures and full stress distributions \\(\\sigma_r(r)\\) , \\(\\sigma_\\theta(r)\\) , \\(\\sigma_{VM}(r)\\) across all elements. A Python notebook ready to run on Google Colab is provided alongside the derivation, so the result of every intermediate step can be verified by hand or extended to a new case.\nQuick Example Three coaxial cylinders — steel outer ring, aluminium middle ring, steel inner shaft — assembled with interference fits \\(Z_{tot,1} = 0.025\\,\\text{mm}\\) and \\(Z_{tot,2} = 0.010\\,\\text{mm}\\) , subject to external pressure \\(p_0 = 150\\,\\text{MPa}\\) , bore pressure \\(p_3 = 30\\,\\text{MPa}\\) , and angular velocity \\(\\omega = 420\\,\\text{rad/s}\\) .\nParameter Element 1 (Steel) Element 2 (Al) Element 3 (Steel) \\(E\\) (MPa) 206 000 70 000 206 000 \\(\\nu\\) 0.29 0.33 0.29 \\(\\rho\\) (kg/m³) 7850 2770 7850 \\(r_{ext}\\) (mm) 35.000 24.988 14.995 \\(r_{int}\\) (mm) 24.988 14.995 10.000 Contact pressures: \\(p_1 = 161.4\\,\\text{MPa}\\) , \\(p_2 = 175.0\\,\\text{MPa}\\) All equivalent stresses remain below typical yield strengths (\\(\\sigma_{y,\\text{steel}} \\approx 350\\,\\text{MPa}\\) for structural steel, \\(\\sigma_{y,\\text{Al}} \\approx 280\\,\\text{MPa}\\) for 6061-T6), except element 3 inner surface (\\(\\sigma_{VM} = 537.7\\,\\text{MPa}\\) ) which exceeds the yield limit — redesign needed.\nPipeline summary: Node Operation Input Output 1 Geometric ratios Radii \\(r_0 \\ldots r_n\\) \\(Q_i = r_i / r_{i-1}\\) 2 Compatibility coefficients \\(Q_i\\) , \\(E_i\\) , \\(\\nu_i\\) \\(K_i\\) , \\(L_i\\) , \\(N_{i\u0026#43;1}\\) 3 Dynamic contribution \\(\\rho_i\\) , \\(\\omega\\) , \\(Q_i\\) , \\(E_i\\) , \\(\\nu_i\\) \\(V_i\\) 4 Forward sweep \\(K_i\\) , \\(L_i\\) , \\(N_i\\) , \\(V_i\\) , \\(p_0\\) , \\(Z_{tot,i}\\) \\(H_i\\) , \\(I_i\\) , \\(J_i\\) 5 Interface pressures \\(H_i\\) , \\(I_i\\) , \\(J_i\\) , \\(p_n\\) \\(p_1 \\ldots p_{n-1}\\) 6 Stress distributions \\(p_i\\) , \\(Q_i\\) , \\(\\rho_i\\) , \\(\\omega\\) , \\(\\nu_i\\) \\(\\sigma_r(r)\\) , \\(\\sigma_\\theta(r)\\) , \\(\\sigma_{VM}\\) 7 Output Stress arrays Tables, plots Pipeline Overview The pipeline solves a tridiagonal compatibility system (one equation per interface) reduced to bidiagonal form by the forward sweep (Node 4) and resolved back-to-front (Node 5). Lamé equations and centrifugal body-force corrections (Node 6) are then applied element by element.\nNode 1 — Geometric Ratios Purpose. Express all radial positions as dimensionless ratios relative to the outer radius of each element.\nSymbol Description Unit \\(r_i\\) Radius at interface \\(i\\) mm \\[Q_i = \\frac{r_i}{r_{i-1}}, \\quad i = 1, \\ldots, n\\] For a solid shaft (\\(r_n = 0\\) ): \\(Q_n = 0\\) .\nSymbol Description Unit \\(Q_i\\) Radius ratio at interface \\(i\\) — Node 2 — Compatibility Coefficients K, L, N Purpose. Assemble the coefficients of the displacement-compatibility equation at each of the \\(n-1\\) interfaces.\nSymbol Description Unit \\(Q_i\\) , \\(Q_{i\u0026#43;1}\\) Radius ratios — \\(E_i\\) , \\(E_{i\u0026#43;1}\\) Young\u0026rsquo;s moduli MPa \\(\\nu_i\\) , \\(\\nu_{i\u0026#43;1}\\) Poisson\u0026rsquo;s ratios — \\[K_i = \\frac{1}{E_i}\\left[\\frac{1\u0026#43;Q_i^2}{1-Q_i^2} \u0026#43; \\nu_i\\right] \u0026#43; \\frac{1}{E_{i\u0026#43;1}}\\left[1 - \\nu_{i\u0026#43;1} \u0026#43; \\frac{2Q_{i\u0026#43;1}^2}{1-Q_{i\u0026#43;1}^2}\\right]\\] \\[L_i = \\frac{2}{E_i(1-Q_i^2)}, \\qquad N_{i\u0026#43;1} = \\frac{2Q_{i\u0026#43;1}^2}{E_{i\u0026#43;1}(1-Q_{i\u0026#43;1}^2)}\\] Special case: if \\(Q_{i\u0026#43;1} = 0\\) (solid shaft bore), \\(N_{i\u0026#43;1} = 0\\) and the second bracket of \\(K_i\\) reduces to \\((1 - \\nu_{i\u0026#43;1}) / E_{i\u0026#43;1}\\) .\nSymbol Description Unit \\(K_i\\) Diagonal coefficient at interface \\(i\\) MPa⁻¹ \\(L_i\\) Off-diagonal coefficient (outer side) MPa⁻¹ \\(N_{i\u0026#43;1}\\) Off-diagonal coefficient (inner side) MPa⁻¹ Node 3 — Dynamic Compatibility Contribution \\(V_i\\) Purpose. Account for the centrifugal body-force term that shifts the effective interference at each interface when the assembly rotates.\nSymbol Description Unit \\(\\rho_i\\) , \\(\\rho_{i\u0026#43;1}\\) Densities kg/m³ \\(\\omega\\) Angular velocity rad/s \\(r_{i-1}\\) , \\(r_i\\) Interface radii mm \\(Q_i\\) , \\(Q_{i\u0026#43;1}\\) Radius ratios — \\(E_i\\) , \\(E_{i\u0026#43;1}\\) Young\u0026rsquo;s moduli MPa \\(\\nu_i\\) , \\(\\nu_{i\u0026#43;1}\\) Poisson\u0026rsquo;s ratios — \\[V_i = \\frac{\\rho_{i\u0026#43;1}\\omega^2 r_i^2 (3\u0026#43;\\nu_{i\u0026#43;1})/8}{E_{i\u0026#43;1}}\\left[1 \u0026#43; 2Q_{i\u0026#43;1}^2 - \\frac{1\u0026#43;3\\nu_{i\u0026#43;1}}{3\u0026#43;\\nu_{i\u0026#43;1}}\\right] - \\frac{\\rho_i\\omega^2 r_{i-1}^2 (3\u0026#43;\\nu_i)/8}{E_i}\\left[2 \u0026#43; Q_i^2 - \\frac{1\u0026#43;3\\nu_i}{3\u0026#43;\\nu_i}Q_i^2\\right]\\] Unit note: with \\(\\rho\\) in kg/m³, \\(\\omega\\) in rad/s, \\(r\\) in mm, and \\(E\\) in MPa, multiply the numerator by \\(10^{-12}\\) to obtain \\(V_i\\) in the same units as \\(Z_{tot}/r\\) (dimensionless). \\(V_i = 0\\) for all interfaces when \\(\\omega = 0\\) .\nSymbol Description Unit \\(V_i\\) Dynamic compatibility shift at interface \\(i\\) — Node 4 — Forward Sweep: H, I, J Purpose. Reduce the \\((n-1) \\times (n-1)\\) tridiagonal compatibility system to upper-bidiagonal form by propagating boundary conditions from the outer surface inward.\nSymbol Description Unit \\(K_i\\) , \\(L_i\\) , \\(N_{i\u0026#43;1}\\) Compatibility coefficients MPa⁻¹ \\(V_i\\) Dynamic contribution — \\(Z_{tot,i}\\) Total radial interference at interface \\(i\\) mm \\(r_i\\) Radius at interface \\(i\\) mm \\(p_0\\) External pressure MPa Initialisation (\\(i = 1\\) ):\n\\[H_1 = K_1, \\quad I_2 = N_2, \\quad J_1 = p_0 L_1 \u0026#43; \\frac{Z_{tot,1}}{r_1} \u0026#43; V_1\\] Recursion (\\(i = 2, \\ldots, n-1\\) ):\n\\[H_i = \\frac{K_i}{L_i} H_{i-1} - I_i, \\quad I_{i\u0026#43;1} = \\frac{N_{i\u0026#43;1}}{L_i} H_{i-1}, \\quad J_i = J_{i-1} \u0026#43; \\left(\\frac{Z_{tot,i}}{r_i L_i} \u0026#43; \\frac{V_i}{L_i}\\right) H_{i-1}\\] Symbol Description Unit \\(H_i\\) Effective diagonal after elimination MPa⁻¹ \\(I_i\\) Effective off-diagonal after elimination MPa⁻¹ \\(J_i\\) Effective right-hand side after elimination — Node 5 — Interface Pressures Purpose. Solve the reduced bidiagonal system by back-substitution from the innermost interface outward.\nSymbol Description Unit \\(H_i\\) , \\(I_i\\) , \\(J_i\\) Sweep results MPa⁻¹, — \\(p_n\\) Bore pressure MPa \\[p_{n-1} = \\frac{J_{n-1} \u0026#43; p_n I_n}{H_{n-1}}, \\qquad p_{i-1} = \\frac{p_i I_i \u0026#43; J_{i-1}}{H_{i-1}}, \\quad i = n-1, \\ldots, 2\\] Symbol Description Unit \\(p_1 \\ldots p_{n-1}\\) Contact pressures at interfaces MPa Node 6 — Stress Distributions Purpose. Compute \\(\\sigma_r\\) , \\(\\sigma_\\theta\\) , and \\(\\sigma_{VM}\\) at any radius within each element by superimposing static Lamé and centrifugal contributions.\nSymbol Description Unit \\(p_{i-1}\\) , \\(p_i\\) Bounding pressures for element \\(i\\) MPa \\(Q_i\\) Radius ratio of element \\(i\\) — \\(Q_g = r_g / r_{i-1}\\) Normalised evaluation radius — \\(\\rho_i\\) , \\(\\nu_i\\) Density, Poisson\u0026rsquo;s ratio kg/m³, — \\(\\omega\\) Angular velocity rad/s Static Lamé (eqs. 2):\n\\[\\sigma_{r,s} = -p_{i-1} \u0026#43; (p_i - p_{i-1})\\frac{Q_i^2}{1-Q_i^2}\\left(1 - \\frac{1}{Q_g^2}\\right)\\] \\[\\sigma_{\\theta,s} = -p_{i-1} \u0026#43; (p_i - p_{i-1})\\frac{Q_i^2}{1-Q_i^2}\\left(1 \u0026#43; \\frac{1}{Q_g^2}\\right)\\] Centrifugal (eq. 25), with units as in Node 3:\n\\[\\sigma_{r,d} = \\rho_i\\omega^2 r_{i-1}^2 \\frac{3\u0026#43;\\nu_i}{8}\\left(1 \u0026#43; Q_i^2 - \\frac{Q_i^2}{Q_g^2} - Q_g^2\\right)\\] \\[\\sigma_{\\theta,d} = \\rho_i\\omega^2 r_{i-1}^2 \\frac{3\u0026#43;\\nu_i}{8}\\left(1 \u0026#43; Q_i^2 \u0026#43; \\frac{Q_i^2}{Q_g^2} - \\frac{1\u0026#43;3\\nu_i}{3\u0026#43;\\nu_i}Q_g^2\\right)\\] Von Mises (plane stress, \\(\\sigma_z = 0\\) ):\n\\[\\sigma_{VM} = \\sqrt{\\sigma_r^2 \u0026#43; \\sigma_\\theta^2 - \\sigma_r\\sigma_\\theta}\\] Symbol Description Unit \\(\\sigma_r(r)\\) Radial stress distribution MPa \\(\\sigma_\\theta(r)\\) Hoop stress distribution MPa \\(\\sigma_{VM}\\) Von Mises equivalent stress MPa Numerical Case — Croccolo \u0026amp; Vincenzi (2009), Tables 1–3 Input Element Material \\(E\\) (MPa) \\(\\nu\\) \\(\\rho\\) (kg/m³) \\(r_{ext}\\) (mm) \\(r_{int}\\) (mm) 1 Steel 206 000 0.29 7850 35.000 24.988 2 Aluminium 70 000 0.33 2770 24.988 14.995 3 Steel 206 000 0.29 7850 14.995 10.000 \\(Z_{tot,1} = 0.025\\,\\text{mm}\\) , \\(Z_{tot,2} = 0.010\\,\\text{mm}\\) , \\(p_0 = 150\\,\\text{MPa}\\) , \\(p_3 = 30\\,\\text{MPa}\\) , \\(\\omega = 420\\,\\text{rad/s}\\) .\nNode 1 — Geometric ratios \\[Q_1 = \\frac{24.988}{35.000} = 0.71394, \\quad Q_2 = \\frac{14.995}{24.988} = 0.60009, \\quad Q_3 = \\frac{10.000}{14.995} = 0.66689\\] Node 2 — Coefficients at interface 1 (\\(i=1\\) ) \\[K_1 = \\frac{1}{206000}\\left[\\frac{1\u0026#43;0.71394^2}{1-0.71394^2}\u0026#43;0.29\\right] \u0026#43; \\frac{1}{70000}\\left[1-0.33\u0026#43;\\frac{2\\cdot0.60009^2}{1-0.60009^2}\\right] = 4.2006\\times10^{-5}\\,\\text{MPa}^{-1}\\] \\[L_1 = \\frac{2}{206000\\,(1-0.71394^2)} = 1.9802\\times10^{-5}\\,\\text{MPa}^{-1}\\] \\[N_2 = \\frac{2\\cdot0.60009^2}{70000\\,(1-0.60009^2)} = 1.6079\\times10^{-5}\\,\\text{MPa}^{-1}\\] At interface 2 (\\(i=2\\) ):\n\\[K_2 = 4.6302\\times10^{-5}\\,\\text{MPa}^{-1}, \\quad L_2 = 4.4650\\times10^{-5}\\,\\text{MPa}^{-1}, \\quad N_3 = 7.7763\\times10^{-6}\\,\\text{MPa}^{-1}\\] Node 3 — Dynamic contributions For interface 1, with \\(\\rho_2 = 2770\\) , \\(r_1 = 24.988\\,\\text{mm}\\) , \\(\\rho_1 = 7850\\) , \\(r_0 = 35.000\\,\\text{mm}\\) :\n\\[V_1 = \\frac{2770\\cdot420^2\\cdot24.988^2\\cdot10^{-12}\\cdot(3\u0026#43;0.33)/8}{70000}\\left[1\u0026#43;2\\cdot0.60009^2-\\frac{1\u0026#43;3\\cdot0.33}{3\u0026#43;0.33}\\right]\\] \\[\\quad - \\frac{7850\\cdot420^2\\cdot35.000^2\\cdot10^{-12}\\cdot(3\u0026#43;0.29)/8}{206000}\\left[2\u0026#43;0.71394^2-\\frac{1\u0026#43;3\\cdot0.29}{3\u0026#43;0.29}\\cdot0.71394^2\\right]\\] \\[= -5.481\\times10^{-6}\\] \\[V_2 = -3.070\\times10^{-6}\\] Node 4 — Forward sweep Initialisation:\n\\[H_1 = K_1 = 4.2006\\times10^{-5}, \\quad I_2 = N_2 = 1.6079\\times10^{-5}\\] \\[J_1 = 150\\cdot1.9802\\times10^{-5} \u0026#43; \\frac{0.025}{24.988} \u0026#43; (-5.481\\times10^{-6}) = 3.9653\\times10^{-3}\\] Recursion at \\(i=2\\) :\n\\[H_2 = \\frac{K_2}{L_2}H_1 - I_2 = \\frac{4.6302\\times10^{-5}}{4.4650\\times10^{-5}}\\cdot4.2006\\times10^{-5} - 1.6079\\times10^{-5} = 2.7481\\times10^{-5}\\] \\[I_3 = \\frac{N_3}{L_2}H_1 = \\frac{7.7763\\times10^{-6}}{4.4650\\times10^{-5}}\\cdot4.2006\\times10^{-5} = 7.3158\\times10^{-6}\\] \\[J_2 = J_1 \u0026#43; \\frac{H_1}{L_2}\\left(\\frac{0.010}{14.995}\u0026#43;(-3.070\\times10^{-6})\\right) = 4.5898\\times10^{-3}\\] Node 5 — Interface pressures \\[p_2 = \\frac{J_2 \u0026#43; p_3\\,I_3}{H_2} = \\frac{4.5898\\times10^{-3} \u0026#43; 30\\cdot7.3158\\times10^{-6}}{2.7481\\times10^{-5}} = 175.01\\,\\text{MPa}\\] \\[p_1 = \\frac{p_2\\,I_2 \u0026#43; J_1}{H_1} = \\frac{175.01\\cdot1.6079\\times10^{-5} \u0026#43; 3.9653\\times10^{-3}}{4.2006\\times10^{-5}} = 161.39\\,\\text{MPa}\\] Node 6 — Stresses at element boundaries All values in MPa. For brevity only boundary radii (\\(r = r_{int}\\) and \\(r = r_{ext}\\) ) are shown.\nElem \\(\\sigma_{r,int}\\) \\(\\sigma_{r,ext}\\) \\(\\sigma_{\\theta,int}\\) \\(\\sigma_{\\theta,ext}\\) \\(\\sigma_{VM,int}\\) \\(\\sigma_{VM,ext}\\) 1 −161.39 −150.00 −113.38 −125.31 143.54 139.31 2 −175.00 −161.39 −132.17 −145.92 158.01 154.24 3 −30.00 −175.01 −552.03 −407.13 537.65 353.74 FEM validation (Table 3 of the paper): maximum deviation on all stress components is below 2%.\nStress Distribution The curves are continuous across interfaces. The sharp change in slope at each interface reflects the material discontinuity. The hoop stress in element 3 is dominated by the centrifugal term at the inner bore, reaching −552 MPa — the governing failure mode for this configuration.\nHow to Use the Notebook The Python notebook implements the full 7-node pipeline and runs directly on Google Colab with no installation required (numpy and matplotlib are preinstalled).\nOpen in Colab\nModify only the cell marked ✏️ Input. The parameters are:\nParameter Symbol Unit Note Number of elements n — ≥ 2 Radii, outermost first r mm length n+1; set r[n]=0 for solid shaft Young\u0026rsquo;s modulus E MPa length n Poisson\u0026rsquo;s ratio nu — length n Density rho kg/m³ length n; needed only when omega ≠ 0 Radial interference Z_tot mm length n-1; set to 0 for clearance fit External pressure p0 MPa applied to outermost surface Bore pressure pn MPa set to 0 for solid shaft Angular velocity omega rad/s set to 0 for static case Known limitations. The model assumes isotropic linear-elastic materials (\\(\\sigma_{VM} \u0026lt; \\sigma_y\\) must be verified after the fact), axial symmetry, plane stress (\\(\\sigma_z = 0\\) , accurate for short couplings with \\(L \\sim D\\) ), identical axial length for all elements, and a single common \\(\\omega\\) . No thermal loading, friction, or axial force is accounted for.\nReferences [1] Croccolo, D. \u0026amp; Vincenzi, N. (2009). A generalized theory for shaft–hub couplings. Proc. IMechE Part C: J. Mechanical Engineering Science, 223, 2231–2239.\n[2] Croccolo, D. \u0026amp; De Agostinis, M. (2013). Analytical solution of stress and strain distributions in press fitted orthotropic cylinders. Int. J. Mechanical Sciences, 71, 21–29.\n","permalink":"https://eng-tools.dev/series-a/a3-thick-walled-cylinder/","summary":"From internal pressure and geometry to radial/hoop stress distribution — Lamé equations, pipeline, notebook, and numerical verification.","title":"Thick-Walled Cylinder Stress Analysis — Analytical Pipeline (Croccolo 2009)"},{"content":"About this project Engineering Tools is a collection of open-source calculation pipelines and formula derivations for mechanical engineering.\nThe project has two lines:\nSeries A — Papers → Tools takes methods published in technical papers and turns them into documented, replicable calculation chains. Each tool includes a step-by-step pipeline with explicit inputs and outputs at every node, a numerical verification case, and a Python notebook runnable on Google Colab. Where the source paper contains errors, they are identified, corrected, and documented.\nSeries B — Open Formula traces recurring structural formulas back to first principles. Each derivation starts from a physical hypothesis and arrives at the final boxed formula through numbered equations with cross-references, validity limits stated alongside each step, and assumptions listed in the order they entered. The reader is assumed to be an engineer who is verifying, not a student who is learning.\nEverything is open: the site source, the notebooks, the derivations. Use them, check them, break them.\nAbout the author G. Ganz — Mechanical engineer.\nQuestions, corrections, or suggestions: open an issue on GitHub.\n","permalink":"https://eng-tools.dev/about/","summary":"About this project and its author.","title":"About — Engineering Tools"},{"content":"\nEmail address:\nMessage:\nSend Message ","permalink":"https://eng-tools.dev/contact/","summary":"\u003cp\u003e\u003cimg alt=\"Contact form for Engineering Tools — questions, corrections and suggestions\" loading=\"lazy\" src=\"/contact/engineering-contact.png\"\u003e\u003c/p\u003e\n\n\u003cstyle\u003e\n  /* Base input field styling */\n  .formspree-input, .formspree-textarea {\n    margin-bottom: 15px;\n    width: 100%;\n    max-width: 400px;\n    padding: 10px;\n    \n    /* Dark background matching the image style */\n    background-color: #2a2b2e; \n    \n    /* Off-white text for readability */\n    color: #f8f9fa; \n    \n    /* Subtle cyan border, inspired by the glowing lines in the image */\n    border: 2px solid #00bcd4; \n    \n    border-radius: 4px;\n    \n    /* Smooth transition for interaction */\n    transition: border-color 0.2s, box-shadow 0.2s;\n  }\n\n  /* Interaction styling: change border and add glow on focus (selection) */\n  .formspree-input:focus, .formspree-textarea:focus {\n    outline: none;\n    border-color: #f8f9fa; /* Focus to white text color */\n    \n    /* Cyan glow effect */\n    box-shadow: 0 0 8px rgba(0, 188, 212, 0.6); \n  }\n\u003c/style\u003e\n\n\u003cform action=\"https://formspree.io/f/xjgpjjbk\" method=\"POST\"\u003e\n  \u003clabel for=\"email\"\u003eEmail address:\u003c/label\u003e\u003cbr\u003e\n  \u003cinput type=\"email\" id=\"email\" name=\"email\" placeholder=\"your.email@example.com\" required class=\"formspree-input\"\u003e\n  \u003cbr\u003e\n  \u003clabel for=\"message\"\u003eMessage:\u003c/label\u003e\u003cbr\u003e\n  \u003ctextarea id=\"message\" name=\"message\" rows=\"5\" placeholder=\"How can I help you?\" required class=\"formspree-textarea\"\u003e\u003c/textarea\u003e\n  \u003cbr\u003e\n  \u003cinput type=\"hidden\" name=\"_next\" value=\"https://endofwave.github.io/engineering-tools/success/\"\u003e\n  \u003cbutton type=\"submit\" style=\"padding: 10px 20px; cursor: pointer; border-radius: 4px; background-color: #007bff; color: white; border: none; font-weight: bold;\"\u003eSend Message\u003c/button\u003e\n\u003c/form\u003e","title":"Contact"},{"content":"Thank you. Your message has been sent successfully.\n","permalink":"https://eng-tools.dev/success/","summary":"\u003cp\u003eThank you. Your message has been sent successfully.\u003c/p\u003e","title":"Message Sent"}]