Difference between revisions of "Rai Zulfikar Satriagama"

From ccitonlinewiki
Jump to: navigation, search
(UAS Metode Numerik (13-1-2021))
 
(149 intermediate revisions by the same user not shown)
Line 20: Line 20:
  
 
==Metode Numerik==
 
==Metode Numerik==
 
+
Metode Numerik merupakan mata kuliah yang saya ambil pada semester tiga ini. Metode numerik mempelajari teknik penyelesaian yang diformulasikan secara matematis dengan cara operasi hitungan. Pelajaran metode numerik menurut saya menarik karena saya jadi tahu asal mula regresi linear.  
'''Metode Numerik''' merupakan mata kuliah yang saya ambil pada semester tiga ini. Metode numerik mempelajari teknik penyelesaian yang diformulasikan secara matematis dengan cara operasi hitungan. Pelajaran metode numerik menurut saya menarik karena saya jadi tahu asal mula regresi linear.  
 
 
Materi yang saya dapatkan dari Bapak Dr. Ir. Engkos A. Kosasih, M.T. sebelum UTS adalah  
 
Materi yang saya dapatkan dari Bapak Dr. Ir. Engkos A. Kosasih, M.T. sebelum UTS adalah  
  
Line 34: Line 33:
 
5. Interpolasi
 
5. Interpolasi
  
==Review Pertemuan dan Tugas==
+
==Rabu, 10-11-2020==
 
 
'''Rabu, 10-11-2020'''
 
 
 
 
Tujuan mempelajari metode numerik adalah:  
 
Tujuan mempelajari metode numerik adalah:  
  
Line 48: Line 44:
 
4.Mendapat nilai tambah/adab sehingga kita menjadi orang yang lebih beradab.
 
4.Mendapat nilai tambah/adab sehingga kita menjadi orang yang lebih beradab.
  
 
+
*'''Tugas 1'''
Tugas Pertama
 
  
 
Tugas pertama yang diberikan oleh Bapak Dr. Ir. Ahmad Indra Siswantara adalah membuat video tentang aplikasi open modelica. Pada tugas kali ini saya membuat video pengaplikasian rumus fisika (momen inersia) pada open modelica. Berikut merupakan video tugas pertama:
 
Tugas pertama yang diberikan oleh Bapak Dr. Ir. Ahmad Indra Siswantara adalah membuat video tentang aplikasi open modelica. Pada tugas kali ini saya membuat video pengaplikasian rumus fisika (momen inersia) pada open modelica. Berikut merupakan video tugas pertama:
 
<youtube width="200" height="100">https://youtu.be/1jCIpqQIW1A</youtube>
 
<youtube width="200" height="100">https://youtu.be/1jCIpqQIW1A</youtube>
  
 
+
==Rabu, 17-11-2020==
'''Rabu, 17-11-2020'''
 
  
 
Pada pertemuan kedua kelas Metode Numerik membahas mengenai tugas pertama yang sudah dikerjakan, beberapa mahasiswa mempresentasikan hasil tugasnya. Lalu kelas dilanjut dengan Pak Dai menjelaskan mengenai perbedaan dan fungsi dari model, class, dan fuction. Pak Dai berpesan bahwa kita sebagai manusia harus memiliki perubahan positif setiap harinya, hari ini harus lebih baik dari hari kemarin. Aplikasi open modelica ini free dan tidak berbayar sehingga dapat digunakan oleh siapa saja yang ingin belajar. Open Modelica mempunyai beberapa fitur, seperti membuat model, class, function, dan lain-lain. Aplikasi ini berupa object oriented, kita bisa membuat beberapa class fungsi dan class eksekusi, kemudian menggabungkannya menjadi satu model.
 
Pada pertemuan kedua kelas Metode Numerik membahas mengenai tugas pertama yang sudah dikerjakan, beberapa mahasiswa mempresentasikan hasil tugasnya. Lalu kelas dilanjut dengan Pak Dai menjelaskan mengenai perbedaan dan fungsi dari model, class, dan fuction. Pak Dai berpesan bahwa kita sebagai manusia harus memiliki perubahan positif setiap harinya, hari ini harus lebih baik dari hari kemarin. Aplikasi open modelica ini free dan tidak berbayar sehingga dapat digunakan oleh siapa saja yang ingin belajar. Open Modelica mempunyai beberapa fitur, seperti membuat model, class, function, dan lain-lain. Aplikasi ini berupa object oriented, kita bisa membuat beberapa class fungsi dan class eksekusi, kemudian menggabungkannya menjadi satu model.
  
Tugas Kedua
+
*'''Tugas 2'''
  
 
Tugas kedua adalah dengan menggunakan aplikasi Open Modelica buatlah kelas fungsi aljabar simultan dengan variable array dan memanggil fungsi tersebut. Pada tugas ini saya memakai soal yang didapat dari internet mengenai sistem persamaan linear menggunakan metode eliminasi gauss. Berikut merupakan video tugas kedua:
 
Tugas kedua adalah dengan menggunakan aplikasi Open Modelica buatlah kelas fungsi aljabar simultan dengan variable array dan memanggil fungsi tersebut. Pada tugas ini saya memakai soal yang didapat dari internet mengenai sistem persamaan linear menggunakan metode eliminasi gauss. Berikut merupakan video tugas kedua:
 
<youtube width="200" height="100">https://youtu.be/DquH7sgaw5A</youtube>
 
<youtube width="200" height="100">https://youtu.be/DquH7sgaw5A</youtube>
  
 +
==Rabu, 25-11-2020==
 +
 +
Pada pertemuan ketiga metode numerik ini diawali dengan review tugas yang telah diberikan di pertemuan kedua oleh beberapa mahasiswa. Selanjutnya Pak Dai memaparkan tiga aplikasi metode numerik yang sering digunakan dalam menyelesaikan permasalahan teknik, contohnya Computation Fluid Dynamics (CFD), Finite Element Analysis, dan Metode Stokastik. CFD dan FEA berbasis ilmu fisika, sementara metode stokastik berbasis data dan statistik. Ada lima langkah yang Pak Dai paparkan dalam mengaplikasikan metode numerik ke permasalahan teknik :
 +
* Riset masalah tekniknya terlebih dahulu
 +
* Menganalisis masalah (mendefinisikan variabel yang mau dicari dan mencari parameter fisikanya)
 +
* Membuat model matematika
 +
* Membuat model numerik
 +
* Setelah itu cari penyelesaian dengan bantuan komputer untuk mendapatkan ''output'' yang diinginkan
 +
 +
Setelah itu Pak Dai menyuruh Kami untuk mencoba membuat fungsi untuk menyelesaikan Persamaan 9.12 di buku ''Numerical Methods for Engineers 7th Edition'' oleh Chapra. Lalu, Kami latihan menyelesaikan sistem persamaan dengan membuat fungsi penyelesaian dengan cara pseudocode 9.4 untuk menjawab soal 9.5 yang ada di buku yang sama juga. Latihan yang kedua ini dimaksudkan agar Kami paham dalam penggunaan ''array'' dalam penggunaan Open Modelica, yang dimana ''array'' ini dapat memudahkan mengumpulkan himpunan penyelesaian.
 +
 +
Berikut merupakan perhitungan statika struktur dengan open modelica:
 +
 +
'''Trusses soal 3.1'''
 +
 +
[[File:Satria 3.1.jpg|700px|thumb|right]]
 +
{| class="wikitable"
 +
|-
 +
| style='border-style: none  none  solid  solid;' |
 +
''Persamaan''
 +
 +
model Trusses
 +
 +
parameter Integer N=10; //Global matrice = 2*points connected
 +
parameter Real A=8;
 +
parameter Real E=1.9e6;
 +
Real G[N,N]; //global
 +
Real Ginitial[N,N]; //global
 +
Real Sol[N]; //global dispplacement
 +
Real X[N]={0,0,0,0,0,0,0,-500,0,-500};
 +
Real R[N]; //global reaction force
 +
Real SolMat[N,1];
 +
Real XMat[N,1];
 +
 +
//boundary coundition
 +
Integer b1=1;
 +
Integer b2=3;
 +
 +
//truss 1
 +
parameter Real X1=0; //degree between truss
 +
Real k1=A*E/36;
 +
Real K1[4,4]; //stiffness matrice
 +
Integer p1a=1;
 +
Integer p1b=2;
 +
Real G1[N,N];
 +
 +
//truss 2
 +
parameter Real X2=135; //degree between truss
 +
Real k2=A*E/50.912;
 +
Real K2[4,4]; //stiffness matrice
 +
Integer p2a=2;
 +
Integer p2b=3;
 +
Real G2[N,N];
 +
 +
//truss 3
 +
parameter Real X3=0; //degree between truss
 +
Real k3=A*E/36;
 +
Real K3[4,4]; //stiffness matrice
 +
Integer p3a=3;
 +
Integer p3b=4;
 +
Real G3[N,N];
 +
 +
//truss 4
 +
parameter Real X4=90; //degree between truss
 +
Real k4=A*E/36;
 +
Real K4[4,4]; //stiffness matrice
 +
Integer p4a=2;
 +
Integer p4b=4;
 +
Real G4[N,N];
 +
 +
//truss 5
 +
parameter Real X5=45; //degree between truss
 +
Real k5=A*E/50.912;
 +
Real K5[4,4]; //stiffness matrice
 +
Integer p5a=2;
 +
Integer p5b=5;
 +
Real G5[N,N];
 +
 +
//truss 6
 +
parameter Real X6=0; //degree between truss
 +
Real k6=A*E/36;
 +
Real K6[4,4]; //stiffness matrice
 +
Integer p6a=4;
 +
Integer p6b=5;
 +
Real G6[N,N];
 +
 +
/*
 +
for each truss, please 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);
 +
 +
K6:=Stiffness_Matrices(X6);
 +
G6:=k6*Local_Global(K6,N,p6a,p6b);
 +
 +
G:=G1+G2+G3+G4+G5+G6;
 +
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;
 +
|}
 +
 +
*Hasil perhitungan:
 +
[[File:Grafik sol.png|800px|thumb|center|Displacement Graphic]]
 +
[[File:Reaction forces graphic.png|800px|thumb|center|Reaction Forces Graphic]]
 +
 +
 +
*'''Tugas 3'''
 +
Tugas ketiga adalah menghitung soal statika struktur menggunakan aplikasi open modelica
 +
[[File:soal statur.png|600px|thumb|center]]
 +
*Trusses
 +
 +
class Trusses_HW
 +
 +
parameter Integer N=8; //Global matrice = 2*points connected
 +
parameter Real A=0.001; //Area m2
 +
parameter Real E=200e9; //Pa
 +
Real G[N,N]; //global
 +
Real Ginitial[N,N]; //global
 +
Real Sol[N]; //global dispplacement
 +
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 truss
 +
Real k1=A*E/1;
 +
Real K1[4,4]; //stiffness matrice
 +
Integer p1a=1;
 +
Integer p1b=2;
 +
Real G1[N,N];
 +
 +
//truss 2
 +
parameter Real X2=0; //degree between truss
 +
Real k2=A*E/1;
 +
Real K2[4,4]; //stiffness matrice
 +
Integer p2a=2;
 +
Integer p2b=3;
 +
Real G2[N,N];
 +
 +
//truss 3
 +
parameter Real X3=90; //degree between truss
 +
Real k3=A*E/1.25;
 +
Real K3[4,4]; //stiffness matrice
 +
Integer p3a=2;
 +
Integer p3b=4;
 +
Real G3[N,N];
 +
 +
//truss 4
 +
parameter Real X4=90+38.6598; //degree between truss
 +
Real k4=A*E/1.6;
 +
Real K4[4,4]; //stiffness matrice
 +
Integer p4a=1;
 +
Integer p4b=4;
 +
Real G4[N,N];
 +
 +
//truss 5
 +
parameter Real X5=90-38.6598; //degree between truss
 +
Real k5=A*E/1.6;
 +
Real K5[4,4]; //stiffness matrice
 +
Integer p5a=3;
 +
Integer p5b=4;
 +
Real G5[N,N];
 +
 +
/*
 +
for each truss, please 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_HW;
 +
 +
*Fungsi Panggil
 +
 +
{| class="wikitable"
 +
|-
 +
| style='border-style: none  none  solid  solid;' |
 +
''Matrice Transformation''
 +
 +
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;
 +
 +
| style="width: 20cm;"|
 +
''Global Element Matrice''
 +
 +
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;
 +
 +
| style="width: 20cm;"| 
 +
''Reaction Matrice Equation''
 +
 +
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;
 +
 +
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;
 +
 +
|}
 +
 +
*Hasil Perhitungan:
 +
[[File:Displacement Graphic.png|800px|thumb|center|Displacement Graphic]]
 +
[[File:Reaction Forces Graphic.png|800px|thumb|center|Reaction Forces Graphic]]
 +
 +
==Rabu, 2-12-2020==
 +
 +
Pada pertemuan keempat kelas metode numerik ini diawali dengan mendiskusikan terkait tugas yang diberikan pada pekan sebelumnya dan diadakan kuis yang berkaitan dengan tugas tersebut.
 +
 +
'''Kuis Flowchart dan Class Diagram'''
 +
 +
Kuis flowchart dan Class Diagram dari tugas ketiga:
 +
[[File:Kuis satria 1.jpg|500px|center]]
 +
[[File:Kuis satria 2.jpg|400px|center]]
 +
 +
 +
*'''Tugas 4'''
 +
 +
Membuat flowchart dan class diagram serta open modelica dari soal nomor 8
 +
 +
[[File:tugas 4 soal 8.png|500px|right]]
 +
[[File:Flowchart 3.jpg|500px|left]]
 +
 +
{| class="wikitable"
 +
|-
 +
| style="width: 20cm;"|
 +
'''Trusses3D'''
 +
 +
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;
 +
|}
 +
 +
*Hasil perhitungan:
 +
[[File:graphic reactions.png|800px|thumb|center|Graphic Reactions]]
 +
[[File:graphic 2.png|800px|thumb|center|Graphic Displacement]]
 +
 +
*Video Penjelasan:
 +
<youtube width="200" height="100">https://youtu.be/oftGgAdrXYk</youtube>
 +
 +
==Senin, 14-12-2020==
 +
Kelas pengganti Metode Numerik pada Rabu 9 Desember 2020, Pada kelas ini kami juga diajarkan kembali tentang sistem trusses menggunakan software open modelica. Pak Dai sebagai dosen metnum juga mengajarkan tentang pelajaran-pelajaran hidup. Pada pertemuan kali ini kami diajarkan untuk melakukan muhasabah terhadap penilaian diri sendiri mengenai materi Metode Numerik yang sudah diberikan oleh Pak Dai. Setelah itu kami juga diajarkan mengenai sistem trusses dengan metode belajar kelompok bersama kelas Metnum 2 dan Metnum 3.
 +
 +
==Rabu, 16-12-2020==
 +
Pada pertemuan Metnum Rabu, 16 Desember 2020 kami diajarkan tentang optimasi menggunakan Open Modelica. Optimasi merupakan sebuah cara untuk mendapatkan nilai minimum atau maksimum dari suatu permasalahan. Terdapat beberapa aspek yang diperhatikan dalam melakukan optimasi yaitu fungsi objektif dan ada juga konstrain. Pada pertemuan ini Asisten Dosen Metode Numerik yaitu Bu Chandra memberikan tutorial atau mengajarkan cara untuk melakukan optimasi menggunakan metode Bracket. Pada metode "Bracket Optimization Using Golden Ratio" terdapat satu grafik yang mempunyai nilai f(x) global maks dan lokal maks serta terdapat f(x) global minimum dann lokal minimum. 
 +
Pada pertemuan kali ini, Bu chandra  mengajarkan hingga melakukan optimasi grafik tanpa sebuah konstrain.
 +
 +
Berikut merupakan coding open modelica yang diajarkan oleh Bu Chandra:
 +
 +
Fungsi panggil
 +
function f_obj3
 +
import Modelica.Math;
 +
input Real x;
 +
output Real y;
 +
algorithm
 +
y:= 2*Math.sin(x)-x^2/10;
 +
end f_obj3;
 +
 +
Setelah itu dibuat lah model optimasi sistem bracketnya:
 +
 +
model bracket_optimation3
 +
parameter Integer n=8;
 +
Real x1[n];
 +
Real x2[n];
 +
Real xup;
 +
Real xlow;
 +
Real d;
 +
Real f1[n];
 +
Real f2[n];
 +
Real xopt;
 +
Real yopt;
 +
algorithm
 +
xup :=4;
 +
xlow:=0;
 +
for i in (1:n) loop
 +
  d:= (5^(1/2)-1)/2*(xup-xlow);
 +
  x1[i]:= xlow+d;
 +
  x2[i]:= xup-d;
 +
  f1[i]:= f_obj3(x1[i]);
 +
  f2[i]:= f_obj3(x2[i]);
 +
  if f1[i]>f2[i] then
 +
  xup:= xup;
 +
  xlow:= x2[i];
 +
  xopt:= xup;
 +
  yopt:= f1[i];
 +
  else
 +
  xlow:= xlow;
 +
  xup:= x1[i];
 +
  xopt:= xup;
 +
  end if;
 +
  end for;
 +
end bracket_optimation3;
 +
 +
*Hasil Perhitungan:
 +
[[File:Optimasi satria.png|800px|center]]
 +
 +
==Tugas Besar Metode Numerik==
 +
[[File:Soal tugas besar satria.png|400px|center]]
 +
Tugas besar Metode Numerik yaitu mengoptimasi harga pembuatan rangka truss sederhana dengan memvariasi dimensi dan elastisitas material. Variabel-variabel penting dalam menentukan cost terendah:
 +
* Jenis material
 +
* Harga material
 +
* Luas penampang truss
 +
*Mencari nilai displacement, reaction, dan streess
 +
Lalu melakukan optimasi dan membentuk kurva efisiensi harga dengan curve fitting menggunakan Metode Numerik dan aplikasi Open Modelica.
 +
 +
Langkah Pertama yaitu menentukan material yang ingin digunakan, saya memilih stainless steel 201 dengan Mechanical Properties yaitu: Yield=379 MPa, Elasticity= 197 GPa, dan luas truss 171 mm^2 (L profile 30x30mm thickness 3mm).
 +
 +
Lalu melakukan coding di OpenModelica dengan program sebagai berikut:
 +
model Tugas_3D_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=379e6; //Yield Strength (Pa)
 +
parameter Real Area=0.000171;  //Area L Profile (Dimension=0.03, Thickness=0,003) (m2)
 +
parameter Real Elas=197e9;    //Elasticity SS 201  (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.6,0,0,1,1,1;//1
 +
                          0,0,0,1,1,1;//2
 +
                          0,0.75,0,1,1,1;//3
 +
                      -0.6,0.75,0,1,1,1;//4
 +
                      -0.6,0,0.6,0,0,0;//5
 +
                          0,0,0.6,0,0,0;//6
 +
                          0,0.75,0.6,0,0,0;//7
 +
                      -0.6,0.75,0.6,0,0,0;//8
 +
                      -0.6,0,1.2,0,0,0;//9
 +
                          0,0,1.2,0,0,0;//10 
 +
                          0,0.75,1.2,0,0,0;//11
 +
                      -0.6,0.75,1.2,0,0,0;//12
 +
                      -0.6,0,1.8,0,0,0;//13
 +
                          0,0,1.8,0,0,0;//14
 +
                          0,0.75,1.8,0,0,0;//15
 +
                      -0.6,0.75,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;
 +
 +
Berikut hasil perhitungan yang didapat terdapat Displacement, Reaction, Stress, Safety:
 +
[[File:Reactionsatria.PNG|200px|center]]
 +
[[File:Displacementsatria1.PNG|200px|center]]
 +
[[File:Displacementsatria2.PNG|200px|center]]
 +
[[File:Stresssatria.PNG|200px|center]]
 +
[[File:Safetysatria.PNG|200px|center]]
 +
Setelah itu dilakukan optimasi dengan menggunakan 2 metode (Elastisitas tetap area berbeda dan Area tetap elastisitas berbeda)
 +
* Elasticity Locked
 +
Material yang digunakan SS201 dengan 5 macam Area. Berikut merupakan data material SS201:
 +
[[File:Datass201.PNG|400px|center]]
 +
Setelah itu data yang terdapat di atas diinput ke program curve fitting berikut:
 +
function CurveFitting
 +
 +
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 CurveFitting;
 +
 +
Hasil perhitungan saya paparkan dalam bentuk tabel dari perhitungan tersebut didapatkan Total cost, stress, Safety factor, dan Ratio:
 +
[[File:Data2satria.PNG|800px|center]]
 +
Lalu dilakukan optimasi menggunakan OpenModelica berikut merupakan coding OpenModelica:
 +
model OptimasiRangka
 +
 +
parameter Real xd[:]={111e-6,141e-6,171e-6,231e-6,304e-6};
 +
parameter Real yd[size(xd,1)]={7.25e-5,7.83e-5,8.15e-5,8.31e-5,9.08e-5};
 +
parameter Real xlo=111e-6;
 +
parameter Real xhi=304e-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 OptimasiRangka
 +
Setelah itu didapat hasil berikut:
 +
[[File:Optimasi1satria.PNG|400px|center]]
 +
Maka luas area optimum jika rangka menggunakan material SS201 adalah sebesar 0.00030303m^2 atau 303mm^2
 +
* Area Locked
 +
Area tetap namun material berbeda-beda. Berikut data yang digunakan:
 +
[[File:Data3satria.PNG|500px|center]]
 +
Lalu data tersebut dihitung menggunakan curve fitting yang program nya sama seperti metode Elasticity Fixed dan didapat hasil sebagai berikut:
 +
[[File:Data4fixsatria.PNG|600px|center]]
 +
Setelah itu dilakukan optimasi dengan program OpenModelica yang sama dengan Elasticity locked dan didapatkan hasil:
 +
[[File:Optimasifixsatria.PNG|400px|center]]
 +
Maka dengan luas area truss sebesar 171mm^2, material yang paling optimal untuk digunakan sebagai bahan dasar rangka adalah material dengan modulus elastisitas sebesar 1.97x10^11Pa. Material tersebut adalah Stainless steel 201.
 +
 +
==UAS Metode Numerik (13-1-2021)==
 +
'''Rai Zulfikar Satriagama'''
 +
 +
'''1906379075'''
 +
 +
'''Metnum-02'''
 +
 +
Perhatikan Water Tower dengan Reservoir berbentuk Bola pada Gambar diatas. Anda diminta untuk membuat pemodelan numerik untuk mengoptimalkan struktur Water Tower tersebut.
 +
 +
1. Buatlah urutan langkah-langkah (prosedur) pemodelan numerik untuk optimasi struktur tersebut!
 +
 +
Pada soal ini saya membuat sebuah flowchart untuk memudahkan proses pemodelan numerik untuk melakukan optimasi struktur water tower :
 +
[[File:Soal 1.1 satria.jpg|400px|center]]
 +
[[File:Soal 1.2 satria.jpg|400px|center]]
 +
2. Jelaskan tujuan pemodelan numerik soal no 1 diatas, hukum/dalil (fisika) yang dipakai dan asumsi-asumsi yang akan digunakan dalam perhitungan!
 +
 +
Pemodelan numerik bertujuan untuk mengetahui struktur dari trusses water tower. Dengan melakukan optimasi kita juga dapat menghitung reaksi pada tumpuan, displacement,stress dan safety factor yang berguna untuk mengetahui kekuatan dari struktur tersebut. Terdapat beberapa Hukum fisika yang dapat digunakan untuk pada struktur tersebut, seperti hukum 1 newton, hukum 3 newton, elastisitas, hukum hooke. Asumsi yang dipakai adalah struktur woter tower dalam keadaan diam/statis.
 +
[[File:Soal 2 satria.jpg|400px|center]]
 +
3. Untuk pemodelan numerik analisis strukturnya nya gunakan pendekatan 1D truss dgn membagi kolum (tiang) water tower kedalam 3 elemen (1D)
 +
 +
a). Susunlah persamaan aljabar kesetimbangan statik setiap elemen tsb. (matriks kesetimbangan lokal)
 +
 +
b) Matriks kesetimbangan global
 +
 +
Untuk menyusun persamaan tiap elemen dapat menggunakan F= (AxE/L)xdeltaL. Jika terdapat point yang dihubungkan maka akan terbentuk matiks kekakuan.
 +
[[File:Soal 3.1 satria.jpg|400px|center]]
 +
4.Susun urutan langkah-langkah (pseudocode) perhitungan matriks kesetimbangan global soal no 3 termasuk pengecekan kesalahan (verifikasi) perhitungannya!
 +
 +
Menginput data yang diketahui terlebih dahulu. Berikutnya membuat coding stiffnes matrix. Setelah itu, stiffness matrix diinput kedalam global matrix dan solve global matrix. Lalu, mengimprementasikan boundary condition, dan solve discplacement matrix. Kemudian dari displacement matrix akan dapat display solutionnya.
 +
[[File:Soal 4 satria.jpg|400px|center]]
 +
5.  Tulis dan jelaskan fungsi objektif dan constraint untuk optimasi struktur water tower tersebut!
 +
 +
Fungsi objektif adalah mendapatkan data-data terkait struktur bangunan tersebut, seperti gaya reaksi kesetimbangan statis, dan usaha untuk optimasi struktur.
 +
 +
Sedangkan constrain adalah batas-batas dari simulasi ini terdapat pada aspek spesifikasi material dan harga material.
 +
[[File:Soal 5 satria.jpg|400px|center]]
 +
6. Tuliskan asumsi nilai-nilai parameter dan variable untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 elemnt 1 D diatas
 +
 +
Terdapat beberapa asumsi yang saya pakai untuk menghitung optimasi dari struktur ini:
 +
Modulus elastisitasnya : 29 x10^-9 lb/inc
 +
Areanya                : 40 in^2
 +
Load                  : 10000 gallon
 +
[[File:Soal 6 satria.jpg|400px|center]]
 +
7. Gunakan program modelica anda untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 element 1 D berdasarkan asumsi no 6!
 +
 +
Program Open Modelica:
  
'''Rabu, 25-11-2020'''
+
model UAS
 +
 +
parameter Integer N=10; //Global matrice = 2*points connected
 +
parameter Real A=40; //Area in^2
 +
parameter Real E=2.9e6; //Pa
 +
Real G[N,N]; //global
 +
Real Ginitial[N,N]; //global
 +
Real Sol[N]; //global dispplacement
 +
Real X[N]={0,0,0,0,0,0,0,-500,0,-500};
 +
Real R[N]; //global reaction force
 +
Real SolMat[N,1];
 +
Real XMat[N,1];
 +
 +
//boundary coundition
 +
Integer b1=1;
 +
Integer b2=3;
 +
 +
//truss 1
 +
parameter Real X1=0; //degree between truss
 +
Real k1=A*E/36;
 +
Real K1[4,4]; //stiffness matrice
 +
Integer p1a=1;
 +
Integer p1b=2;
 +
Real G1[N,N];
 +
 +
//truss 2
 +
parameter Real X2=135; //degree between truss
 +
Real k2=A*E/50.912;
 +
Real K2[4,4]; //stiffness matrice
 +
Integer p2a=2;
 +
Integer p2b=3;
 +
Real G2[N,N];
 +
 +
//truss 3
 +
parameter Real X3=0; //degree between truss
 +
Real k3=A*E/36;
 +
Real K3[4,4]; //stiffness matrice
 +
Integer p3a=3;
 +
Integer p3b=4;
 +
Real G3[N,N];
 +
 +
//truss 4
 +
parameter Real X4=90; //degree between truss
 +
Real k4=A*E/36;
 +
Real K4[4,4]; //stiffness matrice
 +
Integer p4a=2;
 +
Integer p4b=4;
 +
Real G4[N,N];
 +
 +
//truss 5
 +
parameter Real X5=45; //degree between truss
 +
Real k5=A*E/50.912;
 +
Real K5[4,4]; //stiffness matrice
 +
Integer p5a=2;
 +
Integer p5b=5;
 +
Real G5[N,N];
 +
 +
//truss 6
 +
parameter Real X6=0; //degree between truss
 +
Real k6=A*E/36;
 +
Real K6[4,4]; //stiffness matrice
 +
Integer p6a=4;
 +
Integer p6b=5;
 +
Real G6[N,N];
 +
 +
/*
 +
for each truss, please 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);
 +
 +
K6:=Stiffness_Matrices(X6);
 +
G6:=k6*Local_Global(K6,N,p6a,p6b);
 +
 +
G:=G1+G2+G3+G4+G5+G6;
 +
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 UAS;
  
Pada pertemuan ketiga ini Metode Numerik membahas
+
Hasil Perhitungan:
 +
[[File:Soal 7 satria.jpg|400px|center]]
 +
[[File:Soal 7.1 satria.jpg|400px|center]]

Latest revision as of 15:29, 14 January 2021

Biodata Diri

Rai Zulfikar Satriagama.jpg

Nama  : Rai Zulfikar Satriagama

NPM  : 1906379075

Prodi  : Teknik Mesin S1 Reguler

TTL  : Tulungagung, 25 November 2001

Angkatan  : 2019

Hobi  : Membaca buku non fiksi

Assalamualaikum

Saya adalah salah satu ciptaan terbaik dari Tuhan Yang Maha Esa karena pada prinsipnya Tuhan Yang Maha Esa itu mendesain manusia dengan sebaik-baiknya makhluk. Saya memilih jurusan Teknik Mesin karena saya tertarik akan manufaktur dan bidang otomotif. Saya berharap dapat memaksimalkan semua kemampuan dan terus mengembangkan diri di Teknik Mesin UI. Output yang saya inginkan setelah lulus dari teknik mesin adalah dapat menjadi orang yang dapat memberikan bermanfaat kepada orang lain.

Metode Numerik

Metode Numerik merupakan mata kuliah yang saya ambil pada semester tiga ini. Metode numerik mempelajari teknik penyelesaian yang diformulasikan secara matematis dengan cara operasi hitungan. Pelajaran metode numerik menurut saya menarik karena saya jadi tahu asal mula regresi linear. Materi yang saya dapatkan dari Bapak Dr. Ir. Engkos A. Kosasih, M.T. sebelum UTS adalah

1. Pseudocode

2. Turunan Numerik

3. Regresi Linear

4. Deret Taylor dan Mclaurin

5. Interpolasi

Rabu, 10-11-2020

Tujuan mempelajari metode numerik adalah:

1.Memahami konsep-konsep dan prinsip-prinsip dasar dalam metode numerik. Contoh: Persamaan aljabar, algorithma, pencocokan kurva, persamaan diferensial parsial, dll.

2.Mengerti aplikasi metode numerik.

3.Mampu menerapkan metode numerik dalam persoalan teknik.

4.Mendapat nilai tambah/adab sehingga kita menjadi orang yang lebih beradab.

  • Tugas 1

Tugas pertama yang diberikan oleh Bapak Dr. Ir. Ahmad Indra Siswantara adalah membuat video tentang aplikasi open modelica. Pada tugas kali ini saya membuat video pengaplikasian rumus fisika (momen inersia) pada open modelica. Berikut merupakan video tugas pertama:

Rabu, 17-11-2020

Pada pertemuan kedua kelas Metode Numerik membahas mengenai tugas pertama yang sudah dikerjakan, beberapa mahasiswa mempresentasikan hasil tugasnya. Lalu kelas dilanjut dengan Pak Dai menjelaskan mengenai perbedaan dan fungsi dari model, class, dan fuction. Pak Dai berpesan bahwa kita sebagai manusia harus memiliki perubahan positif setiap harinya, hari ini harus lebih baik dari hari kemarin. Aplikasi open modelica ini free dan tidak berbayar sehingga dapat digunakan oleh siapa saja yang ingin belajar. Open Modelica mempunyai beberapa fitur, seperti membuat model, class, function, dan lain-lain. Aplikasi ini berupa object oriented, kita bisa membuat beberapa class fungsi dan class eksekusi, kemudian menggabungkannya menjadi satu model.

  • Tugas 2

Tugas kedua adalah dengan menggunakan aplikasi Open Modelica buatlah kelas fungsi aljabar simultan dengan variable array dan memanggil fungsi tersebut. Pada tugas ini saya memakai soal yang didapat dari internet mengenai sistem persamaan linear menggunakan metode eliminasi gauss. Berikut merupakan video tugas kedua:

Rabu, 25-11-2020

Pada pertemuan ketiga metode numerik ini diawali dengan review tugas yang telah diberikan di pertemuan kedua oleh beberapa mahasiswa. Selanjutnya Pak Dai memaparkan tiga aplikasi metode numerik yang sering digunakan dalam menyelesaikan permasalahan teknik, contohnya Computation Fluid Dynamics (CFD), Finite Element Analysis, dan Metode Stokastik. CFD dan FEA berbasis ilmu fisika, sementara metode stokastik berbasis data dan statistik. Ada lima langkah yang Pak Dai paparkan dalam mengaplikasikan metode numerik ke permasalahan teknik :

  • Riset masalah tekniknya terlebih dahulu
  • Menganalisis masalah (mendefinisikan variabel yang mau dicari dan mencari parameter fisikanya)
  • Membuat model matematika
  • Membuat model numerik
  • Setelah itu cari penyelesaian dengan bantuan komputer untuk mendapatkan output yang diinginkan

Setelah itu Pak Dai menyuruh Kami untuk mencoba membuat fungsi untuk menyelesaikan Persamaan 9.12 di buku Numerical Methods for Engineers 7th Edition oleh Chapra. Lalu, Kami latihan menyelesaikan sistem persamaan dengan membuat fungsi penyelesaian dengan cara pseudocode 9.4 untuk menjawab soal 9.5 yang ada di buku yang sama juga. Latihan yang kedua ini dimaksudkan agar Kami paham dalam penggunaan array dalam penggunaan Open Modelica, yang dimana array ini dapat memudahkan mengumpulkan himpunan penyelesaian.

Berikut merupakan perhitungan statika struktur dengan open modelica:

Trusses soal 3.1

Satria 3.1.jpg

Persamaan

model Trusses

parameter Integer N=10; //Global matrice = 2*points connected
parameter Real A=8;
parameter Real E=1.9e6;
Real G[N,N]; //global
Real Ginitial[N,N]; //global
Real Sol[N]; //global dispplacement
Real X[N]={0,0,0,0,0,0,0,-500,0,-500};
Real R[N]; //global reaction force
Real SolMat[N,1];
Real XMat[N,1];

//boundary coundition
Integer b1=1;
Integer b2=3;

//truss 1
parameter Real X1=0; //degree between truss
Real k1=A*E/36;
Real K1[4,4]; //stiffness matrice
Integer p1a=1;
Integer p1b=2;
Real G1[N,N];

//truss 2
parameter Real X2=135; //degree between truss
Real k2=A*E/50.912;
Real K2[4,4]; //stiffness matrice
Integer p2a=2;
Integer p2b=3;
Real G2[N,N];

//truss 3
parameter Real X3=0; //degree between truss
Real k3=A*E/36;
Real K3[4,4]; //stiffness matrice
Integer p3a=3;
Integer p3b=4;
Real G3[N,N];

//truss 4
parameter Real X4=90; //degree between truss
Real k4=A*E/36;
Real K4[4,4]; //stiffness matrice
Integer p4a=2;
Integer p4b=4;
Real G4[N,N];

//truss 5
parameter Real X5=45; //degree between truss
Real k5=A*E/50.912;
Real K5[4,4]; //stiffness matrice
Integer p5a=2;
Integer p5b=5;
Real G5[N,N];

//truss 6
parameter Real X6=0; //degree between truss
Real k6=A*E/36;
Real K6[4,4]; //stiffness matrice
Integer p6a=4;
Integer p6b=5;
Real G6[N,N];

/*
for each truss, please 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);

K6:=Stiffness_Matrices(X6);
G6:=k6*Local_Global(K6,N,p6a,p6b);

G:=G1+G2+G3+G4+G5+G6;
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;
  • Hasil perhitungan:
Displacement Graphic
Reaction Forces Graphic


  • Tugas 3

Tugas ketiga adalah menghitung soal statika struktur menggunakan aplikasi open modelica

Soal statur.png
  • Trusses
class Trusses_HW

parameter Integer N=8; //Global matrice = 2*points connected
parameter Real A=0.001; //Area m2
parameter Real E=200e9; //Pa
Real G[N,N]; //global
Real Ginitial[N,N]; //global
Real Sol[N]; //global dispplacement
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 truss
Real k1=A*E/1;
Real K1[4,4]; //stiffness matrice
Integer p1a=1;
Integer p1b=2;
Real G1[N,N];

//truss 2
parameter Real X2=0; //degree between truss
Real k2=A*E/1;
Real K2[4,4]; //stiffness matrice
Integer p2a=2;
Integer p2b=3;
Real G2[N,N];

//truss 3
parameter Real X3=90; //degree between truss
Real k3=A*E/1.25;
Real K3[4,4]; //stiffness matrice
Integer p3a=2;
Integer p3b=4;
Real G3[N,N];

//truss 4
parameter Real X4=90+38.6598; //degree between truss
Real k4=A*E/1.6;
Real K4[4,4]; //stiffness matrice
Integer p4a=1;
Integer p4b=4;
Real G4[N,N];

//truss 5
parameter Real X5=90-38.6598; //degree between truss
Real k5=A*E/1.6;
Real K5[4,4]; //stiffness matrice
Integer p5a=3;
Integer p5b=4;
Real G5[N,N];

/*
for each truss, please 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_HW;
  • Fungsi Panggil

Matrice Transformation

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;

Global Element Matrice

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;

Reaction Matrice Equation

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;

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;

  • Hasil Perhitungan:
Displacement Graphic
Reaction Forces Graphic

Rabu, 2-12-2020

Pada pertemuan keempat kelas metode numerik ini diawali dengan mendiskusikan terkait tugas yang diberikan pada pekan sebelumnya dan diadakan kuis yang berkaitan dengan tugas tersebut.

Kuis Flowchart dan Class Diagram

Kuis flowchart dan Class Diagram dari tugas ketiga:

Kuis satria 1.jpg
Kuis satria 2.jpg


  • Tugas 4

Membuat flowchart dan class diagram serta open modelica dari soal nomor 8

Tugas 4 soal 8.png
Flowchart 3.jpg

Trusses3D

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;
  • Hasil perhitungan:
Graphic Reactions
Graphic Displacement
  • Video Penjelasan:

Senin, 14-12-2020

Kelas pengganti Metode Numerik pada Rabu 9 Desember 2020, Pada kelas ini kami juga diajarkan kembali tentang sistem trusses menggunakan software open modelica. Pak Dai sebagai dosen metnum juga mengajarkan tentang pelajaran-pelajaran hidup. Pada pertemuan kali ini kami diajarkan untuk melakukan muhasabah terhadap penilaian diri sendiri mengenai materi Metode Numerik yang sudah diberikan oleh Pak Dai. Setelah itu kami juga diajarkan mengenai sistem trusses dengan metode belajar kelompok bersama kelas Metnum 2 dan Metnum 3.

Rabu, 16-12-2020

Pada pertemuan Metnum Rabu, 16 Desember 2020 kami diajarkan tentang optimasi menggunakan Open Modelica. Optimasi merupakan sebuah cara untuk mendapatkan nilai minimum atau maksimum dari suatu permasalahan. Terdapat beberapa aspek yang diperhatikan dalam melakukan optimasi yaitu fungsi objektif dan ada juga konstrain. Pada pertemuan ini Asisten Dosen Metode Numerik yaitu Bu Chandra memberikan tutorial atau mengajarkan cara untuk melakukan optimasi menggunakan metode Bracket. Pada metode "Bracket Optimization Using Golden Ratio" terdapat satu grafik yang mempunyai nilai f(x) global maks dan lokal maks serta terdapat f(x) global minimum dann lokal minimum. Pada pertemuan kali ini, Bu chandra mengajarkan hingga melakukan optimasi grafik tanpa sebuah konstrain.

Berikut merupakan coding open modelica yang diajarkan oleh Bu Chandra:

Fungsi panggil

function f_obj3
import Modelica.Math;
input Real x;
output Real y;
algorithm
y:= 2*Math.sin(x)-x^2/10;
end f_obj3;

Setelah itu dibuat lah model optimasi sistem bracketnya:

model bracket_optimation3
parameter Integer n=8;
Real x1[n];
Real x2[n];
Real xup;
Real xlow;
Real d;
Real f1[n];
Real f2[n];
Real xopt;
Real yopt;
algorithm
xup :=4;
xlow:=0;
for i in (1:n) loop
  d:= (5^(1/2)-1)/2*(xup-xlow);
  x1[i]:= xlow+d;
  x2[i]:= xup-d;
  f1[i]:= f_obj3(x1[i]);
  f2[i]:= f_obj3(x2[i]);
  if f1[i]>f2[i] then
  xup:= xup;
  xlow:= x2[i];
  xopt:= xup;
  yopt:= f1[i];
  else
  xlow:= xlow;
  xup:= x1[i];
  xopt:= xup;
  end if;
  end for;
end bracket_optimation3;
  • Hasil Perhitungan:
Optimasi satria.png

Tugas Besar Metode Numerik

Soal tugas besar satria.png

Tugas besar Metode Numerik yaitu mengoptimasi harga pembuatan rangka truss sederhana dengan memvariasi dimensi dan elastisitas material. Variabel-variabel penting dalam menentukan cost terendah:

  • Jenis material
  • Harga material
  • Luas penampang truss
  • Mencari nilai displacement, reaction, dan streess

Lalu melakukan optimasi dan membentuk kurva efisiensi harga dengan curve fitting menggunakan Metode Numerik dan aplikasi Open Modelica.

Langkah Pertama yaitu menentukan material yang ingin digunakan, saya memilih stainless steel 201 dengan Mechanical Properties yaitu: Yield=379 MPa, Elasticity= 197 GPa, dan luas truss 171 mm^2 (L profile 30x30mm thickness 3mm).

Lalu melakukan coding di OpenModelica dengan program sebagai berikut:

model Tugas_3D_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=379e6; //Yield Strength (Pa)
parameter Real Area=0.000171;   //Area L Profile (Dimension=0.03, Thickness=0,003) (m2)
parameter Real Elas=197e9;     //Elasticity SS 201  (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.6,0,0,1,1,1;//1
                         0,0,0,1,1,1;//2
                         0,0.75,0,1,1,1;//3
                      -0.6,0.75,0,1,1,1;//4
                      -0.6,0,0.6,0,0,0;//5
                         0,0,0.6,0,0,0;//6
                         0,0.75,0.6,0,0,0;//7
                      -0.6,0.75,0.6,0,0,0;//8
                      -0.6,0,1.2,0,0,0;//9
                         0,0,1.2,0,0,0;//10  
                         0,0.75,1.2,0,0,0;//11
                      -0.6,0.75,1.2,0,0,0;//12
                      -0.6,0,1.8,0,0,0;//13
                         0,0,1.8,0,0,0;//14
                         0,0.75,1.8,0,0,0;//15
                      -0.6,0.75,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;

Berikut hasil perhitungan yang didapat terdapat Displacement, Reaction, Stress, Safety:

Reactionsatria.PNG
Displacementsatria1.PNG
Displacementsatria2.PNG
Stresssatria.PNG
Safetysatria.PNG

Setelah itu dilakukan optimasi dengan menggunakan 2 metode (Elastisitas tetap area berbeda dan Area tetap elastisitas berbeda)

  • Elasticity Locked

Material yang digunakan SS201 dengan 5 macam Area. Berikut merupakan data material SS201:

Datass201.PNG

Setelah itu data yang terdapat di atas diinput ke program curve fitting berikut:

function CurveFitting

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 CurveFitting;

Hasil perhitungan saya paparkan dalam bentuk tabel dari perhitungan tersebut didapatkan Total cost, stress, Safety factor, dan Ratio:

Data2satria.PNG

Lalu dilakukan optimasi menggunakan OpenModelica berikut merupakan coding OpenModelica:

model OptimasiRangka

parameter Real xd[:]={111e-6,141e-6,171e-6,231e-6,304e-6};
parameter Real yd[size(xd,1)]={7.25e-5,7.83e-5,8.15e-5,8.31e-5,9.08e-5};
parameter Real xlo=111e-6;
parameter Real xhi=304e-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 OptimasiRangka

Setelah itu didapat hasil berikut:

Optimasi1satria.PNG

Maka luas area optimum jika rangka menggunakan material SS201 adalah sebesar 0.00030303m^2 atau 303mm^2

  • Area Locked

Area tetap namun material berbeda-beda. Berikut data yang digunakan:

Data3satria.PNG

Lalu data tersebut dihitung menggunakan curve fitting yang program nya sama seperti metode Elasticity Fixed dan didapat hasil sebagai berikut:

Data4fixsatria.PNG

Setelah itu dilakukan optimasi dengan program OpenModelica yang sama dengan Elasticity locked dan didapatkan hasil:

Optimasifixsatria.PNG

Maka dengan luas area truss sebesar 171mm^2, material yang paling optimal untuk digunakan sebagai bahan dasar rangka adalah material dengan modulus elastisitas sebesar 1.97x10^11Pa. Material tersebut adalah Stainless steel 201.

UAS Metode Numerik (13-1-2021)

Rai Zulfikar Satriagama

1906379075

Metnum-02

Perhatikan Water Tower dengan Reservoir berbentuk Bola pada Gambar diatas. Anda diminta untuk membuat pemodelan numerik untuk mengoptimalkan struktur Water Tower tersebut.

1. Buatlah urutan langkah-langkah (prosedur) pemodelan numerik untuk optimasi struktur tersebut!

Pada soal ini saya membuat sebuah flowchart untuk memudahkan proses pemodelan numerik untuk melakukan optimasi struktur water tower :

Soal 1.1 satria.jpg
Soal 1.2 satria.jpg

2. Jelaskan tujuan pemodelan numerik soal no 1 diatas, hukum/dalil (fisika) yang dipakai dan asumsi-asumsi yang akan digunakan dalam perhitungan!

Pemodelan numerik bertujuan untuk mengetahui struktur dari trusses water tower. Dengan melakukan optimasi kita juga dapat menghitung reaksi pada tumpuan, displacement,stress dan safety factor yang berguna untuk mengetahui kekuatan dari struktur tersebut. Terdapat beberapa Hukum fisika yang dapat digunakan untuk pada struktur tersebut, seperti hukum 1 newton, hukum 3 newton, elastisitas, hukum hooke. Asumsi yang dipakai adalah struktur woter tower dalam keadaan diam/statis.

Soal 2 satria.jpg

3. Untuk pemodelan numerik analisis strukturnya nya gunakan pendekatan 1D truss dgn membagi kolum (tiang) water tower kedalam 3 elemen (1D)

a). Susunlah persamaan aljabar kesetimbangan statik setiap elemen tsb. (matriks kesetimbangan lokal)

b) Matriks kesetimbangan global

Untuk menyusun persamaan tiap elemen dapat menggunakan F= (AxE/L)xdeltaL. Jika terdapat point yang dihubungkan maka akan terbentuk matiks kekakuan.

Soal 3.1 satria.jpg

4.Susun urutan langkah-langkah (pseudocode) perhitungan matriks kesetimbangan global soal no 3 termasuk pengecekan kesalahan (verifikasi) perhitungannya!

Menginput data yang diketahui terlebih dahulu. Berikutnya membuat coding stiffnes matrix. Setelah itu, stiffness matrix diinput kedalam global matrix dan solve global matrix. Lalu, mengimprementasikan boundary condition, dan solve discplacement matrix. Kemudian dari displacement matrix akan dapat display solutionnya.

Soal 4 satria.jpg

5. Tulis dan jelaskan fungsi objektif dan constraint untuk optimasi struktur water tower tersebut!

Fungsi objektif adalah mendapatkan data-data terkait struktur bangunan tersebut, seperti gaya reaksi kesetimbangan statis, dan usaha untuk optimasi struktur.

Sedangkan constrain adalah batas-batas dari simulasi ini terdapat pada aspek spesifikasi material dan harga material.

Soal 5 satria.jpg

6. Tuliskan asumsi nilai-nilai parameter dan variable untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 elemnt 1 D diatas

Terdapat beberapa asumsi yang saya pakai untuk menghitung optimasi dari struktur ini: Modulus elastisitasnya : 29 x10^-9 lb/inc Areanya  : 40 in^2 Load  : 10000 gallon

Soal 6 satria.jpg

7. Gunakan program modelica anda untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 element 1 D berdasarkan asumsi no 6!

Program Open Modelica:

model UAS

parameter Integer N=10; //Global matrice = 2*points connected
parameter Real A=40; //Area in^2
parameter Real E=2.9e6; //Pa
Real G[N,N]; //global
Real Ginitial[N,N]; //global
Real Sol[N]; //global dispplacement
Real X[N]={0,0,0,0,0,0,0,-500,0,-500};
Real R[N]; //global reaction force
Real SolMat[N,1];
Real XMat[N,1];

//boundary coundition
Integer b1=1;
Integer b2=3;

//truss 1
parameter Real X1=0; //degree between truss
Real k1=A*E/36;
Real K1[4,4]; //stiffness matrice
Integer p1a=1;
Integer p1b=2;
Real G1[N,N];

//truss 2
parameter Real X2=135; //degree between truss
Real k2=A*E/50.912;
Real K2[4,4]; //stiffness matrice
Integer p2a=2;
Integer p2b=3;
Real G2[N,N];

//truss 3
parameter Real X3=0; //degree between truss
Real k3=A*E/36;
Real K3[4,4]; //stiffness matrice
Integer p3a=3;
Integer p3b=4;
Real G3[N,N];

//truss 4
parameter Real X4=90; //degree between truss
Real k4=A*E/36;
Real K4[4,4]; //stiffness matrice
Integer p4a=2;
Integer p4b=4;
Real G4[N,N];

//truss 5
parameter Real X5=45; //degree between truss
Real k5=A*E/50.912;
Real K5[4,4]; //stiffness matrice
Integer p5a=2;
Integer p5b=5;
Real G5[N,N];

//truss 6
parameter Real X6=0; //degree between truss
Real k6=A*E/36;
Real K6[4,4]; //stiffness matrice
Integer p6a=4;
Integer p6b=5;
Real G6[N,N];

/*
for each truss, please 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);

K6:=Stiffness_Matrices(X6);
G6:=k6*Local_Global(K6,N,p6a,p6b);

G:=G1+G2+G3+G4+G5+G6;
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 UAS;

Hasil Perhitungan:

Soal 7 satria.jpg
Soal 7.1 satria.jpg