Difference between revisions of "Metnum03 Bhismantyo Tsaqif Daniswara"
(34 intermediate revisions by the same user not shown) | |||
Line 19: | Line 19: | ||
Pada pertemuan pertama ini, Pak Dai menjelaskan dan mengarahkan mengenai pelajaran Metode Numerik sebelum UTS. Pada page ini, saya akan menjelaskan apa yang sudah saya pelajari mengenai Metode Numerik. | Pada pertemuan pertama ini, Pak Dai menjelaskan dan mengarahkan mengenai pelajaran Metode Numerik sebelum UTS. Pada page ini, saya akan menjelaskan apa yang sudah saya pelajari mengenai Metode Numerik. | ||
− | '''Metode untuk mencari akar-akar persamaan''' | + | '''Metode untuk mencari akar-akar persamaan''' |
− | '''1.''' Metode | + | '''1. Metode Tertutup''' |
+ | |||
+ | a. Metode Biseksi | ||
+ | |||
+ | Metode Biseksi memiliki beberapa langkah-langkah penyelesaian sebagai berikut : | ||
+ | |||
+ | '''1.Hitung fungsi pada interval yang sama dari x sampai pada perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu :f(xn) . f(xn+1) < 0 | ||
+ | '''2.Estimasi pertama dari akar xt dihitung dengan | ||
+ | '''[[File:AkarbiseksiBhisma.png|150px|center]] | ||
+ | '''3.Buat evaluasi berikut untuk menentukan di dalam sub interval mana akar persamaan berada : | ||
+ | '''a.f(xn).f(xt) < 0, akar persamaan berada pada sub interval pertama, kemudian tetapkan xn+1 = xt dan lanjutkan pada langkah ke-4 | ||
+ | '''b.f(xn).f(xt) > 0, akar persamaan berada pada sub interval kedua, kemudian tetapkan xn = xt dan lanjutkan pada langkah ke-4 | ||
+ | '''c.f(xn).f(xt) = 0, akar persamaan adalah xt dan hitungan selesai | ||
+ | '''4.Hitung perkiraan baru dari akar dengan | ||
+ | '''[[File:AkarbiseksiBhisma.png|150px|center]] | ||
+ | '''5.Apabila perkiraan baru sudah cukup kecil (sesuai dengan batasan yang ditentukan), maka hitungan selesai, dan xt adalah akar persamaan yang dicari. Jika belum, maka hitungan kembali ke langkah ke-3''' | ||
+ | |||
+ | b. Metode Regulasi Falsi | ||
+ | |||
+ | Metode Regula Falsi didasarkan pada interpolasi antara dua nilai dari fungsi yang mempunyai tanda berlawanan. Metode regulasi falsi memiliki langkah-langkah sebagai berikut : | ||
+ | |||
+ | '''1.Hitung fungsi pada interval yang sama dari x sampai pada perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu f(xn) . f(xn+1) < 0 | ||
+ | '''2.Mencari nilai x* dengan persamaan : | ||
+ | '''[[File:AkarfalsiBhisma.png|150px|center]] | ||
+ | '''3.Nilai tersebut digunakan untuk menghitung nilai f(x*), yang kemudian digunakan lagi untuk interpolasi linier dengan nilai f(xn) atau f(xn+1) sedemikian sehingga kedua fungsi mempunyai tanda berbeda. | ||
+ | '''4.Prosedur diulang lagi sampai didapat nilai f(x*) mendekati nol''' | ||
+ | |||
+ | '''2. Metode Terbuka''' | ||
+ | |||
+ | a. Metode Newton Raphson | ||
+ | |||
+ | Metode Newton Raphson memiliki langkah-langkah sebagai perikut: | ||
+ | |||
+ | '''1.Pilih nilai awal xi sembarang | ||
+ | '''2.Hitung xi+1 dan f (xi+1) dengan rumus : | ||
+ | '''[[File:AkarnewtonBhisma.png|150px|center]] | ||
+ | '''3.Demikian seterusnya sampai didapatkan f (xi+1) yang kecil''' | ||
+ | |||
+ | b. Metode Secant | ||
+ | |||
+ | Kekurangan Metode Newton Raphson adalah diperlukannya turunan pertama (differensial) dari f(x) dalam hitungan. Kadang-kadang sulit untuk mendiferensialkan persamaan yang diselesaikan. Untuk itu maka bentuk diferensial didekati dengan nilai perkiraan berdasarkan diferensial beda hingga. | ||
+ | |||
+ | [[File:AkarsecantBhismantyo.png|150px|center]] | ||
+ | |||
+ | Dalam metode ini pendekatan memerlukan dua nilai awal dari x | ||
+ | |||
+ | c. Metode iterasi | ||
+ | |||
+ | Dalam metode iterasi ini digunakan suatu persamaan untuk memperkirakan nilai akar persamaan. Persamaan tersebut dikembangkan dari fungsi f(x) = 0 sehingga parameter x berada disisi kiri dari persamaan, yaitu : | ||
+ | x= g(x) | ||
+ | Persamaan ini menunjukkan bahwa nilai x merupakan fungsi dari x, sehingga dengan memberi nilai perkiraan awal dari akar dapat dihitung perkiraan baru dengan rumus iteratif berikut : | ||
+ | |||
+ | [[File:Akariterasi1Bhisma.png|150px|center]] | ||
+ | |||
+ | Besar kesalahan dihitung dengan rumus berikut : | ||
+ | |||
+ | [[File:Akariterasi2Bhisma.png|200px|center]] | ||
+ | |||
+ | '''Pemahaman Modelica''' | ||
+ | |||
+ | Lampiran : | ||
+ | |||
+ | [[File:FeedbackBhisma.png|800px|center]] | ||
+ | |||
+ | [[File:CheckFeedbackBhisma.png|800px|center]] | ||
+ | |||
+ | [[File:GrafikFeedbackBhisma.png|800px|center]] | ||
+ | |||
+ | '''Link Video : https://youtu.be/nZLv1rvAdu8''' | ||
+ | == Pertemuan 02 == | ||
+ | |||
+ | Pada pertemuan ini, Pak Dai kembali menjelaskan mengenai program OpenModelica. Pada pertemuan ini Pak Dai memberi tugas yaitu menyelesaikan persamaan aljabar dengan metode Gauss Jordan, pada aplikasi OpenModelica ini. | ||
+ | |||
+ | '''1. Membuat Formula''' | ||
+ | |||
+ | Pada tahap ini, saya terlebih dahulu membuat formula yang akan diproses oleh OpenModelica. | ||
+ | |||
+ | [[File:PersamaanBhismaMetnum.png|600px|center]] | ||
+ | |||
+ | [[File:FormulaBhisma.png|800px|center]] | ||
+ | |||
+ | '''2. Check Formula''' | ||
+ | |||
+ | [[File:CheckBhisma.png|800px|center]] | ||
+ | |||
+ | '''3. Hasil Simulation''' | ||
+ | |||
+ | [[File:HasilBhismaOMEdit.png|800px|center]] | ||
+ | |||
+ | didapat hasil '''x = 26, y = -2, z = -8''' | ||
+ | |||
+ | == Pertemuan 03 == | ||
+ | |||
+ | Pada Pertemuan ini, Pak Dai menjelaskan mengenai bagaimana aplikasi metode numerik dalam permasalahan teknik. | ||
+ | |||
+ | '''Step :''' Masalah teknik - Analisis masalah - Model Matematis - Metode Numerik - Komputer - Solusi | ||
+ | |||
+ | [[File:MetnumMasalahteknikBhisma.png|800px|center]] | ||
+ | |||
+ | Pada pertemuan ini, Pak Dai menugaskan kami untuk mencoba menyelesaikan permasalahan pegas 12.11 pada buku "'''Numerical Methods for Engineers 7th Edition'''" | ||
+ | |||
+ | |||
+ | [[File:12.11MetnumBhisma.png|800px|center]] | ||
+ | |||
+ | [[File:12.11MetnumBhisma2.png|800px|center]] | ||
+ | |||
+ | Setelah itu, saya memasukan rumus matrix yang tertera pada buku ke dalam aplikasi OpenModelica | ||
+ | |||
+ | [[File:FormulapegasBhisma.png|800px|center]] | ||
+ | |||
+ | Setelah itu sebelum masuk ke simulasi, saya check formula saya terlebih dahulu | ||
+ | |||
+ | [[File:CheckPegasBhisma.png|800px|center]] | ||
+ | |||
+ | Setelah itu, baru saya simulasi untuk mendapatkan jawaban dari permasalahan tersebut | ||
+ | |||
+ | [[File:GrafikPegasBhisma.png|800px|center]] | ||
+ | |||
+ | '''Didapatkan hasil : x1 = 7.357, x2 = 10.055, x3 = 12.507''' | ||
+ | |||
+ | Setelah itu, Pak Dai menugaskan kami untuk mengerjakan PR yakni : | ||
+ | |||
+ | [[File:Soaltugas3Bhisma.png|800px|center]] | ||
+ | |||
+ | 1. Mengubah problem menjadi node | ||
+ | |||
+ | [[File:NodeBhisma.png|500px|center]] | ||
+ | |||
+ | 2. Menentukan Konstanta | ||
+ | |||
+ | a. Elemen 1,3,4,6 | ||
+ | |||
+ | [[File:1346Bhisma.png|400px|center]] | ||
+ | |||
+ | b. Elemen 2,5 | ||
+ | |||
+ | [[File:25Bhisma.png|400px|center]] | ||
+ | |||
+ | 3. Membuat matriks elemen | ||
+ | |||
+ | a. Analisis Elemen 1,3,6 | ||
+ | |||
+ | [[File:Analisis136Bhisma.png|800px|center]] | ||
+ | |||
+ | b. Analisis Elemen 4 | ||
+ | |||
+ | [[File:Analisis4Bhisma.png|400px|center]] | ||
+ | |||
+ | c. Analisis Elemen 2,5 | ||
+ | |||
+ | [[File:Analisis25Bhisma.png|500px|center]] | ||
+ | |||
+ | 4. Menyusun matriks elemen | ||
+ | |||
+ | [[File:MatriksBhisma.png|600px|center]] | ||
+ | |||
+ | 5. Menerapkan batas | ||
+ | |||
+ | a. node 1 dan 3 Fixed | ||
+ | |||
+ | [[File:13FixedBhisma.png|500px|center]] | ||
+ | |||
+ | b. External Force 4 dan 5 | ||
+ | |||
+ | [[File:45nodeBhisma.png|500px|center]] | ||
+ | |||
+ | Dengan Hukum Hooke, diadapat matriks : | ||
+ | |||
+ | [[File:Matrixfku.png|600px|center]] | ||
+ | |||
+ | 6. Mencari Solusi Menggunakan OpenModelica | ||
+ | |||
+ | [[File:ModelicaTugas3aBhisma.png|800px|center]] | ||
− | == Pertemuan | + | [[File:SimulTugas3aBhisma.png|800px|center]] |
+ | |||
+ | 7. Mendapatkan nilai gaya reaksi | ||
+ | |||
+ | [[File:10x10Bhisma.png|600px|center]] | ||
+ | |||
+ | Lalu dimasukan pada OpenModelica untuk mencari solusinya | ||
+ | |||
+ | [[File:ModelicaTugas3bBhisma.png|800px|center]] | ||
+ | |||
+ | [[File:SimulTugas3bBhisma.png|800px|center]] | ||
+ | |||
+ | 8. Mendapat gaya internal dan stress | ||
+ | |||
+ | [[File:InternaldanstressBhisma.png|600px|center]] | ||
+ | |||
+ | [[File:LokalinternalBhisma.png|400px|center]] | ||
+ | |||
+ | Lalu saya masukan ke program OpenModelica untuk mencari solusinya | ||
+ | |||
+ | [[File:ModelicaTugas3cBhisma.png|800px|center]] | ||
+ | |||
+ | [[File:SimulTugas3cBhisma.png|800px|center]] | ||
+ | |||
+ | Didapatkan U2x = -0.00976 inch dan U6x = -0.01209 inch | ||
+ | |||
+ | Didapatkan internal force pada elemen 5 sebesar 696lb. | ||
+ | |||
+ | Didapatkan normal stress pada elemen 5 sebesar 87lb/in^2 | ||
+ | |||
+ | == Pertemuan 04 == | ||
+ | |||
+ | Pada pertemuan ini, Pak Dai memberi kami quiz sebagai bahan pembelajaran | ||
+ | |||
+ | [[File:SOal4Bhisma.jpeg|400px|center]] | ||
+ | |||
+ | [[File:Soal8Bhisma.jpeg|400px|center]] | ||
+ | |||
+ | Setelah itu, saya mengerjakan flow chart (cara pengerjaan) dari soal ini. | ||
+ | |||
+ | [[File:Quizno4Bhisma.png|800px|center]] | ||
+ | |||
+ | [[File:Quizno8Bhisma.png|800px|center]] | ||
+ | |||
+ | == Pertemuan 05 == | ||
+ | |||
+ | Pada pertemuan ini, kami mempelajari coding dari Ahmad Mohammad Fahmi mengenai penyelesaian soal quiz | ||
+ | |||
+ | Berikut ialah codingannya | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Stiffness Matrix Element Function''' | ||
+ | |||
+ | function StiffnessMatrixElement | ||
+ | input Real [:,6] inisiasi_mat; | ||
+ | output Real [size(inisiasi_mat,1),6,6] Ke_mat; | ||
+ | protected | ||
+ | Real cos_x; | ||
+ | Real cos_y; | ||
+ | Real cos_z; | ||
+ | Real [6] StiffTrig; | ||
+ | Real [6,6] StiffTrans; | ||
+ | Real [size(inisiasi_mat,1)] L; | ||
+ | Real [size(inisiasi_mat,1)] k_vec; | ||
+ | algorithm | ||
+ | L := {(sqrt(inisiasi_mat[i,2]^2 + inisiasi_mat[i,3]^2 + inisiasi_mat[i,4]^2)) for i in 1:size(inisiasi_mat,1)}; | ||
+ | k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / L[i]) for i in 1:size(inisiasi_mat,1)}; | ||
+ | // Finding stiffness matrix of each element member | ||
+ | for i in 1:size(inisiasi_mat,1) loop | ||
+ | // Clearing the matrices | ||
+ | StiffTrig := zeros(6); | ||
+ | StiffTrans := zeros(6,6); | ||
+ | // Converting degrees to radians | ||
+ | cos_x := inisiasi_mat[i,2]/L[i]; | ||
+ | cos_y := inisiasi_mat[i,3]/L[i]; | ||
+ | cos_z := inisiasi_mat[i,4]/L[i]; | ||
+ | // {cos^2, sin^2, sincos} | ||
+ | StiffTrig := {(cos_x)^2, | ||
+ | (cos_y)^2, | ||
+ | (cos_z)^2, | ||
+ | (cos_x*cos_y), | ||
+ | (cos_x*cos_z), | ||
+ | (cos_y*cos_z)}; | ||
+ | // Construct stiffness transformation matrix | ||
+ | StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5]; | ||
+ | StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6]; | ||
+ | StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3]; | ||
+ | -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5]; | ||
+ | -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6]; | ||
+ | -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]]; | ||
+ | // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat | ||
+ | for m in 1:6 loop | ||
+ | for n in 1:6 loop | ||
+ | Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n]; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end StiffnessMatrixElement; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Stiffness Matrix Global Function''' | ||
+ | |||
+ | function StiffnessMatrixGlobal | ||
+ | input Integer x; | ||
+ | input Integer [:,2] n; | ||
+ | input Real [:,6,6] Ke_mat; | ||
+ | output Real [size(Ke_mat,1),3*x,3*x] Kg_mat; | ||
+ | algorithm | ||
+ | Kg_mat := zeros(size(Ke_mat,1),3*x,3*x); | ||
+ | for i in 1:size(Ke_mat,1) loop | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4]; | ||
+ | end for; | ||
+ | end StiffnessMatrixGlobal; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | ''' Sum Stiffness Matrix Element Function''' | ||
+ | |||
+ | function SumStiffnessMatrixGlobal | ||
+ | input Real [:,:,:] Kg_mat; | ||
+ | output Real [size(Kg_mat,2),size(Kg_mat,2)] KgTot_mat; | ||
+ | algorithm | ||
+ | for a in 1:size(Kg_mat,2) loop | ||
+ | for b in 1:size(Kg_mat,2) loop | ||
+ | KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); | ||
+ | end for; | ||
+ | end for; | ||
+ | end SumStiffnessMatrixGlobal; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | ''' Boundary Stiffness Matrix Global Function''' | ||
+ | |||
+ | function BoundaryStiffnessMatrixGlobal | ||
+ | input Real [:,:] KgTot_met; | ||
+ | input Integer[:] Boundary_xyz; | ||
+ | input Integer[:] Boundary_xy; | ||
+ | input Integer[:] Boundary_xz; | ||
+ | input Integer[:] Boundary_yz; | ||
+ | input Integer[:] Boundary_x; | ||
+ | input Integer[:] Boundary_y; | ||
+ | input Integer[:] Boundary_z; | ||
+ | output Real [size(KgTot_met,1),size(KgTot_met,1)] KgB_met; | ||
+ | |||
+ | algorithm | ||
+ | for a in 1:size(KgTot_met,1) loop | ||
+ | for b in 1:size(KgTot_met,1) loop | ||
+ | KgB_met[a,b] := KgTot_met [a,b]; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | if Boundary_xyz[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_xyz,1) loop | ||
+ | for b in 0:2 loop | ||
+ | KgB_met[3*(Boundary_xyz[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_xyz[a]-b,3*Boundary_xyz[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_xy[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_xy,1) loop | ||
+ | for b in 1:2 loop | ||
+ | KgB_met[3*(Boundary_xy[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_xy[a]-b,3*Boundary_xy[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_xz[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_xz,1) loop | ||
+ | for b in 0:2:2 loop | ||
+ | KgB_met[3*(Boundary_xz[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_xz[a]-b,3*Boundary_xz[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_yz[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_yz,1) loop | ||
+ | for b in 0:1 loop | ||
+ | KgB_met[3*(Boundary_yz[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_yz[a]-b,3*Boundary_yz[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_x[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_x,1) loop | ||
+ | KgB_met[3*(Boundary_x[a])-2,i]:=0; | ||
+ | KgB_met[3*Boundary_x[a]-2,3*Boundary_x[a]-2]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_y[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_y,1) loop | ||
+ | KgB_met[3*(Boundary_y[a])-1,i]:=0; | ||
+ | KgB_met[3*Boundary_y[a]-1,3*Boundary_y[a]-1]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_z[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_z,1) loop | ||
+ | KgB_met[3*Boundary_z[a],i]:=0; | ||
+ | KgB_met[3*Boundary_z[a],3*Boundary_z[a]]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | end BoundaryStiffnessMatrixGlobal; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Gauss Jordan Function''' | ||
+ | |||
+ | function GaussJordan | ||
+ | input Real [:,:] KgB_met; | ||
+ | input Real [size(KgB_met,1)] load_met; | ||
+ | output Real [size(KgB_met,1)] U_met; | ||
+ | |||
+ | protected | ||
+ | Real float_error = 10e-10; | ||
+ | |||
+ | algorithm | ||
+ | U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); | ||
+ | |||
+ | for i in 1:size(KgB_met,1) loop | ||
+ | if abs(U_met[i]) <= float_error then | ||
+ | U_met[i] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end GaussJordan; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Reaction Force Function''' | ||
+ | |||
+ | function ReactionForce | ||
+ | input Real [:,:] KgTot_met; | ||
+ | input Real [size(KgTot_met,1)] U_met; | ||
+ | input Real [size(KgTot_met,1)] load_met; | ||
+ | output Real [size(KgTot_met,1)] R_met; | ||
+ | protected Real float_error = 10e-10; | ||
+ | |||
+ | algorithm | ||
+ | R_met := KgTot_met*U_met-load_met; | ||
+ | |||
+ | for t in 1:size(KgTot_met,1) loop | ||
+ | if abs(R_met[t]) <= float_error then | ||
+ | R_met[t] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end ReactionForce; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Check Force Function''' | ||
+ | |||
+ | function CheckForce | ||
+ | input Real [:] load; | ||
+ | input Real [size(load,1)] R; | ||
+ | output Real [3] F; | ||
+ | protected Real float_error = 10e-10; | ||
+ | |||
+ | protected | ||
+ | Real load_x; | ||
+ | Real load_y; | ||
+ | Real load_z; | ||
+ | Real R_x; | ||
+ | Real R_y; | ||
+ | Real R_z; | ||
+ | |||
+ | algorithm | ||
+ | load_x := sum({load[i] for i in 1:3:(size(load,1)-2)}); | ||
+ | load_y := sum({load[i] for i in 2:3:(size(load,1)-1)}); | ||
+ | load_z := sum({load[i] for i in 3:3:size(load,1)}); | ||
+ | R_x := sum({R[i] for i in 1:3:(size(load,1)-2)}); | ||
+ | R_y := sum({R[i] for i in 2:3:(size(load,1)-1)}); | ||
+ | R_z := sum({R[i] for i in 3:3:size(load,1)}); | ||
+ | |||
+ | F[1] := load_x + R_x; | ||
+ | F[2] := load_y + R_y; | ||
+ | F[3] := load_z + R_z; | ||
+ | |||
+ | for i in 1:3 loop | ||
+ | if abs(F[i]) <= float_error then | ||
+ | F[i] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end CheckForce; | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Class''' | ||
+ | |||
+ | class QuizSoal1 | ||
+ | //inisiasi = [ elemen#, dX, dY, dZ, A, E] | ||
+ | parameter Real [:,6] inisiasi = [1, 6, 0, -3, 1.56, 10.6e6; //isi sesuai data | ||
+ | 2, 0, 0, -6, 1.56, 10.6e6; | ||
+ | 3, 0, 6, -3, 1.56, 10.6e6; | ||
+ | 4, -6, 0, -3, 1.56, 10.6e6; | ||
+ | 5, -6, 6, 0, 1.56, 10.6e6; | ||
+ | 6, 0, 6, 3, 1.56, 10.6e6]; | ||
+ | |||
+ | //node = [ i, j] | ||
+ | parameter Integer [size(inisiasi,1),2] node = [1, 2; //isi sesuai data | ||
+ | 1, 3; | ||
+ | 1, 4; | ||
+ | 2, 3; | ||
+ | 2, 4; | ||
+ | 3, 4]; | ||
+ | |||
+ | //jumlah node | ||
+ | parameter Integer n = 4; //isi sesuai data | ||
+ | |||
+ | //titik node boundary xyz | ||
+ | parameter Integer [:] Boundary_xyz = {1}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary xy | ||
+ | parameter Integer [:] Boundary_xy = {4}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary xz | ||
+ | parameter Integer [:] Boundary_xz = {0}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary yz | ||
+ | parameter Integer [:] Boundary_yz = {0}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary x | ||
+ | parameter Integer [:] Boundary_x = {3}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary y | ||
+ | parameter Integer [:] Boundary_y = {0}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary z | ||
+ | parameter Integer [:] Boundary_z = {0}; //isi sesuai data | ||
+ | |||
+ | //load = [ F1x, F1y, F1z,..., Fnx, Fny, Fnz] | ||
+ | parameter Real [3*n] load = {0, 0, 0, //isi sesuai data | ||
+ | 0, -200, 0, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0}; | ||
+ | |||
+ | Real [size(inisiasi,1)] L; | ||
+ | Real [size(inisiasi,1)] k; | ||
+ | Real [size(inisiasi,1),6,6] Ke; | ||
+ | Real [size(inisiasi,1),3*n,3*n] Kg; | ||
+ | Real [3*n,3*n] KgTot; | ||
+ | Real [3*n,3*n] KgB; | ||
+ | Real [3*n] U; | ||
+ | Real [3*n] R; | ||
+ | |||
+ | //check force | ||
+ | Real [3] F; | ||
+ | |||
+ | equation | ||
+ | L = {(sqrt(inisiasi[i,2]^2 + inisiasi[i,3]^2 + inisiasi[i,4]^2)) for i in 1:size(inisiasi,1)}; | ||
+ | |||
+ | k = {(inisiasi[i,5] * inisiasi[i,6] / L[i]) for i in 1:size(inisiasi,1)}; | ||
+ | |||
+ | Ke = StiffnessMatrixElement(inisiasi); | ||
+ | |||
+ | Kg = StiffnessMatrixGlobal(n, node, Ke); | ||
+ | |||
+ | KgTot = SumStiffnessMatrixGlobal(Kg); | ||
+ | |||
+ | KgB = BoundaryStiffnessMatrixGlobal(KgTot, Boundary_xyz, Boundary_xy, Boundary_xz, Boundary_yz, Boundary_x, Boundary_y, Boundary_z); | ||
+ | |||
+ | U = GaussJordan(KgB, load); | ||
+ | |||
+ | R = ReactionForce(KgTot, U, load); | ||
+ | |||
+ | F = CheckForce(load,R); | ||
+ | |||
+ | end QuizSoal1; | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
+ | == Pertemuan 06 == | ||
+ | |||
+ | Pada pertemuan ini, Pak Dai mengarahkan kami untuk muhasabah diri mengenai materi Metode Numerik yang telah dipelajari | ||
+ | |||
+ | Menurut saya, Metode Numerik merupakan sebuah metode untuk menyelesaikan berbagai macam masalah keteknikan yang ada. Dalam Materi ini pun, kami diajarkan juga mengenai software OpenModelica, yang dapat membantu menyelesaikan masalah keteknikan yang saya hadapi. | ||
+ | |||
+ | == Pertemuan 07 == | ||
+ | |||
+ | Pada pertemuan ini, Pak Dai mengarahkan kami untuk membuat Tugas Besar Metode Numerik. Berikut rincian tugas besar saya : | ||
+ | |||
+ | == Tugas Besar Metode Numerik == | ||
+ | |||
+ | '''Soal TUBES''' | ||
+ | |||
+ | [[File:TubesBhisma.jpeg|600px|centre]] | ||
+ | [[File:RincianTubesBhisma.jpeg|600px|centre]] | ||
+ | |||
+ | '''Metode Pengerjaan''' | ||
+ | |||
+ | 1. Membuat Asumsi | ||
+ | |||
+ | 2. Mencari nilai spesifikasi batang | ||
+ | |||
+ | [[File:OpenModelicaTubes1Bhisma.png|800px|centre]] | ||
+ | [[File:OpenModelicaTubes2Bhisma.png|800px|centre]] | ||
+ | [[File:DataBatangBhisma.PNG|800px|centre]] | ||
+ | |||
+ | == UAS METNUM == | ||
+ | |||
+ | 1. Buatlah urutan langkah-langkah (prosedur) pemodelan numerik untuk optimasi struktur tersebut | ||
+ | |||
+ | [[File:SoalUASMETNUMBhisma.jpeg|800px|centre]] | ||
+ | |||
+ | '''Jawaban''' | ||
+ | |||
+ | [[File:UASno1BhismaMetnum.jpg|800px|centre]] | ||
+ | |||
+ | 2. Jelaskan tujuan pemodelan numerik soal no 1 diatas, hukum/dalil (fisika) yang dipakai dan asumsi-asumsi yang akan digunakan dalam perhitungan | ||
+ | |||
+ | '''Jawaban''' | ||
+ | |||
+ | [[File:UASno2BhismaMetnum.jpg|800px|centre]] | ||
+ | |||
+ | 3. Untuk pemodelan numerik analisis strukturnya nya gunakan pendekatan 1D truss dgn membagi kolum (tiang) water tower kedalam 3 elemen (1D). a). Susunlah persamaan aljabar kesetimbangan statik setiap elemen tsb. (matriks kesetimbangan lokal) b) Matriks kesetimbangan global | ||
+ | |||
+ | '''Jawaban''' | ||
+ | |||
+ | [[File:UASno3BhismaMetnum.jpg|800px|centre]] | ||
+ | |||
+ | 4. Susun urutan langkah-langkah (pseudocode) perhitungan matriks kesetimbangan global soal no 3 termasuk pengecekan kesalahan (verifikasi) perhitungannya | ||
+ | |||
+ | 5. Tulis dan jelaskan fungsi objektif dan constraint untuk optimasi struktur water tower tersebut | ||
+ | |||
+ | 6. Tuliskan asumsi nilai-nilai parameter dan variable untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 elemnt 1 D diatas | ||
+ | |||
+ | '''Jawaban''' | ||
+ | |||
+ | [[File:UASno456BhismaMetnum.jpg|800px|centre]] | ||
+ | |||
+ | 7. Gunakan program modelica anda untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 element 1 D berdasarkan asumsi no 6 | ||
+ | |||
+ | '''Jawaban''' | ||
+ | |||
+ | Coding : | ||
+ | |||
+ | model UASMetnum | ||
+ | |||
+ | parameter Real P[3]={10000,0,10000}; | ||
+ | |||
+ | |||
+ | parameter Real a=4e-4; | ||
+ | parameter Real e=200e+9; | ||
+ | parameter Real l=2; | ||
+ | |||
+ | /*parameter yang akan dicari*/ | ||
+ | Real k; | ||
+ | Real kg[3,3]; | ||
+ | Real u[3]; | ||
+ | Real stress[3]; | ||
+ | |||
+ | |||
+ | algorithm | ||
+ | k := a*e/1; | ||
+ | |||
+ | kg := [k, 2*k, 0; | ||
+ | -k, 2*k, -k; | ||
+ | 0, -k, 2*k]; | ||
+ | |||
+ | u := Modelica.Math.Matrices.solve(kg,P); | ||
+ | |||
+ | stress[1] := u[1]*k/a; | ||
+ | stress[2] := u[2]*k/a; | ||
+ | stress[3] := u[3]*k/a; | ||
+ | |||
+ | end UASMetnum; | ||
+ | |||
+ | Hasil Simulasi : | ||
+ | |||
+ | [[File:UASno7BhismaMetnum.png|800px|centre]] |
Latest revision as of 18:34, 14 January 2021
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيْمِ
السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُ
Biodata Diri
Nama : Bhismantyo Tsaqif Daniswara
NPM : 1806181754
Program Studi : S1 Pararel Teknik Mesin
Contents
Pertemuan 01
Pada pertemuan pertama ini, Pak Dai menjelaskan dan mengarahkan mengenai pelajaran Metode Numerik sebelum UTS. Pada page ini, saya akan menjelaskan apa yang sudah saya pelajari mengenai Metode Numerik.
Metode untuk mencari akar-akar persamaan
1. Metode Tertutup
a. Metode Biseksi
Metode Biseksi memiliki beberapa langkah-langkah penyelesaian sebagai berikut :
1.Hitung fungsi pada interval yang sama dari x sampai pada perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu :f(xn) . f(xn+1) < 0 2.Estimasi pertama dari akar xt dihitung dengan
3.Buat evaluasi berikut untuk menentukan di dalam sub interval mana akar persamaan berada : a.f(xn).f(xt) < 0, akar persamaan berada pada sub interval pertama, kemudian tetapkan xn+1 = xt dan lanjutkan pada langkah ke-4 b.f(xn).f(xt) > 0, akar persamaan berada pada sub interval kedua, kemudian tetapkan xn = xt dan lanjutkan pada langkah ke-4 c.f(xn).f(xt) = 0, akar persamaan adalah xt dan hitungan selesai 4.Hitung perkiraan baru dari akar dengan
5.Apabila perkiraan baru sudah cukup kecil (sesuai dengan batasan yang ditentukan), maka hitungan selesai, dan xt adalah akar persamaan yang dicari. Jika belum, maka hitungan kembali ke langkah ke-3
b. Metode Regulasi Falsi
Metode Regula Falsi didasarkan pada interpolasi antara dua nilai dari fungsi yang mempunyai tanda berlawanan. Metode regulasi falsi memiliki langkah-langkah sebagai berikut :
1.Hitung fungsi pada interval yang sama dari x sampai pada perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu f(xn) . f(xn+1) < 0 2.Mencari nilai x* dengan persamaan :
3.Nilai tersebut digunakan untuk menghitung nilai f(x*), yang kemudian digunakan lagi untuk interpolasi linier dengan nilai f(xn) atau f(xn+1) sedemikian sehingga kedua fungsi mempunyai tanda berbeda. 4.Prosedur diulang lagi sampai didapat nilai f(x*) mendekati nol
2. Metode Terbuka
a. Metode Newton Raphson
Metode Newton Raphson memiliki langkah-langkah sebagai perikut:
1.Pilih nilai awal xi sembarang 2.Hitung xi+1 dan f (xi+1) dengan rumus :
3.Demikian seterusnya sampai didapatkan f (xi+1) yang kecil
b. Metode Secant
Kekurangan Metode Newton Raphson adalah diperlukannya turunan pertama (differensial) dari f(x) dalam hitungan. Kadang-kadang sulit untuk mendiferensialkan persamaan yang diselesaikan. Untuk itu maka bentuk diferensial didekati dengan nilai perkiraan berdasarkan diferensial beda hingga.
Dalam metode ini pendekatan memerlukan dua nilai awal dari x
c. Metode iterasi
Dalam metode iterasi ini digunakan suatu persamaan untuk memperkirakan nilai akar persamaan. Persamaan tersebut dikembangkan dari fungsi f(x) = 0 sehingga parameter x berada disisi kiri dari persamaan, yaitu :
x= g(x)
Persamaan ini menunjukkan bahwa nilai x merupakan fungsi dari x, sehingga dengan memberi nilai perkiraan awal dari akar dapat dihitung perkiraan baru dengan rumus iteratif berikut :
Besar kesalahan dihitung dengan rumus berikut :
Pemahaman Modelica
Lampiran :
Link Video : https://youtu.be/nZLv1rvAdu8
Pertemuan 02
Pada pertemuan ini, Pak Dai kembali menjelaskan mengenai program OpenModelica. Pada pertemuan ini Pak Dai memberi tugas yaitu menyelesaikan persamaan aljabar dengan metode Gauss Jordan, pada aplikasi OpenModelica ini.
1. Membuat Formula
Pada tahap ini, saya terlebih dahulu membuat formula yang akan diproses oleh OpenModelica.
2. Check Formula
3. Hasil Simulation
didapat hasil x = 26, y = -2, z = -8
Pertemuan 03
Pada Pertemuan ini, Pak Dai menjelaskan mengenai bagaimana aplikasi metode numerik dalam permasalahan teknik.
Step : Masalah teknik - Analisis masalah - Model Matematis - Metode Numerik - Komputer - Solusi
Pada pertemuan ini, Pak Dai menugaskan kami untuk mencoba menyelesaikan permasalahan pegas 12.11 pada buku "Numerical Methods for Engineers 7th Edition"
Setelah itu, saya memasukan rumus matrix yang tertera pada buku ke dalam aplikasi OpenModelica
Setelah itu sebelum masuk ke simulasi, saya check formula saya terlebih dahulu
Setelah itu, baru saya simulasi untuk mendapatkan jawaban dari permasalahan tersebut
Didapatkan hasil : x1 = 7.357, x2 = 10.055, x3 = 12.507
Setelah itu, Pak Dai menugaskan kami untuk mengerjakan PR yakni :
1. Mengubah problem menjadi node
2. Menentukan Konstanta
a. Elemen 1,3,4,6
b. Elemen 2,5
3. Membuat matriks elemen
a. Analisis Elemen 1,3,6
b. Analisis Elemen 4
c. Analisis Elemen 2,5
4. Menyusun matriks elemen
5. Menerapkan batas
a. node 1 dan 3 Fixed
b. External Force 4 dan 5
Dengan Hukum Hooke, diadapat matriks :
6. Mencari Solusi Menggunakan OpenModelica
7. Mendapatkan nilai gaya reaksi
Lalu dimasukan pada OpenModelica untuk mencari solusinya
8. Mendapat gaya internal dan stress
Lalu saya masukan ke program OpenModelica untuk mencari solusinya
Didapatkan U2x = -0.00976 inch dan U6x = -0.01209 inch
Didapatkan internal force pada elemen 5 sebesar 696lb.
Didapatkan normal stress pada elemen 5 sebesar 87lb/in^2
Pertemuan 04
Pada pertemuan ini, Pak Dai memberi kami quiz sebagai bahan pembelajaran
Setelah itu, saya mengerjakan flow chart (cara pengerjaan) dari soal ini.
Pertemuan 05
Pada pertemuan ini, kami mempelajari coding dari Ahmad Mohammad Fahmi mengenai penyelesaian soal quiz
Berikut ialah codingannya
Stiffness Matrix Element Function function StiffnessMatrixElement input Real [:,6] inisiasi_mat; output Real [size(inisiasi_mat,1),6,6] Ke_mat; protected Real cos_x; Real cos_y; Real cos_z; Real [6] StiffTrig; Real [6,6] StiffTrans; Real [size(inisiasi_mat,1)] L; Real [size(inisiasi_mat,1)] k_vec; algorithm L := {(sqrt(inisiasi_mat[i,2]^2 + inisiasi_mat[i,3]^2 + inisiasi_mat[i,4]^2)) for i in 1:size(inisiasi_mat,1)}; k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / L[i]) for i in 1:size(inisiasi_mat,1)}; // Finding stiffness matrix of each element member for i in 1:size(inisiasi_mat,1) loop // Clearing the matrices StiffTrig := zeros(6); StiffTrans := zeros(6,6); // Converting degrees to radians cos_x := inisiasi_mat[i,2]/L[i]; cos_y := inisiasi_mat[i,3]/L[i]; cos_z := inisiasi_mat[i,4]/L[i]; // {cos^2, sin^2, sincos} StiffTrig := {(cos_x)^2, (cos_y)^2, (cos_z)^2, (cos_x*cos_y), (cos_x*cos_z), (cos_y*cos_z)}; // Construct stiffness transformation matrix StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5]; StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6]; StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3]; -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5]; -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6]; -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]]; // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat for m in 1:6 loop for n in 1:6 loop Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n]; end for; end for; end for; end StiffnessMatrixElement; |
Stiffness Matrix Global Function function StiffnessMatrixGlobal input Integer x; input Integer [:,2] n; input Real [:,6,6] Ke_mat; output Real [size(Ke_mat,1),3*x,3*x] Kg_mat; algorithm Kg_mat := zeros(size(Ke_mat,1),3*x,3*x); for i in 1:size(Ke_mat,1) loop Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3]; Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2]; Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1]; Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6]; Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5]; Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4]; Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3]; Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2]; Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1]; Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6]; Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5]; Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4]; end for; end StiffnessMatrixGlobal; |
Sum Stiffness Matrix Element Function function SumStiffnessMatrixGlobal input Real [:,:,:] Kg_mat; output Real [size(Kg_mat,2),size(Kg_mat,2)] KgTot_mat; algorithm for a in 1:size(Kg_mat,2) loop for b in 1:size(Kg_mat,2) loop KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); end for; end for; end SumStiffnessMatrixGlobal; |
Boundary Stiffness Matrix Global Function function BoundaryStiffnessMatrixGlobal input Real [:,:] KgTot_met; input Integer[:] Boundary_xyz; input Integer[:] Boundary_xy; input Integer[:] Boundary_xz; input Integer[:] Boundary_yz; input Integer[:] Boundary_x; input Integer[:] Boundary_y; input Integer[:] Boundary_z; output Real [size(KgTot_met,1),size(KgTot_met,1)] KgB_met; algorithm for a in 1:size(KgTot_met,1) loop for b in 1:size(KgTot_met,1) loop KgB_met[a,b] := KgTot_met [a,b]; end for; end for; if Boundary_xyz[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_xyz,1) loop for b in 0:2 loop KgB_met[3*(Boundary_xyz[a])-b,i]:=0; KgB_met[3*Boundary_xyz[a]-b,3*Boundary_xyz[a]-b]:=1; end for; end for; end for; end if; if Boundary_xy[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_xy,1) loop for b in 1:2 loop KgB_met[3*(Boundary_xy[a])-b,i]:=0; KgB_met[3*Boundary_xy[a]-b,3*Boundary_xy[a]-b]:=1; end for; end for; end for; end if; if Boundary_xz[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_xz,1) loop for b in 0:2:2 loop KgB_met[3*(Boundary_xz[a])-b,i]:=0; KgB_met[3*Boundary_xz[a]-b,3*Boundary_xz[a]-b]:=1; end for; end for; end for; end if; if Boundary_yz[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_yz,1) loop for b in 0:1 loop KgB_met[3*(Boundary_yz[a])-b,i]:=0; KgB_met[3*Boundary_yz[a]-b,3*Boundary_yz[a]-b]:=1; end for; end for; end for; end if; if Boundary_x[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_x,1) loop KgB_met[3*(Boundary_x[a])-2,i]:=0; KgB_met[3*Boundary_x[a]-2,3*Boundary_x[a]-2]:=1; end for; end for; end if; if Boundary_y[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_y,1) loop KgB_met[3*(Boundary_y[a])-1,i]:=0; KgB_met[3*Boundary_y[a]-1,3*Boundary_y[a]-1]:=1; end for; end for; end if; if Boundary_z[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_z,1) loop KgB_met[3*Boundary_z[a],i]:=0; KgB_met[3*Boundary_z[a],3*Boundary_z[a]]:=1; end for; end for; end if; end BoundaryStiffnessMatrixGlobal; |
Gauss Jordan Function function GaussJordan input Real [:,:] KgB_met; input Real [size(KgB_met,1)] load_met; output Real [size(KgB_met,1)] U_met; protected Real float_error = 10e-10; algorithm U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); for i in 1:size(KgB_met,1) loop if abs(U_met[i]) <= float_error then U_met[i] := 0; end if; end for; end GaussJordan; |
Reaction Force Function function ReactionForce input Real [:,:] KgTot_met; input Real [size(KgTot_met,1)] U_met; input Real [size(KgTot_met,1)] load_met; output Real [size(KgTot_met,1)] R_met; protected Real float_error = 10e-10; algorithm R_met := KgTot_met*U_met-load_met; for t in 1:size(KgTot_met,1) loop if abs(R_met[t]) <= float_error then R_met[t] := 0; end if; end for; end ReactionForce; |
Check Force Function function CheckForce input Real [:] load; input Real [size(load,1)] R; output Real [3] F; protected Real float_error = 10e-10; protected Real load_x; Real load_y; Real load_z; Real R_x; Real R_y; Real R_z; algorithm load_x := sum({load[i] for i in 1:3:(size(load,1)-2)}); load_y := sum({load[i] for i in 2:3:(size(load,1)-1)}); load_z := sum({load[i] for i in 3:3:size(load,1)}); R_x := sum({R[i] for i in 1:3:(size(load,1)-2)}); R_y := sum({R[i] for i in 2:3:(size(load,1)-1)}); R_z := sum({R[i] for i in 3:3:size(load,1)}); F[1] := load_x + R_x; F[2] := load_y + R_y; F[3] := load_z + R_z; for i in 1:3 loop if abs(F[i]) <= float_error then F[i] := 0; end if; end for; end CheckForce; |
Class class QuizSoal1 //inisiasi = [ elemen#, dX, dY, dZ, A, E] parameter Real [:,6] inisiasi = [1, 6, 0, -3, 1.56, 10.6e6; //isi sesuai data 2, 0, 0, -6, 1.56, 10.6e6; 3, 0, 6, -3, 1.56, 10.6e6; 4, -6, 0, -3, 1.56, 10.6e6; 5, -6, 6, 0, 1.56, 10.6e6; 6, 0, 6, 3, 1.56, 10.6e6]; //node = [ i, j] parameter Integer [size(inisiasi,1),2] node = [1, 2; //isi sesuai data 1, 3; 1, 4; 2, 3; 2, 4; 3, 4]; //jumlah node parameter Integer n = 4; //isi sesuai data //titik node boundary xyz parameter Integer [:] Boundary_xyz = {1}; //isi sesuai data //titik node boundary xy parameter Integer [:] Boundary_xy = {4}; //isi sesuai data //titik node boundary xz parameter Integer [:] Boundary_xz = {0}; //isi sesuai data //titik node boundary yz parameter Integer [:] Boundary_yz = {0}; //isi sesuai data //titik node boundary x parameter Integer [:] Boundary_x = {3}; //isi sesuai data //titik node boundary y parameter Integer [:] Boundary_y = {0}; //isi sesuai data //titik node boundary z parameter Integer [:] Boundary_z = {0}; //isi sesuai data //load = [ F1x, F1y, F1z,..., Fnx, Fny, Fnz] parameter Real [3*n] load = {0, 0, 0, //isi sesuai data 0, -200, 0, 0, 0, 0, 0, 0, 0}; Real [size(inisiasi,1)] L; Real [size(inisiasi,1)] k; Real [size(inisiasi,1),6,6] Ke; Real [size(inisiasi,1),3*n,3*n] Kg; Real [3*n,3*n] KgTot; Real [3*n,3*n] KgB; Real [3*n] U; Real [3*n] R; //check force Real [3] F; equation L = {(sqrt(inisiasi[i,2]^2 + inisiasi[i,3]^2 + inisiasi[i,4]^2)) for i in 1:size(inisiasi,1)}; k = {(inisiasi[i,5] * inisiasi[i,6] / L[i]) for i in 1:size(inisiasi,1)}; Ke = StiffnessMatrixElement(inisiasi); Kg = StiffnessMatrixGlobal(n, node, Ke); KgTot = SumStiffnessMatrixGlobal(Kg); KgB = BoundaryStiffnessMatrixGlobal(KgTot, Boundary_xyz, Boundary_xy, Boundary_xz, Boundary_yz, Boundary_x, Boundary_y, Boundary_z); U = GaussJordan(KgB, load); R = ReactionForce(KgTot, U, load); F = CheckForce(load,R); end QuizSoal1; |
Pertemuan 06
Pada pertemuan ini, Pak Dai mengarahkan kami untuk muhasabah diri mengenai materi Metode Numerik yang telah dipelajari
Menurut saya, Metode Numerik merupakan sebuah metode untuk menyelesaikan berbagai macam masalah keteknikan yang ada. Dalam Materi ini pun, kami diajarkan juga mengenai software OpenModelica, yang dapat membantu menyelesaikan masalah keteknikan yang saya hadapi.
Pertemuan 07
Pada pertemuan ini, Pak Dai mengarahkan kami untuk membuat Tugas Besar Metode Numerik. Berikut rincian tugas besar saya :
Tugas Besar Metode Numerik
Soal TUBES
Metode Pengerjaan
1. Membuat Asumsi
2. Mencari nilai spesifikasi batang
UAS METNUM
1. Buatlah urutan langkah-langkah (prosedur) pemodelan numerik untuk optimasi struktur tersebut
Jawaban
2. Jelaskan tujuan pemodelan numerik soal no 1 diatas, hukum/dalil (fisika) yang dipakai dan asumsi-asumsi yang akan digunakan dalam perhitungan
Jawaban
3. Untuk pemodelan numerik analisis strukturnya nya gunakan pendekatan 1D truss dgn membagi kolum (tiang) water tower kedalam 3 elemen (1D). a). Susunlah persamaan aljabar kesetimbangan statik setiap elemen tsb. (matriks kesetimbangan lokal) b) Matriks kesetimbangan global
Jawaban
4. Susun urutan langkah-langkah (pseudocode) perhitungan matriks kesetimbangan global soal no 3 termasuk pengecekan kesalahan (verifikasi) perhitungannya
5. Tulis dan jelaskan fungsi objektif dan constraint untuk optimasi struktur water tower tersebut
6. Tuliskan asumsi nilai-nilai parameter dan variable untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 elemnt 1 D diatas
Jawaban
7. Gunakan program modelica anda untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 element 1 D berdasarkan asumsi no 6
Jawaban
Coding :
model UASMetnum parameter Real P[3]={10000,0,10000}; parameter Real a=4e-4; parameter Real e=200e+9; parameter Real l=2;
/*parameter yang akan dicari*/ Real k; Real kg[3,3]; Real u[3]; Real stress[3]; algorithm k := a*e/1;
kg := [k, 2*k, 0; -k, 2*k, -k; 0, -k, 2*k];
u := Modelica.Math.Matrices.solve(kg,P);
stress[1] := u[1]*k/a; stress[2] := u[2]*k/a; stress[3] := u[3]*k/a;
end UASMetnum;
Hasil Simulasi :