Difference between revisions of "Metnum03-Addarda Irsyad Usman"
(→Bio Data) |
(→UAS) |
||
(33 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُ | السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُ | ||
− | + | == '''Bio Data''' == | |
− | == Bio Data == | ||
Kelas Metode Numerik - 03 | Kelas Metode Numerik - 03 | ||
Line 14: | Line 13: | ||
Program Studi : S1 Teknik Mesin Parallel | Program Studi : S1 Teknik Mesin Parallel | ||
− | ---- | + | __TOC__ |
+ | |||
+ | = '''Kelas Metode Numerik''' = | ||
+ | = Pertemuan 1 (Senin, 9 November 2020) = | ||
+ | |||
+ | Assalamualaikum Wr. Wb. | ||
+ | |||
+ | Pada pertemuan pertama kali ini dapat dianggap sebagai pengenalan dari Pak Dai tentang bagaimana metode pembelajaran kelas Metode Numerik - 03 bersama Pak Dai. Banyak diskusi yang terjadi pada pertemuan ini, sebagaimana Pak Dai mengarahkan kami untuk melakukan diskusi 2 arah ini. Pembahasan menarik mengenai fenomena numerik yang berada di kehidupan dasar manusia ketika menemukan bilangan-bilangan yang berupa konsep seperti "tak terhingga" atau "infiniti" dan bagaimana pandangan kita sebagai seorang engineer. | ||
+ | |||
+ | Kemudian Pak Dai menjelaskan bahwa pemberian materi akan berupa pengaplikasian dari metode numerik yang akan menggunakan ''software'' Open Modelica. ''Software'' ini merupakan program yang dapat menyimulasikan suatu sistem dengen data input kode sumber atau biner untuk melakukan suatu penelitian terhadap sistem tersebut. Setiap mahasiswa diharapkan memiliki software tersebut sebagai penunjang pembelajaran setengah semester kedepan. | ||
+ | |||
+ | = Pertemuan 2 (Senin, 16 November 2020) = | ||
+ | |||
+ | Pada pertemuan kedua ini, kami mempelajari cara membuat program sederhana pada modelica untuk menghitung jumlah dan rata-rata angka. Diakhir kelas kami ditugaskan untuk membuat suatu program untuk menyelesaikan persamaan aljabar simultan, berikut merupakan program yang saya buat: | ||
+ | |||
+ | [[File:1606066293376.jpg|800px|center]] | ||
+ | |||
+ | Saya menggunakan matriks berukuran 3 x 3 dengan metode gauss elimination dan function solve yang disediakan oleh software modelica sehingga mendapatkan hasil [6, -1, -2] | ||
+ | |||
+ | [[File:1606066332613.jpg|800px|center]] | ||
+ | |||
+ | = Pertemuan 3 (Senin, 23 November 2020) Tugas Studi Kasus Gambar 12.11 = | ||
+ | |||
+ | Pada pertemuan ketiga ini, kami diminta untuk membuktikan suatu studi berdasarkan gambar 12.11, serta juga dengan matriks yang tertera pada buku panduan ''Numerical Methods for Engineers 7th Edition'' superti berikut merupakan gambar 12.11: | ||
+ | |||
+ | [[File:1606116260098.jpg|500px|center-left]][[File:1606116277553.jpg|400px|center-right]] | ||
+ | |||
+ | Berikut merupakan program yang saya buat pada program Open Modelica menggunakan metode Gauss Elimination sebagai pembuktian terhadap persamaan yang bereda di buku panduan. Dapat disimpukan bahwa persamaa berdasarkan buku panduan terbuktinya persamaan tersebut dengan mengacu pada nilai a pada Open Modelica berikut. Maka Open Modelica berikut terbukti dapat menyelesaikan persamaan yang sama seperti di buku panduan dengan hasil yang sama pula. | ||
+ | |||
+ | [[File:1606115696079.jpg|800px|center]] | ||
+ | |||
+ | Hasil yang didapatkan dari simulasi di atas adalah sebagai berikut | ||
+ | |||
+ | '''a1 = 7.3575''' | ||
+ | |||
+ | '''a2 = 10.0552''' | ||
+ | |||
+ | '''a3 = 12.5077''' | ||
+ | |||
+ | [[File:1606115754773.jpg|800px|center]] | ||
+ | |||
+ | = Pertemuan 3 (Senin, 23 November 2020) PR = | ||
+ | |||
+ | Pada pertemuan ini Pak Dai juga memberikan PR kepada kami untuk menyelesaikan soal berikut: | ||
+ | |||
+ | [[File:Soal Metnum P3.png|500px|center]] | ||
+ | |||
+ | Pada tugas ini diberikan juga penjelasan mengenai bagaimana persamaan akhir menggunakan Hukum Hooke, dimana matriks adalah sebagai berikut: | ||
+ | |||
+ | [[File:Hukum Hooke .png|250px|cente]] | ||
+ | |||
+ | Pada penyelesaiannya dapat menggunakan OpenModelica sebagai berikut | ||
+ | |||
+ | [[File:Hasil OpenModelica - Coding.png|500px|center]] | ||
+ | |||
+ | Dan juga saya berikan plotting menggunakan Open Modelica | ||
+ | |||
+ | [[File:Hasil OpenModelica - Plotting.png|500px|center]] | ||
+ | |||
+ | Soal mempertanyakan mengenai nilai gaya reaksi terhadap gambar, maka diperlukan perhitungan untuk mendapatkan nilai gaya reaksi. | ||
+ | |||
+ | [[File:Gaya Reaksi.png|300px|center]] | ||
+ | |||
+ | Menggunakan OpenModelica dapat menyelesaikan persamaan tersebut, menggunakan program sebagai berikut | ||
+ | |||
+ | [[File:Gaya Reaksi - Coding.png|500px|center]] | ||
+ | |||
+ | Serta dengan hasil plottingnya | ||
+ | |||
+ | [[File:Gaya Reaksi - Plotting.png|500px|center]] | ||
+ | |||
+ | Relain itu tugas ini juga membutuhkan perhitungan normal stress dan gaya internal pada gambar. Pada perhitungan normal stress diperlukan transformasi dari hasil defleksi ditinjau dari koordinat global menjadi transformasi lokal, dimana menggunakan persamaan berikut | ||
+ | |||
+ | [[File:Normal Stress.png|250px|center]] | ||
+ | |||
+ | Pada análisis stress Elemen 5, maka node yang dianalisis adalah node 2 dan 5. Sehingga persamaan matriks defleksi pada koordinat lokal menjadi | ||
+ | |||
+ | [[File:Matriks defleksi.png|500px|center]] | ||
+ | |||
+ | Menggunakan OpenModelica dengan program sebagai berikut untuk dapat menyelesaikan permasalahan | ||
+ | |||
+ | [[File:Matriks defleksi - coding.png|500px|center]] | ||
+ | |||
+ | Didapatkan juga hasil plotting | ||
+ | |||
+ | [[File:Matriks defleksi - plotting.png|500px|center]] | ||
+ | |||
+ | Maka didapatkan | ||
+ | |||
+ | '''U2x = -0.00976 inch''' | ||
+ | |||
+ | '''U6x= -0.01209 inch''' | ||
+ | |||
+ | Dan untuk internal force didapatkan melalui persamaan | ||
+ | |||
+ | [[File:Internal-force-equation.png|300px|center]] | ||
+ | |||
+ | didapatkan nilai '''internal force''' elemen 5 sebesar '''696 lb''' | ||
+ | |||
+ | = Pertemuan Ke4 (30 November 2020) = | ||
+ | |||
+ | Berikut merupakan hasil jawaban Soal No 4 dan No 8 saya | ||
+ | |||
+ | [[File:Tugas Halaman 1 Addar.jpg|600px|center]] [[File:Tugas Halaman 2 Addar.jpg|600px|center]] [[File:Tugas Halaman 3 Addar.jpg|600px|center]] | ||
+ | |||
+ | = Jawaban Soal Quiz = | ||
+ | |||
+ | Berikut merupakan penyelesaian dari flowchart Nomor 4 | ||
+ | |||
+ | ''' 1. Mendefinisikan Node & Elemen ''' | ||
+ | |||
+ | Kita perlu mendefinisikan setiap elemen dan node nya untuk mendapatkan derajat yang digunakan pada elemen dan node tersebut | ||
+ | |||
+ | [[File:Node & Elemen - Addar.jpg|300px|centered]] | ||
+ | |||
+ | ''' 2. Membuat Model Matematika ''' | ||
+ | |||
+ | Dikarenakan kita mencari defleksi dari gambar yang tersedia, maka akan digunakan persamaan persamaan berikut | ||
+ | |||
+ | a. Hukum Hooke | ||
+ | |||
+ | [[File:Hukum Hooke - Addar.jpg|200px|center]] | ||
+ | |||
+ | b. Internal Force | ||
+ | |||
+ | [[File:Internal Force - Addar.jpg|200px|center]] | ||
+ | |||
+ | c. Normal Stress | ||
+ | |||
+ | [[File:Normal Stress - Addar.jpg|200px|center]] | ||
+ | |||
+ | Selain itu kita juga perlu untuk menentukan nilai kekakuan dari setiap elemen | ||
+ | |||
+ | [[File:Nilai Kekakuan - Addar.jpg|300px|center]] | ||
+ | |||
+ | ''' 3. Membuat Model Numerik ''' | ||
+ | |||
+ | Setelah mendefinisikan elemen dan node, sert menentukan model matematika yang akan kita gunakan, kita dapat membuat model numerik dari gambar. Untuk menentukan matriks kekakuan elemen dapat menggunakan Persamaan matriks berikut. | ||
+ | |||
+ | [[File:Persamaan Matriks Kekakuan - Addar.jpg|300px|center]] | ||
+ | |||
+ | a. Analisis Elemen | ||
+ | |||
+ | Karena elemen 1,2 sejajar dengan sumbu X global maka nilai θ = 0, dan didapatkan hasil analisis elemen 1,2 | ||
+ | |||
+ | Elemen 1 dan posisi Elemen 1 di matriks global | ||
+ | |||
+ | [[File:Analisis Elemen 1 - Addar.jpg|200px|center]] | ||
+ | [[File:Posisi Elemen 1 - Addar.jpg|200px|center]] | ||
+ | |||
+ | Elemen 2 dan posisi Elemen 2 di matriks global | ||
+ | |||
+ | [[File:Analisis Elemen 2 - Addar.jpg|200px|center]] | ||
+ | [[File:Posisi Elemen 2 - Addar.jpg|200px|center]] | ||
+ | |||
+ | Dikarenakan elemen 3 sejajar dengan sumbu Y global maka nilai θ = 90, dan didapatkan hasil analisis elemen 3 | ||
+ | |||
+ | Elemen 3 dan posisi Elemen 3 di matriks global | ||
+ | |||
+ | [[File:Analisis Elemen 3 - Addar.jpg|200px|center]] | ||
+ | [[File:Posisi Elemen 3 - Addar.jpg|200px|center]] | ||
+ | |||
+ | Untuk analisis Elemen 4,5 dapat dihitung terlebih dahulu derajatnya dari data yang telah disediakan gambar, maka didapatkan θ4 = 51,34 dan θ5 = 128,66. Maka dapat didapatkan hasil analisis elemen 4,5 | ||
+ | |||
+ | Elemen 4 dan posisi Elemen 4 di matriks global | ||
+ | |||
+ | [[File:Analisis Elemen 4 - Addar.jpg|200px|center]] | ||
+ | [[File:Posisi Elemen 4 - Addar.jpg|200px|center]] | ||
+ | |||
+ | Elemen 4 dan posisi Elemen 4 di matriks global | ||
+ | |||
+ | [[File:Analisis Elemen 5 - Addar.jpg|200px|center]] | ||
+ | [[File:Posisi Elemen 5 - Addar.jpg|200px|center]] | ||
+ | |||
+ | ''' 4. Menghitung Defleksi (Koordinat Global) ''' | ||
+ | |||
+ | Setelah mendapatkan seluruh matriks global elemen 1,2,3,4,5 maka kita dapat menggabungkan seluruh matriks tersebut menjadi matriks global [K](G), melalui persamaan berikut. | ||
+ | |||
+ | [[File:Persamaan Koordinat Global - Addar.jpg|300px|center]] | ||
+ | |||
+ | yang menghasilkan | ||
+ | |||
+ | [[File:Koordinat Global - Addar.jpg|300px|center]] | ||
+ | |||
+ | Kondisi batas yang diperlihatkan gambar membuat kondisi node 1 dan 3 adalah fixed dan kondisi tersebut menyatakan bahwa node 2 dan 4 diberikan beban eksternal sehingga | ||
+ | |||
+ | [[File:Kondisi Batas Node 2 dan 4.jpg|300px|center]] | ||
+ | |||
+ | Dengan menerapkan Hukum Hooke F= k.x, maka dalam persamaan matrix menjadi [F]=[K(G)].[U¬(e)], sehingga didapatkan dan disederhanakan menjadi: | ||
+ | |||
+ | [[File:Kondisi Matriks - Addar.jpg|300px|center]] | ||
+ | |||
+ | [[File:Kondisi Matriks Sederhana - Addar.jpg|300px|center]] | ||
+ | |||
+ | = Pertemuan 5 (Senin, 7 Desember 2020) = | ||
+ | |||
+ | Pada pertemuan kali ini, kelas membahas tentang tugas yang diberikan minggu lalu. Tugas kemarin merupakan pembahasan mengenai gaya reaksi pada elemen beam penyusun statika struktur. Kemudian dilanjutkan dengan pembahasan tugas dari beberapa rekan saya. Pertemuan ini menjelaskan hasil dari tugas rekan kami, Ahmad Mohammad Fahmi, mensenai coding yang ia buat pada tugas minggu lalu tentang Plane Truss dan Space Truss. | ||
+ | |||
+ | Diskusi berlangsung cutup interaktif dengan penjelasan dari Fahmi sendiri mengenai hasil tugas ia. Namun, masih banyak hal yang belum saya sepenuhnya mengerti, walau begitu tetap meneruskan progress diskusi pada platform ini. Soal baru diberikan kepada kami dari Pak Dai sebagai berikut | ||
+ | |||
+ | [[File:Soal3.jpeg|300px|center]] | ||
+ | |||
+ | ''' Mempelajari Coding 3D Fahmi ''' | ||
+ | |||
+ | Pada algoritma Ahmad Muhammad Fahmi, metode yang digunakan untuk penyelesaian sama dengan ''flowchart'' yang sudah saya buat untuk Quiz. Penyelesaian kedua soal ini memiliki ''parameter input'': | ||
+ | |||
+ | 1. A (Luas Permukaan) | ||
+ | |||
+ | 2. E (Modulus Elastisitas) | ||
+ | |||
+ | 3. node | ||
+ | |||
+ | 4. load | ||
+ | |||
+ | Pada algoritma ini dibuat terlebih dahulu beberapa ''function'' untuk mempermudah pemanggilan pada ''class''. Disini terdapat ''function'' yaitu Stiffness Matrix Global, Sum Stiffness Matrix Global, Boundary Stiffness Matrix Global, Gauss Jordan, Reaction Force, dan Check Force. | ||
+ | |||
+ | ''' Pengaplikasian Coding Terhadap Soal ''' | ||
+ | |||
+ | Berikut | ||
+ | |||
+ | {| 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; | ||
+ | |||
+ | |} | ||
+ | |||
+ | Berikut merupakan ''class'' yang digunakan untuk memanggil ''function'' diatas dan menyelesaikan ''Example'' 3.3 | ||
+ | |||
+ | {| 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; | ||
+ | |||
+ | |} | ||
+ | |||
+ | Berikut merupakan hasil dan grafik yang didapat | ||
+ | |||
+ | [[File:1607924165277.jpg|200px]] | ||
+ | [[File:1607924118583.jpg|200px]] | ||
+ | [[File:1607924101463.jpg|200px]] | ||
+ | |||
+ | [[File:1607924228684.jpg|600px|center]] | ||
+ | |||
+ | = Pertemuan Ke6 (13 Desember 2020) = | ||
+ | |||
+ | Pada pertemuan ini, Pak Dai memperykuat pemahaman tentang ilmu yang kami dapat selama di Mata Kuliah Metode Numerik. Dilanjutkan dengan permintaan dari Pak Dai untuk para peserta melakukan muhasabah terhadap ilmu yang telah didapatkan selama kelas ini berjalan. | ||
+ | |||
+ | = Pertemuan Ke7 (21 Desember 2020) = | ||
+ | |||
+ | Pada pertemuan hari ini, Pak Dai dan menjelaskan mengenai Tugas Besar yang diberikan kepada kami yaitu Aplikasi Metode Numerik dalam Optimasi Desain Struktur Rangka Sederhana. Optimasi pada tugas ini adalah optimasi terhadap rangka yang dituju dengan tujuan untuk mencari material yang paling tepat untuk menjadi material rangka tersebut. Salah satu praktik optimasi adalah ''Bracket Optimization Using Golden Ratio Method'' yang dilanjutkan oleh Bu Candra. | ||
+ | |||
+ | = Tugas Besar = | ||
+ | |||
+ | Pada tugas besar ini kami diminta untuk mencari optimasi pemilihan material untuk rangka berikut. Optimasi pemilihan material bergantung kepada 2 hal yaitu optimasi elastisitas dan optimasi luas penampang. | ||
+ | |||
+ | [[File:Truss rangka.png|450px|center]] | ||
+ | |||
+ | '''Flow Chart''' | ||
+ | |||
+ | Untuk mempermudah pengerjaan dari tugas besar ini, dibuatlah sebuah flowchart agar dapat lebih mudah untuk dimengerti. | ||
+ | |||
+ | [[File:Flow Chart Tubes Addar.png|600px|center]] | ||
+ | |||
+ | ''' Definisi Permasalahan ''' | ||
+ | |||
+ | Pada soal yang tertera di atas, kami diminta untuk mencari optimasi pemilihan material atas struktur tsb. Jenis material yang digunakan adalah besi siku (''angle bar'') yang akan menjadi struktur yang merepresentasikan gambar. Kami harus membandingkan optimasi elastisitas dan optimasi luas penampang dari berbagai material besi siku agar dapat memilih material yang paling efisien dan efektif untuk menjawab tugas ini. Struktur memiliki dimensi (''p'' x ''l'' x ''t'') = 0,6m x 0,75m x 1,8m dimana pada baian atas struktur terdapat 2 gaya yang mempengaruhi struktur yaitu F1 = 2000 N dan F2 = 1000 N. | ||
+ | |||
+ | |||
+ | ''' Asumsi dan Kondisi ''' | ||
+ | |||
+ | Penerapan asumsi diberikan kepada tugas ini Karena ada beberapa data yang tidak diketahui untuk menyelesaikan tugas ini. Pada struktur memiliki kendisi dimana beberapa struktur tambahan, yang dianggap sebagai lantai, yaitu berupa struktur penopang dari keseluruhan struktur. Lantai ini tidak diberikan data seperti tinggi dari tanah. Maka dari itu dapat diasumsikan berapa tinggi dari lantai-lantai tersebut. Selain itu node-node juga perlu diasumsikan kepada gambar dan ditentukan agar dapat mempermudah pengerjaan. | ||
+ | |||
+ | Pada penempatan gaya F1 dan F2 yang diberikan kepada struktur hanya akan terdistribusi di point penghubung. Hal ini dikarenakan, struktur pada tugas ini memiliki sıfat truss. | ||
+ | |||
+ | ''' ''Research'' Data Besi Siku ''' | ||
+ | |||
+ | Berikut merupakan data dari material yang akan saya gunakan | ||
+ | |||
+ | [[File:Data SS304.png|300px]] | ||
+ | |||
+ | |||
+ | ''' Permodelan Numerik ''' | ||
+ | |||
+ | Perhitungan displacement, reaction force, dan stress : | ||
+ | |||
+ | model Trusses_3D_Tugas_Besar_Safety | ||
+ | //define initial variable | ||
+ | parameter Integer Points=size(P,1); //Number of Points | ||
+ | parameter Integer Trusses=size(C,1); //Number of Trusses | ||
+ | parameter Real Yield= (nilai yield) ; //Yield Strength Material | ||
+ | parameter Real Area= (nilai area) ; //Luas Siku | ||
+ | parameter Real Elas= (nilai elastisitas) ; //Elasticity Material | ||
+ | //define connection | ||
+ | parameter Integer C[Trusses,2]=[1,5; //vertical 1st floor | ||
+ | 2,6; //vertical 1st floor | ||
+ | 3,7; //vertical 1st floor | ||
+ | 4,8; //vertical 1st floor | ||
+ | 5,6; //horizontal 1st floor | ||
+ | 6,7; //horizontal 1st floor | ||
+ | 7,8; //horizontal 1st floor | ||
+ | 5,8; //horizontal 1st floor | ||
+ | 5,9; //vertical 2st floor | ||
+ | 6,10; //vertical 2st floor | ||
+ | 7,11; //vertical 2st floor | ||
+ | 8,12; //vertical 2st floor | ||
+ | 9,10; //horizontal 2st floor | ||
+ | 10,11; //horizontal 2st floor | ||
+ | 11,12; //horizontal 2st floor | ||
+ | 9,12; //horizontal 2st floor | ||
+ | 9,13; //vertical 3st floor | ||
+ | 10,14; //vertical 3st floor | ||
+ | 11,15; //vertical 3st floor | ||
+ | 12,16; //vertical 3st floor | ||
+ | 13,14; //horizontal 3st floor | ||
+ | 14,15; //horizontal 3st floor | ||
+ | 15,16; //horizontal 3st floor | ||
+ | 13,16]; //horizontal 3st floor | ||
+ | |||
+ | //define coordinates (please put orderly) | ||
+ | parameter Real P[Points,3]=[ 0 ,0 ,0,1,1,1; //1 | ||
+ | 0.75,0 ,0,1,1,1; //2 | ||
+ | 0.75,0.6,0,1,1,1; //3 | ||
+ | 0 ,0.6,0,1,1,1; //4 | ||
+ | 0 ,0 ,0.3,0,0,0; //5 | ||
+ | 0.75,0 ,0.3,0,0,0; //6 | ||
+ | 0.75,0.6,0.3,0,0,0; //7 | ||
+ | 0 ,0.6,0.3,0,0,0; //8 | ||
+ | 0 ,0 ,1.05,0,0,0; //9 | ||
+ | 0.75,0 ,1.05,0,0,0; //10 | ||
+ | 0.75,0.6,1.05,0,0,0; //11 | ||
+ | 0 ,0.6,1.05,0,0,0; //12 | ||
+ | 0 ,0 ,1.8,0,0,0; //13 | ||
+ | 0.75,0 ,1.8,0,0,0; //14 | ||
+ | 0.75,0.6,1.8,0,0,0; //15 | ||
+ | 0 ,0.6,1.8,0,0,0]; //16 | ||
+ | |||
+ | //define external force (please put orderly) | ||
+ | parameter Real F[Points*3]={0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,-500, | ||
+ | 0,0,-1000, | ||
+ | 0,0,-1000, | ||
+ | 0,0,-500}; | ||
+ | |||
+ | //define external force (please put orderly) | ||
+ | parameter Real F[Points*3]={0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,0, | ||
+ | 0,0,-1000, | ||
+ | 0,0,-500, | ||
+ | 0,0,-500, | ||
+ | 0,0,-1000}; | ||
+ | //solution | ||
+ | Real displacement[N], reaction[N]; | ||
+ | Real check[3]; | ||
+ | Real stress1[Trusses]; | ||
+ | Real safety[Trusses]; | ||
+ | Real dis[3]; | ||
+ | Real Str[3]; | ||
+ | protected | ||
+ | parameter Integer N=3*Points; | ||
+ | Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3]; | ||
+ | Real err=10e-15, ers=10e-8; | ||
+ | algorithm | ||
+ | //Creating Global Matrix | ||
+ | G:=id; | ||
+ | for i in 1:Trusses loop | ||
+ | for j in 1:3 loop | ||
+ | q1[j]:=P[C[i,1],j]; | ||
+ | q2[j]:=P[C[i,2],j]; | ||
+ | end for; | ||
+ | //Solving Matrix | ||
+ | L:=Modelica.Math.Vectors.length(q2-q1); | ||
+ | cx:=(q2[1]-q1[1])/L; | ||
+ | cy:=(q2[2]-q1[2])/L; | ||
+ | cz:=(q2[3]-q1[3])/L; | ||
+ | X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz; | ||
+ | cy*cx,cy^2,cy*cz; | ||
+ | cz*cx,cz*cy,cz^2]; | ||
+ | //Transforming to global matrix | ||
+ | g:=zeros(N,N); | ||
+ | for m,n in 1:3 loop | ||
+ | g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n]; | ||
+ | g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n]; | ||
+ | g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n]; | ||
+ | g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n]; | ||
+ | end for; | ||
+ | G_star:=G+g; | ||
+ | G:=G_star; | ||
+ | end for; | ||
+ | //Implementing boundary | ||
+ | for x in 1:Points loop | ||
+ | if P[x,4] <> 0 then | ||
+ | for a in 1:Points*3 loop | ||
+ | G[(x*3)-2,a]:=0; | ||
+ | G[(x*3)-2,(x*3)-2]:=1; | ||
+ | end for; | ||
+ | end if; | ||
+ | if P[x,5] <> 0 then | ||
+ | for a in 1:Points*3 loop | ||
+ | G[(x*3)-1,a]:=0; | ||
+ | G[(x*3)-1,(x*3)-1]:=1; | ||
+ | end for; | ||
+ | end if; | ||
+ | if P[x,6] <> 0 then | ||
+ | for a in 1:Points*3 loop | ||
+ | G[x*3,a]:=0; | ||
+ | G[x*3,x*3]:=1; | ||
+ | end for; | ||
+ | end if; | ||
+ | end for; | ||
+ | //Solving displacement | ||
+ | displacement:=Modelica.Math.Matrices.solve(G,F); | ||
+ | //Solving reaction | ||
+ | reaction:=(G_star*displacement)-F; | ||
+ | //Eliminating float error | ||
+ | for i in 1:N loop | ||
+ | reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i]; | ||
+ | displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i]; | ||
+ | end for; | ||
+ | //Checking Force | ||
+ | check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); | ||
+ | check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); | ||
+ | check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); | ||
+ | for i in 1:3 loop | ||
+ | check[i] := if abs(check[i])<=ers then 0 else check[i]; | ||
+ | end for; | ||
+ | //Calculating stress in each truss | ||
+ | for i in 1:Trusses loop | ||
+ | for j in 1:3 loop | ||
+ | q1[j]:=P[C[i,1],j]; | ||
+ | q2[j]:=P[C[i,2],j]; | ||
+ | dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]); | ||
+ | end for; | ||
+ | //Solving Matrix | ||
+ | L:=Modelica.Math.Vectors.length(q2-q1); | ||
+ | cx:=(q2[1]-q1[1])/L; | ||
+ | cy:=(q2[2]-q1[2])/L; | ||
+ | cz:=(q2[3]-q1[3])/L; | ||
+ | X:=(Elas/L)*[cx^2,cx*cy,cx*cz; | ||
+ | cy*cx,cy^2,cy*cz; | ||
+ | cz*cx,cz*cy,cz^2]; | ||
+ | Str:=(X*dis); | ||
+ | stress1[i]:=Modelica.Math.Vectors.length(Str); | ||
+ | end for; | ||
+ | //Safety factor | ||
+ | for i in 1:Trusses loop | ||
+ | if stress1[i]>0 then | ||
+ | safety[i]:=Yield/stress1[i]; | ||
+ | else | ||
+ | safety[i]:=0; | ||
+ | end if; | ||
+ | end for; | ||
+ | end Trusses_3D_Tugas_Besar_Safety; | ||
+ | |||
+ | |||
+ | Kurva Curve Fitting | ||
+ | |||
+ | model Curve_Fitting | ||
+ | input Real X[:]; | ||
+ | input Real Y[size(X,1)]; | ||
+ | input Integer order=2; | ||
+ | output Real Coe[order+1]; | ||
+ | |||
+ | protected | ||
+ | Real Z[size(X,1),order+1]; | ||
+ | Real ZTr[order+1,size(X,1)]; | ||
+ | Real A[order+1,order+1]; | ||
+ | Real B[order+1]; | ||
+ | |||
+ | algorithm | ||
+ | |||
+ | for i in 1:size(X,1) loop | ||
+ | for j in 1:(order+1) loop | ||
+ | Z[i,j]:=X[i]^(order+1-j); | ||
+ | end for; | ||
+ | end for; | ||
+ | ZTr:=transpose(Z); | ||
+ | |||
+ | A:=ZTr*Z; | ||
+ | B:=ZTr*Y; | ||
+ | Coe:=Modelica.Math.Matrices.solve(A,B); | ||
+ | |||
+ | end Curve_Fitting; | ||
+ | |||
+ | '''Komputasi''' | ||
+ | |||
+ | Berikut merupakan optimasi dengan nilai elastitas yang tetap. Dimana faktor yang menjadi pembanding disini adalah nilai harga jual dan nihai stress dari material pada area tertentu. | ||
+ | |||
+ | [[File:Hasil Komputasi SS304.png|500px]][[File:Screen Shot 2021-01-04 at 12.46.42.png|500px]] | ||
+ | |||
+ | ''' Penentuan Material Berdasarkan Area Penampang ''' | ||
+ | |||
+ | Berdasarkan hasil optimasi atas material SS304 dari perbandingan area penampang besi siku terhadap harga jual dan stress yang dibebankan kepada struktur dapat disimpulkan bahwa area penampang yang direkomendasi atas optimasi tsb adalah kisaran sebesar 0,0003 mm2 pada stress sebesar 2.800.000 pada kisaran harga Rp.1.800.000 | ||
+ | |||
+ | == UAS == | ||
+ | |||
+ | Berikut merupakan jawaban UAS saya | ||
+ | |||
+ | [[File:392278.jpg|400px|center]] | ||
+ | |||
+ | [[File:392279.jpg|400px|center]] | ||
+ | |||
+ | Berikut merupakan jawaban no 7 UAS saya | ||
+ | |||
+ | [[File:12345.jpg|500px|center]] | ||
+ | |||
+ | [[File:67890.jpg|500px|center]] |
Latest revision as of 20:27, 14 January 2021
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيْمِ
السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُ
Bio Data
Kelas Metode Numerik - 03
Nama : Addarda Irsyad Usman
NPM : 1706021556
Program Studi : S1 Teknik Mesin Parallel
Contents
- 1 Bio Data
- 2 Kelas Metode Numerik
- 3 Pertemuan 1 (Senin, 9 November 2020)
- 4 Pertemuan 2 (Senin, 16 November 2020)
- 5 Pertemuan 3 (Senin, 23 November 2020) Tugas Studi Kasus Gambar 12.11
- 6 Pertemuan 3 (Senin, 23 November 2020) PR
- 7 Pertemuan Ke4 (30 November 2020)
- 8 Jawaban Soal Quiz
- 9 Pertemuan 5 (Senin, 7 Desember 2020)
- 10 Pertemuan Ke6 (13 Desember 2020)
- 11 Pertemuan Ke7 (21 Desember 2020)
- 12 Tugas Besar
Kelas Metode Numerik
Pertemuan 1 (Senin, 9 November 2020)
Assalamualaikum Wr. Wb.
Pada pertemuan pertama kali ini dapat dianggap sebagai pengenalan dari Pak Dai tentang bagaimana metode pembelajaran kelas Metode Numerik - 03 bersama Pak Dai. Banyak diskusi yang terjadi pada pertemuan ini, sebagaimana Pak Dai mengarahkan kami untuk melakukan diskusi 2 arah ini. Pembahasan menarik mengenai fenomena numerik yang berada di kehidupan dasar manusia ketika menemukan bilangan-bilangan yang berupa konsep seperti "tak terhingga" atau "infiniti" dan bagaimana pandangan kita sebagai seorang engineer.
Kemudian Pak Dai menjelaskan bahwa pemberian materi akan berupa pengaplikasian dari metode numerik yang akan menggunakan software Open Modelica. Software ini merupakan program yang dapat menyimulasikan suatu sistem dengen data input kode sumber atau biner untuk melakukan suatu penelitian terhadap sistem tersebut. Setiap mahasiswa diharapkan memiliki software tersebut sebagai penunjang pembelajaran setengah semester kedepan.
Pertemuan 2 (Senin, 16 November 2020)
Pada pertemuan kedua ini, kami mempelajari cara membuat program sederhana pada modelica untuk menghitung jumlah dan rata-rata angka. Diakhir kelas kami ditugaskan untuk membuat suatu program untuk menyelesaikan persamaan aljabar simultan, berikut merupakan program yang saya buat:
Saya menggunakan matriks berukuran 3 x 3 dengan metode gauss elimination dan function solve yang disediakan oleh software modelica sehingga mendapatkan hasil [6, -1, -2]
Pertemuan 3 (Senin, 23 November 2020) Tugas Studi Kasus Gambar 12.11
Pada pertemuan ketiga ini, kami diminta untuk membuktikan suatu studi berdasarkan gambar 12.11, serta juga dengan matriks yang tertera pada buku panduan Numerical Methods for Engineers 7th Edition superti berikut merupakan gambar 12.11:
Berikut merupakan program yang saya buat pada program Open Modelica menggunakan metode Gauss Elimination sebagai pembuktian terhadap persamaan yang bereda di buku panduan. Dapat disimpukan bahwa persamaa berdasarkan buku panduan terbuktinya persamaan tersebut dengan mengacu pada nilai a pada Open Modelica berikut. Maka Open Modelica berikut terbukti dapat menyelesaikan persamaan yang sama seperti di buku panduan dengan hasil yang sama pula.
Hasil yang didapatkan dari simulasi di atas adalah sebagai berikut
a1 = 7.3575
a2 = 10.0552
a3 = 12.5077
Pertemuan 3 (Senin, 23 November 2020) PR
Pada pertemuan ini Pak Dai juga memberikan PR kepada kami untuk menyelesaikan soal berikut:
Pada tugas ini diberikan juga penjelasan mengenai bagaimana persamaan akhir menggunakan Hukum Hooke, dimana matriks adalah sebagai berikut:
Pada penyelesaiannya dapat menggunakan OpenModelica sebagai berikut
Dan juga saya berikan plotting menggunakan Open Modelica
Soal mempertanyakan mengenai nilai gaya reaksi terhadap gambar, maka diperlukan perhitungan untuk mendapatkan nilai gaya reaksi.
Menggunakan OpenModelica dapat menyelesaikan persamaan tersebut, menggunakan program sebagai berikut
Serta dengan hasil plottingnya
Relain itu tugas ini juga membutuhkan perhitungan normal stress dan gaya internal pada gambar. Pada perhitungan normal stress diperlukan transformasi dari hasil defleksi ditinjau dari koordinat global menjadi transformasi lokal, dimana menggunakan persamaan berikut
Pada análisis stress Elemen 5, maka node yang dianalisis adalah node 2 dan 5. Sehingga persamaan matriks defleksi pada koordinat lokal menjadi
Menggunakan OpenModelica dengan program sebagai berikut untuk dapat menyelesaikan permasalahan
Didapatkan juga hasil plotting
Maka didapatkan
U2x = -0.00976 inch
U6x= -0.01209 inch
Dan untuk internal force didapatkan melalui persamaan
didapatkan nilai internal force elemen 5 sebesar 696 lb
Pertemuan Ke4 (30 November 2020)
Berikut merupakan hasil jawaban Soal No 4 dan No 8 saya
Jawaban Soal Quiz
Berikut merupakan penyelesaian dari flowchart Nomor 4
1. Mendefinisikan Node & Elemen
Kita perlu mendefinisikan setiap elemen dan node nya untuk mendapatkan derajat yang digunakan pada elemen dan node tersebut
2. Membuat Model Matematika
Dikarenakan kita mencari defleksi dari gambar yang tersedia, maka akan digunakan persamaan persamaan berikut
a. Hukum Hooke
b. Internal Force
c. Normal Stress
Selain itu kita juga perlu untuk menentukan nilai kekakuan dari setiap elemen
3. Membuat Model Numerik
Setelah mendefinisikan elemen dan node, sert menentukan model matematika yang akan kita gunakan, kita dapat membuat model numerik dari gambar. Untuk menentukan matriks kekakuan elemen dapat menggunakan Persamaan matriks berikut.
a. Analisis Elemen
Karena elemen 1,2 sejajar dengan sumbu X global maka nilai θ = 0, dan didapatkan hasil analisis elemen 1,2
Elemen 1 dan posisi Elemen 1 di matriks global
Elemen 2 dan posisi Elemen 2 di matriks global
Dikarenakan elemen 3 sejajar dengan sumbu Y global maka nilai θ = 90, dan didapatkan hasil analisis elemen 3
Elemen 3 dan posisi Elemen 3 di matriks global
Untuk analisis Elemen 4,5 dapat dihitung terlebih dahulu derajatnya dari data yang telah disediakan gambar, maka didapatkan θ4 = 51,34 dan θ5 = 128,66. Maka dapat didapatkan hasil analisis elemen 4,5
Elemen 4 dan posisi Elemen 4 di matriks global
Elemen 4 dan posisi Elemen 4 di matriks global
4. Menghitung Defleksi (Koordinat Global)
Setelah mendapatkan seluruh matriks global elemen 1,2,3,4,5 maka kita dapat menggabungkan seluruh matriks tersebut menjadi matriks global [K](G), melalui persamaan berikut.
yang menghasilkan
Kondisi batas yang diperlihatkan gambar membuat kondisi node 1 dan 3 adalah fixed dan kondisi tersebut menyatakan bahwa node 2 dan 4 diberikan beban eksternal sehingga
Dengan menerapkan Hukum Hooke F= k.x, maka dalam persamaan matrix menjadi [F]=[K(G)].[U¬(e)], sehingga didapatkan dan disederhanakan menjadi:
Pertemuan 5 (Senin, 7 Desember 2020)
Pada pertemuan kali ini, kelas membahas tentang tugas yang diberikan minggu lalu. Tugas kemarin merupakan pembahasan mengenai gaya reaksi pada elemen beam penyusun statika struktur. Kemudian dilanjutkan dengan pembahasan tugas dari beberapa rekan saya. Pertemuan ini menjelaskan hasil dari tugas rekan kami, Ahmad Mohammad Fahmi, mensenai coding yang ia buat pada tugas minggu lalu tentang Plane Truss dan Space Truss.
Diskusi berlangsung cutup interaktif dengan penjelasan dari Fahmi sendiri mengenai hasil tugas ia. Namun, masih banyak hal yang belum saya sepenuhnya mengerti, walau begitu tetap meneruskan progress diskusi pada platform ini. Soal baru diberikan kepada kami dari Pak Dai sebagai berikut
Mempelajari Coding 3D Fahmi
Pada algoritma Ahmad Muhammad Fahmi, metode yang digunakan untuk penyelesaian sama dengan flowchart yang sudah saya buat untuk Quiz. Penyelesaian kedua soal ini memiliki parameter input:
1. A (Luas Permukaan)
2. E (Modulus Elastisitas)
3. node
4. load
Pada algoritma ini dibuat terlebih dahulu beberapa function untuk mempermudah pemanggilan pada class. Disini terdapat function yaitu Stiffness Matrix Global, Sum Stiffness Matrix Global, Boundary Stiffness Matrix Global, Gauss Jordan, Reaction Force, dan Check Force.
Pengaplikasian Coding Terhadap Soal
Berikut
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; |
Berikut merupakan class yang digunakan untuk memanggil function diatas dan menyelesaikan Example 3.3
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; |
Berikut merupakan hasil dan grafik yang didapat
Pertemuan Ke6 (13 Desember 2020)
Pada pertemuan ini, Pak Dai memperykuat pemahaman tentang ilmu yang kami dapat selama di Mata Kuliah Metode Numerik. Dilanjutkan dengan permintaan dari Pak Dai untuk para peserta melakukan muhasabah terhadap ilmu yang telah didapatkan selama kelas ini berjalan.
Pertemuan Ke7 (21 Desember 2020)
Pada pertemuan hari ini, Pak Dai dan menjelaskan mengenai Tugas Besar yang diberikan kepada kami yaitu Aplikasi Metode Numerik dalam Optimasi Desain Struktur Rangka Sederhana. Optimasi pada tugas ini adalah optimasi terhadap rangka yang dituju dengan tujuan untuk mencari material yang paling tepat untuk menjadi material rangka tersebut. Salah satu praktik optimasi adalah Bracket Optimization Using Golden Ratio Method yang dilanjutkan oleh Bu Candra.
Tugas Besar
Pada tugas besar ini kami diminta untuk mencari optimasi pemilihan material untuk rangka berikut. Optimasi pemilihan material bergantung kepada 2 hal yaitu optimasi elastisitas dan optimasi luas penampang.
Flow Chart
Untuk mempermudah pengerjaan dari tugas besar ini, dibuatlah sebuah flowchart agar dapat lebih mudah untuk dimengerti.
Definisi Permasalahan
Pada soal yang tertera di atas, kami diminta untuk mencari optimasi pemilihan material atas struktur tsb. Jenis material yang digunakan adalah besi siku (angle bar) yang akan menjadi struktur yang merepresentasikan gambar. Kami harus membandingkan optimasi elastisitas dan optimasi luas penampang dari berbagai material besi siku agar dapat memilih material yang paling efisien dan efektif untuk menjawab tugas ini. Struktur memiliki dimensi (p x l x t) = 0,6m x 0,75m x 1,8m dimana pada baian atas struktur terdapat 2 gaya yang mempengaruhi struktur yaitu F1 = 2000 N dan F2 = 1000 N.
Asumsi dan Kondisi
Penerapan asumsi diberikan kepada tugas ini Karena ada beberapa data yang tidak diketahui untuk menyelesaikan tugas ini. Pada struktur memiliki kendisi dimana beberapa struktur tambahan, yang dianggap sebagai lantai, yaitu berupa struktur penopang dari keseluruhan struktur. Lantai ini tidak diberikan data seperti tinggi dari tanah. Maka dari itu dapat diasumsikan berapa tinggi dari lantai-lantai tersebut. Selain itu node-node juga perlu diasumsikan kepada gambar dan ditentukan agar dapat mempermudah pengerjaan.
Pada penempatan gaya F1 dan F2 yang diberikan kepada struktur hanya akan terdistribusi di point penghubung. Hal ini dikarenakan, struktur pada tugas ini memiliki sıfat truss.
Research Data Besi Siku
Berikut merupakan data dari material yang akan saya gunakan
Permodelan Numerik
Perhitungan displacement, reaction force, dan stress :
model Trusses_3D_Tugas_Besar_Safety //define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield= (nilai yield) ; //Yield Strength Material parameter Real Area= (nilai area) ; //Luas Siku parameter Real Elas= (nilai elastisitas) ; //Elasticity Material //define connection parameter Integer C[Trusses,2]=[1,5; //vertical 1st floor 2,6; //vertical 1st floor 3,7; //vertical 1st floor 4,8; //vertical 1st floor 5,6; //horizontal 1st floor 6,7; //horizontal 1st floor 7,8; //horizontal 1st floor 5,8; //horizontal 1st floor 5,9; //vertical 2st floor 6,10; //vertical 2st floor 7,11; //vertical 2st floor 8,12; //vertical 2st floor 9,10; //horizontal 2st floor 10,11; //horizontal 2st floor 11,12; //horizontal 2st floor 9,12; //horizontal 2st floor 9,13; //vertical 3st floor 10,14; //vertical 3st floor 11,15; //vertical 3st floor 12,16; //vertical 3st floor 13,14; //horizontal 3st floor 14,15; //horizontal 3st floor 15,16; //horizontal 3st floor 13,16]; //horizontal 3st floor //define coordinates (please put orderly) parameter Real P[Points,3]=[ 0 ,0 ,0,1,1,1; //1 0.75,0 ,0,1,1,1; //2 0.75,0.6,0,1,1,1; //3 0 ,0.6,0,1,1,1; //4 0 ,0 ,0.3,0,0,0; //5 0.75,0 ,0.3,0,0,0; //6 0.75,0.6,0.3,0,0,0; //7 0 ,0.6,0.3,0,0,0; //8 0 ,0 ,1.05,0,0,0; //9 0.75,0 ,1.05,0,0,0; //10 0.75,0.6,1.05,0,0,0; //11 0 ,0.6,1.05,0,0,0; //12 0 ,0 ,1.8,0,0,0; //13 0.75,0 ,1.8,0,0,0; //14 0.75,0.6,1.8,0,0,0; //15 0 ,0.6,1.8,0,0,0]; //16 //define external force (please put orderly) parameter Real F[Points*3]={0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,-500, 0,0,-1000, 0,0,-1000, 0,0,-500}; //define external force (please put orderly) parameter Real F[Points*3]={0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,-1000, 0,0,-500, 0,0,-500, 0,0,-1000}; //solution Real displacement[N], reaction[N]; Real check[3]; Real stress1[Trusses]; Real safety[Trusses]; Real dis[3]; Real Str[3]; protected parameter Integer N=3*Points; Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3]; Real err=10e-15, ers=10e-8; algorithm //Creating Global Matrix G:=id; for i in 1:Trusses loop for j in 1:3 loop q1[j]:=P[C[i,1],j]; q2[j]:=P[C[i,2],j]; end for; //Solving Matrix L:=Modelica.Math.Vectors.length(q2-q1); cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz; cy*cx,cy^2,cy*cz; cz*cx,cz*cy,cz^2]; //Transforming to global matrix g:=zeros(N,N); for m,n in 1:3 loop g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n]; g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n]; g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n]; g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n]; end for; G_star:=G+g; G:=G_star; end for; //Implementing boundary for x in 1:Points loop if P[x,4] <> 0 then for a in 1:Points*3 loop G[(x*3)-2,a]:=0; G[(x*3)-2,(x*3)-2]:=1; end for; end if; if P[x,5] <> 0 then for a in 1:Points*3 loop G[(x*3)-1,a]:=0; G[(x*3)-1,(x*3)-1]:=1; end for; end if; if P[x,6] <> 0 then for a in 1:Points*3 loop G[x*3,a]:=0; G[x*3,x*3]:=1; end for; end if; end for; //Solving displacement displacement:=Modelica.Math.Matrices.solve(G,F); //Solving reaction reaction:=(G_star*displacement)-F; //Eliminating float error for i in 1:N loop reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i]; displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i]; end for; //Checking Force check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); for i in 1:3 loop check[i] := if abs(check[i])<=ers then 0 else check[i]; end for; //Calculating stress in each truss for i in 1:Trusses loop for j in 1:3 loop q1[j]:=P[C[i,1],j]; q2[j]:=P[C[i,2],j]; dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]); end for; //Solving Matrix L:=Modelica.Math.Vectors.length(q2-q1); cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=(Elas/L)*[cx^2,cx*cy,cx*cz; cy*cx,cy^2,cy*cz; cz*cx,cz*cy,cz^2]; Str:=(X*dis); stress1[i]:=Modelica.Math.Vectors.length(Str); end for; //Safety factor for i in 1:Trusses loop if stress1[i]>0 then safety[i]:=Yield/stress1[i]; else safety[i]:=0; end if; end for; end Trusses_3D_Tugas_Besar_Safety;
Kurva Curve Fitting
model Curve_Fitting input Real X[:]; input Real Y[size(X,1)]; input Integer order=2; output Real Coe[order+1]; protected Real Z[size(X,1),order+1]; Real ZTr[order+1,size(X,1)]; Real A[order+1,order+1]; Real B[order+1]; algorithm for i in 1:size(X,1) loop for j in 1:(order+1) loop Z[i,j]:=X[i]^(order+1-j); end for; end for; ZTr:=transpose(Z); A:=ZTr*Z; B:=ZTr*Y; Coe:=Modelica.Math.Matrices.solve(A,B); end Curve_Fitting;
Komputasi
Berikut merupakan optimasi dengan nilai elastitas yang tetap. Dimana faktor yang menjadi pembanding disini adalah nilai harga jual dan nihai stress dari material pada area tertentu.
Penentuan Material Berdasarkan Area Penampang
Berdasarkan hasil optimasi atas material SS304 dari perbandingan area penampang besi siku terhadap harga jual dan stress yang dibebankan kepada struktur dapat disimpulkan bahwa area penampang yang direkomendasi atas optimasi tsb adalah kisaran sebesar 0,0003 mm2 pada stress sebesar 2.800.000 pada kisaran harga Rp.1.800.000
UAS
Berikut merupakan jawaban UAS saya
Berikut merupakan jawaban no 7 UAS saya