Difference between revisions of "Norman Febrianto"

From ccitonlinewiki
Jump to: navigation, search
 
(52 intermediate revisions by the same user not shown)
Line 27: Line 27:
 
*dapat mencapai poin 1,2,3 juga dengan moral value yaitu adab
 
*dapat mencapai poin 1,2,3 juga dengan moral value yaitu adab
  
== Tugas Minggu ke-1 ==
+
=== Tugas Minggu ke-1 ===
Mempelajari dan membuat video tutorial menggunakan open modelica, saya sudah membuat video tutorial open modelica mengenai interpolasi berikut link nya
+
Mempelajari dan membuat video tutorial menggunakan open modelica, saya sudah membuat video tutorial yang tidak begitu sulit dengan open modelica mengenai interpolasi.
https://youtu.be/KRP39MDljY4
+
berikut contoh soal yang saya coba menyelesaikan dengan openmodelica.
 +
[[File:Interpolasi mudah.png|400px|center]]
 +
Kita dapat menyelesaikan persoalan berikut dengan menggunakan rumus umum dari interpolasi.
 +
[[File:Rumus umum interp.png|400px|center]]
 +
Kemudian kita dapat memasukan variabel-variabel yang diketahui, untuk parameter real berdasarkan soal diantaranya x1, x2, y1, y2. Variabel yang akan kita cari adalah y dan dapat kita tuliskan "Real y". Kita juga bisa menuliskan Real x meskipun x sudah diketahui pada open modelica.
 +
[[File:Interp.png|400px|center]]
 +
Setelah di check, jika tidak terdapat masalah kita save terlebih dahulu dan dapat dilakukan stimulate untuk proses pada openmodelica. Hasil dari Real y yang dicari didapatkan pada box sebelah kanan.
 +
[[File:Hasilinter.png|400px|center]]
 +
 
 +
berikut link video saya pada saat mengerjakan interpolasi di atas
 +
<div class="center" style="width: auto; margin-left: auto; margin-right: auto;">
 +
<youtube width="200" height="100">KRP39MDljY4</youtube>
 +
</div>
  
 
saya mempelajari open modelica dari link video berikut :
 
saya mempelajari open modelica dari link video berikut :
Line 35: Line 47:
  
 
==Metode Numerik Minggu ke-2==
 
==Metode Numerik Minggu ke-2==
Openmodelica lebih ke bahasa permodelan, bukan hanya bahasa coding seperti pyhton. Namun dalam perhitungan, parameter real tidak perlu dicompile ulang cukup di simulate ulang saja.
+
Openmodelica lebih ke bahasa permodelan, bukan hanya bahasa coding seperti pyhton. Namun dalam perhitungan menggunakan code yang dalam bahasa C++, parameter real tidak perlu dicompile ulang cukup di simulate ulang saja.
kelebihan openmodelica  
+
kelebihan openmodelica diantaranya sebagai berikut :
1. menggunakan bahasa permodelan yang cocok untuk engineer
+
*1. menggunakan bahasa permodelan yang cocok untuk engineer
2. segi perhitungan lumayan cepat
+
*2. segi perhitungan lumayan cepat
3. pengguna aplikasi openmodelica cukup banyak penggunanya, dan termasuk open teknologi (free). Karena seperti mathlab harus membeli atau ada legalisasi
+
*3. pengguna aplikasi openmodelica cukup banyak penggunanya, dan termasuk open teknologi (free). Karena seperti mathlab harus membeli atau ada legalisasi
 +
Pada minggu ini, belajar cara untuk memanggil suatu fungsi untuk class tertentu. Jadi pada langkahnya pada awal new, memilih pada option Function untuk membuat fungsi yang nantinya akan digunakan untuk membantu perhitungan. Function dinamakan "Fungsi Tambah X1"dengan X sebagai input, Y sebagai output, dan fungsi yang dibuat adalah Y=10+x. Dibuat dalam Open Modelica sebagai berikut:
 +
[[File:tambahx1.png|400px|center]]
 +
Selanjutnya membuat new (baru) untuk memilih option class dinamakan "Panggil" yang digunakan untuk "memanggil" fungsi tambah X1 tersebut. Pada class ini, kita dapat mengubah nilai input X1 sesuai dengan kebutuhan.
 +
[[File:Panggil.png|400px|center]]
 +
Setelah itu, pada class untuk memakai function yang telah dibuat kita panggil pada "equation". Jadi Function digunakan untuk membantu perhitungan pada class ini. nilai output Y merupakan nilai yang dicari sesuai dengan nilai input X1 yang dimasukan. Sebagai contoh, dimasukkan nilai X1 sebesar 5 maka sesuai fungsi Y=10+X, akan didapatkan nilai Hasil+X1=10+X1=10+5=15.
 +
[[File:Hasiltambahx1.png|500px|center]]
 +
Nilai outpu Y terlihat pada box di sebelah kanan. Nilai X1 dapat dirubah sesuai dengan kebutuhan dan dapat dilakukan re-simulate untuk mendapatkan nilai outputnya.
 +
 
 +
=== Tugas Minggu ke-2 ===
 +
Pengaplikasikan penggunaan Function dan Class pada Openmodelica. membuat sebuah fungsi berupa persamaan aljabar simultan dengan variabel array kemudian membuat class untuk memanggil fungsi tersebut. Persamaan aljabar simultan adalah sebuah persoalan matematika yang kompleks sehingga penyelesaian perlu dengan menggunakan tools, agar dapat dibuat lebih sederhana. Metode yang dapat digunakan untuk menyelesaikan persamaan aljabar simultan adalah metode Gauss, Gauss-Jordan, Crammer, dan Gauss-Seidel. Variabel array adalah sebuah variabel yang di dalamnya terdapat banyak data. Contoh, jika kita memiliki data X1,X2,...,X10 menggunakan variabel array cukup dituliskan X[10]
 +
Untuk mencoba menggunakan Function and Class, saya mencoba menjawab soal matriks 4x4 dari contoh soal yang saya browsing di internet.
 +
[[File:Soalmatriks4x4.png|400px|center]]
 +
Kemudian kita dapat membuat fungsi Gauss untuk matriks 4x4 terlebih dahulu. Pada function saya memakai fungsi "solve" eliminasi gauss dari openmodelica yang dapat digunakan untuk menyelesaikan persamaan matriks
 +
[[File:Fgaus4x4.png|400px|center]]
 +
Langkah selanjutnya membuat class yang berisikan matriks dari soal, dan untuk menggunakan function yang telah dibuat sebelumnya.
 +
[[File:Matx4x4.png|400px|center]]
 +
Setelah itu dilakukan stimulate, sehingga didapatkan hasil matriks berikut
 +
[[File:Hsl4x4.png|400px|center]]
 +
 
 +
berikut video saya untuk penerapan tugas ke-2 mengenai Function & class <div class="center" style="width: auto; margin-left: auto; margin-right: auto;">
 +
<youtube width="200" height="100">9NKWo6Ugkws</youtube>
 +
</div>
 +
 
 +
==Metode Numerik Minggu ke-3==
 +
membuat fungsi di dalam modelica untuk menyelesaikan persamaan aljabar pada buku (9.12) dengan metode Gauss, namun bisa juga menggunakan metode lain seperti Gauss-Jordan.
 +
penyelesaian yang hasilnya berupa himpunan disebut array. menggunakan array karena nilai uji akan berubah perr-iterasi, iterasi 1 nilai A, ke-2 B, sehingga hasilnya berupa himpunan penyelesaian dan berupa grafik. [N] merupakan jumlah dari data, dapat juga menjadi 3 dimensi dengan menambahkan variabel lain [O], [P], dan lainnya.  Beberapa metode yang dapat digunakan yaitu CFD, Stokastik, dan FEA. Dalam menyelesaikan masalah teknik, angkah yang harus dilakukan adalah melakukan analisis, membuat model matematis, menggunakan metode numerik untuk penyelesain (menggunakan computer), dan didapatkan solusi dari permasalahan. Salah satu permasalahan teknik yang dijadikan contoh adalah mengenai Truss.
 +
 
 +
Pada kelas kali ini, sebelumnya diriview kembali mengenai aljabar simultan untuk menyelesaikan persamaan linier dengan matriks. Pengaplikasian dalam Open Modelica, kita akan membuat code untuk menyelesaikan persamaan 9.12 pada buku Chapra yaitu mengenai eliminasi Naïve Gauss. Pseudocode untuk eliminasi Naïve Gauss diberikan pada Fig.9.4:
 +
[[File:Fig9.12.png|500px|center]]
 +
pada open modelica dapat dituliskan dengan menggunakan Function, dinamakan "NaiveGauss"
 +
[[File:Naivgaus.png|500px|center]]
 +
Kemudian dapat dipanggil function sebelumnya kedalam class
 +
[[File:Prob9.5.png|500px|center]]
 +
Setelah itu dapat kita stimulate untuk di dapatkan hasilnya
 +
[[File:Hslnaiv.png|400px|center]]
 +
 
 +
=== Tugas Minggu ke-3 ===
 +
Mencoba mengerjakan soal permasalahan teknik yaitu Truss, dengan menggunakan openmodelica. Berikut soal yang harus dikerjakan
 +
[[File:Tugas minggu 3.jpeg|500px|left]]
 +
Berikut merupakan Program yang dibuat pada modelica untuk penyelesaian
 +
 
 +
<syntaxhighlight lang="modelica">
 +
 
 +
*class TrussesHW
 +
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;
 +
 
 +
</syntaxhighlight>
 +
 
 +
Grafik Reaction Process
 +
[[File:Reac.Displacem.png|600px|center]]
 +
 
 +
Grafik Diplacement
 +
[[File:Sol.displace.png|600px|center]]
 +
 
 +
 
 +
Transformasi Matriks
 +
 
 +
<syntaxhighlight lang="modelica">
 +
 
 +
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;
 +
 
 +
</syntaxhighlight>
 +
 
 +
Global Element Matrice
 +
<syntaxhighlight lang="modelica">
 +
 
 +
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;
 +
 
 +
</syntaxhighlight>
 +
 
 +
 
 +
Reaction Matrice Equation
 +
 
 +
<syntaxhighlight lang="modelica">
 +
 
 +
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;
 +
 
 +
</syntaxhighlight>
 +
 
 +
Gauss Jordan
 +
 
 +
<syntaxhighlight lang="modelica">
 +
 
 +
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;
 +
 
 +
</syntaxhighlight>
 +
 
 +
== Metode Numerik Minggu ke-4 ==
 +
=== Quiz Flowchart dan class diagram ===
 +
pada minggu ke-4 memahami mengenai flowchart berdasarkan coding yang dibuat josiah, berikut jawaban dari saya
 +
[[File:Norman F Quiz.jpg|400px|center]]
 +
 
 +
==Tugas Minggu ke-4==
 +
Pada minggu ke empat, kami perlu mengerjakan soal no.8 mengenai truss 3 Dimensi dengan menggunakan open modelica, berikut soal yang harus dikerjakan dan dipahami.
 +
[[File:Soal_no_8.jpg|500px|center]]
 +
Pembuatan diagram class dan flowchart dari soal adalah sebagai berikut :
 +
[[File:Dclassno8.jpg|400px|center]]
 +
 
 +
[[File:Fchartno8.jpg|400px|center]]
 +
 
 +
pertama kita bahas dengan mencari diketahui, dan menuliskan parameter yang ada dengan menghitung
 +
[[File:Dikno8.jpg|500px|center]]
 +
 
 +
kemudian menuliskan function yang terlibat dalam pengerjaan soal, pertama adalah function element matrices
 +
[[File:StiffnessMatrixElement.png|400px|center]]
 +
 
 +
Kemudian matriks untuk stiffness global
 +
[[File:StiffnessMatrixGlobal.png|500px|center]]
 +
 
 +
Setelah itu dapat kita jumlahkan matriks global, dan menentukan boundary dari matriks
 +
[[File:SumStiffnessMatrixGlobal.png|400px|center]]
 +
 
 +
[[File:BoundaryStiffnessMatrixGlobal.png|400px|center]]
 +
 
 +
Kemudian kita bisa memanggil fungsi Gaussjordan, dan menentukan Reaksi dengan fungsi reaction
 +
[[File:GaussJordan.png|400px|center]]
 +
 
 +
setelah itu akan didapatkan hasil U(displacement) dan R(Reaction)
 +
[[File:U&R.png|500px|center]]
 +
 
 +
Berikut link video yang saya buat untuk menjelaskan mengenai proses coding atau pengerjaan soal no.8
 +
<youtube width="200" height="100">aHfNaj4z59Q</youtube>
 +
 
 +
== Metode Numerik Minggu ke-6 ==
 +
sistem optimasi
 +
dalam sistem ada fluida cair sistem aliran darah, berupa udara yaitu sistem pernapasan.
 +
Yang ditampilkan pada grafik adalah suatu karakteristik dari sistem dan komponen. komponen penting dalam sistem perpipaan
 +
sistem fluida tidak hanya perpipaan tetapi ada mesin kerja (pompa) dan tenaga, ada valve, pipa belok.
 +
sistem fluida, aliran air dimasukan yang terdiri dari pompa, pipa, pipa belok (T,L) valve.
 +
Setiap komponen bertujuan sama yaitu mengalirkan air dari satu tempat ke tempat lain
 +
Sistem tersebut adalah pompa, dengan sistem pendukung, memberi tenaga pada pompa
 +
 
 +
[[File:Grafikfluid.jpeg|500px|center]]
 +
 
 +
yng melengkung adalah grafik efisiensi
 +
Break housepower
 +
sumbu datar adalah jumlah aliran yang diantarkan
 +
sumbu y adalah efisiensi dari pompa
 +
garis hijau adalah tenaga air yang keluar dari pompa
 +
seiring jumlah air yang dikeluarkan tekanan akan turun sementara breakhouse power akan naik.
 +
pada efisiensi, makin tinggi kapasitas maka efisiensi akan naik. Terdapat titik maksimum dan setelah itu efisiensi akan menurun.
 +
Terdapat suatu titik maks untuk efisiensi yang pada akhirnya akan menurun
 +
pada kondisi berpaa dan kapasitas berapa, sehingga mendapat efisiensi pompa yang maksimum.
 +
untuk efisiensi sistem, mempertimbangkan heatloss pada kondisi tertentu.
 +
 
 +
Pembahasan berikutnya mengenai metode Bracket Optimization Using Golden Ratio Method oleh bu Chandra.
 +
Jika ingin menyelesaikan suatu masalah dengan optimasi, harus paham terlebih dahulu mengenai materinya
 +
 
 +
[[File:Bracktergraph.png|500px|center]]
 +
*Menentukan dan mengetahui batasan titik awal terendah (xL) dan tertinggi (xH)
 +
*Mendapatkan nilai x1 dan x2 dari golden ratio (d)
 +
*Menentukan xL dan xH berdasarkan nilai batasan maksimum dan minimal baru
 +
*Mendapatkan nilai x1 dan x2 baru
 +
 
 +
Jika dalam soal diketahui untuk menyelesaikan persamaan y=2sinx-x^2/10,
 +
dapat dimasukan ke dalam openmodelica,
 +
pertama membuat function dari persamaan tersebut yang nanti akan dipanggil nantinya
 +
 
 +
[[File:Fxobj3.png|500px|center]]
 +
 
 +
Setelah di cek dan tidak terjadi masalah, dapat dibuat model yang akan memanggil fungsi tersebut
 +
 
 +
[[File:Brackopt.png|500px|center]]
 +
 
 +
== Progress Tugas Besar (23-12-2020) ==
 +
Tugas besar yang diberikan untuk kelas metnum 02 dan 03 adalah optimasi untuk rangka batang:
 +
[[File:600px-Soaltubes.jpeg|500px|center]]
 +
suatu rangka batang yang telah dibentuk seperti gambar diatas, dengan spesifikasi sebagai berikut:
 +
[[File:Soaltubes2.jpeg|500px|center]]
 +
Diharapkan dari soal tersebut dapat mendesain rangka batang dengan harga terjangkau dan optimal untuk fungsinya.
 +
 
 +
Faktor atau variabel bebasnya meliputi : Harga, Material yang digunakan, cross section
 +
Dilakukan dengan metode optimasi dan membentuk curve fitting pada variabel harga
 +
 
 +
Pada soal terlihat bahwa rangka memiliki beberapa hal yang diketahui diantaranya adalah gaya yang bekerja yaitu sebesar 1000N dan 2000N pada kedua sisi. Gaya tersebut kemudian diasumsikan bekerja pada node, jadi gaya tersebut terbagi menjadi 2, 1000:2=500N dan 2000:2=1000N. Rangka memiliki tinggi 0,6m, lebar 0,75m dan tinggi 1,8m untuk setiap lantai.
 +
 
 +
Hal yang perlu dilakukan adalah mencari material yang baik untuk rangka, dengan mempertimbangkan safety factor rangka agar dalam kondisi aman pada saat digunakan, dan memperhatikan efisiensi ekonomis dalam pembuatan rangka tersebut. Beberapa yang dilakukan diantaranya :
 +
 
 +
*Variasi yang dapat dilakukan adalah Material sama (digunakan SS304) dengan luas area berbeda dan luas area sama (0,00184 m) tetapi menggunakan jenis material yang berbeda (3 material).
 +
*Mencari Harga dari SS304 dengan luas area berbeda (6 ukuran) dan mencari Harga 3 jenis material untuk area 0,00184 m
 +
*Mensimulate untuk safety factor untuk kedua variasi
 +
*Membuat suatu rasio harga total dengan safety factor
 +
*Melakukan optimasi untuk mengetahui area dan material yang baik untuk rangka
 +
 
 +
Terima kasih kepada Josiah, bang Cristo, bang Fahmi dan teman-teman yang telah membentu berikut merupakan hasil Coding yang telah didiskusikan.
 +
 
 +
model Trusses_3D_TugasBesar_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=215e6; //Yield Strength (Pa)
 +
parameter Real Area=0.000184;  //Area L Profile (Dimension=0.025, Thickness=0,004)(m)
 +
parameter Real Elas=193e9;    //Elasticity SS 304  (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_TugasBesar_Safety;
 +
 
 +
Berikut adalah Data variasi untuk Material sama yaitu SS304, dan Area Factor yang sama adalah 0,00184.
 +
[[File:Data mats,Area nmn.png|500px|center]]
 +
 
 +
Setelah dilakukan stimulate didapatkan hasil Safety factor, kemudian mencari Rasio dengan melakukan perbandingan Safety factor dengan total harga.
 +
[[File:Mats dan Area hasil.png|500px|center]]
 +
 
 +
Kemudian, berdasarkan hasil data yang telah diperoleh, bisa mendapatkan Luas area dan material yang baik digunakan rangka yang akan dibuat dengan menggunakan optimasi dengan curve fitting dan golden bracket.
 +
Fungsi untuk Curve Fittingnya sebagai 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;
 +
 
 +
Optimasi golden ratio untuk data material tetap
 +
 
 +
class Opt_Golden_Section
 +
 
 +
//memasukan data pada xd,yd,xlo,xhi
 +
parameter Real xd[:]={0.000141,0.000144,0.000171,0.000184,0.000224,0.000231};
 +
parameter Real yd[size(xd,1)]={829776,845155,985330,1053955,1269736,1308215};
 +
parameter Real xlo=141e-6;
 +
parameter Real xhi=231e-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  := CurveFitting(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_Golden_Section;
 +
 
 +
Setelah dilakukan stimulate didapatkan hasil optimum pada material tetap
 +
[[File:Optimasi Material tetap.png|500px|center]]
 +
 
 +
Maka dapat disimpulkan bahwa area optimum untuk material tetap adalah 0,000231 m2
 +
 
 +
Kemudian untuk Hasil pada Area tetap, didapatkan hasil optimum material
 +
[[File:Optimasi Area tetap.png|500px|center]]
 +
 
 +
Pada hasilnya terlihat bahwa material maksimum yang digunakan adalah dengan elastisitas 197e9, yaitu material SS201
 +
 
 +
== UAS Metode Numerik ==
 +
Berikut  jawaban Uas nomer 1 sampai 3
 +
[[File:No1.jpg|500px|center]]
 +
[[File:No,2.jpg|500px|center]]
 +
[[File:No3.jpg|500px|center]]
 +
 
 +
Kemudian adalah jawaban nomor 4 sampai 7
 +
[[File:No4.jpg|500px|center]]
 +
[[File:No567.jpg|500px|center]]
 +
 
 +
Coding yang saya gunakan pada open modelica adalah sebagai berikut, dimana menggunakan coding untuk  Trusses karena
 +
hasil yang dicari berupa displacement, dan reaction pada batang
 +
[[File:Screenshotuas1.png|500px|center]]
 +
[[File:Screenshotuas2.png|500px|center]]

Latest revision as of 18:20, 14 January 2021

Data Diri

  • Nama  : Norman Febrianto
  • NPM  : 190630161
  • Jurusan : Teknik Mesin
  • Angkatan: 2019

Perkenalan Singkat

Nama saya Norman Febrianto dari jurusan Mesin Universitas Indonesia. Saya memilih jurusan mesin karena ingin lebih mengetahui dunia permesinan dan prospek kerja jurusan mesin yang cukup luas.

Metode Numerik

Metode numerik merupapakan teknik dalam penyelesaian permsalahan yang diformulasikan secara matematis dengan menggunakan operasi hitungan (aritmatik) yaitu operasi tambah, kurang, kali, dan bagi. Metode ini digunakan karena banyak permasalahan matematis tidak dapat diselesaikan menggunakan metode analitik. Materi yang telah disampaikan dalam mata kuliah Metode Numerik diantaranya :

Pseudocode

  • Sistem Persamaan
  • Turunan Numerik
  • Metode Newton Rhapson, Secant, dan Bisection
  • Regresi Linear
  • Interpolasi

Metode Numerik Minggu ke-1

Dalam belajar metode numerik, terdapat hal-hal yang harus diperhatikan diantaranya :

  • paham melalui konsep-konsep yang telah diberikan, beberapa materi dalam metode numerik : memahami persamaan, istilah algoritma, kurva, regresi, differensial, parsial
  • Dapat menerapkan pemahaman terhadap konsep dalam permodelan numerik, bisa menyelesaikan masalah melalui perhitungan numerik
  • menerapkan metode dalam permasalahan keteknikan
  • dapat mencapai poin 1,2,3 juga dengan moral value yaitu adab

Tugas Minggu ke-1

Mempelajari dan membuat video tutorial menggunakan open modelica, saya sudah membuat video tutorial yang tidak begitu sulit dengan open modelica mengenai interpolasi. berikut contoh soal yang saya coba menyelesaikan dengan openmodelica.

Interpolasi mudah.png

Kita dapat menyelesaikan persoalan berikut dengan menggunakan rumus umum dari interpolasi.

Rumus umum interp.png

Kemudian kita dapat memasukan variabel-variabel yang diketahui, untuk parameter real berdasarkan soal diantaranya x1, x2, y1, y2. Variabel yang akan kita cari adalah y dan dapat kita tuliskan "Real y". Kita juga bisa menuliskan Real x meskipun x sudah diketahui pada open modelica.

Interp.png

Setelah di check, jika tidak terdapat masalah kita save terlebih dahulu dan dapat dilakukan stimulate untuk proses pada openmodelica. Hasil dari Real y yang dicari didapatkan pada box sebelah kanan.

Hasilinter.png

berikut link video saya pada saat mengerjakan interpolasi di atas

saya mempelajari open modelica dari link video berikut : https://www.youtube.com/watch?v=GhtBMIlO70w

Metode Numerik Minggu ke-2

Openmodelica lebih ke bahasa permodelan, bukan hanya bahasa coding seperti pyhton. Namun dalam perhitungan menggunakan code yang dalam bahasa C++, parameter real tidak perlu dicompile ulang cukup di simulate ulang saja. kelebihan openmodelica diantaranya sebagai berikut :

  • 1. menggunakan bahasa permodelan yang cocok untuk engineer
  • 2. segi perhitungan lumayan cepat
  • 3. pengguna aplikasi openmodelica cukup banyak penggunanya, dan termasuk open teknologi (free). Karena seperti mathlab harus membeli atau ada legalisasi

Pada minggu ini, belajar cara untuk memanggil suatu fungsi untuk class tertentu. Jadi pada langkahnya pada awal new, memilih pada option Function untuk membuat fungsi yang nantinya akan digunakan untuk membantu perhitungan. Function dinamakan "Fungsi Tambah X1"dengan X sebagai input, Y sebagai output, dan fungsi yang dibuat adalah Y=10+x. Dibuat dalam Open Modelica sebagai berikut:

Tambahx1.png

Selanjutnya membuat new (baru) untuk memilih option class dinamakan "Panggil" yang digunakan untuk "memanggil" fungsi tambah X1 tersebut. Pada class ini, kita dapat mengubah nilai input X1 sesuai dengan kebutuhan.

Panggil.png

Setelah itu, pada class untuk memakai function yang telah dibuat kita panggil pada "equation". Jadi Function digunakan untuk membantu perhitungan pada class ini. nilai output Y merupakan nilai yang dicari sesuai dengan nilai input X1 yang dimasukan. Sebagai contoh, dimasukkan nilai X1 sebesar 5 maka sesuai fungsi Y=10+X, akan didapatkan nilai Hasil+X1=10+X1=10+5=15.

Hasiltambahx1.png

Nilai outpu Y terlihat pada box di sebelah kanan. Nilai X1 dapat dirubah sesuai dengan kebutuhan dan dapat dilakukan re-simulate untuk mendapatkan nilai outputnya.

Tugas Minggu ke-2

Pengaplikasikan penggunaan Function dan Class pada Openmodelica. membuat sebuah fungsi berupa persamaan aljabar simultan dengan variabel array kemudian membuat class untuk memanggil fungsi tersebut. Persamaan aljabar simultan adalah sebuah persoalan matematika yang kompleks sehingga penyelesaian perlu dengan menggunakan tools, agar dapat dibuat lebih sederhana. Metode yang dapat digunakan untuk menyelesaikan persamaan aljabar simultan adalah metode Gauss, Gauss-Jordan, Crammer, dan Gauss-Seidel. Variabel array adalah sebuah variabel yang di dalamnya terdapat banyak data. Contoh, jika kita memiliki data X1,X2,...,X10 menggunakan variabel array cukup dituliskan X[10] Untuk mencoba menggunakan Function and Class, saya mencoba menjawab soal matriks 4x4 dari contoh soal yang saya browsing di internet.

Soalmatriks4x4.png

Kemudian kita dapat membuat fungsi Gauss untuk matriks 4x4 terlebih dahulu. Pada function saya memakai fungsi "solve" eliminasi gauss dari openmodelica yang dapat digunakan untuk menyelesaikan persamaan matriks

Fgaus4x4.png

Langkah selanjutnya membuat class yang berisikan matriks dari soal, dan untuk menggunakan function yang telah dibuat sebelumnya.

Matx4x4.png

Setelah itu dilakukan stimulate, sehingga didapatkan hasil matriks berikut

Hsl4x4.png
berikut video saya untuk penerapan tugas ke-2 mengenai Function & class

Metode Numerik Minggu ke-3

membuat fungsi di dalam modelica untuk menyelesaikan persamaan aljabar pada buku (9.12) dengan metode Gauss, namun bisa juga menggunakan metode lain seperti Gauss-Jordan. penyelesaian yang hasilnya berupa himpunan disebut array. menggunakan array karena nilai uji akan berubah perr-iterasi, iterasi 1 nilai A, ke-2 B, sehingga hasilnya berupa himpunan penyelesaian dan berupa grafik. [N] merupakan jumlah dari data, dapat juga menjadi 3 dimensi dengan menambahkan variabel lain [O], [P], dan lainnya. Beberapa metode yang dapat digunakan yaitu CFD, Stokastik, dan FEA. Dalam menyelesaikan masalah teknik, angkah yang harus dilakukan adalah melakukan analisis, membuat model matematis, menggunakan metode numerik untuk penyelesain (menggunakan computer), dan didapatkan solusi dari permasalahan. Salah satu permasalahan teknik yang dijadikan contoh adalah mengenai Truss.

Pada kelas kali ini, sebelumnya diriview kembali mengenai aljabar simultan untuk menyelesaikan persamaan linier dengan matriks. Pengaplikasian dalam Open Modelica, kita akan membuat code untuk menyelesaikan persamaan 9.12 pada buku Chapra yaitu mengenai eliminasi Naïve Gauss. Pseudocode untuk eliminasi Naïve Gauss diberikan pada Fig.9.4:

Fig9.12.png

pada open modelica dapat dituliskan dengan menggunakan Function, dinamakan "NaiveGauss"

Naivgaus.png

Kemudian dapat dipanggil function sebelumnya kedalam class

Prob9.5.png

Setelah itu dapat kita stimulate untuk di dapatkan hasilnya

Hslnaiv.png

Tugas Minggu ke-3

Mencoba mengerjakan soal permasalahan teknik yaitu Truss, dengan menggunakan openmodelica. Berikut soal yang harus dikerjakan

Tugas minggu 3.jpeg

Berikut merupakan Program yang dibuat pada modelica untuk penyelesaian

*class TrussesHW
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;

Grafik Reaction Process

Reac.Displacem.png

Grafik Diplacement

Sol.displace.png


Transformasi Matriks

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;

Metode Numerik Minggu ke-4

Quiz Flowchart dan class diagram

pada minggu ke-4 memahami mengenai flowchart berdasarkan coding yang dibuat josiah, berikut jawaban dari saya

Norman F Quiz.jpg

Tugas Minggu ke-4

Pada minggu ke empat, kami perlu mengerjakan soal no.8 mengenai truss 3 Dimensi dengan menggunakan open modelica, berikut soal yang harus dikerjakan dan dipahami.

Soal no 8.jpg

Pembuatan diagram class dan flowchart dari soal adalah sebagai berikut :

Dclassno8.jpg
Fchartno8.jpg

pertama kita bahas dengan mencari diketahui, dan menuliskan parameter yang ada dengan menghitung

Dikno8.jpg

kemudian menuliskan function yang terlibat dalam pengerjaan soal, pertama adalah function element matrices

StiffnessMatrixElement.png

Kemudian matriks untuk stiffness global

StiffnessMatrixGlobal.png

Setelah itu dapat kita jumlahkan matriks global, dan menentukan boundary dari matriks

SumStiffnessMatrixGlobal.png
BoundaryStiffnessMatrixGlobal.png

Kemudian kita bisa memanggil fungsi Gaussjordan, dan menentukan Reaksi dengan fungsi reaction

GaussJordan.png

setelah itu akan didapatkan hasil U(displacement) dan R(Reaction)

U&R.png

Berikut link video yang saya buat untuk menjelaskan mengenai proses coding atau pengerjaan soal no.8

Metode Numerik Minggu ke-6

sistem optimasi dalam sistem ada fluida cair sistem aliran darah, berupa udara yaitu sistem pernapasan. Yang ditampilkan pada grafik adalah suatu karakteristik dari sistem dan komponen. komponen penting dalam sistem perpipaan sistem fluida tidak hanya perpipaan tetapi ada mesin kerja (pompa) dan tenaga, ada valve, pipa belok. sistem fluida, aliran air dimasukan yang terdiri dari pompa, pipa, pipa belok (T,L) valve. Setiap komponen bertujuan sama yaitu mengalirkan air dari satu tempat ke tempat lain Sistem tersebut adalah pompa, dengan sistem pendukung, memberi tenaga pada pompa

Grafikfluid.jpeg

yng melengkung adalah grafik efisiensi Break housepower sumbu datar adalah jumlah aliran yang diantarkan sumbu y adalah efisiensi dari pompa garis hijau adalah tenaga air yang keluar dari pompa seiring jumlah air yang dikeluarkan tekanan akan turun sementara breakhouse power akan naik. pada efisiensi, makin tinggi kapasitas maka efisiensi akan naik. Terdapat titik maksimum dan setelah itu efisiensi akan menurun. Terdapat suatu titik maks untuk efisiensi yang pada akhirnya akan menurun pada kondisi berpaa dan kapasitas berapa, sehingga mendapat efisiensi pompa yang maksimum. untuk efisiensi sistem, mempertimbangkan heatloss pada kondisi tertentu.

Pembahasan berikutnya mengenai metode Bracket Optimization Using Golden Ratio Method oleh bu Chandra. Jika ingin menyelesaikan suatu masalah dengan optimasi, harus paham terlebih dahulu mengenai materinya

Bracktergraph.png
  • Menentukan dan mengetahui batasan titik awal terendah (xL) dan tertinggi (xH)
  • Mendapatkan nilai x1 dan x2 dari golden ratio (d)
  • Menentukan xL dan xH berdasarkan nilai batasan maksimum dan minimal baru
  • Mendapatkan nilai x1 dan x2 baru

Jika dalam soal diketahui untuk menyelesaikan persamaan y=2sinx-x^2/10, dapat dimasukan ke dalam openmodelica, pertama membuat function dari persamaan tersebut yang nanti akan dipanggil nantinya

Fxobj3.png

Setelah di cek dan tidak terjadi masalah, dapat dibuat model yang akan memanggil fungsi tersebut

Brackopt.png

Progress Tugas Besar (23-12-2020)

Tugas besar yang diberikan untuk kelas metnum 02 dan 03 adalah optimasi untuk rangka batang:

600px-Soaltubes.jpeg

suatu rangka batang yang telah dibentuk seperti gambar diatas, dengan spesifikasi sebagai berikut:

Soaltubes2.jpeg

Diharapkan dari soal tersebut dapat mendesain rangka batang dengan harga terjangkau dan optimal untuk fungsinya.

Faktor atau variabel bebasnya meliputi : Harga, Material yang digunakan, cross section Dilakukan dengan metode optimasi dan membentuk curve fitting pada variabel harga

Pada soal terlihat bahwa rangka memiliki beberapa hal yang diketahui diantaranya adalah gaya yang bekerja yaitu sebesar 1000N dan 2000N pada kedua sisi. Gaya tersebut kemudian diasumsikan bekerja pada node, jadi gaya tersebut terbagi menjadi 2, 1000:2=500N dan 2000:2=1000N. Rangka memiliki tinggi 0,6m, lebar 0,75m dan tinggi 1,8m untuk setiap lantai.

Hal yang perlu dilakukan adalah mencari material yang baik untuk rangka, dengan mempertimbangkan safety factor rangka agar dalam kondisi aman pada saat digunakan, dan memperhatikan efisiensi ekonomis dalam pembuatan rangka tersebut. Beberapa yang dilakukan diantaranya :

  • Variasi yang dapat dilakukan adalah Material sama (digunakan SS304) dengan luas area berbeda dan luas area sama (0,00184 m) tetapi menggunakan jenis material yang berbeda (3 material).
  • Mencari Harga dari SS304 dengan luas area berbeda (6 ukuran) dan mencari Harga 3 jenis material untuk area 0,00184 m
  • Mensimulate untuk safety factor untuk kedua variasi
  • Membuat suatu rasio harga total dengan safety factor
  • Melakukan optimasi untuk mengetahui area dan material yang baik untuk rangka

Terima kasih kepada Josiah, bang Cristo, bang Fahmi dan teman-teman yang telah membentu berikut merupakan hasil Coding yang telah didiskusikan.

model Trusses_3D_TugasBesar_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=215e6; //Yield Strength (Pa) 
parameter Real Area=0.000184;   //Area L Profile (Dimension=0.025, Thickness=0,004)(m)
parameter Real Elas=193e9;     //Elasticity SS 304  (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_TugasBesar_Safety;

Berikut adalah Data variasi untuk Material sama yaitu SS304, dan Area Factor yang sama adalah 0,00184.

Data mats,Area nmn.png

Setelah dilakukan stimulate didapatkan hasil Safety factor, kemudian mencari Rasio dengan melakukan perbandingan Safety factor dengan total harga.

Mats dan Area hasil.png

Kemudian, berdasarkan hasil data yang telah diperoleh, bisa mendapatkan Luas area dan material yang baik digunakan rangka yang akan dibuat dengan menggunakan optimasi dengan curve fitting dan golden bracket. Fungsi untuk Curve Fittingnya sebagai 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;

Optimasi golden ratio untuk data material tetap

class Opt_Golden_Section
//memasukan data pada xd,yd,xlo,xhi
parameter Real xd[:]={0.000141,0.000144,0.000171,0.000184,0.000224,0.000231};
parameter Real yd[size(xd,1)]={829776,845155,985330,1053955,1269736,1308215};
parameter Real xlo=141e-6;
parameter Real xhi=231e-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  := CurveFitting(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_Golden_Section;

Setelah dilakukan stimulate didapatkan hasil optimum pada material tetap

Optimasi Material tetap.png

Maka dapat disimpulkan bahwa area optimum untuk material tetap adalah 0,000231 m2

Kemudian untuk Hasil pada Area tetap, didapatkan hasil optimum material

Optimasi Area tetap.png

Pada hasilnya terlihat bahwa material maksimum yang digunakan adalah dengan elastisitas 197e9, yaitu material SS201

UAS Metode Numerik

Berikut jawaban Uas nomer 1 sampai 3

No1.jpg
No,2.jpg
No3.jpg

Kemudian adalah jawaban nomor 4 sampai 7

No4.jpg
No567.jpg

Coding yang saya gunakan pada open modelica adalah sebagai berikut, dimana menggunakan coding untuk Trusses karena hasil yang dicari berupa displacement, dan reaction pada batang

Screenshotuas1.png
Screenshotuas2.png