Skip to content

Nonlinear

CalcpadCE worksheets in this section present geometrically nonlinear truss analysis, where the equilibrium equations are written in the deformed configuration so that large displacements and snap-through behaviour are captured naturally. The system of equations is implicit in the joint displacements and is therefore solved iteratively β€” by fixed-point iteration, Newton-Raphson, the secant method, and the built-in Root solver based on a modified Anderson-BjΓΆrck bracketing scheme.

A symmetric two-bar Biot truss demonstrates the four numerical methods on a system that is linearly unstable: the equilibrium has to be derived for the deformed length \(l'(v) = \sqrt{(l + u)^2 + v^2}\) and the vertical reaction \(F_y(v) = E A \cdot \Delta l(v) / l \cdot v / l'(v)\) is then balanced against the applied load. A shallow Von-Mises truss extends the same formulation to a tube section with a small initial rise, where the load-displacement curve passes through a limit point and the post-buckling branch is followed. A prestressed asymmetric Biot truss combines geometric nonlinearity with a bilinear elastic-plastic material law, so that the element stiffness \(E A\) switches from \(E_0 A\) to \(E_1 A\) once the strain exceeds the yield value \(\varepsilon_y\), and a global Newton-Raphson loop updates the Jacobi matrix at each iteration.

A small SVG drawing library, svg_drawing.cpd, is included by each worksheet to render the undeformed and deformed configurations, supports and applied forces directly into the report.

Material and Geometric Nonlinear Analysis of Prestressed Asymmetric Biot Truss

Combined material and geometric nonlinear analysis of a prestressed three-joint truss with a bilinear elastic-plastic stress-strain law, solved by a global Newton-Raphson iteration that updates the Jacobi matrix and the axial stiffness \(E A\) at each step.

Code:
'<h4>Input data</h4>
#deg
#hide
Ξ΄z = 10^-12
Precision = 10^-9
x_J = [0; 3; 9]*m
y_J = [0; 0; 0]*m
#show
x_J','y_J', 'n_J = len(x_J)
'<h4>Elements - [J1; J2]</h4>
#hide
E_J = [1; 2|2; 3]
#show
transp(E_J)', 'n_E = n_rows(E_J)', 'J_1(e) = E_J.(e; 1)', 'J_2(e) = E_J.(e; 2)
'Element endpoint coordinates
x_1(e) = x_J.J_1(e)','y_1(e) = y_J.J_1(e)', 'x_2(e) = x_J.J_2(e)','y_2(e) = y_J.J_2(e)
'Element lengths - 'l(e) = sqrt((x_2(e) - x_1(e))^2 + (y_2(e) - y_1(e))^2)
'Element directions -'c(e) = (x_2(e) - x_1(e))/l(e)','s(e) = (y_2(e) - y_1(e))/l(e)
'Transformation matrix
t(e) = [c(e); s(e)| - s(e); c(e)]
T(e) = add(t(e); add(t(e); matrix(4; 4); 1; 1); 3; 3)
'<h4>Supports - [Joint; cx; cy]</h4>
#hide
c_J = [1; 10^20kN/m; 10^20kN/m|3; 10^20kN/m; 10^20kN/m]
#show
c_J
n_c = n_rows(c_J)
'<h4>Material - steel</h4>
'We assume bi-linear material model
'Initial modulus of elasticity -'E_0 = 206GPa
'Yield stress -'f_y = 500MPa
'Ultimate tensile stress -'f_u = 600MPa
'Yield strain -'Ξ΅_y = f_y/E_0|‰
'Ultimate  strain -'Ξ΅_u = 20‰
'Modulus of elasticity after yield -'E_1 = (f_u - f_y)/(Ξ΅_u - Ξ΅_y)|GPa
'Idealized stress-strain curve -'Οƒ(Ξ΅) = if(Ξ΅ < Ξ΅_y; E_0*Ξ΅; f_y + E_1*(Ξ΅ - Ξ΅_y))
'<!--'PlotWidth = 200','PlotHeight = 150'-->
$Plot{Οƒ(Ξ΅) @ Ξ΅ = 0‰ : Ξ΅_u}
'<h4>Cross section – circular with diameter'Ξ¦ = 20mm'</h4>
'Area -'A = Ο€*Ξ¦^2/4|cm^2
'Stiffness
'Initial -'EA_0 = E_0*A', 'EA = EA_0
'After yield -'EA_1 = E_1*A
'<h4>Load - [Joint, Fx, Fy]</h4>
#hide
F_J = join_rows([2; 0kN; -70kN])
#show
F_J', 'n_F = n_rows(F_J)
'Prestressing force -'P = 20kN
'Initial stress -'Οƒ_P = P/A|MPa
'Initial strain -'Ξ΅_P = Οƒ_P/E_0
#include svg_drawing.cpd
#hide
Z = vector(2*n_J)*mm
w = max(x_J)
h = max(y_J)
W = 320
k = W/w
H = (h + 3m)*k
r = 3
x1(j) = (x_J.j + Z.(2*j - 1))*k
y1(j) = (h - y_J.j + Z.(2*j))*k
#def svg$ = '<svg viewbox="'-2.5m*k' '-1m*k' '(w + 5m)*k' 'H'" xmlns="http://www.w3.org/2000/svg" version="1.1" style="font-family: Georgia Pro Cond; font-size:11px; width:'W + 100'pt; height:'H + 100*H/W'pt">
#def thin_style$ = style="stroke:darkcyan; stroke-width:1; fill:none"
#def pin_style$ = style="stroke:red; stroke-width:1; fill:white"
#def thick_style$ = style="stroke:darkcyan; stroke-width:3; fill:none"
#def load_style$ = style="stroke:deepskyblue; stroke-width:1; fill:deepskyblue;"
#show
#val
svg$
#def frame$
    #for i = 1 : n_E
        #hide
        x1 = x1(J_1(i))
        y1 = y1(J_1(i))
        x2 = x1(J_2(i))
        y2 = y1(J_2(i))
        #show
        line$(x1; y1; x2; y2; main_style$)
        dimh$(x1;x2;H-1.5m*k;'(x2-x1)/k'm)
    #loop
    #for i = 1 : n_c
        #hide
        j = c_J.(i; 1)
        x1 = x1(j)
        y1 = y1(j) + r
        Ξ΄ = w/30*k*sign(x1 - w/2*k)
        x2 = x1 - Ξ΄
        y2 = y1 - abs(Ξ΄)
        x3 = x1 + Ξ΄
        y3 = y1 + abs(Ξ΄)
        #show
        line$(x2; y3; x3; y3; thick_style$)
        line$(x2; y3; x1; y1; thin_style$)
        line$(x3; y3; x1; y1; thin_style$)
    #loop
    #for i = 1 : n_F
        #hide
        Ξ΄ = 0.5m*k
        j = F_J.(i; 1)
        F_x = F_J.(i; 2)/kN
        F_y = F_J.(i; 3)/kN
        #show
        #if F_x β‰  0
            #hide
            Ξ΄_x = 3*Ξ΄*sign(F_x)
            Ξ΄_y = 0.2*Ξ΄
            x1 = x1(j) + r*sign(F_x)
            y1 = y1(j)
            #show
            '<polygon points="'x1 - Ξ΄_x','y1' 'x1','y1' 'x1 - Ξ΄_x/5','y1 - Ξ΄_y' 'x1 - Ξ΄_x/5','y1 + Ξ΄_y' 'x1','y1'" load_style$ />
            texth$(x1-2*Ξ΄_x/3;y1-2*Ξ΄_y;Fx='F_x'kN)
        #end if
        #if F_y β‰  0
            #hide
            Ξ΄_x = 0.2*Ξ΄
            Ξ΄_y = 3*Ξ΄*sign(F_y)
            x1 = x1(j)
            y1 = y1(j) + r*sign(F_y)
            #show
            '<polygon points="'x1','y1 + Ξ΄_y' 'x1','y1' 'x1 - Ξ΄_x','y1 + Ξ΄_y/5' 'x1 + Ξ΄_x','y1 + Ξ΄_y/5' 'x1','y1'" load_style$ />
            textv$(x1-2*Ξ΄_x;y1+2*Ξ΄_y/3;Fy='F_y'kN)
        #end if
    #loop
    #for j = 1 : n_J
        circle$(x1(j); y1(j); r; pin_style$)
        #if abs(Z.(2*j)) > Ξ΄z*mm
            textv$(x1(j)-0.2*Ξ΄; y1(j)+1.8*Ξ΄;'Z.(2*j)'mm)
        #end if
        #if abs(Z.(2*j - 1)) > Ξ΄z*mm
            texth$(x1(j)+1.5*Ξ΄; y1(j)+0.8*Ξ΄;'Z.(2*j - 1)'mm)
        #end if
    #loop
#end def
frame$
'</svg>
#equ
'<h4>Finite element formulation</h4>
'<!--'u = 0','v = 0','z = [0; 0]'-->
'We will formulate a 2D truss element with 3rd order geometric nonlinearity. The equilibrium equations will be derived in local CS, for the deformed state of the structure, assuming large displacements, as follows:
'<img style="height:115pt; width:198pt;" src="./Images/nonlin-truss-element.png" alt="nonlin-truss-element.png">
#noc
'Relative displacements -'u = u_2 - u_1', 'v = v_2 - v_1', 'z = [u; v]
#equ
'Length and elongation of the element in deformed state
lβ€²(e; z) = sqrt((l(e) + z.1)^2 + z.2^2)','Ξ”l(e; z) = lβ€²(e; z) - l(e)', 'Ξ΅(e; z) = Ξ”l(e; z)/l(e) + Ξ΅_P
'Directions of the displaced axis of the element in the deformed state
c_d(e; z) = (l(e) + z.1)/lβ€²(e; z)', 's_d(e; z) = z.2/lβ€²(e; z)
'Axial force in element -'N(e; z) = Οƒ(Ξ΅(e; z))*A
'Horizontal reactive force at the right end -'F_x(e; z) = N(e; z)*c_d(e; z)
'Vertical reactive force at the right end -'F_y(e; z) = N(e; z)*s_d(e; z)
'Partial derivatives of element end reactive forces
Fβ€²_x1(e; z) = (1/l(e) - z.2^2/lβ€²(e; z)^3)', ' _
Fβ€²_x2(e; z) = (z.2*(l(e) + z.1)/lβ€²(e; z)^3)
Fβ€²_y1(e; z) = Fβ€²_x2(e; z)', ' _
Fβ€²_y2(e; z) = (1/l(e) - (l(e) + z.1)^2/lβ€²(e; z)^3)
'We are not going to linearize the above equations by Taylor series. We will use them further directly in their implicit form.
'<h4>Solution by Newton-Raphson’s method</h4>
'We will express the parameters of the system as a function of the vector of t he unknown displacements:
Z = vector(2*n_J)*mm
'Initial deflection at the intermediate joint -'Z.(n_J + 1) = 100mm
'Extracting displacements for joint <var>j</var> -'z_J(j) = [Z.(2*j - 1); Z.(2*j)]
'Relative displacements for element <var>e</var> -' _
z_e(e) = t(e)*(z_J(J_2(e)) - z_J(J_1(e)))
'Element reactive forces partial vector -' _
F_e(e) = t(e)*[F_x(e; z_e(e)); F_y(e; z_e(e))]
'Partial element Jacobi matrix
J_e(e) = t(e)*[ _
Fβ€²_x1(e; z_e(e)); Fβ€²_x2(e; z_e(e))| _
Fβ€²_y1(e; z_e(e)); Fβ€²_y2(e; z_e(e))]
'Target precision -'Ξ΅_max = 10^-5
#hide
#for n = 1 : 100
    z_J(j) = [Z.(2*j - 1); Z.(2*j)]
    'Global load vector
    F = vector(2*n_J)*kN
    s = -1
    'Add internal forces
    #for e = 1 : n_E
        #for k = 1 : 2
            j = E_J.(e; k)
            j_2 = 2*j
            F.(j_2 - 1) = F.(j_2 - 1) + take(1; F_e(e))*s
            F.(j_2) = F.(j_2) + take(2; F_e(e))*s
            s = -s
        #loop
    #loop
    'Add support rections
    #for i = 1 : n_c
        j = c_J.(i; 1)
        j_2 = 2*j
        F.(j_2 - 1) = F.(j_2 - 1) + c_J.(i; 2)*Z.(j_2 - 1)
        F.(j_2) = F.(j_2) + c_J.(i; 3)*Z.(j_2)
    #loop
    'Add external loads
    #for i = 1 : n_F
        j = F_J.(i; 1)
        j_2 = 2*j
        F.(j_2 - 1) = F.(j_2 - 1) + F_J.(i; 2)
        F.(j_2) = F.(j_2) + F_J.(i; 3)
    #loop
    'Global Jacobi matrix
    J = symmetric(2*n_J)*kN/m
    'Add element Jacobi matrices
    #for e = 1 : n_E
        Ξ΅ = Ξ΅(e; z_e(e))
        EA = if(Ξ΅ < Ξ΅_y; EA_0; max(EA_0/10; EA_1))
        #for i = 1 : 2
            #for j = 1 : 2
                k = if(i ≑ j; EA; -EA)
                i_1 = 2*E_J.(e; i) - 1
                j_1 = 2*E_J.(e; j) - 1
                add(k*J_e(e); J; i_1; j_1)
            #loop
        #loop
    #loop
    'Add support springs
    #for i = 1 : n_c
        j = c_J.(i; 1)
        C_x = c_J.(i; 2)
        C_y = c_J.(i; 3)
        j_1 = 2*j - 1
        j_2 = 2*j
        J.(j_1; j_1) = J.(j_1; j_1) + C_x
        J.(j_2; j_2) = J.(j_2; j_2) + C_y
    #loop
    Z_0 = Z
    Ξ΄Z = clsolve(J; F)|mm
    Z = Z_0 - Ξ΄Z
    Ξ΅ = norm_e(Ξ΄Z)/norm_e(Z)
    #if Ξ΅ < Ξ΅_max
        #break
    #end if
#loop
#show
'Iteratively calculate the following equations of the Newton-Raphson’s method:
#noc
Z_0 = Z','Ξ΄Z = clsolve(J(Z); F(Z))|mm','Z = Z_0 - Ξ΄Z','Ξ΅ = norm_e(Ξ΄Z)/norm_e(Z) < Ξ΅_max
#equ
'Convergence reached at iteration -'n'. Relative error -'Ξ΅
'<h4>Results</h4>
'<p><strong>Joint displacements</strong> -'Z(j) = round(z_J(j)/Ξ΄z)*Ξ΄z'</p>
#novar
#for j = 1 : n_J
    #if norm_1(Z(j)) > Ξ΄z*mm
        #val
        '<p>Joint <b>J'j'</b> - <var>Z</var><sub>'j
        #equ
        '</sub> ='Z(j)'</p>
    #end if
#loop
#varsub
'<p><strong>Reactions in supports</strong></p>
r(i) = row(c_J; i)','j(i) = take(1; r(i))', ' _
R(i) = -z_J(j(i))*last(r(i); 2)
#novar
#for i = 1 : n_c
    #val
    '<p>Joint <b>J'j(i)'</b> - <var>R</var><sub>'i
    #equ
    '</sub> ='R(i)'</p>
#loop
#varsub
'Element yield capacity  -'N_y = f_y*A
'Element ultimate capacity -'N_u = f_u*A
'<p><strong>Element axial forces</strong> -'N_e(e) = N(e; z_e(e))'</p>
#novar
#for e = 1 : n_E
    #val
    '<p>Element <b>Π•'e'</b> - <var>N</var><sub>'e'
    #equ
    '</sub> ='N_e(e)'</p>
#loop
#varsub
#val
#hide
k = W/w
Ξ΄ = 0.5m*k
#show
svg$
'<polygon points="'0','0' '0','-3*Ξ΄' '-0.2*Ξ΄','-2.4*Ξ΄' '0.2*Ξ΄','-2.4*Ξ΄' '0','-3*Ξ΄'" load_style$/>
'<polygon points="'W','0' 'W','-3*Ξ΄' 'W - 0.2*Ξ΄','-2.4*Ξ΄' 'W + 0.2*Ξ΄','-2.4*Ξ΄' 'W','-3*Ξ΄'" load_style$/>
'<polygon points="'r','0' '-3*Ξ΄','0' '-2.4*Ξ΄','-0.2*Ξ΄' '-2.4*Ξ΄','0.2*Ξ΄' '-3*Ξ΄','0'" load_style$/>
'<polygon points="'W + r','0' 'W + 3*Ξ΄','0' 'W + 2.4*Ξ΄','-0.2*Ξ΄' 'W + 2.4*Ξ΄','0.2*Ξ΄' 'W + 3*Ξ΄','0'" load_style$/>
texth$(-2*Ξ΄;-0.5*Ξ΄;Rx='take(1; R(1))'kN)
texth$(W+2*Ξ΄;-0.5*Ξ΄;Rx='take(1; R(2))'kN)
texth$(2*Ξ΄;-3.2*Ξ΄;Ry='take(2; R(1))'kN)
texth$(W-2*Ξ΄;-3.2*Ξ΄;Ry='take(2; R(2))'kN)
frame$
'</svg>
#equ
Rendered Output:
Input data

βƒ—xJ = [0 m 3 m 9 m] , βƒ—yJ = [0 m 0 m 0 m] , nJ = lenβ€Š(β€Šβƒ—xJβ€Š)β€Š = 3

Elements - [J1; J2]

transpβ€Š(β€ŠEJβ€Š)β€Š = 12 23 , nE = nrowsβ€Š(β€ŠEJβ€Š)β€Š = 2 , J1β€Š(β€Šeβ€Š)β€Š = EJ.e,1 , J2β€Š(β€Šeβ€Š)β€Š = EJ.e,2

Element endpoint coordinates

x1β€Š(β€Šeβ€Š)β€Š = βƒ—xJ.J1β€Šβ€Š(β€Šeβ€Š)β€Š , y1β€Š(β€Šeβ€Š)β€Š = βƒ—yJ.J1β€Šβ€Š(β€Šeβ€Š)β€Š , x2β€Š(β€Šeβ€Š)β€Š = βƒ—xJ.J2β€Šβ€Š(β€Šeβ€Š)β€Š , y2β€Š(β€Šeβ€Š)β€Š = βƒ—yJ.J2β€Šβ€Š(β€Šeβ€Š)β€Š

Element lengths - lβ€Š(β€Šeβ€Š)β€Š =    √ β€Š(β€Šx2β€Šβ€Š(β€Šeβ€Š)β€Š βˆ’ x1β€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š2 + β€Š(β€Šy2β€Šβ€Š(β€Šeβ€Š)β€Š βˆ’ y1β€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š2

Element directions - cβ€Š(β€Šeβ€Š)β€Š = x2β€Šβ€Š(β€Šeβ€Š)β€Š βˆ’ x1β€Šβ€Š(β€Šeβ€Š)β€Šlβ€Šβ€Š(β€Šeβ€Š)β€Š , sβ€Š(β€Šeβ€Š)β€Š = y2β€Šβ€Š(β€Šeβ€Š)β€Š βˆ’ y1β€Šβ€Š(β€Šeβ€Š)β€Šlβ€Šβ€Š(β€Šeβ€Š)β€Š

Transformation matrix

tβ€Š(β€Šeβ€Š)β€Š = [cβ€Šβ€Š(β€Šeβ€Š)β€Š; sβ€Šβ€Š(β€Šeβ€Š)β€Š | -sβ€Šβ€Š(β€Šeβ€Š)β€Š; cβ€Šβ€Š(β€Šeβ€Š)β€Š]

Tβ€Š(β€Šeβ€Š)β€Š = addβ€Š(β€Štβ€Šβ€Š(β€Šeβ€Š)β€Š; addβ€Š(β€Štβ€Šβ€Š(β€Šeβ€Š)β€Š; matrixβ€Š(β€Š4; 4β€Š)β€Š; 1; 1β€Š)β€Š; 3; 3β€Š)β€Š

Supports - [Joint; cx; cy]

cJ = 11020 kNβ€‰βˆ•β€‰m1020 kNβ€‰βˆ•β€‰m 31020 kNβ€‰βˆ•β€‰m1020 kNβ€‰βˆ•β€‰m

nc = nrowsβ€Š(β€ŠcJβ€Š)β€Š = 2

Material - steel

We assume bi-linear material model

Initial modulus of elasticity - E0 = 206 GPa

Yield stress - fy = 500 MPa

Ultimate tensile stress - fu = 600 MPa

Yield strain - Ξ΅y = fyE0 = 500 MPa206 GPa = 2.43 ‰

Ultimate strain - Ξ΅u = 20 ‰

Modulus of elasticity after yield - E1 = fu βˆ’ fyΞ΅u βˆ’ Ξ΅y = 600 MPa βˆ’ 500 MPa20 ‰ βˆ’ 2.43 ‰ = 5.69 GPa

Idealized stress-strain curve - Οƒβ€Š(β€ŠΞ΅β€Š)β€Š = {if Ξ΅ < Ξ΅y: E0 · Ρ
else: fy + E1β€†Β·β€†β€Š(β€ŠΞ΅ βˆ’ Ξ΅yβ€Š)β€Š

Plot
Cross section – circular with diameter Ξ¦ = 20 mm

Area - A = π · Φ24 = 3.14β€†Β·β€†β€Š(β€Š20 mmβ€Š)β€Š24 = 3.14 cm2

Stiffness

Initial - EA0 = E0 · A = 206 GPa · 3.14 cm2 = 64716.8 kN , EA = EA0 = 64716.8 kN

After yield - EA1 = E1 · A = 5.69 GPa · 3.14 cm2 = 1787.76 kN

Load - [Joint, Fx, Fy]

FJ = 20 kN-70 kN , nF = nrowsβ€Š(β€ŠFJβ€Š)β€Š = 1

Prestressing force - P = 20 kN

Initial stress - ΟƒP = PA = 20 kN3.14 cm2 = 63.66 MPa

Initial strain - Ξ΅P = ΟƒPE0 = 63.66 MPa206 GPa = 0.000309

3m6mFy=-70kN
Finite element formulation

We will formulate a 2D truss element with 3rd order geometric nonlinearity. The equilibrium equations will be derived in local CS, for the deformed state of the structure, assuming large displacements, as follows:

nonlin-truss-element.png

Relative displacements - u = u2 βˆ’ u1 , v = v2 βˆ’ v1 , βƒ—z = [u; v]

Length and elongation of the element in deformed state

lβ€²β€Š(β€Še; zβ€Š)β€Š =    √ β€Š(β€Šlβ€Šβ€Š(β€Šeβ€Š)β€Š + z1β€Š)β€Š2 + z22 , Ξ”lβ€Š(β€Še; zβ€Š)β€Š = lβ€²β€Šβ€Š(β€Še; zβ€Š)β€Š βˆ’ lβ€Šβ€Š(β€Šeβ€Š)β€Š , Ξ΅β€Š(β€Še; zβ€Š)β€Š = Ξ”lβ€Šβ€Š(β€Še; zβ€Š)β€Šlβ€Šβ€Š(β€Šeβ€Š)β€Š + Ξ΅P

Directions of the displaced axis of the element in the deformed state

cdβ€Š(β€Še; zβ€Š)β€Š = lβ€Šβ€Š(β€Šeβ€Š)β€Š + z1lβ€²β€Šβ€Š(β€Še; zβ€Š)β€Š , sdβ€Š(β€Še; zβ€Š)β€Š = z2lβ€²β€Šβ€Š(β€Še; zβ€Š)β€Š

Axial force in element - Nβ€Š(β€Še; zβ€Š)β€Š = Οƒβ€Šβ€Š(β€ŠΞ΅β€Šβ€Š(β€Še; zβ€Š)β€Šβ€Š)β€Šβ€†Β·β€†A

Horizontal reactive force at the right end - Fxβ€Š(β€Še; zβ€Š)β€Š = Nβ€Šβ€Š(β€Še; zβ€Š)β€Šβ€†Β·β€†cdβ€Šβ€Š(β€Še; zβ€Š)β€Š

Vertical reactive force at the right end - Fyβ€Š(β€Še; zβ€Š)β€Š = Nβ€Šβ€Š(β€Še; zβ€Š)β€Šβ€†Β·β€†sdβ€Šβ€Š(β€Še; zβ€Š)β€Š

Partial derivatives of element end reactive forces

Fβ€²x1β€Š(β€Še; zβ€Š)β€Š = 1lβ€Šβ€Š(β€Šeβ€Š)β€Š βˆ’ z22lβ€²β€Šβ€Š(β€Še; zβ€Š)β€Š3 , Fβ€²x2β€Š(β€Še; zβ€Š)β€Š = z2β€†Β·β€†β€Š(β€Šlβ€Šβ€Š(β€Šeβ€Š)β€Š + z1β€Š)β€Šlβ€²β€Šβ€Š(β€Še; zβ€Š)β€Š3

Fβ€²y1β€Š(β€Še; zβ€Š)β€Š = Fβ€²x2β€Šβ€Š(β€Še; zβ€Š)β€Š , Fβ€²y2β€Š(β€Še; zβ€Š)β€Š = 1lβ€Šβ€Š(β€Šeβ€Š)β€Š βˆ’ β€Š(β€Šlβ€Šβ€Š(β€Šeβ€Š)β€Š + z1β€Š)β€Š2lβ€²β€Šβ€Š(β€Še; zβ€Š)β€Š3

We are not going to linearize the above equations by Taylor series. We will use them further directly in their implicit form.

Solution by Newton-Raphson’s method

We will express the parameters of the system as a function of the vector of t he unknown displacements:

βƒ—Z = vectorβ€Š(β€Š2 · nJβ€Š)β€Šβ€†Β·β€†mm = vectorβ€Š(β€Š2 · 3β€Š)β€Šβ€†Β·β€†mm = [0 mm 0 mm 0 mm 0 mm 0 mm 0 mm]

Initial deflection at the intermediate joint - βƒ—Z4 = 100 mm

Extracting displacements for joint j - zJβ€Š(β€Šjβ€Š)β€Š = [βƒ—Z2 · j βˆ’ 1; βƒ—Z2 · j]

Relative displacements for element e - zeβ€Š(β€Šeβ€Š)β€Š = tβ€Šβ€Š(β€Šeβ€Š)β€Šβ€†Β·β€†β€Š(β€ŠzJβ€Šβ€Š(β€ŠJ2β€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š βˆ’ zJβ€Šβ€Š(β€ŠJ1β€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Šβ€Š)β€Š

Element reactive forces partial vector - Feβ€Š(β€Šeβ€Š)β€Š = tβ€Šβ€Š(β€Šeβ€Š)β€Šβ€†Β·β€†[Fxβ€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š; Fyβ€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š]

Partial element Jacobi matrix

Jeβ€Š(β€Šeβ€Š)β€Š = tβ€Šβ€Š(β€Šeβ€Š)β€Šβ€†Β·β€†[Fβ€²x1β€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š; Fβ€²x2β€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š | Fβ€²y1β€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š; Fβ€²y2β€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š]

Target precision - Ξ΅max = 10-5

Iteratively calculate the following equations of the Newton-Raphson’s method:

βƒ—Z0 = βƒ—Z , βƒ—Ξ΄Z = clsolveβ€Š(β€ŠJβ€Šβ€Š(β€Šβƒ—Zβ€Š)β€Š; Fβ€Šβ€Š(β€Šβƒ—Zβ€Š)β€Šβ€Š)β€Š , βƒ—Z = βƒ—Z0 βˆ’ βƒ—Ξ΄Z , Ξ΅ = normeβ€Š(β€Šβƒ—Ξ΄Zβ€Š)β€Šnormeβ€Š(β€Šβƒ—Zβ€Š)β€Š < Ξ΅max

Convergence reached at iteration - n = 33 . Relative error - Ξ΅ = 7.27Γ—10-6

Results

Joint displacements - Zβ€Š(β€Šjβ€Š)β€Š = round(zJβ€Šβ€Š(β€Šjβ€Š)β€ŠΞ΄z) · δz

Joint J2 - Z2 = Zβ€Šβ€Š(β€Š2β€Š)β€Š = [-44.7 mm 772.72 mm]

Reactions in supports

rβ€Š(β€Šiβ€Š)β€Š = rowβ€Š(β€ŠcJ; iβ€Š)β€Š , jβ€Š(β€Šiβ€Š)β€Š = takeβ€Š(β€Š1; rβ€Šβ€Š(β€Šiβ€Š)β€Šβ€Š)β€Š , Rβ€Š(β€Šiβ€Š)β€Š = -zJβ€Šβ€Š(β€Šjβ€Šβ€Š(β€Šiβ€Š)β€Šβ€Š)β€Šβ€†Β·β€†lastβ€Š(β€Šrβ€Šβ€Š(β€Šiβ€Š)β€Š; 2β€Š)β€Š

Joint J1 - R1 = Rβ€Šβ€Š(β€Š1β€Š)β€Š = [-179.81 kN -47.01 kN]

Joint J3 - R2 = Rβ€Šβ€Š(β€Š2β€Š)β€Š = [179.81 kN -22.99 kN]

Element yield capacity - Ny = fy · A = 500 MPa · 3.14 cm2 = 157.08 kN

Element ultimate capacity - Nu = fu · A = 600 MPa · 3.14 cm2 = 188.5 kN

Element axial forces - Neβ€Š(β€Šeβ€Š)β€Š = Nβ€Šβ€Š(β€Še; zeβ€Šβ€Š(β€Šeβ€Š)β€Šβ€Š)β€Š

Element Π•1 - N1 = Neβ€Šβ€Š(β€Š1β€Š)β€Š = 185.86 kN

Element Π•2 - N2 = Neβ€Šβ€Š(β€Š2β€Š)β€Š = 181.27 kN

Rx=-179.81kNRx=179.81kNRy=-47.01kNRy=-22.99kN2.96m6.04mFy=-70kN772.72mm-44.7mm

Nonlinear Analysis of a Von-Mises Truss 🎬

Shallow Von-Mises truss with circular pipe section, animated load-displacement curve passing through a limit point, solved by fixed-point iteration, Newton-Raphson, the secant method and the built-in Root solver.

Code:
'(solved by four different numerical methods)
'<h4>Input data</h4>
'Half span -'a = 2m', ''Height -'h = -0.5m
'Cross section - circular pipe with diameter'Ξ¦ = 100mm'and thickness't = 4mm
'Material - steel. Modulus of elasticity -'E = 210GPa
'Vertical force -'F_y = 2000kN
#include svg_drawing.cpd
#hide
v = 0mm
L = a/2cm
H = h/cm
H_lin = H
H_nl = H
k = L/10
W = 2*(L + 6*k)
Y = H
F_y,max = 2500kN
v_max = abs(2.26*h)
#def svg$ = '<svg viewbox="'-6*k' 'Y' 'W' 'abs(H)'" xmlns="http://www.w3.org/2000/svg" version="1.1" style="font-family: Georgia Pro; font-size:7px; width:'420'pt; height:'400*abs(H)/L'pt">
#def thin_style$ = style="stroke:darkcyan; stroke-width:1; fill:none;"
#def dash_style$ = style="stroke:#ddd; stroke-width:1; stroke-dasharray: 7 3; fill:none;"
#def ghost_style$ = style="stroke:#ddd; stroke-width:1; fill:white;"
#def lin_style$ = style="stroke:#ccc; stroke-width:2; fill:none;"
#def pin_style$ = style="stroke:red; stroke-width:1; fill:white;"
#def thick_style$ = style="stroke:darkcyan; stroke-width:3; fill:none;"
#def load_style$ = style="stroke:deepskyblue; stroke-width:1; fill:deepskyblue;"
#show
#def frame$
    line$(0; 0; L; H; dash_style$)
    line$(L; H; 2*L; 0; dash_style$)
    line$(0; 0; L; H_lin; lin_style$)
    line$(L; H_lin; 2*L; 0; lin_style$)
    circle$(L; H_lin; 2.5; ghost_style$)
    line$(0; 0; L; H_nl; main_style$)
    line$(L; H_nl; 2*L; 0; main_style$)
    #hide
    x1 = 0
    y1 = k/10
    #show
    #for i = 1 : 2
        #hide
        Ξ΄ = 0.8*k
        x2 = x1 - Ξ΄
        y2 = y1 - abs(Ξ΄)
        x3 = x1 + Ξ΄
        y3 = y1 + abs(Ξ΄)
        #show
        line$(x2; y3; x3; y3; thick_style$)
        line$(x2; y3; x1; y1; thin_style$)
        line$(x3; y3; x1; y1; thin_style$)
        #hide
        x1 = x1 + 2*L
        #show
    #loop
    '<polygon points="'L','H_nl - 4*Ξ΄' 'L','H_nl - 0.32*Ξ΄' 'L - 0.32*Ξ΄','H_nl - 1.4*Ξ΄' 'L + 0.32*Ξ΄','H_nl - 1.4*Ξ΄' 'L','H_nl - 0.32*Ξ΄'" load_style$ />
    texth$(L+20;H_nl-3.2*Ξ΄;Fy='F_y'kN)
    dimh$(0; L; (1-2*sign(H_nl))*k; 'a'm)
    dimh$(L; 2*L; (1-2*sign(H_nl))*k; 'a'm)
    #if H_nl < 0
        dimv$(L - k; H_nl; 0; 'h + v'm)
    #else
        dimv$(L - k; 0; H_nl; 'h + v'm)
    #end if
    circle$(0; 0; 2.5; pin_style$)
    circle$(L; H_nl; 2.5; pin_style$)
    circle$(2*L; 0; 2.5; pin_style$)
#end def
#val
svg$
frame$
'</svg>
#equ
'<h4>Linear Solution</h4>
'Strut length -'l = srss(a; h)
'Area -'A = Ο€*(Ξ¦^2 - (Ξ¦ - 2*t)^2)/4|cm^2
'Axial stiffness -'EA = E*A
'Axial forces in bars -'N(F) = F*l/(2*h)', 'N(F_y)
'Vertical displacement -'v_l(F) = -sqrt((l + (N(F)*l)/EA)^2 - a^2) - h|mm
v_l(F_y)
'<h4>Nonlinear Solution</h4>
'The vertical displacement is the only unknown - <var>v</var> = ?
'We will use 3-rd order geometric nonlinearity theory for the solution. The equilibrium equations are then derived for the deformed state of the structure, as follows:
'Length and elongation in deformed state
lβ€²(v) = sqrt(a^2 + (h + v)^2)','Ξ”l(v) = lβ€²(v) - l
'Horizontal reaction -'F_x(v) = EA*(Ξ”l(v)/l)*(a/lβ€²(v))
'Vertical reaction -'F_y(v) = EA*(Ξ”l(v)/l)*((h + v)/lβ€²(v))
'Vertical reaction derivative -'Fβ€²_yv(v) = EA*(1/l - a^2/lβ€²(v)^3)
'<h4>1. Fixed point iteration method</h4>
'Relative strain -'Ξ΅ = F_y/(2*EA)
'Relative precision -'Ξ΄_max = 10^-5
'Initial value -'v_0 = 1mm
'We express the unknown vertical displacement at the middle joint as a function of the vertical force:
v = sqrt(1/(1/l - Ξ΅/(h + v_0))^2 - a^2) - h|mm
#hide
n = 0
#repeat 100
    n = n + 1
    v_0 = v
    v = sqrt(1/(1/l - Ξ΅/(h + v_0))^2 - a^2) - h|mm
    Ξ΄ = abs(v - v_0)
    #if Ξ΄ < Ξ΄_max*abs(v)
        #break
    #end if
#loop
#show
'After calculating the above expression iteratively'n'times, we get:
v
'Relative error -'Ξ΄ = abs(v - v_0)/abs(v)
'<h4>2. Newton-Raphsonβ€²s method</h4>
'Initial value -'v_0 = 0mm
'We repeatedly calculate the following expression:
v = v_0 - (2*F_y(v_0) - F_y)/Fβ€²_yv(v_0)
#hide
n = 0
#repeat 100
    n = n + 1
    v_0 = v
    v = v_0 - (2*F_y(v_0) - F_y)/(2*Fβ€²_yv(v_0))
    Ξ΄ = abs(v - v_0)
    #if Ξ΄ < Ξ΄_max*abs(v)
        #break
    #end if
#loop
#show
'After'n'iterations we get:'v
'Relative error -'Ξ΄ = abs(v - v_0)/abs(v)
'<h4>3. Secant method</h4>
'Slope reduction factor -'Ξ± = 1
'Initial value -'v_0 = 0mm
'Force value -'F_y0 = 2*F_y(v_0)
'We calculate the first approximation using Newton-Raphsonβ€²s method
v_1 = v_0 - Ξ±*((F_y0 - F_y)/(2*Fβ€²_yv(v_0)))
'Force value -'F_y1 = 2*F_y(v_1)
'The next approximation is evaluated by the formula:
v_2 = v_1 - Ξ±*(F_y1 - F_y)*((v_1 - v_0)/(F_y1 - F_y0))
'We continue the calculations iteratively until we reach convergence.
#hide
n = 0
#repeat 100
    n = n + 1
    v_0 = v_1
    v_1 = v_2
    F_y0 = 2*F_y(v_0)
    F_y1 = 2*F_y(v_1)
    v_2 = v_1 - Ξ±*(F_y1 - F_y)*((v_1 - v_0)/(F_y1 - F_y0))
    Ξ΄ = abs(v_2 - v_1)
    #if Ξ΄ < Ξ΄_max*abs(v_2)
        #break
    #end if
#loop
#show
'After'n'iterations we get:'v_2
'Relative error -'Ξ΄ = abs(v_2 - v_1)/abs(v_2)
'<h4>4. Solution with Calcpad <small>(modified Anderson-Bjorkβ€²s method)</small></h4>
v = $Root{2*F_y(v) = F_y @ v = 0mm : 200m}
'System behavior graph (force-displacement)
'<!--'PlotWidth = 400','PlotHeight = 180','ReturnAngleUnits = 1'-->
#def plot$
    #hide
    v_2 = v
    Fβ€² = 2*Fβ€²_yv(v)
    dv = min(2000kN/Fβ€²; v_max/6)
    v_1(v) = min(max(0mm; v_2 + (1 - 2*v/v_max)*dv); v_max)
    F_1(v) = F_y + Fβ€²*(v_1(v) - v_2)
    #show
    $Plot{F_y & 2*F_y(v) & v_1(v)|F_1(v) & v_l(F_y)|F_y & v_2|F_y @ v = 0mm : v_max}
#end def
plot$
'<h4>Results</h4>
'Axial forces in bars -'N = Ξ”l(v)/l*EA
'Rotation angle -'Ξ± = atan2(l; v)
'Reactions in supports
'Horizontal -'R_x = F_x(v)'='N*cos(Ξ±)
'Vertical -'R_y = F_y(v)'='N*sin(Ξ±)
#hide
L = a/2cm
k = L/10
Ξ΄ = 0.7*k
#show
#val
#def results$
    #hide
    N = round(Ξ”l(v)/l*EA)
    Ξ± = atan2(l; v)
    R_x = F_x(v)'='N*cos(Ξ±)
    R_y = F_y(v)'='N*sin(Ξ±)
    H_lin = (h + v_l(F_y))/cm
    H_nl = (h + v)/cm
    Y = H + 2*k
    #show
    svg$
    '<polygon points="'0','0' '0','-4*Ξ΄' '-0.32*Ξ΄','-2.8*Ξ΄' '0.32*Ξ΄','-2.8*Ξ΄' '0','-4*Ξ΄'" load_style$/>
    '<polygon points="'2*L','0' '2*L','-4*Ξ΄' '2*L - 0.32*Ξ΄','-2.8*Ξ΄' '2*L + 0.32*Ξ΄','-2.8*Ξ΄' '2*L','-4*Ξ΄'" load_style$/>
    '<polygon points="'-0.32*Ξ΄','0' '-4*Ξ΄','0' '-2.8*Ξ΄','-0.32*Ξ΄' '-2.8*Ξ΄','0.32*Ξ΄' '-4*Ξ΄','0'" load_style$/>
    '<polygon points="'2*L + 0.32*Ξ΄','0' '2*L + 4*Ξ΄','0' '2*L + 2.8*Ξ΄','-0.32*Ξ΄' '2*L + 2.8*Ξ΄','0.32*Ξ΄' '2*L + 4*Ξ΄','0'" load_style$/>
    texth$(-4*Ξ΄;-Ξ΄;Rx='round(R_x)'kN)
    texth$(2*L+4*Ξ΄;-Ξ΄;Rx='round(R_x)'kN)
    texth$(3.2*Ξ΄;-3.2*Ξ΄;Ry='round(R_y)'kN)
    texth$(2*L-3.2*Ξ΄;-3.2*Ξ΄;Ry='round(R_y)'kN)
    texth$(L/2;0;N='N'kN)
    texth$(3*L/2;0;N='N'kN)
    frame$
    '</svg>
#end def
results$
#hide
n = 51
#show
'<style>.fr{display:none;}</style>
#for j = 1 : n
    #hide
    F_y = F_y,max*(j - 1)/(n - 1)
    v = $Root{2*F_y(v) = F_y @ v = 0mm : 200m}
    #show
    '<div class="fr" id="fr-'j'">
    plot$
    results$
    '</div>
#loop
'<script>(function(){$("#fr-1").show();var i=1;var fr=$("#fr-1");setInterval(function(){fr.hide();if(++i>'n')i=1;fr=$("#fr-"+i);fr.show();}, 100);})();</script>
#equ
Rendered Output:

(solved by four different numerical methods)

Input data

Half span - a = 2 m , 'Height - h = -0.5 m

Cross section - circular pipe with diameter Ξ¦ = 100 mm and thickness t = 4 mm

Material - steel. Modulus of elasticity - E = 210 GPa

Vertical force - Fy = 2000 kN

Fy=2000kN2m2m-0.5m
Linear Solution

Strut length - l = srssβ€Š(β€Ša; hβ€Š)β€Š = srssβ€Š(β€Š2 m; -0.5 mβ€Š)β€Š = 2.06 m

Area - A = Ο€β€†Β·β€†β€Š(β€ŠΞ¦2 βˆ’ β€Š(β€ŠΞ¦ βˆ’ 2 · tβ€Š)β€Š2β€Š)β€Š4 = 3.14β€†Β·β€†β€Š(β€Šβ€Š(β€Š100 mmβ€Š)β€Š2 βˆ’ β€Š(β€Š100 mm βˆ’ 2 · 4 mmβ€Š)β€Š2β€Š)β€Š4 = 12.06 cm2

Axial stiffness - EA = E · A = 210 GPa · 12.06 cm2 = 253338 kN

Axial forces in bars - Nβ€Š(β€ŠFβ€Š)β€Š = F · l2 · h , Nβ€Šβ€Š(β€ŠFyβ€Š)β€Š = Nβ€Šβ€Š(β€Š2000 kNβ€Š)β€Š = -4123.11 kN

Vertical displacement - vlβ€Š(β€ŠFβ€Š)β€Š = -  (l + Nβ€Šβ€Š(β€ŠFβ€Š)β€Šβ€†Β·β€†lEA)2 βˆ’ a2 βˆ’ h

vlβ€Šβ€Š(β€ŠFyβ€Š)β€Š = vlβ€Šβ€Š(β€Š2000 kNβ€Š)β€Š = 164.16 mm

Nonlinear Solution

The vertical displacement is the only unknown - v = ?

We will use 3-rd order geometric nonlinearity theory for the solution. The equilibrium equations are then derived for the deformed state of the structure, as follows:

Length and elongation in deformed state

lβ€²β€Š(β€Švβ€Š)β€Š =    √a2 + β€Š(β€Šh + vβ€Š)β€Š2 , Ξ”lβ€Š(β€Švβ€Š)β€Š = lβ€²β€Šβ€Š(β€Švβ€Š)β€Š βˆ’ l

Horizontal reaction - Fxβ€Š(β€Švβ€Š)β€Š = EA · Δlβ€Šβ€Š(β€Švβ€Š)β€Šl · alβ€²β€Šβ€Š(β€Švβ€Š)β€Š

Vertical reaction - Fyβ€Š(β€Švβ€Š)β€Š = EA · Δlβ€Šβ€Š(β€Švβ€Š)β€Šl · h + vlβ€²β€Šβ€Š(β€Švβ€Š)β€Š

Vertical reaction derivative - Fβ€²yvβ€Š(β€Švβ€Š)β€Š = EA · (1l βˆ’ a2lβ€²β€Šβ€Š(β€Švβ€Š)β€Š3)

1. Fixed point iteration method

Relative strain - Ξ΅ = Fy2 · EA = 2000 kN2 · 253338 kN = 0.00395

Relative precision - Ξ΄max = 10-5

Initial value - v0 = 1 mm

We express the unknown vertical displacement at the middle joint as a function of the vertical force:

v =   1(1l βˆ’ Ξ΅h + v0)2 βˆ’ a2 βˆ’ h =   1(12.06 m βˆ’ 0.00395-0.5 m + 1 mm)2 βˆ’ β€Š(β€Š2 mβ€Š)β€Š2 βˆ’ β€Š(β€Š-0.5 mβ€Š)β€Š = 838.68 mm

After calculating the above expression iteratively n = 7 times, we get:

v = 1105.47 mm

Relative error - Ξ΄ = |v βˆ’ v0||v| = | 1105.47 mm βˆ’ 1105.46 mm|| 1105.47 mm| = 7.98Γ—10-6

2. Newton-Raphsonβ€²s method

Initial value - v0 = 0 mm

We repeatedly calculate the following expression:

v = v0 βˆ’ 2 · Fyβ€Šβ€Š(β€Šv0β€Š)β€Š βˆ’ FyFβ€²yvβ€Šβ€Š(β€Šv0β€Š)β€Š = 0 mm βˆ’ 2 · Fyβ€Šβ€Š(β€Š0 mmβ€Š)β€Š βˆ’ 2000 kNFβ€²yvβ€Šβ€Š(β€Š0 mmβ€Š)β€Š = 276.68 mm

After n = 37 iterations we get: v = 1105.46 mm

Relative error - Ξ΄ = |v βˆ’ v0||v| = | 1105.46 mm βˆ’ 1105.46 mm|| 1105.46 mm| = 9.67Γ—10-10

3. Secant method

Slope reduction factor - Ξ± = 1

Initial value - v0 = 0 mm

Force value - Fy0 = 2 · Fyβ€Šβ€Š(β€Šv0β€Š)β€Š = 2 · Fyβ€Šβ€Š(β€Š0 mmβ€Š)β€Š = 0 kN

We calculate the first approximation using Newton-Raphsonβ€²s method

v1 = v0 βˆ’ α · Fy0 βˆ’ Fy2 · Fβ€²yvβ€Šβ€Š(β€Šv0β€Š)β€Š = 0 mm βˆ’ 1 · 0 kN βˆ’ 2000 kN2 · Fβ€²yvβ€Šβ€Š(β€Š0 mmβ€Š)β€Š = 138.34 mm

Force value - Fy1 = 2 · Fyβ€Šβ€Š(β€Šv1β€Š)β€Š = 2 · Fyβ€Šβ€Š(β€Š138.34 mmβ€Š)β€Š = 1273.37 kN

The next approximation is evaluated by the formula:

v2 = v1 βˆ’ Ξ±β€†Β·β€†β€Š(β€ŠFy1 βˆ’ Fyβ€Š)β€Šβ€†Β·β€†v1 βˆ’ v0Fy1 βˆ’ Fy0 = 138.34 mm βˆ’ 1β€†Β·β€†β€Š(β€Š1273.37 kN βˆ’ 2000 kNβ€Š)β€Šβ€†Β·β€†138.34 mm βˆ’ 0 mm1273.37 kN βˆ’ 0 kN = 217.28 mm

We continue the calculations iteratively until we reach convergence.

After n = 37 iterations we get: v2 = 1105.46 mm

Relative error - Ξ΄ = |v2 βˆ’ v1||v2| = | 1105.46 mm βˆ’ 1105.46 mm|| 1105.46 mm| = 2.28Γ—10-7

4. Solution with Calcpad (modified Anderson-Bjorkβ€²s method)

v = $Root{2 · Fyβ€Šβ€Š(β€Švβ€Š)β€Š = Fy; v ∈ [0 mm; 200 m]} = 1105.46 mm

System behavior graph (force-displacement)

Plot
Results

Axial forces in bars - N = Ξ”lβ€Šβ€Š(β€Švβ€Š)β€Šl · EA = Ξ”lβ€Šβ€Š(β€Š1105.46 mmβ€Š)β€Š2.06 m · 253338 kN = 3451.3 kN

Rotation angle - Ξ± = atan2β€Š(β€Šl; vβ€Š)β€Š = atan2β€Š(β€Š2.06 m; 1105.46 mmβ€Š)β€Š = 28.2Β°

Reactions in supports

Horizontal - Rx = Fxβ€Šβ€Š(β€Švβ€Š)β€Š = Fxβ€Šβ€Š(β€Š1105.46 mmβ€Š)β€Š = 3303.25 kN = N · cosβ€Š(β€ŠΞ±β€Š)β€Š = 3451.3 kN · cosβ€Š(β€Š28.2Β°β€Š)β€Š = 3041.6 kN

Vertical - Ry = Fyβ€Šβ€Š(β€Švβ€Š)β€Š = Fyβ€Šβ€Š(β€Š1105.46 mmβ€Š)β€Š = 1000 kN = N · sinβ€Š(β€ŠΞ±β€Š)β€Š = 3451.3 kN · sinβ€Š(β€Š28.2Β°β€Š)β€Š = 1630.99 kN

Rx=3303kNRx=3303kNRy=1000kNRy=1000kNN=3451kNN=3451kNFy=2000kN2m2m0.61m
PlotRx=0kNRx=0kNRy=-0kNRy=-0kNN=0kNN=0kNFy=0kN2m2m-0.5m
PlotRx=-101kNRx=-101kNRy=25kNRy=25kNN=-104kNN=-104kNFy=50kN2m2m-0.5m
PlotRx=-203kNRx=-203kNRy=50kNRy=50kNN=-209kNN=-209kNFy=100kN2m2m-0.49m
PlotRx=-307kNRx=-307kNRy=75kNRy=75kNN=-316kNN=-316kNFy=150kN2m2m-0.49m
PlotRx=-412kNRx=-412kNRy=100kNRy=100kNN=-424kNN=-424kNFy=200kN2m2m-0.49m
PlotRx=-519kNRx=-519kNRy=125kNRy=125kNN=-534kNN=-534kNFy=250kN2m2m-0.48m
PlotRx=-628kNRx=-628kNRy=150kNRy=150kNN=-645kNN=-645kNFy=300kN2m2m-0.48m
PlotRx=-739kNRx=-739kNRy=175kNRy=175kNN=-759kNN=-759kNFy=350kN2m2m-0.47m
PlotRx=-851kNRx=-851kNRy=200kNRy=200kNN=-875kNN=-875kNFy=400kN2m2m-0.47m
PlotRx=-967kNRx=-967kNRy=225kNRy=225kNN=-992kNN=-992kNFy=450kN2m2m-0.47m
PlotRx=-1084kNRx=-1084kNRy=250kNRy=250kNN=-1112kNN=-1112kNFy=500kN2m2m-0.46m
PlotRx=-1204kNRx=-1204kNRy=275kNRy=275kNN=-1235kNN=-1235kNFy=550kN2m2m-0.46m
PlotRx=-1327kNRx=-1327kNRy=300kNRy=300kNN=-1360kNN=-1360kNFy=600kN2m2m-0.45m
PlotRx=-1453kNRx=-1453kNRy=325kNRy=325kNN=-1489kNN=-1489kNFy=650kN2m2m-0.45m
PlotRx=-1582kNRx=-1582kNRy=350kNRy=350kNN=-1620kNN=-1620kNFy=700kN2m2m-0.44m
PlotRx=-1715kNRx=-1715kNRy=375kNRy=375kNN=-1755kNN=-1755kNFy=750kN2m2m-0.44m
PlotRx=-1852kNRx=-1852kNRy=400kNRy=400kNN=-1894kNN=-1894kNFy=800kN2m2m-0.43m
PlotRx=-1993kNRx=-1993kNRy=425kNRy=425kNN=-2038kNN=-2038kNFy=850kN2m2m-0.43m
PlotRx=-2139kNRx=-2139kNRy=450kNRy=450kNN=-2186kNN=-2186kNFy=900kN2m2m-0.42m
PlotRx=-2292kNRx=-2292kNRy=475kNRy=475kNN=-2340kNN=-2340kNFy=950kN2m2m-0.41m
PlotRx=-2451kNRx=-2451kNRy=500kNRy=500kNN=-2501kNN=-2501kNFy=1000kN2m2m-0.41m
PlotRx=-2618kNRx=-2618kNRy=525kNRy=525kNN=-2670kNN=-2670kNFy=1050kN2m2m-0.4m
PlotRx=-2794kNRx=-2794kNRy=550kNRy=550kNN=-2848kNN=-2848kNFy=1100kN2m2m-0.39m
PlotRx=-2982kNRx=-2982kNRy=575kNRy=575kNN=-3037kNN=-3037kNFy=1150kN2m2m-0.39m
PlotRx=-3185kNRx=-3185kNRy=600kNRy=600kNN=-3241kNN=-3241kNFy=1200kN2m2m-0.38m
PlotRx=2187kNRx=2187kNRy=625kNRy=625kNN=2275kNN=2275kNFy=1250kN2m2m0.57m
PlotRx=-3659kNRx=-3659kNRy=650kNRy=650kNN=-3716kNN=-3716kNFy=1300kN2m2m-0.36m
PlotRx=2342kNRx=2342kNRy=675kNRy=675kNN=2438kNN=2438kNFy=1350kN2m2m0.58m
PlotRx=-4358kNRx=-4358kNRy=700kNRy=700kNN=-4414kNN=-4414kNFy=1400kN2m2m-0.32m
PlotRx=2495kNRx=2495kNRy=725kNRy=725kNN=2599kNN=2599kNFy=1450kN2m2m0.58m
PlotRx=2571kNRx=2571kNRy=750kNRy=750kNN=2678kNN=2678kNFy=1500kN2m2m0.58m
PlotRx=2646kNRx=2646kNRy=775kNRy=775kNN=2758kNN=2758kNFy=1550kN2m2m0.59m
PlotRx=2721kNRx=2721kNRy=800kNRy=800kNN=2836kNN=2836kNFy=1600kN2m2m0.59m
PlotRx=2796kNRx=2796kNRy=825kNRy=825kNN=2915kNN=2915kNFy=1650kN2m2m0.59m
PlotRx=2869kNRx=2869kNRy=850kNRy=850kNN=2993kNN=2993kNFy=1700kN2m2m0.59m
PlotRx=2943kNRx=2943kNRy=875kNRy=875kNN=3070kNN=3070kNFy=1750kN2m2m0.59m
PlotRx=3016kNRx=3016kNRy=900kNRy=900kNN=3147kNN=3147kNFy=1800kN2m2m0.6m
PlotRx=3088kNRx=3088kNRy=925kNRy=925kNN=3224kNN=3224kNFy=1850kN2m2m0.6m
PlotRx=3160kNRx=3160kNRy=950kNRy=950kNN=3300kNN=3300kNFy=1900kN2m2m0.6m
PlotRx=3232kNRx=3232kNRy=975kNRy=975kNN=3376kNN=3376kNFy=1950kN2m2m0.6m
PlotRx=3303kNRx=3303kNRy=1000kNRy=1000kNN=3451kNN=3451kNFy=2000kN2m2m0.61m
PlotRx=3374kNRx=3374kNRy=1025kNRy=1025kNN=3526kNN=3526kNFy=2050kN2m2m0.61m
PlotRx=3445kNRx=3445kNRy=1050kNRy=1050kNN=3601kNN=3601kNFy=2100kN2m2m0.61m
PlotRx=3515kNRx=3515kNRy=1075kNRy=1075kNN=3675kNN=3675kNFy=2150kN2m2m0.61m
PlotRx=3584kNRx=3584kNRy=1100kNRy=1100kNN=3749kNN=3749kNFy=2200kN2m2m0.61m
PlotRx=3654kNRx=3654kNRy=1125kNRy=1125kNN=3823kNN=3823kNFy=2250kN2m2m0.62m
PlotRx=3723kNRx=3723kNRy=1150kNRy=1150kNN=3896kNN=3896kNFy=2300kN2m2m0.62m
PlotRx=3791kNRx=3791kNRy=1175kNRy=1175kNN=3969kNN=3969kNFy=2350kN2m2m0.62m
PlotRx=3859kNRx=3859kNRy=1200kNRy=1200kNN=4042kNN=4042kNFy=2400kN2m2m0.62m
PlotRx=3927kNRx=3927kNRy=1225kNRy=1225kNN=4114kNN=4114kNFy=2450kN2m2m0.62m
PlotRx=3995kNRx=3995kNRy=1250kNRy=1250kNN=4186kNN=4186kNFy=2500kN2m2m0.63m

Third Order Geometric Nonlinearity Analysis of a Double-Strut Biot System

Symmetric two-bar Biot truss in third-order geometric nonlinearity: the deformed length \(l'(v) = \sqrt{l^2 + v^2}\) enters the equilibrium directly and the vertical displacement is found by four different numerical methods.

Code:
'(solved by four different numerical methods)
'<h4>Input data</h4>
'Strut length -'l = 2m
'Material - steel. Modulus of elasticity -'E = 210GPa
'Cross section - circular with diameter'Ξ¦ = 20mm
'Area -'A = Ο€*Ξ¦^2/4|cm^2
'Axial stiffness -'EA = E*A
'Vertical force -'F_y = 20kN
#include svg_drawing.cpd
#hide
L = l/2cm
H = 0
k = L/10
#def svg$ = '<svg viewbox="'-5*k' '-5*k' '2*(L+5*k)' '10*k + H'" xmlns="http://www.w3.org/2000/svg" version="1.1" style="font-family: Georgia Pro; font-size:8px; width:'450'pt; height:'150'pt">
#def thin_style$ = style="stroke:darkcyan; stroke-width:1; fill:none"
#def pin_style$ = style="stroke:red; stroke-width:1; fill:white"
#def thick_style$ = style="stroke:darkcyan; stroke-width:3; fill:none"
#def load_style$ = style="stroke:deepskyblue; stroke-width:1; fill:deepskyblue;"
#show
#def frame$
    line$(0; 0; L; H; main_style$)
    line$(L; H; 2*L; 0; main_style$)
    #hide
    x1 = 0
    y1 = k/10
    #show
    #for i = 1 : 2
        #hide
        Ξ΄ = 0.8*k
        x2 = x1 - Ξ΄
        y2 = y1 - abs(Ξ΄)
        x3 = x1 + Ξ΄
        y3 = y1 + abs(Ξ΄)
        #show
        line$(x2; y3; x3; y3; thick_style$)
        line$(x2; y3; x1; y1; thin_style$)
        line$(x3; y3; x1; y1; thin_style$)
        #hide
        x1 = x1 + 2*L
        #show
    #loop
    '<polygon points="'L','H - 4*Ξ΄' 'L','H - 0.32*Ξ΄' 'L - 0.32*Ξ΄','H - 1.4*Ξ΄' 'L + 0.32*Ξ΄','H - 1.4*Ξ΄' 'L','H - 0.32*Ξ΄'" load_style$ />
    texth$(L+20;H-3.2*Ξ΄;Fy='F_y'kN)
    dimh$(0; L; H+2*k; 'l'm)
    dimh$(L; 2*L; H+2*k; 'l'm)
    circle$(0; 0; 2.5; pin_style$)
    circle$(L; H; 2.5; pin_style$)
    circle$(2*L; 0; 2.5; pin_style$)
#end def
#val
svg$
frame$
'</svg>
#equ
'<h4>Solution</h4>
'Because of the symmetry, the horizontal displacement in the middle is'u = 0m'.
'The vertical displacement is the only unknown - <var>v</var> = ?
'Since the system is linearly unstable, we use 3-rd order geometric nonlinearity theory for the solution. The equilibrium equations are then derived for the deformed state of the structure, as follows:
'Length and elongation in deformed state
lβ€²(v) = sqrt((l + u)^2 + v^2)','Ξ”l(v) = lβ€²(v) - l
'Horizontal reaction -'F_x(v) = EA*(Ξ”l(v)/l)*((l + u)/lβ€²(v))
'Vertical reaction -'F_y(v) = EA*(Ξ”l(v)/l)*(v/lβ€²(v))
'Vertical reaction derivative -'Fβ€²_yv(v) = EA*(1/l - (l + u)^2/lβ€²(v)^3)
'<h4>1. Fixed point iteration method</h4>
'Relative strain -'Ξ΅ = F_y/(2*EA)
'Relative precision -'Ξ΄_max = 10^-4
'Initial value -'v_0 = 200mm
'We express the unknown vertical displacement at the middle joint as a function of the vertical force:
v = sqrt(1/(1/l - Ξ΅/v_0)^2 - (l + u)^2)|mm
#hide
n = 0
#repeat 100
    n = n + 1
    v_0 = v
    v = sqrt(1/(1/l - Ξ΅/v_0)^2 - (l + u)^2)|mm
    Ξ΄ = abs(v - v_0)
    #if Ξ΄ < Ξ΄_max*abs(v)
        #break
    #end if
#loop
#show
'After calculating the above expression iteratively'n'times, we get:
v
'Relative error -'Ξ΄ = abs(v - v_0)/abs(v)
'<h4>2. Newton-Raphsonβ€²s method</h4>
'Initial value -'v_0 = 200mm
'We repeatedly calculate the following expression:
v = v_0 - (2*F_y(v_0) - F_y)/Fβ€²_yv(v_0)
#hide
n = 0
#repeat 100
    n = n + 1
    v_0 = v
    v = v_0 - (2*F_y(v_0) - F_y)/(2*Fβ€²_yv(v_0))
    Ξ΄ = abs(v - v_0)
    #if Ξ΄ < Ξ΄_max*abs(v)
        #break
    #end if
#loop
#show
'After'n'iterations we get:'v
'Relative error -'Ξ΄ = abs(v - v_0)/abs(v)
'<h4>3. Secant method</h4>
'Slope reduction factor -'Ξ± = 1
'Initial value -'v_0 = 200mm
'Force value -'F_y0 = 2*F_y(v_0)
'We calculate the first approximation using Newton-Raphsonβ€²s method
v_1 = v_0 - Ξ±*((F_y0 - F_y)/(2*Fβ€²_yv(v_0)))
'Force value -'F_y1 = 2*F_y(v_1)
'The next approximation is evaluated by the formula:
v_2 = v_1 - Ξ±*(F_y1 - F_y)*((v_1 - v_0)/(F_y1 - F_y0))
'We continue the calculations iteratively until we reach convergence.
#hide
n = 0
#repeat 100
    n = n + 1
    v_0 = v_1
    v_1 = v_2
    F_y0 = 2*F_y(v_0)
    F_y1 = 2*F_y(v_1)
    v_2 = v_1 - Ξ±*(F_y1 - F_y)*((v_1 - v_0)/(F_y1 - F_y0))
    Ξ΄ = abs(v_2 - v_1)
    #if Ξ΄ < Ξ΄_max*abs(v_2)
        #break
    #end if
#loop
#show
'After'n'iterations we get:'v_2
'Relative error -'Ξ΄ = abs(v_2 - v_1)/abs(v_2)
'<h4>4. Solution with Calcpad <small>(modified Anderson-Bjorkβ€²s method)</small></h4>
v = $Root{2*F_y(v) = F_y @ v = 0mm : 200m}
'System behavior graph (force-displacement)
'<!--'v_2 = v','PlotWidth = 250','PlotHeight = 150'-->
$Plot{F_y & 2*F_y(v) & v_2|F_y @ v = 0mm : 200mm}
'<h4>Results</h4>
'Axial forces in bars -'N = Ξ”l(v)/l*EA
'Rotation angle -'Ξ± = atan2(l; v)'Β°
'Reactions in supports
'Horizontal -'R_x = F_x(v)'='N*cos(Ξ±)
'Vertical -'R_y = F_y(v)'='N*sin(Ξ±)
#hide
H = v/cm
Ξ΄ = 0.8*k
#show
#val
svg$
'<polygon points="'0','0' '0','-4*Ξ΄' '-0.32*Ξ΄','-2.8*Ξ΄' '0.32*Ξ΄','-2.8*Ξ΄' '0','-4*Ξ΄'" load_style$/>
'<polygon points="'2*L','0' '2*L','-4*Ξ΄' '2*L - 0.32*Ξ΄','-2.8*Ξ΄' '2*L + 0.32*Ξ΄','-2.8*Ξ΄' '2*L','-4*Ξ΄'" load_style$/>
'<polygon points="'-0.32*Ξ΄','0' '-4*Ξ΄','0' '-2.8*Ξ΄','-0.32*Ξ΄' '-2.8*Ξ΄','0.32*Ξ΄' '-4*Ξ΄','0'" load_style$/>
'<polygon points="'2*L + 0.32*Ξ΄','0' '2*L + 4*Ξ΄','0' '2*L + 2.8*Ξ΄','-0.32*Ξ΄' '2*L + 2.8*Ξ΄','0.32*Ξ΄' '2*L + 4*Ξ΄','0'" load_style$/>
texth$(-4*Ξ΄;-Ξ΄;Rx='R_x'kN)
texth$(2*L+4*Ξ΄;-Ξ΄;Rx='R_x'kN)
texth$(3*Ξ΄;-3.2*Ξ΄;Ry='R_y'kN)
texth$(2*L-3*Ξ΄;-3.2*Ξ΄;Ry='R_y'kN)
texth$(L/2;0;N='N'kN)
texth$(3*L/2;0;N='N'kN)
frame$
'</svg>
#equ
Rendered Output:
Fy=20kN2m2m
Solution

Because of the symmetry, the horizontal displacement in the middle is u = 0 m .

The vertical displacement is the only unknown - v = ?

Since the system is linearly unstable, we use 3-rd order geometric nonlinearity theory for the solution. The equilibrium equations are then derived for the deformed state of the structure, as follows:

Length and elongation in deformed state

lβ€²β€Š(β€Švβ€Š)β€Š =    √ β€Š(β€Šl + uβ€Š)β€Š2 + v2 , Ξ”lβ€Š(β€Švβ€Š)β€Š = lβ€²β€Šβ€Š(β€Švβ€Š)β€Š βˆ’ l

Horizontal reaction - Fxβ€Š(β€Švβ€Š)β€Š = EA · Δlβ€Šβ€Š(β€Švβ€Š)β€Šl · l + ulβ€²β€Šβ€Š(β€Švβ€Š)β€Š

Vertical reaction - Fyβ€Š(β€Švβ€Š)β€Š = EA · Δlβ€Šβ€Š(β€Švβ€Š)β€Šl · vlβ€²β€Šβ€Š(β€Švβ€Š)β€Š

Vertical reaction derivative - Fβ€²yvβ€Š(β€Švβ€Š)β€Š = EA · (1l βˆ’ β€Š(β€Šl + uβ€Š)β€Š2lβ€²β€Šβ€Š(β€Švβ€Š)β€Š3)

1. Fixed point iteration method

Relative strain - Ξ΅ = Fy2 · EA = 20 kN2 · 65973.4 kN = 0.000152

Relative precision - Ξ΄max = 10-4 = 0.0001

Initial value - v0 = 200 mm

We express the unknown vertical displacement at the middle joint as a function of the vertical force:

v =   1(1l βˆ’ Ξ΅v0)2 βˆ’ β€Š(β€Šl + uβ€Š)β€Š2 =   1(12 m βˆ’ 0.000152200 mm)2 βˆ’ β€Š(β€Š2 m + 0 mβ€Š)β€Š2 = 110.24 mm

After calculating the above expression iteratively n = 13 times, we get:

v = 134.51 mm

Relative error - Ξ΄ = |v βˆ’ v0||v| = | 134.51 mm βˆ’ 134.5 mm|| 134.51 mm| = 7.6Γ—10-5

2. Newton-Raphsonβ€²s method

Initial value - v0 = 200 mm

We repeatedly calculate the following expression:

v = v0 βˆ’ 2 · Fyβ€Šβ€Š(β€Šv0β€Š)β€Š βˆ’ FyFβ€²yvβ€Šβ€Š(β€Šv0β€Š)β€Š = 200 mm βˆ’ 2 · Fyβ€Šβ€Š(β€Š200 mmβ€Š)β€Š βˆ’ 20 kNFβ€²yvβ€Šβ€Š(β€Š200 mmβ€Š)β€Š = 106.93 mm

After n = 4 iterations we get: v = 134.51 mm

Relative error - Ξ΄ = |v βˆ’ v0||v| = 9Γ—10-6

3. Secant method

Slope reduction factor - Ξ± = 1

Initial value - v0 = 200 mm

Force value - Fy0 = 2 · Fyβ€Šβ€Š(β€Šv0β€Š)β€Š = 2 · Fyβ€Šβ€Š(β€Š200 mmβ€Š)β€Š = 65.48 kN

We calculate the first approximation using Newton-Raphsonβ€²s method

v1 = v0 βˆ’ α · Fy0 βˆ’ Fy2 · Fβ€²yvβ€Šβ€Š(β€Šv0β€Š)β€Š = 200 mm βˆ’ 1 · 65.48 kN βˆ’ 20 kN2 · Fβ€²yvβ€Šβ€Š(β€Š200 mmβ€Š)β€Š = 153.46 mm

Force value - Fy1 = 2 · Fyβ€Šβ€Š(β€Šv1β€Š)β€Š = 2 · Fyβ€Šβ€Š(β€Š153.46 mmβ€Š)β€Š = 29.67 kN

The next approximation is evaluated by the formula:

v2 = v1 βˆ’ Ξ±β€†Β·β€†β€Š(β€ŠFy1 βˆ’ Fyβ€Š)β€Šβ€†Β·β€†v1 βˆ’ v0Fy1 βˆ’ Fy0 = 153.46 mm βˆ’ 1β€†Β·β€†β€Š(β€Š29.67 kN βˆ’ 20 kNβ€Š)β€Šβ€†Β·β€†153.46 mm βˆ’ 200 mm29.67 kN βˆ’ 65.48 kN = 140.89 mm

We continue the calculations iteratively until we reach convergence.

After n = 4 iterations we get: v2 = 134.51 mm

Relative error - Ξ΄ = |v2 βˆ’ v1||v2| = | 134.51 mm βˆ’ 134.51 mm|| 134.51 mm| = 1.57Γ—10-6

4. Solution with Calcpad (modified Anderson-Bjorkβ€²s method)

v = $Root{2 · Fyβ€Šβ€Š(β€Švβ€Š)β€Š = Fy; v ∈ [0 mm; 200 m]} = 134.51 mm

System behavior graph (force-displacement)

Plot
Results

Axial forces in bars - N = Ξ”lβ€Šβ€Š(β€Švβ€Š)β€Šl · EA = Ξ”lβ€Šβ€Š(β€Š134.51 mmβ€Š)β€Š2 m · 65973.4 kN = 149.03 kN

Rotation angle - Ξ± = atan2β€Š(β€Šl; vβ€Š)β€Š = atan2β€Š(β€Š2 m; 134.51 mmβ€Š)β€Š = 3.85 Β°

Reactions in supports

Horizontal - Rx = Fxβ€Šβ€Š(β€Švβ€Š)β€Š = Fxβ€Šβ€Š(β€Š134.51 mmβ€Š)β€Š = 148.69 kN = N · cosβ€Š(β€ŠΞ±β€Š)β€Š = 149.03 kN · cosβ€Š(β€Š3.85β€Š)β€Š = 148.69 kN

Vertical - Ry = Fyβ€Šβ€Š(β€Švβ€Š)β€Š = Fyβ€Šβ€Š(β€Š134.51 mmβ€Š)β€Š = 10 kN = N · sinβ€Š(β€ŠΞ±β€Š)β€Š = 149.03 kN · sinβ€Š(β€Š3.85β€Š)β€Š = 10 kN

Rx=148.69kNRx=148.69kNRy=10kNRy=10kNN=149.03kNN=149.03kNFy=20kN2m2m

Spotted an error? Edit these examples.