Thursday, 19 April 2012

Fungsi profil kecepatan aliran laminar pada setiap jarak X, UTS NO 1

Secara numerik tentukan fungsi profil kecepatan aliran laminar pada setiap jarak X dari ujung pelat bagian depan (aliran hulu). Bandingkan dengan hasil analitis ?

penyelesaian untuk mendapatkan data menggunakan CFDSOFT lumayan menyita waktu, proses simulasi pun harus dikerjakan secara bersamaan agar hasil yang didapat lebih cepat, ditambah seringnya problem terhadap koneksi, pengambilan data yang saya gunakan pada pembasan UTS ini dilakukan bersama-sama dengan Almer Ibnu, Irawan, Helmi (yang ternyata tetangga kampung halaman), Gery, dan teman-teman lainya. ok penyelesaian untuk nomer satu kurang lebih sebagai berikut : 

Langkah untuk menentukan Profil Kecepatan secara numerik
sebelumnya saya sudah membuat program untuk menghitung gaus jordan, yaitu untuk menyelesaikan persamaan simultan linier, berikut linknya
http://bloghasnan.blogspot.com/2012/03/penyelesaian-persamaan-simultan.html
program ini akan saya panggil untuk menyelesaikan sistem persamaan linier 3 persamaan yang didapat dari regresi polinomial, penjelasan untuk pemrograman sistem regresi polinomial akan saya sampaikan di bawah ini, sedangkan contoh dari penyelesaian persamaan simulatan dapat dilihat pada link berikut
http://bloghasnan.blogspot.com/2012/03/contoh-hasil-persamaan-simultan-gaus.html
oke, jadi saya rasa bagaimana cara menyelesaikan persamaan simulatan sudah jelas khan, karena untuk mendapatkan nilai regresi ax2+bx+c ya harus memahami metode ini terlebih dahulu.

berikut urutan langkahnya secara numerik
1.  membuat simulasi CFDSOFT atau mengambil data secara langsung, untuk memudahkan pengambilan data dilakukan secara simulasi dari cfdsof
2. dari data CFDSOFT perlu dibuat list untuk dibuat regresi
4. menentukan nilai x dan f(x)
5. menghitung regresi polynomial
Alogaritma regresi polinomial
1. masukkan jumlah n data
1. masukkan data x
2. masukkan data fx
3. For i = 1 To 50
4.       A= A + i
5.       b = b + i
6        c = i ^ 2
7       Cells i = c
8       d = d +i
9       c3 = i ^ 3
10        Cells i = c3
11        j3 = j3 +  i
12        c4 =  i ^ 4
13        Cells i = c4
14       j4 = j4 +  i
15        e = x i * fx i '
16       Cells(1 + i, n) = e 
17        f = f + Cells(1 + i, 15)
18      c5 = (Cells(1 + i, 10) ^ 2)
19       Cells(1 + i, 16) = c5
 20      j5 = j5 + Cells(1 + i, 16)
 21  Next, menulias hasil
 22       Cells(55, 10) = A
 23       Cells(55, 11) = b
 24       Cells(55, 12) = d
 25       Cells(55, 13) = j3
 26       Cells(55, 14) = j4
 27       Cells(55, 15) = f
 28       Cells(55, 16) = j5
sehingga didapatkan nilai matrix 3 x 3 dengan eleminasi gaus akan didapatkan nilai ax2+bx+c

Program Lengkap VBA untuk Regresi Polinomial

Private Sub CommandButton1_Click()
Dim A As Double
    Dim b, c, d, e, f, a0, b0, c3, c4, c5, j3, j4, j5 As Double
    For i = 1 To 50
        A = A + Cells(1 + i, 10) ' jumlah total x
        b = b + Cells(1 + i, 11) ' jumlah total y
        c = Cells(1 + i, 10) ^ 2 ' menulis pangkat
        Cells(1 + i, 12) = c
        d = d + Cells(1 + i, 12) ' jumlah x2
       
        c3 = Cells(1 + i, 10) ^ 3 ' menulis pangkat 3
        Cells(1 + i, 13) = c3
        j3 = j3 + Cells(1 + i, 13) ' jumlah pangkat 3
       
        c4 = Cells(1 + i, 10) ^ 4 ' menulis pangkat 4
        Cells(1 + i, 14) = c4
        j4 = j4 + Cells(1 + i, 14)
               
        e = Cells(1 + i, 10) * Cells(1 + i, 11) ' x kali y
        Cells(1 + i, 15) = e    ' menuliskan nilai x*y
        f = f + Cells(1 + i, 15) ' jumlah xy
       
        c5 = (Cells(1 + i, 10) ^ 2) * Cells(1 + i, 11) ' x*y
        Cells(1 + i, 16) = c5
        j5 = j5 + Cells(1 + i, 16) ' jumlah x2y
       
    Next ' menulis hasil
        Cells(55, 10) = A
        Cells(55, 11) = b
        Cells(55, 12) = d
        Cells(55, 13) = j3
        Cells(55, 14) = j4
        Cells(55, 15) = f
        Cells(55, 16) = j5


 Hasil Program Excel VBA

hasil program yang dibuat merupakan gabungan antara program regresi polynomial dengan program gauss jordan untuk menghitung koeffisien persamaan linier

Urutan langkahnya adalah
1. memasukkan data x dan fx
2. menghitung x2, x3, x4,xy dan x2y
3. menjumlahkan x2, x3, x4,xy dan x2y
4. menyusun persamaan matrix 3x3
5. menghitung koeffsien matrix 3x3
6. menulis hasil koeffisien matrix dalam ax2+bx+c

detailnya adalah seperti berikut
1. memasukkan data x dan fx
 2. data akan otomatis dihitung, pada program ini saya membatasi sampai 50 data, lihat program diatas
 For i = 1 To 50
3. selain itu hasil penjumlahannya juga langsung dhitung dan diletakkan pada cell baris ke 55
next
        Cells(55, 10) = A
        Cells(55, 11) = b
        Cells(55, 12) = d
        Cells(55, 13) = j3
        Cells(55, 14) = j4
        Cells(55, 15) = f
        Cells(55, 16) = j5

4. menyusun persamaan matrix
5. menghitung nilai a,b,c dapat dilakukan dengan mengklik tombol "hitung koeffisien matrix", cara detail lihat posting saya sebelumnya di http://bloghasnan.blogspot.com/2012/03/penyelesaian-persamaan-simultan.html
hasilnya adalah inverse matrix dan nilai koeffisien a,b,c
6. sehingga otomatis nilai dari regresi polynomialnya adalah -3,9x2+0x-0.001

Program Untuk Menghitung Gauss Jordan


membuat modul fungsi yang bisa dipanggil sudah saya jelaskan di beberapa posting sebelumnya, tentang bisection dan newton rapshon,
isi dari module tersebut kira-kira seperti ini, kata garis miring adalah keteranganya, biar mudah dipahami sesuai dengan permintaan sohib-sohib sekelas


Function Gauss_Jordan(A As Variant) As Variant

Dim i As Long, j As Long, k As Long, Atemp

Dim cols As Long, rows As Long, MaxVal As Double

Dim Max_Ind As Double, temp As Double, hold()



    'bila fungsi mulai dipanggil, jumlah kolom dan baris akan dihitung untuk menentukan jumlah n, dan apakah matrix yang ada dapat dihitung, object(A) maksudnya adalah matrix untuk X, = trus artinya bila ada nilainya
 
  If IsObject(A) = True Then
        cols = A.Columns.Count
        rows = A.rows.Count
    Else
        cols = UBound(A, 2)
        rows = UBound(A, 1)
    End If
 
    'menambahkan kolom untuk meletakkan hasil perhitungan,  Atemp merupakan matrix temporary sebelum digunakan nantinya dalam perhitungan.


    cols = cols + cols
    ReDim hold(1 To rows, 1 To cols), Atemp(1 To rows, 1 To cols)
 
    'menambahkan matrix x dan matrix y menjadi augmented matrix, aug matrix adalah matrix gabungan antara x dan y


    For i = 1 To rows
        For j = 1 To rows
            Atemp(i, j) = A(i, j)
            Atemp(i, j + rows) = 0#
        Next j
        Atemp(i, i + rows) = 1#
    Next i
 
    For i = 1 To rows
 
        MaxVal = Atemp(i, i)
        Max_Ind = i
     
 ' prosedure pendek menghitung nilai maximum, hal ini berguna untuk menentukan apakah matirx tersebut ada penyelesaianya atau tidak, akan muncul msg box error bila matrix ternyata singular


        For j = i + 1 To rows
            If Abs(Atemp(j, i)) > Abs(MaxVal) Then
                MaxVal = Atemp(j, i)
                Max_Ind = j
            End If
        Next j
     
        If MaxVal = 0 Then
            MsgBox Prompt:="Matrix adalah singular!", Title:="Error"
            Exit Function
        End If
     
        'prosedure perhitungan pivoting pada matrix


        For j = i To cols
            temp = Atemp(i, j)
                    Atemp(i, j) = Atemp(Max_Ind, j) / MaxVal
                      If Max_Ind <> i Then Atemp(Max_Ind, j) = temp
        Next j
     
     
        For k = 1 To rows
            If k <> i Then          
           
                For j = 1 To cols
                    hold(k, j) = -Atemp(k, i) * Atemp(i, j)
                Next j
           
                For j = 1 To cols
                   Atemp(k, j) = Atemp(k, j) + hold(k, j)
                Next j
            End If
        Next k
    Next i
    Gauss_Jordan = Atemp
End Function



------------------------------------------------------------------------
wahh.. panjang dan ribet? betul sekali, kok bisa bikin program seperti itu? nanti saya tunjukin rahasianya, sekarang kita teruskan membuat programnya

3. program pada button Hitung

double klik tombol hitung lalu masukkan perintah seperti berikut


Private Sub OK_Btn_Click()



Dim i As Double, j As Double, Data As Variant, n As Double

Dim A As Variant, MaxCol As Double, temp As Double, b()

Dim wks, cntsheets, newsheet As Worksheet, FinalCol As Double

Dim x(), Aplus(), Ainv()


' untuk menjaga agar inputan tidak salah, gunakan coding berikut ini, bila input matrix salah, atau ada huruf yang dimasukkan ke dalam cell, maka akan muncul peringatan kalau input matrix salah



If IP_A.Value = Empty Then

        Me.Hide
        MsgBox Prompt:="Pilih Cell untuk memasukkan angka." & vbCr & _
                       "Jangan tulis dengan variablenya.", _
                       Buttons:=48, Title:="Matrix input salah!"
        Me.Show
        Exit Sub
    End If

' matrix A adalah matrix input pada x



A = Application.RANGE(IP_A.Value)

 n = UBound(A, 1)

' pengecekan matrix untuk Y atau B pada program berikut



If IP_b.Value <> Empty Then

        b = Application.RANGE(IP_b.Value)
        If UBound(A, 1) <> UBound(b, 1) Then
            Me.Hide
            MsgBox Prompt:="baris di A harus sama dengan baris di b.", _
                   Buttons:=544, Title:="Error!"

     Err.Description = "Jumlah Baris Matrix tidak sama."
            GoTo EndProc
        End If
    End If
' terakhir menghitung inverse yang dilanjutkan untuk menghitung adjoint matrix, sehingga didapatkan nilai x1-xn

Aplus = Gauss_Jordan(A)

        If IsError(Aplus) Then GoTo EndProc
        ReDim Ainv(1 To n, 1 To n)
    For i = 1 To n
        For j = 1 To n
            Ainv(i, j) = Aplus(i, j + n)
        Next j
    Next i

If IP_b.Value <> Empty Then

        x = Application.MMult(Ainv, b)
    End If
' hasilnya diletakkan pada sheet baru


   cntsheets = Application.Sheets.Count - Application.Charts.Count
        Set newsheet = Application.Worksheets.add(after:=Worksheets(cntsheets))
        newsheet.name = "Hasil X!"
        FinalCol = 0


With Application

          .Cells(1, FinalCol + 1) = "Inverse Matrix "
        For j = 1 To n
           For i = 1 To n
               .Cells(i + 1, FinalCol + j).Value = Ainv(i, j)
           Next i
        Next j
        If IP_b.Value <> Empty Then
            FinalCol = FinalCol + n
            Cells(1, FinalCol + 1) = "SOLUSI"
            For i = 1 To n
                .Cells(i + 1, FinalCol + 1).Value = x(i, 1)
            Next i
        End If
    End With
 
    Application.Calculation = xlCalculationAutomatic


Unload Me

Exit Sub



Simulasi CFD
langkah untuk simulasi CFD sebenarnya juga sudah dijelaskan pada posting-posting sebelumnya, yang membedakan untuk kasus ini adalah aliran terjadi pada plat tunggal, atau single plate, sehingga untuk menentukan boundary , cell dsb perlu juga diperhatikan, ok, langkah perlangkah untuk simulasi sudah saya buatkan power pointnya di embed object berikut, anda bisa mendownloadnya langsung maupun menshare ke yang lainya. untuk melihatnya pastikan flash player sudah terinstal di bowser anda



Perbandingan Numerik Dan Analisis



hasil simulasi distribusi kecepatan U

Hasil Perbandingan

berikut saya sampaikan beberapa hasil perbandingan antara hasil simulasi dengan numerik
1. contoh pada node 18, dapat dilihat bahwa program yang sudah dibuat menghasilkan nilai regresi yang sama dengan excel, bahkan lebih terliti dengan 6 angka dibelakang koma



dari data diatas dan setelah didapat fungsi profil kecepatan, dan dibuat fungsi regresi linier didapatkan kesimpulan sebagai berikut
a. pada titik x=0 sampai dengan x = 5 kecepatan profilnya membentuk persamaan polynomial
b. antara x = 5 sampai dengan x = 30 aliran yang terjadi adalah laminer, terbukti dengan persamaan kecepatan yang didapat mengarah ke linier.
c. setelah x =31 aliran berubah menjadi turbulent
hal ini sesuai dengan analitis pergerakan fluida pada satu bidang plat datar, bahwa pada x = 0 akan terjadi aliran laminer namun boundary conditionnya bergerak ke atas, sehingga aliran tersebut laminer, selanjutnya aliran tersebut berkembang menjadi turbulent

 gambar diatas merupakan hasil grafik dari beberapa node yang diambil, dari grafik diatas dapat kita lihat perubahan kecepatan ditiap-tiap node, sehingga dapat kita simpulkan bahwa aliran berubah dengan bertambahnya node, semakin tinggi jarak titik terhadap permukaan kontak maka kecepatanya semakin tinggi, hal ini dikarenakan titik yang dekat dengan permukaan kontak akan mengalami gaya tahanan yang lebih tinggi. pada node 30 diperkirakan sudah mencarai full developed region, hal ini dikarenakan nilai regresi yang didapat sudah linier, bukan lagi polynomial.

File lengkap UTS dapat didownload disini


0 comments:

Post a Comment