Difference between revisions of "Muhammad Rasyaad Dzaky"

From ccitonlinewiki
Jump to: navigation, search
(45 intermediate revisions by the same user not shown)
Line 1: Line 1:
Mahasiswa Teknik Mesin angkatan 2017
+
[[File:Rasyaad.jpg|175px|thumb|right]]
 +
== Profil ==
 +
Saya adalah mahasiswa Teknik Mesin angkatan 2017
  
Beberapa materi metode numerik yang telah diajarkan dari kelas sebelum UTS :
+
NPM :1706036425
Interpolasi , Ekstrapolasi, Regresi, Metode Newton Rhapson, pseudo code
+
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
== 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
 +
<youtube width="200" height="100">wrmc1kHsHaA</youtube>
 +
 
 +
 
 +
== 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.
 +
<youtube width="200" height="100">zgCRI2zMrDs</youtube>
 +
 
 +
 
 +
== Tugas 3 ==
 +
Dalam Tugas ketiga ini, diberikan permasalahan truss yang akan diselesaikan dengan menggunakan Open modelica
 +
 
 +
[[File:Soal Trusses 2 Jos.jpg]]
 +
[[File:PR hal 1.JPG|thumb|left|]]
 +
[[File:PR hal 2.JPG|thumb|left|]]
 +
[[File:PR hal 3.JPG|thumb|left|]]
 +
[[File:PR hal 4.JPG|thumb|left|]]
 +
[[File:PR hal 5.JPG|thumb|left|]]
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
== Quiz dan Diagram FlowChart==
 +
[[File:Kuis Rasyaad.jpg|300px|]]
 +
 
 +
 
 +
==Tugas 4==
 +
 
 +
[[File:Pr4tin.jpeg|300px|]]
 +
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.
 +
 
 +
 
 +
{| class="wikitable"
 +
|-
 +
| style="width: 18cm;"|
 +
'''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.
 +
 
 +
[[File:Truss rangka.png|400px]]
 +
 
 +
 
 +
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;
 +
 
 +
'''Golden Ratio'''
 +
 
 +
  model Opt_Gold
 +
  parameter Real xd[:];
 +
  parameter Real yd[size(xd,1)];
 +
  parameter Real xlo=87e-6;
 +
  parameter Real xhi=504e-6;
 +
  parameter Integer N=10; // maximum iteration
 +
  parameter Real es=0.0001; // maximum error
 +
  Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3];
 +
  Real xopt,  fx;
 +
  '''protected'''
 +
  Real d, xl, xu, xint, R=(5^(1/2)-1)/2;
 +
  '''algorithm'''
 +
  xl := xlo;
 +
  xu := xhi;
 +
  y  := Curve_Fitting(xd,yd);
 +
  for i in 1:N loop
 +
    d:= R*(xu-xl);
 +
    x1[i]:=xl+d;
 +
    x2[i]:=xu-d;
 +
    f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3];
 +
    f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3];
 +
    xint:=xu-xl;
 +
 +
if f1[i]>f2[i] then
 +
  xl:=x2[i];
 +
  xopt:=x1[i];
 +
  fx:=f1[i];
 +
  else
 +
    xu:=x1[i];
 +
    xopt:=x2[i];
 +
    fx:=f2[i];
 +
    end if;
 +
  ea[i]:=(1-R)*abs((xint)/xopt);
 +
  if ea[i]<es then
 +
  break;
 +
  end if;
 +
  end for;
 +
  end Opt_Gold;
 +
 
 +
 
 +
'''Pilihan Material'''
 +
 
 +
Saya memilih material SS304 karena cukup umum digunakan dalam industri dan dalam pengerjaan ini saya menggunakan metode yang memvariasikan luas area dari material tersebut untuk nantinya dioptimisasi dan diperoleh nilai optimumnya
 +
 
 +
 
 +
[[File: PTBR1.JPG]]
 +
 
 +
Dari data tersebut lalu dimasukkan ke dalam coding openmodelica yang telah ditulis diawal untuk memperoleh data stressnya, yang berikutnya dimasukkan dalam tabel dibawah ini
 +
 
 +
[[File: PTBR3.JPG]]
 +
 
 +
Sebelumnya, data harga dari material SS304 ini dicari terlebih dahulu dengan ketebalan tertentunya. Dan karena tidak semua ketebalan tersedia datanya maka dilakukan curve fitting untuk menutup data yang kurang dari tiap ketebalan material tersebut. proses ini dilakukan dengan menggunakan open modelica sehingga menghasilkan koefisien yang akan digunakan untuk menghitung data yang kurang tersebut sehingga dihasilkan data yang lengkap tiap ketebalannya seperti tabel diatas
 +
 
 +
[[File: PTBR2.JPG]]
 +
 
 +
Berikutnya data dari cost curve fitting dikalikan dengan total panjang yang dibutuhkan untuk membentuk frame yang diberikan sehingga diperoleh total harganya
 +
 
 +
[[File: PTBR4.JPG]]
 +
 
 +
Terakhir digunakan program excel untuk menentukan optimisasi dengan variabel antara rasio safety factor per harga dan total harga yang dibutuhkan untuk membentuk frame tersebut, dengan komponen sumbu x merupakan nilai variasi luas area dari truss tersebut
 +
 
 +
Titik potong tersebut merupakan hasil yang merupakan nilai paling optimal dari kedua variabel tersebut jika menggunakan material SS304
 +
 
 +
Maka nilai yang paling mendekati titik optimal dari material SS304 adalah yang memiliki area berkisar 0.000864 m^2
 +
 
 +
 
 +
 
 +
 
 +
== UAS ==
 +
[[File: 1540.jpg]]
 +
[[File: 1541.jpg]]
 +
[[File: 1542.jpg]]
 +
[[File: 1543.jpg]]

Revision as of 22:55, 14 January 2021

Rasyaad.jpg

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

Soal Trusses 2 Jos.jpg

PR hal 1.JPG
PR hal 2.JPG
PR hal 3.JPG
PR hal 4.JPG
PR hal 5.JPG


























































Quiz dan Diagram FlowChart

Kuis Rasyaad.jpg


Tugas 4

Pr4tin.jpeg 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.

Truss rangka.png


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;

Golden Ratio

 model Opt_Gold
  parameter Real xd[:];
  parameter Real yd[size(xd,1)];
  parameter Real xlo=87e-6;
  parameter Real xhi=504e-6; 
  parameter Integer N=10; // maximum iteration
  parameter Real es=0.0001; // maximum error
 Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3];
 Real xopt,  fx;
 protected
 Real d, xl, xu, xint, R=(5^(1/2)-1)/2;
  algorithm
  xl := xlo; 
  xu := xhi;
  y  := Curve_Fitting(xd,yd);
  for i in 1:N loop
   d:= R*(xu-xl);
   x1[i]:=xl+d;
    x2[i]:=xu-d;
    f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3];
    f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3];
   xint:=xu-xl;

if f1[i]>f2[i] then
  xl:=x2[i];
  xopt:=x1[i];
  fx:=f1[i];
  else
    xu:=x1[i];
    xopt:=x2[i];
    fx:=f2[i];
   end if;
  ea[i]:=(1-R)*abs((xint)/xopt);
 if ea[i]<es then
  break;
 end if;
 end for;
 end Opt_Gold;


Pilihan Material

Saya memilih material SS304 karena cukup umum digunakan dalam industri dan dalam pengerjaan ini saya menggunakan metode yang memvariasikan luas area dari material tersebut untuk nantinya dioptimisasi dan diperoleh nilai optimumnya


PTBR1.JPG

Dari data tersebut lalu dimasukkan ke dalam coding openmodelica yang telah ditulis diawal untuk memperoleh data stressnya, yang berikutnya dimasukkan dalam tabel dibawah ini

PTBR3.JPG

Sebelumnya, data harga dari material SS304 ini dicari terlebih dahulu dengan ketebalan tertentunya. Dan karena tidak semua ketebalan tersedia datanya maka dilakukan curve fitting untuk menutup data yang kurang dari tiap ketebalan material tersebut. proses ini dilakukan dengan menggunakan open modelica sehingga menghasilkan koefisien yang akan digunakan untuk menghitung data yang kurang tersebut sehingga dihasilkan data yang lengkap tiap ketebalannya seperti tabel diatas

PTBR2.JPG

Berikutnya data dari cost curve fitting dikalikan dengan total panjang yang dibutuhkan untuk membentuk frame yang diberikan sehingga diperoleh total harganya

PTBR4.JPG

Terakhir digunakan program excel untuk menentukan optimisasi dengan variabel antara rasio safety factor per harga dan total harga yang dibutuhkan untuk membentuk frame tersebut, dengan komponen sumbu x merupakan nilai variasi luas area dari truss tersebut

Titik potong tersebut merupakan hasil yang merupakan nilai paling optimal dari kedua variabel tersebut jika menggunakan material SS304

Maka nilai yang paling mendekati titik optimal dari material SS304 adalah yang memiliki area berkisar 0.000864 m^2



UAS

1540.jpg 1541.jpg 1542.jpg 1543.jpg