4. Zastosowanie MES do modelowania
odkształcenia sprężysto-plastycznego
1.
Podstawy
teoretyczne
Rys. Idea metody sprężystych rozwiązani
(4.1)
2. Dyskretyzacja
ośrodka
Rys.2. Przykład siatki MES
Rys. 3. Rozpatrywany przykład siatki MES
Rys. 4. Numeracja węzłów i elementów
Funkcjonał po dyskretyzacji
3. Struktury danych
ne=6
nh=7
Ux(1)=0; Uy(1)=Uup;
Ux(2)=0; Uy(2)=Uup;
Ux(3)=0; Uy(3)=0;
Ux(4)=0; Uy(4)=Udown;
Ux(5)=0; Uy(5)=Udown;
Ux(6)=0; Uy(6)=0;
Ux(7)=0; Uy(7)=0 ;
Status1 = 1
Status2 = 1
Status3 = 0
Status4 = 1
Status5 = 1
Status6 = 0
Status7 = 0
X1=-1 Y1=1
X2=1 Y2=1
X3=1 Y3=0
X4=1 Y4=-1
X5=-1 Y5=-1
X6=-1 Y6=0
X7=0 Y7=0
nop(1,1)=1; nop(2,1)=7; nop(3,1)=2;
nop(1,2)=7; nop(2,2)=3; nop(3,2)=2;
nop(1,3)=3; nop(2,3)=7; nop(3,3)=4;
nop(1,4)=7; nop(2,4)=5; nop(3,4)=4;
nop(1,5)=7; nop(2,5)=6; nop(3,5)=5;
nop(1,6)=6; nop(2,6)=7; nop(3,6)=1.
4. Algorytm obliczenia
funkcjonału
5. Program
'***************************************************
' 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 solve
Call VisualData(1)
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
800
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
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
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
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 = 1000 ' debug
' Je = a * Ei ^ (b + 1) / (b + 1) * Ae + k * E0 ^ 2 * Ae
Je = E * Ei ^ 2 * Ae
+ k * E0 ^ 2 * Ae
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.001
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
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
6. Wyniki
6. Problemy
7. Sprawozdanie
Tekst programu w dowolnym
języku oprogramowania z obliczonym przykładem testowym
Opis algorytmów programu w
tekście (komentarzy)