Muhammad Rasyaad Dzaky
Contents
Profil
Saya adalah mahasiswa Teknik Mesin angkatan 2017
NPM :1706036425
Materi Yang Telah dipelajari
Pada setengah semester sebelumnya kelas metode numerik 02 diajar oleh Pak Engkos. Beberapa materi metode numerik yang telah saya pahami dari kelas sebelum UTS diantaranya adalah:
- Interpolasi
- Ekstrapolasi
- Regresi
- Metode Newton Rhapson
- pseudo code
Pertemuan 11 November 2020
Salah satu fungsi dari mempelajari metode numerik yaitu untuk memahami bagaimana dasar dari sebuah aplikasi yang berfungsi untuk memudahkan komputasi sehingga dalam menjalankannya pengguna mengerti dan mengetahui bagaimana cara menggunakan aplikasi komputasi tersebut untuk menyelesaikan permasalahan yang kompleks dan memaksimalkan penggunaan aplikasi tersebut.
Disamping itu tujuan dari belajar Metode numerik ini adalah:
- Memahami konsep-konsep dan prinsip-prinsip dasar dalam metode numerik
- Mengerti aplikasi metode numerik.
- Mampu menerapkan metode numerik dallam persoalan teknik.
- Mendapat nilai tambah/adab sehingga kita menjadi orang yang lebih beradab.
Tugas 1
Dalam tugas pertama ini saya perlu untuk mempelajari aplikasi openmodelica, dan membuat video youtube mengenai apa yang telah dipelajari. Berikut link mengenai penggunaan openmodelica untuk menyelesaikan sebuah persamaan sederhana
Pertemuan 18 November 2020
Dalam pertemuan kedua ini saya belajar mengenai penggunaan laman Class dan Function dalam openmodelica, kedua laman tersebut dapat panggil antara satu sama lain ke laman yang lain untuk digunakan sesuai kebutuhan. Saya berlatih menggunakan kedua laman ini untuk membuat laman fungsi yang berisi suatu variabel yang dinamai xtambahsepuluh dibagian fungsinya. Dan laman class diisi dengan besar nilai x-nya sehingga jika disimulasikan nanti hasilnya sesuai yaitu besar nilai variabel x yang dimasukkan sesuai keinginan dan nilainya ditambah dengan sepuluh. Disamping itu dijelaskan juga mengenai kelebihan openmodelica yaitu :
- Merupakan opensource software (gratis)
- Banyak penggunanya (mempermudah untuk bertanya jawab dengan pengguna lain)
- Menggunakan bahasa C++ (pengguna yang tidak memahami bahasa pemrograman tetap bisa menggunakannya dengan mudah)
- Banyak Simulasi yang tersedia sehingga dapat dikombinasikan untuk menyelesaikan permasalahan yang kompleks
Tugas 2
Dalam tugas kedua ini saya menyelesaikan matriks dengan menggunakan openmodelica, pertama tama saya membuat laman class yang berfungsi untuk memasukkan data dalam matriks tersebut, berikutnya saya membuat laman function untuk memasukkan code dari pengerjaan matriks tersebut, lalu function tersebut dipangil ke dalam laman class untuk digunakan dalam menyelesaikan permasalahan matriksnya.
Tugas 3
Dalam Tugas ketiga ini, diberikan permasalahan truss yang akan diselesaikan dengan menggunakan Open modelica
Quiz dan Diagram FlowChart
Tugas 4
Dalam tugas 4 ini diberikan permasalahan mengenai truss yang bersifat 3D, untuk prinsip pengerjaannya mirip seperti permasalahan truss yang 2D, pertama tama yang harus dilakukan yaitu membuat kelas trusses yang berisi matriks gaya, berikutnya membuat fungsi matriks kekakuan, lalu membuat fungsi matriks global, dan terakhir menyelesaikannya dengan menggunakan gauss jordan dan membuat matriks reaksi.
Master class Trusses3D //define initial variable parameter Integer Points=4; //Number of Points parameter Integer Trusses=3; //Number of Trusses parameter Real Area=0.0015; //Area parameter Real Elas=70e9; //Elasticity //define connection parameter Integer C[Trusses,2]=[1,2; 1,3; 1,4]; //define coordinates (please put orderly) parameter Real P[Points,3]=[2,0,0; 0,0,1.5; 0,0,-1.5; 0,1.5,0]; //define external force (please put orderly) parameter Real F[Points*3]={0,-5000,0, 0,0,0, 0,0,0, 0,0,0}; //define boundary parameter Integer b[:]={2,3,4}; //solution Real displacement[N], reaction[N]; protected parameter Integer N=3*Points; Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b); Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), err=10e-10, cx, cy, cz, L, E, X[3,3]; 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 Constant L:=Modelica.Math.Vectors.length(q2-q1); E:=Area*Elas/L; //Solving Matrix cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=E*[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 i in boundary loop for j in 1:N loop G[i,j]:=id[i,j]; end for; 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; end Trusses3D; |
Tugas Besar
Tujuan dari tugas besar ini yaitu untuk melakukan pemilihan material terhadap rangka dengan bentuk seperti gambar dibawah yang dilakukan melalui optimisasi berdasarkan materi yang telah diajarkan.
Dalam menyelesaikan tugas besar ini terdapat dua variabel sebagai penentu dalam melakukan optimasi yaitu elastisitas dan luas penampang. kedua variabel ini akan dilakukan optimasi sehingga diperoleh material yang paling cocok dengan harga yang paling murah tanpa meninggalkan aspek safety
Asumsi
- Menggunakan trusses sehingga beban terdistribusi merata
- Tumpuan truss fixed
- Tidak ada bending yang diakibatkan oleh beban
Coding Openmodelica
model Tugas_Besar_Truss //Data tersedia parameter Integer Points=size(P,1); //Jumlah titik parameter Integer Trusses=size(C,1); //Jumlah Truss parameter Real Yield= (nilai yield strength) ; //Yield Strength Material parameter Real Area= (nilai luas) ; //Luas Siku Material parameter Real Elas= (elastisitas) ; //Elastisitas Material //define connection parameter Integer C[Trusses,2]=[1,5; //vertical 1st floor 2,6; //ver 1st floor 3,7; //ver 1st floor 4,8; //ver 1st floor 5,6; //horizontal 1st floor 6,7; //hor 1st floor 7,8; //hor 1st floor 5,8; //hor 1st floor 5,9; //ver 2st floor 6,10; //ver 2st floor 7,11; //ver 2st floor 8,12; //ver 2st floor 9,10; //hor 2st floor 10,11; //hor 2st floor 11,12; //hor 2st floor 9,12; //hor 2st floor 9,13; //ver 3t floor 10,14; //ver 3st floor 11,15; //ver 3st floor 12,16; //ver 3st floor 13,14; //hor 3st floor 14,15; //hor 3st floor 15,16; //hor 3st floor 13,16]; //hor 3st floor //Koordinat titik 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 //External force pada titik 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}; //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 // 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; //Matriks Penyelesaian 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]; //Transformasi ke 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; //Boundary condition 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; //PenyelesaianDisplacement displacement:=Modelica.Math.Matrices.solve(G,F); //Penyelesaian Reaksi 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; //Perhitungan Stress di tiap 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 Tugas_Besar_Truss
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;