Difference between revisions of "Norman Febrianto"
Line 442: | Line 442: | ||
model Trusses_3D_TugasBesar_Safety | model Trusses_3D_TugasBesar_Safety | ||
− | //define initial variable | + | //define initial variable |
+ | parameter Integer Points=size(P,1); //Number of Points | ||
+ | parameter Integer Trusses=size(C,1); //Number of Trusses | ||
+ | parameter Real Yield=215e6; //Yield Strength (Pa) | ||
+ | parameter Real Area=0.000184; //Area L Profile (Dimension=0.025, Thickness=0,004)(m) | ||
+ | parameter Real Elas=193e9; //Elasticity SS 304 (Pa) | ||
+ | //define connection | ||
− | + | parameter Integer C[:,2]=[1,5; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | parameter Integer C[:,2]=[1,5; | ||
2,6; | 2,6; | ||
3,7; | 3,7; | ||
Line 477: | Line 474: | ||
15,16;//3rd floor | 15,16;//3rd floor | ||
13,16];//3rd floor | 13,16];//3rd floor | ||
− | //define coordinates (please put orderly) | + | //define coordinates (please put orderly) |
− | parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1 | + | 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; //2 | ||
-0.3,0.375,0,1,1,1; //3 | -0.3,0.375,0,1,1,1; //3 | ||
Line 494: | Line 491: | ||
-0.3,0.375,1.8,0,0,0; //15 | -0.3,0.375,1.8,0,0,0; //15 | ||
0.3,0.375,1.8,0,0,0]; //16 | 0.3,0.375,1.8,0,0,0]; //16 | ||
− | //define external force (please put orderly) | + | //define external force (please put orderly) |
− | parameter Real F[Points*3]={0,0,0, | + | parameter Real F[Points*3]={0,0,0, |
0,0,0, | 0,0,0, | ||
0,0,0, | 0,0,0, | ||
Line 511: | Line 508: | ||
0,0,-1000, | 0,0,-1000, | ||
0,0,-500}; | 0,0,-500}; | ||
− | //solution | + | //solution |
− | Real displacement[N], reaction[N]; | + | Real displacement[N], reaction[N]; |
− | Real check[3]; | + | Real check[3]; |
− | Real stress1[Trusses]; | + | Real stress1[Trusses]; |
− | Real safety[Trusses]; | + | Real safety[Trusses]; |
− | Real dis[3]; | + | Real dis[3]; |
− | Real Str[3]; | + | Real Str[3]; |
− | protected | + | protected |
− | parameter Integer N=3*Points; | + | 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 q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3]; |
− | Real err=10e-10, ers=10e-4; | + | Real err=10e-10, ers=10e-4; |
− | algorithm | + | algorithm |
− | //Creating Global Matrix | + | //Creating Global Matrix |
− | G:=id; | + | G:=id; |
− | for i in 1:Trusses loop | + | for i in 1:Trusses loop |
for j in 1:3 loop | for j in 1:3 loop | ||
q1[j]:=P[C[i,1],j]; | q1[j]:=P[C[i,1],j]; | ||
Line 548: | Line 545: | ||
G_star:=G+g; | G_star:=G+g; | ||
G:=G_star; | G:=G_star; | ||
− | end for; | + | end for; |
− | //Implementing boundary | + | //Implementing boundary |
− | for x in 1:Points loop | + | for x in 1:Points loop |
if P[x,4] <> 0 then | if P[x,4] <> 0 then | ||
for a in 1:Points*3 loop | for a in 1:Points*3 loop | ||
Line 569: | Line 566: | ||
end for; | end for; | ||
end if; | end if; | ||
− | end for; | + | end for; |
− | //Solving displacement | + | //Solving displacement |
− | displacement:=Modelica.Math.Matrices.solve(G,F); | + | displacement:=Modelica.Math.Matrices.solve(G,F); |
− | //Solving reaction | + | //Solving reaction |
− | reaction:=(G_star*displacement)-F; | + | reaction:=(G_star*displacement)-F; |
− | //Eliminating float error | + | //Eliminating float error |
− | for i in 1:N loop | + | for i in 1:N loop |
− | + | reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i]; | |
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i]; | displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i]; | ||
− | end for; | + | end for; |
− | //Checking Force | + | //Checking Force |
− | check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); | + | check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); |
− | check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); | + | check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); |
− | check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); | + | check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); |
− | for i in 1:3 loop | + | for i in 1:3 loop |
check[i] := if abs(check[i])<=ers then 0 else check[i]; | check[i] := if abs(check[i])<=ers then 0 else check[i]; | ||
− | end for; | + | end for; |
− | //Calculating stress in each truss | + | //Calculating stress in each truss |
− | for i in 1:Trusses loop | + | for i in 1:Trusses loop |
− | for j in 1:3 loop | + | for j in 1:3 loop |
q1[j]:=P[C[i,1],j]; | q1[j]:=P[C[i,1],j]; | ||
q2[j]:=P[C[i,2],j]; | q2[j]:=P[C[i,2],j]; | ||
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]); | dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]); | ||
− | end for; | + | end for; |
//Solving Matrix | //Solving Matrix | ||
L:=Modelica.Math.Vectors.length(q2-q1); | L:=Modelica.Math.Vectors.length(q2-q1); | ||
Line 603: | Line 600: | ||
Str:=(X*dis); | Str:=(X*dis); | ||
stress1[i]:=Modelica.Math.Vectors.length(Str); | stress1[i]:=Modelica.Math.Vectors.length(Str); | ||
− | end for; | + | end for; |
− | //Safety factor | + | //Safety factor |
− | for i in 1:Trusses loop | + | for i in 1:Trusses loop |
if stress1[i]>0 then | if stress1[i]>0 then | ||
safety[i]:=Yield/stress1[i]; | safety[i]:=Yield/stress1[i]; | ||
Line 611: | Line 608: | ||
safety[i]:=0; | safety[i]:=0; | ||
end if; | end if; | ||
− | end for; | + | end for; |
− | end Trusses_3D_TugasBesar_Safety; | + | end Trusses_3D_TugasBesar_Safety; |
Berikut adalah Data variasi untuk Material sama yaitu SS304, dan Area Factor yang sama adalah 0,00184. | Berikut adalah Data variasi untuk Material sama yaitu SS304, dan Area Factor yang sama adalah 0,00184. | ||
Line 623: | Line 620: | ||
Fungsi untuk Curve Fittingnya sebagai berikut | Fungsi untuk Curve Fittingnya sebagai berikut | ||
− | function CurveFitting | + | function CurveFitting |
− | input Real X[:]; | + | input Real X[:]; |
− | input Real Y[size(X,1)]; | + | input Real Y[size(X,1)]; |
− | input Integer order=2; | + | input Integer order=2; |
− | output Real Coe[order+1]; | + | output Real Coe[order+1]; |
− | protected | + | protected |
− | Real Z[size(X,1),order+1]; | + | Real Z[size(X,1),order+1]; |
− | Real ZTr[order+1,size(X,1)]; | + | Real ZTr[order+1,size(X,1)]; |
− | Real A[order+1,order+1]; | + | Real A[order+1,order+1]; |
− | Real B[order+1]; | + | Real B[order+1]; |
− | algorithm | + | algorithm |
− | for i in 1:size(X,1) loop | + | for i in 1:size(X,1) loop |
for j in 1:(order+1) loop | for j in 1:(order+1) loop | ||
Z[i,j]:=X[i]^(order+1-j); | Z[i,j]:=X[i]^(order+1-j); | ||
end for; | end for; | ||
− | end for; | + | end for; |
− | ZTr:=transpose(Z); | + | ZTr:=transpose(Z); |
− | A:=ZTr*Z; | + | A:=ZTr*Z; |
− | B:=ZTr*Y; | + | B:=ZTr*Y; |
− | Coe:=Modelica.Math.Matrices.solve(A,B); | + | Coe:=Modelica.Math.Matrices.solve(A,B); |
− | end CurveFitting; | + | end CurveFitting; |
Optimasi golden ratio untuk data material tetap | Optimasi golden ratio untuk data material tetap | ||
− | class Opt_Golden_Section | + | class Opt_Golden_Section |
− | //memasukan data pada xd,yd,xlo,xhi | + | //memasukan data pada xd,yd,xlo,xhi |
− | parameter Real xd[:]={0.000141,0.000144,0.000171,0.000184,0.000224,0.000231}; | + | parameter Real xd[:]={0.000141,0.000144,0.000171,0.000184,0.000224,0.000231}; |
− | parameter Real yd[size(xd,1)]={829776,845155,985330,1053955,1269736,1308215}; | + | parameter Real yd[size(xd,1)]={829776,845155,985330,1053955,1269736,1308215}; |
− | parameter Real xlo=141e-6; | + | parameter Real xlo=141e-6; |
− | parameter Real xhi=231e-6; | + | parameter Real xhi=231e-6; |
− | parameter Integer N=10; // maximum iteration | + | parameter Integer N=10; // maximum iteration |
− | parameter Real es=0.0001; // maximum error | + | parameter Real es=0.0001; // maximum error |
− | Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3]; | + | Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3]; |
− | Real xopt, fx; | + | Real xopt, fx; |
− | protected | + | protected |
− | Real d, xl, xu, xint, R=(5^(1/2)-1)/2; | + | Real d, xl, xu, xint, R=(5^(1/2)-1)/2; |
− | algorithm | + | algorithm |
− | xl := xlo; | + | xl := xlo; |
− | xu := xhi; | + | xu := xhi; |
− | y := CurveFitting(xd,yd); | + | y := CurveFitting(xd,yd); |
− | for i in 1:N loop | + | for i in 1:N loop |
d:= R*(xu-xl); | d:= R*(xu-xl); | ||
x1[i]:=xl+d; | x1[i]:=xl+d; | ||
Line 689: | Line 686: | ||
break; | break; | ||
end if; | end if; | ||
− | end for; | + | end for; |
− | end Opt_Golden_Section; | + | end Opt_Golden_Section; |
Setelah dilakukan stimulate didapatkan hasil optimum pada material tetap | Setelah dilakukan stimulate didapatkan hasil optimum pada material tetap |
Revision as of 17:28, 6 January 2021
Contents
Data Diri
- Nama : Norman Febrianto
- NPM : 190630161
- Jurusan : Teknik Mesin
- Angkatan: 2019
Perkenalan Singkat
Nama saya Norman Febrianto dari jurusan Mesin Universitas Indonesia. Saya memilih jurusan mesin karena ingin lebih mengetahui dunia permesinan dan prospek kerja jurusan mesin yang cukup luas.
Metode Numerik
Metode numerik merupapakan teknik dalam penyelesaian permsalahan yang diformulasikan secara matematis dengan menggunakan operasi hitungan (aritmatik) yaitu operasi tambah, kurang, kali, dan bagi. Metode ini digunakan karena banyak permasalahan matematis tidak dapat diselesaikan menggunakan metode analitik. Materi yang telah disampaikan dalam mata kuliah Metode Numerik diantaranya :
Pseudocode
- Sistem Persamaan
- Turunan Numerik
- Metode Newton Rhapson, Secant, dan Bisection
- Regresi Linear
- Interpolasi
Metode Numerik Minggu ke-1
Dalam belajar metode numerik, terdapat hal-hal yang harus diperhatikan diantaranya :
- paham melalui konsep-konsep yang telah diberikan, beberapa materi dalam metode numerik : memahami persamaan, istilah algoritma, kurva, regresi, differensial, parsial
- Dapat menerapkan pemahaman terhadap konsep dalam permodelan numerik, bisa menyelesaikan masalah melalui perhitungan numerik
- menerapkan metode dalam permasalahan keteknikan
- dapat mencapai poin 1,2,3 juga dengan moral value yaitu adab
Tugas Minggu ke-1
Mempelajari dan membuat video tutorial menggunakan open modelica, saya sudah membuat video tutorial yang tidak begitu sulit dengan open modelica mengenai interpolasi. berikut contoh soal yang saya coba menyelesaikan dengan openmodelica.
Kita dapat menyelesaikan persoalan berikut dengan menggunakan rumus umum dari interpolasi.
Kemudian kita dapat memasukan variabel-variabel yang diketahui, untuk parameter real berdasarkan soal diantaranya x1, x2, y1, y2. Variabel yang akan kita cari adalah y dan dapat kita tuliskan "Real y". Kita juga bisa menuliskan Real x meskipun x sudah diketahui pada open modelica.
Setelah di check, jika tidak terdapat masalah kita save terlebih dahulu dan dapat dilakukan stimulate untuk proses pada openmodelica. Hasil dari Real y yang dicari didapatkan pada box sebelah kanan.
berikut link video saya pada saat mengerjakan interpolasi di atas
saya mempelajari open modelica dari link video berikut : https://www.youtube.com/watch?v=GhtBMIlO70w
Metode Numerik Minggu ke-2
Openmodelica lebih ke bahasa permodelan, bukan hanya bahasa coding seperti pyhton. Namun dalam perhitungan menggunakan code yang dalam bahasa C++, parameter real tidak perlu dicompile ulang cukup di simulate ulang saja. kelebihan openmodelica diantaranya sebagai berikut :
- 1. menggunakan bahasa permodelan yang cocok untuk engineer
- 2. segi perhitungan lumayan cepat
- 3. pengguna aplikasi openmodelica cukup banyak penggunanya, dan termasuk open teknologi (free). Karena seperti mathlab harus membeli atau ada legalisasi
Pada minggu ini, belajar cara untuk memanggil suatu fungsi untuk class tertentu. Jadi pada langkahnya pada awal new, memilih pada option Function untuk membuat fungsi yang nantinya akan digunakan untuk membantu perhitungan. Function dinamakan "Fungsi Tambah X1"dengan X sebagai input, Y sebagai output, dan fungsi yang dibuat adalah Y=10+x. Dibuat dalam Open Modelica sebagai berikut:
Selanjutnya membuat new (baru) untuk memilih option class dinamakan "Panggil" yang digunakan untuk "memanggil" fungsi tambah X1 tersebut. Pada class ini, kita dapat mengubah nilai input X1 sesuai dengan kebutuhan.
Setelah itu, pada class untuk memakai function yang telah dibuat kita panggil pada "equation". Jadi Function digunakan untuk membantu perhitungan pada class ini. nilai output Y merupakan nilai yang dicari sesuai dengan nilai input X1 yang dimasukan. Sebagai contoh, dimasukkan nilai X1 sebesar 5 maka sesuai fungsi Y=10+X, akan didapatkan nilai Hasil+X1=10+X1=10+5=15.
Nilai outpu Y terlihat pada box di sebelah kanan. Nilai X1 dapat dirubah sesuai dengan kebutuhan dan dapat dilakukan re-simulate untuk mendapatkan nilai outputnya.
Tugas Minggu ke-2
Pengaplikasikan penggunaan Function dan Class pada Openmodelica. membuat sebuah fungsi berupa persamaan aljabar simultan dengan variabel array kemudian membuat class untuk memanggil fungsi tersebut. Persamaan aljabar simultan adalah sebuah persoalan matematika yang kompleks sehingga penyelesaian perlu dengan menggunakan tools, agar dapat dibuat lebih sederhana. Metode yang dapat digunakan untuk menyelesaikan persamaan aljabar simultan adalah metode Gauss, Gauss-Jordan, Crammer, dan Gauss-Seidel. Variabel array adalah sebuah variabel yang di dalamnya terdapat banyak data. Contoh, jika kita memiliki data X1,X2,...,X10 menggunakan variabel array cukup dituliskan X[10] Untuk mencoba menggunakan Function and Class, saya mencoba menjawab soal matriks 4x4 dari contoh soal yang saya browsing di internet.
Kemudian kita dapat membuat fungsi Gauss untuk matriks 4x4 terlebih dahulu. Pada function saya memakai fungsi "solve" eliminasi gauss dari openmodelica yang dapat digunakan untuk menyelesaikan persamaan matriks
Langkah selanjutnya membuat class yang berisikan matriks dari soal, dan untuk menggunakan function yang telah dibuat sebelumnya.
Setelah itu dilakukan stimulate, sehingga didapatkan hasil matriks berikut
berikut video saya untuk penerapan tugas ke-2 mengenai Function & classMetode Numerik Minggu ke-3
membuat fungsi di dalam modelica untuk menyelesaikan persamaan aljabar pada buku (9.12) dengan metode Gauss, namun bisa juga menggunakan metode lain seperti Gauss-Jordan. penyelesaian yang hasilnya berupa himpunan disebut array. menggunakan array karena nilai uji akan berubah perr-iterasi, iterasi 1 nilai A, ke-2 B, sehingga hasilnya berupa himpunan penyelesaian dan berupa grafik. [N] merupakan jumlah dari data, dapat juga menjadi 3 dimensi dengan menambahkan variabel lain [O], [P], dan lainnya. Beberapa metode yang dapat digunakan yaitu CFD, Stokastik, dan FEA. Dalam menyelesaikan masalah teknik, angkah yang harus dilakukan adalah melakukan analisis, membuat model matematis, menggunakan metode numerik untuk penyelesain (menggunakan computer), dan didapatkan solusi dari permasalahan. Salah satu permasalahan teknik yang dijadikan contoh adalah mengenai Truss.
Pada kelas kali ini, sebelumnya diriview kembali mengenai aljabar simultan untuk menyelesaikan persamaan linier dengan matriks. Pengaplikasian dalam Open Modelica, kita akan membuat code untuk menyelesaikan persamaan 9.12 pada buku Chapra yaitu mengenai eliminasi Naïve Gauss. Pseudocode untuk eliminasi Naïve Gauss diberikan pada Fig.9.4:
pada open modelica dapat dituliskan dengan menggunakan Function, dinamakan "NaiveGauss"
Kemudian dapat dipanggil function sebelumnya kedalam class
Setelah itu dapat kita stimulate untuk di dapatkan hasilnya
Tugas Minggu ke-3
Mencoba mengerjakan soal permasalahan teknik yaitu Truss, dengan menggunakan openmodelica. Berikut soal yang harus dikerjakan
Berikut merupakan Program yang dibuat pada modelica untuk penyelesaian
*class TrussesHW
parameter Integer N=8; //Global matrice = 2*points connected
parameter Real A=0.001; //Area m2
parameter Real E=200e9; //Pa
Real G[N,N]; //global
Real Ginitial[N,N]; //global
Real Sol[N]; //global dispplacement
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};
Real R[N]; //global reaction force
Real SolMat[N,1];
Real XMat[N,1];
//boundary condition
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];
/*
for each truss, please ensure pXa is lower then pXb (X represents truss element number)
*/
algorithm
//creating global matrice
K1:=Stiffness_Matrices(X1);
G1:=k1*Local_Global(K1,N,p1a,p1b);
K2:=Stiffness_Matrices(X2);
G2:=k2*Local_Global(K2,N,p2a,p2b);
K3:=Stiffness_Matrices(X3);
G3:=k3*Local_Global(K3,N,p3a,p3b);
K4:=Stiffness_Matrices(X4);
G4:=k4*Local_Global(K4,N,p4a,p4b);
K5:=Stiffness_Matrices(X5);
G5:=k5*Local_Global(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 Trusses_HW;
Grafik Reaction Process
Grafik Diplacement
Transformasi Matriks
function Stiffness_Matrices
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_Matrices;
Global Element Matrice
function Local_Global
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 Local_Global;
Reaction Matrice Equation
function Reaction_Trusses
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 Reaction_Trusses;
Gauss Jordan
function Gauss_Jordan
input Integer N;
input Real A[N,N];
input Real B[N];
output Real X[N];
Real float_error = 10e-10;
algorithm
X:=Modelica.Math.Matrices.solve(A,B);
for i in 1:N loop
if abs(X[i]) <= float_error then
X[i] := 0;
end if;
end for;
end Gauss_Jordan;
Metode Numerik Minggu ke-4
Quiz Flowchart dan class diagram
pada minggu ke-4 memahami mengenai flowchart berdasarkan coding yang dibuat josiah, berikut jawaban dari saya
Tugas Minggu ke-4
Pada minggu ke empat, kami perlu mengerjakan soal no.8 mengenai truss 3 Dimensi dengan menggunakan open modelica, berikut soal yang harus dikerjakan dan dipahami.
Pembuatan diagram class dan flowchart dari soal adalah sebagai berikut :
pertama kita bahas dengan mencari diketahui, dan menuliskan parameter yang ada dengan menghitung
kemudian menuliskan function yang terlibat dalam pengerjaan soal, pertama adalah function element matrices
Kemudian matriks untuk stiffness global
Setelah itu dapat kita jumlahkan matriks global, dan menentukan boundary dari matriks
Kemudian kita bisa memanggil fungsi Gaussjordan, dan menentukan Reaksi dengan fungsi reaction
setelah itu akan didapatkan hasil U(displacement) dan R(Reaction)
Berikut link video yang saya buat untuk menjelaskan mengenai proses coding atau pengerjaan soal no.8
Metode Numerik Minggu ke-6
sistem optimasi dalam sistem ada fluida cair sistem aliran darah, berupa udara yaitu sistem pernapasan. Yang ditampilkan pada grafik adalah suatu karakteristik dari sistem dan komponen. komponen penting dalam sistem perpipaan sistem fluida tidak hanya perpipaan tetapi ada mesin kerja (pompa) dan tenaga, ada valve, pipa belok. sistem fluida, aliran air dimasukan yang terdiri dari pompa, pipa, pipa belok (T,L) valve. Setiap komponen bertujuan sama yaitu mengalirkan air dari satu tempat ke tempat lain Sistem tersebut adalah pompa, dengan sistem pendukung, memberi tenaga pada pompa
yng melengkung adalah grafik efisiensi Break housepower sumbu datar adalah jumlah aliran yang diantarkan sumbu y adalah efisiensi dari pompa garis hijau adalah tenaga air yang keluar dari pompa seiring jumlah air yang dikeluarkan tekanan akan turun sementara breakhouse power akan naik. pada efisiensi, makin tinggi kapasitas maka efisiensi akan naik. Terdapat titik maksimum dan setelah itu efisiensi akan menurun. Terdapat suatu titik maks untuk efisiensi yang pada akhirnya akan menurun pada kondisi berpaa dan kapasitas berapa, sehingga mendapat efisiensi pompa yang maksimum. untuk efisiensi sistem, mempertimbangkan heatloss pada kondisi tertentu.
Pembahasan berikutnya mengenai metode Bracket Optimization Using Golden Ratio Method oleh bu Chandra. Jika ingin menyelesaikan suatu masalah dengan optimasi, harus paham terlebih dahulu mengenai materinya
- Menentukan dan mengetahui batasan titik awal terendah (xL) dan tertinggi (xH)
- Mendapatkan nilai x1 dan x2 dari golden ratio (d)
- Menentukan xL dan xH berdasarkan nilai batasan maksimum dan minimal baru
- Mendapatkan nilai x1 dan x2 baru
Jika dalam soal diketahui untuk menyelesaikan persamaan y=2sinx-x^2/10, dapat dimasukan ke dalam openmodelica, pertama membuat function dari persamaan tersebut yang nanti akan dipanggil nantinya
Setelah di cek dan tidak terjadi masalah, dapat dibuat model yang akan memanggil fungsi tersebut
Progress Tugas Besar (23-12-2020)
Tugas besar yang diberikan untuk kelas metnum 02 dan 03 adalah optimasi untuk rangka batang:
suatu rangka batang yang telah dibentuk seperti gambar diatas, dengan spesifikasi sebagai berikut:
Diharapkan dari soal tersebut dapat mendesain rangka batang dengan harga terjangkau dan optimal untuk fungsinya.
Faktor atau variabel bebasnya meliputi : Harga, Material yang digunakan, cross section Dilakukan dengan metode optimasi dan membentuk curve fitting pada variabel harga
Pada soal terlihat bahwa rangka memiliki beberapa hal yang diketahui diantaranya adalah gaya yang bekerja yaitu sebesar 1000N dan 2000N pada kedua sisi. Gaya tersebut kemudian diasumsikan bekerja pada node, jadi gaya tersebut terbagi menjadi 2, 1000:2=500N dan 2000:2=1000N. Rangka memiliki tinggi 0,6m, lebar 0,75m dan tinggi 1,8m untuk setiap lantai.
Hal yang perlu dilakukan adalah mencari material yang baik untuk rangka, dengan mempertimbangkan safety factor rangka agar dalam kondisi aman pada saat digunakan, dan memperhatikan efisiensi ekonomis dalam pembuatan rangka tersebut. Beberapa yang dilakukan diantaranya :
- Variasi yang dapat dilakukan adalah Material sama (digunakan SS304) dengan luas area berbeda dan luas area sama (0,00184 m) tetapi menggunakan jenis material yang berbeda (3 material).
- Mencari Harga dari SS304 dengan luas area berbeda (6 ukuran) dan mencari Harga 3 jenis material untuk area 0,00184 m
- Mensimulate untuk safety factor untuk kedua variasi
- Membuat suatu rasio harga total dengan safety factor
- Melakukan optimasi untuk mengetahui area dan material yang baik untuk rangka
Terima kasih kepada Josiah, bang Cristo, bang Fahmi dan teman-teman yang telah membentu berikut merupakan hasil Coding yang telah didiskusikan.
model Trusses_3D_TugasBesar_Safety
//define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield=215e6; //Yield Strength (Pa) parameter Real Area=0.000184; //Area L Profile (Dimension=0.025, Thickness=0,004)(m) parameter Real Elas=193e9; //Elasticity SS 304 (Pa) //define connection
parameter Integer C[:,2]=[1,5; 2,6; 3,7; 4,8; 5,6; //1st floor 6,7; //1st floor 7,8; //1st floor 5,8; //1st floor 5,9; 6,10; 7,11; 8,12; 9,10; //2nd floor 10,11;//2nd floor 11,12;//2nd floor 9,12; //2nd floor 9,13; 10,14; 11,15; 12,16; 13,14;//3rd floor 14,15;//3rd floor 15,16;//3rd floor 13,16];//3rd floor //define coordinates (please put orderly) parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1 -0.3,-0.375,0,1,1,1; //2 -0.3,0.375,0,1,1,1; //3 0.3,0.375,0,1,1,1; //4 0.3,-0.375,0.6,0,0,0; //5 -0.3,-0.375,0.6,0,0,0; //6 -0.3,0.375,0.6,0,0,0; //7 0.3,0.375,0.6,0,0,0; //8 0.3,-0.375,1.2,0,0,0; //9 -0.3,-0.375,1.2,0,0,0; //10 -0.3,0.375,1.2,0,0,0; //11 0.3,0.375,1.2,0,0,0; //12 0.3,-0.375,1.8,0,0,0; //13 -0.3,-0.375,1.8,0,0,0; //14 -0.3,0.375,1.8,0,0,0; //15 0.3,0.375,1.8,0,0,0]; //16 //define external force (please put orderly) parameter Real F[Points*3]={0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,-500, 0,0,-1000, 0,0,-1000, 0,0,-500}; //solution Real displacement[N], reaction[N]; Real check[3]; Real stress1[Trusses]; Real safety[Trusses]; Real dis[3]; Real Str[3]; protected parameter Integer N=3*Points; Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3]; Real err=10e-10, ers=10e-4; algorithm //Creating Global Matrix G:=id; for i in 1:Trusses loop for j in 1:3 loop q1[j]:=P[C[i,1],j]; q2[j]:=P[C[i,2],j]; end for; //Solving Matrix L:=Modelica.Math.Vectors.length(q2-q1); cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz; cy*cx,cy^2,cy*cz; cz*cx,cz*cy,cz^2]; //Transforming to global matrix g:=zeros(N,N); for m,n in 1:3 loop g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n]; g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n]; g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n]; g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n]; end for; G_star:=G+g; G:=G_star; end for; //Implementing boundary for x in 1:Points loop if P[x,4] <> 0 then for a in 1:Points*3 loop G[(x*3)-2,a]:=0; G[(x*3)-2,(x*3)-2]:=1; end for; end if; if P[x,5] <> 0 then for a in 1:Points*3 loop G[(x*3)-1,a]:=0; G[(x*3)-1,(x*3)-1]:=1; end for; end if; if P[x,6] <> 0 then for a in 1:Points*3 loop G[x*3,a]:=0; G[x*3,x*3]:=1; end for; end if; end for; //Solving displacement displacement:=Modelica.Math.Matrices.solve(G,F); //Solving reaction reaction:=(G_star*displacement)-F; //Eliminating float error for i in 1:N loop reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i]; displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i]; end for; //Checking Force check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); for i in 1:3 loop check[i] := if abs(check[i])<=ers then 0 else check[i]; end for; //Calculating stress in each truss for i in 1:Trusses loop for j in 1:3 loop q1[j]:=P[C[i,1],j]; q2[j]:=P[C[i,2],j]; dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]); end for; //Solving Matrix L:=Modelica.Math.Vectors.length(q2-q1); cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=(Elas/L)*[cx^2,cx*cy,cx*cz; cy*cx,cy^2,cy*cz; cz*cx,cz*cy,cz^2]; Str:=(X*dis); stress1[i]:=Modelica.Math.Vectors.length(Str); end for; //Safety factor for i in 1:Trusses loop if stress1[i]>0 then safety[i]:=Yield/stress1[i]; else safety[i]:=0; end if; end for; end Trusses_3D_TugasBesar_Safety;
Berikut adalah Data variasi untuk Material sama yaitu SS304, dan Area Factor yang sama adalah 0,00184.
Setelah dilakukan stimulate didapatkan hasil Safety factor, kemudian mencari Rasio dengan melakukan perbandingan Safety factor dengan total harga.
Kemudian, berdasarkan hasil data yang telah diperoleh, bisa mendapatkan Luas area dan material yang baik digunakan rangka yang akan dibuat dengan menggunakan optimasi dengan curve fitting dan golden bracket. Fungsi untuk Curve Fittingnya sebagai berikut
function CurveFitting 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 CurveFitting;
Optimasi golden ratio untuk data material tetap
class Opt_Golden_Section
//memasukan data pada xd,yd,xlo,xhi parameter Real xd[:]={0.000141,0.000144,0.000171,0.000184,0.000224,0.000231}; parameter Real yd[size(xd,1)]={829776,845155,985330,1053955,1269736,1308215}; parameter Real xlo=141e-6; parameter Real xhi=231e-6; parameter Integer N=10; // maximum iteration parameter Real es=0.0001; // maximum error
Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3]; Real xopt, fx; protected Real d, xl, xu, xint, R=(5^(1/2)-1)/2;
algorithm xl := xlo; xu := xhi; y := CurveFitting(xd,yd); for i in 1:N loop d:= R*(xu-xl); x1[i]:=xl+d; x2[i]:=xu-d; f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3]; f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3]; xint:=xu-xl; if f1[i]>f2[i] then xl:=x2[i]; xopt:=x1[i]; fx:=f1[i]; else xu:=x1[i]; xopt:=x2[i]; fx:=f2[i]; end if; ea[i]:=(1-R)*abs((xint)/xopt); if ea[i]<es then break; end if; end for; end Opt_Golden_Section;
Setelah dilakukan stimulate didapatkan hasil optimum pada material tetap
Maka dapat disimpulkan bahwa area optimum untuk material tetap adalah 0,000231 m2
Kemudian untuk Hasil pada Area tetap, didapatkan hasil optimum material
Pada hasilnya terlihat bahwa material maksimum yang digunakan adalah dengan elastisitas 197e9, yaitu material SS201