Difference between revisions of "Oka Widiantara Suputra"
OkaSuputra (talk | contribs) |
OkaSuputra (talk | contribs) |
||
(42 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | Salam hangat! Selamat datang di laman | + | Salam hangat! Selamat datang di laman saya :D |
[[File:Oka Suputra Teknik.jpg|200px|thumb|right|Oka Suputra]] | [[File:Oka Suputra Teknik.jpg|200px|thumb|right|Oka Suputra]] | ||
== Biodata == | == Biodata == | ||
Line 67: | Line 67: | ||
== Pertemuan-3 25/11/2020 == | == Pertemuan-3 25/11/2020 == | ||
− | |||
+ | === Materi === | ||
+ | Pada pertemuan ini, kita mempelajari mengenai aplikasi metode numerik terhadap dunia Engineering. Adapun metode yang secara umum digunakan untuk bisa membantu kita yaitu CFD, Stokastik, dan FEA. Adapun step by step alur berpikir dalam mengerjakan sebuah engineering problem | ||
− | + | [[File: Logic.jpeg|720px|center]] | |
− | [[File: | ||
− | + | *Masalah Teknik | |
− | + | *Analisis Model | |
− | + | *Model Matematis | |
− | + | *Model Numerik | |
− | + | *Komputer & Solusi | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ||
− | + | === Gauss Elimination === | |
− | + | Kami mencoba mengerjakan problem pseudocode pada bagian 9.4 di buku Numerical Method 7th Edition Chapra. Ini diinspirasikan oleh Christo | |
− | // | + | [[File: Pseudo 9.4.png|720px|center]] |
− | for | + | |
− | for | + | [[File: Screenshot (605).png|720px|center]] |
− | + | ||
− | + | Setelah itu coding disimulasikan untuk membuktikan Example 9.5 | |
− | + | ||
− | + | [[File: Example 9.5.png|720px|center]] | |
− | + | ||
+ | [[File: Open Modelica 9.5.png|720px|center]] | ||
+ | |||
+ | Setelah check model dan melakukan simulasi, maka hasil dibuktikan sesuai | ||
+ | |||
+ | [[File: Solution 9.5.png|720px|center]] | ||
+ | |||
+ | === Tugas 3 === | ||
+ | |||
+ | [[File:9.5 Truss.jpeg|720px|center]] | ||
+ | |||
+ | Dibuat FBD terlebih dahulu | ||
+ | |||
+ | [[File:Screenshot 606.jpg|360px|center]] | ||
+ | |||
+ | '''Class KG''' | ||
+ | model TugasNo4 | ||
+ | parameter Real A=0.001;//luas | ||
+ | parameter Real E=200*10^9;//modulus elastisitas | ||
+ | parameter Real L1=1;//Panjang batang 1,2 | ||
+ | parameter Real L2=1.25;//Panjang batang 4 | ||
+ | parameter Real L3=1.6;//panjang batang 3,5 | ||
+ | parameter Real t1=0;//sudut batang 1.Node 1 dan 2. | ||
+ | parameter Real t2=0;//sudut batang 2. Node 2 dan 3. | ||
+ | parameter Real t3=4.04;//sudut batang 3.Node 3 dan 4. | ||
+ | parameter Real t4=4.7;//sudut batang 4. Node 2 dan 4. | ||
+ | parameter Real t5=5.4;//sudut batang 5. Node 1 dan 4. | ||
+ | Real d1[8,8]=[(cos(t1))^2,sin(t1)*cos(t1),-(cos(t1))^2,-sin(t1)*cos(t1),0,0,0,0; | ||
+ | sin(t1)*cos(t1),(sin(t1))^2,-sin(t1)*cos(t1),-(sin(t1))^2,0,0,0,0; | ||
+ | -(cos(t1))^2,-sin(t1)*cos(t1),(cos(t1))^2,sin(t1)*cos(t1),0,0,0,0; | ||
+ | -sin(t1)*cos(t1),-(sin(t1))^2,sin(t1)*cos(t1),(sin(t1))^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 d2[8,8]=[0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,(cos(t2))^2,sin(t2)*cos(t2),-(cos(t2))^2,-(sin(t2)*cos(t2)),0,0; | ||
+ | 0,0,sin(t2)*cos(t2),(sin(t2))^2,-(sin(t2)*cos(t2)),-(sin(t2))^2,0,0; | ||
+ | 0,0,-(cos(t2))^2,-(sin(t2)*cos(t2)),(cos(t2))^2,sin(t2)*cos(t2),0,0; | ||
+ | 0,0,-(sin(t2)*cos(t2)),-(sin(t2))^2,sin(t2)*cos(t2),(sin(t2))^2,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0]; | ||
+ | Real d3[8,8]=[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,(cos(t3))^2,sin(t3)*cos(t3),-(cos(t3))^2,-sin(t3)*cos(t3); | ||
+ | 0,0,0,0,sin(t3)*cos(t3),(sin(t3))^2,-sin(t3)*cos(t3),-(sin(t3))^2; | ||
+ | 0,0,0,0,-(cos(t3))^2,-sin(t3)*cos(t3),(cos(t3))^2,sin(t3)*cos(t3); | ||
+ | 0,0,0,0,-sin(t3)*cos(t3),-(sin(t3))^2,sin(t3)*cos(t3),(sin(t3))^2]; | ||
+ | Real d4[8,8]=[0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,(cos(t4))^2,sin(t4)*cos(t4),0,0,-(cos(t4))^2,-sin(t4)*cos(t4); | ||
+ | 0,0,sin(t4)*cos(t4),(sin(t4))^2,0,0,-sin(t4)*cos(t4),-(sin(t4))^2; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,0,0,0,0,0,0; | ||
+ | 0,0,-(cos(t4))^2,-sin(t3)*cos(t4),0,0,(cos(t4))^2,sin(t4)*cos(t4); | ||
+ | 0,0,-sin(t4)*cos(t4),-(sin(t4))^2,0,0,sin(t4)*cos(t4),(sin(t4))^2]; | ||
+ | Real d5[8,8]=[cos(t5)^2,sin(t5)*cos(t2),0,0,0,0,-(cos(t5))^2,-(sin(t5)*cos(t5)); | ||
+ | sin(t5)*cos(t5),(sin(t5))^2,0,0,0,0,-(sin(t5)*cos(t5)),-(sin(t5))^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; | ||
+ | -(cos(t5))^2,-(sin(t5)*cos(t5)),0,0,0,0,(cos(t5))^2,sin(t5)*cos(t5); | ||
+ | -(sin(t5)*cos(t5)),-(sin(t5))^2,0,0,0,0,sin(t5)*cos(t5),(sin(t5))^2]; | ||
+ | Real k1; | ||
+ | Real k2; | ||
+ | Real k3; | ||
+ | Real K1[8,8]; | ||
+ | Real K2[8,8]; | ||
+ | Real K3[8,8]; | ||
+ | Real K4[8,8]; | ||
+ | Real K5[8,8]; | ||
+ | Real KG[8,8]; | ||
+ | equation | ||
+ | k1=A*E/L1; | ||
+ | k2=A*E/L2; | ||
+ | k3=A*E/L3; | ||
+ | K1=k1*d1; | ||
+ | K2=k1*d2; | ||
+ | K3=k3*d3; | ||
+ | K4=k2*d4; | ||
+ | K5=k3*d5; | ||
+ | KG=K1+K2+K3+K4+K5; | ||
+ | end TugasNo4; | ||
+ | |||
+ | '''Class U & R''' | ||
+ | class URTugasNo4 | ||
+ | parameter Real A[8,8]=[10^6,0,0,0,0,0,0,0; | ||
+ | 0,10^6,0,0,0,0,0,0; | ||
+ | -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6; | ||
+ | 0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8; | ||
+ | 0,0,0,0,10^6,0,0,0; | ||
+ | 0,0,0,0,0,10^6,0,0; | ||
+ | -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6; | ||
+ | 6.13*10^6,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8];//apply boundary | ||
+ | parameter Real B[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//external load | ||
+ | parameter Real KG[8,8]=[2.5*10^8,-9.6*10^7,-2*10^8,0,0,0,-5*10^7,6.13*10^7; | ||
+ | -6.1*10^7,7.46*10^7,0,0,0,0,6.13*10^7,-7.4*10^7; | ||
+ | -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6; | ||
+ | 0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8; | ||
+ | 0,0,-2*10^8,0,2.48*10^8,6.09*10^7,-4.8*10^7,-6*10^7; | ||
+ | 0,0,0,0,6.09*10^7,7.65*10^7,-6*10^7,-7.6*10^7; | ||
+ | -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6; | ||
+ | 6.13*10^7,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8]; | ||
+ | parameter Real F[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//force | ||
+ | Real U[8];//displacement | ||
+ | Real R[8];//reaction | ||
+ | equation | ||
+ | U=GaussElimination(A,B); | ||
+ | R=(KG*U)-F; | ||
+ | end URTugasNo4; | ||
+ | |||
+ | == Pertemuan-4 2/12/2020 == | ||
+ | |||
+ | === Quiz Block Diagram === | ||
+ | |||
+ | [[File:Quiz Metnum Oka.jpg|720px|center]] | ||
+ | |||
+ | === Tugas 4 === | ||
+ | |||
+ | Tugas ke-4 kali ini memecahkan permasalahan Truss 3 Dimensi dengan membuat class diagram, flow chart, serta pengerjaannya di Open Modelica. Di bawah ini merupakan soal no.8 yang akan dipecahkan serta sudah di breakdown beberapa parameter yang ada secara manual | ||
+ | |||
+ | [[File:SoalParameter Oka.png|720px|center]] | ||
+ | |||
+ | Setelah itu dibuat class diagram dan flow chart di bawah sebagai berikut | ||
+ | |||
+ | [[File:8ClassDiagram_FlowChart.jpg|720px|center]] | ||
+ | |||
+ | Kemudian dengan referensi code dari ananda Mohammad Fahmi | ||
+ | |||
+ | *1st step yang akan dilakukan yaitu mencari k dengan rumus k=AE/L yang akan digunakan untuk forming matriks stiffness elemental (Ke) pada setiap truss | ||
+ | |||
+ | [[File:StiffnessKe Oka.png|720px|center]] | ||
+ | |||
+ | *2nd step yaitu mentransfer matrix element 6x6 menjadi matrix global 12x12 untuk forming matriks stiffness global (Kg) yang disesuaikan dengan jumlah truss (3) dikali dengan jumlah node (4) | ||
+ | |||
+ | [[File:Stiffness Global Oka.png|720px|center]] | ||
+ | |||
+ | *3rd step yaitu menjumlahkan semua matriks stiffness global pada setiap truss menjadi sum of matriks stifness global (Kgtot) | ||
+ | |||
+ | [[File:Total Global Oka.png|720px|center]] | ||
+ | |||
+ | *4th step yaitu menetapkan boundaries pada sum of matriks stifness global menjadi (KgB), dimana kasusnya setiap node berupa tumpuan pinned | ||
+ | |||
+ | [[File:Boundary Global Oka.png|720px|center]] | ||
+ | |||
+ | *5th step yaitu mencari displacement (U) dari masing-masing titik matrix, dengan equation XU=F, dimana X adalah KGB, U merupakan displacement, dan F adalah Gaya Eksternal. Untuk bisa mendapatkan nilai U maka dilakukan fungsi Gauss Jordan | ||
+ | |||
+ | [[File:GaussJordan Oka.png|720px|center]] | ||
+ | |||
+ | *6th step yaitu mencari gaya reaksi (R) dengan persamaan R=Kg*U - f yang dimasukan ke dalam function | ||
+ | |||
+ | [[File:Reaksi Oka.png|720px|center]] | ||
+ | |||
+ | *7th step yaitu membuat Class yang diinput data-datanya dari parameter soal kemudian dipanggil semua fungsi yang ada untuk mendapatkan nilai yang dicari | ||
+ | |||
+ | [[File:Class Oka.png|720px|center]] | ||
+ | |||
+ | *8th step yaitu melakukan simulasi sehingga mendapatkan U dan R | ||
+ | |||
+ | [[File:U Oka.png|360px|center]] | ||
+ | |||
+ | [[File:R Oka.png|360px|center]] | ||
+ | |||
+ | Untuk video penjelasan ada di bawah ini: | ||
+ | |||
+ | [[File:OkaTugasNo8.mp4|720px|center]] | ||
+ | |||
+ | |||
+ | == Pertemuan-5 16/12/2020 == | ||
+ | |||
+ | Di awal pertemuan kami diberikan intro mengenai pentingnya optimasi dalan permasalahan engineering. Salah satu contohnya diterapkan di mata kuliah Sistem Fluida | ||
+ | |||
+ | [[File:Sisflu Curve.jpg|720px|center]] | ||
+ | |||
+ | Gambar di atas menunjukkan persamaan sistem dalam pump dari Head, Efficiency (%), Energy Capacity dari Fluida (Q), and Horsepower. Mengapa diperlukan adanya optimasi di aplikasi ini? Fungsinya untuk mendapatkan design pump dengan efficiency tertinggi (Best Efficiency Point) sehingga dapat menentukan faktor-faktor lainnya berdasarkan curve yang ada | ||
+ | |||
+ | Adapun metode yang kami pelajari mengenai teori optimasi yyaitu menggunakan Golden ratio yang diberikan oleh Ibu Chandra. Di sini secara fundamental kami diberikan pembelajaran serta bagaimana mengaplikasikannya ke dalam Open Modelica. Video yang dapat dilihat sebagai berikut | ||
+ | |||
+ | [[File:Bu Candra Golden Ratio.mp4|720px|center]] | ||
+ | |||
+ | Setelah itu kami mencoba untuk melakukannya di Open Modelica masing-masing. Di mulai dengan membuat model | ||
+ | |||
+ | [[File:Screenshot (566).png|720px|center]] | ||
+ | |||
+ | Kemudian membuat fungsi panggil | ||
+ | |||
+ | [[File:Screnshot (567).png|360px|center]] | ||
+ | |||
+ | Akhirnya disimulasikan untuk mendapatkan hasil | ||
+ | |||
+ | [[File:Screenshot (568).png|180px|center]] | ||
+ | [[File:Screenshot (569).png|180px|center]] | ||
+ | |||
+ | == Tugas Besar == | ||
+ | |||
+ | Pada kali ini, kami diberikan Tugas Besar sebagai proses mengimplementasikan apa yang telah dipelajari yaitu optimasi dan truss. Disini akan diberikan suatu permasalahan dalam membuat kerangka batang dengan struktur yang akan dioptimasi jenis material dan costnya | ||
+ | |||
+ | [[File:Structure Tubes.jpg|360px|center]] | ||
+ | [[File:Parameter1 Tubes.jpg|360px|center]] | ||
+ | |||
+ | Step by step secara general yang perlu kita konsiderasi yaitu: | ||
+ | *Menentukan jenis materialnya (Elasticity, Yield Strength, beserta Harga) | ||
+ | *Menentukan luas area cross section rangka | ||
+ | *Menghitung displacement dan stress | ||
+ | *Melakukan optimasi dengan cara 2 metode perbandingan harga (kondisi material sama untuk mencari area optimal, dan kondisi area sama untuk mencari material yang efektif) | ||
+ | |||
+ | Berdasarkan problem di atas, maka ada beberapa hal yang bisa diasumsikan yaitu: | ||
+ | *Beban akan terdistribusi hanya pada node (karena bersifat trusses). | ||
+ | *Safety factor minimal bernilai 2. | ||
+ | *Batas displacement 0,001 m sebelum buckling (pada truss paling atas). | ||
+ | *Ketinggian trusses pada tiap lantai sama yaitu 0,6 m. | ||
+ | |||
+ | Adapun parameter yang bisa kita hitung dari rangkaian tersebut, dimana total length pipa yang dibutuhkan dari dimensi sebesar 15,3 meter. Ini akan menjadi indikasi yang penting untuk pemasukan data-data berikutnya | ||
+ | |||
+ | '''Coding Mencari Displacement, RF, stress, and Safety factor''' | ||
+ | |||
+ | Saya mengambil pilihan material awal berupa SS 210 dengan area penampang dengan dimension 0.03x0.03 meter dengan thickens 0,003 sehingga didapatkan profile area sebesar 0.000171 m^2. Codingan sebagai berikut merupakan hasil diskusi bersama yang dipimpin oleh Christopher, Josiah, dan Muhammad Fahmi | ||
+ | |||
+ | Model TugasBesar_3DTrussSafety | ||
+ | //define initial variable | ||
+ | parameter Integer Points=size(P,1); //Number of Points | ||
+ | parameter Integer Trusses=size(C,1); //Number of Trusses | ||
+ | parameter Real Yield=292e6; //Yield Strength (Pa) | ||
+ | parameter Real Area=0.000171; //Area L Profile (Dimension=0.03, Thickness=0,003) (m2) | ||
+ | parameter Real Elas=197e9; //Elasticity SS 201 (Pa) | ||
+ | |||
+ | //define connection | ||
+ | parameter Integer C[:,2]=[1,5; | ||
+ | 2,6; | ||
+ | 3,7; | ||
+ | 4,8; | ||
+ | 5,6; //1st floor | ||
+ | 6,7; //1st floor | ||
+ | 7,8; //1st floor | ||
+ | 5,8; //1st floor | ||
+ | 5,9; | ||
+ | 6,10; | ||
+ | 7,11; | ||
+ | 8,12; | ||
+ | 9,10; //2nd floor | ||
+ | 10,11;//2nd floor | ||
+ | 11,12;//2nd floor | ||
+ | 9,12; //2nd floor | ||
+ | 9,13; | ||
+ | 10,14; | ||
+ | 11,15; | ||
+ | 12,16; | ||
+ | 13,14;//3rd floor | ||
+ | 14,15;//3rd floor | ||
+ | 15,16;//3rd floor | ||
+ | 13,16];//3rd floor | ||
+ | |||
+ | //define coordinates (please put orderly) | ||
+ | parameter Real P[:,6]=[0.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 for; | ||
− | end | + | 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 for; | ||
− | + | end if; | |
− | end for; | + | end for; |
− | end | + | |
+ | //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_3DTrussSafety; | ||
+ | |||
+ | '''Hasil Perhitungan Komputasi''' | ||
+ | |||
+ | [[File:Screnshot (600).png|360px|center]] | ||
+ | |||
+ | '''Perbandingan Metode Analisis Untuk Optimasi''' | ||
+ | *Metode 1: Material Tetap, Variasi Area | ||
+ | |||
+ | Penyesuaian pemilihan jenis material berupa Stainless Steel dengan grade SS 210 sebagai material acuan yang bisa dilihat data-data nya di referensi https://www.azom.com/article.aspx?ArticleID=6780 | ||
+ | |||
+ | [[File:Screnshot (590).png|360px|center]] | ||
+ | |||
+ | Kemudian kita tentukan beberapa variasi cross section mengambil sumber siku truss berdasarkan referensi https://wijayamakmur.com/siku/. Disini saya memilih 6 variasi dari segi dimensi beserta harga yang ada sehingga bisa dilanjutkan ke proses curve fitting | ||
+ | |||
+ | [[File:Screnshot (591).png|720px|center]] | ||
+ | |||
+ | Kemudian kita melakukan curve fitting yang bisa menggunakan online plotter ataupun open modelica untuk bisa merepresentasikan hubungan area vs harga per satuan meter sehingga didapatkan nilai cost total yang representatif untuk setiap data, stress, safety factor, serta Ratio | ||
+ | |||
+ | [[File:Screnshot (592).png|720px|center]] | ||
+ | |||
+ | Data di atas kemudian dioptimasikan dengan metode golden pada open modelica sehingga mendapat nilai di open modelica sebagai berikut | ||
+ | |||
+ | [[File:Screnshot (589).png|360px|center]] | ||
+ | |||
+ | Dapat disimpulkan dari metode 1 ini bahwa menggunakan material SS 210, luas cross section maximum berupa 0.000315114 m^2 | ||
+ | |||
+ | *Metode 2: Area Tetap, Jenis Material Bervariasi | ||
+ | |||
+ | Menetapkan dimensi dan design factor yang tetap sebagai bahan acuan | ||
+ | |||
+ | [[File:Screnshot (594).png|360px|center]] | ||
+ | |||
+ | Melakukan pemilihan variasi material. Saya mengambil 4 jenis variasi material stainless steel dengan grade SS201 SS304 SS316 dan SS403. Harga-harga yang didapatkan berdasarkan referensi https://www.tokopedia.com/kingsteelid | ||
+ | |||
+ | [[File:Screnshot (597).png|360px|center]] | ||
+ | |||
+ | Kemudian kita melakukan curve fitting yang bisa menggunakan online plotter ataupun open modelica untuk bisa merepresentasikan hubungan elastisitas vs harga per kg, elastisitas vs density, dan elastisitas vs yield sehingga didapatkan nilai cost total yang representatif untuk setiap data, stress, safety factor, serta Ratio | ||
+ | |||
+ | [[File:Screnshot (595).png|720px|center]] | ||
+ | |||
+ | Data di atas kemudian dioptimasikan dengan metode golden pada open modelica sehingga mendapat nilai di open modelica sebagai berikut | ||
+ | |||
+ | [[File:Screnshot (588).png|360px|center]] | ||
+ | |||
+ | Dapat disimpulkan dari metode 2 ini bahwa type elastisitas yang optimal dalam design sebesar 1,979e+11 dimana nilai itu paling mendekati material SS210 sebagai material yang paling efektif | ||
+ | |||
+ | *Codingan untuk Curve Fitting dan Golden Optimization (Optimasi material dan area) | ||
+ | |||
+ | function TugasBesar_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 TugasBesar_Curve_Fitting; | ||
+ | |||
+ | Model TugasBesar_Golden_section | ||
+ | |||
+ | parameter Real xd[:]={}; //Input xd | ||
+ | parameter Real yd[:]={}; // Input yd | ||
+ | parameter Real xlo=; //Input xlo | ||
+ | parameter Real xhi=; // Input xhi | ||
+ | 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 := TugasBesar_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 TugasBesar_Golden_section; | ||
+ | |||
+ | == UAS == | ||
+ | Berikut merupakan hasil jawaban UAS Saya | ||
+ | |||
+ | [[File:OkaUAS1.jpg|360px|center]] | ||
+ | |||
+ | [[File:OkaUAS2.jpg|360px|center]] | ||
+ | |||
+ | [[File:OkaUAS3.jpg|360px|center]] | ||
− | |||
− | + | '''Coding OM''' | |
− | [[ | + | model UAS_2DTrussSafety |
+ | //Oka W Suputra 1806149236 Metnum 02 | ||
+ | //define initial variable | ||
+ | parameter Integer Points = size(P, 1); | ||
+ | //Number of Points | ||
+ | parameter Integer Trusses = size(C, 1); | ||
+ | //Number of Trusses | ||
+ | parameter Real Yield = 214e6; | ||
+ | //Yield Strength (Pa) | ||
+ | parameter Real Area = 25; | ||
+ | //Area L Profile | ||
+ | parameter Real Elas = 68.9e9; | ||
+ | //Elasticity Al 6061 (Pa) | ||
+ | //define connection | ||
+ | parameter Integer C[:, 2] = [1, 2; 1, 3; 1, 4]; | ||
+ | //define coordinates (please put orderly) | ||
+ | parameter Real P[:, 6] = [0, 0, 0, 1, 1, 1; //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; | ||
+ | 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]; | ||
+ | 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; | ||
+ | //Solving Matrix | ||
+ | //Transforming to global matrix | ||
+ | //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; | ||
+ | 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; | ||
+ | //Solving Matrix | ||
+ | //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_2DTrussSafety; | ||
− | + | '''Hasil''' | |
− | [[File: | + | [[File:OkaUAS4.png|360px|center]] |
+ | [[File:OkaUAS5.png|360px|center]] |
Latest revision as of 16:11, 14 January 2021
Salam hangat! Selamat datang di laman saya :D
Contents
Biodata
Perkenalkan, nama saya Oka sebagai mahasiswa Teknik Mesin UI angkatan 2018. Saya bersyukur bisa mendapatkan kesempatan untuk bisa belajar dan berkembang selama 20 tahun kehidupan yang telah saya lalui. Sekilas tentang saya, berinteraksi dengan orang lain merupakan hal yang menyenangkan untuk saya karena setiap orang memiliki kisah yang unik sehingga dapat membuka wawasan ataupun perspektif. Dari situ, kita bisa menggabungkan perspektif yang ada di dunia ini sehingga didapatkan berbagai jenis cara untuk memecahkan permasalahan yang ada dan bahkan menolong orang lain. Saya percaya apabila kita ingin terus belajar, memiliki niat yang baik, berusaha, dan beribadah, pasti akan diberikan jalan yang baik untuk kedepannya.
Pertemuan-1 11/11/2020
Tujuan Pembelajaran Metode Numerik
- Memahami prinsip dasar dan konsep metode numerik sebagai bekal perjalanan kita untuk mencapai tahap selanjutnya sebagai seorang engineer
- Mampu mengerti aplikasi yang ada dalam metode numerik
- Bisa menerapkan konsep di dalam pemodelan numerik dan persoalan teknik(menyelesaikan problem dengan numerik)
- Mendapatkan nilai tambah atau value sebagai manusia yang beradab
Materi Sebelum UTS
- Pseudocode
- Sistem Persamaan
- Turunan Numerik
- Metode Newton Rhapson, Secant, Bisection
- Regresi Linear
- Interpolasi
Tugas 1
Dalam tugas yang pertama ini, saya mempelajari penggunaan Open Modelica melalui beberapa source dari youtube seperti:
- https://www.youtube.com/playlist?list=PLwpmIf9ZQ3Ex9svxIo7WrWjPESFU21oDE
- https://www.youtube.com/playlist?list=PLis_8UnILRXU3HEtRwzfGp9ESG9Hc1XKq
Setelah itu saya membuat video pembelajaran saya sendiri akan Open Modelica dengan mengaplikasikan basic nya ke dalam permasalahan Cantilever Beam
Pertemuan-2 18/11/2020
Mengapa Open Modelica?
Pada pertemuan kedua kali ini, salah satu teman saya, Yogi Gunawan memberikan suatu pertanyaan menarik kepada Pak DAI "Dari sekian program yang ada, mengapa kita memilih Open Modelica?". Kemudian Pak DAI memberikan beberapa key takeaways untuk menjawab perihal tersebut.
- Open Modelica lebih di fokuskan kepada design permodelan yang akan membantu kita, para engineers, untuk bisa menyelesaikan real case baik dari control system, heat transfer, sistem fluida dan sebagainya.
- Memudahkan kita untuk cross function (mempelajari berbagai dasar ilmu) dalam 1 software
- Open Source, berarti dia free untuk digunakan dan dapat melakukan interaksi dengan pengguna lainnya. Bahkan sekarang banyak sekali open source yang memiliki kelebihan lebih banyak dari software yang telah dilegalisasi
Tugas 2
Overview
Setelah kami diajarkan oleh Pak DAI beberapa tipe modelica seperti Class dan Function, kami diberikan tugas untuk melatih implementasi tersebut ke dalam persoalan aljabar simultan.
[Aljabar Simultan merupakan metode penyelesaian persamaan matematik yang kompleks dalam satu waktu yang sama. Salah satu metode yang bisa digunakan adalah Gauss Jordan]
Saya mengambil contoh permasalahan dari Buku Numerical Method 7th Edition oleh Steven C. Chapra pada bab 12 problem 8 untuk dijadikan study case dalam pemrograman Open Modelica.
Pada gambar di atas, perlu diselesaikan transformasi matrix yang ada untuk bisa mendapatkan nilai c1, c2, c3, can c4 sebagai konsentrasi dari chlorida yang dibutuhkan pada masing-masing reservoir/lake. Oleh karena itu kita bisa implementasikan ke dalam Open Modelica bagian class seperti di bawah
Modelica Class
Modelica Function
Setelah disimulasi maka akan didapatkan nilai masing-masing sebagai berikut:
- c1= 0.558325
- c2= 0.857411
- c3= 0.0931163
- c4= 0.100237
Untuk mendapatkan guide secara visual, dapat dilihat di video bawah ini
Video
Pertemuan-3 25/11/2020
Materi
Pada pertemuan ini, kita mempelajari mengenai aplikasi metode numerik terhadap dunia Engineering. Adapun metode yang secara umum digunakan untuk bisa membantu kita yaitu CFD, Stokastik, dan FEA. Adapun step by step alur berpikir dalam mengerjakan sebuah engineering problem
- Masalah Teknik
- Analisis Model
- Model Matematis
- Model Numerik
- Komputer & Solusi
Gauss Elimination
Kami mencoba mengerjakan problem pseudocode pada bagian 9.4 di buku Numerical Method 7th Edition Chapra. Ini diinspirasikan oleh Christo
Setelah itu coding disimulasikan untuk membuktikan Example 9.5
Setelah check model dan melakukan simulasi, maka hasil dibuktikan sesuai
Tugas 3
Dibuat FBD terlebih dahulu
Class KG
model TugasNo4 parameter Real A=0.001;//luas parameter Real E=200*10^9;//modulus elastisitas parameter Real L1=1;//Panjang batang 1,2 parameter Real L2=1.25;//Panjang batang 4 parameter Real L3=1.6;//panjang batang 3,5 parameter Real t1=0;//sudut batang 1.Node 1 dan 2. parameter Real t2=0;//sudut batang 2. Node 2 dan 3. parameter Real t3=4.04;//sudut batang 3.Node 3 dan 4. parameter Real t4=4.7;//sudut batang 4. Node 2 dan 4. parameter Real t5=5.4;//sudut batang 5. Node 1 dan 4. Real d1[8,8]=[(cos(t1))^2,sin(t1)*cos(t1),-(cos(t1))^2,-sin(t1)*cos(t1),0,0,0,0; sin(t1)*cos(t1),(sin(t1))^2,-sin(t1)*cos(t1),-(sin(t1))^2,0,0,0,0; -(cos(t1))^2,-sin(t1)*cos(t1),(cos(t1))^2,sin(t1)*cos(t1),0,0,0,0; -sin(t1)*cos(t1),-(sin(t1))^2,sin(t1)*cos(t1),(sin(t1))^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 d2[8,8]=[0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(cos(t2))^2,sin(t2)*cos(t2),-(cos(t2))^2,-(sin(t2)*cos(t2)),0,0; 0,0,sin(t2)*cos(t2),(sin(t2))^2,-(sin(t2)*cos(t2)),-(sin(t2))^2,0,0; 0,0,-(cos(t2))^2,-(sin(t2)*cos(t2)),(cos(t2))^2,sin(t2)*cos(t2),0,0; 0,0,-(sin(t2)*cos(t2)),-(sin(t2))^2,sin(t2)*cos(t2),(sin(t2))^2,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0]; Real d3[8,8]=[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,(cos(t3))^2,sin(t3)*cos(t3),-(cos(t3))^2,-sin(t3)*cos(t3); 0,0,0,0,sin(t3)*cos(t3),(sin(t3))^2,-sin(t3)*cos(t3),-(sin(t3))^2; 0,0,0,0,-(cos(t3))^2,-sin(t3)*cos(t3),(cos(t3))^2,sin(t3)*cos(t3); 0,0,0,0,-sin(t3)*cos(t3),-(sin(t3))^2,sin(t3)*cos(t3),(sin(t3))^2]; Real d4[8,8]=[0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(cos(t4))^2,sin(t4)*cos(t4),0,0,-(cos(t4))^2,-sin(t4)*cos(t4); 0,0,sin(t4)*cos(t4),(sin(t4))^2,0,0,-sin(t4)*cos(t4),-(sin(t4))^2; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,-(cos(t4))^2,-sin(t3)*cos(t4),0,0,(cos(t4))^2,sin(t4)*cos(t4); 0,0,-sin(t4)*cos(t4),-(sin(t4))^2,0,0,sin(t4)*cos(t4),(sin(t4))^2]; Real d5[8,8]=[cos(t5)^2,sin(t5)*cos(t2),0,0,0,0,-(cos(t5))^2,-(sin(t5)*cos(t5)); sin(t5)*cos(t5),(sin(t5))^2,0,0,0,0,-(sin(t5)*cos(t5)),-(sin(t5))^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; -(cos(t5))^2,-(sin(t5)*cos(t5)),0,0,0,0,(cos(t5))^2,sin(t5)*cos(t5); -(sin(t5)*cos(t5)),-(sin(t5))^2,0,0,0,0,sin(t5)*cos(t5),(sin(t5))^2]; Real k1; Real k2; Real k3; Real K1[8,8]; Real K2[8,8]; Real K3[8,8]; Real K4[8,8]; Real K5[8,8]; Real KG[8,8]; equation k1=A*E/L1; k2=A*E/L2; k3=A*E/L3; K1=k1*d1; K2=k1*d2; K3=k3*d3; K4=k2*d4; K5=k3*d5; KG=K1+K2+K3+K4+K5; end TugasNo4;
Class U & R
class URTugasNo4 parameter Real A[8,8]=[10^6,0,0,0,0,0,0,0; 0,10^6,0,0,0,0,0,0; -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6; 0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8; 0,0,0,0,10^6,0,0,0; 0,0,0,0,0,10^6,0,0; -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6; 6.13*10^6,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8];//apply boundary parameter Real B[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//external load parameter Real KG[8,8]=[2.5*10^8,-9.6*10^7,-2*10^8,0,0,0,-5*10^7,6.13*10^7; -6.1*10^7,7.46*10^7,0,0,0,0,6.13*10^7,-7.4*10^7; -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6; 0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8; 0,0,-2*10^8,0,2.48*10^8,6.09*10^7,-4.8*10^7,-6*10^7; 0,0,0,0,6.09*10^7,7.65*10^7,-6*10^7,-7.6*10^7; -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6; 6.13*10^7,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8]; parameter Real F[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//force Real U[8];//displacement Real R[8];//reaction equation U=GaussElimination(A,B); R=(KG*U)-F; end URTugasNo4;
Pertemuan-4 2/12/2020
Quiz Block Diagram
Tugas 4
Tugas ke-4 kali ini memecahkan permasalahan Truss 3 Dimensi dengan membuat class diagram, flow chart, serta pengerjaannya di Open Modelica. Di bawah ini merupakan soal no.8 yang akan dipecahkan serta sudah di breakdown beberapa parameter yang ada secara manual
Setelah itu dibuat class diagram dan flow chart di bawah sebagai berikut
Kemudian dengan referensi code dari ananda Mohammad Fahmi
- 1st step yang akan dilakukan yaitu mencari k dengan rumus k=AE/L yang akan digunakan untuk forming matriks stiffness elemental (Ke) pada setiap truss
- 2nd step yaitu mentransfer matrix element 6x6 menjadi matrix global 12x12 untuk forming matriks stiffness global (Kg) yang disesuaikan dengan jumlah truss (3) dikali dengan jumlah node (4)
- 3rd step yaitu menjumlahkan semua matriks stiffness global pada setiap truss menjadi sum of matriks stifness global (Kgtot)
- 4th step yaitu menetapkan boundaries pada sum of matriks stifness global menjadi (KgB), dimana kasusnya setiap node berupa tumpuan pinned
- 5th step yaitu mencari displacement (U) dari masing-masing titik matrix, dengan equation XU=F, dimana X adalah KGB, U merupakan displacement, dan F adalah Gaya Eksternal. Untuk bisa mendapatkan nilai U maka dilakukan fungsi Gauss Jordan
- 6th step yaitu mencari gaya reaksi (R) dengan persamaan R=Kg*U - f yang dimasukan ke dalam function
- 7th step yaitu membuat Class yang diinput data-datanya dari parameter soal kemudian dipanggil semua fungsi yang ada untuk mendapatkan nilai yang dicari
- 8th step yaitu melakukan simulasi sehingga mendapatkan U dan R
Untuk video penjelasan ada di bawah ini:
Pertemuan-5 16/12/2020
Di awal pertemuan kami diberikan intro mengenai pentingnya optimasi dalan permasalahan engineering. Salah satu contohnya diterapkan di mata kuliah Sistem Fluida
Gambar di atas menunjukkan persamaan sistem dalam pump dari Head, Efficiency (%), Energy Capacity dari Fluida (Q), and Horsepower. Mengapa diperlukan adanya optimasi di aplikasi ini? Fungsinya untuk mendapatkan design pump dengan efficiency tertinggi (Best Efficiency Point) sehingga dapat menentukan faktor-faktor lainnya berdasarkan curve yang ada
Adapun metode yang kami pelajari mengenai teori optimasi yyaitu menggunakan Golden ratio yang diberikan oleh Ibu Chandra. Di sini secara fundamental kami diberikan pembelajaran serta bagaimana mengaplikasikannya ke dalam Open Modelica. Video yang dapat dilihat sebagai berikut
Setelah itu kami mencoba untuk melakukannya di Open Modelica masing-masing. Di mulai dengan membuat model
Kemudian membuat fungsi panggil
Akhirnya disimulasikan untuk mendapatkan hasil
Tugas Besar
Pada kali ini, kami diberikan Tugas Besar sebagai proses mengimplementasikan apa yang telah dipelajari yaitu optimasi dan truss. Disini akan diberikan suatu permasalahan dalam membuat kerangka batang dengan struktur yang akan dioptimasi jenis material dan costnya
Step by step secara general yang perlu kita konsiderasi yaitu:
- Menentukan jenis materialnya (Elasticity, Yield Strength, beserta Harga)
- Menentukan luas area cross section rangka
- Menghitung displacement dan stress
- Melakukan optimasi dengan cara 2 metode perbandingan harga (kondisi material sama untuk mencari area optimal, dan kondisi area sama untuk mencari material yang efektif)
Berdasarkan problem di atas, maka ada beberapa hal yang bisa diasumsikan yaitu:
- Beban akan terdistribusi hanya pada node (karena bersifat trusses).
- Safety factor minimal bernilai 2.
- Batas displacement 0,001 m sebelum buckling (pada truss paling atas).
- Ketinggian trusses pada tiap lantai sama yaitu 0,6 m.
Adapun parameter yang bisa kita hitung dari rangkaian tersebut, dimana total length pipa yang dibutuhkan dari dimensi sebesar 15,3 meter. Ini akan menjadi indikasi yang penting untuk pemasukan data-data berikutnya
Coding Mencari Displacement, RF, stress, and Safety factor
Saya mengambil pilihan material awal berupa SS 210 dengan area penampang dengan dimension 0.03x0.03 meter dengan thickens 0,003 sehingga didapatkan profile area sebesar 0.000171 m^2. Codingan sebagai berikut merupakan hasil diskusi bersama yang dipimpin oleh Christopher, Josiah, dan Muhammad Fahmi
Model TugasBesar_3DTrussSafety //define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield=292e6; //Yield Strength (Pa) parameter Real Area=0.000171; //Area L Profile (Dimension=0.03, Thickness=0,003) (m2) parameter Real Elas=197e9; //Elasticity SS 201 (Pa) //define connection parameter Integer C[:,2]=[1,5; 2,6; 3,7; 4,8; 5,6; //1st floor 6,7; //1st floor 7,8; //1st floor 5,8; //1st floor 5,9; 6,10; 7,11; 8,12; 9,10; //2nd floor 10,11;//2nd floor 11,12;//2nd floor 9,12; //2nd floor 9,13; 10,14; 11,15; 12,16; 13,14;//3rd floor 14,15;//3rd floor 15,16;//3rd floor 13,16];//3rd floor //define coordinates (please put orderly) parameter Real P[:,6]=[0.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 TugasBesar_3DTrussSafety;
Hasil Perhitungan Komputasi
Perbandingan Metode Analisis Untuk Optimasi
- Metode 1: Material Tetap, Variasi Area
Penyesuaian pemilihan jenis material berupa Stainless Steel dengan grade SS 210 sebagai material acuan yang bisa dilihat data-data nya di referensi https://www.azom.com/article.aspx?ArticleID=6780
Kemudian kita tentukan beberapa variasi cross section mengambil sumber siku truss berdasarkan referensi https://wijayamakmur.com/siku/. Disini saya memilih 6 variasi dari segi dimensi beserta harga yang ada sehingga bisa dilanjutkan ke proses curve fitting
Kemudian kita melakukan curve fitting yang bisa menggunakan online plotter ataupun open modelica untuk bisa merepresentasikan hubungan area vs harga per satuan meter sehingga didapatkan nilai cost total yang representatif untuk setiap data, stress, safety factor, serta Ratio
Data di atas kemudian dioptimasikan dengan metode golden pada open modelica sehingga mendapat nilai di open modelica sebagai berikut
Dapat disimpulkan dari metode 1 ini bahwa menggunakan material SS 210, luas cross section maximum berupa 0.000315114 m^2
- Metode 2: Area Tetap, Jenis Material Bervariasi
Menetapkan dimensi dan design factor yang tetap sebagai bahan acuan
Melakukan pemilihan variasi material. Saya mengambil 4 jenis variasi material stainless steel dengan grade SS201 SS304 SS316 dan SS403. Harga-harga yang didapatkan berdasarkan referensi https://www.tokopedia.com/kingsteelid
Kemudian kita melakukan curve fitting yang bisa menggunakan online plotter ataupun open modelica untuk bisa merepresentasikan hubungan elastisitas vs harga per kg, elastisitas vs density, dan elastisitas vs yield sehingga didapatkan nilai cost total yang representatif untuk setiap data, stress, safety factor, serta Ratio
Data di atas kemudian dioptimasikan dengan metode golden pada open modelica sehingga mendapat nilai di open modelica sebagai berikut
Dapat disimpulkan dari metode 2 ini bahwa type elastisitas yang optimal dalam design sebesar 1,979e+11 dimana nilai itu paling mendekati material SS210 sebagai material yang paling efektif
- Codingan untuk Curve Fitting dan Golden Optimization (Optimasi material dan area)
function TugasBesar_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 TugasBesar_Curve_Fitting;
Model TugasBesar_Golden_section parameter Real xd[:]={}; //Input xd parameter Real yd[:]={}; // Input yd parameter Real xlo=; //Input xlo parameter Real xhi=; // Input xhi 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 := TugasBesar_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 TugasBesar_Golden_section;
UAS
Berikut merupakan hasil jawaban UAS Saya
Coding OM
model UAS_2DTrussSafety //Oka W Suputra 1806149236 Metnum 02 //define initial variable parameter Integer Points = size(P, 1); //Number of Points parameter Integer Trusses = size(C, 1); //Number of Trusses parameter Real Yield = 214e6; //Yield Strength (Pa) parameter Real Area = 25; //Area L Profile parameter Real Elas = 68.9e9; //Elasticity Al 6061 (Pa) //define connection parameter Integer C[:, 2] = [1, 2; 1, 3; 1, 4]; //define coordinates (please put orderly) parameter Real P[:, 6] = [0, 0, 0, 1, 1, 1; //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; 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]; 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; //Solving Matrix //Transforming to global matrix //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; 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; //Solving Matrix //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_2DTrussSafety;
Hasil