http://air.eng.ui.ac.id/api.php?action=feedcontributions&user=Musyafi+Albar&feedformat=atomccitonlinewiki - User contributions [en]2024-03-29T14:34:02ZUser contributionsMediaWiki 1.30.0http://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=56545Musyafi Albar2021-01-15T05:29:38Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggunaan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y<br />
<br />
====Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor====<br />
model Trusses3DTugasBesar<br />
//define initial variable<br />
parameter Integer Points=size(P,1); //Number of Points<br />
parameter Integer Trusses=size(C,1); //Number of Trusses<br />
parameter Real Yield=292e6; //Yield Strength (Pa)<br />
parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)<br />
parameter Real Elas=197e9; //Elasticity SS 201 (Pa)<br />
//define connection<br />
parameter Integer C[:,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1<br />
-0.3,-0.375,0,1,1,1; //2<br />
-0.3,0.375,0,1,1,1; //3<br />
0.3,0.375,0,1,1,1; //4<br />
<br />
0.3,-0.375,0.6,0,0,0; //5<br />
-0.3,-0.375,0.6,0,0,0; //6<br />
-0.3,0.375,0.6,0,0,0; //7<br />
0.3,0.375,0.6,0,0,0; //8<br />
<br />
0.3,-0.375,1.2,0,0,0; //9<br />
-0.3,-0.375,1.2,0,0,0; //10 <br />
-0.3,0.375,1.2,0,0,0; //11<br />
0.3,0.375,1.2,0,0,0; //12<br />
<br />
0.3,-0.375,1.8,0,0,0; //13<br />
-0.3,-0.375,1.8,0,0,0; //14<br />
-0.3,0.375,1.8,0,0,0; //15<br />
0.3,0.375,1.8,0,0,0]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500}; <br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
Real stress1[Trusses];<br />
Real safety[Trusses];<br />
Real dis[3];<br />
Real Str[3]; <br />
protected<br />
parameter Integer N=3*Points;<br />
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];<br />
Real err=10e-10, ers=10e-4;<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for; <br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
//Implementing boundary<br />
for x in 1:Points loop<br />
if P[x,4] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-2,a]:=0;<br />
G[(x*3)-2,(x*3)-2]:=1;<br />
end for;<br />
end if;<br />
if P[x,5] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-1,a]:=0;<br />
G[(x*3)-1,(x*3)-1]:=1;<br />
end for;<br />
end if;<br />
if P[x,6] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[x*3,a]:=0;<br />
G[x*3,x*3]:=1;<br />
end for;<br />
end if;<br />
end for;<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for;<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); <br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
//Calculating stress in each truss<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);<br />
end for; <br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2]; <br />
Str:=(X*dis);<br />
stress1[i]:=Modelica.Math.Vectors.length(Str);<br />
end for;<br />
//Safety factor<br />
for i in 1:Trusses loop<br />
if stress1[i]>0 then<br />
safety[i]:=Yield/stress1[i];<br />
else<br />
safety[i]:=0;<br />
end if; <br />
end for;<br />
end Trusses3DTugasBesar;<br />
<br />
====Perhitungan Rasio Perbandingan Safety Factor dan Biaya====<br />
selanjutnya diperlukan pendataan guna mendapatkan banyak data yang diperlukan dalam proses curve fitting, yang nantinya akan digunakan untuk optimasi. data saya kumpulkan dengan melihat beberapa website referensi berikut:<br />
*https://wijayamakmur.com/siku<br />
*https://ptgaja.com/stainless-steel-201/<br />
*https://www.tokopedia.com/kairosmetal/product<br />
*https://www.tokopedia.com/kingsteelid<br />
dengan data yang didapatkan pada 4 website tersebut, saya berhasil mengumpulkan data sementara menjadi sebagai berikut<br />
[[File:ElasLock.PNG|800px|center|]]<br />
[[File:AreaLock.PNG|800px|center|]]<br />
terlihat dari gambar bahwa masih banyak sekali data yang kosong (tidak memiliki input. oleh karena itu, dibutuhkan curve fitting untuk mengisi kekosongan tersebut. fungsi dari dilakukannya curve fitting adalah untuk mengetahui nilai sebuah input yang tidak diketahui sebelumnya. berikut fungsi yang akan dipanggil untuk proses curve fitting<br />
<br />
function FuncCurveFitting<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coef[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coef:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end FuncCurveFitting;<br />
<br />
untuk menjalankan fungsi tersebut, tentunya kita memerlukan model untuk memanggil fungsi tersebut. berikut adalah model nya<br />
<br />
model CurveFitting<br />
parameter Real X[6]={0.000111, 0.000171, 0.000304, 0.000684, 0.000744, 0.000864};<br />
parameter Real Y[6]={179200, 239500, 429600, 963600, 1044800, 1428000};<br />
Real coef[3];<br />
<br />
equation<br />
coef=FuncCurveFitting(X,Y,2);<br />
end CurveFitting;<br />
<br />
model tersebut dapat digunakan untuk curve fitting berkali-kali. hanya perlu menyesuaikan nilai X dan Y yang diketahui saja. sebagai contoh, code diatas merupakan code curve fitting untuk mencari besar cost per 6 meter. setelah mendapatkan nilai dari hasil curve fitting, data yang kita miliki menjadi sebagai berikut:<br />
[[File:ElasLockFix.PNG|800px|center|]]<br />
[[File:AreaLockFix.PNG|800px|center|]]<br />
dengan demikian kita telah memiliki sejumlah data yang dapat diolah dalam proses optimasi<br />
<br />
== UAS ==<br />
<br />
[[File:268808.jpg]]<br />
[[File:268809.jpg]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:268808.jpg&diff=56544File:268808.jpg2021-01-15T05:29:14Z<p>Musyafi Albar: </p>
<hr />
<div></div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:268809.jpg&diff=56543File:268809.jpg2021-01-15T05:28:34Z<p>Musyafi Albar: </p>
<hr />
<div></div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=55195Musyafi Albar2021-01-13T11:10:02Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggunaan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y<br />
<br />
====Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor====<br />
model Trusses3DTugasBesar<br />
//define initial variable<br />
parameter Integer Points=size(P,1); //Number of Points<br />
parameter Integer Trusses=size(C,1); //Number of Trusses<br />
parameter Real Yield=292e6; //Yield Strength (Pa)<br />
parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)<br />
parameter Real Elas=197e9; //Elasticity SS 201 (Pa)<br />
//define connection<br />
parameter Integer C[:,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1<br />
-0.3,-0.375,0,1,1,1; //2<br />
-0.3,0.375,0,1,1,1; //3<br />
0.3,0.375,0,1,1,1; //4<br />
<br />
0.3,-0.375,0.6,0,0,0; //5<br />
-0.3,-0.375,0.6,0,0,0; //6<br />
-0.3,0.375,0.6,0,0,0; //7<br />
0.3,0.375,0.6,0,0,0; //8<br />
<br />
0.3,-0.375,1.2,0,0,0; //9<br />
-0.3,-0.375,1.2,0,0,0; //10 <br />
-0.3,0.375,1.2,0,0,0; //11<br />
0.3,0.375,1.2,0,0,0; //12<br />
<br />
0.3,-0.375,1.8,0,0,0; //13<br />
-0.3,-0.375,1.8,0,0,0; //14<br />
-0.3,0.375,1.8,0,0,0; //15<br />
0.3,0.375,1.8,0,0,0]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500}; <br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
Real stress1[Trusses];<br />
Real safety[Trusses];<br />
Real dis[3];<br />
Real Str[3]; <br />
protected<br />
parameter Integer N=3*Points;<br />
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];<br />
Real err=10e-10, ers=10e-4;<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for; <br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
//Implementing boundary<br />
for x in 1:Points loop<br />
if P[x,4] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-2,a]:=0;<br />
G[(x*3)-2,(x*3)-2]:=1;<br />
end for;<br />
end if;<br />
if P[x,5] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-1,a]:=0;<br />
G[(x*3)-1,(x*3)-1]:=1;<br />
end for;<br />
end if;<br />
if P[x,6] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[x*3,a]:=0;<br />
G[x*3,x*3]:=1;<br />
end for;<br />
end if;<br />
end for;<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for;<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); <br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
//Calculating stress in each truss<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);<br />
end for; <br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2]; <br />
Str:=(X*dis);<br />
stress1[i]:=Modelica.Math.Vectors.length(Str);<br />
end for;<br />
//Safety factor<br />
for i in 1:Trusses loop<br />
if stress1[i]>0 then<br />
safety[i]:=Yield/stress1[i];<br />
else<br />
safety[i]:=0;<br />
end if; <br />
end for;<br />
end Trusses3DTugasBesar;<br />
<br />
====Perhitungan Rasio Perbandingan Safety Factor dan Biaya====<br />
selanjutnya diperlukan pendataan guna mendapatkan banyak data yang diperlukan dalam proses curve fitting, yang nantinya akan digunakan untuk optimasi. data saya kumpulkan dengan melihat beberapa website referensi berikut:<br />
*https://wijayamakmur.com/siku<br />
*https://ptgaja.com/stainless-steel-201/<br />
*https://www.tokopedia.com/kairosmetal/product<br />
*https://www.tokopedia.com/kingsteelid<br />
dengan data yang didapatkan pada 4 website tersebut, saya berhasil mengumpulkan data sementara menjadi sebagai berikut<br />
[[File:ElasLock.PNG|800px|center|]]<br />
[[File:AreaLock.PNG|800px|center|]]<br />
terlihat dari gambar bahwa masih banyak sekali data yang kosong (tidak memiliki input. oleh karena itu, dibutuhkan curve fitting untuk mengisi kekosongan tersebut. fungsi dari dilakukannya curve fitting adalah untuk mengetahui nilai sebuah input yang tidak diketahui sebelumnya. berikut fungsi yang akan dipanggil untuk proses curve fitting<br />
<br />
function FuncCurveFitting<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coef[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coef:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end FuncCurveFitting;<br />
<br />
untuk menjalankan fungsi tersebut, tentunya kita memerlukan model untuk memanggil fungsi tersebut. berikut adalah model nya<br />
<br />
model CurveFitting<br />
parameter Real X[6]={0.000111, 0.000171, 0.000304, 0.000684, 0.000744, 0.000864};<br />
parameter Real Y[6]={179200, 239500, 429600, 963600, 1044800, 1428000};<br />
Real coef[3];<br />
<br />
equation<br />
coef=FuncCurveFitting(X,Y,2);<br />
end CurveFitting;<br />
<br />
model tersebut dapat digunakan untuk curve fitting berkali-kali. hanya perlu menyesuaikan nilai X dan Y yang diketahui saja. sebagai contoh, code diatas merupakan code curve fitting untuk mencari besar cost per 6 meter. setelah mendapatkan nilai dari hasil curve fitting, data yang kita miliki menjadi sebagai berikut:<br />
[[File:ElasLockFix.PNG|800px|center|]]<br />
[[File:AreaLockFix.PNG|800px|center|]]<br />
dengan demikian kita telah memiliki sejumlah data yang dapat diolah dalam proses optimasi<br />
<br />
== UAS ==</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=54552Musyafi Albar2021-01-10T14:11:55Z<p>Musyafi Albar: /* Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggunaan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y<br />
<br />
====Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor====<br />
model Trusses3DTugasBesar<br />
//define initial variable<br />
parameter Integer Points=size(P,1); //Number of Points<br />
parameter Integer Trusses=size(C,1); //Number of Trusses<br />
parameter Real Yield=292e6; //Yield Strength (Pa)<br />
parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)<br />
parameter Real Elas=197e9; //Elasticity SS 201 (Pa)<br />
//define connection<br />
parameter Integer C[:,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1<br />
-0.3,-0.375,0,1,1,1; //2<br />
-0.3,0.375,0,1,1,1; //3<br />
0.3,0.375,0,1,1,1; //4<br />
<br />
0.3,-0.375,0.6,0,0,0; //5<br />
-0.3,-0.375,0.6,0,0,0; //6<br />
-0.3,0.375,0.6,0,0,0; //7<br />
0.3,0.375,0.6,0,0,0; //8<br />
<br />
0.3,-0.375,1.2,0,0,0; //9<br />
-0.3,-0.375,1.2,0,0,0; //10 <br />
-0.3,0.375,1.2,0,0,0; //11<br />
0.3,0.375,1.2,0,0,0; //12<br />
<br />
0.3,-0.375,1.8,0,0,0; //13<br />
-0.3,-0.375,1.8,0,0,0; //14<br />
-0.3,0.375,1.8,0,0,0; //15<br />
0.3,0.375,1.8,0,0,0]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500}; <br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
Real stress1[Trusses];<br />
Real safety[Trusses];<br />
Real dis[3];<br />
Real Str[3]; <br />
protected<br />
parameter Integer N=3*Points;<br />
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];<br />
Real err=10e-10, ers=10e-4;<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for; <br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
//Implementing boundary<br />
for x in 1:Points loop<br />
if P[x,4] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-2,a]:=0;<br />
G[(x*3)-2,(x*3)-2]:=1;<br />
end for;<br />
end if;<br />
if P[x,5] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-1,a]:=0;<br />
G[(x*3)-1,(x*3)-1]:=1;<br />
end for;<br />
end if;<br />
if P[x,6] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[x*3,a]:=0;<br />
G[x*3,x*3]:=1;<br />
end for;<br />
end if;<br />
end for;<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for;<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); <br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
//Calculating stress in each truss<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);<br />
end for; <br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2]; <br />
Str:=(X*dis);<br />
stress1[i]:=Modelica.Math.Vectors.length(Str);<br />
end for;<br />
//Safety factor<br />
for i in 1:Trusses loop<br />
if stress1[i]>0 then<br />
safety[i]:=Yield/stress1[i];<br />
else<br />
safety[i]:=0;<br />
end if; <br />
end for;<br />
end Trusses3DTugasBesar;<br />
<br />
====Perhitungan Rasio Perbandingan Safety Factor dan Biaya====<br />
selanjutnya diperlukan pendataan guna mendapatkan banyak data yang diperlukan dalam proses curve fitting, yang nantinya akan digunakan untuk optimasi. data saya kumpulkan dengan melihat beberapa website referensi berikut:<br />
*https://wijayamakmur.com/siku<br />
*https://ptgaja.com/stainless-steel-201/<br />
*https://www.tokopedia.com/kairosmetal/product<br />
*https://www.tokopedia.com/kingsteelid<br />
dengan data yang didapatkan pada 4 website tersebut, saya berhasil mengumpulkan data sementara menjadi sebagai berikut<br />
[[File:ElasLock.PNG|800px|center|]]<br />
[[File:AreaLock.PNG|800px|center|]]<br />
terlihat dari gambar bahwa masih banyak sekali data yang kosong (tidak memiliki input. oleh karena itu, dibutuhkan curve fitting untuk mengisi kekosongan tersebut. fungsi dari dilakukannya curve fitting adalah untuk mengetahui nilai sebuah input yang tidak diketahui sebelumnya. berikut fungsi yang akan dipanggil untuk proses curve fitting<br />
<br />
function FuncCurveFitting<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coef[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coef:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end FuncCurveFitting;<br />
<br />
untuk menjalankan fungsi tersebut, tentunya kita memerlukan model untuk memanggil fungsi tersebut. berikut adalah model nya<br />
<br />
model CurveFitting<br />
parameter Real X[6]={0.000111, 0.000171, 0.000304, 0.000684, 0.000744, 0.000864};<br />
parameter Real Y[6]={179200, 239500, 429600, 963600, 1044800, 1428000};<br />
Real coef[3];<br />
<br />
equation<br />
coef=FuncCurveFitting(X,Y,2);<br />
end CurveFitting;<br />
<br />
model tersebut dapat digunakan untuk curve fitting berkali-kali. hanya perlu menyesuaikan nilai X dan Y yang diketahui saja. sebagai contoh, code diatas merupakan code curve fitting untuk mencari besar cost per 6 meter. setelah mendapatkan nilai dari hasil curve fitting, data yang kita miliki menjadi sebagai berikut:<br />
[[File:ElasLockFix.PNG|800px|center|]]<br />
[[File:AreaLockFix.PNG|800px|center|]]<br />
dengan demikian kita telah memiliki sejumlah data yang dapat diolah dalam proses optimasi</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=54551Musyafi Albar2021-01-10T14:09:33Z<p>Musyafi Albar: /* Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggunaan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y<br />
<br />
====Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor====<br />
model Trusses3DTugasBesar<br />
//define initial variable<br />
parameter Integer Points=size(P,1); //Number of Points<br />
parameter Integer Trusses=size(C,1); //Number of Trusses<br />
parameter Real Yield=292e6; //Yield Strength (Pa)<br />
parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)<br />
parameter Real Elas=197e9; //Elasticity SS 201 (Pa)<br />
//define connection<br />
parameter Integer C[:,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1<br />
-0.3,-0.375,0,1,1,1; //2<br />
-0.3,0.375,0,1,1,1; //3<br />
0.3,0.375,0,1,1,1; //4<br />
<br />
0.3,-0.375,0.6,0,0,0; //5<br />
-0.3,-0.375,0.6,0,0,0; //6<br />
-0.3,0.375,0.6,0,0,0; //7<br />
0.3,0.375,0.6,0,0,0; //8<br />
<br />
0.3,-0.375,1.2,0,0,0; //9<br />
-0.3,-0.375,1.2,0,0,0; //10 <br />
-0.3,0.375,1.2,0,0,0; //11<br />
0.3,0.375,1.2,0,0,0; //12<br />
<br />
0.3,-0.375,1.8,0,0,0; //13<br />
-0.3,-0.375,1.8,0,0,0; //14<br />
-0.3,0.375,1.8,0,0,0; //15<br />
0.3,0.375,1.8,0,0,0]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500}; <br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
Real stress1[Trusses];<br />
Real safety[Trusses];<br />
Real dis[3];<br />
Real Str[3];<br />
<br />
protected<br />
parameter Integer N=3*Points;<br />
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];<br />
Real err=10e-10, ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for x in 1:Points loop<br />
if P[x,4] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-2,a]:=0;<br />
G[(x*3)-2,(x*3)-2]:=1;<br />
end for;<br />
end if;<br />
if P[x,5] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-1,a]:=0;<br />
G[(x*3)-1,(x*3)-1]:=1;<br />
end for;<br />
end if;<br />
if P[x,6] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[x*3,a]:=0;<br />
G[x*3,x*3]:=1;<br />
end for;<br />
end if;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for;<br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
//Calculating stress in each truss<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
Str:=(X*dis);<br />
stress1[i]:=Modelica.Math.Vectors.length(Str);<br />
end for;<br />
<br />
//Safety factor<br />
for i in 1:Trusses loop<br />
if stress1[i]>0 then<br />
safety[i]:=Yield/stress1[i];<br />
else<br />
safety[i]:=0;<br />
end if; <br />
end for;<br />
<br />
end Trusses3DTugasBesar;</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=54550Musyafi Albar2021-01-10T14:08:42Z<p>Musyafi Albar: /* Tugas Minggu Enam (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggunaan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y<br />
<br />
====Perhitungan Displacement, Reaction Force, Stress, dan Safety Factor====<br />
model Trusses3DTugasBesar<br />
//define initial variable<br />
parameter Integer Points=size(P,1); //Number of Points<br />
parameter Integer Trusses=size(C,1); //Number of Trusses<br />
parameter Real Yield=292e6; //Yield Strength (Pa)<br />
parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)<br />
parameter Real Elas=197e9; //Elasticity SS 201 (Pa)<br />
//define connection<br />
parameter Integer C[:,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1; //1<br />
-0.3,-0.375,0,1,1,1; //2<br />
-0.3,0.375,0,1,1,1; //3<br />
0.3,0.375,0,1,1,1; //4<br />
<br />
0.3,-0.375,0.6,0,0,0; //5<br />
-0.3,-0.375,0.6,0,0,0; //6<br />
-0.3,0.375,0.6,0,0,0; //7<br />
0.3,0.375,0.6,0,0,0; //8<br />
<br />
0.3,-0.375,1.2,0,0,0; //9<br />
-0.3,-0.375,1.2,0,0,0; //10 <br />
-0.3,0.375,1.2,0,0,0; //11<br />
0.3,0.375,1.2,0,0,0; //12<br />
<br />
0.3,-0.375,1.8,0,0,0; //13<br />
-0.3,-0.375,1.8,0,0,0; //14<br />
-0.3,0.375,1.8,0,0,0; //15<br />
0.3,0.375,1.8,0,0,0]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500}; <br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
Real stress1[Trusses];<br />
Real safety[Trusses];<br />
Real dis[3];<br />
Real Str[3];<br />
<br />
protected<br />
parameter Integer N=3*Points;<br />
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];<br />
Real err=10e-10, ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for x in 1:Points loop<br />
if P[x,4] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-2,a]:=0;<br />
G[(x*3)-2,(x*3)-2]:=1;<br />
end for;<br />
end if;<br />
if P[x,5] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[(x*3)-1,a]:=0;<br />
G[(x*3)-1,(x*3)-1]:=1;<br />
end for;<br />
end if;<br />
if P[x,6] <> 0 then<br />
for a in 1:Points*3 loop<br />
G[x*3,a]:=0;<br />
G[x*3,x*3]:=1;<br />
end for;<br />
end if;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for;<br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
//Calculating stress in each truss<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
Str:=(X*dis);<br />
stress1[i]:=Modelica.Math.Vectors.length(Str);<br />
end for;<br />
<br />
//Safety factor<br />
for i in 1:Trusses loop<br />
if stress1[i]>0 then<br />
safety[i]:=Yield/stress1[i];<br />
else<br />
safety[i]:=0;<br />
end if; <br />
end for;<br />
<br />
end Trusses3DTugasBesar;</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53733Musyafi Albar2021-01-06T10:32:28Z<p>Musyafi Albar: /* Pembahasan */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggunaan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53724Musyafi Albar2021-01-06T10:28:05Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu Enam (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53640Musyafi Albar2021-01-06T09:53:14Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*B Material (Elastisitas properti)<br />
*C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*D Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53521Musyafi Albar2021-01-06T09:26:06Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
B Material (Elastisitas properti)<br />
C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
D Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53498Musyafi Albar2021-01-06T09:18:34Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
B Material (Elastisitas properti)<br />
C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
D Defleksi sebagai Y<br />
<br />
Prosedur<br />
1. Menentukan Jarak Node (asumsi)<br />
2. Batasan Displacement (asumsi)<br />
3. Optimisasi E dan A (referensi)<br />
4. Pilih E/A untuk jadi patokan minimum<br />
<br />
~. Batasan E&A, cari harga rata2 (referensi)</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53495Musyafi Albar2021-01-06T09:16:51Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
A Harga material di dapat dari nilai optimum defleksi dan cross section<br />
B Material (Elastisitas properti)<br />
C Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
D Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53483Musyafi Albar2021-01-06T09:13:16Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53284Musyafi Albar2021-01-06T08:12:09Z<p>Musyafi Albar: /* Tugas Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram dan flowchart<br />
<br />
[[File:264969.jpg]]<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:264969.jpg&diff=53281File:264969.jpg2021-01-06T08:11:35Z<p>Musyafi Albar: </p>
<hr />
<div></div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53212Musyafi Albar2021-01-06T07:43:40Z<p>Musyafi Albar: /* Tugas Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
Penyelesaikan permasalahan truss 3D dengan membuat class diagram, flowchart, dan penyelesaiannya pada Open Modelica.<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
class diagram<br />
<br />
flowchart<br />
<br />
Open Modelica<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53184Musyafi Albar2021-01-06T07:37:01Z<p>Musyafi Albar: /* Tugas Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
[[File:1223.PNG]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53180Musyafi Albar2021-01-06T07:35:59Z<p>Musyafi Albar: /* Tugas Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
<br />
1223.PNG<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:1223.PNG&diff=53176File:1223.PNG2021-01-06T07:34:44Z<p>Musyafi Albar: </p>
<hr />
<div></div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53165Musyafi Albar2021-01-06T07:30:34Z<p>Musyafi Albar: /* Tugas Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
Selanjutnya membuat function kekakuan dalam class menggunakan rumus k=AE/L di setiap batang <br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
Setelah itu matriks 6x6 K tersebut akan dibuat menjadi matriks 12x12 sesuai dengan jumlah batang (3) * jumlah node (4). Ini disebut matriks kekakuan global (Kg).<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
Selanjutnya, matriks kekakuan global setiap batang dijumlahkan untuk mendapat matriks kekakuan global total(KgTot)<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
Kemudian boundary diterapkan pada matriks kekakuan global total. Pada kasus ini, node 2,3, dan 4 merupakan pinned. Sehingga U2X=U2Y=U2Z=U3X=U3Y=U3Z=U4X=U4Y=U4Z=0.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
Untuk mencari nilai displacement(U) lainnya menggunakan eliminasi Gauss Jordan dengan persamaan XU=F. Dengan X adalah matriks K global yang sudah menerapkan boundary(KgB) dan F adalah eksternal load.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
Sedangkan untuk mencari reaction menggunakan persamaan R=Kg*U - F.<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
Function-function tersebut akan dipanggil ke dalam sebuah class untuk penyelesaiannya. Pada class akan diinput data-data yang telah docari pada langkah pertama. Dan didapat<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=53156Musyafi Albar2021-01-06T07:20:26Z<p>Musyafi Albar: /* Tugas Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
langkah pertama membuat class berisi data yang diketahui dan perhitungan-perhitungannya<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=50660Musyafi Albar2020-12-23T10:29:18Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas4_d29<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas4_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
''Trusses Modelling''<br />
<br />
model Trusses_3D_Tugas_Besar_Simplified2<br />
<br />
//define initial variable<br />
parameter Integer Points=16; //Number of Points<br />
parameter Integer Trusses=24; //Number of Trusses<br />
parameter Real Area=3777777.778; //Area<br />
parameter Real Elas=1; //Elasticity (equals to one in order to determine the displacement limit)<br />
<br />
//define connection<br />
parameter Integer C[Trusses,2]=[1,5; <br />
2,6;<br />
3,7;<br />
4,8;<br />
5,6; //1st floor<br />
6,7; //1st floor<br />
7,8; //1st floor<br />
5,8; //1st floor<br />
5,9;<br />
6,10;<br />
7,11;<br />
8,12;<br />
9,10; //2nd floor<br />
10,11;//2nd floor <br />
11,12;//2nd floor<br />
9,12; //2nd floor<br />
9,13;<br />
10,14;<br />
11,15;<br />
12,16;<br />
13,14;//3rd floor<br />
14,15;//3rd floor<br />
15,16;//3rd floor<br />
13,16];//3rd floor<br />
<br />
//define coordinates (please put orderly)<br />
parameter Real P[Points,3]=[0.3,-0.375,0; //1<br />
-0.3,-0.375,0; //2<br />
-0.3,0.375,0; //3<br />
0.3,0.375,0; //4<br />
0.3,-0.375,0.6; //5<br />
-0.3,-0.375,0.6; //6<br />
-0.3,0.375,0.6; //7<br />
0.3,0.375,0.6; //8<br />
0.3,-0.375,1.2; //9<br />
-0.3,-0.375,1.2; //10 <br />
-0.3,0.375,1.2; //11<br />
0.3,0.375,1.2; //12<br />
0.3,-0.375,1.8; //13<br />
-0.3,-0.375,1.8; //14<br />
-0.3,0.375,1.8; //15<br />
0.3,0.375,1.8]; //16<br />
<br />
//define external force (please put orderly)<br />
parameter Real F[Points*3]={0,0,0,<br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,0, <br />
0,0,-500, <br />
0,0,-1000, <br />
0,0,-1000, <br />
0,0,-500};<br />
<br />
//define boundary<br />
parameter Integer b[:]={1,2,3,4};<br />
<br />
//solution<br />
Real displacement[N], reaction[N];<br />
Real check[3];<br />
<br />
parameter Integer N=3*Points;<br />
Integer boundary[3*size(b,1)]=cat(1,(3*b).-2,(3*b).-1,3*b);<br />
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];<br />
Real err=10e-10;<br />
Real ers=10e-4;<br />
<br />
algorithm<br />
//Creating Global Matrix<br />
G:=id;<br />
for i in 1:Trusses loop<br />
for j in 1:3 loop<br />
q1[j]:=P[C[i,1],j];<br />
q2[j]:=P[C[i,2],j];<br />
end for;<br />
<br />
//Solving Matrix<br />
L:=Modelica.Math.Vectors.length(q2-q1);<br />
cx:=(q2[1]-q1[1])/L;<br />
cy:=(q2[2]-q1[2])/L;<br />
cz:=(q2[3]-q1[3])/L; <br />
X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;<br />
cy*cx,cy^2,cy*cz;<br />
cz*cx,cz*cy,cz^2];<br />
<br />
//Transforming to global matrix<br />
g:=zeros(N,N); <br />
for m,n in 1:3 loop<br />
g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];<br />
g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];<br />
g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];<br />
end for; <br />
<br />
G_star:=G+g;<br />
G:=G_star;<br />
end for;<br />
<br />
//Implementing boundary<br />
for i in boundary loop<br />
for j in 1:N loop<br />
G[i,j]:=id[i,j];<br />
end for;<br />
end for;<br />
<br />
//Solving displacement<br />
displacement:=Modelica.Math.Matrices.solve(G,F);<br />
<br />
//Solving reaction<br />
reaction:=(G_star*displacement)-F;<br />
<br />
//Eliminating float error<br />
for i in 1:N loop<br />
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];<br />
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];<br />
end for; <br />
<br />
//Checking Force<br />
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});<br />
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});<br />
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});<br />
<br />
for i in 1:3 loop<br />
check[i] := if abs(check[i])<=ers then 0 else check[i];<br />
end for;<br />
<br />
end Trusses_3D_Tugas_Besar_Simplified2;<br />
<br />
| style='border-style: solid solid none none;' | <br />
''Curve Fitting Function''<br />
<br />
function Curve_Fitting<br />
<br />
input Real X[:];<br />
input Real Y[size(X,1)];<br />
input Integer order=2;<br />
output Real Coe[order+1];<br />
<br />
protected<br />
Real Z[size(X,1),order+1];<br />
Real ZTr[order+1,size(X,1)];<br />
Real A[order+1,order+1];<br />
Real B[order+1];<br />
<br />
algorithm<br />
<br />
for i in 1:size(X,1) loop<br />
for j in 1:(order+1) loop<br />
Z[i,j]:=X[i]^(order+1-j);<br />
end for;<br />
end for;<br />
ZTr:=transpose(Z);<br />
<br />
A:=ZTr*Z;<br />
B:=ZTr*Y;<br />
Coe:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
end Curve_Fitting;<br />
|}</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=50658Musyafi Albar2020-12-23T10:25:58Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas4_d29<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas4_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=50650Musyafi Albar2020-12-23T09:57:51Z<p>Musyafi Albar: /* Tugas Minggu ketiga (16 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas4_d29<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas4_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
Tema : Aplikasi Metoda Numerik dalam Optimasi Desain Struktur Rangka Sederhana<br />
<br />
'''Sinopsis Tugas Besar'''<br />
<br />
Dalam tugas besar ini kami diminta untuk mendesain rangka sesuai yang tertera dibawah dengan menggunakan rangka yang optimal dan cost yang minimum<br />
<br />
[[File:Soaltubesy.jpeg]]<br />
[[File:Soaltubes1.jpeg]]<br />
<br />
Adapun Hal yang Harus Diperhitungkan sebagai Plotting<br />
*a. Harga material di dapat dari nilai optimum defleksi dan cross section<br />
*b. Material (Elastisitas properti)<br />
*c. Area Cross Section Truss (L profile/truss siku), luas cross section sebagai X<br />
*d. Defleksi sebagai Y</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=50645Musyafi Albar2020-12-23T09:49:22Z<p>Musyafi Albar: /* Tugas Minggu ketiga (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu keempat (2 Desember 2020) ==<br />
<br />
[[File:No8 d29.jpeg|700px|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas4_d29<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas4_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
aplikasi metode numerik dalam kasus optimisasi</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=50644Musyafi Albar2020-12-23T09:48:09Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu ketiga (2 Desember 2020) ==<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Tugas4_d29<br />
parameter Real [:,9] inisiasi = [1, 1, 2, -0.8, 0, -0.6, 15e-4, 70e9, 2.5;<br />
2, 1, 3, -0.8, -0.6, 0, 15e-4, 70e9, 2.5;<br />
3, 1, 4, -0.8, 0, 0.6, 15e-4, 70e9, 2.5];<br />
parameter Integer [:,2] node = [1, 2;<br />
1, 3;<br />
1, 4];<br />
parameter Integer y = size(node,1);<br />
parameter Integer x = 3*(size(node_load,1));<br />
parameter Integer z = size(Boundary,1);<br />
parameter Integer [:] Boundary = {2,3,4};<br />
parameter Real [:,4] node_load = [1, 0, -5000, 0;<br />
2, 0, 0, 0;<br />
3, 0, 0, 0;<br />
4, 0, 0, 0];<br />
parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
Real [y] k;<br />
Real [y,6,6] Ke;<br />
Real [y,x,x] Kg;<br />
Real [x,x] KgTot;<br />
Real [x,x] KgB;<br />
Real [x] U;<br />
Real [x] R;<br />
<br />
equation<br />
k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};<br />
Ke = StiffnessMatrixElement(inisiasi);<br />
Kg = StiffnessMatrixGlobal(node, x, y, Ke);<br />
KgTot = SumStiffnessMatrixGlobal(x, y, Kg);<br />
KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);<br />
U = GaussJordan(x, KgB, load);<br />
R = ReactionForce(x, KgTot, U, load);<br />
<br />
end Tugas4_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixElement'''''<br />
<br />
function StiffnessMatrixElement<br />
<br />
input Real [:,9] inisiasi_mat;<br />
output Real [size(inisiasi_mat,1),6,6] Ke_mat;<br />
<br />
protected<br />
Real cos_x;<br />
Real cos_y;<br />
Real cos_z;<br />
Real [6] StiffTrig;<br />
Real [6,6] StiffTrans;<br />
Real [size(inisiasi_mat,1)] k_vec;<br />
<br />
algorithm<br />
k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) for i in 1:size(inisiasi_mat,1)};<br />
<br />
// Finding stiffness matrix of each element member<br />
for i in 1:size(inisiasi_mat,1) loop<br />
<br />
// Clearing the matrices<br />
StiffTrig := zeros(6);<br />
StiffTrans := zeros(6,6);<br />
<br />
// Converting degrees to radians<br />
cos_x := inisiasi_mat[i,4];<br />
cos_y := inisiasi_mat[i,5];<br />
cos_z := inisiasi_mat[i,6];<br />
<br />
// {cos^2, sin^2, sincos}<br />
StiffTrig := {(cos_x)^2,<br />
(cos_y)^2,<br />
(cos_z)^2,<br />
(cos_x*cos_y),<br />
(cos_x*cos_z),<br />
(cos_y*cos_z)};<br />
<br />
// Construct stiffness transformation matrix<br />
StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5];<br />
StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6];<br />
StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3];<br />
-1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5];<br />
-1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6];<br />
-1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]];<br />
<br />
// Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat<br />
for m in 1:6 loop<br />
for n in 1:6 loop<br />
Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];<br />
end for;<br />
end for;<br />
<br />
end for;<br />
end StiffnessMatrixElement;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function StiffnessMatrixGlobal'''''<br />
<br />
function StiffnessMatrixGlobal<br />
input Integer [:,2] n;<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,6,6] Ke_mat; <br />
output Real [y,x,x] Kg_mat;<br />
<br />
algorithm<br />
for i in 1:y loop<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
Kg_mat[i,a,b]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for i in 1:y loop<br />
Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2];<br />
Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5];<br />
Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4];<br />
<br />
Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2];<br />
Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2];<br />
Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2];<br />
Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1];<br />
<br />
Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5];<br />
Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5];<br />
Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5];<br />
Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4];<br />
end for;<br />
end StiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function SumStiffnessMatrixGlobal'''''<br />
<br />
function SumStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer y;<br />
input Real [y,x,x] Kg_mat;<br />
output Real [x,x] KgTot_mat;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);<br />
end for;<br />
end for;<br />
<br />
end SumStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function BoundaryStiffnessMatrixGlobal'''''<br />
<br />
function BoundaryStiffnessMatrixGlobal<br />
input Integer x;<br />
input Integer z;<br />
input Real [x,x] KgTot_met;<br />
input Integer[z] Boundary_met;<br />
output Real [x,x] KgB_met;<br />
<br />
algorithm<br />
for a in 1:x loop<br />
for b in 1:x loop<br />
KgB_met[a,b] := KgTot_met [a,b];<br />
end for;<br />
end for; <br />
<br />
for i in 1:x loop<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*(Boundary_met[a])-b,i]:=0;<br />
end for;<br />
end for;<br />
end for;<br />
<br />
for a in 1:z loop<br />
for b in 0:2 loop<br />
KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;<br />
end for;<br />
end for;<br />
<br />
end BoundaryStiffnessMatrixGlobal;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function GaussJordan'''''<br />
<br />
function GaussJordan<br />
input Integer x;<br />
input Real [x,x] KgB_met;<br />
input Real [x] load_met;<br />
output Real [x] U_met;<br />
<br />
protected<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);<br />
<br />
for i in 1:x loop<br />
if abs(U_met[i]) <= float_error then<br />
U_met[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end GaussJordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function ReactionForce'''''<br />
<br />
function ReactionForce<br />
input Integer x;<br />
input Real [x,x] KgTot_met;<br />
input Real [x] U_met;<br />
input Real [x] load_met;<br />
output Real [x] R_met;<br />
<br />
algorithm<br />
R_met := (KgTot_met*U_met)-load_met;<br />
end ReactionForce;<br />
|}<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
aplikasi metode numerik dalam kasus optimisasi</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=50642Musyafi Albar2020-12-23T09:42:41Z<p>Musyafi Albar: /* Tugas Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Class'''''<br />
<br />
class Trusses_Tugas3_d29<br />
<br />
parameter Integer N=8; //Global matrice = 2*points connected<br />
parameter Real A=0.001; //m^2<br />
parameter Real E=200e9; //Pa<br />
Real G[N,N]; //global<br />
Real Ginitial[N,N]; //global<br />
Real Sol[N]; //global displacement<br />
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};<br />
Real R[N]; //global reaction force<br />
Real SolMat[N,1];<br />
Real XMat[N,1];<br />
<br />
//boundary condition<br />
Integer b1=1;<br />
Integer b2=3;<br />
<br />
//truss 1<br />
parameter Real X1=0; //degree between trusses<br />
Real k1=A*E/1;<br />
Real K1[4,4]; //stiffness matrices<br />
Integer p1a=1;<br />
Integer p1b=2;<br />
Real G1[N,N];<br />
<br />
//truss 2<br />
parameter Real X2=0; //degree between trusses<br />
Real k2=A*E/1;<br />
Real K2[4,4]; //stiffness matrices<br />
Integer p2a=2;<br />
Integer p2b=3;<br />
Real G2[N,N];<br />
<br />
//truss 3<br />
parameter Real X3=90; //degree between trusses<br />
Real k3=A*E/1.25;<br />
Real K3[4,4]; //stiffness matrices<br />
Integer p3a=2;<br />
Integer p3b=4;<br />
Real G3[N,N];<br />
<br />
//truss 4<br />
parameter Real X4=90+38.6598; //degree between trusses<br />
Real k4=A*E/1.6;<br />
Real K4[4,4]; //stiffness matrices<br />
Integer p4a=1;<br />
Integer p4b=4;<br />
Real G4[N,N];<br />
<br />
//truss 5<br />
parameter Real X5=90-38.6598; //degree between trusses<br />
Real k5=A*E/1.6;<br />
Real K5[4,4]; //stiffness matrices<br />
Integer p5a=3;<br />
Integer p5b=4;<br />
Real G5[N,N];<br />
<br />
/*<br />
for each truss, ensure pXa is lower then pXb (X represents truss element number)<br />
*/<br />
<br />
algorithm<br />
<br />
//creating global matrice<br />
K1:=Stiffness_Matrices(X1);<br />
G1:=k1*Local_Global(K1,N,p1a,p1b);<br />
<br />
K2:=Stiffness_Matrices(X2);<br />
G2:=k2*Local_Global(K2,N,p2a,p2b);<br />
<br />
K3:=Stiffness_Matrices(X3);<br />
G3:=k3*Local_Global(K3,N,p3a,p3b);<br />
<br />
K4:=Stiffness_Matrices(X4);<br />
G4:=k4*Local_Global(K4,N,p4a,p4b);<br />
<br />
K5:=Stiffness_Matrices(X5);<br />
G5:=k5*Local_Global(K5,N,p5a,p5b);<br />
<br />
G:=G1+G2+G3+G4+G5;<br />
Ginitial:=G;<br />
<br />
//implementing boundary condition<br />
for i in 1:N loop<br />
G[2*b1-1,i]:=0;<br />
G[2*b1,i]:=0;<br />
G[2*b2-1,i]:=0;<br />
G[2*b2,i]:=0;<br />
end for;<br />
<br />
G[2*b1-1,2*b1-1]:=1;<br />
G[2*b1,2*b1]:=1;<br />
G[2*b2-1,2*b2-1]:=1;<br />
G[2*b2,2*b2]:=1;<br />
<br />
//solving displacement<br />
Sol:=Gauss_Jordan(N,G,X);<br />
<br />
//solving reaction force<br />
SolMat:=matrix(Sol);<br />
XMat:=matrix(X);<br />
R:=Reaction_Trusses(N,Ginitial,SolMat,XMat);<br />
<br />
end Trusses_Tugas3_d29;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Stiffness_Matrices'''''<br />
<br />
function Stiffness_Matrices<br />
<br />
input Real A;<br />
Real Y;<br />
output Real X[4,4];<br />
Real float_error = 10e-10;<br />
<br />
final constant Real pi=2*Modelica.Math.asin(1.0);<br />
<br />
algorithm<br />
<br />
Y:=A/180*pi;<br />
<br />
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);<br />
<br />
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;<br />
<br />
-(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);<br />
<br />
-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];<br />
<br />
for i in 1:4 loop<br />
for j in 1:4 loop<br />
if abs(X[i,j]) <= float_error then<br />
X[i,j] := 0;<br />
end if;<br />
end for;<br />
end for;<br />
<br />
end Stiffness_Matrices;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Gauss-Jordan'''''<br />
function Gauss_Jordan<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N];<br />
output Real X[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
<br />
for i in 1:N loop<br />
if abs(X[i]) <= float_error then<br />
X[i] := 0;<br />
end if;<br />
end for;<br />
<br />
end Gauss_Jordan;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Reaction_Trusses'''''<br />
function Reaction_Trusses<br />
<br />
input Integer N;<br />
input Real A[N,N];<br />
input Real B[N,1];<br />
input Real C[N,1];<br />
Real X[N,1];<br />
output Real Sol[N];<br />
Real float_error = 10e-10;<br />
<br />
algorithm<br />
X:=A*B-C;<br />
<br />
for i in 1:N loop<br />
if abs(X[i,1]) <= float_error then<br />
X[i,1] := 0;<br />
end if;<br />
end for;<br />
<br />
for i in 1:N loop<br />
Sol[i]:=X[i,1];<br />
end for;<br />
<br />
end Reaction_Trusses;<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
| style='border-style: none none solid solid;' | <br />
'''''Function Local_Global'''''<br />
function Local_Global<br />
<br />
input Real Y[4,4];<br />
input Integer B;<br />
input Integer p1;<br />
input Integer p2;<br />
output Real G[B,B];<br />
<br />
algorithm<br />
<br />
for i in 1:B loop<br />
for j in 1:B loop<br />
G[i,j]:=0;<br />
end for;<br />
end for;<br />
<br />
G[2*p1,2*p1]:=Y[2,2];<br />
G[2*p1-1,2*p1-1]:=Y[1,1];<br />
G[2*p1,2*p1-1]:=Y[2,1];<br />
G[2*p1-1,2*p1]:=Y[1,2];<br />
<br />
G[2*p2,2*p2]:=Y[4,4];<br />
G[2*p2-1,2*p2-1]:=Y[3,3];<br />
G[2*p2,2*p2-1]:=Y[4,3];<br />
G[2*p2-1,2*p2]:=Y[3,4];<br />
<br />
G[2*p2,2*p1]:=Y[4,2];<br />
G[2*p2-1,2*p1-1]:=Y[3,1];<br />
G[2*p2,2*p1-1]:=Y[4,1];<br />
G[2*p2-1,2*p1]:=Y[3,2];<br />
<br />
G[2*p1,2*p2]:=Y[2,4];<br />
G[2*p1-1,2*p2-1]:=Y[1,3];<br />
G[2*p1,2*p2-1]:=Y[2,3];<br />
G[2*p1-1,2*p2]:=Y[1,4];<br />
<br />
end Local_Global;<br />
|}<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
aplikasi metode numerik dalam kasus optimisasi</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=49842Musyafi Albar2020-12-16T09:12:53Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]<br />
<br />
== Tugas Minggu ketiga (16 Desember 2020) ==<br />
aplikasi metode numerik dalam kasus optimisasi</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45719Musyafi Albar2020-12-02T10:58:28Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45714Musyafi Albar2020-12-02T10:56:40Z<p>Musyafi Albar: /* Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564|400x400px.jpg]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45708Musyafi Albar2020-12-02T10:56:16Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.|400x400pxjpg]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45700Musyafi Albar2020-12-02T10:55:09Z<p>Musyafi Albar: /* Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==<br />
[[File:253564.jpg]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:253564.jpg&diff=45697File:253564.jpg2020-12-02T10:54:29Z<p>Musyafi Albar: </p>
<hr />
<div></div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45617Musyafi Albar2020-12-02T10:08:12Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Quiz class diagram dan flowchart Minggu keempat (2 Desember 2020) ==</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45437Musyafi Albar2020-12-02T08:22:21Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Catatan Minggu keempat (2 Desember 2020) ==</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45436Musyafi Albar2020-12-02T08:22:06Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]<br />
<br />
<br />
== Catatan Minggu ketiga (2 Desember 2020) ==</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45432Musyafi Albar2020-12-02T08:20:33Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
....<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45430Musyafi Albar2020-12-02T08:19:51Z<p>Musyafi Albar: /* Tugas Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
<br />
menyelesaikan permalasahan truss berikut:<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45427Musyafi Albar2020-12-02T08:18:34Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:21.PNG]]<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45424Musyafi Albar2020-12-02T08:18:05Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
....<br />
<br />
Penggunaan code dengan menyelesaikan <br />
<br />
[[File:File:21.PNG]]<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:21.PNG&diff=45419File:21.PNG2020-12-02T08:17:16Z<p>Musyafi Albar: </p>
<hr />
<div></div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45404Musyafi Albar2020-12-02T08:11:57Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
pseudocode dibuat kedalam bahasa Open Modelica<br />
<br />
function NaiveGauss<br />
input Real [3,3] A; <br />
input Real [3] B; <br />
output Real [3] x; <br />
protected<br />
Real [3,3] a;<br />
Real [3] b;<br />
Integer m = size(A,1); // jumlah kolom <br />
Integer n = size(A,2); // jumlah baris<br />
Real k = 1; <br />
Real i = 1; <br />
Real j = 1; <br />
Real factor = 1; <br />
Real sum = 1; <br />
<br />
algorithm<br />
a := A;<br />
b := B;<br />
// Forward Elimination<br />
for k in 1:(n-1) loop<br />
for i in (k+1):n loop<br />
factor := a[i,k] / a[k,k];<br />
for j in (k+1):n loop<br />
a[i,j] := a[i,j] - (factor * a[k,j]);<br />
end for;<br />
b[i] := b[i] - (factor * b[k]);<br />
end for;<br />
end for;<br />
// Back Substitution<br />
x[n] := b[n] / a[n,n];<br />
for i in (n-1):(-1) loop<br />
sum := b[i];<br />
for j in (i+1):n loop<br />
sum := sum - (a[i,j] * x[j]);<br />
end for;<br />
x[i] := sum / a[i,i];<br />
end for;<br />
<br />
end NaiveGauss;<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45387Musyafi Albar2020-12-02T08:06:23Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
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:<br />
<br />
[[File:1.PNG]]<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45358Musyafi Albar2020-12-02T07:59:06Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
[[File:1.PNG]]<br />
<br />
<br />
<br />
<br />
== Tugas Minggu ketiga (25 November 2020) ==<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45356Musyafi Albar2020-12-02T07:58:11Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
[[File:1.PNG]]<br />
<br />
[[File:Problem_3_tedi_veradino.jpeg|700px|thumb|center]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45350Musyafi Albar2020-12-02T07:56:29Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
[[File:1.PNG|100x100px]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45342Musyafi Albar2020-12-02T07:55:06Z<p>Musyafi Albar: </p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
[[File:1.PNG]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=Musyafi_Albar&diff=45320Musyafi Albar2020-12-02T07:50:40Z<p>Musyafi Albar: /* Catatan Minggu ketiga (25 November 2020) */</p>
<hr />
<div>{| class="wikitable" style="float:right; margin-left: 10px;"<br />
!colspan="2"|Biodata<br />
|-<br />
|colspan="2"|[[File:Mus.jpg]]<br />
|-<br />
|'''Nama'''<br />
|Musyafi Albar<br />
|-<br />
|'''NPM'''<br />
|1906379094<br />
|-<br />
|'''Email'''<br />
|musyafi.albar@ui.ac.id<br />
|-<br />
|'''Youtube'''<br />
|https://youtu.be/QTFApGHD76Y<br />
|-<br />
|colspan="2" style="text-align:center;width:200px;"|<br />
|}<br />
<br />
<br />
== Musyafi Albar ==<br />
<br />
Perkenalkan nama saya Musyafi Albar (NPM 1906379094) biasa dipanggil Mus. Saya Adalah mahasiswa Teknik Mesin angkatan 2019 dari Fakultas Teknik Universitas Indonesia. Saya memiliki ketertarikan kepada bidang mesin karena dirasa jurusan tersebut memiliki rana yang luas untuk dunia kerjanya. Pada Pelajaran metnum sebelumnya saya telah mempelajari tentang persamaan, istilah algoritma, kurva, regresi, differensial, parsial<br />
<br />
== Catatan Minggu Pertama (11 November 2020) ==<br />
<br />
===Tujuan Pembelajaran===<br />
*Memahami konsep dan prinsip dasar metode numerik<br />
*Dapat menerapkan pemahaman yang didapatkan dalam mata kuliah Metode Numerik<br />
*Mampu menerapkan pemahaman metode numerik dalam bidang keteknikan<br />
*Membentuk kita menjadi orang yang lebih beradab<br />
<br />
===Manfaat Belajar bagi Diri Saya Sendiri===<br />
Menurut saya, pembelajaran adalah suatu proses penambahan kualitas diri. Saya merasa dengan belajar kita bisa memahami berbagai macam hal yang dapat menambah kualitas pada diri sendiri. Hasil dari penambahan kualitas tersebut berupa pemanfaatan hal yang telah dipelajari, diaplikasikan di kehidupan nyata. Sebagai contoh kita belajar pendidikan dari sd hingga sma untuk menambah kualitas diri dan digunakan untuk menempuh belajar di Kuliah.<br />
<br />
===Komputer dalam Metode Numerik===<br />
Komputer merupakan alat hitung yang cepat. Kualitas dari komputer bergantung pada spesifikasi pembuatannya. Penggunaan dari alat tersebut juga bergantung pada pemakainya.<br />
<br />
===Tugas 1===<br />
Berikut merupakan video penjelasan aplikasi OpenModelica untuk menyelesaikan suatu Sistem Persamaan <br />
<youtube width="200" height="100">https: https://www.youtube.com/watch?v=QTFApGHD76Y&feature=youtu.be</youtube><br />
<br />
== Catatan Minggu kedua (18 November 2020) ==<br />
<br />
===Pembahasan===<br />
Pada kuliah pertemuan ke 2 dibahas tentang penggungan Openmodelica<br />
<br />
Sesi Tanya jawab :<br />
<br />
Mengapa menggunakan openmodelica : Karena openmodelica merupakan bahasa permodolen yang gratis.<br />
Apa Perbedaan constan real dengan parameter real : untuk mengganti variabel pada simulasi jika menggunakan comand constan real diperlukan simulate ulangsedangkan dengan menggunakan comand parameter real tidak perlu simulate ulang hanya dengan mengganti variabel xnya <br />
<br />
Penyataan Penting <br />
Openmodelica merupakan object oriented. Pada modelica specialization model digunakan untuk menyelesaikan suatu fungsi sedangankan class digunakan untuk penggabungan fungsi-fungsi. Setiap specializtion digunakan untuk tujuan yang berbeda-beda dengan mempunyai kelebihan dan kelemahan.<br />
<br />
===Tugas 2===<br />
Membuat open modecalica dengan specializtion Class persamaan aljabar simultan<br />
<br />
'''function'''<br />
<br />
function p<br />
input Real A[4,4];<br />
input Real B[4];<br />
output Real X[4]; <br />
algorithm<br />
X:=Modelica.Math.Matrices.solve(A,B);<br />
end p;<br />
<br />
'''class'''<br />
<br />
class o<br />
parameter Real P[4,4]=[8,-9,1,-8;<br />
-3,-1,5,4;<br />
-2,-1,-3,8;<br />
-2,-8,-1,2];<br />
Q[4]={80,7,-30,18};<br />
Real X[4];<br />
equation<br />
X=o(P,Q);<br />
end SPL;<br />
<br />
Video tugas <br />
<youtube width="200" height="100">https: https://youtu.be/sBwtuRmJSPk</youtube><br />
<br />
== Catatan Minggu ketiga (25 November 2020) ==<br />
<br />
[[File:File:1.PNG]]</div>Musyafi Albarhttp://air.eng.ui.ac.id/index.php?title=File:1.PNG&diff=45317File:1.PNG2020-12-02T07:49:54Z<p>Musyafi Albar: Musyafi Albar uploaded a new version of File:1.PNG</p>
<hr />
<div></div>Musyafi Albar