Difference between revisions of "Oka Widiantara Suputra"
OkaSuputra (talk | contribs) |
OkaSuputra (talk | contribs) |
||
Line 730: | Line 730: | ||
end for; | end for; | ||
end TugasBesar_3DTrussSafety; | end TugasBesar_3DTrussSafety; | ||
+ | |||
+ | '''Hasil Perhitungan Komputasi''' | ||
+ | |||
+ | [[File:Screnshot (600).png|360px|center]] | ||
'''Perbandingan Metode Analisis Untuk Optimasi''' | '''Perbandingan Metode Analisis Untuk Optimasi''' |
Revision as of 13:27, 6 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 Jordan
Untuk materi gauss jordan ini sendiri, saya mempelajari dari Christo, teman saya yang melakukan sharing di kelas sehingga didapatkan hasil coding sebagai berikut
function GaussJordan input Real [:,:] A;//matriks awal output Real [:,:] B;//matriks tereduksi protected Integer h = 1; //pivot row Integer k = 1; //pivot coloumn Integer m = size(A,1); //jumlah baris Integer n = size(A,2); //jumlah kolom Integer c = 0; Integer max_row; // Row index of max number in pivot column Real [:] pivot_column; Real [:] pivot_row; Real [:,:] temp_array; Real r; Real float_error = 10e-10; algorithm B := A; while h <= m and k <= n loop for i in 1 : m loop for j in 1 : n loop if abs(B[i,j]) <= float_error then B[i,j] := 0; end if; end for; end for; //Finding pivot pivot_column:= {B[i,h] for i in h:m}; //Baris terbawah yang mempunyai dengan pivot tertinggi c:=h-1; for element in pivot_column loop c:= c+1; if abs(element)== max(abs(pivot_column)) then max_row :=c; end if; end for; //Jika tidak ada pivot di kolom ini, pindah ke kolom selanjutnya if B[max_row,k] == 0 then k:=k+1; else // tukar row h - max_row temp_array := B; temp_array[h] := B[max_row]; temp_array[max_row] := B[h]; B:= temp_array; //devide pivot row by pivot number B[h] := B[h]/B[h,k]; for i in (h+1) :m loop r := B[i,k]/B[h,k]; B[i,k]:=0; for j in (k+1) : n loop B[i,j] := B[i,j]-B[h,j] * r; end for; end for; //pindah ke pivot kolom dan row selanjutnya h := h+1; k := k+1; end if; end while; // proses dari kanan atas h :=m; k :=n; while h >=1 and k>=1 loop //dealing with error for i in 1:m loop for j in 1:n loop if abs(B[i,j]) <=float_error then B[i,j]:=0; end if; end for; end for; //finding pivot pivot_row := {B[h,i] for i in 1:k}; //Get position index k of pivot c := 0; for element in pivot_row loop c := c+1; if element <> 0 then break; end if; end for; k:= c; // no pivot in this row, move to next row if B[h,k] == 0 then h:= h-1; else //perform row operatation for i in 1:(h-1) loop r := B[i,k]; B[i] := B[i] - B[h] *r; end for; //move to next pivot row dan column h:=h+1; k:=k+1; end if; end while; end GaussJordan;
Gauss Elimination
Kami mencoba mengerjakan problem pseudocode pada bagian 9.4 di buku Numerical Method 7th Edition Chapra
function GaussElimination input Real [3,3] A; input Real [3] B; output Real [3] x; protected Real [3,3] a; Real [3] b; Integer m = size(A,1); // total row Integer n = size(A,2); // total column Real k = 1; Real i = 1; Real j = 1; Real factor = 1; Real sum = 1;
algorithm a := A; b := B; // Forward Elimination for k in 1:(n-1) loop for i in (k+1):n loop factor := a[i,k] / a[k,k]; for j in (k+1):n loop a[i,j] := a[i,j] - (factor * a[k,j]); end for; b[i] := b[i] - (factor * b[k]); end for; end for; // Back Substitution x[n] := b[n] / a[n,n]; for i in (n-1):(-1) loop sum := b[i]; for j in (i+1):n loop sum := sum - (a[i,j] * x[j]); end for; x[i] := sum / a[i,i]; end for; end GaussElimination;
Setelah itu coding disimulasikan untuk membuktikan Example 9.5
Setelah check model dan melakukan simulasi, maka hasil dibuktikan sesuai
Tugas 3
Class
class TrussNo4 parameter Integer N=8; //Matrix Global dimana 2 node terhubung parameter Real A=0.001; //Luas Penampang m^2 parameter Real E=200e9; //Modulus Young Pa Real G[N,N]; //Global Real Ginitial[N,N]; //Global awal Real Sol[N]; //Displacement Global Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033}; Real R[N]; //Reaksi Gaya Global Real SolMat[N,1]; Real XMat[N,1]; //boundaries Integer b1=1; Integer b2=3; //truss 1 parameter Real X1=0; //degree between truss Real k1=A*E/1; Real K1[4,4]; //stiffness matrice Integer p1a=1; Integer p1b=2; Real G1[N,N]; //truss 2 parameter Real X2=0; //degree between truss Real k2=A*E/1; Real K2[4,4]; //stiffness matrice Integer p2a=2; Integer p2b=3; Real G2[N,N]; //truss 3 parameter Real X3=90; //degree between truss Real k3=A*E/1.25; Real K3[4,4]; //stiffness matrice Integer p3a=2; Integer p3b=4; Real G3[N,N]; //truss 4 parameter Real X4=90+38.6598; //degree between truss Real k4=A*E/1.6; Real K4[4,4]; //stiffness matrice Integer p4a=1; Integer p4b=4; Real G4[N,N]; //truss 5 parameter Real X5=90-38.6598; //degree between truss Real k5=A*E/1.6; Real K5[4,4]; //stiffness matrice Integer p5a=3; Integer p5b=4; Real G5[N,N]; algorithm //creating global matrice K1:=Stiffness(X1); G1:=k1*GlobalMatriks(K1,N,p1a,p1b); K2:=Stiffness(X2); G2:=k2*GlobalMatriks(K2,N,p2a,p2b);
K3:=Stiffness(X3); G3:=k3*GlobalMatriks(K3,N,p3a,p3b); K4:=Stiffness(X4); G4:=k4*GlobalMatriks(K4,N,p4a,p4b); K5:=Stiffness(X5); G5:=k5*GlobalMatriks(K5,N,p5a,p5b); G:=G1+G2+G3+G4+G5; Ginitial:=G; //implementing boundary condition for i in 1:N loop G[2*b1-1,i]:=0; G[2*b1,i]:=0; G[2*b2-1,i]:=0; G[2*b2,i]:=0; end for; G[2*b1-1,2*b1-1]:=1; G[2*b1,2*b1]:=1; G[2*b2-1,2*b2-1]:=1; G[2*b2,2*b2]:=1; //solving displacement Sol:=Gauss_Jordan(N,G,X);
//solving reaction force SolMat:=matrix(Sol); XMat:=matrix(X); R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);
end TrussNo4;
Function
function Stiffness input Real A; Real Y; output Real X[4,4]; Real float_error = 10e-10; final constant Real pi=2*Modelica.Math.asin(1.0); algorithm Y:=A/180*pi; X:=[(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.cos(Y))^2,- Modelica.Math.cos(Y)*Modelica.Math.sin(Y); Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2; -(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y); -Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2]; for i in 1:4 loop for j in 1:4 loop if abs(X[i,j]) <= float_error then X[i,j] := 0; end if; end for; end for; end Stiffness;
function GlobalMatriks input Real Y[4,4]; input Integer B; input Integer p1; input Integer p2; output Real G[B,B]; algorithm for i in 1:B loop for j in 1:B loop G[i,j]:=0; end for; end for; G[2*p1,2*p1]:=Y[2,2]; G[2*p1-1,2*p1-1]:=Y[1,1]; G[2*p1,2*p1-1]:=Y[2,1]; G[2*p1-1,2*p1]:=Y[1,2]; G[2*p2,2*p2]:=Y[4,4]; G[2*p2-1,2*p2-1]:=Y[3,3]; G[2*p2,2*p2-1]:=Y[4,3]; G[2*p2-1,2*p2]:=Y[3,4]; G[2*p2,2*p1]:=Y[4,2]; G[2*p2-1,2*p1-1]:=Y[3,1]; G[2*p2,2*p1-1]:=Y[4,1]; G[2*p2-1,2*p1]:=Y[3,2]; G[2*p1,2*p2]:=Y[2,4]; G[2*p1-1,2*p2-1]:=Y[1,3]; G[2*p1,2*p2-1]:=Y[2,3]; G[2*p1-1,2*p2]:=Y[1,4]; end GlobalMatriks;
function ReactionForce input Integer N; input Real A[N,N]; input Real B[N,1]; input Real C[N,1]; Real X[N,1]; output Real Sol[N]; Real float_error = 10e-10; algorithm X:=A*B-C; for i in 1:N loop if abs(X[i,1]) <= float_error then X[i,1] := 0; end if; end for; for i in 1:N loop Sol[i]:=X[i,1]; end for; end ReactionForce;
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;