Difference between revisions of "Cornelia Christiani Vianney"
(→UAS) |
|||
Line 404: | Line 404: | ||
== UAS == | == UAS == | ||
+ | |||
+ | |||
+ | Code Modelica yang digunakan untuk menjawab soal nomor 7 | ||
+ | |||
+ | model UAS_1dtruss //Cornelia Christiani Vianney | ||
+ | |||
+ | //define initial variable | ||
+ | parameter Integer Points=size(P,1); //Number of Points | ||
+ | parameter Integer Trusses=size(C,1); //Number of Trusses | ||
+ | parameter Real Yield=225e6; //Yield Strength (Mild steel SS400)(Pa) | ||
+ | parameter Real Area=0.0005; //Area L Profile (Dimension=0.03, Thickness=0.003)(m2) | ||
+ | parameter Real Elas=2e11; //Elasticity SS400 (Mild steel SS400)(Pa) | ||
+ | |||
+ | //define connection | ||
+ | parameter Integer C[:,2]=[1,2; | ||
+ | 2,3; | ||
+ | 3,4]; | ||
+ | |||
+ | //define coordinates (please put orderly) | ||
+ | parameter Real P[:,6]=[0,0,0,1,1,1; //1 | ||
+ | 0,0.04,0,0,0,0; //2 | ||
+ | 0,0.08,0,0,0,0; //3 | ||
+ | 0,0.12,0,0,0,0]; //4 | ||
+ | |||
+ | //define external force (please put orderly) | ||
+ | parameter Real F[Points*3]={0,0,0, //1 | ||
+ | 0,0,0, //2 | ||
+ | 0,0,0, //3 | ||
+ | 0,200,0}; //4 | ||
+ | |||
+ | //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_1dtruss; |
Revision as of 19:24, 13 January 2021
Contents
- 1 Perkenalan
- 2 Review Materi Sebelumnya
- 3 Pertemuan 1 (11/11/2020)
- 4 Pertemuan 2 (18/11/2020)
- 5 Pertemuan 3 (25/11/2020)
- 6 Pertemuan 4 (02/12/2020)
- 7 Pertemuan 5 pengganti (14/12/2020)
- 8 Pertemuan 6 (16/12/2020)
- 9 Tugas Besar Metode Numerik : Aplikasi Metode Numerik dalam Optimasi desain Struktur Rangka Sederhana
- 10 UAS
Perkenalan
Nama Lengkap : Cornelia Christiani Vianney
Nama Panggilan : Christin
NPM : 1806149066
Tempat, tanggal lahir : Jakarta, 29 Juni 2000
Jurusan : Teknik Mesin
Angkatan : 2018
Saya adalah seorang mahasiswa semester 5 di Departemen Teknik Mesin jurusan teknik mesin. Saya bersyukur bisa berada sampai pada tahap ini karena berkat dan pertolongan Tuhan yang mengijinkan saya mendapatkan jurusan teknik mesin di UI ini. Pada bagian ini, saya akan belajar mengenai Metode Numerik. Saya berharap melalui pembelajaran mata kuliah ini, saya dapat menggunakannya dan mengaplikasikannya untuk menyelesaikan masalah yang akan saya hadapi ke depannya juga untuk membantu orang lain.
Review Materi Sebelumnya
Selama setengah semester sebelumnya, mata kuliah metode numerik ini diajar oleh bapak Dr. Ir. Engkos A. Kosasih, M.T. Disini saya belajar mengenai beberapa hal, antara lain :
- penghitungan deret Taylor dan McLaurin dengan metode forward, center, dan backward dan penghitungannya dalam Excel;
- menghitung akar-akar persamaan dengan metode Bisection, Secant, dan Newton Raphson serta pengaplikasiannya melalui Excel;
- menyelesaikan sistem persamaan menggunakan deret Taylor;
- serta mencari nilai interpolasi dan regresi linier menggunakan matriks.
Yang masih saya kurang pahami adalah mengenai code yang dapat digunakan di aplikasi, karena sebelumnya kurang dijelaskan dan cara pengaplikasiannya pun juga masih belum terbayang.
Pertemuan 1 (11/11/2020)
Pada pertemuan pertama setelah UTS ini, Pak Dr. Ir. Ahmad Indra Siswantara meminta mahasiswa untuk membuat akun pada situs wiki air. Kami dijelaskan langkah-langkah membuat halaman baru berjudulkan nama lengkap kami masing-masing. Halaman ini yang nantinya akan digunakan sebagai update review tiap minggu pertemuan dan sebagai wadah menuangkan pemikiran dari tugas-tugas yang diberikan. Selain itu, beliau juga memaparkan tujuan pembelajaran mata kuliah metode numerik ini, yaitu :
- memahami konsep-konsep dan prinsip-prinsip dasar dalam metode numerik;
- mengerti aplikasi dari metode numerik;
- mampu menerapkan metode numerik dalam persoalan teknik;
- dan untuk mendapat nilai tambah sehingga kita bisa menjadi orang yang lebih beradab.
Kami diingatkan juga bahwa meskipun kita menggunakan komputer sebagai salah satu media penghitungan, komputer juga memiliki batasan penghitungan yang sebenarnya masih dapat dihitung oleh manusia. Manusialah yang berperan sebagai subjek yang pintar dalam mengoperasikan komputer.
Tugas Minggu I
- Mempelajari aplikasi Open Modelica melalui video youtube dan memberikan tautan link hasil pembelajaran.
Saya coba mempelajari aplikasi Open Modelica melalui video berikut :
Hasil pembelajaran saya dapat dilihat melalui video :
Pertemuan 2 (18/11/2020)
Hari ini kembali diingatkan oleh Pak Dai bahwa orang yang beruntung adalah orang yang menjalani hari ini lebih baik dari hari kemarin, yang memiliki gradien hidup positif. Apabila seseorang menjalani hari ini tidak berbeda dari hari kemarin, maka gradien nya 0, dan apabila hari ini justru malah lebih buruk dari hari kemarin, maka gradiennya negatif. Kami juga diminta untuk mencoba merenungkan apa yang telah didapat dari mata kuliah sebelumnya. Untuk materi yang disampaikan berupa penggunaan open modellica dengan kelas 'class' dan 'function', yaitu dimana kita menuliskan fungsi pada kelas 'function' kemudian kita panggil melalui kelas 'class'.
Diberi contoh fungsi yang digunakan sebagai berikut, dan diberi nama file 'fungsitmbhx1'
Kemudian dibuat kelas yang memanggil fungsi tersebut, diberi nama 'Kelaspanggil' dan kita misalkan nilai x1=5
Maka akan kita dapatkan hasil sebagai berikut
Dengan nilai x1 yang dapat diubah sesuai kebutuhan.
Tugas Minggu II
Membuat sebuah kelas fungsi dan kelas pemanggil untuk menyelesaikan persamaan simultan (bisa berupa kasus nyata)
Disini saya baru mencoba menyelesaikan SPL dengan metode matriks (array) dari 10 persamaan dengan 10 variabel.
Pertemuan 3 (25/11/2020)
Pada pertemuan hari ini kami diperkenalkan untuk dapat mengapliakasikan modelica untuk menyelesaikan permasalahan keteknikan. Sebelum itu, ada latihan menyelesaikan sistem persamaan dengan membuat fungsi penyelesaian dengan referensi pseudocode 9.4 untuk soal 9.5 dari buku Numerical Methods for Engineers 7th Edition oleh Chapra.
Pada hari ini pula, dua mahasiswa, yaitu Josiah Enrico dan Christopher Erwin turut membantu menjelaskan pemahaman mereka mengenai penyelesaian Gauss Jordan menggunakan modelica. Saya memahami sebagian penjelasan mereka dan akan saya coba gunakan untuk menyelesaikan tugas selanjutnya.
Latihan
Saya mencoba menggunakan code Gauss-Jordan yang dijelaskan oleh saudara Christopher Salendu untuk menyelesaikan persamaan 9.5
Sehingga saya mendapatkan hasil perhitungan pada matriks akhir sebagai berikut
dimana hasilnya sesuai dengan perhitungan di buku
Kemudian, saya menemukan hal menarik dari perhitungan kali ini. Ketika saya mencoba mengecek secara mandiri function yang digunakan, saya mendapatkan eror seperti gambar di bawah:
dimana dikatakan bahwa komputer tidak dapat membaca persamaan yang akan digunakan dalam perhitungan, sedangkan persamaan awal matriks memang masih dikondisikan agar dapat semua jenis ukuran matriks dapat tercakup. Nyatanya, ketika saya coba abaikan eror dalam function dan mencoba simulate dari class, perhitungan dapat berjalan baik sehingga mendapatkan hasil seperti di gambar sebelumnya.
Tugas Minggu III
Kami diminta untuk membuat program sederhana dengan modelica menggunakan fungsi penyelesaian aljabar untuk kasus 4 dibawah.
Saya terlebih dahulu mencoba perhitungan secara manual
Selanjutnya saya akan mencoba memasukkannya ke dalam program. Dalam hal ini saya belajar dari saudari Hikaru Trinita dalam menggunakan persamaan matriks yang diperlukan dengan perhitungan sederhana
Diawali dengan membuat matriks konstanta pegas global
didapatkan nilai anggota matriks KG seperti di bawah
Kemudian saya mencoba membuat function seperti penyelesaian SPL sebelumnya dengan kelas terkait:
Sehingga, didapatkan nilai matriks R dan U seperti berikut
Pertemuan 4 (02/12/2020)
Kita harus memahami makna dari apa yang kita lakukan.
Quiz : Diagram Class dan Flow Chart
Membuat class diagram dan flowchart setiap class untuk coding mengenai Trusses Problem milik Josiah Enrico :
Dari yang saya pahami dari pembahasan soal milik saudara Josiah, didapatkan 5 kelas yang digunakan. Dari Matrices Transformation, menggunakan input data sudut dari elemen pada truss, kemudian dihasilkan output berupa matriks lokal dari kekakuan pegas. Dari persamaan pada Global Element Matrice, tiap matriks lokal kekakuan tiap elemen diletakkan dalam susunan matriks global. Dalam class Truss kemudian matriks tiap elemen diolah dengan luas penampang, modulus elastisitas dan panjang tiap elemen, kemudian disatukan menjadi suatu matriks global G. dengan menerapkan boundary condition, kemudian matriks diselesaikan dengan Gauss Jordan untuk mendapatkan nilai defleksi dan menggunakan fungsi Reaction untuk mendapatkan gaya reaksi
Tugas Minggu IV
buatlah flowchart, diagram class, coding openmodelica
HASIL
Diagram Class dan Flow Chart
Saya mencoba menghitung secara manual guna mendapatkan data untuk perhitungan
Berikut adalah hasil coding untuk soal 3D Trusses berdasarkan referensi milik saudara Ahmad Mohammad Fahmi dari kelas Metode Numerik 03 :
Kekakuan Elemen
Kekakuan Global
Kekakuan Global Gabungan (hasil penjumlahan kekakuan global per elemen)
Gauss Jordan
Gaya Reaksi
Kelas Pemanggil
Hasil yang didapatkan untuk U (besar defleksi) dan R (gaya reaksi)
Video Penjelasan :
Pertemuan 5 pengganti (14/12/2020)
Kami diminta untuk muhasabah diri dan memberikan penilaian terhadap diri sendiri akan pemahaman mengenai mata kuliah Metode Numerik ini. Disini juga dibahas mengenai sistem truss berupa diskusi kelas MetNum 02 dan MetNum 03.
Pertemuan 6 (16/12/2020)
Aplikasi Metode Numerik dalam Kasus Optimisasi
Kami belajar mengenai program optimasi dengan modelica. Penjelasan diberikan oleh Bu Chandra melalui video yang kemudian dibahas dikelas. Program optimasi dengan menggunakan bracket function digunakan apabila kita memiliki sebuah rentang nilai dengan grafik dan hendak menentukan titik maksimum dari grafik tersebut.
Fungsi yang digunakan adalah sebagai berikut :
Kelas pemanggilnya :
Sehingga didapatkan nilai :
Tugas Besar Metode Numerik : Aplikasi Metode Numerik dalam Optimasi desain Struktur Rangka Sederhana
Sebagai tugas besar, kami diminta untuk mendesain rangka yang reliable dengan pengeluaran cost yang optimum (serendah mungkin).
Diketahui sebuah struktur rangka seperti pada gambar, dengan data yang diberikan juga tertera.
Variabel bebas/faktor lainnya yang perlu ditentukan adalah jenis material (elastisitas), harga material, dan luas cross section Truss (dengan L profile). Kami diminta untuk mencari optimasi dan membentuk kurva efisiensi harga dengan Curve Fitting, serta menentukan nilai optimum dengan cost terendah.
Data, Penomoran dan Asumsi
1. Beban terdistribusi pada node
2. Titik node 1 pada penomoran terletak pada titik pusat koordinat (0,0,0)
3. Jenis material yang digunakan : Mild Steel SS400
4. Panjang truss vertikal 0.6 m per tingkat
Code yang digunakan
3D Truss
Fungsi Curve Fitting
Class Curve Fitting
Optimasi
Hasil Perhitungan
Displacement
Reaction Force
Safety dan Stress
Variasi Cross-section Area
Kesimpulan, nilai optimal luas cross-section truss dengan material Mild Steel SS400 dengan susunan rangka seperti pada soal adalah 0.00047 m^2 atau dapat dikatakan dimensi truss 0.05x0.05 mm dengan tebal L profile 0.005 mm
Variasi Elasticity Material
Kesimpulan, nilai optimal elasticity material dengan luas cross-section 171e-6 m^2susunan rangka seperti pada soal adalah 1.93e11 atau dapat dikatakan material terbaik sebagai penyusun rangka tersebut adalah SS304
Referensi
https://wijayamakmur.com/product/siku-ss201-30x30x3mm-x-6000mm/
https://metal.beyond-steel.com/2011/08/harga-plat-mild-steel-a36-or-ss400-for-construction/
https://www.aksteel.com/sites/default/files/2018-01/201201512_3.pdf
UAS
Code Modelica yang digunakan untuk menjawab soal nomor 7
model UAS_1dtruss //Cornelia Christiani Vianney //define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield=225e6; //Yield Strength (Mild steel SS400)(Pa) parameter Real Area=0.0005; //Area L Profile (Dimension=0.03, Thickness=0.003)(m2) parameter Real Elas=2e11; //Elasticity SS400 (Mild steel SS400)(Pa) //define connection parameter Integer C[:,2]=[1,2; 2,3; 3,4]; //define coordinates (please put orderly) parameter Real P[:,6]=[0,0,0,1,1,1; //1 0,0.04,0,0,0,0; //2 0,0.08,0,0,0,0; //3 0,0.12,0,0,0,0]; //4 //define external force (please put orderly) parameter Real F[Points*3]={0,0,0, //1 0,0,0, //2 0,0,0, //3 0,200,0}; //4 //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_1dtruss;