Zastosowanie MES do modelowania procesów odkształcenia materiałów

z nieliniowymi warunkami brzegowymi

 

1. Wykorzystać zasadę wariacyjną:

                                 (1)

gdzie  - krzywa umocnienia materiału (rys. 1); - naprężenie tarcia;  - przemieszenie poślizgu;  - objętość ciała.

.

 (dla zadania płaskiego).

2. Przyjąć, ze kierunek t odpowiada kierunkowi osi X, czyli .

Wtedy ostatni członek funkcjonału (1) można zapisać następująco:

,                                                            (2)

Gdzie Lij – długość strony elementu (rys.1); f – współczynnik tarcia;

Naprężenia można obliczyć za pomocą formuł:

,

i po wykorzystaniu liniowych funkcji kształtu:

.

Do formuły (2) potrzebujemy tylko , ale obliczymy pozostałe komponenty tensora naprężeń jako wyniki.

 

 

Rys. 1.

 

3. Zmodyfikować program

 

4. Zadanie:

 

Podany są

- wymiary próbki (2 warianty);

- formuła do wyznaczenia , wartości E, .

- współczynnik tarcia (2 warianty);

 

Wyznaczyć

- wykresy naprężeń na kontakcie dla rozpatrywanych wariantów;

- wykresy Ux na kontakcie dla rozpatrywanych wariantów;

- przeanalizować wyniki, przedstawić interpretacje fizyczne uzyskanych zależności.

 

Uwaga!!!

W ramach pomocy studentom publikuje rozwiązanie (przykładowe) w postaci kodu:

 

'***************************************************

' Program do modelowania spęczania

' za pomocą MES

' Milenin A.

' milenin@agh.edu.pl

'***************************************************

 

' Constants

Const g_nh = 500, g_ne = 1000

 

 

Type node

     x As Double

     y As Double

     Ux As Double

     Uy As Double

     Ex As Double

     Ey As Double

     Exy As Double

     Sx As Double

     Sy As Double

     Sxy As Double

     Ei As Double

     Si As Double

     status As Integer

     LOK(0 To 8) As Integer

End Type

 

Type element

     nop(1 To 3) As Integer

End Type

 

Type dataFEM

    nh As Integer

    ne As Integer

   

    dVel As Double

    Gs As Double

    k As Double

    Uup As Double

    Udown As Double

   

    H0 As Double

    B0 As Double

    nhB As Integer

    nhH As Integer

   

    ND(1 To g_nh) As node

    EL(1 To g_ne) As element

End Type

 

Dim gr As dataFEM

 

 

'***********************************************

' Program glowny

'***********************************************

Sub mainFEM()

    Call DataIni

   

'    Call DataGen

    Call DataGenAuto

   

    Call GetLOK

   

    Call VisualData(0)

   

    Call StatusCorr ' Tarcie

   

    Call solve

    Call VisualData(1)

   

End Sub

'*************************************************

 

 

Sub StatusCorr()

Dim ih As Integer

 

     For ih = 1 To gr.nh

        If (gr.ND(ih).status = 1) Then

        gr.ND(ih).status = 2

        End If

    Next ih

 

End Sub

 

 

Sub solve()

Dim ih As Integer

Dim iter As Integer

Dim F0 As Double

Dim Fplus As Double

Dim dF As Double

 

    For iter = 1 To 2800

 

        For ih = 1 To gr.nh

       

            If (gr.ND(ih).status = 0) Then

           

                F0 = GetFunNode(ih)

                gr.ND(ih).Ux = gr.ND(ih).Ux + gr.dVel

                Fplus = GetFunNode(ih)

                    If (Fplus > F0) Then

                    gr.ND(ih).Ux = gr.ND(ih).Ux - 2 * gr.dVel

                    End If

                   

                gr.ND(ih).Uy = gr.ND(ih).Uy + gr.dVel

                Fplus = GetFunNode(ih)

                    If (Fplus > F0) Then

                    gr.ND(ih).Uy = gr.ND(ih).Uy - 2 * gr.dVel

                    End If

                    If (Abs(F0) < 0.000000001) Then F0 = 0.000000001

                   

                    dF = Abs((Fplus - F0) / F0)

                End If

            

           

            If (gr.ND(ih).status = 2) Then

                F0 = GetFunNode(ih)

                gr.ND(ih).Ux = gr.ND(ih).Ux + gr.dVel

                Fplus = GetFunNode(ih)

                    If (Fplus > F0) Then

                    gr.ND(ih).Ux = gr.ND(ih).Ux - 2 * gr.dVel

                    End If

                End If

           

        Next ih

       

    Next iter

   

    For ih = 1 To gr.nh

        gr.ND(ih).x = gr.ND(ih).x + gr.ND(ih).Ux

        gr.ND(ih).y = gr.ND(ih).y + gr.ND(ih).Uy

    Next ih

   

End Sub

 

 

 

 

Function GetFunNode(ih As Integer)

Dim i As Integer

Dim ie As Integer

Dim Je As Double

 

    GetFunNode = 0

    For i = 1 To gr.ND(ih).LOK(0)

        ie = gr.ND(ih).LOK(i)

        Je = clcFunkconal(ie)

        GetFunNode = GetFunNode + Je

    Next i

 

End Function

 

 

 

 

 

Sub GetLOK()

    Dim ih As Integer

    Dim ie As Integer

    Dim j As Integer

 

    For ih = 1 To gr.nh

    gr.ND(ih).LOK(0) = 0

        For ie = 1 To gr.ne

           For j = 1 To 3

                id = gr.EL(ie).nop(j)

                If (id = ih) Then

                    gr.ND(ih).LOK(0) = gr.ND(ih).LOK(0) + 1

                    gr.ND(ih).LOK(gr.ND(ih).LOK(0)) = ie

                End If

           Next j

        Next ie

    Next ih

End Sub

 

 

 

 

 

Function clcFunkconal(ie As Integer)

    Dim x(1 To 3) As Double

    Dim y(1 To 3) As Double

    Dim Ux(1 To 3) As Double

    Dim Uy(1 To 3) As Double

    Dim Ex As Double

    Dim Ey As Double

    Dim Exy As Double

    Dim Ei As Double

    Dim E0 As Double

    Dim Si As Double

    Dim E As Double

    Dim k As Double

    Dim Sx As Double

    Dim Sy As Double

    Dim Sxy As Double

    Dim i(1 To 3) As Integer

    Dim bi As Double

    Dim bj As Double

    Dim bk As Double

    Dim ci As Double

    Dim cj As Double

    Dim ck As Double

    Dim Ae As Double

    Dim a As Double

    Dim b As Double

    Dim Je As Double

    Dim L As Double

    Dim St(1 To 3) As Integer

    Dim Uposl As Double

    Dim Jt As Double

   

 

    x(1) = gr.ND(gr.EL(ie).nop(1)).x

    x(2) = gr.ND(gr.EL(ie).nop(2)).x

    x(3) = gr.ND(gr.EL(ie).nop(3)).x

   

    y(1) = gr.ND(gr.EL(ie).nop(1)).y

    y(2) = gr.ND(gr.EL(ie).nop(2)).y

    y(3) = gr.ND(gr.EL(ie).nop(3)).y

  

    Ux(1) = gr.ND(gr.EL(ie).nop(1)).Ux

    Ux(2) = gr.ND(gr.EL(ie).nop(2)).Ux

    Ux(3) = gr.ND(gr.EL(ie).nop(3)).Ux

   

    Uy(1) = gr.ND(gr.EL(ie).nop(1)).Uy

    Uy(2) = gr.ND(gr.EL(ie).nop(2)).Uy

    Uy(3) = gr.ND(gr.EL(ie).nop(3)).Uy

 

    St(1) = gr.ND(gr.EL(ie).nop(1)).status

    St(2) = gr.ND(gr.EL(ie).nop(2)).status

    St(3) = gr.ND(gr.EL(ie).nop(3)).status

 

    L = 0

    Uposl = 0

   

    If (St(1) = 2) Then

        If (St(2) = 2) Then

        L = Abs(x(2) - x(1))

        Uposl = (Ux(2) + Ux(1)) / 2

        End If

    End If

   

    If (St(2) = 2) Then

        If (St(3) = 2) Then

        L = Abs(x(2) - x(3))

        Uposl = (Ux(2) + Ux(3)) / 2

        End If

    End If

   

     If (St(1) = 2) Then

        If (St(3) = 2) Then

        L = Abs(x(1) - x(3))

        Uposl = (Ux(1) + Ux(3)) / 2

        End If

    End If

 

'    Jt = L * Uposl * 0.1

    Jt = 0.1 * L * Uposl ^ 2

   

    bi = y(2) - y(3)

    ci = x(3) - x(2)

    bj = y(3) - y(1)

    cj = x(1) - x(3)

    bk = y(1) - y(2)

    ck = x(2) - x(1)

    Ae = x(2) * y(3) + x(1) * y(2) + y(1) * x(3) - y(1) * x(2) - y(2) * x(3) - x(1) * y(3)

 

    Ex = (bi * Ux(1) + bj * Ux(2) + bk * Ux(3)) / (2 * Ae)

    Ey = (ci * Uy(1) + cj * Uy(2) + ck * Uy(3)) / (2 * Ae)

    Exy = (bi * Uy(1) + bj * Uy(2) + bk * Uy(3) + ci * Ux(1) + cj * Ux(2) + ck * Ux(3)) / (4 * Ae)

    Ei = (((2) ^ 0.5) / 3) * ((Ex - Ey) ^ 2 + Ex ^ 2 + Ey ^ 2 + 6 * Exy ^ 2)

    E0 = (Ex + Ey) / 3

   

'   Sx

'   Sy

'   Sz

   

    a = 2000

    b = 0.18

    Si = a * Ei ^ b ' krzywa umocnienia

   

    E = 1  ' debug

    k = 10 ' debug

   

'    Je = a * Ei ^ (b + 1) / (b + 1) * Ae + k * E0 ^ 2 * Ae

    Je = E * Ei ^ 2 * Ae + k * E0 ^ 2 * Ae + Jt

    clcFunkconal = Je

   

End Function

 

 

 

Sub DataIni()

Dim i As Integer

    For i = 1 To g_nh

        gr.ND(i).x = 0

        gr.ND(i).y = 0

        gr.ND(i).x = 0

        gr.ND(i).y = 0

        gr.ND(i).Sy = 0

        gr.ND(i).Sxy = 0

        gr.ND(i).Sx = 0

        gr.ND(i).Si = 0

        gr.ND(i).Ei = 0

        gr.ND(i).Ex = 0

        gr.ND(i).Exy = 0

        gr.ND(i).Ey = 0

        gr.ND(i).status = 0

    Next i

End Sub

 

 

 

Sub DataGenAuto()

    Dim x As Double

    Dim y As Double

    Dim dx As Double

    Dim dy As Double

    Dim i As Integer

    Dim j As Integer

    Dim id As Integer

    Dim n1 As Integer

    Dim n2 As Integer

    Dim n3 As Integer

    Dim n4 As Integer

   

' Dane podstawowe

    gr.dVel = 0.0005

   

   

    gr.Uup = -1

    gr.Udown = 1

   

    gr.B0 = 10 'mm

    gr.H0 = 10 'mm

   

    gr.nhB = 6

    gr.nhH = 6

   

    gr.nh = gr.nhB * gr.nhH

    gr.ne = (gr.nhB - 1) * (gr.nhH - 1) * 2

   

    dx = gr.B0 / (gr.nhB - 1)

    dy = gr.H0 / (gr.nhH - 1)

   

    y = 0

    id = 1

    For j = 1 To gr.nhH

    x = 0

        For i = 1 To gr.nhB

        gr.ND(id).x = x

        gr.ND(id).y = y

        gr.ND(id).status = 0

       

            If (j = 1) Then

                gr.ND(id).status = 1

                gr.ND(id).Ux = 0

                gr.ND(id).Uy = gr.Udown

            End If

       

            If (j = gr.nhH) Then

                gr.ND(id).status = 1

                gr.ND(id).Ux = 0

                gr.ND(id).Uy = gr.Uup

            End If

       

        x = x + dx

        id = id + 1

        Next i

    y = y + dy

    Next j

   

   

    id = 1

    For j = 1 To gr.nhH - 1

        For i = 1 To gr.nhB - 1

        ih = j + (i - 1) * (gr.nhH - 1)

'

'     n4 *---------*  n1

'        I         !

'        I         !

'        I         !

'        I         !

'     n3 *---------*  n2

'

        n1 = j + (i - 1) * gr.nhH + gr.nhH + 1

        n2 = j + (i - 1) * gr.nhH + 1

        n3 = j + (i - 1) * gr.nhH

        n4 = j + (i - 1) * gr.nhH + gr.nhH

       

        gr.EL(id).nop(1) = n1

        gr.EL(id).nop(2) = n3

        gr.EL(id).nop(3) = n2

        

        gr.EL(id + 1).nop(1) = n1

        gr.EL(id + 1).nop(2) = n4

        gr.EL(id + 1).nop(3) = n3

    

        id = id + 2

        Next i

    y = y + dy

    Next j

    

End Sub

 

 

 

Sub DataGen()

    gr.dVel = 0.001

    gr.Gs = 1

    gr.k = 100

    gr.Uup = -0.1

    gr.Udown = 0.1

    gr.nh = 7

    gr.ne = 6

   

     gr.ND(1).x = -10

     gr.ND(1).y = 10

     gr.ND(1).status = 1

     gr.ND(1).Ux = 0

     gr.ND(1).Uy = gr.Uup

    

     gr.ND(2).x = 10

     gr.ND(2).y = 10

     gr.ND(2).status = 1

     gr.ND(2).Ux = 0

     gr.ND(2).Uy = gr.Uup

    

     gr.ND(3).x = 10

     gr.ND(3).y = 0

     gr.ND(3).status = 0

     gr.ND(3).Ux = 0

     gr.ND(3).Uy = 0

   

     gr.ND(4).x = 10

     gr.ND(4).y = -10

     gr.ND(4).status = 1

     gr.ND(4).Ux = 0

     gr.ND(4).Uy = gr.Udown

    

     gr.ND(5).x = -10

     gr.ND(5).y = -10

     gr.ND(5).status = 1

     gr.ND(5).Ux = 0

     gr.ND(5).Uy = gr.Udown

  

     gr.ND(6).x = -10

     gr.ND(6).y = 0

     gr.ND(6).status = 0

     gr.ND(6).Ux = 0

     gr.ND(6).Uy = 0

    

     gr.ND(7).x = 0

     gr.ND(7).y = 0

     gr.ND(7).status = 0

     gr.ND(7).Ux = 0

     gr.ND(7).Uy = 0

  

     gr.EL(1).nop(1) = 1

     gr.EL(1).nop(2) = 7

     gr.EL(1).nop(3) = 2

    

     gr.EL(2).nop(1) = 7

     gr.EL(2).nop(2) = 3

     gr.EL(2).nop(3) = 2

    

     gr.EL(3).nop(1) = 3

     gr.EL(3).nop(2) = 7

     gr.EL(3).nop(3) = 4

    

     gr.EL(4).nop(1) = 7

     gr.EL(4).nop(2) = 5

     gr.EL(4).nop(3) = 4

    

     gr.EL(5).nop(1) = 7

     gr.EL(5).nop(2) = 6

     gr.EL(5).nop(3) = 5

    

     gr.EL(6).nop(1) = 6

     gr.EL(6).nop(2) = 7

     gr.EL(6).nop(3) = 1

    

End Sub

 

 

Sub VisualData(kod As Integer)

    Dim i As Integer

    Dim pnt1(0 To 2) As Double

    Dim pnt2(0 To 2) As Double

    Dim pnt3(0 To 2) As Double

    Dim color As AcadAcCmColor

    Dim myGrid As Acad3DFace

 

         For i = 1 To gr.ne Step 1

            pnt1(0) = gr.ND(gr.EL(i).nop(1)).x

            pnt1(1) = gr.ND(gr.EL(i).nop(1)).y

            pnt1(2) = 0

            pnt2(0) = gr.ND(gr.EL(i).nop(2)).x

            pnt2(1) = gr.ND(gr.EL(i).nop(2)).y

            pnt2(2) = 0

            pnt3(0) = gr.ND(gr.EL(i).nop(3)).x

            pnt3(1) = gr.ND(gr.EL(i).nop(3)).y

            pnt3(2) = 0

            Set myGrid = ThisDrawing.ModelSpace.Add3DFace(pnt1, pnt2, pnt3, pnt3)

            Set color = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.16")

            If (kod = 0) Then

                Call color.SetRGB(80, 100, 244)

            Else

                Call color.SetRGB(128, 100, 128)

            End If

           

            myGrid.TrueColor = color

         Next i

End Sub

 

 

Rys. Wyniki modelowania