Difference between revisions of "Diagy Alwan Irsyad"
(→Tugas Besar) |
(→Metode Numerik-02) |
||
Line 607: | Line 607: | ||
=== Tugas Besar === | === Tugas Besar === | ||
+ | <div class="center" style="width: auto; margin-left: auto; margin-right: auto;"> | ||
+ | [[File:Tugas besar d29.jpeg|600px|Displacement]][[File:Tugas besar 2 d29.jpeg|600px|Displacement]] | ||
+ | </div> | ||
+ | |||
Kami diberi tugas besar berupa aplikasi metode numerik dalam optimasi desain statika struktur rangka sederhana (''space truss''/3D). | Kami diberi tugas besar berupa aplikasi metode numerik dalam optimasi desain statika struktur rangka sederhana (''space truss''/3D). | ||
Revision as of 16:00, 23 December 2020
Biodata
Nama : Diagy Alwan Irsyad
NPM : 1906301154
Angkatan : 2019
Program Studi : Teknik Mesin, S1 Reguler
Tempat, tanggal lahir : Cepu, 29 April 2001
Jenis kelamin : Laki-laki
Alamat surel : diagya.irsyad29@gmail.com / diagy.alwan@ui.ac.id
Metode Numerik-02
Pada semester gasal 2020/2021, saya mengambil mata kuliah Metode Numerik, tepatnya di kelas Metode Numerik-02.
Contents
Pertemuan I (11 November 2020)
Pertemuan pertama bersama Pak Dai, saya dan mahasiswa lain diajak berpikir untuk bisa mengetahui hal-hal yang sudah kami ketahui dan yang belum. Dengan mengetahui hal yang belum diketahui, kami bisa mempelajari hal-hal tersebut. Selain itu, kami juga membahas tentang pengenalan aplikasi OpenModelica.
Tugas 1
Di akhir kelas, kami diberi tugas untuk membuat video mengenai cara penggunaan OpenModelica.
Berikut adalah video yang saya buat:
Pertemuan II (18 November 2020)
Pertemuan kedua bersama Pak Dai, saya dan mahasiswa lain diminta untuk bisa menjadi orang yang beruntung. Yang dimaksud orang yang beruntung adalah orang yang mampu menjadi pribadi yang lebih baik dibandingkan kemarin. Pak Dai mengingatkan agar kami jangan menjadi orang yang merugi, yaitu orang yang tidak memiliki perkembangan antara hari ini dengan kemarin.
Setelah mendapatkan pelajaran hidup yang berharga, kami diminta untuk mempresentasikan tugas kami yang telah dibuat sebelumnya. Tujuan dari presentasi ini adalah untuk menilai kemampuan mahasiswa dalam pemahaman penggunaan aplikasi OpenModelica.
Materi yang diberikan pada pertemuan ini adalah penggunaan class untuk memanggil sebuah function. Function yang bisa dipanggil beragam jumlahnya, mulai dari penjumlahan sederhana sampai operasi eliminasi matriks.
Tugas 2
Di akhir kelas, kami diberi tugas untuk membuat video mengenai cara menyelesaikan persamaan aljabar simultan dengan OpenModelica. Metode yang digunakan menggunakan class untuk memanggil sebuah function, seperti yang sudah diajarkan sebelumnya.
Berikut adalah video yang saya buat:
Pertemuan III (25 November 2020)
Pertemuan ketiga bersama Pak Dai, saya dan mahasiswa lain membahas penggunaan metode numerik pada bidang teknik. Metode numerik bisa digunakan untuk menyelesaikan simulasi CFD dan menghitung gaya reaksi pada suatu rangkaian truss.
Langkah yang diperlukan untuk menyelesaikan masalah di bidang teknik dengan metode numerik adalah:
- Melakukan analisis terhadap masalah
- Membuat model matematis penyelesaian masalah
- Menggunakan metode numerik yang sesuai untuk menyelesaikan masalah
Setelah langkah-langkah tersebut dilakukan, maka solusi dari masalah bisa ditemukan. Untuk pembelajaran di kelas, kami mempelajari rangkaian truss untuk sarana belajar metode numerik.
Tugas 3
Di akhir kelas, kami diberi tugas untuk membuat program sederhana menggunakan aplikasi OpenModelica menggunakan fungsi penyelesaian aljabar untuk menyelesaikan soal berikut:
Berikut adalah program yang saya buat:
Class class Trusses_Tugas3_d29 parameter Integer N=8; //Global matrice = 2*points connected parameter Real A=0.001; //m^2 parameter Real E=200e9; //Pa Real G[N,N]; //global Real Ginitial[N,N]; //global Real Sol[N]; //global displacement Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033}; Real R[N]; //global reaction force Real SolMat[N,1]; Real XMat[N,1]; //boundary condition Integer b1=1; Integer b2=3; //truss 1 parameter Real X1=0; //degree between trusses Real k1=A*E/1; Real K1[4,4]; //stiffness matrices Integer p1a=1; Integer p1b=2; Real G1[N,N]; //truss 2 parameter Real X2=0; //degree between trusses Real k2=A*E/1; Real K2[4,4]; //stiffness matrices Integer p2a=2; Integer p2b=3; Real G2[N,N]; //truss 3 parameter Real X3=90; //degree between trusses Real k3=A*E/1.25; Real K3[4,4]; //stiffness matrices Integer p3a=2; Integer p3b=4; Real G3[N,N]; //truss 4 parameter Real X4=90+38.6598; //degree between trusses Real k4=A*E/1.6; Real K4[4,4]; //stiffness matrices Integer p4a=1; Integer p4b=4; Real G4[N,N]; //truss 5 parameter Real X5=90-38.6598; //degree between trusses Real k5=A*E/1.6; Real K5[4,4]; //stiffness matrices Integer p5a=3; Integer p5b=4; Real G5[N,N]; /* for each truss, ensure pXa is lower then pXb (X represents truss element number) */ algorithm //creating global matrice K1:=Stiffness_Matrices(X1); G1:=k1*Local_Global(K1,N,p1a,p1b); K2:=Stiffness_Matrices(X2); G2:=k2*Local_Global(K2,N,p2a,p2b); K3:=Stiffness_Matrices(X3); G3:=k3*Local_Global(K3,N,p3a,p3b); K4:=Stiffness_Matrices(X4); G4:=k4*Local_Global(K4,N,p4a,p4b); K5:=Stiffness_Matrices(X5); G5:=k5*Local_Global(K5,N,p5a,p5b); G:=G1+G2+G3+G4+G5; Ginitial:=G; //implementing boundary condition for i in 1:N loop G[2*b1-1,i]:=0; G[2*b1,i]:=0; G[2*b2-1,i]:=0; G[2*b2,i]:=0; end for; G[2*b1-1,2*b1-1]:=1; G[2*b1,2*b1]:=1; G[2*b2-1,2*b2-1]:=1; G[2*b2,2*b2]:=1; //solving displacement Sol:=Gauss_Jordan(N,G,X); //solving reaction force SolMat:=matrix(Sol); XMat:=matrix(X); R:=Reaction_Trusses(N,Ginitial,SolMat,XMat); end Trusses_Tugas3_d29; |
Function Stiffness_Matrices function Stiffness_Matrices input Real A; Real Y; output Real X[4,4]; Real float_error = 10e-10; final constant Real pi=2*Modelica.Math.asin(1.0); algorithm Y:=A/180*pi; X:=[(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y); Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2; -(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y); -Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2]; for i in 1:4 loop for j in 1:4 loop if abs(X[i,j]) <= float_error then X[i,j] := 0; end if; end for; end for; end Stiffness_Matrices; |
Function Gauss-Jordan function Gauss_Jordan input Integer N; input Real A[N,N]; input Real B[N]; output Real X[N]; Real float_error = 10e-10; algorithm X:=Modelica.Math.Matrices.solve(A,B); for i in 1:N loop if abs(X[i]) <= float_error then X[i] := 0; end if; end for; end Gauss_Jordan; |
Function Reaction_Trusses function Reaction_Trusses input Integer N; input Real A[N,N]; input Real B[N,1]; input Real C[N,1]; Real X[N,1]; output Real Sol[N]; Real float_error = 10e-10; algorithm X:=A*B-C; for i in 1:N loop if abs(X[i,1]) <= float_error then X[i,1] := 0; end if; end for; for i in 1:N loop Sol[i]:=X[i,1]; end for; end Reaction_Trusses; |
Function Local_Global function Local_Global input Real Y[4,4]; input Integer B; input Integer p1; input Integer p2; output Real G[B,B]; algorithm for i in 1:B loop for j in 1:B loop G[i,j]:=0; end for; end for; G[2*p1,2*p1]:=Y[2,2]; G[2*p1-1,2*p1-1]:=Y[1,1]; G[2*p1,2*p1-1]:=Y[2,1]; G[2*p1-1,2*p1]:=Y[1,2]; G[2*p2,2*p2]:=Y[4,4]; G[2*p2-1,2*p2-1]:=Y[3,3]; G[2*p2,2*p2-1]:=Y[4,3]; G[2*p2-1,2*p2]:=Y[3,4]; G[2*p2,2*p1]:=Y[4,2]; G[2*p2-1,2*p1-1]:=Y[3,1]; G[2*p2,2*p1-1]:=Y[4,1]; G[2*p2-1,2*p1]:=Y[3,2]; G[2*p1,2*p2]:=Y[2,4]; G[2*p1-1,2*p2-1]:=Y[1,3]; G[2*p1,2*p2-1]:=Y[2,3]; G[2*p1-1,2*p2]:=Y[1,4]; end Local_Global; |
Pertemuan IV (2 Desember 2020)
Pertemuan keempat bersama Pak Dai, saya dan mahasiswa lain membahas tentang tugas yang diberikan di pekan sebelumnya, yaitu Tugas 3. Setelah membandingkan berbagai cara pengerjaan yang dipaparkan oleh beberapa teman saya, saya merasa masih perlu belajar lebih giat agar mampu memahami dan bisa mengerjakan jenis soal lainnya.
Kuis Flowchart dan Class Diagram
Kami diberi kuis untuk membuat flowchart proses penyelesaian soal Tugas 3.
Berikut adalah flowchart yang saya buat:
Tugas 4
Di akhir kelas, kami diberi tugas untuk membuat flowchart, class diagram, dan program sederhana menggunakan aplikasi OpenModelica untuk menyelesaikan soal berikut:
Berikut adalah flowchart dan class diagram yang saya buat:
Berikut adalah program yang saya buat:
Class class Tugas4_d29 parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5; 2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5; 3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5]; parameter Integer [:,2] node = [1, 2; 1, 3; 1, 4]; parameter Integer y = size(node,1); parameter Integer x = 3*(size(node_load,1)); parameter Integer z = size(Boundary,1); parameter Integer [:] Boundary = {2,3,4}; parameter Real [:,4] node_load = [1, 0, -5000, 0; 2, 0, 0, 0; 3, 0, 0, 0; 4, 0, 0, 0]; parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Real [y] k; Real [y,6,6] Ke; Real [y,x,x] Kg; Real [x,x] KgTot; Real [x,x] KgB; Real [x] U; Real [x] R; equation k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y}; Ke = StiffnessMatrixElement(inisiasi); Kg = StiffnessMatrixGlobal(node, x, y, Ke); KgTot = SumStiffnessMatrixGlobal(x, y, Kg); KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary); U = GaussJordan(x, KgB, load); R = ReactionForce(x, KgTot, U, load); end Tugas4_d29; |
Function StiffnessMatrixElement function StiffnessMatrixElement input Real [:,9] 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)] k_vec; algorithm k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) 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,4]; cos_y := inisiasi_mat[i,5]; cos_z := inisiasi_mat[i,6]; // {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; |
Function StiffnessMatrixGlobal function StiffnessMatrixGlobal input Integer [:,2] n; input Integer x; input Integer y; input Real [y,6,6] Ke_mat; output Real [y,x,x] Kg_mat; algorithm for i in 1:y loop for a in 1:x loop for b in 1:x loop Kg_mat[i,a,b]:=0; end for; end for; end for; for i in 1:y 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; |
Function SumStiffnessMatrixGlobal function SumStiffnessMatrixGlobal input Integer x; input Integer y; input Real [y,x,x] Kg_mat; output Real [x,x] KgTot_mat; algorithm for a in 1:x loop for b in 1:x loop KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); end for; end for; end SumStiffnessMatrixGlobal; |
Function BoundaryStiffnessMatrixGlobal function BoundaryStiffnessMatrixGlobal input Integer x; input Integer z; input Real [x,x] KgTot_met; input Integer[z] Boundary_met; output Real [x,x] KgB_met; algorithm for a in 1:x loop for b in 1:x loop KgB_met[a,b] := KgTot_met [a,b]; end for; end for; for i in 1:x loop for a in 1:z loop for b in 0:2 loop KgB_met[3*(Boundary_met[a])-b,i]:=0; end for; end for; end for; for a in 1:z loop for b in 0:2 loop KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1; end for; end for; end BoundaryStiffnessMatrixGlobal; |
Function GaussJordan function GaussJordan input Integer x; input Real [x,x] KgB_met; input Real [x] load_met; output Real [x] U_met; protected Real float_error = 10e-10; algorithm U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); for i in 1:x loop if abs(U_met[i]) <= float_error then U_met[i] := 0; end if; end for; end GaussJordan; |
Function ReactionForce function ReactionForce input Integer x; input Real [x,x] KgTot_met; input Real [x] U_met; input Real [x] load_met; output Real [x] R_met; algorithm R_met := (KgTot_met*U_met)-load_met; end ReactionForce; |
Berikut adalah hasil jawaban dari soal, yaitu:
- U = displacement
- R = gaya reaksi
Berikut adalah video yang saya buat mengenai penjelasan setiap function:
Pertemuan V (16 Desember 2020)
Aplikasi Metode Numerik dalam Kasus Optimisasi
Tugas Besar
Kami diberi tugas besar berupa aplikasi metode numerik dalam optimasi desain statika struktur rangka sederhana (space truss/3D).
Kami diminta untuk mendesain suatu rangka dengan biaya serendah mungkin tetapi dengan kualitas yang maksimal. Terdapat beberapa variabel yang perlu diperhatikan, yaitu:
- Harga material
- Jenis material
- Luas Cross Section
- Penampang yang digunakan
Langkah selanjutnya adalah melakukan optimasi dan membentuk kurva efisiensi harga dengan curve fitting menggunakan metode numerik.