Bruddmekanikk

Denne siden greier ut om bruddmekanikk på en alternativ måte som du IKKE finner i Callister eller annet materiell på Blackboard. Tanken er å gi ulike komplementære vinklinger slik at sentrale aspekt faktisk blir forstått til slutt. Anbefalingen er altså å gå gjennom alt materiell på temaet (som alltid egentlig...)

Kortversjonen av konseptet bruddmekanikk er følgende:

Materialer inneholder sprekker som fører til spenningskonsentrasjon. Denne spenningskonsentrasjonen kan beskrives med en spenningsintensitetsfaktor for den aktuelle bruddmoden (i dette tilfelle mode I):

\begin{equation} K_{I} = Y \sigma \sqrt{\pi a} \tag{1} \end{equation}

hvor $Y$ er en enhetsløs geometrifaktor, $\sigma$ er spenningen som virker (på makroskopisk nivå) og $a$ er sprekkens lengde.

Brudd vil forplante seg når spenningsintensiteten $K_I$ tilsvarer den kritiske spenningsintensitetsfaktoren, $K_{IC}$, som vi vanligvis kaller bruddseighet. Denne bruddseigheten er altså en materialparameter eller materialegenskap.

Dette kan formuleres ganske elegant, men noe uformelt, på følgende vis:

\begin{equation} K_{I} \ge K_{IC} \rightarrow \text{@#%!Sh}\text{1}\tau \tag{2} \end{equation}

... som indikerer at sprekker som vokser i sprøe material, har en lei tendens til å gi veldig dårlig stemning, med mindre du er flislegger eller glass-kutter.

Detaljer om bruddmoder, I, II og III, hva som menes med plan spenning og plan tøyning i denne sammenhengen, forskjellen mellom duktilt og sprøtt brudd og diverse annet deskreptivt, finner du på Blackboard/forelesning. Lurt å sjekke ut dette før du leser videre her

Du kan komme et lite stykke ved å bruke (1) og (2) helt uten å forstå en døyt, men det er altså et mål i TMM4100 å faktisk forstå, i hovedtrekk, hvor dette kommer fra og hva som egentlig er drifkraften og mekanismen som fører til at en sprekk vokser.

Derfor skal vi begynne med et dagligdags problem: splitting av spisepinner og/eller vedkløyving, med skikkelig fokus på energi

Spisepinner og vedkløyving

Problemstilligen er illustrert i følgende figur, og siden du enten har vokst opp i byen med sushi, eller på landet med vedkløyving, er det ikke nødvendig med mer omfattende forklaring:

image.png

Usikker på bjelker og sånt? Det var vel omtrent 50% av mekanikk 1, så her blir det ikke noe ny gjennomgang av akkurat det.

Med bare en liten smule fantasi, ser vi at spisepinnen, eller vedkubben, allerede har en sprekk med lengde $a$, og dette gir oss to utkragerbjelker (!) med kraft $F$ på endene. Vi vet at (Mekanikk 1) sammenhengen mellom nedøying $y$ og kraft for en utkragerbjelke med rektangulært tverrsnitt og lengde $L$ er

$$y = \frac{4FL^3}{Ebh^3}$$

Nå er $d = 2y$ og $L = a$ slik at

$$d = \frac{8Fa^3}{Ebh^3}$$

som dermed gir oss kraft som funksjon av forkyvingen:

\begin{equation} F = \frac{Ebh^3}{8a^3}d \tag{3} \end{equation}

Så kommer det store spørsmålet: Hva skal til for at $a$ vokser med $\Delta a$ ?

Siden disse bjelkene er utsatt for en kraft som gir elastisk deformasjon, vet vi at det er tøyningsenergi i systemet, og denne energien finner vi lett for et slikt lineært system:

\begin{equation} U = \frac{1}{2}F\cdot d \tag{4} \end{equation}

Innsatt for $F$ fra ligning (3):

\begin{equation} U = \frac{Ebh^3}{16a^3}d^2 \tag{5} \end{equation}

Numerisk eksempel for typisk tre med E-modul lik 10 GPa langs fiber (altså i lengderetning):

In [1]:
E = 10000    # MPa
b = 5        # mm
h = 5        # mm
a = 40       # mm
d = 1        # mm
F1 = ((E*b*h**3)/(8*a**3))*d     # ligning (4)
U1 = 0.5*F1*d                    # ligning (5)

print( 'F={:.3f} og U={:.3f} når a = {} og d = {}'.format(F1,U1,a,d) )
F=12.207 og U=6.104 når a = 40 og d = 1

Hva blir kraft og tøyningsenergi ved samme deformasjon $d$ dersom sprekken øker med $\text{d}a$ = 5 mm ?

In [2]:
da = 5         # mm
a = a+da       # mm
F2 = ((E*b*h**3)/(8*a**3))*d
U2 = 0.5*F2*d

print( 'F={:.3f} og U={:.3f} når a = {} og d = {}'.format(F2,U2,a,d) )
F=8.573 og U=4.287 når a = 45 og d = 1

Vi finner altså at kraften avtar siden stivheten i systemet avtar, og dermed blir det mindre tøyningsenergien:

In [3]:
dU = U2-U1
print('Endring i tøyningsenergi: dU = {:.3f} når da = {}'.format(dU, da))
Endring i tøyningsenergi: dU = -1.817 når da = 5

Da er det store spørsmålet: Hvor ble det av denne differansen i tøyningsenergi? Siden energi ikke forsvinner helt uten å sette spor på ett eller annet vis, kan vi misstenke at det har blitt gjort et arbeid (av ukjent kvalitet...).

Det nye her, er jo at det har blitt produsert en sprekk med areal $b\cdot \text{d}a$, så om vi nå finner ut hvor mye energi som kreves for a lage en sprekk med et gitt areal, så vil vi kunne se på energiballansen.

For treverk av høy kvalitet og tetthet (type eik), trenger vi omtrent 0.1 J/mm2 for å splitte treet på langs i mode I. Denne verdien kalles bruddenergi eller mer formelt critical strain energy release rate med symbol $G_{IC}$ og med enhet energi per. areal.

Arbeidet (eller energi om du vil) som går med til å propagere sprekken blir dermed

\begin{equation} \text{d}W = b \cdot \text{d}a \cdot G_{IC} \tag{6} \end{equation}
In [4]:
GIC = 0.1    #J/mm2
dW  = b*da*GIC

print('For å lage {} mm lenger sprekk, kreves det en energi lik dW = {}'.format(da,dW))
print('Tilgjengelig, hypotetisk utløst tøyningsenergi var dU = {:.3f} for samme eksempel.'.format(dU))
For å lage 5 mm lenger sprekk, kreves det en energi lik dW = 2.5
Tilgjengelig, hypotetisk utløst tøyningsenergi var dU = -1.817 for samme eksempel.

Da kan vi konkludere som følger: Den tilgjengelige tøyningsenergien er mindre enn det som kreves for å øke sprekkens lengde med den gitte verdien, så mer sprekk blir altså ikke laget.

Alternativt:

$$\text{d}U + \text{d}W > 0$$

som betyr at vi må tilføre mer energi for å få dannet den antatte sprekken.

Da kan vi formulere et kriterie for sprekkvekst:

\begin{equation} \text{d}U + \text{d}W < 0 \rightarrow \text{sprekk vokser} \tag{7} \end{equation}

Energi og fortegn er jo en evig kilde til missforståelser. Dette er jo egentlig bare en definisjonssak, og du vil finne (og kanskje har lært) en formalistisk måte å håndtere dette på. Det er imidlertid minst like nyttig for forståelsen å glemme hele formalismen, og heller være ryddig på hva som går inn og ut av systemet. Da blir du sjef over fortegn, og bestemmer selv hva som er pluss og minus...

Vi fortsetter eksempelet, og skal nå finne verdien av $d$ som gir sprekkvekst. På grunn av ren latskap, kjøres en enkel men ikke spessielt effektiv eller intelligent iterasjon:

In [5]:
a = 40         # startsprekk
da = 5         # sprekklengde-inkrement
d =  1         # må jo begynne et sted... og vet fra før av at d > 1 for tilfellet
fortsett=True
while fortsett:    # iterasjon for å finne d
    F1 = ((E*b*h**3)/(8*a**3))*d
    F2 = ((E*b*h**3)/(8*(a+da)**3))*d
    dU = 0.5*(F2-F1)*d
    dW = b*da*GIC
    if dU+dW < 0:
        print('Når d = {:.3f} mm vil en sprekk på {} mm kunne vokse {} mm siden dU + dW < 0'.format(d,a,da))
        print('fordi dU = {:.3f} og dW = {:.3f}'.format(dU,dW))
        fortsett = False
    d=d+0.001
    
Når d = 1.174 mm vil en sprekk på 40 mm kunne vokse 5 mm siden dU + dW < 0
fordi dU = -2.504 og dW = 2.500

Med litt modifikasjon, kan vi gjøre samme greia for flere inkrement av sprekklengde, samt plotte last v.s. deformasjon:

In [6]:
import matplotlib.pyplot as plt

a = 40         # startsprekk
da = 5         # sprekklengde-inkrement
d =  1         # må jo begynne et sted... og vet fra før av at d > 1 for tilfellet

x=[0]          # legger til d'er her
y=[0]          # legger til F'er her

for i in range(0,5):  # kjører 5 steg i sprekklengde-inkrement
    fortsett=True
    while fortsett:   # itersjon for å finne d
        F1 = ((E*b*h**3)/(8*a**3))*d
        F2 = ((E*b*h**3)/(8*(a+da)**3))*d
        dU = 0.5*(F2-F1)*d
        dW = b*da*GIC
        if dU+dW < 0:
            x.append(d)
            x.append(d)
            y.append(F1)
            y.append(F2)
            a=a+da
            fortsett = False
        d=d+0.001
        
plt.plot(x,y)
plt.xlim(0,)
plt.ylim(0,)
plt.grid()

Med mindre inkrement på $\text{d}a$:

In [7]:
a = 40         # startsprekk
da = 1         # sprekklengde-inkrement
d =  1         # må jo begynne et sted... og vet fra før av at d > 1 for tilfellet

x=[0]          # legger til d'er her
y=[0]          # legger til F'er her

for i in range(0,25):  # kjører 25 steg i sprekklengde-inkrement
    fortsett=True
    while fortsett:   # itersjon for å finne d
        F1 = ((E*b*h**3)/(8*a**3))*d
        F2 = ((E*b*h**3)/(8*(a+da)**3))*d
        dU = 0.5*(F2-F1)*d
        dW = b*da*GIC
        if dU+dW < 0:
            x.append(d)
            x.append(d)
            y.append(F1)
            y.append(F2)
            a=a+da
            fortsett = False
        d=d+0.001
        
plt.plot(x,y)
plt.xlim(0,)
plt.ylim(0,)
plt.grid()

Til slutt med $\text{d}a \rightarrow 0$:

In [8]:
a = 40         # startsprekk
da = 0.1       # sprekklengde-inkrement
d =  1         # må jo begynne et sted... og vet fra før av at d > 1 for tilfellet

x=[0]          # legger til d'er her
y=[0]          # legger til F'er her

for i in range(0,250):  # kjører 250 steg i sprekklengde-inkrement
    fortsett=True
    while fortsett:   # itersjon for å finne d
        F1 = ((E*b*h**3)/(8*a**3))*d
        F2 = ((E*b*h**3)/(8*(a+da)**3))*d
        dU = 0.5*(F2-F1)*d
        dW = b*da*GIC
        if dU+dW < 0:
            x.append(d)
            x.append(d)
            y.append(F1)
            y.append(F2)
            a=a+da
            fortsett = False
        d=d+0.001
        
plt.plot(x,y)
plt.xlim(0,)
plt.ylim(0,)
plt.grid()

Etter flere år med matte i diverse former, så er det ikke unaturlig at $\text{d}a \rightarrow 0$ gir en derivasjons-vibber. Så da gjør vi det:

Fra ligning (5):

\begin{equation} \frac{\text{d}U}{\text{d}a} = -\frac{3Ebh^3}{16a^4}d^2 \tag{8} \end{equation}

Fra ligning (6):

\begin{equation} \frac{\text{d}W}{\text{d}a} = bG_{IC} \tag{9} \end{equation}

Vilkåret for at en sprekk vokser, er dermed:

$$\frac{\text{d}U}{\text{d}a} + \frac{\text{d}W}{\text{d}a} < 0 \Rightarrow$$$$-\frac{3Ebh^3}{16a^4}d^2 + bG_{IC} < 0 $$\begin{equation} d > \sqrt{\frac{16a^4 bG_{IC}}{3Ebh^3}} \tag{10} \end{equation}
In [9]:
import numpy as np

a = np.linspace(40,60)
d = ((16*(a**4)*b*GIC)/(3*E*b*h**3))**0.5      # ligning (10)
F = (d*E*b*h**3)/(8*a**3)                      # ligning (3)

d = np.insert(d, 0, 0.0)    # Setter inn start-verdi (0)
F = np.insert(F, 0, 0.0)    # Setter inn start-verdi (0)

plt.plot(d,F)
plt.grid()
plt.xlim(0,)
plt.ylim(0,)
plt.show()

Konklusjon: ved hjelp av enkel bjelketeori, forståelse av mekanisk energi samt verdiene for E-modul og bruddenergi, kan vi estimere når og hvordan brudd forplanter seg i spisepinner og vedkubber.

Den siste last-deformasjonskurven illustrerer hva som skjer ved stabil sprekkvekst, noe som krever at prosessen er deformasjonsstyrt (kurven viser jo at lasten skal avta når sprekken vokser), noe som er vanskelig å få til på spisepinner som kjennetegnes ved at forholdet mellom sprekklengde og bøyestivhet er særdels høyt. Når sprekken endelig finner på å vokse, vil den da typisk forplante seg med stor hastighet gjennom hele greia, og du vil erfare at god del av tøyningsenergien går over til kinetisk energi.

Det vi har demonstrert i dette eksempelet, er i prinsippet testmetoden double cantilever beam (DCB) testing, som er særlig mye brukt på kompositter og laminat samt limte flater. Her er en god youtube video som anbefales.

'Uendelig' plate med sprekk

En 'uendelig' plate er jo rare greier, så om du sliter med det konseptet så er det tilstrekkelig å tenke at $W >> a$ og $L >> a$ i illustrasjonen under:

image.png

Platen har tykkelse $b$ (dimensjon ut av planet) og der er en sprekk med total lengde $2a$ som går gjennom hele tykkelsen til platen. Dette er selvsagt et ideal-tilfelle, og som ofte er tilfelle: det gir nydelige og enkle relasjoner som beskriver fenomenet så enkelt som mulig.

Fra mekaniske egenskaper og mekanisk energi vet vi at tøyningsenergien kan uttrykkes som tøyningsenergitetthet multiplisert med totalt volum, som for dette tilfellet med spenning kun langs en akse og der vi ikke har en sprekk, blir:

$$U = \frac{\sigma^2}{2E}V$$

(Du trenger ikke bekymre deg for det uendelige volumet $V$... det skal vi nok få derivert i filler etterhvert)

Hva så med sprekkens bidrag i forhold til tøyningsenergien? Noen smart hoder løste dette for over 100 år siden (Inglis, og sener anvendt av Griffith), en løsning som er både enkel og elegant. Total tøyningsenergi, nå med en sprekk, er

\begin{equation} U = \frac{\sigma^2}{2E}V - \frac{\sigma^2}{2E}b\pi a^2 \tag{11} \end{equation}

Tøyningsenergien derivert med hensyn på sprekklengden $a$ blir dermed (og der forsvant det uendelige volumet):

\begin{equation} \frac{\text{d}U}{\text{d}a} = - \frac{\sigma^2}{E}b\pi a \tag{12} \end{equation}

Nå vet vi fra jobben med vedkløyving at arbeidet som skal til for å lage en sprekk er deriverbar med hensyn på $a$, og gjentar den relasjonen her:

\begin{equation} \frac{\text{d}W}{\text{d}a} = bG_{IC} \tag{13} \end{equation}

Kriteriet for at en sprekk forplanter seg, er som tidligere:

$$\frac{\text{d}U}{\text{d}a} + \frac{\text{d}W}{\text{d}a} = 0 \Rightarrow$$$$\frac{\sigma^2}{E}\pi a = G_{IC} \Rightarrow$$$$\sigma^2\pi a = EG_{IC} \Rightarrow$$\begin{equation} \sigma\sqrt{\pi a} = \sqrt{EG_{IC}} \tag{14} \end{equation}

Vi skal da definere spenningsintensitetsfaktoren $K_I$ som venstre side av (14), mens bruddseigheten $K_{IC}$ er høyre side av (14):

\begin{equation} K_I = \sigma\sqrt{\pi a} \tag{15} \end{equation}

og

\begin{equation} K_{IC} = \sqrt{EG_{IC}} \tag{16} \end{equation}

Dermed blir vilkåret for at en sprekk forplanter seg

\begin{equation} K_I = K_{IC} \tag{17} \end{equation}

der bruddseigheten (16) er en materialparameter som kombinerer bruddenergi og elastisitetsmodul.

En av flere utfordringer med 'uendelige' plater er at de selvsagt også blir uendelig dyre, så de blir ikke brukt :-) Det betyr imidlertid ikke at relasjonene her ikke er brukbare: For andre geometrier er det etablert en drøss av verdier for en geometrifaktor $Y$, slik at ligning (15) tar formen:

\begin{equation} K_I = Y\sigma\sqrt{\pi a} \tag{18} \end{equation}

image-3.png

Eksempel-1: En skikkelig lang plate har en overflatesprekk på den ene kanten. Bredden på platen er mye større enn lengden på sprekken. Platen svikter ved en spenning på 100 MPa, og bruddseigheten til materialet er 10 MPa(m)1/2. Hva er sprekklengden a?

Løsning: Dette er tilfellet i midten i figuren over. Geometrifaktoren for dette tilfelle er uavhengig av sprekkens lengde, så løsningen er rett frem:

$$K_I = Y\sigma\sqrt{\pi a} \Rightarrow a = \frac{K_{IC}^2}{Y^2 \sigma^2\pi}, \quad \text{hvor } K_I = K_{IC}$$
In [10]:
Y =     1.2
KIC =   10
sigma = 100
a = (KIC**2)/((Y**2)*(sigma**2)*np.pi)
print('a = {:.2E} m = {:.2f} mm'.format(a, a*1000))
a = 2.21E-03 m = 2.21 mm

Eksempel-1: En skikkelig lang plate har en sentersprekk med lengde 2a. Bredden på platen er 5 mm. Platen svikter ved en spenning på 100 MPa, og bruddseigheten til materialet er 10 MPa(m)1/2. Hva er sprekklengden a?

Løsning: Dette er tilfellet til venstre i figuren over. Geometrifaktoren for dette tilfelle er avhengig av sprekkens lengde:

$$K_I = Y\sigma\sqrt{\pi a} \Rightarrow \sigma = \frac{K_{IC}}{Y \sqrt{\pi a}}, \quad \text{hvor } K_I = K_{IC}$$

og der

$$Y = \sqrt{\text{sec}\frac{\pi a}{W}}, \quad \text{hvor } \text{sec}\frac{\pi a}{W} = \bigg(\text{cos}\frac{\pi a}{W}\bigg)^{-1}$$

Her blir ikke greit å løse ut for $a$, så vi må gjøre en numerisk iterasjon, men først: la oss se på $Y$ som funksjon av forholdet $2a/W$:

In [11]:
# Y som funksjon av 2a/W for uendelig lang plate med endelig bredde og sentersprekk
a=np.linspace(0,2)
W=5
Y=(1/np.cos(np.pi*a/W))**0.5

plt.plot(2*a/W,Y)
plt.xlim(0,)
plt.ylim(0,)
plt.xlabel('2a/W')
plt.ylabel('Y')
plt.grid()
plt.show()

Som forventet: for små verdier av sprekklengde i forhold til bredden, blir $Y$ tilnermet lik 1 (som for en plate med uendelig bredde)

Nå vet vi jo ikke om sprekken er liten, så dermed en enkel numerisk iterasjon med Newtons halveringsmetode:

In [12]:
# Pass på å bruk konsistente enheter!!

KIC      = 10      # MPa (m)^0.5
W        = 5E-3    # m
sigma_f  = 100     # MPa

a_max, a_min = W/2, 0
konvergert = False
a = 2E-3   # første gjetting...
while not konvergert:
    Y  = (1/np.cos(np.pi*a/W))**0.5
    KI = Y*sigma_f*(np.pi*a)**0.5
    print('a = {:.3f} mm, Y = {:.3f}, KI = {:.3f}'.format(a*1000, Y, KI))
    if abs(KI-KIC) < 0.1:  # Nøyaktighet i 1. desimal
        konvergert = True
    if KI < KIC:   # sprekken må være større
        a_min = a
    if KI > KIC:   # sprekken må være mindre
        a_max = a
    a = (a_min + a_max)/2
a = 2.000 mm, Y = 1.799, KI = 14.259
a = 1.000 mm, Y = 1.112, KI = 6.232
a = 1.500 mm, Y = 1.304, KI = 8.954
a = 1.750 mm, Y = 1.484, KI = 11.005
a = 1.625 mm, Y = 1.383, KI = 9.885
a = 1.688 mm, Y = 1.431, KI = 10.416
a = 1.656 mm, Y = 1.406, KI = 10.144
a = 1.641 mm, Y = 1.395, KI = 10.013

Disclaimer:This site is designed for educational purposes only. There are most likely errors, mistakes, typos, and poorly crafted statements that are not detected yet... www.ntnu.edu/employees/nils.p.vedvik

Copyright 2023, All rights reserved