Metnum 03 - Muhammad Fairuz Daffa

From ccitonlinewiki
Revision as of 12:12, 4 January 2021 by Fairuzdaffa (talk | contribs) (Tugas Besar)
Jump to: navigation, search
20200331 210947.jpg

Biodata

Nama: Muhammad Fairuz Daffa

NPM: 1806181716

Kelas: Metnum 03


Materi Sebelum UTS

Sebelum UTS, kelas metnum 03 diajar oleh Pak Engkos, sebelum uts saya sendiri belajar mengenai:


1. Turunan Numerik

Turunan numerik terbagi 3 yaitu:

1. Turunan Maju (Forward)

Turunanmaju.JPG

2. Turunan Mundur (Backward)

Turunanmundur.JPG

3. Turunan Pusat (Centered)

Turunanpusat.JPG

Dari ketiga metode turunan ini, metode turunan pusat atau centered memiliki kemungkinan error yang paling kecil.

2. Pencarian Akar - Akar Persamaan

Untuk mencari akar - akar persamaan dapat digunakan 2 cara cara yaitu:

1. Close method (Bracketing) : Terdiri dari graphical method, false position dan bisection

2. Open method : Terdiri dari newton raphson, secant, dan simple fix point

3. Interpolasi dan Regresi

Interpolasi adalah metode menghasilkan titik-titik data baru dalam suatu jangkauan dari suatu set diskret data-data yang diketahui.

Regresi adalah salah satu metode untuk menentukan hubungan sebab-akibat antara variabel dengan variabel lainnya.


Pertemuan tanggal 9 November 2020

Pada oertemuan ini Pak Dai menginstruksikan mahasiswa untuk mendownload software open modelica untuk pengaplikasian dari mata kuliah metode numerik, dan juga meminta kita untuk mempelajari software open modelica melalui video tutorial dari youtube, dan membuat video youtube berisikan kami mempelajari atau mengaplikasikan ilmu dari video tutorial yang sudah kita tonton.

Saya mempelajari software openmodelica dari tautan dibawah ini

 https://youtu.be/Dw66ODbMS2A


Pertemuan Kedua, Tanggal 16 November 2020

Pada pertemuan ini, pak DAI mengevaluasi tugas kita satu per satu. Lalu sambil menunggu satu per satu di interview, pak DAI memberikan arahan untuk membuat program sederhana di software openmodelica.

Pertama pak DAI mengajarkan untuk membuat program untuk meenghitung penambahan sepuluh terhadap suatu angka (x+10).


Kedua pak DAI menginstruksikan untuk membuat program yang bertujuan untuk menghitung nilai rata - rata dari beberapa kumpulan data. Berikut adalah simulasi yang saya coba

Openmodelica meandaffa.JPG

Tugas Pertemuan 2

Pada tugas ini pak DAI menginstruksikan untuk membuat program yang bisa mensolve permasalahan aljabar simultan. Pada tugas ini saya membuat program untuk menyelesaikan persamaan matriks dengan metode gauss jordan.

1. Soal yang saya gunakan adalah sebagai berikut.

Soalgaussjordandaffa.JPG

2. Saya menggunakan fitur function dan class untuk menyelesaikan persamaan gauss jordan diatas.

3. Pada function saya menggunakan formula sebagai berikut:

Functiongaussjordandaffa.JPG

4. Untuk class saya menggunakan formula sebagai berikut:

Classgaussjordandaffa.JPG

5.Setelah itu saya lakukan pengecekan terhadap formula tersebut, didapat hasil sebagai berikut

Checkgaussjordandaffa.JPG

6. Lalu setelah pengecekan berhasil, saya melakukan simulasi, lalu didapat hasil sebagai berikut

Hasilgaussjordandaffa.JPG

7. Hasil yang didapat adalah x1 = 1; x2 = 4; x3 = -2


Pertemuan 3: Senin, 23 November 2020

Pada pertemuan ini kita disuruh mensolve soal dari buku sebagai berikut:

Soalspringmass.JPG

Tugas 3


Pada tugas ini kita disuruh mensolve soal dibuku sebagai berikut:

Soaltrusses.JPG

Pada tugas ini kami diminta untuk menghitung defleksi pada setiap batang dan gaya reaksinya.

Pertama saya mencari deltaL atau displacement dari setiap batang menggunakan open modelica. Dengan coding sebagai berikut:

DeltaL1.JPG
DeltaL2.JPG
DeltaL3.JPG

Lalu didapat hasil sebagai berikut:

Hasil displacerment.JPG
Hasil displacerment1.JPG
Hasil displacerment2.JPG

Kedua saya mencari nilai U dengan rumus RG x U = F, jika di translate ke coding maka akan menjadi

NilaiU.jpg

Lalu didapat hasil sebagai berikut

NilaiUhasil.JPG

Ketiga saya mencari R menggunakan openmodelica dengan rumus R = (K x U) - F, jika di translate ke coding maka akan menjadi sebagai berikut:

Reactionforce.JPG

Lalu hasil yang saya dapat adalah sebagai berikut:

Hasilreactionforce.JPG


Pertemuan 4: Senin, 30 November 2020

Pada pertemuan ini pak DAI menjelaskan perbedaan antara statika struktur dan dinamika struktur.


QUIZ

Soalquiz1.jpg
Soalquiz2.jpg

Berikut adalah flowchart saya dalam mengerjakan soal

516830.jpg


Nomor 1


Class
class no1Quiz
// DECLARATIONS
// Data for each member: [element #, node i, node j, theta, area, modulus, length]
// SI Units: [integer, integer, integer, degrees, meters^2, pascals, meters]
// Imperial Units: [integer, integer, integer, degrees, inches^2, lb/inches, inches]
parameter Real [:,7] member = [1, 1, 2,   0, 8, 1.9e6, 36;
                               2, 2, 3, 135, 8, 1.9e6, 50.9;
                               3, 3, 4,   0, 8, 1.9e6, 36;
                               4, 2, 4,  90, 8, 1.9e6, 36;
                               5, 2, 5,  45, 8, 1.9e6, 50.9;
                               6, 4, 5,   0, 8, 1.9e6, 36];

// External loads for each node: [node #, FX, FY]
parameter Real [:,3] node_load = [1, 0, 0;
                                  2, 0, 0;
                                  3, 0, 0;
                                  4, 0, -500;
                                  5, 0, -500];

// Vector for equivalent stiffness constant of each member
Real [size(member,1)] k;

// Array for Stiffness Matrix
Real [size(member,1),4,4] Ke;

equation
// Calculate stiffness constants for each member element
k = {(member[i,5] * member[i,6] / member[i,7]) for i in 1:size(member,1)};

// Find stiffness matrix for each element
Ke = stiffnesselement(member);

end no1Quiz;


Matriks Elemen
function stiffnesselement
input Real [:,7] beam_mat;
output Real [size(beam_mat,1),4,4] Ke_mat;

protected
Real theta;
Real [3] StiffTrig;
Real [4,4] StiffTransformation;
Real [size(beam_mat,1)] k_vec;
Real float_error = 10e-10;

algorithm

k_vec := {(beam_mat[i,5] * beam_mat[i,6] / beam_mat[i,7]) for i in 1:size(beam_mat,1)};

// Finding stiffness matrix of each element member
for i in 1:size(beam_mat,1) loop

  // Clearing the matrices
  StiffTrig := zeros(3);
  StiffTransformation := zeros(4,4);
  
  // Converting degrees to radians
  theta := Modelica.SIunits.Conversions.from_deg(beam_mat[i,4]);

  // {cos^2, sin^2, sincos}
  StiffTrig := {(Modelica.Math.cos(theta))^2,
                (Modelica.Math.sin(theta))^2,
                (Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
  
  // Handle float error elements in StiffTrig
  for t in 1:size(StiffTrig,1) loop
    if abs(StiffTrig[t]) <= float_error then
      StiffTrig[t] := 0;
    end if;
  end for;
  
  // Construct stiffness transformation matrix
  StiffTransformation := [  StiffTrig[1],    StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
                   StiffTrig[3],    StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
                -1*StiffTrig[1], -1*StiffTrig[3],    StiffTrig[1],    StiffTrig[3];
                -1*StiffTrig[3], -1*StiffTrig[2],    StiffTrig[3],    StiffTrig[2]];
  
  // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
  for m in 1:4 loop
    for n in 1:4 loop
      Ke_mat[i,m,n] := k_vec[i] * StiffTransformation[m,n];
    end for;
  end for;

end for;
end stiffnesselement;

Pertemuan 5: Senin, 7 Desember 2020

Pada pertemuan ini, pak DAI membahas tentang soal quiz yang telah diberikan. Teman saya, Ahmad Mohammad Fahmi menjelaskan tentang coding yang dia buat dari awal sampai akhir. Namun, coding dari Fahmi masih ada yang kurang, karena total gaya pada ketiga sumbu untuk soal nomor 8 masih belum sama dengan 0.

Pak DAI menginstruksikan kita untuk bertanya kepada fahmi terkait hal yang belum dimengerti. Lalu pak DAI memberikan soal lagi dan menginstruksikan untuk memakai coding dari fahmi untuk mengerjakan soal tersebut. Lalu kami semua mencoba mengerjakan. Lalu pak DAI menginstruksikan untuk memberikan feedback terhadap codingan yang dibuat fahmi, dan memperbaikinya jika bisa.


Tugas Besar

Tugas Besar Metnum Geometri Jos.jpg

Asumsi yang digunakan untuk melakukan perhitungan ini antara lain:

Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.

Beban akan terdistribusi hanya pada node (karena bersifat trusses).

Safety factor minimal bernilai 2.

Batas displacement 0,001 m sebelum buckling (pada truss paling atas).


Metodologi


Untuk jenis material yang sama:

1. Mencari harga untuk 4 ukuran batang dengan material yang sama yaitu SS304.

2. Menghitung nilai safety factor pada 4 ukuran batang dengan coding dari software openmodelica

3. Mencari rasio antara safety factor dengan harga total.

4. Membuat persamaan antara rasio (safe/harga) dengan area dengan metode curve fitting.

5. Melakukan optimasi menggunakan metode golden section.


Untuk area penampang yang sama:

1. Mencari harga untuk 4 jenis material dengan area penampang yang sama yaitu 171 mm^2.

2. Mengitung nilai safety factor pada 4 jenis batang dengan coding dari software openmodelica

3. Mencari rasio antara safety factor dengan harga total.

4. Membuat persamaan antara rasio (safe/harga) dengan jenis material dengan metode curve fitting.

5. Melakukan optimasi menggunakan metode golden section.


Data yang Digunakan


Dataygdigunakan.JPG

Referensi data:

https://www.tokopedia.com/kingsteelid

https://wijayamakmur.com/siku/

https://www.azom.com/


Codingan


Mencari Safety Factors
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=1.7e9; //Yield Strength (Pa)
parameter Real Area=0.0011;   //Area L Profile (m2)
parameter Real Elas=1.93e11;     //Elasticity SAE 316L  (Pa)

//define connection
parameter Integer C[:,2]=[1,5; 
                                2,6;
                                3,7;
                                4,8;
                                5,6;  //1st floor
                                6,7;  //1st floor
                                7,8;  //1st floor
                                5,8;  //1st floor
                                5,9;
                                6,10;
                                7,11;
                                8,12;
                                9,10; //2nd floor
                                10,11;//2nd floor 
                                11,12;//2nd floor
                                9,12; //2nd floor
                                9,13;
                                10,14;
                                11,15;
                                12,16;
                                13,14;//3rd floor
                                14,15;//3rd floor
                                15,16;//3rd floor
                                13,16];//3rd floor
                                                              
//define coordinates (please put orderly)
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1;     //1
                            -0.3,-0.375,0,1,1,1;    //2
                            -0.3,0.375,0,1,1,1;     //3
                            0.3,0.375,0,1,1,1;      //4
                            
                            0.3,-0.375,0.6,0,0,0;   //5
                            -0.3,-0.375,0.6,0,0,0;  //6
                            -0.3,0.375,0.6,0,0,0;   //7
                            0.3,0.375,0.6,0,0,0;    //8
                            
                            0.3,-0.375,1.2,0,0,0;   //9
                            -0.3,-0.375,1.2,0,0,0;  //10  
                            -0.3,0.375,1.2,0,0,0;   //11
                            0.3,0.375,1.2,0,0,0;    //12
                            
                            0.3,-0.375,1.8,0,0,0;   //13
                            -0.3,-0.375,1.8,0,0,0;  //14
                            -0.3,0.375,1.8,0,0,0;   //15
                            0.3,0.375,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}; 

//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-10, ers=10e-4;

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;


Curve Fitting
function 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);
//Coe:=fill(2,size(Coe,1));

end Curve_Fitting;
Golden Section
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;


Hasil


Berikut adalah tabel lengkap dari data yang didapat dari internet:

Hasildaffa.JPG

Berikut adalah hasil yang saya dapat dari codingan diatas.

Hasilarealocked.JPG
Hasilelasticitylocked.JPG