Difference between revisions of "Metnum03-Rizki Ramadhan"

From ccitonlinewiki
Jump to: navigation, search
(Tugas Besar Metode Numerik: Optimasi Trusses 3D)
(Tugas Besar Metode Numerik: Optimasi Trusses 3D)
Line 344: Line 344:
 
Selanjutnya setelah dicari stress dari trusses tersebut, dilakukan optimasi dengan metode curve-fitting untuk melihat nilai optimum sebuah fungsi objektif. Pada tugas besar kali ini, akan dibuat terlebih dahulu grafik antara Harga material vs stress pada trusses. Akan akan 2 grafik yaitu untuk material konstan namun area berbeda dan material berbeda namun are konstan. Dari kedua grafik tersebutlah kemudian dilakukan optimasi untuk mendapatkan keadaan yang optimum.Asumsi lainnya adalah Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.
 
Selanjutnya setelah dicari stress dari trusses tersebut, dilakukan optimasi dengan metode curve-fitting untuk melihat nilai optimum sebuah fungsi objektif. Pada tugas besar kali ini, akan dibuat terlebih dahulu grafik antara Harga material vs stress pada trusses. Akan akan 2 grafik yaitu untuk material konstan namun area berbeda dan material berbeda namun are konstan. Dari kedua grafik tersebutlah kemudian dilakukan optimasi untuk mendapatkan keadaan yang optimum.Asumsi lainnya adalah Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.
  
Codingan Pada OpenModelica :
+
Langkah-Langkah Pada OpenModelica :
  
 
  //define initial variable
 
  //define initial variable
Line 357: Line 357:
 
Berikut contoh pemodelan Connection yang ada pada program:
 
Berikut contoh pemodelan Connection yang ada pada program:
  
//define connection
+
model Trusses_3D_Tugas_Besar_Safety
parameter Integer C[Trusses,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
 
Selanjutnya, kita diharuskan untuk menuliskan koordinat dari point connection tadi. Berhubung model yang kita buat tadi dalam bentuk 3 dimensi, maka Pendefinisian ada ditulis dalam matriks 1x3 dimana setiap nilai menunjukan jarak dari titik referensi 0,0,0 . bentuk matriksnya seperti [rx.ry.rz]. untuk setiap lantai, ada 4 titik poin, sehingga total ada 16 point pada desain rangka yang diberikan. berikut coding untuk mendefinisikan koordinat point
 
  
parameter Real P[Points,3]=[0.3,-0.375,0;    //1
+
//define initial variable
                          -0.3,-0.375,0;    //2
+
parameter Integer Points=size(P,1); //Number of Points
                          -0.3,0.375,0;    //3
+
parameter Integer Trusses=size(C,1); //Number of Trusses
                          0.3,0.375,0;      //4
+
parameter Real Yield=215e6; //Yield Strength (Pa)
 +
parameter Real Area=0.000224;  //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)
 +
parameter Real Elas=193e9;    //Elasticity SS 304  (Pa)
 +
 
 +
//define connection
 +
parameter Integer C[:,2]=[1,5;
 +
                          2,6;
 +
                          3,7;
 +
                          4,8;
 +
                          5,6;  //1st floor
 +
                          6,7;  //1st floor
 +
                          7,8;  //1st floor
 +
                          5,8;  //1st floor
 +
                          5,9;
 +
                        6,10;
 +
                        7,11;
 +
                        8,12;
 +
                        9,10; //2nd floor
 +
                        10,11;//2nd floor
 +
                        11,12;//2nd floor
 +
                          9,12; //2nd floor
 +
                          9,13;
 +
                        10,14;
 +
                        11,15;
 +
                        12,16;
 +
                        13,14;//3rd floor
 +
                        14,15;//3rd floor
 +
                        15,16;//3rd floor
 +
                        13,16];//3rd floor
 +
                                                             
 +
//define coordinates (please put orderly)
 +
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1;    //1
 +
                      -0.3,-0.375,0,1,1,1;    //2
 +
                      -0.3,0.375,0,1,1,1;    //3
 +
                      0.3,0.375,0,1,1,1;      //4
 
                            
 
                            
                          0.3,-0.375,0.6;  //5
+
                      0.3,-0.375,0.6,0,0,0;  //5
                          -0.3,-0.375,0.6;  //6
+
                      -0.3,-0.375,0.6,0,0,0;  //6
                          -0.3,0.375,0.6;  //7
+
                      -0.3,0.375,0.6,0,0,0;  //7
                          0.3,0.375,0.6;    //8
+
                      0.3,0.375,0.6,0,0,0;    //8
                         
+
                           
                          0.3,-0.375,1.2;  //9
+
                      0.3,-0.375,1.2,0,0,0;  //9
                          -0.3,-0.375,1.2;  //10   
+
                      -0.3,-0.375,1.2,0,0,0;  //10   
                          -0.3,0.375,1.2;  //11
+
                      -0.3,0.375,1.2,0,0,0;  //11
                          0.3,0.375,1.2;    //12
+
                      0.3,0.375,1.2,0,0,0;    //12
                         
+
                           
                          0.3,-0.375,1.8;  //13
+
                      0.3,-0.375,1.8,0,0,0;  //13
                          -0.3,-0.375,1.8;  //14
+
                      -0.3,-0.375,1.8,0,0,0;  //14
                          -0.3,0.375,1.8;  //15
+
                      -0.3,0.375,1.8,0,0,0;  //15
                          0.3,0.375,1.8];  //16
+
                      0.3,0.375,1.8,0,0,0];  //16
Setelah itu, dituliskan definisi terhadap beban yang diaplikasikan. beban yang diaplikasikan adalah 2000N dan 1000N tepat ditengah kedua rangka paling atas seperti gambar. Namun, karena analisa ini dilakukan berdasarkan point connection, maka beban ditulis berdasarkan beban yang dirasakan oleh point, maka beban menjadi masing-masing 500,500,1000, dan 1000. Beban dituliskan dalam bentuk matriks 1x3 untuk setiap truss dari lantai satu ke lantai 3. berikut coding untuk mendefinisikan aplikasi beban pada model trusses:
+
                         
 
+
//define external force (please put orderly)
 
parameter Real F[Points*3]={0,0,0,
 
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,0,  
                          0,0,0,  
+
                            0,0,0,  
                          0,0,0,  
+
                            0,0,0,  
                          0,0,0,  
+
                            0,0,0,  
                          0,0,0,  
+
                            0,0,0,  
                          0,0,0,  
+
                            0,0,0,  
                          0,0,-500,  
+
                            0,0,-500,  
                          0,0,-1000,  
+
                            0,0,-1000,  
                          0,0,-1000,  
+
                            0,0,-1000,  
                          0,0,-500};
+
                            0,0,-500};  
Terakhir, dalam tahap pendeklarasian, diperlukan komponen komponen perhitungan seperti displacement, reaction, stress, safety, dll. codingnya seperti ini:
 
  
 +
//solution
 
Real displacement[N], reaction[N];
 
Real displacement[N], reaction[N];
 
Real check[3];
 
Real check[3];
 +
 
Real stress1[Trusses];
 
Real stress1[Trusses];
 
Real safety[Trusses];
 
Real safety[Trusses];
 
Real dis[3];
 
Real dis[3];
 
Real Str[3];
 
Real Str[3];
Saat masuk tahap perhitungan, diperlukan pendeklarasian pula untuk notasi-notasi yang dipakai. dalam pembuatab global matriks diperlukan notasi notasi baru, Nantinya ada matriks X (matriks 3x3 hasil kali A*Elastisitas/L dikali dengan matriks). lalu ada notasi cx,cy,cz, untuk membantu perhitungan matriks global. dan juga matriks q1 dan q2 [1x3] yang akan menjadi variable yang mempermudah proses perhitungan matriks global.Tidak lupa juga error untuk validasi nya. berikut codingnya
+
 
+
protected
 
parameter Integer N=3*Points;
 
parameter Integer N=3*Points;
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);
+
Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3];
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;
 
Real err=10e-10, ers=10e-4;
Lalu mulailah algoritma pembentukan Global matriks dengan notasi G. pada proses ini dilakukan looping notasi i dan j yang akan mengisi variable q1 dan q2. loop i akan memanggil matriks trusses (connection) pada kolom 1. sedangkan j, akan looping untuk angka 1 sampai 3. Hingga q berada dalam fungsi j menjadi q[j].
 
  
 
algorithm
 
algorithm
Line 442: Line 449:
 
G:=id;
 
G:=id;
 
for i in 1:Trusses loop
 
for i in 1:Trusses loop
for j in 1:3 loop
+
for j in 1:3 loop
 
   q1[j]:=P[C[i,1],j];
 
   q1[j]:=P[C[i,1],j];
 
   q2[j]:=P[C[i,2],j];
 
   q2[j]:=P[C[i,2],j];
end for;
+
end for;
 
        
 
        
 
   //Solving Matrix
 
   //Solving Matrix
Line 455: Line 462:
 
                     cy*cx,cy^2,cy*cz;
 
                     cy*cx,cy^2,cy*cz;
 
                     cz*cx,cz*cy,cz^2];
 
                     cz*cx,cz*cy,cz^2];
L diselesaikan dengan menentukan jarak vektor. notasi cx,cy,cz, membantu saat dibuat matriks u. notasi cx sebenarnya menjadi semacam jalan meringkas dibentuknya matriks stifness.
 
 
selanjutnya perhitungan menggunakan coding berikut:
 
  
 
   //Transforming to global matrix
 
   //Transforming to global matrix
Line 468: Line 472:
 
   end for;   
 
   end for;   
  
G_star:=G+g;
+
G_star:=G+g;
G:=G_star;
+
G:=G_star;
 
end for;
 
end for;
  
 
//Implementing boundary
 
//Implementing boundary
for i in boundary loop
+
for x in 1:Points loop
for j in 1:N loop
+
if P[x,4] <> 0 then
  G[i,j]:=id[i,j];
+
  for a in 1:Points*3 loop
end for;
+
    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;
 
end for;
 +
 
//Solving displacement
 
//Solving displacement
 
displacement:=Modelica.Math.Matrices.solve(G,F);
 
displacement:=Modelica.Math.Matrices.solve(G,F);
 +
 
//Solving reaction
 
//Solving reaction
 
reaction:=(G_star*displacement)-F;
 
reaction:=(G_star*displacement)-F;
 +
 
//Eliminating float error
 
//Eliminating float error
 
for i in 1:N loop
 
for i in 1:N loop
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
+
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
displacement[i]:=if abs(displacement[i])<=err then 0 else  
+
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];
displacement[i];
 
 
end for;
 
end for;
 +
 
//Checking Force
 
//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[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[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)});
 
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
 
for i in 1:3 loop
 
  check[i] := if abs(check[i])<=ers then 0 else check[i];
 
  check[i] := if abs(check[i])<=ers then 0 else check[i];
 
end for;
 
end for;
//Calculating stress in each truss
+
 
 +
//Calculating stress in each truss
 
for i in 1:Trusses loop
 
for i in 1:Trusses loop
 
for j in 1:3 loop
 
for j in 1:3 loop
Line 516: Line 539:
 
   stress1[i]:=Modelica.Math.Vectors.length(Str);
 
   stress1[i]:=Modelica.Math.Vectors.length(Str);
 
end for;
 
end for;
 +
 
//Safety factor
 
//Safety factor
 
for i in 1:Trusses loop
 
for i in 1:Trusses loop
 
  if stress1[i]>0 then
 
  if stress1[i]>0 then
   safety[i]:=Elas/stress1[i];
+
   safety[i]:=Yield/stress1[i];
 
  else
 
  else
 
   safety[i]:=0;
 
   safety[i]:=0;
 
  end if;  
 
  end if;  
 
end for;
 
end for;
 +
 
end Trusses_3D_Tugas_Besar_Safety;
 
end Trusses_3D_Tugas_Besar_Safety;
lalu, nilai yang kita cari dari pemodelan ini adalah reaction force, stress, displacement, dan yang terpenting safety factor ( yield/ stress)
 
 
berikut hasil nilai dari simulasi nya
 

Revision as of 14:15, 4 January 2021

Biografi

Foto Rizki Ramadhan

Nama  : Rizki Ramadhan Siregar
NPM  : 1806233240
Tempat & Tanggal Lahir : Bengkulu, 4 Desember 2000
Jurusan  : Teknik Mesin

Perkenalkan saya Rizki Ramadhan dari kota Bengkulu provinsi Bengkulu. Saat ini saya berkuliah di Universitas Indonesia Jurusan Teknik Mesin angkatan 2018. Saya memiliki ketertarikan yang tinggi terhadap perkembangan teknologi dan berorientasi terhadap masa depan. Berbekal Pengalaman dan pelajaran dalam dunia perkuliahan yang saya jalani saat ini, Insha Allah akan memberikan sebuah makna baru untuk kehidupan kedepan dan berguna bagi nusa dan bangsa (Aamiin)

Materi Sebelum UTS


Pada pertemuan sebelum UTS, kami telah belajar 3 materi utama, yaitu turunan numerik, mencari akar-akar, dan membaca pola.

1. Turunan Numerik

turunan numerik adalah menentukan hampiran nilai turunan fungsi f yang diberikan dalam bentuk tabel. Terdapat 3 pendekatan dalam menentukan turunan:
  • Turunan maju
Metnum radit 0 1.png
  • Turunan mundur
Metnum radit 0 2.png
  • Turunan pusat
Metnum radit 0 3.png

2. Mencari Akar

Pada materi ini, kami belajar cara mencari akar dengan metode numerik. Ada 2 cara dalam mengerjakannya, yaitu bracketing method dan open method.
Bracketing method
Bracketing method adalah metode mencari akar dengan cara menebak dua nilai, kemudian mengurung kedua nilai tersebut sehingga kita dapat menemukan akar-akar dari persamaan. Pada metode ini, ada beberapa cara penyelesaian, yaitu metode graphical, metode bisection, dan false-position.
  • Metode Graphical
Metode ini digunakan dengan cara membuat grafik fungsi dan melihat perpotongan sumbu horizontal atau sumbu x.
  • Metode Bisection
Metode ini dilakukan dengan cara membagi dua kurva yang diwakili oleh suatu titik yang nilainya dikalikan oleh nilai tertinggi dan yang terendah. Metode ini terus dilakukan hingga menemukan akar.
Metnum radit 0 4.png
  • False Position
Metode ini mirip dengan bisection, namun bedanya untuk penentuan titik tengah menggunakan segitiga dari titik perpotongan kurva dengan garis yang ditentukan.
Metnum radit 0 5.png
Open Method
Metode ini hanya menggunakan 1 titik sebagai acuan pertama untuk menemukan akar yang dicari. Open method terbagi menjadi 3 cara, yaitu newton rhapson, secant, dan simple fix point.
  • Newton Rhapson
Metode ini dilakukan dengan cara menentukan suatu titik dan menarik garis singgung terhadap kurva. Cara menentukan garis singgung tersebut dengan turunan.
Metnum radit 0 7.png
  • Secant
Metode ini mirip dengan Newton Rhapson, tapi estimasi dengan 2 titik jika pada newton rhapson f'(x) tidak dapat dicari.
Metnum radit 0 6.png
  • Simple Fix Point
Metode ini menghitung seluruh kemungkinan x yang dihasilkan dan dicari x konvergen sehingga x=g(x).

3. Membaca Pola

Ada dua cara dalam membaca pola suatu data, yaitu dengan regresi dan interpolasi
  • Regresi
  • Interpolasi

Tugas 1 : Tutorial Open Modelica

Pada Tugas pertama metode numerik ini, kami diperkenalkan sebuah aplikasi open source yaitu open modelica. Aplikasi ini berguna untuk menjalankan simulasi, plotting dan serta modelling. Untuk mendownload aplikasi open modelica yaitu pada website https://www.openmodelica.org/download/download-windows.

Pada tutorial ini saya mencoba untuk mensimulasikan persamaan pendulum untuk mengetahui sudut dan kecepatan sudut dari pendulum tersebut. langkah-langkahny seperti dibawah:

1.Buka aplikasi openModelica,klik pada menu new file dan masukkan nama file yang ingin dinamai

2.Setelah itu,klik pada text view sehingga tampilan seperti gambar dibawah
TextView.png

3. Setelah itu masukkan variabel-variabel dari persamaan yang akan diselesaikan. Variabel yang saya pakai ada beberapa yaitu g (percepatan gravitasi),L(panjang tali pendulum),Phi (sudut antara titik seimbang dan simpangan), serta w (kecepatan sudut pendulum)

4.Masukkan persamaan yang ingin diselesaikan pada kolom equation

5.Setelah semuanya sudah diinput seperti pada gambar
CodingPendulum.png

6.Setelah itu mulai simulasi dengan menetapkan stop time yaitu 5 sekon
SimulationSetup.png

7.Setelah itu mulai simulasi dan buka pada kolom plotting

8.Akan didapat grafik sudut dan kecepatan sudut seperti pada gambar dibawah
GrafikPendulum.png

Untuk video tutorial bisa diakses pada link berikut : https://youtu.be/H6rh5GmI4Uw

Pertemuan Kedua, 16 November 2020

Pada pertemuan kedua,pak dai meminta mahasiswa untuk mencoba open modelica untuk menyelesaikan persamaan-persamaan sederhana seperti persamaan linier dan mencari rata-rata.

untuk menginput variabel parameter, dapat menginput Parameter real var
untuk menginput variabel biasa ,dapat menginput real var

sehingga untuk menyelesaikan persamaan b = a+10 dapat dituliskan seperti gambar

Penjumlahan.png

setelah diinput semua codingan,maka langsung jalankan simulasi dan diperoleh hasil seperti digambar

Hasilpenjumlahan.png

pada kolom plotting maka kita bisa merubah variabel a dan kita akan memperoleh variabel b
untuk mencari rata-rata pada sejumlah data, maka hanya perlu memasukkan data lalu membuat persamaan mencari rata-rata yaitu Xbar= sigmaX/n(jumlah data).Seperti pada gambar

Hasilrata-rata.png

Tugas 2 : Mencari akar persamaan dengan metode gauss

Seperti yang telah dijelaskan sebelumnya, pak Dai memberi kami tugas untuk menyelesaikan salah satu persamaan linear simultan dengan open modelica. saya memilih untuk mengerjakan Metode Gauss Elimination sebagai objek percobaan saya didalam penyelesaian modelica. pertama-tama saya mencari soal tentang 3 persamaan linear 3 variable yang nantinya akan diubah menjadi matriks 3x3 dengan persamaan A*B=C. dimana matriks A[3x3], B[3], dan C[3]. soulusi yang dicari adalah pada nilai B1,B2, dan B3.

Persamaan sebagai berikut :

ContohsoalRizki.png

Setelah itu, persamaan2 tersebut dibuat dalam bentuk matriks sebelum diselesaikan menggunakan gauss, seperti pada gambar :

MatriksGaussRizki.jpg

sesuai dengan perintah pak dai, kita dianjurkan membuat 2 kelas dalam modelica. yang pertama adalah kelas function dimana kita memasukan fungsi algoritma nya.Kelas yang kedua adalah class dimana nanti function tadi di recall dan dimasukan variable nya lalu solve dilakukan.

Function Matriks

FunctionModelRizki.png

function class diisi dengan mendeclare nilai input,outputdan logartima dimana

input  : A[3,3] dan C[3]

output  : B[3]

Algoritma : B:=Modelica.Math.Matrices.solve(A,C)

algoritma menggunakan fungsi yang sudah ada didalam modelica yaitu fungsi matrices untuk gauss elimination.

Class Gauss Elimination

CodinganClassRizki.png

dalam kelas ini, fungsi tadi yang bernama "GaussPercobaan" direcall pada kolom equation dengan memasukan A&C sebagai inputnya dan B outputnya. namun sebelum itu terlebih dahulu saya men-declare nilai2 inputanya tadi seperti digambar atas tersebut

HasilPlottingRizki.png

Dari plottingan diatas, diperoleh hasil B1,B2,dan B3 yaitu {2,3,1}

Pertemuan Ketiga, 23 November 2020

Pada pertemuan kali ini, Pak Dai meminta mahasiswa untuk menjawab masalah sehari-hari dengan matriks gauss elimination menggunakan openmodelica.salah satu nya adalah terkait springmass untuk membuktikan hukum Hooke. Berikut adalah soal yang diminta

Soal330Rizki.png

Function Class

Untuk membuktikan solution di buku tersebut kita menggunakan metode eliminasi gauss sama seperti tugas 2. Pada step pertama, dibuat function class yang bertujuan untuk menginput matriks yang akan dipakai untuk menyelesaikan persamaan.

FunctionClassPegasRizki.png

Class Gauss Elimination

Setelah itu buat class baru yang akan kita gunakan untuk menginput data yang telah diketahui yaitu K dari pegas serta W(berat) dari massa.Selain itu kita melakukan recall pada matriks yang ada pada function class .

ClassPegasRizki.png

setelah berhasil untuk check model maka jalankan (Simulate) model tersebut. Maka akan didapat plotting sebagai berikut:

HasilPlottingPegasRizki.png

Diperoleh x1,x2,dan x3 yang sama dengan yang tertera dibuku

Tugas 3: Menganalisis stress menggunakan openmodelica dengan segmentasi node

Berikut adalah soal yang diberikan oleh Bapak Dai untuk diselesaikan:

Soal2.1Rizki.png

PembagianElemenNodeRizki.png

Penyelesaian:

1.Menghitung nilai k dari batang pada setiap elemen

NilaiK rizki.jpg

2. Membuat persamaan matriks local untuk kekakuan batang

PersamaanSudutRizki.png

PersamaanSudutRizki2.png

Elemen 1,3,6 dengan θ:0°

K1G rizki.pngK3G rizki.pngK6G rizki.png

Elemen 4 dengan θ:90°

K4G rizki.png

Elemen 2,5 dengan θ:+-45°

K2G rizki.pngK5G rizki.png

3. Menggabungkan persamaan matriks local menjadi matriks global

MatriksGlobalRizki.jpg

4. Memasukkan boundary condition dan membuat persamaan matriks dari hukum Hooke

BoundaryConditionRizki.jpg

MatriksHukumHooke.jpg

5.Selesaikan dengan openmodelica untuk mendapatkan besar gaya pada elemen batang

OpenModelicaMatriksStress.png


HasilPlottingMatriksStress.png


6.Mendapatkan nilai gaya reaksi

Karena di soal ingin mencari gaya reaksi, maka perlu dilakukan perhitungan pada gaya reaksi dengan persamaan

{R} = [K] {U} - {F}

MatriksGayaReaksiRizki.png

setelah itu selesaikan dengan openmodelica

CodinganMatriksGayaReaksi.png

HasilPlottingGayaReaksi.png

File openmodelica dengan format .mo bisa diakses pada drive dibawah

https://drive.google.com/drive/folders/1d8nI9DexidiYvQPuV_s2KMwQGWeoid0p

Pertemuan 4

Quiz 1 : Flowchart mencari defleksi dengan analisis elemen

Soal :

SoalQuizRizki4.jpeg

SoalQuizRizki8.jpeg

Flowchart :

FlowChartRizki.jpg

Pertemuan 5

Di pertemuan kali ini, kami membahas tentang soal quiz yang telah diberikan pada pertemuan pekan sebelumnya. sebelum kita mempelajari codingan untuk menyelesaikan soal, kita harus terlebih dahulu mempelajari soal/ masalah yang diberikan.Selanjutnya, dapat lebih memahami pengaplikasian dari software openmodelica pada contoh kasus yang real. Pertemuan ini menjelaskan bagaimana alur pengerjaan soal quiz yang diberikan agar dapat membuat semua persamaan yang dapat digunakan pada kasus yang lebih universal.

Pada pertemuan ini juga, teman saya fahmi menjelaskan mengenai codingan yang telah ia buat. Penjelasannya meliputi :

1.Menjelaskan secara garis besar alur berfikir dari coding itu sendiri.
2.Menjelaskan fungsi if untuk mengubah variabel.
3.Menjelaskan looping menggunakan fungsi for.
4.Menjelaskan apa itu floating number dan kegunaannya dalam matriks.
5.Menjelaskan apa itu protected variable.


Tugas

Setelah pertemuan, pak dai memberikan tugas untuk menganalisis keefektifan codingan yang telah dibuat oleh saudara fahmi.

1. Mempelajari codingan 3d fahmi

Pada codingan fahmi untuk batang 3D, tidak banyak terdapat perubahan pada jumlah function dan class dalam openmodelica, namun terldapat perbedaan pada matriks Inisiasi dimana terdapat dimensi yang baru yaitu nilai cos θx, cos θy, dan cos θz. nilai ini nantinya diperlukan dalam proses pencarian Stiffness dari batang itu sendiri. Selain itu pada codingan 3D, Ukuran matriks K Global menjadi lebih besar yaitu sebesar n*3 dimana n adalah jumlah node

matriks inisiasi

Pada function Stiffness Matriks global, pengonversian K elemen ke K Global, terdapat penambahan pola yaitu 3*n, 3*n-1 ,3*n-2 dimana n akan berubah nodenya sesuai dengan kuadran matriks pada matriks K elemen

Looping pada function Stiffness global


2. Mengaplikasikan pada soal example 3.3

Untuk soal example 3.3, terdapat perbedaan pada kondisi batas setiap node, terdapat node yang memiliki berbagai kondisi batas pada x,y,dan z . Maka diperlukan pendekatan input yang lain yaitu berupa boundary pada xyz ,xy, xz, yz ,x,y,serta z . serta boundary pada class function menjadi sebagai berikut :

Perubahan pada class

Pada function untuk BoundaryStiffnessGlobal juga diperlukan untuk melakukan looping pada setiap boundary xyz ,xy, xz, yz ,x,y,serta z.

Perubahan pada function BoundaryStiffnessGlobal

Setelah perubahan tdi dimasukkan, maka dijalankan maka hasilnya sebagai berikut :

matriks displacement
matriks gaya reaksi
matriks total gaya pada sumbu x, y, z

3. memberikan masukan atas codingan fahmi

  • Pada codingan saudara fahmi, untuk menginput kondisi batas masih hanya untuk kondisi batas Fix dimana tidak ada gaya pada sumbu x dan y . Akan lebih universal lagi jika kemudian kita bisa memasukan kondisi batas untuk berbagai macam jenis tumpuan lain seperti roll dan engsel.
  • Pada codingan 3d tersebut juga masih menginput nilai cos θx, cos θy, dan cos θz secara manual untuk matriks inisiasi. Untuk kedepan mungkin lebih bisa agar perhitungan dilakukan melalui codingan yaitu dengan mengurangkan panjang node i dan node j pada setiap batang.

Pertemuan 6: Aplikasi Metode Numerik dalam kasus Optimasi

Pertemuan kali ini membahas mengenai optimasi yaitu mencari titik maskimum lokal dan global dari suatu grafik tertentu dimana terdapat fungsi objektif dan constrain tertentu dari grafik tersebut. Dengan metode golden ratio bracket method kita dapat mendapatkan nilai maksimum dari sebuah grafik untuk di analisa titik optimumnya.

Sesuai dengan namanya, metode ini adalah metode bracket dari interval tertentu serta dicari interval yang benar(Terdapat titik maksimum/minimum) setelah itu melakukannya lagi sebanyak iterasi tertentu

BracketMethodRizki.png

Besar interval yang kita ambil dapat dicari dengan rumus sebagai berikut :

RumusD bracketRizki.png

dengan menjalankan iterasi menggunakan open modelica, maka akan diperoleh titik maksimum global/lokal untuk sebuah grafik. Titik tersebutlah yang akan kita jadikan acuan untuk melakukan optimasi pada sebuah sistem/proses.

Pertemuan 7: Review progress tugas besar Optimasi trusses 3D

Dari pertemuan kali ini, dibahas codingan dari josiah,ahmad dan cristo. Pada pertemuan kali ini dijelaskan secara sistematis bagaimana langkah-langkah dalam mencari stress dari trusses serta melakukan optimasi dari data harga material, stress dan luas area dari trusses itu sendiri. Sementara itu, untuk selanjutnya akan di adakan asistensi agar mahasiswa bisa bertanya dan dapat memahami lebih detail terkait codingan yang telah dibuat tersebut.

Tugas Besar Metode Numerik: Optimasi Trusses 3D

Pada akhir pembelajaran Metode Numerik menggunakan OpenModelica, kami ditugaskan untuk merancang tugas besar yaitu aplikasi Openmodelica dalam kasus optimasi trusses 3D. Secara garis besar, kasus trusses yang sudah ditentukan dilakukan pemodelan melalui coding modelica, setelah itu mulai lah proses optimasi menggunakan program modelica pula. Untuk kasus yang digunakan, ditentukan oleh Pak Dai secara langsung. berikut gambar kasus desain rangka sederhana yang akan dioptimasi:

SoalTubesRizki.png

Dari soal tersebut kita bisa mendefinisikan apa saja yang diketahui pada soal. Pada soal dapat dilihat sebuah rangka berbentuk tray dengan 4 lantai. Dalam rangka tersebut lalu diaplikasikan beban sebesar 1000 N dan 2000 N pada sisi yang berbeda. Dimensi yang dianjurkan adalah Panjang = 0.6 m, Lebar = 0.75 m, dan tinggi = 1.8 m. Beban diaplikasikan pada lebar rangka dengan panjang 0.75m. Tugas kita adalah mengoptimasikan desain tersebut dengan mempertimbangkan sisi efisiensi ekonomi dengan tetap mempertimbangkan kekuatan sistem trusses tersebut.

Adapun Pada gaya 1000N dan 2000N, diasumsikan bahwa gaya terdistribusi merata sebesar 1:1 diantara dua node pada trusses tersebut. artinya pada trusses yang memiliki beban 1000N akan terbagi menjadi 500N di node 1 dan 500N di node 2 begitu juga pada node3 dan 4.

Selanjutnya setelah dicari stress dari trusses tersebut, dilakukan optimasi dengan metode curve-fitting untuk melihat nilai optimum sebuah fungsi objektif. Pada tugas besar kali ini, akan dibuat terlebih dahulu grafik antara Harga material vs stress pada trusses. Akan akan 2 grafik yaitu untuk material konstan namun area berbeda dan material berbeda namun are konstan. Dari kedua grafik tersebutlah kemudian dilakukan optimasi untuk mendapatkan keadaan yang optimum.Asumsi lainnya adalah Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.

Langkah-Langkah Pada OpenModelica :

//define initial variable

parameter Integer Points=16; //Number of Points parameter Integer Trusses=24; //Number of Trusses parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) parameter Real Elas=193e9; //Elasticity SS 304 Setelah Komponen dasar pemodelan dideklarasikan, dilakukan pendefinisian connection & koordinat trusses.

Untuk define connection, dibuat kumpulan matriks 1x2 yang berisi 2 nama truss yang dihubungkan. untuk mempermudah pemahaman, susunan koneksi rangka dibangun berdasarkan tingkatan rangka pada desain, seperti lantai 1, 2 , 3 dll. koneksi-koneksi yang ada akan bervariasi sesuai dengan desain dari rangka nya.

Berikut contoh pemodelan Connection yang ada pada program:

model Trusses_3D_Tugas_Besar_Safety

//define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield=215e6; //Yield Strength (Pa) parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2) parameter Real Elas=193e9; //Elasticity SS 304 (Pa)

//define connection parameter Integer C[:,2]=[1,5;

                         2,6;
                         3,7;
                         4,8;
                         5,6;  //1st floor
                         6,7;  //1st floor
                         7,8;  //1st floor
                         5,8;  //1st floor
                         5,9;
                        6,10;
                        7,11;
                        8,12;
                        9,10; //2nd floor
                        10,11;//2nd floor 
                        11,12;//2nd floor
                         9,12; //2nd floor
                         9,13;
                        10,14;
                        11,15;
                        12,16;
                        13,14;//3rd floor
                        14,15;//3rd floor
                        15,16;//3rd floor
                       13,16];//3rd floor
                                                             

//define coordinates (please put orderly) parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1

                      -0.3,-0.375,0,1,1,1;    //2
                      -0.3,0.375,0,1,1,1;     //3
                      0.3,0.375,0,1,1,1;      //4
                          
                      0.3,-0.375,0.6,0,0,0;   //5
                      -0.3,-0.375,0.6,0,0,0;  //6
                      -0.3,0.375,0.6,0,0,0;   //7
                      0.3,0.375,0.6,0,0,0;    //8
                           
                      0.3,-0.375,1.2,0,0,0;   //9
                      -0.3,-0.375,1.2,0,0,0;  //10  
                      -0.3,0.375,1.2,0,0,0;   //11
                      0.3,0.375,1.2,0,0,0;    //12
                           
                      0.3,-0.375,1.8,0,0,0;   //13
                      -0.3,-0.375,1.8,0,0,0;  //14
                      -0.3,0.375,1.8,0,0,0;   //15
                      0.3,0.375,1.8,0,0,0];   //16
                         

//define external force (please put orderly) parameter Real F[Points*3]={0,0,0,

                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,0, 
                           0,0,-500, 
                           0,0,-1000, 
                           0,0,-1000, 
                           0,0,-500}; 

//solution Real displacement[N], reaction[N]; Real check[3];

Real stress1[Trusses]; Real safety[Trusses]; Real dis[3]; Real Str[3];

protected parameter Integer N=3*Points; Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3]; Real err=10e-10, ers=10e-4;

algorithm //Creating Global Matrix G:=id; for i in 1:Trusses loop

for j in 1:3 loop
 q1[j]:=P[C[i,1],j];
 q2[j]:=P[C[i,2],j];
end for;
     
  //Solving Matrix
  L:=Modelica.Math.Vectors.length(q2-q1);
  cx:=(q2[1]-q1[1])/L;
  cy:=(q2[2]-q1[2])/L;
  cz:=(q2[3]-q1[3])/L; 
  X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;
                    cy*cx,cy^2,cy*cz;
                    cz*cx,cz*cy,cz^2];
  //Transforming to global matrix
  g:=zeros(N,N); 
  for m,n in 1:3 loop
    g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];
    g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];
    g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];
    g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];
  end for;  
G_star:=G+g;
G:=G_star;

end for;

//Implementing boundary for x in 1:Points loop

if P[x,4] <> 0 then
  for a in 1:Points*3 loop
    G[(x*3)-2,a]:=0;
    G[(x*3)-2,(x*3)-2]:=1;
  end for;
end if;
if P[x,5] <> 0 then
  for a in 1:Points*3 loop
    G[(x*3)-1,a]:=0;
    G[(x*3)-1,(x*3)-1]:=1;
  end for;
end if;
if P[x,6] <> 0 then
  for a in 1:Points*3 loop
    G[x*3,a]:=0;
    G[x*3,x*3]:=1;
  end for;
end if;

end for;

//Solving displacement displacement:=Modelica.Math.Matrices.solve(G,F);

//Solving reaction reaction:=(G_star*displacement)-F;

//Eliminating float error for i in 1:N loop

reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];

end for;

//Checking Force check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});

for i in 1:3 loop

check[i] := if abs(check[i])<=ers then 0 else check[i];

end for;

//Calculating stress in each truss for i in 1:Trusses loop for j in 1:3 loop

 q1[j]:=P[C[i,1],j];
 q2[j]:=P[C[i,2],j];
 dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);

end for;

  //Solving Matrix
  L:=Modelica.Math.Vectors.length(q2-q1);
  cx:=(q2[1]-q1[1])/L;
  cy:=(q2[2]-q1[2])/L;
  cz:=(q2[3]-q1[3])/L; 
  X:=(Elas/L)*[cx^2,cx*cy,cx*cz;
               cy*cx,cy^2,cy*cz;
               cz*cx,cz*cy,cz^2];
  
  Str:=(X*dis);
  stress1[i]:=Modelica.Math.Vectors.length(Str);

end for;

//Safety factor for i in 1:Trusses loop

if stress1[i]>0 then
  safety[i]:=Yield/stress1[i];
else
  safety[i]:=0;
end if; 

end for;

end Trusses_3D_Tugas_Besar_Safety;