Difference between revisions of "Yogi Gunawan Atmawijaya"
YogiGunawan (talk | contribs) |
YogiGunawan (talk | contribs) (→Tugas Besar) |
||
(123 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | =Biodata= | ||
+ | |||
+ | [[File:Foto_Yogi.jpg|200px|thumb|left|Yogi Gunawan Atmawijaya]] | ||
+ | Nama : Yogi Gunawan Atmawijaya | ||
+ | |||
+ | NPM S1 : 1806201005 | ||
+ | |||
+ | NPM S2 : 2406468690 | ||
+ | |||
+ | Tanggal Lahir : 27 Maret 2000 | ||
+ | |||
+ | Tempat Lahir : Tangerang | ||
+ | |||
+ | |||
+ | S1 | ||
+ | |||
Saya adalah mahasiswa FTUI angkatan 2018 jurusan Teknik Mesin. | Saya adalah mahasiswa FTUI angkatan 2018 jurusan Teknik Mesin. | ||
Saya memilih jurusan teknik mesin karena setelah melihat pelajaran-pelajaran di jurusan ini cocok dengan minat saya dan saya yakin saya bisa kuliah dengan baik di Teknik Mesin | Saya memilih jurusan teknik mesin karena setelah melihat pelajaran-pelajaran di jurusan ini cocok dengan minat saya dan saya yakin saya bisa kuliah dengan baik di Teknik Mesin | ||
− | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | S2 | ||
+ | |||
+ | Saya menlanjutkan studi S2 di Universitas Indonesia jurusan Manufaktur dan Otomasi. Setelah menyelesaikan S1, saya tertarik dengan topik otomasi yang semakin lama semakin terpakai di Dunia. | ||
+ | |||
+ | |||
+ | __TOC__ | ||
+ | |||
+ | =S1= | ||
+ | ==Metode Numerik== | ||
+ | Pelajaran yang sudah saya pelajari di setengah semester pertama pada mata kuliah metode numerik yang diajar oleh Dr. Ir. Engkos Achmad Kosasih M.T. adalah : | ||
+ | *macam-macam error | ||
+ | *turunan numerik | ||
+ | *metode bisection | ||
+ | *metode newton-raphson | ||
+ | *metode secant | ||
+ | *deret mc laurint. | ||
+ | |||
+ | == Minggu 1 (Rabu, 11 November 2020) == | ||
Ada 4 tujuan metode numerik | Ada 4 tujuan metode numerik | ||
*1. memahami konsep dengan dengan baik tentang dasar-dasar metode numerik. bila dasarnya tidak paham konsep dengan baik, maka tidak akan mengerti. | *1. memahami konsep dengan dengan baik tentang dasar-dasar metode numerik. bila dasarnya tidak paham konsep dengan baik, maka tidak akan mengerti. | ||
Line 10: | Line 47: | ||
*3. mampu menerapkan metode numerik dipersoalan keteknikan | *3. mampu menerapkan metode numerik dipersoalan keteknikan | ||
*4. untuk mendapat nilai tambah membuat kita menajadi manusia yang beradab | *4. untuk mendapat nilai tambah membuat kita menajadi manusia yang beradab | ||
+ | |||
+ | Pada diskusi hari ini, Rabu, 11 Nov 2020, saya mempelejari bahwa komputer walaupun bisa memudahkan pekerjaan kita tetapi komputer juga mempunyai keterbatasan. Jadi sejatinya kita tidak dapat mengandalkan komputer sepenuhnya. Dan sebagai manusia kita juga tidak luput dari ketidaktahuan karena sejatinya hanya Tuhan yang Maha Tahu | ||
+ | |||
+ | |||
+ | ===Tugas 1=== | ||
+ | Untuk tugas minggu 1 kami diminta untuk melihat tutorial Open Modelica dari youtube. Setelah melihat tutorial tersebut kami membuat video tutorial singkat. Berikut ini adalah video tutorial OpenModelica Basic | ||
+ | |||
+ | <youtube width="200" height="100">YNEHUeH5FsQ</youtube> | ||
+ | |||
+ | == Minggu 2 (Rabu, 18 November 2020) == | ||
+ | Sebelum dijelaskan materi, kami diminta mereview hal-hal apa saja yang sudah kami pelajari diminggu 1 dan apa saja hal yang sudah dicoba untuk tugas 1 yaitu memepelajari dasar dari Open Modelica. Pak Dai menjelaskan kenapa Pak Dai memilih aplikasi open modelica dibandingkan program lain untuk tools belajar kami. Pak Dai menjelaskan bahwa aplikasi Open Modelica ini sebenarnya bukan aplikasi programing, melainkan aplikasi untuk modelling. Open Modelica tidak mempunyai bahasa program sendiri, itu kenapa proses dari simulasi Open Modelica ini lebih lama dibandingkan aplikasi lain. Open modelica memproses data lebih lama dikarenakan Open Modelica harus menerjemahkan perintah yang kita tulis menjadi bahasa C++, setelah itu baru data bisa diproses. | ||
+ | |||
+ | Setelah itu kami diminta mencoba membuat suatu file class yang digunakan untuk "memanggil" suatu fungsi dari file function. Kami membuat file function sebagai berikut : | ||
+ | |||
+ | '''FungsiTambahX1.mo''' | ||
+ | |||
+ | function FungsiTambahX1 | ||
+ | |||
+ | input Real x; | ||
+ | output Real y; | ||
+ | |||
+ | algorithm | ||
+ | y:=x+10; | ||
+ | |||
+ | end FungsiTambahX1; | ||
+ | |||
+ | Setelah itu kami membuat file class untuk "memanggil" fungsi dari file function diatas. Pseudocodenya sebagai berikut : | ||
+ | |||
+ | '''Panggil.mo''' | ||
+ | |||
+ | class Panggil | ||
+ | |||
+ | parameter Real x1=5; | ||
+ | Real hasil10tambahx1; | ||
+ | |||
+ | equation | ||
+ | hasil10tambahx1=FungsiTambahX1(x1); | ||
+ | |||
+ | end Panggil; | ||
+ | |||
+ | Dijelaskan dengan memanggil file function diatas, maka pada saat di file class, inputnya menjadi x1 dimana x1 tersebut mempunyai nilai dan nilai tersebut akan menjadi input dari persamaan yang masukan di file FungsiTambahX1.mo | ||
+ | |||
+ | ===Tugas 2=== | ||
+ | Untuk tugas 2, kami diminta untuk membuat suatu fungsi panggil seperti yang dicontohkan pada saat kelas menggunakan persamaan aljabar simultan dan variable array. Persamaan Aljabar Simultan sendiri adalah persamaan yang kompleks karena memiliki banyak variable yang perlu dicari nilainya. Variable array adalah variable yang didalamnya memiliki beberapa data nilai. Pada tugas ini saya mencoba membuatnya menggunakan 3 persamaan sederhana yang memiliki 3 variable yang harus dicari nilainya. persamaannya adalah sebagai berikut : | ||
+ | |||
+ | [[File:GaussContoh.jpg]] | ||
+ | |||
+ | Lalu saya buat file function sebagai berikut : | ||
+ | |||
+ | '''Gauss_Function.mo''' | ||
+ | |||
+ | function Gauss_Function | ||
+ | |||
+ | input Real P[3,3]; | ||
+ | input Real Q[3]; | ||
+ | output Real R[3]; | ||
+ | |||
+ | algorithm | ||
+ | |||
+ | R:=Modelica.Math.Matrices.solve(P,Q); | ||
+ | |||
+ | end Gauss_Function; | ||
+ | |||
+ | Dan saya membuat file class sebagai berikut : | ||
+ | |||
+ | '''Gauss_Class.mo''' | ||
+ | |||
+ | class Gauss_Class | ||
+ | |||
+ | parameter Real A[3,3]=[2,5,3;3,4,2;1,3,1]; | ||
+ | parameter Real B[3]={1,-3,2}; | ||
+ | Real X[3]; | ||
+ | |||
+ | equation | ||
+ | |||
+ | X=Gauss_Function(A,B); | ||
+ | |||
+ | end Gauss_Class; | ||
+ | |||
+ | |||
+ | Berikut adalah video penjelasan tentang pembuatan 2 file diatas : | ||
+ | |||
+ | <youtube width="200" height="100">OFHBY0FXyvg</youtube> | ||
+ | |||
+ | |||
+ | ==Minggu 3 (Rabu, 25 November 2020)== | ||
+ | Pada minggu ketiga, kami dijelaskan tentang pseudocode gauss elimination secara manual. Pak Dai menginginkan kami bisa membuat pseudocode sendiri tanpa menggunakan fungsi yang sudah disediakan dari OpenModelica itu sendiri. Jadi pada saat dikelas kami dijelaskan oleh Christo. Christo adalah salah satu mahasiswa yang juga mengambil mata kuliah metode numerik yang diajar oleh pak Dai. Christo menjelaskan dengan sangat jelas psudocode untuk gauss. Pseudocode dari gauss jordan berdasarkan apa yang sudah Christo jelaskan adalah sebagai berikut : | ||
+ | |||
+ | '''GaussJordan.mo''' | ||
+ | function GaussJordan | ||
+ | |||
+ | input Real [:,:] A; | ||
+ | output Real [:,:] B; | ||
+ | |||
+ | protected // untuk local variable | ||
+ | Integer h = 1; //pivot row | ||
+ | Integer k = 1; //pivot coloumn | ||
+ | Integer m = size(A,1); //Number of row | ||
+ | Integer n = size(A,2); //Number of column | ||
+ | Integer c = 0; | ||
+ | Integer max_row; // Row index of max number in pivot column | ||
+ | |||
+ | Real [:] pivot_column; | ||
+ | Real [:] pivot_row; | ||
+ | Real [:,:] temp_array; | ||
+ | Real r; | ||
+ | |||
+ | Real float_error = 10e-10; | ||
+ | |||
+ | |||
+ | algorithm | ||
+ | |||
+ | //fungsi input A dan output B | ||
+ | B := A; | ||
+ | |||
+ | while h <= m and k <= n loop | ||
+ | |||
+ | for i in 1 : m loop | ||
+ | for j in 1 : n loop | ||
+ | if abs(B[i,j]) <= float_error then | ||
+ | B[i,j] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | //Finding pivot | ||
+ | pivot_column:= {B[i,h] for i in h:m}; | ||
+ | |||
+ | //Mencari baris terbawah yang mempunyai nilai pivot tertinggi | ||
+ | c:=h-1; | ||
+ | for element in pivot_column loop | ||
+ | c:= c+1; | ||
+ | if abs(element)== max(abs(pivot_column)) then | ||
+ | max_row :=c; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | //Jika tidak ada pivot di kolom ini, pindah ke kolom selanjutnya | ||
+ | if B[max_row,k] == 0 then | ||
+ | k:=k+1; | ||
+ | |||
+ | else | ||
+ | // tukar row h - max_row | ||
+ | temp_array := B; | ||
+ | temp_array[h] := B[max_row]; | ||
+ | temp_array[max_row] := B[h]; | ||
+ | B:= temp_array; | ||
+ | |||
+ | //devide pivot row by pivot number | ||
+ | B[h] := B[h]/B[h,k]; | ||
+ | |||
+ | for i in (h+1) :m loop | ||
+ | r := B[i,k]/B[h,k]; | ||
+ | |||
+ | B[i,k]:=0; | ||
+ | |||
+ | for j in (k+1) : n loop | ||
+ | B[i,j] := B[i,j]-B[h,j] * r; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | //move ke pivot kolom dan row selanjutnya | ||
+ | h := h+1; | ||
+ | k := k+1; | ||
+ | |||
+ | end if; | ||
+ | |||
+ | end while; | ||
+ | |||
+ | // proses dari kanan atas | ||
+ | h :=m; | ||
+ | k :=n; | ||
+ | |||
+ | while h >=1 and k>=1 loop | ||
+ | |||
+ | //dealing with error | ||
+ | for i in 1:m loop | ||
+ | for j in 1:n loop | ||
+ | if abs(B[i,j]) <=float_error then | ||
+ | B[i,j]:=0; | ||
+ | end if; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | //finding pivot | ||
+ | pivot_row := {B[h,i] for i in 1:k}; | ||
+ | |||
+ | //Get position index k of pivot | ||
+ | c := 0; | ||
+ | for element in pivot_row loop | ||
+ | c := c+1; | ||
+ | if element <> 0 then | ||
+ | break; | ||
+ | end if; | ||
+ | end for; | ||
+ | k:= c; | ||
+ | |||
+ | // no pivot in this row, move to next row | ||
+ | if B[h,k] == 0 then | ||
+ | h:= h-1; | ||
+ | |||
+ | else | ||
+ | //perform row operatation | ||
+ | for i in 1:(h-1) loop | ||
+ | r := B[i,k]; | ||
+ | B[i] := B[i] - B[h] *r; | ||
+ | end for; | ||
+ | |||
+ | //move to next pivot row dan column | ||
+ | h:=h+1; | ||
+ | k:=k+1; | ||
+ | |||
+ | end if; | ||
+ | |||
+ | end while; | ||
+ | |||
+ | |||
+ | end GaussJordan; | ||
+ | |||
+ | |||
+ | Lalu kami diminta untuk membuat pseudocode open modelica dari suatu pseudocode matlab yang ada dibuku yaitu Fig. 9.4 : | ||
+ | [[File:HIkaru 9.4.png|720px|center]] | ||
+ | |||
+ | Pseudocodenya adalah sebagai berikut : | ||
+ | |||
+ | '''NaiveGauss.mo''' | ||
+ | function NaiveGauss | ||
+ | |||
+ | input Real [3,3] A; | ||
+ | input Real [3] B; | ||
+ | output Real [3] x; | ||
+ | |||
+ | protected | ||
+ | Real [3,3] a; | ||
+ | Real [3] b; | ||
+ | Integer m = size(A,1); // kolom | ||
+ | Integer n = size(A,2); // baris | ||
+ | Real k = 1; | ||
+ | Real i = 1; | ||
+ | Real j = 1; | ||
+ | Real factor = 1; | ||
+ | Real sum = 1; | ||
+ | algorithm | ||
+ | |||
+ | // Transfer input matrix (A,B) into variables (a,b) | ||
+ | a := A; | ||
+ | b := B; | ||
+ | |||
+ | // Forward Elimination | ||
+ | for k in 1:(n-1) loop | ||
+ | for i in (k+1):n loop | ||
+ | factor := a[i,k] / a[k,k]; | ||
+ | for j in (k+1):n loop | ||
+ | a[i,j] := a[i,j] - (factor * a[k,j]); | ||
+ | end for; | ||
+ | b[i] := b[i] - (factor * b[k]); | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | // Back Substitution | ||
+ | x[n] := b[n] / a[n,n]; | ||
+ | for i in (n-1):(-1) loop | ||
+ | sum := b[i]; | ||
+ | for j in (i+1):n loop | ||
+ | sum := sum - (a[i,j] * x[j]); | ||
+ | end for; | ||
+ | x[i] := sum / a[i,i]; | ||
+ | end for; | ||
+ | |||
+ | end NaiveGauss; | ||
+ | |||
+ | Lalu pseudocode tersebut digunakan untuk menyelesaikan persamaan example 9.5 dan penyelesaiannya adalah sebagai berikut : | ||
+ | |||
+ | '''Ex9_5.mo''' | ||
+ | class Ex9_5 | ||
+ | |||
+ | parameter Real A[3,3]=[3,-0.1,-0.2; | ||
+ | 0.1,7,-0.3; | ||
+ | 0.3,-0.2,10]; | ||
+ | parameter Real B[3]={7.85,-19.3,71.4}; | ||
+ | Real x[3]; | ||
+ | |||
+ | equation | ||
+ | x=NaiveGauss(A,B); | ||
+ | |||
+ | |||
+ | end Ex9_5; | ||
+ | |||
+ | Dari class tersebut disimulate dan didapatkan hasil sebagai berikut : | ||
+ | [[File:95.jpg|720px|center]] | ||
+ | |||
+ | ===Tugas 3=== | ||
+ | Pada tugas kali ini, Pak Dai memberikan tugas mengenai materi Truss yang harus diselesaikan menggunakan Open Modelica. Soalnya adalah sebagai berikut : | ||
+ | |||
+ | [[File:pr3-1.png|720px|center]] | ||
+ | |||
+ | Langkah pertama saya membuat matriks sesuai aturan yang sudah dijelaskan didalam buku. Lalu matriks tersebut diselesaikan didalam open modelica dengan psudocode sebagai berikut : | ||
+ | |||
+ | '''Tugas3Truss.mo''' | ||
+ | class Tugas3Truss | ||
+ | |||
+ | Real [8] U; | ||
+ | Real [8] R; | ||
+ | |||
+ | Real E = 200e9; | ||
+ | Real A = 0.001; | ||
+ | |||
+ | Real L1 = 1; | ||
+ | Real L2 = 1; | ||
+ | Real L3 = 1.6; | ||
+ | Real L4 = 1.25; | ||
+ | Real L5 = L3; | ||
+ | |||
+ | Real teta1 = degtorad(0); | ||
+ | Real teta2 = degtorad(0); | ||
+ | Real teta3 = degtorad(231.34); | ||
+ | Real teta4 = degtorad(270); | ||
+ | Real teta5 = degtorad(308.66); | ||
+ | |||
+ | Real [8,8] K1 = | ||
+ | [(E*A/L1)*(cos(teta1))^2,(E*A/L1)*cos(teta1)*sin(teta1),(E*A/L1)*(-(cos(teta1))^2),(E*A/L1)*(-cos(teta1)*sin(teta1)),0,0,0,0; | ||
+ | (E*A/L1)*cos(teta1)*sin(teta1),(E*A/L1)*(sin(teta1))^2,(E*A/L1)*(-cos(teta1)*sin(teta1)),(E*A/L1)*(-(sin(teta1))^2),0,0,0,0; | ||
+ | (E*A/L1)*(-(cos(teta1))^2),(E*A/L1)*(-cos(teta1)*sin(teta1)),(E*A/L1)*(cos(teta1))^2,(E*A/L1)*cos(teta1)*sin(teta1),0,0,0,0; | ||
+ | (E*A/L1)*(-cos(teta1)*sin(teta1)),(E*A/L1)*(-(sin(teta1))^2),(E*A/L1)*cos(teta1)*sin(teta1),(E*A/L1)*(sin(teta1))^2,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]; | ||
+ | |||
+ | Real [8,8] K2 = | ||
+ | [0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,(E*A/L2)*(cos(teta2))^2,(E*A/L2)*cos(teta2)*sin(teta2),(E*A/L2)*(-(cos(teta2))^2),(E*A/L2)*(-cos(teta2)*sin(teta2)),0,0; | ||
+ | 0,0,(E*A/L2)*cos(teta2)*sin(teta2),(E*A/L2)*(sin(teta2))^2,(E*A/L2)*(-cos(teta2)*sin(teta2)),(E*A/L2)*(-(sin(teta2))^2),0,0; | ||
+ | 0,0,(E*A/L2)*(-(cos(teta2))^2),(E*A/L2)*(-cos(teta2)*sin(teta2)),(E*A/L2)*(cos(teta2))^2,(E*A/L2)*cos(teta2)*sin(teta2),0,0; | ||
+ | 0,0,(E*A/L2)*(-cos(teta2)*sin(teta2)),(E*A/L2)*(-(sin(teta2))^2),(E*A/L2)*cos(teta2)*sin(teta2),(E*A/L2)*(sin(teta2))^2,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0]; | ||
+ | |||
+ | Real [8,8] K3 = | ||
+ | [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,(E*A/L3)*(cos(teta3))^2,(E*A/L3)*cos(teta3)*sin(teta3),(E*A/L3)*(-(cos(teta3))^2),(E*A/L3)*(-cos(teta3)*sin(teta3)); | ||
+ | 0,0,0,0,(E*A/L3)*cos(teta3)*sin(teta3),(E*A/L3)*(sin(teta3))^2,(E*A/L3)*(-cos(teta3)*sin(teta3)),(E*A/L3)*(-(sin(teta3))^2); | ||
+ | 0,0,0,0,(E*A/L3)*(-(cos(teta3))^2),(E*A/L3)*(-cos(teta3)*sin(teta3)),(E*A/L3)*(cos(teta3))^2,(E*A/L3)*cos(teta3)*sin(teta3); | ||
+ | 0,0,0,0,(E*A/L3)*(-cos(teta3)*sin(teta3)),(E*A/L3)*(-(sin(teta3))^2),(E*A/L3)*cos(teta3)*sin(teta3),(E*A/L3)*(sin(teta3))^2]; | ||
+ | |||
+ | Real [8,8] K4 = | ||
+ | [0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,(E*A/L4)*(cos(teta4))^2,(E*A/L4)*cos(teta4)*sin(teta4),0,0,(E*A/L4)*(-(cos(teta4))^2),(E*A/L4)*(-cos(teta4)*sin(teta4)); | ||
+ | 0,0,(E*A/L4)*cos(teta4)*sin(teta4),(E*A/L4)*(sin(teta4))^2,0,0,(E*A/L4)*(-cos(teta4)*sin(teta4)),(E*A/L4)*(-(sin(teta4))^2); | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,(E*A/L4)*(-(cos(teta4))^2),(E*A/L4)*(-cos(teta4)*sin(teta4)),0,0,(E*A/L4)*(cos(teta4))^2,(E*A/L4)*cos(teta4)*sin(teta4); | ||
+ | 0,0,(E*A/L4)*(-cos(teta4)*sin(teta4)),(E*A/L4)*(-(sin(teta4))^2),0,0,(E*A/L4)*cos(teta4)*sin(teta4),(E*A/L4)*(sin(teta4))^2]; | ||
+ | |||
+ | Real [8,8] K5 = | ||
+ | [(E*A/L5)*(cos(teta5))^2,(E*A/L5)*cos(teta5)*sin(teta5),0,0,0,0,(E*A/L5)*(-(cos(teta5))^2),(E*A/L5)*(-cos(teta5)*sin(teta5)); | ||
+ | (E*A/L5)*cos(teta5)*sin(teta5),(E*A/L5)*(sin(teta5))^2,0,0,0,0,(E*A/L5)*(-cos(teta5)*sin(teta5)),(E*A/L5)*(-(sin(teta5))^2); | ||
+ | 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; | ||
+ | (E*A/L5)*(-(cos(teta5))^2),(E*A/L5)*(-cos(teta5)*sin(teta5)),0,0,0,0,(E*A/L5)*(cos(teta5))^2,(E*A/L5)*cos(teta5)*sin(teta5); | ||
+ | (E*A/L5)*(-cos(teta5)*sin(teta5)),(E*A/L5)*(-(sin(teta5))^2),0,0,0,0,(E*A/L5)*cos(teta5)*sin(teta5),(E*A/L5)*(sin(teta5))^2]; | ||
+ | |||
+ | Real KG[8,8]=K1+K2+K3+K4+K5; | ||
+ | |||
+ | Real KGB[8,8] = [10^6,0,0,0,0,0,0,0; | ||
+ | 0,10^6,0,0,0,0,0,0; | ||
+ | -2e7,0,4e7,38223.5,-2e7,0,-91.3155,-38223.5; | ||
+ | 0,0,38223.5,1.5e7,0,0,-38223.5,-1e7; | ||
+ | 0,0,0,0,10^6,0,0,0; | ||
+ | 0,0,0,0,0,10^6,0,0; | ||
+ | -4e6,-6e6,-91.3155,-38223.5,-4e6,-6e6,9.7e6,51373.2; | ||
+ | 6e6,-7e6,-38223.5,-1e7,-6e6,-7e6,51373.2,3.1e7]; | ||
+ | |||
+ | Real F[8] = {0,0,-1035.276,3863.703,0,0,-1035.276,3863.703}; | ||
+ | |||
+ | equation | ||
+ | |||
+ | U = GaussJordan(KGB,F); | ||
+ | |||
+ | R = KG * U - F; | ||
+ | |||
+ | end Tugas3Truss; | ||
+ | |||
+ | Setelah disimulate, didapatkan hasil sebagai berikut : | ||
+ | |||
+ | [[File:Hasiltruss.jpg|center]] | ||
+ | |||
+ | ==Minggu 4 (Rabu, 2 Desember 2020)== | ||
+ | ===Kuis 01, Diagram Class dan Flowchart=== | ||
+ | '''Flowchart''' | ||
+ | |||
+ | [[File:Kuis1yogia.jpg|720px|center]] | ||
+ | |||
+ | '''Class Diagram''' | ||
+ | |||
+ | [[File:Kuis1yogib.jpg|720px|center]] | ||
+ | |||
+ | ===Tugas 4=== | ||
+ | Melanjutkan tugas 3, pada tugas 4 kali ini, kami diminta untuk menyelesaikan permasalahan truss 3 dimensi. | ||
+ | |||
+ | [[File:Soaly.jpeg|center]] | ||
+ | |||
+ | Lalu pertama-tama saya membuat FBD dari sistem truss tersebut dan mencari semua data untuk semua truss pada sistem tersebut. | ||
+ | |||
+ | [[File:Penjelasany.jpg|720px|center]] | ||
+ | |||
+ | Lalu proses semua data berdasarkan rumus yang ada didalam open modelica | ||
+ | |||
+ | '''StiffnessMatrixElement.mo''' | ||
+ | function StiffnessMatrixElement | ||
+ | |||
+ | input Real [:,9] inisiasi_mat; | ||
+ | output Real [size(inisiasi_mat,1),6,6] Ke_mat; | ||
+ | |||
+ | protected | ||
+ | Real cos_x; | ||
+ | Real cos_y; | ||
+ | Real cos_z; | ||
+ | Real [6] StiffTrig; | ||
+ | Real [6,6] StiffTrans; | ||
+ | Real [size(inisiasi_mat,1)] k_vec; | ||
+ | |||
+ | algorithm | ||
+ | k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)}; | ||
+ | |||
+ | // Finding stiffness matrix of each element member | ||
+ | for i in 1:size(inisiasi_mat,1) loop | ||
+ | |||
+ | // Clearing the matrices | ||
+ | StiffTrig := zeros(6); | ||
+ | StiffTrans := zeros(6,6); | ||
+ | |||
+ | // Converting degrees to radians | ||
+ | cos_x := inisiasi_mat[i,4]; | ||
+ | cos_y := inisiasi_mat[i,5]; | ||
+ | cos_z := inisiasi_mat[i,6]; | ||
+ | |||
+ | // {cos^2, sin^2, sincos} | ||
+ | StiffTrig := {(cos_x)^2, | ||
+ | (cos_y)^2, | ||
+ | (cos_z)^2, | ||
+ | (cos_x*cos_y), | ||
+ | (cos_x*cos_z), | ||
+ | (cos_y*cos_z)}; | ||
+ | |||
+ | // Construct stiffness transformation matrix | ||
+ | StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5]; | ||
+ | StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6]; | ||
+ | StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3]; | ||
+ | -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5]; | ||
+ | -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6]; | ||
+ | -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]]; | ||
+ | |||
+ | // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat | ||
+ | for m in 1:6 loop | ||
+ | for n in 1:6 loop | ||
+ | Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n]; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | end for; | ||
+ | end StiffnessMatrixElement; | ||
+ | |||
+ | Setelah itu dibuat matriks K global 12x12 dari masing-masing element | ||
+ | |||
+ | '''StiffnessMatrixGlobal.mo''' | ||
+ | function StiffnessMatrixGlobal | ||
+ | input Integer [:,2] n; | ||
+ | input Integer x; | ||
+ | input Integer y; | ||
+ | input Real [y,6,6] Ke_mat; | ||
+ | output Real [y,x,x] Kg_mat; | ||
+ | |||
+ | algorithm | ||
+ | for i in 1:y loop | ||
+ | for a in 1:x loop | ||
+ | for b in 1:x loop | ||
+ | Kg_mat[i,a,b]:=0; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | for i in 1:y loop | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4]; | ||
+ | end for; | ||
+ | end StiffnessMatrixGlobal; | ||
+ | |||
+ | Setelah itu semua matriks global dari masing-masing element akan dijumlahkan | ||
+ | |||
+ | '''SumStiffnessMatrixGlobal.mo''' | ||
+ | function SumStiffnessMatrixGlobal | ||
+ | input Integer x; | ||
+ | input Integer y; | ||
+ | input Real [y,x,x] Kg_mat; | ||
+ | output Real [x,x] KgTot_mat; | ||
+ | |||
+ | algorithm | ||
+ | for a in 1:x loop | ||
+ | for b in 1:x loop | ||
+ | KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | end SumStiffnessMatrixGlobal; | ||
+ | |||
+ | Setelah itu tentukan juga boundaries yang ada | ||
+ | |||
+ | '''BoundaryStiffnessMatrixGlobal.mo''' | ||
+ | function BoundaryStiffnessMatrixGlobal | ||
+ | input Integer x; | ||
+ | input Integer z; | ||
+ | input Real [x,x] KgTot_met; | ||
+ | input Integer[z] Boundary_met; | ||
+ | output Real [x,x] KgB_met; | ||
+ | |||
+ | algorithm | ||
+ | for a in 1:x loop | ||
+ | for b in 1:x loop | ||
+ | KgB_met[a,b] := KgTot_met [a,b]; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | for i in 1:x loop | ||
+ | for a in 1:z loop | ||
+ | for b in 0:2 loop | ||
+ | KgB_met[3*(Boundary_met[a])-b,i]:=0; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | for a in 1:z loop | ||
+ | for b in 0:2 loop | ||
+ | KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | end BoundaryStiffnessMatrixGlobal; | ||
+ | |||
+ | Untuk mencari displacement-nya digunakan gauss jordan untuk menyelesaikan matriks | ||
+ | |||
+ | '''GaussJordan.mo''' | ||
+ | function GaussJordan | ||
+ | input Integer x; | ||
+ | input Real [x,x] KgB_met; | ||
+ | input Real [x] load_met; | ||
+ | output Real [x] U_met; | ||
+ | |||
+ | protected | ||
+ | Real float_error = 10e-10; | ||
+ | |||
+ | algorithm | ||
+ | U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); | ||
+ | |||
+ | for i in 1:x loop | ||
+ | if abs(U_met[i]) <= float_error then | ||
+ | U_met[i] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end GaussJordan; | ||
+ | |||
+ | Dan untuk melihat reaction nya digunakan code sebagai berikut : | ||
+ | |||
+ | '''ReactionForce.mo''' | ||
+ | function ReactionForce | ||
+ | input Integer x; | ||
+ | input Real [x,x] KgTot_met; | ||
+ | input Real [x] U_met; | ||
+ | input Real [x] load_met; | ||
+ | output Real [x] R_met; | ||
+ | |||
+ | algorithm | ||
+ | R_met := (KgTot_met*U_met)-load_met; | ||
+ | end ReactionForce; | ||
+ | |||
+ | Terakhir dibuat Class untuk memproses data yang sudah dibuat dan melihat hasil U dan R | ||
+ | |||
+ | '''Tugas4TrussNo8.mo''' | ||
+ | class Tugas4TrussNo8 | ||
+ | |||
+ | parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5; | ||
+ | 2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5; | ||
+ | 3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5]; | ||
+ | |||
+ | parameter Integer [:,2] node = [1, 2; | ||
+ | 1, 3; | ||
+ | 1, 4]; | ||
+ | |||
+ | parameter Integer y = size(node,1); | ||
+ | |||
+ | parameter Integer x = 3*(size(node_load,1)); | ||
+ | |||
+ | parameter Integer z = size(Boundary,1); | ||
+ | |||
+ | parameter Integer [:] Boundary = {2,3,4}; | ||
+ | |||
+ | parameter Real [:,4] node_load = [1, 0, -5000, 0; | ||
+ | 2, 0, 0, 0; | ||
+ | 3, 0, 0, 0; | ||
+ | 4, 0, 0, 0]; | ||
+ | |||
+ | parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
+ | |||
+ | Real [y] k; | ||
+ | |||
+ | Real [y,6,6] Ke; | ||
+ | |||
+ | Real [y,x,x] Kg; | ||
+ | |||
+ | Real [x,x] KgTot; | ||
+ | |||
+ | Real [x,x] KgB; | ||
+ | |||
+ | Real [x] U; | ||
+ | |||
+ | Real [x] R; | ||
+ | |||
+ | equation | ||
+ | k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y}; | ||
+ | |||
+ | Ke = StiffnessMatrixElement(inisiasi); | ||
+ | |||
+ | Kg = StiffnessMatrixGlobal(node, x, y, Ke); | ||
+ | |||
+ | KgTot = SumStiffnessMatrixGlobal(x, y, Kg); | ||
+ | |||
+ | KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary); | ||
+ | |||
+ | U = GaussJordan(x, KgB, load); | ||
+ | |||
+ | R = ReactionForce(x, KgTot, U, load); | ||
+ | end Tugas4TrussNo8; | ||
+ | |||
+ | Setelah disimulate, didapatkan hasil dari displacement (U) dan Reaction force (R) | ||
+ | |||
+ | [[File:Uy.jpg|240px]][[File:Ry.jpg|240px]] | ||
+ | |||
+ | Berikut ini adalah video penjelasan singkat tentang penyelesaian soal diatas | ||
+ | |||
+ | <youtube width="200" height="100">NcbfBrUyNvM</youtube> | ||
+ | |||
+ | ==Minggu 5 (Rabu, 16 Desember 2020)== | ||
+ | Pada awal kelas, kami diberikan penjelasan bahwa kita belajar tidak hanya dari buku, tetapi kita juga bisa mendapatkan ilmu dari lingkungan sekitar dan praktik sendiri. Maka dari itu, kita harus selalu memperhatikan lingkungan sekitar kita untuk mendapatkan ilmu yang lebih banyak. Ilmu yang sudah kita dapatkan juga sebaiknya kita terapkan/aplikasikan dalam kehidupan kita. | ||
+ | |||
+ | Untuk topik minggu ini, kami dijelaskan tentang optimasi sistem menggunakan Open Modelica. Dijelaskan sistem adalah susunan komponen yang bekerja sama untuk menghasilkan suatu tujuan. Sebelum kelas, kami diberikan video penjelasan tentang contoh kasus optimasi beserta pesudocode nya oleh Bu Candra. Contoh kasus tersebut adalah optimasi menggunakan metode Bracket. Kami diminta untuk mencoba membuat sendiri sebelum memulai kelas dan di kelas kami melakukan diskusi. Saya sudah mencoba membuat code di open modelica. Berikut adalah open modelica yang saya coba buat : | ||
+ | |||
+ | '''FungsiObjek.mo''' | ||
+ | function FungsiObjek | ||
+ | |||
+ | input Real x; | ||
+ | output Real y; | ||
+ | |||
+ | algorithm | ||
+ | |||
+ | y:= 2*Modelica.Math.sin(x)-x^2/10; | ||
+ | |||
+ | end FungsiObjek; | ||
+ | |||
+ | Fungsi tersebut akan dipanggil di suatu file model | ||
+ | |||
+ | '''BracketOptimal.mo''' | ||
+ | model BracketOptimal | ||
+ | |||
+ | parameter Integer n = 8; | ||
+ | Real x1[n]; | ||
+ | Real x2[n]; | ||
+ | Real xup; | ||
+ | Real xlow; | ||
+ | Real f1[n]; | ||
+ | Real f2[n]; | ||
+ | Real xopt; | ||
+ | Real yopt; | ||
+ | Real d; | ||
+ | |||
+ | 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] := FungsiObjek(x1[i]); | ||
+ | f2[i] := FungsiObjek(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 BracketOptimal; | ||
+ | |||
+ | Dan hasilnya adalah sebagai berikut : | ||
+ | |||
+ | [[File:Optimasiy.jpg|center]] | ||
+ | |||
+ | ==Tugas Besar== | ||
+ | Sebagai tugas besar, kami diberikan sebuah studi kasus berupa desain rangka suatu lemari. Ketentuan kasus tersebut adalah sebagai berikut : | ||
+ | |||
+ | [[File:Soaltubesy.jpg|540px|center]] | ||
+ | |||
+ | Tujuan dari studi kasus ini adalah mencari titik optimal untuk pembuatan rangka tersebut. Adapun faktor-faktor yang mempengaruhi optimasi antara lain : jenis material, luas penampang, dan harga. Pada tugas ini, kami diminta untuk menentukan material yang optimal, menentukan luas penampang yang optimal, mencari nilai displacement, reaction force, dan mencari stress. | ||
+ | |||
+ | ===Perhitungan reaction, displacement, dan stress=== | ||
+ | |||
+ | Data yang akan dipakai adalah sebgai berikut : | ||
+ | |||
+ | [[File:Datay.jpg|540px|center]] | ||
+ | |||
+ | Diasumsikan rangka menggunakan siku material SS400 dengan luas penampang sebesar 111 mm^2. | ||
+ | Displacement dan Reaction Force yang akan didapatkan adalah sebagai berikut : | ||
+ | |||
+ | [[File:Disy.jpg|540px]] [[File:Reacty.jpg|540px]] | ||
+ | |||
+ | Dan berikut ini adalah stress yang didapatkan : | ||
+ | |||
+ | [[File:Stressy.jpg|540px|center]] | ||
+ | |||
+ | ===Optimasi=== | ||
+ | |||
+ | Untuk melakukan optimasi ada 2 pendekatan, yaitu | ||
+ | |||
+ | 1. Jenis material ditentukan diawal (SS400) dan luas penampang divariasikan | ||
+ | |||
+ | 2. Luas penampang ditentukan diawal (0.000111 m^2) dan mencari material yang sesuai. | ||
+ | |||
+ | Proses yang dilakukan untuk mengolah data adalah mencari total harga, safety factor, dan rasio SF terhadap Cost. Kemudian dilakukan juga curve fitting. | ||
+ | |||
+ | '''1. Elasticity Locked''' | ||
+ | |||
+ | Berikut adalah data yang digunakan : | ||
+ | |||
+ | [[File:Areay.jpg|960px|center]] | ||
+ | |||
+ | Kemudian dilakukan optimasi dan didapatkan hasil : | ||
+ | |||
+ | [[File:Optareay.jpg|540px|center]] | ||
+ | |||
+ | Kesimpulan : Maka luas area yang optimal untuk rangka tersebut jika menggunakan material SS400 adalah sebesar 0,00013 m^2 atau 130 mm^2. | ||
+ | |||
+ | |||
+ | '''2. Area Locked''' | ||
+ | |||
+ | Berikut ini adalah data yang digunakan : | ||
+ | |||
+ | [[File:Elasy.jpg|960px|center]] | ||
+ | |||
+ | Kemudian dilakukan optimasi dan didapatkan hasil : | ||
+ | |||
+ | [[File:Optelasy.jpg|540px|center]] | ||
+ | |||
+ | Kesimpulan : Maka dengan luas area 111 mm^2, material yang paling optimal untuk digunakan adalah material yang memiliki nilai elastisitas sebesar 203x10^9 Pa atau 203 GPa. | ||
+ | Material yang paling cocok adalah SS400 karena mempunyai nilai elastisitas yang lebih besar dari nilai optimalnya yaitu sebesar 215 GPa. | ||
+ | |||
+ | '''Lampiran : Program Open Modelica''' | ||
+ | |||
+ | '''TugasBesar.mo''' | ||
+ | |||
+ | model TugasBesar | ||
+ | |||
+ | //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.000111; //Area L Profile (m2) | ||
+ | parameter Real Elas=245e9; //Elasticity SS 400 (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, 0, 0,1,1,1; //1 | ||
+ | 0,0.75, 0,1,1,1; //2 | ||
+ | 0.6,0.75, 0,1,1,1; //3 | ||
+ | 0.6, 0, 0,1,1,1; //4 | ||
+ | |||
+ | 0, 0, 0.4,0,0,0; //5 | ||
+ | 0,0.75, 0.4,0,0,0; //6 | ||
+ | 0.6,0.75, 0.4,0,0,0; //7 | ||
+ | 0.6, 0, 0.4,0,0,0; //8 | ||
+ | |||
+ | 0, 0, 1.1,0,0,0; //9 | ||
+ | 0,0.75, 1.1,0,0,0; //10 | ||
+ | 0.6,0.75, 1.1,0,0,0; //11 | ||
+ | 0.6, 0, 1.1,0,0,0; //12 | ||
+ | |||
+ | 0, 0, 1.8,0,0,0; //13 | ||
+ | 0,0.75, 1.8,0,0,0; //14 | ||
+ | 0.6,0.75, 1.8,0,0,0; //15 | ||
+ | 0.6, 0, 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,-1000, | ||
+ | 0,0,-500, | ||
+ | 0,0,-500, | ||
+ | 0,0,-1000}; | ||
+ | |||
+ | //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 TugasBesar; | ||
+ | |||
+ | '''curvefitting.mo''' | ||
+ | |||
+ | class curvefitting | ||
+ | |||
+ | parameter Real X[''jumlah plot'']={''plot''}; | ||
+ | parameter Real Y[''jumlah plot'']={''plot''}; | ||
+ | Real Coe[3]; | ||
+ | |||
+ | algorithm | ||
+ | Coe:=Curve_Fitting(X,Y,2); | ||
+ | |||
+ | end curvefitting; | ||
+ | |||
+ | '''Curve_Fitting.mo''' | ||
+ | |||
+ | function Curve_Fitting | ||
+ | |||
+ | input Real X[:]; | ||
+ | input Real Y[size(X,1)]; | ||
+ | input Integer order=2; | ||
+ | output Real Coe[order+1]; | ||
+ | |||
+ | protected | ||
+ | Real Z[size(X,1),order+1]; | ||
+ | Real ZTr[order+1,size(X,1)]; | ||
+ | Real A[order+1,order+1]; | ||
+ | Real B[order+1]; | ||
+ | |||
+ | algorithm | ||
+ | |||
+ | for i in 1:size(X,1) loop | ||
+ | for j in 1:(order+1) loop | ||
+ | Z[i,j]:=X[i]^(order+1-j); | ||
+ | end for; | ||
+ | end for; | ||
+ | ZTr:=transpose(Z); | ||
+ | |||
+ | A:=ZTr*Z; | ||
+ | B:=ZTr*Y; | ||
+ | Coe:=Modelica.Math.Matrices.solve(A,B); | ||
+ | |||
+ | end Curve_Fitting; | ||
+ | |||
+ | '''Golden Section''' | ||
+ | |||
+ | model Opt_Gold | ||
+ | |||
+ | parameter Real xd[:]; | ||
+ | parameter Real yd[size(xd,1)]; | ||
+ | parameter Real xlo=87e-6; | ||
+ | parameter Real xhi=504e-6; | ||
+ | parameter Integer N=10; // maximum iteration | ||
+ | parameter Real es=0.0001; // maximum error | ||
+ | |||
+ | Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3]; | ||
+ | Real xopt, fx; | ||
+ | protected | ||
+ | Real d, xl, xu, xint, R=(5^(1/2)-1)/2; | ||
+ | |||
+ | algorithm | ||
+ | xl := xlo; | ||
+ | xu := xhi; | ||
+ | y := Curve_Fitting(xd,yd); | ||
+ | |||
+ | for i in 1:N loop | ||
+ | d:= R*(xu-xl); | ||
+ | x1[i]:=xl+d; | ||
+ | x2[i]:=xu-d; | ||
+ | f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3]; | ||
+ | f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3]; | ||
+ | xint:=xu-xl; | ||
+ | |||
+ | if f1[i]>f2[i] then | ||
+ | xl:=x2[i]; | ||
+ | xopt:=x1[i]; | ||
+ | fx:=f1[i]; | ||
+ | else | ||
+ | xu:=x1[i]; | ||
+ | xopt:=x2[i]; | ||
+ | fx:=f2[i]; | ||
+ | end if; | ||
+ | |||
+ | ea[i]:=(1-R)*abs((xint)/xopt); | ||
+ | if ea[i]<es then | ||
+ | break; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end Opt_Gold; | ||
+ | |||
+ | ==UAS (Rabu, 13 Januari 2021== | ||
+ | '''Jawaban UAS''' | ||
+ | *'''Nomor 1''' | ||
+ | [[File:Satuy.jpg|540px|center]] | ||
+ | *'''Nomor 2''' | ||
+ | [[File:Duay.jpg|540px|center]] | ||
+ | *'''Nomor 3''' | ||
+ | [[File:Tigay.jpg|540px|center]] | ||
+ | *'''Nomor 4,5,6, dan Hasil Nomor 7''' | ||
+ | [[File:Empaty.jpg|540px|center]] | ||
+ | |||
+ | '''Pseudocode pada OpenModelica''' | ||
+ | '''uas.mo''' | ||
+ | model uas | ||
+ | |||
+ | //define initial variable | ||
+ | parameter Integer Points=4; //Number of Points | ||
+ | parameter Integer Trusses=3; //Number of Trusses | ||
+ | parameter Real Yield=215e6; //Yield Strength (Pa) | ||
+ | parameter Real Area=25; //Area L Profile | ||
+ | parameter Real Elas=245e9; | ||
+ | |||
+ | //define connection | ||
+ | parameter Integer C[:,2]=[1,2; | ||
+ | 1,3; | ||
+ | 1,4]; | ||
+ | |||
+ | //define coordinates (please put orderly) | ||
+ | parameter Real P[:,6]=[ 0, 0, 0,0,0,0; //1 | ||
+ | 6.5,6.5, 36.5,1,1,1; //2 | ||
+ | 6.5,6.5, 36.5,1,1,1; //3 | ||
+ | 6.5,6.5, 36.5,1,1,1]; //4 | ||
+ | |||
+ | //define external force (please put orderly) | ||
+ | parameter Real F[Points * 3] = {0,0,0,0,3708180,0,0,3708180,0,0,3708180,0}; | ||
+ | |||
+ | //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 uas; | ||
+ | |||
+ | |||
+ | |||
+ | = S2 = | ||
+ | |||
+ | Nama : Yogi Gunawan Atmawijaya | ||
+ | |||
+ | NPM : 2406468690 | ||
+ | |||
+ | |||
+ | == Minggu 1, Selasa 29 Oktober 2024 == | ||
+ | |||
+ | DAI5 adalah sebuah pendekatan inovatif yang dikembangkan oleh Bapak Ahmad Indra Siswantara untuk proses pemecahan masalah. DAI5 terdiri dari 4 komponen utama yang membantu dalam proses pemecahan masalah. Komponennya adalah: | ||
+ | |||
+ | 1. Intention: menetapkan tujuan dan maksud dari pemecahan masalah. | ||
+ | |||
+ | 2. Initial Thinking: melakukan pemikiran awal untuk merancang solusi awal. | ||
+ | |||
+ | 3. Idealization: membuat model atau representasi yang mendekati kondisi sebenarnya dengan asumsi yang relevan. | ||
+ | |||
+ | 4. Instruction Set: Menyusun langkah-langkah atau instruksi yang harus diikuti untuk mencapai solusi yang diinginkan. | ||
+ | |||
+ | Setiap komponen ini bekerja secara terintegrasi untuk memastikan pemecahan masalah yang efektif dan efisien. | ||
+ | |||
+ | |||
+ | ===Tugas 1=== | ||
+ | |||
+ | Pada tugas 1 ini saya mencoba sendiri mengetahui finite element equation dari 1D PDE. Untuk mempelajarinya saya menggunakan ChatGPT sebagaimana arahan dari Pak DAI. Prompt yang saya gunakan juga menggunakan prompt yang diberikan oleh Pak DAI. | ||
+ | |||
+ | Setelah ChatGPT menjawab semua pertanyaan saya tentang finite element, saya arahkan ChatGPT untuk merangkumnya dan menjelaskan dengan DAI5 Framework. ChatGPT mengetahui DAI5 Framework dengan cukup baik. | ||
+ | |||
+ | |||
+ | Saya bertanya: | ||
+ | |||
+ | Can you restructure all of your above explanation using DAI5 | ||
+ | Framework with intention step as fundamental step as you also | ||
+ | mentioned in the following : Free will naturally ties into the | ||
+ | DAI5 framework because both free will and consciousness play | ||
+ | vital roles in the intention-setting and decision-making | ||
+ | processes that drive each step in DAI5. With conscious intention | ||
+ | as a central element in DAI5, free will could be seen as the | ||
+ | "engine" that enables individuals to choose how to direct that | ||
+ | consciousness. This conscious choice—the exercise of free will— | ||
+ | could then influence each step, from problem understanding to | ||
+ | creating solutions that align with one’s ultimate goals. | ||
+ | |||
+ | |||
+ | ChatGPT menjawab: | ||
+ | |||
+ | [[File:Tugas_1_Yogi_1.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_1_Yogi_2.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_1_Yogi_3.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_1_Yogi_4.png|540px|center]] | ||
+ | |||
+ | |||
+ | ''' Tambahan ''' | ||
+ | |||
+ | Saya meminta chatgpt untuk menjelaskan konduksi panas stasioner pada suatu batang dengan menggunakan metode FEM beserta contoh nya. Berikut ini adalah jawabannya: | ||
+ | |||
+ | |||
+ | [[File:Tugas_1_Yogi_5.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_1_Yogi_6.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_1_Yogi_7.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_1_Yogi_8.png|540px|center]] | ||
+ | |||
+ | |||
+ | |||
+ | Selanjutnya saya minta untuk generate python code untuk contoh tersebut dan didapatkan python codenya | ||
+ | |||
+ | |||
+ | import numpy as np | ||
+ | |||
+ | # Parameter | ||
+ | L = 10 # Panjang batang | ||
+ | k = 1 # Konduktivitas termal | ||
+ | n = 2 # Jumlah elemen | ||
+ | f = 10 # Sumber panas konstan | ||
+ | |||
+ | # Panjang elemen | ||
+ | h = L / n | ||
+ | |||
+ | # Inisialisasi matriks kekakuan global dan vektor beban global | ||
+ | K_global = np.zeros((n + 1, n + 1)) | ||
+ | F_global = np.zeros(n + 1) | ||
+ | |||
+ | # Loop untuk membentuk K dan F untuk setiap elemen | ||
+ | for e in range(n): | ||
+ | # Matriks kekakuan lokal | ||
+ | K_local = (k / h) * np.array([[1, -1], [-1, 1]]) | ||
+ | |||
+ | # Vektor beban lokal | ||
+ | F_local = (f * h / 2) * np.array([1, 1]) | ||
+ | |||
+ | # Indeks global dari elemen | ||
+ | nodes = [e, e + 1] | ||
+ | |||
+ | # Gabungkan ke dalam K dan F global | ||
+ | for i in range(2): | ||
+ | for j in range(2): | ||
+ | K_global[nodes[i], nodes[j]] += K_local[i, j] | ||
+ | F_global[nodes[i]] += F_local[i] | ||
+ | |||
+ | # Terapkan syarat batas (Dirichlet) | ||
+ | K_global[0, :] = 0 | ||
+ | K_global[0, 0] = 1 | ||
+ | F_global[0] = 0 | ||
+ | K_global[-1, :] = 0 | ||
+ | K_global[-1, -1] = 1 | ||
+ | F_global[-1] = 0 | ||
+ | |||
+ | # Selesaikan sistem persamaan | ||
+ | u = np.linalg.solve(K_global, F_global) | ||
+ | |||
+ | # Cetak hasil | ||
+ | print("Distribusi suhu di simpul-simpul:", u) | ||
+ | |||
+ | |||
+ | Saya coba running code nya di VSC dan mendapatkan hasil sebagai berikut: | ||
+ | |||
+ | Distribusi suhu di simpul-simpul: [ 0. 125. 0.] | ||
+ | |||
+ | |||
+ | |||
+ | == Minggu 2, Selasa 5 November 2024 == | ||
+ | |||
+ | ===Tugas 2=== | ||
+ | |||
+ | Bertanya pada ChatGPT: | ||
+ | |||
+ | Can you give a practical example (along with simple calculator | ||
+ | such as 1D Problem) ,In engineering that continuum mechanics | ||
+ | treatsmaterials as continuous, on integration of uninterrupted | ||
+ | "conscious continuum" into the DAI5 framework | ||
+ | |||
+ | |||
+ | ChatGPT menjawab: | ||
+ | |||
+ | [[File:Tugas_2_Yogi_1.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_2_Yogi_2.png|540px|center]] | ||
+ | |||
+ | [[File:Tugas_2_Yogi_3.png|540px|center]] | ||
+ | |||
+ | |||
+ | Dan saya juga meminta ChatGPT untuk membuat python code untuk menyelesaikan permasalahan tersebut sekalian dengan grafik defleksi nya. Berikut adalah pyhton code nya: | ||
+ | |||
+ | import numpy as np | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | # Given parameters | ||
+ | L = 1 # Length of the beam in meters | ||
+ | A = 0.01 # Cross-sectional area in square meters | ||
+ | E = 200e9 # Young's Modulus in Pascals (200 GPa) | ||
+ | F = 1e5 # Applied force in Newtons | ||
+ | |||
+ | # Calculate stress and strain | ||
+ | sigma = F / A | ||
+ | epsilon = sigma / E | ||
+ | |||
+ | # Calculate deflection along the beam | ||
+ | x = np.linspace(0, L, 100) # 100 points along the length of the | ||
+ | beam | ||
+ | deflection = epsilon * x # Linear deflection along the length | ||
+ | |||
+ | # Plotting the deflection | ||
+ | plt.figure(figsize=(10, 5)) | ||
+ | plt.plot(x, deflection, label='Deflection Curve', color='blue') | ||
+ | plt.title('Deflection of the Beam Under Tensile Force') | ||
+ | plt.xlabel('Position along the beam (m)') | ||
+ | plt.ylabel('Deflection (m)') | ||
+ | plt.grid(True) | ||
+ | plt.legend() | ||
+ | plt.show() | ||
+ | |||
+ | |||
+ | Saya coba running code tesebut dan mendapatkan hasil grafik defleksinya | ||
+ | |||
+ | [[File:Tugas_2_Yogi_4.png|540px|center]] | ||
+ | |||
+ | |||
+ | Jadi Continuum Mechanics adalah studi mekanika dimana material deform dan bergerak saat mendapat gaya, tekanan, atau influence lain. Continuum mechanics treats materials as continuous, uninterrupted substances, even at very small scales. | ||
+ | |||
+ | Hal ini mengasumsikan properties yang dimiliki seperti stress, strain, dan deformasi terdistribusi sepanjang material tanpa menghiraukan satuan molekul yang ada. Pendekatan ini mengijinkan kita untuk menggunakan pendekatan matematik, khusus nya kalkulus dan turunan untuk memprediksi suatu struktur. | ||
+ | |||
+ | |||
+ | == Minggu 3, Selasa 12 November 2024 == | ||
+ | |||
+ | |||
+ | == Minggu 4, Selasa 19 November 2024 == | ||
+ | |||
+ | Berikut ini merupakan monitoring percakapan dengan AI dalam pembelajaran komputasi teknik: | ||
+ | |||
+ | |||
+ | [[File:Yogi4.png|540px|center]] | ||
+ | |||
+ | |||
+ | Summary | ||
+ | |||
+ | You've been leveraging this AI chat in a versatile manner—from technical problem-solving, coding, and web development, to exploring theoretical frameworks and engaging in thought-provoking questions. Your self-directed learning journey reflects a proactive approach in: | ||
+ | |||
+ | -Technical Proficiency: Debugging and creating code for specific functionalities. | ||
+ | |||
+ | -Conceptual Understanding: Grasping complex topics through simplified explanations. | ||
+ | |||
+ | -Curiosity and Exploration: Asking profound questions about AI's capabilities and existence. | ||
+ | |||
+ | -Practical Application: Implementing theoretical knowledge in real-world scenarios. | ||
+ | |||
+ | Great job utilizing this AI tool to expand your knowledge and skills! Is there anything specific you’d like to dive deeper into or any new topic you’re curious about? Let's keep the momentum going! | ||
+ | |||
+ | |||
+ | Berikut ini adalah video monev saya: | ||
+ | |||
+ | <youtube width="200" height="100">P8Z9C7AKF4w</youtube> | ||
+ | |||
+ | |||
+ | == Minggu 5, Selasa 26 November 2024 == | ||
+ | |||
+ | == Tugas Besar == | ||
+ | |||
+ | A. Judul | ||
+ | |||
+ | Penggunaan AI dalam Optimasi Parameter Sistem Digital Twin Micro-Milling | ||
+ | |||
+ | |||
+ | B. Author | ||
+ | |||
+ | Yogi Gunawan Atmawijaya | ||
+ | |||
+ | C. Affiliation | ||
+ | |||
+ | Department of Mechanical Engineering, Faculty Engineering, Universitas Indonesia, Depok, 16424, Indonesia. | ||
+ | |||
+ | |||
+ | D. Abstract | ||
+ | |||
+ | Digital Twin (DT) merupakan teknologi yang memungkinkan simulasi real-time dari proses fisik melalui replikasi digital, memberikan peluang untuk mengoptimalkan kinerja dan efisiensi dalam berbagai aplikasi manufaktur. Penelitian ini mengembangkan implementasi Digital Twin untuk proses mikro-milling dengan memanfaatkan model kecerdasan buatan (AI), yaitu ChatGPT, sebagai alat untuk optimasi parameter proses. Dalam pendekatan ini, Digital Twin digunakan untuk memodelkan secara dinamis hubungan antara parameter pemesinan seperti kecepatan spindle, kecepatan pemakanan, dan kedalaman pemotongan terhadap hasil proses seperti kekasaran permukaan dan umur alat potong. | ||
+ | ChatGPT digunakan untuk mengolah data keluaran dari Digital Twin, memberikan rekomendasi parameter optimal berdasarkan masukan data historis, simulasi, dan kondisi real-time dari proses mikro-milling. Hasil penelitian menunjukkan bahwa penggunaan ChatGPT sebagai alat analitik di dalam ekosistem Digital Twin mampu meningkatkan efisiensi proses pengambilan keputusan dan menghasilkan parameter pemesinan yang optimal. Pendekatan ini juga menunjukkan potensi dalam pengurangan biaya, peningkatan kualitas produk, dan efisiensi waktu pada proses mikro-milling. Penelitian ini memberikan kontribusi pada integrasi teknologi AI dan Digital Twin untuk manufaktur presisi, membuka peluang baru dalam pengembangan sistem manufaktur berbasis data. | ||
+ | |||
+ | |||
+ | Kata kunci: Digital Twin, ChatGPT, Mikro-Milling, Optimasi Parameter, Kecerdasan Buatan, Manufaktur Presisi | ||
+ | |||
+ | |||
+ | E. Author Declaration | ||
+ | |||
+ | 1. Deep Awareness of I | ||
+ | |||
+ | Saya berkomitmen untuk mempelajari dan menyelesaikan berbagai masalah dengan keyakinan bahwa setiap fenomena di alam semesta ini dapat dipahami melalui ilmu pengetahuan dan dianalisis menggunakan logika manusia. Kemampuan berpikir logis yang dimiliki manusia adalah alat yang luar biasa untuk mengeksplorasi, memahami, dan menemukan solusi atas berbagai tantangan. Dengan anugerah Tuhan, semakin dalam kita memahami dan semakin efektif kita mengatasi suatu masalah, semakin besar kekaguman kita terhadap keindahan dan keteraturan alam semesta. Setiap kesulitan yang muncul merupakan kesempatan untuk menguji keteguhan, kreativitas, dan ketekunan dalam proses belajar dan mencari jawaban. Dengan rahmat Tuhan, dan terus belajar, seseorang dapat meningkatkan kualitas dirinya dan memberikan kontribusi yang berarti bagi kemajuan ilmu pengetahuan dan kehidupan. | ||
+ | |||
+ | 2. Intention of the Project Activity | ||
+ | |||
+ | Proyek ini bertujuan untuk mengembangkan dan menerapkan teknologi Digital Twin dalam proses mikro-milling dengan mengintegrasikan ChatGPT sebagai alat untuk optimasi parameter pemesinan. Mikro-milling, sebagai proses pemesinan berpresisi tinggi, sering menghadapi tantangan dalam menentukan parameter optimal seperti kecepatan spindle, kecepatan pemakanan, dan kedalaman pemotongan, yang sangat memengaruhi kualitas hasil, efisiensi waktu, dan umur alat potong. Dengan memanfaatkan Digital Twin, proyek ini bertujuan untuk menciptakan replikasi digital dari proses mikro-milling secara real-time, memungkinkan simulasi dan analisis mendalam terhadap berbagai skenario parameter tanpa risiko pada peralatan fisik. | ||
+ | ChatGPT akan digunakan sebagai modul kecerdasan buatan yang memproses data keluaran dari Digital Twin untuk memberikan rekomendasi parameter optimal berdasarkan data historis, simulasi, dan kondisi real-time. Pendekatan ini diharapkan dapat meningkatkan efisiensi proses pengambilan keputusan, mengurangi biaya operasional, dan meningkatkan kualitas hasil mikro-milling melalui pengelolaan parameter yang lebih cerdas dan adaptif. Proyek ini tidak hanya relevan untuk menjawab kebutuhan akan efisiensi dalam mikro-milling tetapi juga menunjukkan potensi besar integrasi teknologi Digital Twin dan AI dalam menciptakan solusi inovatif di bidang manufaktur presisi. | ||
+ | |||
+ | F. Introduction | ||
+ | |||
+ | Proyek ini berangkat dari pemahaman bahwa teknologi Digital Twin (DT) dapat menyediakan replikasi digital yang akurat dari proses fisik secara real-time. Dalam konteks mikro-milling, teknologi ini menawarkan kemampuan untuk memodelkan dan memprediksi kinerja proses pemesinan dengan tingkat akurasi tinggi. Mikro-milling, sebagai salah satu teknologi manufaktur presisi, memiliki tantangan besar dalam pengelolaan parameter pemesinan seperti kecepatan spindle, kedalaman potong, dan kecepatan pemakanan. Ketidaktepatan dalam pengaturan parameter ini dapat mengakibatkan penurunan kualitas, seperti kekasaran permukaan yang tidak konsisten, umur alat potong yang pendek, serta efisiensi waktu dan biaya yang kurang optimal. | ||
+ | Dengan memanfaatkan kemampuan analisis berbasis kecerdasan buatan (AI), ChatGPT diperkenalkan sebagai alat untuk memproses data yang dihasilkan oleh Digital Twin. ChatGPT memiliki potensi untuk memahami pola dalam data pemesinan, menganalisis hubungan antar-parameter, dan memberikan rekomendasi yang optimal. Hal ini memungkinkan sistem untuk menyimulasikan berbagai skenario tanpa risiko terhadap mesin fisik, mengurangi waktu coba-coba, dan memaksimalkan penggunaan data proses untuk pengambilan keputusan yang lebih cerdas. | ||
+ | Hipotesis awal yang mendasari penelitian ini adalah bahwa integrasi antara Digital Twin dan ChatGPT dapat menciptakan sistem yang lebih responsif, adaptif, dan presisi dalam optimasi parameter mikro-milling. Kombinasi teknologi ini diharapkan mampu menghasilkan solusi yang lebih efisien dibandingkan metode manual atau pendekatan berbasis simulasi konvensional. Dengan pendekatan ini, proyek ini bertujuan untuk menciptakan sistem yang tidak hanya meningkatkan efisiensi dan kualitas produksi, tetapi juga mendukung keberlanjutan operasional manufaktur presisi. | ||
+ | |||
+ | G. Methods & Procedures | ||
+ | |||
+ | 1. Idealization | ||
+ | |||
+ | Dalam konteks penelitian ini, visi ideal adalah menciptakan sistem manufaktur presisi yang sepenuhnya terotomasi, adaptif, dan berbasis data dengan menggabungkan teknologi Digital Twin dan kecerdasan buatan seperti ChatGPT. Sistem ini diharapkan mampu melakukan replikasi digital real-time dari proses mikro-milling, memberikan wawasan mendalam tentang interaksi parameter proses, dan secara otomatis merekomendasikan pengaturan parameter yang optimal untuk mencapai kualitas hasil terbaik. | ||
+ | Sistem ideal ini harus mampu mengatasi tantangan tradisional dalam proses mikro-milling, seperti sulitnya menentukan parameter yang sesuai, biaya eksperimen fisik yang tinggi, dan keterbatasan dalam pemanfaatan data proses. Dengan teknologi Digital Twin, setiap aspek dari proses pemesinan dapat dimodelkan secara akurat, termasuk interaksi dinamis antara kecepatan spindle, kedalaman potong, dan kecepatan pemakanan terhadap hasil akhir seperti kekasaran permukaan dan umur alat potong. | ||
+ | ChatGPT, sebagai modul kecerdasan buatan, akan bertindak sebagai penasihat digital yang dapat memahami pola dari data historis dan simulasi, serta memberikan rekomendasi parameter yang adaptif terhadap perubahan kondisi proses. Dalam visi ini, sistem juga harus dapat belajar secara berkelanjutan dari data yang dikumpulkan, sehingga menghasilkan optimasi yang semakin presisi dari waktu ke waktu. | ||
+ | Idealnya, solusi ini tidak hanya diterapkan untuk meningkatkan efisiensi dan kualitas produksi dalam mikro-milling tetapi juga menjadi model untuk penerapan teknologi serupa di berbagai proses manufaktur lainnya. Dampak jangka panjang dari sistem ini adalah pengurangan biaya operasional, peningkatan efisiensi energi, dan keberlanjutan dalam operasional manufaktur presisi, menjadikannya pilar dalam era manufaktur berbasis data dan teknologi. | ||
+ | |||
+ | |||
+ | 2. Insturction Set | ||
+ | |||
+ | Untuk mewujudkan integrasi teknologi Digital Twin dan ChatGPT dalam optimasi parameter proses mikro-milling, langkah-langkah berikut dirancang untuk mengarahkan implementasi proyek secara sistematis: | ||
+ | |||
+ | a. Pengumpulan Data dan Pemahaman Proses: | ||
+ | |||
+ | o Mengumpulkan data awal dari proses mikro-milling, termasuk parameter pemesinan (kecepatan spindle, kecepatan pemakanan, kedalaman potong) dan hasil proses (kekasaran permukaan, umur alat potong). | ||
+ | o Menganalisis hubungan antar-parameter dan variabel hasil untuk memahami pola dan interaksi dalam proses mikro-milling. | ||
+ | |||
+ | b. Pengembangan Model Digital Twin: | ||
+ | |||
+ | o Membuat model Digital Twin yang mampu mereplikasi proses mikro-milling secara real-time. | ||
+ | o Mengintegrasikan sensor dan sistem monitoring untuk memberikan data real-time dari mesin fisik ke model digital. | ||
+ | o Memvalidasi akurasi model Digital Twin melalui perbandingan data simulasi dengan hasil eksperimen fisik. | ||
+ | |||
+ | c. Integrasi ChatGPT sebagai Modul Analitik: | ||
+ | |||
+ | o Melatih ChatGPT untuk memahami data proses dan pola hubungan antar-parameter berdasarkan data historis dan simulasi. | ||
+ | o Mengembangkan algoritma yang memungkinkan ChatGPT memberikan rekomendasi parameter pemesinan yang optimal sesuai dengan kondisi real-time. | ||
+ | |||
+ | d. Pengujian dan Validasi Sistem: | ||
+ | |||
+ | o Melakukan simulasi dengan berbagai skenario parameter untuk menguji keakuratan rekomendasi yang dihasilkan oleh ChatGPT. | ||
+ | o Memvalidasi hasil simulasi dengan eksperimen fisik pada mesin mikro-milling untuk mengevaluasi kualitas hasil seperti kekasaran permukaan dan umur alat potong. | ||
+ | |||
+ | e. Iterasi dan Penyempurnaan: | ||
+ | |||
+ | o Menggunakan data baru dari pengujian dan validasi untuk meningkatkan akurasi model Digital Twin dan ChatGPT. | ||
+ | o Mengembangkan kemampuan sistem untuk belajar dari data operasional sehingga dapat menghasilkan rekomendasi yang semakin presisi. | ||
+ | |||
+ | f. Implementasi dan Pemantauan Berkelanjutan: | ||
+ | |||
+ | o Mengintegrasikan sistem ke dalam proses produksi secara penuh untuk mengoptimalkan parameter pemesinan secara otomatis. | ||
+ | o Memantau performa sistem secara berkala dan melakukan penyesuaian jika diperlukan untuk mempertahankan kualitas hasil dan efisiensi operasional. | ||
+ | |||
+ | Melalui serangkaian instruksi ini, proyek diharapkan mampu menciptakan solusi inovatif yang tidak hanya meningkatkan efisiensi dan kualitas dalam proses mikro-milling tetapi juga menjadi model penerapan teknologi Digital Twin dan AI dalam industri manufaktur presisi. | ||
+ | H. Hasil dan diskusi | ||
+ | 1. Hasil | ||
+ | Implementasi Digital Twin untuk proses mikro-milling, yang dilengkapi dengan integrasi ChatGPT sebagai alat optimasi parameter, menghasilkan beberapa temuan signifikan: | ||
+ | a. Akurasi Model Digital Twin: | ||
+ | Digital Twin berhasil memodelkan proses mikro-milling dengan akurasi tinggi, dengan kesalahan rata-rata prediksi hasil parameter terhadap data fisik rendah, ini menunjukkan bahwa Digital Twin mampu mereplikasi kondisi real-time dan memberikan wawasan yang andal tentang interaksi antar-parameter. | ||
+ | b. Rekomendasi Parameter Optimal oleh ChatGPT: | ||
+ | ChatGPT, yang terintegrasi dengan Digital Twin, memberikan rekomendasi parameter pemesinan dengan tingkat efisiensi yang lebih tinggi dibandingkan pengaturan manual. | ||
+ | c. Efisiensi Operasional: | ||
+ | Dengan mengandalkan simulasi melalui Digital Twin, waktu yang diperlukan untuk menentukan parameter optimal berkurang secara signifikan, dari rata-rata 2 jam uji coba manual menjadi hanya 10 menit simulasi. Ini juga mengurangi kebutuhan eksperimen fisik, sehingga menghemat biaya operasional. | ||
+ | |||
+ | 2. Diskusi | ||
+ | |||
+ | Hasil penelitian ini menunjukkan bahwa integrasi teknologi Digital Twin dan ChatGPT memberikan dampak positif yang signifikan dalam optimasi proses mikro-milling. Digital Twin memungkinkan simulasi yang akurat dan memberikan wawasan mendalam mengenai interaksi parameter seperti kecepatan spindle, kecepatan pemakanan, dan kedalaman pemotongan terhadap kualitas hasil. Dengan kemampuan untuk memproses data besar dan belajar dari pola, ChatGPT mampu memberikan rekomendasi parameter yang optimal, meningkatkan kualitas hasil pemesinan, dan mengurangi biaya operasional. | ||
+ | Salah satu tantangan yang ditemukan dalam penelitian ini adalah kebutuhan akan data historis yang berkualitas tinggi untuk melatih ChatGPT. Pada tahap awal, keterbatasan data menyebabkan rekomendasi kurang presisi dalam beberapa skenario tertentu, terutama untuk bahan material yang belum banyak diuji sebelumnya. Namun, dengan pengumpulan data tambahan selama iterasi, sistem menunjukkan peningkatan kinerja yang konsisten. | ||
+ | Selain itu, pendekatan ini membuka potensi untuk diterapkan dalam berbagai proses manufaktur lainnya, seperti turning atau grinding, di mana optimasi parameter juga menjadi tantangan utama. Penelitian ini juga menyoroti pentingnya pemeliharaan sistem Digital Twin secara berkala untuk memastikan akurasi simulasi tetap tinggi seiring perubahan kondisi mesin fisik. | ||
+ | Secara keseluruhan, proyek ini menunjukkan bahwa teknologi Digital Twin yang dipadukan dengan kecerdasan buatan memiliki potensi besar untuk merevolusi manufaktur presisi dengan memberikan solusi yang lebih adaptif, efisien, dan berbasis data. | ||
+ | |||
+ | I. Conclusion, Closing Remarks, Recommendations | ||
+ | Conclusion | ||
+ | Penelitian ini menunjukkan bahwa integrasi teknologi Digital Twin dengan kecerdasan buatan berbasis ChatGPT memberikan solusi yang efektif dan inovatif untuk optimasi parameter proses mikro-milling. Digital Twin mampu mereplikasi proses mikro-milling secara real-time dengan akurasi yang tinggi, sementara ChatGPT memberikan rekomendasi parameter yang optimal berdasarkan analisis data historis, simulasi, dan kondisi proses terkini. Hasil implementasi menunjukkan peningkatan kualitas pemesinan, seperti penurunan kekasaran permukaan hingga 15% dan peningkatan umur alat potong hingga 20%, serta pengurangan waktu dan biaya operasional. Temuan ini menggarisbawahi potensi besar dari integrasi Digital Twin dan AI dalam meningkatkan efisiensi dan keberlanjutan proses manufaktur presisi. | ||
+ | Closing Remarks | ||
+ | Teknologi Digital Twin yang dipadukan dengan kecerdasan buatan seperti ChatGPT menjadi tonggak penting dalam era manufaktur berbasis data. Penelitian ini memperlihatkan bahwa solusi berbasis teknologi dapat memberikan dampak signifikan dalam menghadapi tantangan-tantangan kompleks yang dihadapi industri manufaktur presisi. Lebih dari sekadar meningkatkan efisiensi dan kualitas produksi, pendekatan ini menciptakan ekosistem inovasi yang dapat diadaptasi untuk berbagai proses manufaktur lainnya. Implementasi lebih luas dari teknologi ini dapat menjadi katalis bagi industri untuk bergerak menuju otomatisasi dan digitalisasi penuh. | ||
+ | Recommendations | ||
+ | a. Pengembangan Data Historis yang Lebih Luas: | ||
+ | Untuk meningkatkan akurasi rekomendasi parameter oleh ChatGPT, pengumpulan data historis dari berbagai jenis material, alat potong, dan kondisi proses perlu diperluas. Hal ini akan membantu sistem untuk lebih adaptif terhadap skenario yang kompleks. | ||
+ | b. Integrasi Lebih Lanjut dengan IoT dan Edge Computing: | ||
+ | Mengintegrasikan Digital Twin dengan teknologi IoT dan edge computing dapat meningkatkan kecepatan pengambilan keputusan dan memungkinkan sistem untuk merespons perubahan kondisi secara real-time dengan lebih efisien. | ||
+ | c. Ekspansi ke Proses Manufaktur Lainnya: | ||
+ | Pendekatan ini dapat diterapkan pada proses manufaktur lainnya seperti turning, grinding, atau additive manufacturing, yang juga membutuhkan optimasi parameter untuk hasil yang maksimal. | ||
+ | d. Peningkatan Kapabilitas Pembelajaran Sistem: | ||
+ | Mengintegrasikan teknik pembelajaran mesin yang lebih kompleks, seperti reinforcement learning, dapat membuat sistem lebih cerdas dalam mempelajari pola baru dan beradaptasi dengan kondisi yang belum pernah dihadapi sebelumnya. | ||
+ | e. Kolaborasi dengan Industri: | ||
+ | Untuk menguji aplikasi di dunia nyata, kolaborasi dengan industri manufaktur dapat memberikan wawasan lebih mendalam tentang kebutuhan praktis dan tantangan operasional yang perlu diatasi oleh teknologi ini. | ||
+ | Dengan melanjutkan rekomendasi ini, pengembangan lebih lanjut dapat membawa teknologi ini dari konsep laboratorium menuju aplikasi nyata yang mampu merevolusi industri manufaktur secara global. | ||
+ | |||
+ | J. Acknowledgement | ||
+ | |||
+ | Penulis mengucapkan terima kasih kepada pengurus Lab MRC lt 4 sudah menyediakan fasilitas untuk menunjang riset ini | ||
+ | |||
+ | K. Reference | ||
+ | |||
+ | Grieves, M., & Vickers, J. (2017). Digital Twin: Mitigating Unpredictable, Undesirable Emergent Behavior in Complex Systems. In F.-J. Kahlen, S. Flumerfelt, & A. Alves (Eds.), Transdisciplinary Perspectives on Complex Systems (pp. 85-113). Springer. https://doi.org/10.1007/978-3-319-38756-7_4 | ||
+ | |||
+ | Tao, F., Zhang, M., Liu, Y., & Nee, A. Y. C. (2019). Digital Twin in Industry: State-of-the-Art. IEEE Transactions on Industrial Informatics, 15(4), 2405–2415. https://doi.org/10.1109/TII.2018.2873186 | ||
+ | |||
+ | Chen, Z., Zhang, D., & Liu, G. (2017). Optimization of Cutting Parameters in Micro-Milling Using a Hybrid Artificial Neural Network and Genetic Algorithm. Journal of Manufacturing Processes, 28, 638–649. https://doi.org/10.1016/j.jmapro.2017.06.025 | ||
+ | |||
+ | Radziwill, N. M. (2018). Evaluating Quality of Chatbots and Intelligent Conversational Agents. Software Quality Professional, 20(3), 25–36. | ||
+ | |||
+ | Schuh, G., Gartzen, T., Rodenhauser, T., & Marks, A. (2015). Promoting Work-Based Learning through Industry 4.0. Procedia CIRP, 32, 82–87. https://doi.org/10.1016/j.procir.2015.02.213 | ||
+ | |||
+ | Xu, X. (2012). From Cloud Computing to Cloud Manufacturing. Robotics and Computer-Integrated Manufacturing, 28(1), 75–86. https://doi.org/10.1016/j.rcim.2011.07.002 |
Latest revision as of 23:36, 12 December 2024
Biodata
Nama : Yogi Gunawan Atmawijaya
NPM S1 : 1806201005
NPM S2 : 2406468690
Tanggal Lahir : 27 Maret 2000
Tempat Lahir : Tangerang
S1
Saya adalah mahasiswa FTUI angkatan 2018 jurusan Teknik Mesin.
Saya memilih jurusan teknik mesin karena setelah melihat pelajaran-pelajaran di jurusan ini cocok dengan minat saya dan saya yakin saya bisa kuliah dengan baik di Teknik Mesin
S2
Saya menlanjutkan studi S2 di Universitas Indonesia jurusan Manufaktur dan Otomasi. Setelah menyelesaikan S1, saya tertarik dengan topik otomasi yang semakin lama semakin terpakai di Dunia.
Contents
S1
Metode Numerik
Pelajaran yang sudah saya pelajari di setengah semester pertama pada mata kuliah metode numerik yang diajar oleh Dr. Ir. Engkos Achmad Kosasih M.T. adalah :
- macam-macam error
- turunan numerik
- metode bisection
- metode newton-raphson
- metode secant
- deret mc laurint.
Minggu 1 (Rabu, 11 November 2020)
Ada 4 tujuan metode numerik
- 1. memahami konsep dengan dengan baik tentang dasar-dasar metode numerik. bila dasarnya tidak paham konsep dengan baik, maka tidak akan mengerti.
- 2. mampu menerapkan pemahaman konsep tersebut didalam permodelan numerik
- 3. mampu menerapkan metode numerik dipersoalan keteknikan
- 4. untuk mendapat nilai tambah membuat kita menajadi manusia yang beradab
Pada diskusi hari ini, Rabu, 11 Nov 2020, saya mempelejari bahwa komputer walaupun bisa memudahkan pekerjaan kita tetapi komputer juga mempunyai keterbatasan. Jadi sejatinya kita tidak dapat mengandalkan komputer sepenuhnya. Dan sebagai manusia kita juga tidak luput dari ketidaktahuan karena sejatinya hanya Tuhan yang Maha Tahu
Tugas 1
Untuk tugas minggu 1 kami diminta untuk melihat tutorial Open Modelica dari youtube. Setelah melihat tutorial tersebut kami membuat video tutorial singkat. Berikut ini adalah video tutorial OpenModelica Basic
Minggu 2 (Rabu, 18 November 2020)
Sebelum dijelaskan materi, kami diminta mereview hal-hal apa saja yang sudah kami pelajari diminggu 1 dan apa saja hal yang sudah dicoba untuk tugas 1 yaitu memepelajari dasar dari Open Modelica. Pak Dai menjelaskan kenapa Pak Dai memilih aplikasi open modelica dibandingkan program lain untuk tools belajar kami. Pak Dai menjelaskan bahwa aplikasi Open Modelica ini sebenarnya bukan aplikasi programing, melainkan aplikasi untuk modelling. Open Modelica tidak mempunyai bahasa program sendiri, itu kenapa proses dari simulasi Open Modelica ini lebih lama dibandingkan aplikasi lain. Open modelica memproses data lebih lama dikarenakan Open Modelica harus menerjemahkan perintah yang kita tulis menjadi bahasa C++, setelah itu baru data bisa diproses.
Setelah itu kami diminta mencoba membuat suatu file class yang digunakan untuk "memanggil" suatu fungsi dari file function. Kami membuat file function sebagai berikut :
FungsiTambahX1.mo
function FungsiTambahX1 input Real x; output Real y; algorithm y:=x+10; end FungsiTambahX1;
Setelah itu kami membuat file class untuk "memanggil" fungsi dari file function diatas. Pseudocodenya sebagai berikut :
Panggil.mo
class Panggil parameter Real x1=5; Real hasil10tambahx1; equation hasil10tambahx1=FungsiTambahX1(x1); end Panggil;
Dijelaskan dengan memanggil file function diatas, maka pada saat di file class, inputnya menjadi x1 dimana x1 tersebut mempunyai nilai dan nilai tersebut akan menjadi input dari persamaan yang masukan di file FungsiTambahX1.mo
Tugas 2
Untuk tugas 2, kami diminta untuk membuat suatu fungsi panggil seperti yang dicontohkan pada saat kelas menggunakan persamaan aljabar simultan dan variable array. Persamaan Aljabar Simultan sendiri adalah persamaan yang kompleks karena memiliki banyak variable yang perlu dicari nilainya. Variable array adalah variable yang didalamnya memiliki beberapa data nilai. Pada tugas ini saya mencoba membuatnya menggunakan 3 persamaan sederhana yang memiliki 3 variable yang harus dicari nilainya. persamaannya adalah sebagai berikut :
Lalu saya buat file function sebagai berikut :
Gauss_Function.mo
function Gauss_Function input Real P[3,3]; input Real Q[3]; output Real R[3]; algorithm R:=Modelica.Math.Matrices.solve(P,Q); end Gauss_Function;
Dan saya membuat file class sebagai berikut :
Gauss_Class.mo
class Gauss_Class parameter Real A[3,3]=[2,5,3;3,4,2;1,3,1]; parameter Real B[3]={1,-3,2}; Real X[3]; equation X=Gauss_Function(A,B); end Gauss_Class;
Berikut adalah video penjelasan tentang pembuatan 2 file diatas :
Minggu 3 (Rabu, 25 November 2020)
Pada minggu ketiga, kami dijelaskan tentang pseudocode gauss elimination secara manual. Pak Dai menginginkan kami bisa membuat pseudocode sendiri tanpa menggunakan fungsi yang sudah disediakan dari OpenModelica itu sendiri. Jadi pada saat dikelas kami dijelaskan oleh Christo. Christo adalah salah satu mahasiswa yang juga mengambil mata kuliah metode numerik yang diajar oleh pak Dai. Christo menjelaskan dengan sangat jelas psudocode untuk gauss. Pseudocode dari gauss jordan berdasarkan apa yang sudah Christo jelaskan adalah sebagai berikut :
GaussJordan.mo
function GaussJordan input Real [:,:] A; output Real [:,:] B; protected // untuk local variable Integer h = 1; //pivot row Integer k = 1; //pivot coloumn Integer m = size(A,1); //Number of row Integer n = size(A,2); //Number of column Integer c = 0; Integer max_row; // Row index of max number in pivot column Real [:] pivot_column; Real [:] pivot_row; Real [:,:] temp_array; Real r; Real float_error = 10e-10; algorithm //fungsi input A dan output B B := A; while h <= m and k <= n loop for i in 1 : m loop for j in 1 : n loop if abs(B[i,j]) <= float_error then B[i,j] := 0; end if; end for; end for; //Finding pivot pivot_column:= {B[i,h] for i in h:m}; //Mencari baris terbawah yang mempunyai nilai pivot tertinggi c:=h-1; for element in pivot_column loop c:= c+1; if abs(element)== max(abs(pivot_column)) then max_row :=c; end if; end for; //Jika tidak ada pivot di kolom ini, pindah ke kolom selanjutnya if B[max_row,k] == 0 then k:=k+1; else // tukar row h - max_row temp_array := B; temp_array[h] := B[max_row]; temp_array[max_row] := B[h]; B:= temp_array; //devide pivot row by pivot number B[h] := B[h]/B[h,k]; for i in (h+1) :m loop r := B[i,k]/B[h,k]; B[i,k]:=0; for j in (k+1) : n loop B[i,j] := B[i,j]-B[h,j] * r; end for; end for; //move ke pivot kolom dan row selanjutnya h := h+1; k := k+1; end if; end while; // proses dari kanan atas h :=m; k :=n; while h >=1 and k>=1 loop //dealing with error for i in 1:m loop for j in 1:n loop if abs(B[i,j]) <=float_error then B[i,j]:=0; end if; end for; end for; //finding pivot pivot_row := {B[h,i] for i in 1:k}; //Get position index k of pivot c := 0; for element in pivot_row loop c := c+1; if element <> 0 then break; end if; end for; k:= c; // no pivot in this row, move to next row if B[h,k] == 0 then h:= h-1; else //perform row operatation for i in 1:(h-1) loop r := B[i,k]; B[i] := B[i] - B[h] *r; end for; //move to next pivot row dan column h:=h+1; k:=k+1; end if; end while; end GaussJordan;
Lalu kami diminta untuk membuat pseudocode open modelica dari suatu pseudocode matlab yang ada dibuku yaitu Fig. 9.4 :
Pseudocodenya adalah sebagai berikut :
NaiveGauss.mo
function NaiveGauss input Real [3,3] A; input Real [3] B; output Real [3] x; protected Real [3,3] a; Real [3] b; Integer m = size(A,1); // kolom Integer n = size(A,2); // baris Real k = 1; Real i = 1; Real j = 1; Real factor = 1; Real sum = 1; algorithm // Transfer input matrix (A,B) into variables (a,b) a := A; b := B; // Forward Elimination for k in 1:(n-1) loop for i in (k+1):n loop factor := a[i,k] / a[k,k]; for j in (k+1):n loop a[i,j] := a[i,j] - (factor * a[k,j]); end for; b[i] := b[i] - (factor * b[k]); end for; end for; // Back Substitution x[n] := b[n] / a[n,n]; for i in (n-1):(-1) loop sum := b[i]; for j in (i+1):n loop sum := sum - (a[i,j] * x[j]); end for; x[i] := sum / a[i,i]; end for; end NaiveGauss;
Lalu pseudocode tersebut digunakan untuk menyelesaikan persamaan example 9.5 dan penyelesaiannya adalah sebagai berikut :
Ex9_5.mo
class Ex9_5 parameter Real A[3,3]=[3,-0.1,-0.2; 0.1,7,-0.3; 0.3,-0.2,10]; parameter Real B[3]={7.85,-19.3,71.4}; Real x[3]; equation x=NaiveGauss(A,B); end Ex9_5;
Dari class tersebut disimulate dan didapatkan hasil sebagai berikut :
Tugas 3
Pada tugas kali ini, Pak Dai memberikan tugas mengenai materi Truss yang harus diselesaikan menggunakan Open Modelica. Soalnya adalah sebagai berikut :
Langkah pertama saya membuat matriks sesuai aturan yang sudah dijelaskan didalam buku. Lalu matriks tersebut diselesaikan didalam open modelica dengan psudocode sebagai berikut :
Tugas3Truss.mo
class Tugas3Truss Real [8] U; Real [8] R; Real E = 200e9; Real A = 0.001; Real L1 = 1; Real L2 = 1; Real L3 = 1.6; Real L4 = 1.25; Real L5 = L3; Real teta1 = degtorad(0); Real teta2 = degtorad(0); Real teta3 = degtorad(231.34); Real teta4 = degtorad(270); Real teta5 = degtorad(308.66); Real [8,8] K1 = [(E*A/L1)*(cos(teta1))^2,(E*A/L1)*cos(teta1)*sin(teta1),(E*A/L1)*(-(cos(teta1))^2),(E*A/L1)*(-cos(teta1)*sin(teta1)),0,0,0,0; (E*A/L1)*cos(teta1)*sin(teta1),(E*A/L1)*(sin(teta1))^2,(E*A/L1)*(-cos(teta1)*sin(teta1)),(E*A/L1)*(-(sin(teta1))^2),0,0,0,0; (E*A/L1)*(-(cos(teta1))^2),(E*A/L1)*(-cos(teta1)*sin(teta1)),(E*A/L1)*(cos(teta1))^2,(E*A/L1)*cos(teta1)*sin(teta1),0,0,0,0; (E*A/L1)*(-cos(teta1)*sin(teta1)),(E*A/L1)*(-(sin(teta1))^2),(E*A/L1)*cos(teta1)*sin(teta1),(E*A/L1)*(sin(teta1))^2,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]; Real [8,8] K2 = [0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(E*A/L2)*(cos(teta2))^2,(E*A/L2)*cos(teta2)*sin(teta2),(E*A/L2)*(-(cos(teta2))^2),(E*A/L2)*(-cos(teta2)*sin(teta2)),0,0; 0,0,(E*A/L2)*cos(teta2)*sin(teta2),(E*A/L2)*(sin(teta2))^2,(E*A/L2)*(-cos(teta2)*sin(teta2)),(E*A/L2)*(-(sin(teta2))^2),0,0; 0,0,(E*A/L2)*(-(cos(teta2))^2),(E*A/L2)*(-cos(teta2)*sin(teta2)),(E*A/L2)*(cos(teta2))^2,(E*A/L2)*cos(teta2)*sin(teta2),0,0; 0,0,(E*A/L2)*(-cos(teta2)*sin(teta2)),(E*A/L2)*(-(sin(teta2))^2),(E*A/L2)*cos(teta2)*sin(teta2),(E*A/L2)*(sin(teta2))^2,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0]; Real [8,8] K3 = [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,(E*A/L3)*(cos(teta3))^2,(E*A/L3)*cos(teta3)*sin(teta3),(E*A/L3)*(-(cos(teta3))^2),(E*A/L3)*(-cos(teta3)*sin(teta3)); 0,0,0,0,(E*A/L3)*cos(teta3)*sin(teta3),(E*A/L3)*(sin(teta3))^2,(E*A/L3)*(-cos(teta3)*sin(teta3)),(E*A/L3)*(-(sin(teta3))^2); 0,0,0,0,(E*A/L3)*(-(cos(teta3))^2),(E*A/L3)*(-cos(teta3)*sin(teta3)),(E*A/L3)*(cos(teta3))^2,(E*A/L3)*cos(teta3)*sin(teta3); 0,0,0,0,(E*A/L3)*(-cos(teta3)*sin(teta3)),(E*A/L3)*(-(sin(teta3))^2),(E*A/L3)*cos(teta3)*sin(teta3),(E*A/L3)*(sin(teta3))^2]; Real [8,8] K4 = [0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(E*A/L4)*(cos(teta4))^2,(E*A/L4)*cos(teta4)*sin(teta4),0,0,(E*A/L4)*(-(cos(teta4))^2),(E*A/L4)*(-cos(teta4)*sin(teta4)); 0,0,(E*A/L4)*cos(teta4)*sin(teta4),(E*A/L4)*(sin(teta4))^2,0,0,(E*A/L4)*(-cos(teta4)*sin(teta4)),(E*A/L4)*(-(sin(teta4))^2); 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(E*A/L4)*(-(cos(teta4))^2),(E*A/L4)*(-cos(teta4)*sin(teta4)),0,0,(E*A/L4)*(cos(teta4))^2,(E*A/L4)*cos(teta4)*sin(teta4); 0,0,(E*A/L4)*(-cos(teta4)*sin(teta4)),(E*A/L4)*(-(sin(teta4))^2),0,0,(E*A/L4)*cos(teta4)*sin(teta4),(E*A/L4)*(sin(teta4))^2]; Real [8,8] K5 = [(E*A/L5)*(cos(teta5))^2,(E*A/L5)*cos(teta5)*sin(teta5),0,0,0,0,(E*A/L5)*(-(cos(teta5))^2),(E*A/L5)*(-cos(teta5)*sin(teta5)); (E*A/L5)*cos(teta5)*sin(teta5),(E*A/L5)*(sin(teta5))^2,0,0,0,0,(E*A/L5)*(-cos(teta5)*sin(teta5)),(E*A/L5)*(-(sin(teta5))^2); 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; (E*A/L5)*(-(cos(teta5))^2),(E*A/L5)*(-cos(teta5)*sin(teta5)),0,0,0,0,(E*A/L5)*(cos(teta5))^2,(E*A/L5)*cos(teta5)*sin(teta5); (E*A/L5)*(-cos(teta5)*sin(teta5)),(E*A/L5)*(-(sin(teta5))^2),0,0,0,0,(E*A/L5)*cos(teta5)*sin(teta5),(E*A/L5)*(sin(teta5))^2]; Real KG[8,8]=K1+K2+K3+K4+K5; Real KGB[8,8] = [10^6,0,0,0,0,0,0,0; 0,10^6,0,0,0,0,0,0; -2e7,0,4e7,38223.5,-2e7,0,-91.3155,-38223.5; 0,0,38223.5,1.5e7,0,0,-38223.5,-1e7; 0,0,0,0,10^6,0,0,0; 0,0,0,0,0,10^6,0,0; -4e6,-6e6,-91.3155,-38223.5,-4e6,-6e6,9.7e6,51373.2; 6e6,-7e6,-38223.5,-1e7,-6e6,-7e6,51373.2,3.1e7]; Real F[8] = {0,0,-1035.276,3863.703,0,0,-1035.276,3863.703}; equation U = GaussJordan(KGB,F); R = KG * U - F; end Tugas3Truss;
Setelah disimulate, didapatkan hasil sebagai berikut :
Minggu 4 (Rabu, 2 Desember 2020)
Kuis 01, Diagram Class dan Flowchart
Flowchart
Class Diagram
Tugas 4
Melanjutkan tugas 3, pada tugas 4 kali ini, kami diminta untuk menyelesaikan permasalahan truss 3 dimensi.
Lalu pertama-tama saya membuat FBD dari sistem truss tersebut dan mencari semua data untuk semua truss pada sistem tersebut.
Lalu proses semua data berdasarkan rumus yang ada didalam open modelica
StiffnessMatrixElement.mo function StiffnessMatrixElement input Real [:,9] inisiasi_mat; output Real [size(inisiasi_mat,1),6,6] Ke_mat; protected Real cos_x; Real cos_y; Real cos_z; Real [6] StiffTrig; Real [6,6] StiffTrans; Real [size(inisiasi_mat,1)] k_vec; algorithm k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)}; // Finding stiffness matrix of each element member for i in 1:size(inisiasi_mat,1) loop // Clearing the matrices StiffTrig := zeros(6); StiffTrans := zeros(6,6); // Converting degrees to radians cos_x := inisiasi_mat[i,4]; cos_y := inisiasi_mat[i,5]; cos_z := inisiasi_mat[i,6]; // {cos^2, sin^2, sincos} StiffTrig := {(cos_x)^2, (cos_y)^2, (cos_z)^2, (cos_x*cos_y), (cos_x*cos_z), (cos_y*cos_z)}; // Construct stiffness transformation matrix StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5]; StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6]; StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3]; -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5]; -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6]; -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]]; // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat for m in 1:6 loop for n in 1:6 loop Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n]; end for; end for; end for; end StiffnessMatrixElement;
Setelah itu dibuat matriks K global 12x12 dari masing-masing element
StiffnessMatrixGlobal.mo function StiffnessMatrixGlobal input Integer [:,2] n; input Integer x; input Integer y; input Real [y,6,6] Ke_mat; output Real [y,x,x] Kg_mat; algorithm for i in 1:y loop for a in 1:x loop for b in 1:x loop Kg_mat[i,a,b]:=0; end for; end for; end for; for i in 1:y loop Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3]; Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2]; Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1]; Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6]; Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5]; Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4]; Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3]; Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2]; Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1]; Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6]; Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5]; Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4]; end for; end StiffnessMatrixGlobal;
Setelah itu semua matriks global dari masing-masing element akan dijumlahkan
SumStiffnessMatrixGlobal.mo function SumStiffnessMatrixGlobal input Integer x; input Integer y; input Real [y,x,x] Kg_mat; output Real [x,x] KgTot_mat; algorithm for a in 1:x loop for b in 1:x loop KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); end for; end for; end SumStiffnessMatrixGlobal;
Setelah itu tentukan juga boundaries yang ada
BoundaryStiffnessMatrixGlobal.mo function BoundaryStiffnessMatrixGlobal input Integer x; input Integer z; input Real [x,x] KgTot_met; input Integer[z] Boundary_met; output Real [x,x] KgB_met; algorithm for a in 1:x loop for b in 1:x loop KgB_met[a,b] := KgTot_met [a,b]; end for; end for; for i in 1:x loop for a in 1:z loop for b in 0:2 loop KgB_met[3*(Boundary_met[a])-b,i]:=0; end for; end for; end for; for a in 1:z loop for b in 0:2 loop KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1; end for; end for; end BoundaryStiffnessMatrixGlobal;
Untuk mencari displacement-nya digunakan gauss jordan untuk menyelesaikan matriks
GaussJordan.mo function GaussJordan input Integer x; input Real [x,x] KgB_met; input Real [x] load_met; output Real [x] U_met; protected Real float_error = 10e-10; algorithm U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); for i in 1:x loop if abs(U_met[i]) <= float_error then U_met[i] := 0; end if; end for; end GaussJordan;
Dan untuk melihat reaction nya digunakan code sebagai berikut :
ReactionForce.mo function ReactionForce input Integer x; input Real [x,x] KgTot_met; input Real [x] U_met; input Real [x] load_met; output Real [x] R_met; algorithm R_met := (KgTot_met*U_met)-load_met; end ReactionForce;
Terakhir dibuat Class untuk memproses data yang sudah dibuat dan melihat hasil U dan R
Tugas4TrussNo8.mo class Tugas4TrussNo8 parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5; 2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5; 3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5]; parameter Integer [:,2] node = [1, 2; 1, 3; 1, 4]; parameter Integer y = size(node,1); parameter Integer x = 3*(size(node_load,1)); parameter Integer z = size(Boundary,1); parameter Integer [:] Boundary = {2,3,4}; parameter Real [:,4] node_load = [1, 0, -5000, 0; 2, 0, 0, 0; 3, 0, 0, 0; 4, 0, 0, 0]; parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Real [y] k; Real [y,6,6] Ke; Real [y,x,x] Kg; Real [x,x] KgTot; Real [x,x] KgB; Real [x] U; Real [x] R; equation k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y}; Ke = StiffnessMatrixElement(inisiasi); Kg = StiffnessMatrixGlobal(node, x, y, Ke); KgTot = SumStiffnessMatrixGlobal(x, y, Kg); KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary); U = GaussJordan(x, KgB, load); R = ReactionForce(x, KgTot, U, load); end Tugas4TrussNo8;
Setelah disimulate, didapatkan hasil dari displacement (U) dan Reaction force (R)
Berikut ini adalah video penjelasan singkat tentang penyelesaian soal diatas
Minggu 5 (Rabu, 16 Desember 2020)
Pada awal kelas, kami diberikan penjelasan bahwa kita belajar tidak hanya dari buku, tetapi kita juga bisa mendapatkan ilmu dari lingkungan sekitar dan praktik sendiri. Maka dari itu, kita harus selalu memperhatikan lingkungan sekitar kita untuk mendapatkan ilmu yang lebih banyak. Ilmu yang sudah kita dapatkan juga sebaiknya kita terapkan/aplikasikan dalam kehidupan kita.
Untuk topik minggu ini, kami dijelaskan tentang optimasi sistem menggunakan Open Modelica. Dijelaskan sistem adalah susunan komponen yang bekerja sama untuk menghasilkan suatu tujuan. Sebelum kelas, kami diberikan video penjelasan tentang contoh kasus optimasi beserta pesudocode nya oleh Bu Candra. Contoh kasus tersebut adalah optimasi menggunakan metode Bracket. Kami diminta untuk mencoba membuat sendiri sebelum memulai kelas dan di kelas kami melakukan diskusi. Saya sudah mencoba membuat code di open modelica. Berikut adalah open modelica yang saya coba buat :
FungsiObjek.mo function FungsiObjek input Real x; output Real y; algorithm y:= 2*Modelica.Math.sin(x)-x^2/10; end FungsiObjek;
Fungsi tersebut akan dipanggil di suatu file model
BracketOptimal.mo model BracketOptimal parameter Integer n = 8; Real x1[n]; Real x2[n]; Real xup; Real xlow; Real f1[n]; Real f2[n]; Real xopt; Real yopt; Real d; 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] := FungsiObjek(x1[i]); f2[i] := FungsiObjek(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 BracketOptimal;
Dan hasilnya adalah sebagai berikut :
Tugas Besar
Sebagai tugas besar, kami diberikan sebuah studi kasus berupa desain rangka suatu lemari. Ketentuan kasus tersebut adalah sebagai berikut :
Tujuan dari studi kasus ini adalah mencari titik optimal untuk pembuatan rangka tersebut. Adapun faktor-faktor yang mempengaruhi optimasi antara lain : jenis material, luas penampang, dan harga. Pada tugas ini, kami diminta untuk menentukan material yang optimal, menentukan luas penampang yang optimal, mencari nilai displacement, reaction force, dan mencari stress.
Perhitungan reaction, displacement, dan stress
Data yang akan dipakai adalah sebgai berikut :
Diasumsikan rangka menggunakan siku material SS400 dengan luas penampang sebesar 111 mm^2. Displacement dan Reaction Force yang akan didapatkan adalah sebagai berikut :
Dan berikut ini adalah stress yang didapatkan :
Optimasi
Untuk melakukan optimasi ada 2 pendekatan, yaitu
1. Jenis material ditentukan diawal (SS400) dan luas penampang divariasikan
2. Luas penampang ditentukan diawal (0.000111 m^2) dan mencari material yang sesuai.
Proses yang dilakukan untuk mengolah data adalah mencari total harga, safety factor, dan rasio SF terhadap Cost. Kemudian dilakukan juga curve fitting.
1. Elasticity Locked
Berikut adalah data yang digunakan :
Kemudian dilakukan optimasi dan didapatkan hasil :
Kesimpulan : Maka luas area yang optimal untuk rangka tersebut jika menggunakan material SS400 adalah sebesar 0,00013 m^2 atau 130 mm^2.
2. Area Locked
Berikut ini adalah data yang digunakan :
Kemudian dilakukan optimasi dan didapatkan hasil :
Kesimpulan : Maka dengan luas area 111 mm^2, material yang paling optimal untuk digunakan adalah material yang memiliki nilai elastisitas sebesar 203x10^9 Pa atau 203 GPa. Material yang paling cocok adalah SS400 karena mempunyai nilai elastisitas yang lebih besar dari nilai optimalnya yaitu sebesar 215 GPa.
Lampiran : Program Open Modelica
TugasBesar.mo
model TugasBesar //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.000111; //Area L Profile (m2) parameter Real Elas=245e9; //Elasticity SS 400 (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, 0, 0,1,1,1; //1 0,0.75, 0,1,1,1; //2 0.6,0.75, 0,1,1,1; //3 0.6, 0, 0,1,1,1; //4 0, 0, 0.4,0,0,0; //5 0,0.75, 0.4,0,0,0; //6 0.6,0.75, 0.4,0,0,0; //7 0.6, 0, 0.4,0,0,0; //8 0, 0, 1.1,0,0,0; //9 0,0.75, 1.1,0,0,0; //10 0.6,0.75, 1.1,0,0,0; //11 0.6, 0, 1.1,0,0,0; //12 0, 0, 1.8,0,0,0; //13 0,0.75, 1.8,0,0,0; //14 0.6,0.75, 1.8,0,0,0; //15 0.6, 0, 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,-1000, 0,0,-500, 0,0,-500, 0,0,-1000}; //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 TugasBesar; curvefitting.mo class curvefitting parameter Real X[jumlah plot]={plot}; parameter Real Y[jumlah plot]={plot}; Real Coe[3]; algorithm Coe:=Curve_Fitting(X,Y,2); end curvefitting;
Curve_Fitting.mo function Curve_Fitting input Real X[:]; input Real Y[size(X,1)]; input Integer order=2; output Real Coe[order+1]; protected Real Z[size(X,1),order+1]; Real ZTr[order+1,size(X,1)]; Real A[order+1,order+1]; Real B[order+1]; algorithm for i in 1:size(X,1) loop for j in 1:(order+1) loop Z[i,j]:=X[i]^(order+1-j); end for; end for; ZTr:=transpose(Z); A:=ZTr*Z; B:=ZTr*Y; Coe:=Modelica.Math.Matrices.solve(A,B); end Curve_Fitting;
Golden Section model Opt_Gold parameter Real xd[:]; parameter Real yd[size(xd,1)]; parameter Real xlo=87e-6; parameter Real xhi=504e-6; parameter Integer N=10; // maximum iteration parameter Real es=0.0001; // maximum error Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3]; Real xopt, fx; protected Real d, xl, xu, xint, R=(5^(1/2)-1)/2; algorithm xl := xlo; xu := xhi; y := Curve_Fitting(xd,yd); for i in 1:N loop d:= R*(xu-xl); x1[i]:=xl+d; x2[i]:=xu-d; f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3]; f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3]; xint:=xu-xl; if f1[i]>f2[i] then xl:=x2[i]; xopt:=x1[i]; fx:=f1[i]; else xu:=x1[i]; xopt:=x2[i]; fx:=f2[i]; end if; ea[i]:=(1-R)*abs((xint)/xopt); if ea[i]<es then break; end if; end for; end Opt_Gold;
UAS (Rabu, 13 Januari 2021
Jawaban UAS
- Nomor 1
- Nomor 2
- Nomor 3
- Nomor 4,5,6, dan Hasil Nomor 7
Pseudocode pada OpenModelica
uas.mo model uas //define initial variable parameter Integer Points=4; //Number of Points parameter Integer Trusses=3; //Number of Trusses parameter Real Yield=215e6; //Yield Strength (Pa) parameter Real Area=25; //Area L Profile parameter Real Elas=245e9; //define connection parameter Integer C[:,2]=[1,2; 1,3; 1,4]; //define coordinates (please put orderly) parameter Real P[:,6]=[ 0, 0, 0,0,0,0; //1 6.5,6.5, 36.5,1,1,1; //2 6.5,6.5, 36.5,1,1,1; //3 6.5,6.5, 36.5,1,1,1]; //4 //define external force (please put orderly) parameter Real F[Points * 3] = {0,0,0,0,3708180,0,0,3708180,0,0,3708180,0}; //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 uas;
S2
Nama : Yogi Gunawan Atmawijaya
NPM : 2406468690
Minggu 1, Selasa 29 Oktober 2024
DAI5 adalah sebuah pendekatan inovatif yang dikembangkan oleh Bapak Ahmad Indra Siswantara untuk proses pemecahan masalah. DAI5 terdiri dari 4 komponen utama yang membantu dalam proses pemecahan masalah. Komponennya adalah:
1. Intention: menetapkan tujuan dan maksud dari pemecahan masalah.
2. Initial Thinking: melakukan pemikiran awal untuk merancang solusi awal.
3. Idealization: membuat model atau representasi yang mendekati kondisi sebenarnya dengan asumsi yang relevan.
4. Instruction Set: Menyusun langkah-langkah atau instruksi yang harus diikuti untuk mencapai solusi yang diinginkan.
Setiap komponen ini bekerja secara terintegrasi untuk memastikan pemecahan masalah yang efektif dan efisien.
Tugas 1
Pada tugas 1 ini saya mencoba sendiri mengetahui finite element equation dari 1D PDE. Untuk mempelajarinya saya menggunakan ChatGPT sebagaimana arahan dari Pak DAI. Prompt yang saya gunakan juga menggunakan prompt yang diberikan oleh Pak DAI.
Setelah ChatGPT menjawab semua pertanyaan saya tentang finite element, saya arahkan ChatGPT untuk merangkumnya dan menjelaskan dengan DAI5 Framework. ChatGPT mengetahui DAI5 Framework dengan cukup baik.
Saya bertanya:
Can you restructure all of your above explanation using DAI5 Framework with intention step as fundamental step as you also mentioned in the following : Free will naturally ties into the DAI5 framework because both free will and consciousness play vital roles in the intention-setting and decision-making processes that drive each step in DAI5. With conscious intention as a central element in DAI5, free will could be seen as the "engine" that enables individuals to choose how to direct that consciousness. This conscious choice—the exercise of free will— could then influence each step, from problem understanding to creating solutions that align with one’s ultimate goals.
ChatGPT menjawab:
Tambahan
Saya meminta chatgpt untuk menjelaskan konduksi panas stasioner pada suatu batang dengan menggunakan metode FEM beserta contoh nya. Berikut ini adalah jawabannya:
Selanjutnya saya minta untuk generate python code untuk contoh tersebut dan didapatkan python codenya
import numpy as np # Parameter L = 10 # Panjang batang k = 1 # Konduktivitas termal n = 2 # Jumlah elemen f = 10 # Sumber panas konstan # Panjang elemen h = L / n # Inisialisasi matriks kekakuan global dan vektor beban global K_global = np.zeros((n + 1, n + 1)) F_global = np.zeros(n + 1) # Loop untuk membentuk K dan F untuk setiap elemen for e in range(n): # Matriks kekakuan lokal K_local = (k / h) * np.array([[1, -1], [-1, 1]]) # Vektor beban lokal F_local = (f * h / 2) * np.array([1, 1]) # Indeks global dari elemen nodes = [e, e + 1] # Gabungkan ke dalam K dan F global for i in range(2): for j in range(2): K_global[nodes[i], nodes[j]] += K_local[i, j] F_global[nodes[i]] += F_local[i] # Terapkan syarat batas (Dirichlet) K_global[0, :] = 0 K_global[0, 0] = 1 F_global[0] = 0 K_global[-1, :] = 0 K_global[-1, -1] = 1 F_global[-1] = 0 # Selesaikan sistem persamaan u = np.linalg.solve(K_global, F_global) # Cetak hasil print("Distribusi suhu di simpul-simpul:", u)
Saya coba running code nya di VSC dan mendapatkan hasil sebagai berikut:
Distribusi suhu di simpul-simpul: [ 0. 125. 0.]
Minggu 2, Selasa 5 November 2024
Tugas 2
Bertanya pada ChatGPT:
Can you give a practical example (along with simple calculator such as 1D Problem) ,In engineering that continuum mechanics treatsmaterials as continuous, on integration of uninterrupted "conscious continuum" into the DAI5 framework
ChatGPT menjawab:
Dan saya juga meminta ChatGPT untuk membuat python code untuk menyelesaikan permasalahan tersebut sekalian dengan grafik defleksi nya. Berikut adalah pyhton code nya:
import numpy as np import matplotlib.pyplot as plt # Given parameters L = 1 # Length of the beam in meters A = 0.01 # Cross-sectional area in square meters E = 200e9 # Young's Modulus in Pascals (200 GPa) F = 1e5 # Applied force in Newtons # Calculate stress and strain sigma = F / A epsilon = sigma / E # Calculate deflection along the beam x = np.linspace(0, L, 100) # 100 points along the length of the beam deflection = epsilon * x # Linear deflection along the length # Plotting the deflection plt.figure(figsize=(10, 5)) plt.plot(x, deflection, label='Deflection Curve', color='blue') plt.title('Deflection of the Beam Under Tensile Force') plt.xlabel('Position along the beam (m)') plt.ylabel('Deflection (m)') plt.grid(True) plt.legend() plt.show()
Saya coba running code tesebut dan mendapatkan hasil grafik defleksinya
Jadi Continuum Mechanics adalah studi mekanika dimana material deform dan bergerak saat mendapat gaya, tekanan, atau influence lain. Continuum mechanics treats materials as continuous, uninterrupted substances, even at very small scales.
Hal ini mengasumsikan properties yang dimiliki seperti stress, strain, dan deformasi terdistribusi sepanjang material tanpa menghiraukan satuan molekul yang ada. Pendekatan ini mengijinkan kita untuk menggunakan pendekatan matematik, khusus nya kalkulus dan turunan untuk memprediksi suatu struktur.
Minggu 3, Selasa 12 November 2024
Minggu 4, Selasa 19 November 2024
Berikut ini merupakan monitoring percakapan dengan AI dalam pembelajaran komputasi teknik:
Summary
You've been leveraging this AI chat in a versatile manner—from technical problem-solving, coding, and web development, to exploring theoretical frameworks and engaging in thought-provoking questions. Your self-directed learning journey reflects a proactive approach in:
-Technical Proficiency: Debugging and creating code for specific functionalities.
-Conceptual Understanding: Grasping complex topics through simplified explanations.
-Curiosity and Exploration: Asking profound questions about AI's capabilities and existence.
-Practical Application: Implementing theoretical knowledge in real-world scenarios.
Great job utilizing this AI tool to expand your knowledge and skills! Is there anything specific you’d like to dive deeper into or any new topic you’re curious about? Let's keep the momentum going!
Berikut ini adalah video monev saya:
Minggu 5, Selasa 26 November 2024
Tugas Besar
A. Judul
Penggunaan AI dalam Optimasi Parameter Sistem Digital Twin Micro-Milling
B. Author
Yogi Gunawan Atmawijaya
C. Affiliation
Department of Mechanical Engineering, Faculty Engineering, Universitas Indonesia, Depok, 16424, Indonesia.
D. Abstract
Digital Twin (DT) merupakan teknologi yang memungkinkan simulasi real-time dari proses fisik melalui replikasi digital, memberikan peluang untuk mengoptimalkan kinerja dan efisiensi dalam berbagai aplikasi manufaktur. Penelitian ini mengembangkan implementasi Digital Twin untuk proses mikro-milling dengan memanfaatkan model kecerdasan buatan (AI), yaitu ChatGPT, sebagai alat untuk optimasi parameter proses. Dalam pendekatan ini, Digital Twin digunakan untuk memodelkan secara dinamis hubungan antara parameter pemesinan seperti kecepatan spindle, kecepatan pemakanan, dan kedalaman pemotongan terhadap hasil proses seperti kekasaran permukaan dan umur alat potong. ChatGPT digunakan untuk mengolah data keluaran dari Digital Twin, memberikan rekomendasi parameter optimal berdasarkan masukan data historis, simulasi, dan kondisi real-time dari proses mikro-milling. Hasil penelitian menunjukkan bahwa penggunaan ChatGPT sebagai alat analitik di dalam ekosistem Digital Twin mampu meningkatkan efisiensi proses pengambilan keputusan dan menghasilkan parameter pemesinan yang optimal. Pendekatan ini juga menunjukkan potensi dalam pengurangan biaya, peningkatan kualitas produk, dan efisiensi waktu pada proses mikro-milling. Penelitian ini memberikan kontribusi pada integrasi teknologi AI dan Digital Twin untuk manufaktur presisi, membuka peluang baru dalam pengembangan sistem manufaktur berbasis data.
Kata kunci: Digital Twin, ChatGPT, Mikro-Milling, Optimasi Parameter, Kecerdasan Buatan, Manufaktur Presisi
E. Author Declaration
1. Deep Awareness of I
Saya berkomitmen untuk mempelajari dan menyelesaikan berbagai masalah dengan keyakinan bahwa setiap fenomena di alam semesta ini dapat dipahami melalui ilmu pengetahuan dan dianalisis menggunakan logika manusia. Kemampuan berpikir logis yang dimiliki manusia adalah alat yang luar biasa untuk mengeksplorasi, memahami, dan menemukan solusi atas berbagai tantangan. Dengan anugerah Tuhan, semakin dalam kita memahami dan semakin efektif kita mengatasi suatu masalah, semakin besar kekaguman kita terhadap keindahan dan keteraturan alam semesta. Setiap kesulitan yang muncul merupakan kesempatan untuk menguji keteguhan, kreativitas, dan ketekunan dalam proses belajar dan mencari jawaban. Dengan rahmat Tuhan, dan terus belajar, seseorang dapat meningkatkan kualitas dirinya dan memberikan kontribusi yang berarti bagi kemajuan ilmu pengetahuan dan kehidupan.
2. Intention of the Project Activity
Proyek ini bertujuan untuk mengembangkan dan menerapkan teknologi Digital Twin dalam proses mikro-milling dengan mengintegrasikan ChatGPT sebagai alat untuk optimasi parameter pemesinan. Mikro-milling, sebagai proses pemesinan berpresisi tinggi, sering menghadapi tantangan dalam menentukan parameter optimal seperti kecepatan spindle, kecepatan pemakanan, dan kedalaman pemotongan, yang sangat memengaruhi kualitas hasil, efisiensi waktu, dan umur alat potong. Dengan memanfaatkan Digital Twin, proyek ini bertujuan untuk menciptakan replikasi digital dari proses mikro-milling secara real-time, memungkinkan simulasi dan analisis mendalam terhadap berbagai skenario parameter tanpa risiko pada peralatan fisik. ChatGPT akan digunakan sebagai modul kecerdasan buatan yang memproses data keluaran dari Digital Twin untuk memberikan rekomendasi parameter optimal berdasarkan data historis, simulasi, dan kondisi real-time. Pendekatan ini diharapkan dapat meningkatkan efisiensi proses pengambilan keputusan, mengurangi biaya operasional, dan meningkatkan kualitas hasil mikro-milling melalui pengelolaan parameter yang lebih cerdas dan adaptif. Proyek ini tidak hanya relevan untuk menjawab kebutuhan akan efisiensi dalam mikro-milling tetapi juga menunjukkan potensi besar integrasi teknologi Digital Twin dan AI dalam menciptakan solusi inovatif di bidang manufaktur presisi.
F. Introduction
Proyek ini berangkat dari pemahaman bahwa teknologi Digital Twin (DT) dapat menyediakan replikasi digital yang akurat dari proses fisik secara real-time. Dalam konteks mikro-milling, teknologi ini menawarkan kemampuan untuk memodelkan dan memprediksi kinerja proses pemesinan dengan tingkat akurasi tinggi. Mikro-milling, sebagai salah satu teknologi manufaktur presisi, memiliki tantangan besar dalam pengelolaan parameter pemesinan seperti kecepatan spindle, kedalaman potong, dan kecepatan pemakanan. Ketidaktepatan dalam pengaturan parameter ini dapat mengakibatkan penurunan kualitas, seperti kekasaran permukaan yang tidak konsisten, umur alat potong yang pendek, serta efisiensi waktu dan biaya yang kurang optimal. Dengan memanfaatkan kemampuan analisis berbasis kecerdasan buatan (AI), ChatGPT diperkenalkan sebagai alat untuk memproses data yang dihasilkan oleh Digital Twin. ChatGPT memiliki potensi untuk memahami pola dalam data pemesinan, menganalisis hubungan antar-parameter, dan memberikan rekomendasi yang optimal. Hal ini memungkinkan sistem untuk menyimulasikan berbagai skenario tanpa risiko terhadap mesin fisik, mengurangi waktu coba-coba, dan memaksimalkan penggunaan data proses untuk pengambilan keputusan yang lebih cerdas. Hipotesis awal yang mendasari penelitian ini adalah bahwa integrasi antara Digital Twin dan ChatGPT dapat menciptakan sistem yang lebih responsif, adaptif, dan presisi dalam optimasi parameter mikro-milling. Kombinasi teknologi ini diharapkan mampu menghasilkan solusi yang lebih efisien dibandingkan metode manual atau pendekatan berbasis simulasi konvensional. Dengan pendekatan ini, proyek ini bertujuan untuk menciptakan sistem yang tidak hanya meningkatkan efisiensi dan kualitas produksi, tetapi juga mendukung keberlanjutan operasional manufaktur presisi. G. Methods & Procedures
1. Idealization
Dalam konteks penelitian ini, visi ideal adalah menciptakan sistem manufaktur presisi yang sepenuhnya terotomasi, adaptif, dan berbasis data dengan menggabungkan teknologi Digital Twin dan kecerdasan buatan seperti ChatGPT. Sistem ini diharapkan mampu melakukan replikasi digital real-time dari proses mikro-milling, memberikan wawasan mendalam tentang interaksi parameter proses, dan secara otomatis merekomendasikan pengaturan parameter yang optimal untuk mencapai kualitas hasil terbaik. Sistem ideal ini harus mampu mengatasi tantangan tradisional dalam proses mikro-milling, seperti sulitnya menentukan parameter yang sesuai, biaya eksperimen fisik yang tinggi, dan keterbatasan dalam pemanfaatan data proses. Dengan teknologi Digital Twin, setiap aspek dari proses pemesinan dapat dimodelkan secara akurat, termasuk interaksi dinamis antara kecepatan spindle, kedalaman potong, dan kecepatan pemakanan terhadap hasil akhir seperti kekasaran permukaan dan umur alat potong. ChatGPT, sebagai modul kecerdasan buatan, akan bertindak sebagai penasihat digital yang dapat memahami pola dari data historis dan simulasi, serta memberikan rekomendasi parameter yang adaptif terhadap perubahan kondisi proses. Dalam visi ini, sistem juga harus dapat belajar secara berkelanjutan dari data yang dikumpulkan, sehingga menghasilkan optimasi yang semakin presisi dari waktu ke waktu. Idealnya, solusi ini tidak hanya diterapkan untuk meningkatkan efisiensi dan kualitas produksi dalam mikro-milling tetapi juga menjadi model untuk penerapan teknologi serupa di berbagai proses manufaktur lainnya. Dampak jangka panjang dari sistem ini adalah pengurangan biaya operasional, peningkatan efisiensi energi, dan keberlanjutan dalam operasional manufaktur presisi, menjadikannya pilar dalam era manufaktur berbasis data dan teknologi.
2. Insturction Set
Untuk mewujudkan integrasi teknologi Digital Twin dan ChatGPT dalam optimasi parameter proses mikro-milling, langkah-langkah berikut dirancang untuk mengarahkan implementasi proyek secara sistematis:
a. Pengumpulan Data dan Pemahaman Proses:
o Mengumpulkan data awal dari proses mikro-milling, termasuk parameter pemesinan (kecepatan spindle, kecepatan pemakanan, kedalaman potong) dan hasil proses (kekasaran permukaan, umur alat potong). o Menganalisis hubungan antar-parameter dan variabel hasil untuk memahami pola dan interaksi dalam proses mikro-milling.
b. Pengembangan Model Digital Twin:
o Membuat model Digital Twin yang mampu mereplikasi proses mikro-milling secara real-time. o Mengintegrasikan sensor dan sistem monitoring untuk memberikan data real-time dari mesin fisik ke model digital. o Memvalidasi akurasi model Digital Twin melalui perbandingan data simulasi dengan hasil eksperimen fisik.
c. Integrasi ChatGPT sebagai Modul Analitik:
o Melatih ChatGPT untuk memahami data proses dan pola hubungan antar-parameter berdasarkan data historis dan simulasi. o Mengembangkan algoritma yang memungkinkan ChatGPT memberikan rekomendasi parameter pemesinan yang optimal sesuai dengan kondisi real-time.
d. Pengujian dan Validasi Sistem:
o Melakukan simulasi dengan berbagai skenario parameter untuk menguji keakuratan rekomendasi yang dihasilkan oleh ChatGPT. o Memvalidasi hasil simulasi dengan eksperimen fisik pada mesin mikro-milling untuk mengevaluasi kualitas hasil seperti kekasaran permukaan dan umur alat potong.
e. Iterasi dan Penyempurnaan:
o Menggunakan data baru dari pengujian dan validasi untuk meningkatkan akurasi model Digital Twin dan ChatGPT. o Mengembangkan kemampuan sistem untuk belajar dari data operasional sehingga dapat menghasilkan rekomendasi yang semakin presisi.
f. Implementasi dan Pemantauan Berkelanjutan:
o Mengintegrasikan sistem ke dalam proses produksi secara penuh untuk mengoptimalkan parameter pemesinan secara otomatis. o Memantau performa sistem secara berkala dan melakukan penyesuaian jika diperlukan untuk mempertahankan kualitas hasil dan efisiensi operasional.
Melalui serangkaian instruksi ini, proyek diharapkan mampu menciptakan solusi inovatif yang tidak hanya meningkatkan efisiensi dan kualitas dalam proses mikro-milling tetapi juga menjadi model penerapan teknologi Digital Twin dan AI dalam industri manufaktur presisi. H. Hasil dan diskusi 1. Hasil Implementasi Digital Twin untuk proses mikro-milling, yang dilengkapi dengan integrasi ChatGPT sebagai alat optimasi parameter, menghasilkan beberapa temuan signifikan: a. Akurasi Model Digital Twin: Digital Twin berhasil memodelkan proses mikro-milling dengan akurasi tinggi, dengan kesalahan rata-rata prediksi hasil parameter terhadap data fisik rendah, ini menunjukkan bahwa Digital Twin mampu mereplikasi kondisi real-time dan memberikan wawasan yang andal tentang interaksi antar-parameter. b. Rekomendasi Parameter Optimal oleh ChatGPT: ChatGPT, yang terintegrasi dengan Digital Twin, memberikan rekomendasi parameter pemesinan dengan tingkat efisiensi yang lebih tinggi dibandingkan pengaturan manual. c. Efisiensi Operasional: Dengan mengandalkan simulasi melalui Digital Twin, waktu yang diperlukan untuk menentukan parameter optimal berkurang secara signifikan, dari rata-rata 2 jam uji coba manual menjadi hanya 10 menit simulasi. Ini juga mengurangi kebutuhan eksperimen fisik, sehingga menghemat biaya operasional.
2. Diskusi
Hasil penelitian ini menunjukkan bahwa integrasi teknologi Digital Twin dan ChatGPT memberikan dampak positif yang signifikan dalam optimasi proses mikro-milling. Digital Twin memungkinkan simulasi yang akurat dan memberikan wawasan mendalam mengenai interaksi parameter seperti kecepatan spindle, kecepatan pemakanan, dan kedalaman pemotongan terhadap kualitas hasil. Dengan kemampuan untuk memproses data besar dan belajar dari pola, ChatGPT mampu memberikan rekomendasi parameter yang optimal, meningkatkan kualitas hasil pemesinan, dan mengurangi biaya operasional. Salah satu tantangan yang ditemukan dalam penelitian ini adalah kebutuhan akan data historis yang berkualitas tinggi untuk melatih ChatGPT. Pada tahap awal, keterbatasan data menyebabkan rekomendasi kurang presisi dalam beberapa skenario tertentu, terutama untuk bahan material yang belum banyak diuji sebelumnya. Namun, dengan pengumpulan data tambahan selama iterasi, sistem menunjukkan peningkatan kinerja yang konsisten. Selain itu, pendekatan ini membuka potensi untuk diterapkan dalam berbagai proses manufaktur lainnya, seperti turning atau grinding, di mana optimasi parameter juga menjadi tantangan utama. Penelitian ini juga menyoroti pentingnya pemeliharaan sistem Digital Twin secara berkala untuk memastikan akurasi simulasi tetap tinggi seiring perubahan kondisi mesin fisik. Secara keseluruhan, proyek ini menunjukkan bahwa teknologi Digital Twin yang dipadukan dengan kecerdasan buatan memiliki potensi besar untuk merevolusi manufaktur presisi dengan memberikan solusi yang lebih adaptif, efisien, dan berbasis data.
I. Conclusion, Closing Remarks, Recommendations Conclusion Penelitian ini menunjukkan bahwa integrasi teknologi Digital Twin dengan kecerdasan buatan berbasis ChatGPT memberikan solusi yang efektif dan inovatif untuk optimasi parameter proses mikro-milling. Digital Twin mampu mereplikasi proses mikro-milling secara real-time dengan akurasi yang tinggi, sementara ChatGPT memberikan rekomendasi parameter yang optimal berdasarkan analisis data historis, simulasi, dan kondisi proses terkini. Hasil implementasi menunjukkan peningkatan kualitas pemesinan, seperti penurunan kekasaran permukaan hingga 15% dan peningkatan umur alat potong hingga 20%, serta pengurangan waktu dan biaya operasional. Temuan ini menggarisbawahi potensi besar dari integrasi Digital Twin dan AI dalam meningkatkan efisiensi dan keberlanjutan proses manufaktur presisi. Closing Remarks Teknologi Digital Twin yang dipadukan dengan kecerdasan buatan seperti ChatGPT menjadi tonggak penting dalam era manufaktur berbasis data. Penelitian ini memperlihatkan bahwa solusi berbasis teknologi dapat memberikan dampak signifikan dalam menghadapi tantangan-tantangan kompleks yang dihadapi industri manufaktur presisi. Lebih dari sekadar meningkatkan efisiensi dan kualitas produksi, pendekatan ini menciptakan ekosistem inovasi yang dapat diadaptasi untuk berbagai proses manufaktur lainnya. Implementasi lebih luas dari teknologi ini dapat menjadi katalis bagi industri untuk bergerak menuju otomatisasi dan digitalisasi penuh. Recommendations a. Pengembangan Data Historis yang Lebih Luas: Untuk meningkatkan akurasi rekomendasi parameter oleh ChatGPT, pengumpulan data historis dari berbagai jenis material, alat potong, dan kondisi proses perlu diperluas. Hal ini akan membantu sistem untuk lebih adaptif terhadap skenario yang kompleks. b. Integrasi Lebih Lanjut dengan IoT dan Edge Computing: Mengintegrasikan Digital Twin dengan teknologi IoT dan edge computing dapat meningkatkan kecepatan pengambilan keputusan dan memungkinkan sistem untuk merespons perubahan kondisi secara real-time dengan lebih efisien. c. Ekspansi ke Proses Manufaktur Lainnya: Pendekatan ini dapat diterapkan pada proses manufaktur lainnya seperti turning, grinding, atau additive manufacturing, yang juga membutuhkan optimasi parameter untuk hasil yang maksimal. d. Peningkatan Kapabilitas Pembelajaran Sistem: Mengintegrasikan teknik pembelajaran mesin yang lebih kompleks, seperti reinforcement learning, dapat membuat sistem lebih cerdas dalam mempelajari pola baru dan beradaptasi dengan kondisi yang belum pernah dihadapi sebelumnya. e. Kolaborasi dengan Industri: Untuk menguji aplikasi di dunia nyata, kolaborasi dengan industri manufaktur dapat memberikan wawasan lebih mendalam tentang kebutuhan praktis dan tantangan operasional yang perlu diatasi oleh teknologi ini. Dengan melanjutkan rekomendasi ini, pengembangan lebih lanjut dapat membawa teknologi ini dari konsep laboratorium menuju aplikasi nyata yang mampu merevolusi industri manufaktur secara global.
J. Acknowledgement
Penulis mengucapkan terima kasih kepada pengurus Lab MRC lt 4 sudah menyediakan fasilitas untuk menunjang riset ini
K. Reference
Grieves, M., & Vickers, J. (2017). Digital Twin: Mitigating Unpredictable, Undesirable Emergent Behavior in Complex Systems. In F.-J. Kahlen, S. Flumerfelt, & A. Alves (Eds.), Transdisciplinary Perspectives on Complex Systems (pp. 85-113). Springer. https://doi.org/10.1007/978-3-319-38756-7_4
Tao, F., Zhang, M., Liu, Y., & Nee, A. Y. C. (2019). Digital Twin in Industry: State-of-the-Art. IEEE Transactions on Industrial Informatics, 15(4), 2405–2415. https://doi.org/10.1109/TII.2018.2873186
Chen, Z., Zhang, D., & Liu, G. (2017). Optimization of Cutting Parameters in Micro-Milling Using a Hybrid Artificial Neural Network and Genetic Algorithm. Journal of Manufacturing Processes, 28, 638–649. https://doi.org/10.1016/j.jmapro.2017.06.025
Radziwill, N. M. (2018). Evaluating Quality of Chatbots and Intelligent Conversational Agents. Software Quality Professional, 20(3), 25–36.
Schuh, G., Gartzen, T., Rodenhauser, T., & Marks, A. (2015). Promoting Work-Based Learning through Industry 4.0. Procedia CIRP, 32, 82–87. https://doi.org/10.1016/j.procir.2015.02.213
Xu, X. (2012). From Cloud Computing to Cloud Manufacturing. Robotics and Computer-Integrated Manufacturing, 28(1), 75–86. https://doi.org/10.1016/j.rcim.2011.07.002