Metnum 03 - Muhammad Fairuz Daffa
Contents
Biodata
Nama: Muhammad Fairuz Daffa
NPM: 1806181716
Kelas: Metnum 03
Materi Sebelum UTS
Sebelum UTS, kelas metnum 03 diajar oleh Pak Engkos, sebelum uts saya sendiri belajar mengenai:
1. Turunan Numerik
Turunan numerik terbagi 3 yaitu:
1. Turunan Maju (Forward)
2. Turunan Mundur (Backward)
3. Turunan Pusat (Centered)
Dari ketiga metode turunan ini, metode turunan pusat atau centered memiliki kemungkinan error yang paling kecil.
2. Pencarian Akar - Akar Persamaan
Untuk mencari akar - akar persamaan dapat digunakan 2 cara cara yaitu:
1. Close method (Bracketing) : Terdiri dari graphical method, false position dan bisection
2. Open method : Terdiri dari newton raphson, secant, dan simple fix point
3. Interpolasi dan Regresi
Interpolasi adalah metode menghasilkan titik-titik data baru dalam suatu jangkauan dari suatu set diskret data-data yang diketahui.
Regresi adalah salah satu metode untuk menentukan hubungan sebab-akibat antara variabel dengan variabel lainnya.
Pertemuan tanggal 9 November 2020
Pada oertemuan ini Pak Dai menginstruksikan mahasiswa untuk mendownload software open modelica untuk pengaplikasian dari mata kuliah metode numerik, dan juga meminta kita untuk mempelajari software open modelica melalui video tutorial dari youtube, dan membuat video youtube berisikan kami mempelajari atau mengaplikasikan ilmu dari video tutorial yang sudah kita tonton.
Saya mempelajari software openmodelica dari tautan dibawah ini
https://youtu.be/Dw66ODbMS2A
Pertemuan Kedua, Tanggal 16 November 2020
Pada pertemuan ini, pak DAI mengevaluasi tugas kita satu per satu. Lalu sambil menunggu satu per satu di interview, pak DAI memberikan arahan untuk membuat program sederhana di software openmodelica.
Pertama pak DAI mengajarkan untuk membuat program untuk meenghitung penambahan sepuluh terhadap suatu angka (x+10).
Kedua pak DAI menginstruksikan untuk membuat program yang bertujuan untuk menghitung nilai rata - rata dari beberapa kumpulan data. Berikut adalah simulasi yang saya coba
Tugas Pertemuan 2
Pada tugas ini pak DAI menginstruksikan untuk membuat program yang bisa mensolve permasalahan aljabar simultan. Pada tugas ini saya membuat program untuk menyelesaikan persamaan matriks dengan metode gauss jordan.
1. Soal yang saya gunakan adalah sebagai berikut.
2. Saya menggunakan fitur function dan class untuk menyelesaikan persamaan gauss jordan diatas.
3. Pada function saya menggunakan formula sebagai berikut:
4. Untuk class saya menggunakan formula sebagai berikut:
5.Setelah itu saya lakukan pengecekan terhadap formula tersebut, didapat hasil sebagai berikut
6. Lalu setelah pengecekan berhasil, saya melakukan simulasi, lalu didapat hasil sebagai berikut
7. Hasil yang didapat adalah x1 = 1; x2 = 4; x3 = -2
Pertemuan 3: Senin, 23 November 2020
Pada pertemuan ini kita disuruh mensolve soal dari buku sebagai berikut:
Tugas 3
Pada tugas ini kita disuruh mensolve soal dibuku sebagai berikut:
Pada tugas ini kami diminta untuk menghitung defleksi pada setiap batang dan gaya reaksinya.
Pertama saya mencari deltaL atau displacement dari setiap batang menggunakan open modelica. Dengan coding sebagai berikut:
Lalu didapat hasil sebagai berikut:
Kedua saya mencari nilai U dengan rumus RG x U = F, jika di translate ke coding maka akan menjadi
Lalu didapat hasil sebagai berikut
Ketiga saya mencari R menggunakan openmodelica dengan rumus R = (K x U) - F, jika di translate ke coding maka akan menjadi sebagai berikut:
Lalu hasil yang saya dapat adalah sebagai berikut:
Pertemuan 4: Senin, 30 November 2020
Pada pertemuan ini pak DAI menjelaskan perbedaan antara statika struktur dan dinamika struktur.
QUIZ
Berikut adalah flowchart saya dalam mengerjakan soal
Nomor 1
Class
class no1Quiz
// DECLARATIONS
// Data for each member: [element #, node i, node j, theta, area, modulus, length]
// SI Units: [integer, integer, integer, degrees, meters^2, pascals, meters]
// Imperial Units: [integer, integer, integer, degrees, inches^2, lb/inches, inches]
parameter Real [:,7] member = [1, 1, 2, 0, 8, 1.9e6, 36;
2, 2, 3, 135, 8, 1.9e6, 50.9;
3, 3, 4, 0, 8, 1.9e6, 36;
4, 2, 4, 90, 8, 1.9e6, 36;
5, 2, 5, 45, 8, 1.9e6, 50.9;
6, 4, 5, 0, 8, 1.9e6, 36];
// External loads for each node: [node #, FX, FY]
parameter Real [:,3] node_load = [1, 0, 0;
2, 0, 0;
3, 0, 0;
4, 0, -500;
5, 0, -500];
// Vector for equivalent stiffness constant of each member
Real [size(member,1)] k;
// Array for Stiffness Matrix
Real [size(member,1),4,4] Ke;
equation
// Calculate stiffness constants for each member element
k = {(member[i,5] * member[i,6] / member[i,7]) for i in 1:size(member,1)};
// Find stiffness matrix for each element
Ke = stiffnesselement(member);
end no1Quiz; |
Matriks Elemen
function stiffnesselement
input Real [:,7] beam_mat;
output Real [size(beam_mat,1),4,4] Ke_mat;
protected
Real theta;
Real [3] StiffTrig;
Real [4,4] StiffTransformation;
Real [size(beam_mat,1)] k_vec;
Real float_error = 10e-10;
algorithm
k_vec := {(beam_mat[i,5] * beam_mat[i,6] / beam_mat[i,7]) for i in 1:size(beam_mat,1)};
// Finding stiffness matrix of each element member
for i in 1:size(beam_mat,1) loop
// Clearing the matrices
StiffTrig := zeros(3);
StiffTransformation := zeros(4,4);
// Converting degrees to radians
theta := Modelica.SIunits.Conversions.from_deg(beam_mat[i,4]);
// {cos^2, sin^2, sincos}
StiffTrig := {(Modelica.Math.cos(theta))^2,
(Modelica.Math.sin(theta))^2,
(Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
// Handle float error elements in StiffTrig
for t in 1:size(StiffTrig,1) loop
if abs(StiffTrig[t]) <= float_error then
StiffTrig[t] := 0;
end if;
end for;
// Construct stiffness transformation matrix
StiffTransformation := [ StiffTrig[1], StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
StiffTrig[3], StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
-1*StiffTrig[1], -1*StiffTrig[3], StiffTrig[1], StiffTrig[3];
-1*StiffTrig[3], -1*StiffTrig[2], StiffTrig[3], StiffTrig[2]];
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
for m in 1:4 loop
for n in 1:4 loop
Ke_mat[i,m,n] := k_vec[i] * StiffTransformation[m,n];
end for;
end for;
end for;
end stiffnesselement; |
Pertemuan 5: Senin, 7 Desember 2020
Pada pertemuan ini, pak DAI membahas tentang soal quiz yang telah diberikan. Teman saya, Ahmad Mohammad Fahmi menjelaskan tentang coding yang dia buat dari awal sampai akhir. Namun, coding dari Fahmi masih ada yang kurang, karena total gaya pada ketiga sumbu untuk soal nomor 8 masih belum sama dengan 0.
Pak DAI menginstruksikan kita untuk bertanya kepada fahmi terkait hal yang belum dimengerti. Lalu pak DAI memberikan soal lagi dan menginstruksikan untuk memakai coding dari fahmi untuk mengerjakan soal tersebut. Lalu kami semua mencoba mengerjakan. Lalu pak DAI menginstruksikan untuk memberikan feedback terhadap codingan yang dibuat fahmi, dan memperbaikinya jika bisa.
Tugas Besar
Asumsi yang digunakan untuk melakukan perhitungan ini antara lain:
Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.
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).
Metodologi
Untuk jenis material yang sama:
1. Mencari harga untuk 6 ukuran batang dengan material yang sama yaitu SS304.
2. Mengitung nilai safety factor pada 6 ukuran batang dengan coding awal.
3. Membuat rasio antara safety factor dengan harga total.
4. Membuat persamaan antara rasio (safe/harga) dengan area dengan metode curve fitting.
5. Melakukan optimasi menggunakan metode golden section.
Untuk area penampang yang sama:
1. Mencari harga untuk 4 jenis material dengan area penampang yang sama yaitu 171 mm^2.
2. Mengitung nilai safety factor pada 4 jenis batang dengan coding awal.
3. Membuat rasio antara safety factor dengan harga total.
4. Membuat persamaan antara rasio (safe/harga) dengan jenis material dengan metode curve fitting.
5. Melakukan optimasi menggunakan metode golden section.
Data yang Digunakan
Referensi data:
https://www.tokopedia.com/kingsteelid
https://wijayamakmur.com/siku/
Codingan
Mencari Safety Factors
model Trusses_3D_Tugas_Besar_Safety
//define initial variable
parameter Integer Points=size(P,1); //Number of Points
parameter Integer Trusses=size(C,1); //Number of Trusses
parameter Real Yield=170e9; //Yield Strength (Pa)
parameter Real Area=0.000171; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)
parameter Real Elas=193e9; //Elasticity SS 304 (Pa)
//define connection
parameter Integer C[:,2]=[1,5;
2,6;
3,7;
4,8;
5,6; //1st floor
6,7; //1st floor
7,8; //1st floor
5,8; //1st floor
5,9;
6,10;
7,11;
8,12;
9,10; //2nd floor
10,11;//2nd floor
11,12;//2nd floor
9,12; //2nd floor
9,13;
10,14;
11,15;
12,16;
13,14;//3rd floor
14,15;//3rd floor
15,16;//3rd floor
13,16];//3rd floor
//define coordinates (please put orderly)
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1
-0.3,-0.375,0,1,1,1; //2
-0.3,0.375,0,1,1,1; //3
0.3,0.375,0,1,1,1; //4
0.3,-0.375,0.6,0,0,0; //5
-0.3,-0.375,0.6,0,0,0; //6
-0.3,0.375,0.6,0,0,0; //7
0.3,0.375,0.6,0,0,0; //8
0.3,-0.375,1.2,0,0,0; //9
-0.3,-0.375,1.2,0,0,0; //10
-0.3,0.375,1.2,0,0,0; //11
0.3,0.375,1.2,0,0,0; //12
0.3,-0.375,1.8,0,0,0; //13
-0.3,-0.375,1.8,0,0,0; //14
-0.3,0.375,1.8,0,0,0; //15
0.3,0.375,1.8,0,0,0]; //16
//define external force (please put orderly)
parameter Real F[Points*3]={0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,-500,
0,0,-1000,
0,0,-1000,
0,0,-500};
//solution
Real displacement[N], reaction[N];
Real check[3];
Real stress1[Trusses];
Real safety[Trusses];
Real dis[3];
Real Str[3];
protected
parameter Integer N=3*Points;
Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3];
Real err=10e-10, ers=10e-4;
algorithm
//Creating Global Matrix
G:=id;
for i in 1:Trusses loop
for j in 1:3 loop
q1[j]:=P[C[i,1],j];
q2[j]:=P[C[i,2],j];
end for;
//Solving Matrix
L:=Modelica.Math.Vectors.length(q2-q1);
cx:=(q2[1]-q1[1])/L;
cy:=(q2[2]-q1[2])/L;
cz:=(q2[3]-q1[3])/L;
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;
cy*cx,cy^2,cy*cz;
cz*cx,cz*cy,cz^2];
//Transforming to global matrix
g:=zeros(N,N);
for m,n in 1:3 loop
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];
end for;
G_star:=G+g;
G:=G_star;
end for;
//Implementing boundary
for x in 1:Points loop
if P[x,4] <> 0 then
for a in 1:Points*3 loop
G[(x*3)-2,a]:=0;
G[(x*3)-2,(x*3)-2]:=1;
end for;
end if;
if P[x,5] <> 0 then
for a in 1:Points*3 loop
G[(x*3)-1,a]:=0;
G[(x*3)-1,(x*3)-1]:=1;
end for;
end if;
if P[x,6] <> 0 then
for a in 1:Points*3 loop
G[x*3,a]:=0;
G[x*3,x*3]:=1;
end for;
end if;
end for;
//Solving displacement
displacement:=Modelica.Math.Matrices.solve(G,F);
//Solving reaction
reaction:=(G_star*displacement)-F;
//Eliminating float error
for i in 1:N loop
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];
end for;
//Checking Force
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});
for i in 1:3 loop
check[i] := if abs(check[i])<=ers then 0 else check[i];
end for;
//Calculating stress in each truss
for i in 1:Trusses loop
for j in 1:3 loop
q1[j]:=P[C[i,1],j];
q2[j]:=P[C[i,2],j];
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);
end for;
//Solving Matrix
L:=Modelica.Math.Vectors.length(q2-q1);
cx:=(q2[1]-q1[1])/L;
cy:=(q2[2]-q1[2])/L;
cz:=(q2[3]-q1[3])/L;
X:=(Elas/L)*[cx^2,cx*cy,cx*cz;
cy*cx,cy^2,cy*cz;
cz*cx,cz*cy,cz^2];
Str:=(X*dis);
stress1[i]:=Modelica.Math.Vectors.length(Str);
end for;
//Safety factor
for i in 1:Trusses loop
if stress1[i]>0 then
safety[i]:=Yield/stress1[i];
else
safety[i]:=0;
end if;
end for;
end Trusses_3D_Tugas_Besar_Safety; |
Curve Fitting
function 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);
//Coe:=fill(2,size(Coe,1));
end Curve_Fitting; |
Golden Section
model Opt_Gold
parameter Real xd[:];
parameter Real yd[size(xd,1)];
parameter Real xlo=87e-6;
parameter Real xhi=504e-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 := 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 Opt_Gold; |
Hasil
Berikut adalah tabel lengkap dari data yang didapat dari internet:
Berikut adalah hasil yang saya dapat dari codingan diatas.