Difference between revisions of "Metnum03-M Sulthan Azizy Hardijanto"
(→Tugas Besar) |
(→Jawaban UAS) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 191: | Line 191: | ||
Assalamualaikum Wr,Wb Pak Dai membahas tentang perbedaan statis dan dinamis. Lalu Pak Dai membahas tentang tugas 3 yang kumarin dan kemudian Pak Dai memberikan Quiz dan menyuruh kita untuk mengumpulkan Flow Chart terlebih dahulu. Berikut Soal dan Flow Chart yang saya buat : | Assalamualaikum Wr,Wb Pak Dai membahas tentang perbedaan statis dan dinamis. Lalu Pak Dai membahas tentang tugas 3 yang kumarin dan kemudian Pak Dai memberikan Quiz dan menyuruh kita untuk mengumpulkan Flow Chart terlebih dahulu. Berikut Soal dan Flow Chart yang saya buat : | ||
+ | |||
+ | [[File:QuizAzy0.png|600px|center]] | ||
[[File:QuizAzy.png|600px|center]] | [[File:QuizAzy.png|600px|center]] | ||
Line 199: | Line 201: | ||
[[File:Tugas5Azy.png|600px|center]] | [[File:Tugas5Azy.png|600px|center]] | ||
+ | |||
+ | Berikut adalah coding dari Ahmad Mohammad Fahmi yang saya pelajari | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Stiffness Matrix Element Function''' | ||
+ | |||
+ | function StiffnessMatrixElement | ||
+ | input Real [:,6] inisiasi_mat; | ||
+ | output Real [size(inisiasi_mat,1),6,6] Ke_mat; | ||
+ | protected | ||
+ | Real cos_x; | ||
+ | Real cos_y; | ||
+ | Real cos_z; | ||
+ | Real [6] StiffTrig; | ||
+ | Real [6,6] StiffTrans; | ||
+ | Real [size(inisiasi_mat,1)] L; | ||
+ | Real [size(inisiasi_mat,1)] k_vec; | ||
+ | algorithm | ||
+ | L := {(sqrt(inisiasi_mat[i,2]^2 + inisiasi_mat[i,3]^2 + inisiasi_mat[i,4]^2)) for i in 1:size(inisiasi_mat,1)}; | ||
+ | k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / L[i]) for i in 1:size(inisiasi_mat,1)}; | ||
+ | // Finding stiffness matrix of each element member | ||
+ | for i in 1:size(inisiasi_mat,1) loop | ||
+ | // Clearing the matrices | ||
+ | StiffTrig := zeros(6); | ||
+ | StiffTrans := zeros(6,6); | ||
+ | // Converting degrees to radians | ||
+ | cos_x := inisiasi_mat[i,2]/L[i]; | ||
+ | cos_y := inisiasi_mat[i,3]/L[i]; | ||
+ | cos_z := inisiasi_mat[i,4]/L[i]; | ||
+ | // {cos^2, sin^2, sincos} | ||
+ | StiffTrig := {(cos_x)^2, | ||
+ | (cos_y)^2, | ||
+ | (cos_z)^2, | ||
+ | (cos_x*cos_y), | ||
+ | (cos_x*cos_z), | ||
+ | (cos_y*cos_z)}; | ||
+ | // Construct stiffness transformation matrix | ||
+ | StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5]; | ||
+ | StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6]; | ||
+ | StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3]; | ||
+ | -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5]; | ||
+ | -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6]; | ||
+ | -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]]; | ||
+ | // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat | ||
+ | for m in 1:6 loop | ||
+ | for n in 1:6 loop | ||
+ | Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n]; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end StiffnessMatrixElement; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Stiffness Matrix Global Function''' | ||
+ | |||
+ | function StiffnessMatrixGlobal | ||
+ | input Integer x; | ||
+ | input Integer [:,2] n; | ||
+ | input Real [:,6,6] Ke_mat; | ||
+ | output Real [size(Ke_mat,1),3*x,3*x] Kg_mat; | ||
+ | algorithm | ||
+ | Kg_mat := zeros(size(Ke_mat,1),3*x,3*x); | ||
+ | for i in 1:size(Ke_mat,1) loop | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2]; | ||
+ | Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2]; | ||
+ | Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2]; | ||
+ | Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1]; | ||
+ | |||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5]; | ||
+ | Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5]; | ||
+ | Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5]; | ||
+ | Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4]; | ||
+ | end for; | ||
+ | end StiffnessMatrixGlobal; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | ''' Sum Stiffness Matrix Element Function''' | ||
+ | |||
+ | function SumStiffnessMatrixGlobal | ||
+ | input Real [:,:,:] Kg_mat; | ||
+ | output Real [size(Kg_mat,2),size(Kg_mat,2)] KgTot_mat; | ||
+ | algorithm | ||
+ | for a in 1:size(Kg_mat,2) loop | ||
+ | for b in 1:size(Kg_mat,2) loop | ||
+ | KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); | ||
+ | end for; | ||
+ | end for; | ||
+ | end SumStiffnessMatrixGlobal; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | ''' Boundary Stiffness Matrix Global Function''' | ||
+ | |||
+ | function BoundaryStiffnessMatrixGlobal | ||
+ | input Real [:,:] KgTot_met; | ||
+ | input Integer[:] Boundary_xyz; | ||
+ | input Integer[:] Boundary_xy; | ||
+ | input Integer[:] Boundary_xz; | ||
+ | input Integer[:] Boundary_yz; | ||
+ | input Integer[:] Boundary_x; | ||
+ | input Integer[:] Boundary_y; | ||
+ | input Integer[:] Boundary_z; | ||
+ | output Real [size(KgTot_met,1),size(KgTot_met,1)] KgB_met; | ||
+ | |||
+ | algorithm | ||
+ | for a in 1:size(KgTot_met,1) loop | ||
+ | for b in 1:size(KgTot_met,1) loop | ||
+ | KgB_met[a,b] := KgTot_met [a,b]; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | if Boundary_xyz[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_xyz,1) loop | ||
+ | for b in 0:2 loop | ||
+ | KgB_met[3*(Boundary_xyz[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_xyz[a]-b,3*Boundary_xyz[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_xy[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_xy,1) loop | ||
+ | for b in 1:2 loop | ||
+ | KgB_met[3*(Boundary_xy[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_xy[a]-b,3*Boundary_xy[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_xz[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_xz,1) loop | ||
+ | for b in 0:2:2 loop | ||
+ | KgB_met[3*(Boundary_xz[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_xz[a]-b,3*Boundary_xz[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_yz[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_yz,1) loop | ||
+ | for b in 0:1 loop | ||
+ | KgB_met[3*(Boundary_yz[a])-b,i]:=0; | ||
+ | KgB_met[3*Boundary_yz[a]-b,3*Boundary_yz[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_x[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_x,1) loop | ||
+ | KgB_met[3*(Boundary_x[a])-2,i]:=0; | ||
+ | KgB_met[3*Boundary_x[a]-2,3*Boundary_x[a]-2]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_y[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_y,1) loop | ||
+ | KgB_met[3*(Boundary_y[a])-1,i]:=0; | ||
+ | KgB_met[3*Boundary_y[a]-1,3*Boundary_y[a]-1]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | |||
+ | if Boundary_z[1] <> 0 then | ||
+ | for i in 1:size(KgTot_met,1) loop | ||
+ | for a in 1:size(Boundary_z,1) loop | ||
+ | KgB_met[3*Boundary_z[a],i]:=0; | ||
+ | KgB_met[3*Boundary_z[a],3*Boundary_z[a]]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | end if; | ||
+ | end BoundaryStiffnessMatrixGlobal; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Gauss Jordan Function''' | ||
+ | |||
+ | function GaussJordan | ||
+ | input Real [:,:] KgB_met; | ||
+ | input Real [size(KgB_met,1)] load_met; | ||
+ | output Real [size(KgB_met,1)] U_met; | ||
+ | |||
+ | protected | ||
+ | Real float_error = 10e-10; | ||
+ | |||
+ | algorithm | ||
+ | U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); | ||
+ | |||
+ | for i in 1:size(KgB_met,1) loop | ||
+ | if abs(U_met[i]) <= float_error then | ||
+ | U_met[i] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end GaussJordan; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Reaction Force Function''' | ||
+ | |||
+ | function ReactionForce | ||
+ | input Real [:,:] KgTot_met; | ||
+ | input Real [size(KgTot_met,1)] U_met; | ||
+ | input Real [size(KgTot_met,1)] load_met; | ||
+ | output Real [size(KgTot_met,1)] R_met; | ||
+ | protected Real float_error = 10e-10; | ||
+ | |||
+ | algorithm | ||
+ | R_met := KgTot_met*U_met-load_met; | ||
+ | |||
+ | for t in 1:size(KgTot_met,1) loop | ||
+ | if abs(R_met[t]) <= float_error then | ||
+ | R_met[t] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end ReactionForce; | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Check Force Function''' | ||
+ | |||
+ | function CheckForce | ||
+ | input Real [:] load; | ||
+ | input Real [size(load,1)] R; | ||
+ | output Real [3] F; | ||
+ | protected Real float_error = 10e-10; | ||
+ | |||
+ | protected | ||
+ | Real load_x; | ||
+ | Real load_y; | ||
+ | Real load_z; | ||
+ | Real R_x; | ||
+ | Real R_y; | ||
+ | Real R_z; | ||
+ | |||
+ | algorithm | ||
+ | load_x := sum({load[i] for i in 1:3:(size(load,1)-2)}); | ||
+ | load_y := sum({load[i] for i in 2:3:(size(load,1)-1)}); | ||
+ | load_z := sum({load[i] for i in 3:3:size(load,1)}); | ||
+ | R_x := sum({R[i] for i in 1:3:(size(load,1)-2)}); | ||
+ | R_y := sum({R[i] for i in 2:3:(size(load,1)-1)}); | ||
+ | R_z := sum({R[i] for i in 3:3:size(load,1)}); | ||
+ | |||
+ | F[1] := load_x + R_x; | ||
+ | F[2] := load_y + R_y; | ||
+ | F[3] := load_z + R_z; | ||
+ | |||
+ | for i in 1:3 loop | ||
+ | if abs(F[i]) <= float_error then | ||
+ | F[i] := 0; | ||
+ | end if; | ||
+ | end for; | ||
+ | |||
+ | end CheckForce; | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | style='border-style: none none solid solid;' | | ||
+ | '''Class''' | ||
+ | |||
+ | class QuizSoal1 | ||
+ | //inisiasi = [ elemen#, dX, dY, dZ, A, E] | ||
+ | parameter Real [:,6] inisiasi = [1, 6, 0, -3, 1.56, 10.6e6; //isi sesuai data | ||
+ | 2, 0, 0, -6, 1.56, 10.6e6; | ||
+ | 3, 0, 6, -3, 1.56, 10.6e6; | ||
+ | 4, -6, 0, -3, 1.56, 10.6e6; | ||
+ | 5, -6, 6, 0, 1.56, 10.6e6; | ||
+ | 6, 0, 6, 3, 1.56, 10.6e6]; | ||
+ | |||
+ | //node = [ i, j] | ||
+ | parameter Integer [size(inisiasi,1),2] node = [1, 2; //isi sesuai data | ||
+ | 1, 3; | ||
+ | 1, 4; | ||
+ | 2, 3; | ||
+ | 2, 4; | ||
+ | 3, 4]; | ||
+ | |||
+ | //jumlah node | ||
+ | parameter Integer n = 4; //isi sesuai data | ||
+ | |||
+ | //titik node boundary xyz | ||
+ | parameter Integer [:] Boundary_xyz = {1}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary xy | ||
+ | parameter Integer [:] Boundary_xy = {4}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary xz | ||
+ | parameter Integer [:] Boundary_xz = {0}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary yz | ||
+ | parameter Integer [:] Boundary_yz = {0}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary x | ||
+ | parameter Integer [:] Boundary_x = {3}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary y | ||
+ | parameter Integer [:] Boundary_y = {0}; //isi sesuai data | ||
+ | |||
+ | //titik node boundary z | ||
+ | parameter Integer [:] Boundary_z = {0}; //isi sesuai data | ||
+ | |||
+ | //load = [ F1x, F1y, F1z,..., Fnx, Fny, Fnz] | ||
+ | parameter Real [3*n] load = {0, 0, 0, //isi sesuai data | ||
+ | 0, -200, 0, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0}; | ||
+ | |||
+ | Real [size(inisiasi,1)] L; | ||
+ | Real [size(inisiasi,1)] k; | ||
+ | Real [size(inisiasi,1),6,6] Ke; | ||
+ | Real [size(inisiasi,1),3*n,3*n] Kg; | ||
+ | Real [3*n,3*n] KgTot; | ||
+ | Real [3*n,3*n] KgB; | ||
+ | Real [3*n] U; | ||
+ | Real [3*n] R; | ||
+ | |||
+ | //check force | ||
+ | Real [3] F; | ||
+ | |||
+ | equation | ||
+ | L = {(sqrt(inisiasi[i,2]^2 + inisiasi[i,3]^2 + inisiasi[i,4]^2)) for i in 1:size(inisiasi,1)}; | ||
+ | |||
+ | k = {(inisiasi[i,5] * inisiasi[i,6] / L[i]) for i in 1:size(inisiasi,1)}; | ||
+ | |||
+ | Ke = StiffnessMatrixElement(inisiasi); | ||
+ | |||
+ | Kg = StiffnessMatrixGlobal(n, node, Ke); | ||
+ | |||
+ | KgTot = SumStiffnessMatrixGlobal(Kg); | ||
+ | |||
+ | KgB = BoundaryStiffnessMatrixGlobal(KgTot, Boundary_xyz, Boundary_xy, Boundary_xz, Boundary_yz, Boundary_x, Boundary_y, Boundary_z); | ||
+ | |||
+ | U = GaussJordan(KgB, load); | ||
+ | |||
+ | R = ReactionForce(KgTot, U, load); | ||
+ | |||
+ | F = CheckForce(load,R); | ||
+ | |||
+ | end QuizSoal1; | ||
+ | |||
+ | |} | ||
=='''Pertemuan 6'''== | =='''Pertemuan 6'''== | ||
Line 215: | Line 625: | ||
[[File:TubesAzy.png|600px|center]] | [[File:TubesAzy.png|600px|center]] | ||
+ | |||
+ | '''Flow Chart''' | ||
+ | |||
+ | [[File:1610553218422.jpg|700px]] | ||
+ | |||
+ | '''Mendefinisikan Permasalahan''' | ||
+ | |||
+ | Melakukan optimisasi pada rangka untuk mengetahui material apa yang memiliki kekuatan yang maksimal dengan harga yang minimum. Pertama-tama kita harus mengetahui profil dari besi siku dan rangka yang digunakan. Setelah itu kita juga harus menentukan elemen serta node pada rangka. | ||
+ | |||
+ | [[File:1609744333243.jpg|700px]] | ||
+ | |||
+ | '''Menentukan Asumsi dan Kondisi''' | ||
+ | |||
+ | Asumsi: | ||
+ | |||
+ | - Diasumsikan tidak ada bending karena bersifat truss | ||
+ | - Beban terdistribusi pada node | ||
+ | - Safety Factor = 2 | ||
+ | - Batas displacement 0,001m sebelum terjadi buckling | ||
+ | - Variabel bebas | ||
+ | Constraint" | ||
+ | - Node 1,2,3,4 (lantai dasar) fixed | ||
+ | - Beban F1 dan F2 terdistribusi ke node sekitaranya, sehingga: | ||
+ | 1. Node 13 & 16 = 1000N | ||
+ | 2. Node 14 & 15 = 500N | ||
+ | |||
+ | '''Research Data Profil Besi Siku''' | ||
+ | |||
+ | [[File:1609744461966.jpg|700px]] | ||
'''3D Trusses Model''' | '''3D Trusses Model''' | ||
Line 303: | Line 742: | ||
for i in 1:Trusses loop | for i in 1:Trusses loop | ||
for j in 1:3 loop | for j in 1:3 loop | ||
− | + | q1[j]:=P[C[i,1],j]; | |
− | + | q2[j]:=P[C[i,2],j]; | |
end for; | end for; | ||
//Solving Matrix | //Solving Matrix | ||
Line 422: | Line 861: | ||
end for; | end for; | ||
*/ | */ | ||
+ | |||
+ | '''Komputasi''' | ||
+ | |||
+ | Berikut merupakan progres yang saya lakukan yang pertama saya mengisi data didalam excel untuk input dari catalog yang sudah saya dapatkan, dan disini saya menggunakan SS304 | ||
+ | |||
+ | [[File:1610552972808.jpg]] | ||
+ | |||
+ | Berikut merupakan codingan yang saya lakukan | ||
+ | |||
+ | [[File:1609741663978.jpg|700px]] | ||
+ | |||
+ | [[File:1609741654787.jpg|700px]] | ||
+ | |||
+ | Berikut Merupakan hasil grafik yang saya dapatkan dari cost dan stress | ||
+ | |||
+ | [[File:1610553014750.jpg|700px]] | ||
+ | |||
+ | |||
+ | = '''Jawaban UAS''' = | ||
+ | |||
+ | Berikut merupakan jawaban UAS saya nomor 1 sampai 6 | ||
+ | |||
+ | [[File:S28827660.jpg|700px]] | ||
+ | [[File:S28827662.jpg|700px]] | ||
+ | |||
+ | Berikut merupakan codingan pemodelan yang saya lakukan di OpenModelica | ||
+ | |||
+ | [[File:MessageImage_1610560845681.jpg|700px]] | ||
+ | |||
+ | [[File:1610560861661.jpg]] | ||
+ | |||
+ | Dan berikut merupakan hasil simulasi dari Stress 1, 2 , dan 3 | ||
+ | |||
+ | [[File:MessageImage_1610561033038.jpg|700px]] |
Latest revision as of 16:36, 14 January 2021
بِسْمِ اللّهِ الرَّحْمَنِ الرَّحِيْ
السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
Contents
BIODATA DIRI
Nama : M Sulthan Azizy Hardijanto
NPM : 1806233392
Fakultas/ Jurusan : Teknik/ Teknik Mesin
Tempat dan Tanggal lahir :Surabaya, 06 Januari 2001
Pertemuan 1: 9 November 2020
Assalamualaikum Wr. Wb, Perkenalkan saya Muhammad Sulthan Azizy Hardijanto dari kelas Metode Numerik 03, Hari ini saya akan menerangkan apa saja yang saya pelajari tentang Metode Numerik sebelum UTS. Metode Numerik adalah teknik penyelesaian permasalahan matematis yang diformulasikan dengan menggunakan operasi aritmatik yaitu operasi tambah, kurang, kali, dan bagi. Metode Numerik ini sering digunakan karena ada permasalahan matematis yang tidak dapat diselesaikan menggunakan metode analitik. Dan pada beberapa kasus, Metode Analitik sering kali menggunakan proses penyelesaian yang cukup rumit dan tidak efisien dalam waktu.
Keuntungan dari Metode Numerik dibandingkan dengan Metode lainnya adalah:
1. Menggunakan bantuan komputer sehingga proses penyelesaian dan hasil dapat diperoleh dengan cepat dan lebih akurat dengan nilai sesungguhnya
2. Hasil dari persoalan selalu didapatkan
3. Tampilan hasil perhitungan dapat disimulasikan.
Namun Metode Numerik juga memiliki kelemahan yaitu :
1. Proses penyelesaiaan akan menjadi rumit dan berulang ulang jika tidak menggunakan bantuan komputer.
2. Nilai yang didapatkan dari persoalan adalah nilai pendekatan.
1. Menentukan Akar-Akar
Ada beberapa metode yang dapat digunakan untuk menyelesaikan suatu persoalan matematis. Metode ini merupakan penyelesaian perkiraan, tetapi lebih sistematis untuk menghitung akar-akar persamaan. Pencarian akar f(x)=0 dilakukan secara iteratif dalam Metode Numerik. Secara umum, semua metode pencarian akar dapat dikelompokkan menjadi 2 golongan besar yaitu:
1. Metode Tertutup
Metode yang termasuk ke dalam golongan ini mencari akar di dalam selang [a,b]. Selang [a,b] sudah dipastikan berisi minimal satu buah akar, karena itu metode jenis ini selalu berhasil menemukan akar. Lelarannya selalu konvergen menuju ke akar, karena itu metode tertutup sering disebut dengan metode konvergen.
Metode yang termasuk dalam golongan ini antara lain :
a. Metode Biseksi atau Metode Setengah Interval ini merupakan Metode dengan bentuk paling sederhana diantara beberapa metode yang akan dipelajari.
b. Metode Regula Falsi atau Metode Interpolasi Linier adalah metode mudah tapi tidak efisien. Untuk mendapatkan hasil yang mendekati nilai eksak diperlukan langkah iterasi yang cukup panjang. Metode Regula Falsi dapat menutup kekurangan itu. Metode Regula Falsi didasarkan pada interpolasi antara dua nilai dari fungsi yang mempunyai tanda berlawanan
2. Metode Terbuka
Yang diperlukan pada metode ini, adalah tebakan awal akar, lalu dengan prosedur lelaran, kita menggunakannya untuk menghitung hampiran akar yang baru. Pada setiap lelaran, hampiran akar lama yang dipakai untuk menghitung hampiran akar yang baru. Mungkin saja hampiran akar yang baru mendekati akar sejati (konvergen), atau mungkin menjauhinya (divergen). Karena itu, metode terbuka tidak selalu berhasil menemukan akar, kadang-kadang konvergen, kadangkala ia divergen.
Metode yang termasuk dalam golongan ini antara lain :
a. Metode Newton Raphson,Metode ini paling banyak digunakan dalam mencari akar-akar dari suatu persamaan.
b. Metode Secant,Kekurangan Metode Newton Raphson adalah diperlukannya turunan pertama (differensial) dari f(x) dalam hitungan. Kadang-kadang sulit untuk mendiferensialkan persamaan yang diselesaikan. Untuk itu maka bentuk diferensial didekati dengan nilai perkiraan berdasarkan diferensial beda hingga.
c. Metode Iterasi,Dalam metode iterasi ini digunakan suatu persamaan untuk memperkirakan nilai akar persamaan. Persamaan tersebut dikembangkan dari fungsi f(x) = 0 sehingga parameter x berada disisi kiri dari persamaan, yaitu :
X= g(x)
Persamaan ini menunjukkan bahwa nilai x merupakan fungsi dari x, sehingga dengan memberi nilai perkiraan awal dari akar dapat dihitung perkiraan baru dengan rumus iteratif berikut :
Xi+1 = g ( xi )
Besar kesalahan dihitung dengan rumus berikut :
∈a = | (Xi+1 – Xi )/(Xi+1 ) | X 100%
2. Regresi Linier
Regresi merupakan alat ukur yg digunakan untuk mengetahui ada tidaknya korelasi antarvariabel. Analisis regresi lebih akurat dlm analisis korelasi karena tingkat perubahan suatu variabel terhdp variabel lainnya dpt ditentukan). Jadi pada regresi, peramalan atau perkiraan nilai variabel terikat pada nilai variabel bebas lebih akurat pula.
Regresi linier adalah regresi yang variabel bebasnya (variabel X) berpangkat paling tinggi satu. Utk regresi sederhana, yaitu regresi linier yg hanya melibatkan dua variabel (variabel X dan Y).
Y = a + bX
Keterangan :
Y = variabel terikat
X = variabel bebas
a = intersep / konstanta
b = koefisien regresi / slop
3. Turunan Numerik
Ini digunakan untuk menentukan nilai turunan fungsi f yang diberikan dalam bentik tabel. Ada 3 pendekatan zalm menghitung Turunan Numerik :
1. Hampiran selisih-maju (forward difference approximation)
2. Hampiran selisih-mundur (backward difference approximation)
3. Hampiran selisih-pusat (central difference approximation)
Pertemuan 2: 16 November 2020
Assalamualaikum Wr Wb,pada pertemuan kedua ini, Pak Dai memaparkan pemahaman masing-masing mengenai OpenModelica. Setelah itu kami diminta untuk membuat sebuah program sederhana untuk menjumlahkan angka dan juga mencari rata-rata. Tetapi karena saya menggunakan MacOS dan OpenModelica tidak dapat digunakan di MacOS, maka saya menggunakan Python.
Berikut Rumus yang saya masukkan menggunakan python :
Dan berikut hasil yang saya dapatkan
Hasil mean yang saya dapatkan sebesar 4,428571428571429
Pertemuan 3 : 23 November 2020
Assalamualaikum Wr.Wb, Pada hari ini saya tidak mengikuti kelas karena ada keperluan mendesak namun saya mencari tahu apa saja yang dibahas ketika kelas.
Dari yang saya cari tahu dari teman teman, kelas hari ini membahas Masalah teknik -> analisis teknik -> model matematis -> model numerik -> komputer -> solusi
Lalu ada penjelasan mengenai bagaimana permodelan aplikasi pegas. Mulai dari masalah tekniknya yaitu merupakan sistem pegas. kemudian pada analisis teknik kita menentukan hal-hal apa saja yang kita ketahui dalam persamaan tersebut. Lalu dengan hukum hooke kita membuat model matematisnya.
Tugas 3
Pada tugas 3 ini kami diminta mengerjakan soal di contoh 2.1 pada buku yang pak Dai berikan. Berikut soal yang diberikan :
Untuk menyelesaikan soal ini kita dapat mengerjakanannya dengan beberapa langkah penyelesaiaan.
Tahap Pertama yaitu mengubah soal ke bentuk node dan elemen
Lalu dilanjutkan dengan menentukan nilai konstata stiffness constannya dari elemen
Kemudian membuat persamaan elemen ke bentuk matriks untuk kekakuan batang yaitu seperti:
Langkah selanjutnya menggabungkan matriks elemen-elemennya
sehingga dengan menerapkan kondisi batas dan beban dapat memperoleh:
-Kondisi batas untuk node 1 dan 3 adalah fixed
-external force pada node 4 dan 5
Dengan menerapkan hk. Hooke diperoleh:
Kemudian mencari solusi dari persamaan matriks nya menggunakan OpenModelica
Kemudian didapatkan plotting yaitu:
Kemudian kita dapat menentukan gaya reaksi dapat ditemukan dengan persamaan:
dan berikut hasil plottingnya:
Kemudian setelah itu kita dapat menghitung gaya internal dan normal stress
Untuk menghitung normal stress, perlu dilakukan transformasi dari hasil defleksi ditinjau dari koordinat global menjadi transformasi lokal, berikut adalah persamaan yang dapat digunakan
Misalkan kita menganalisis stress pada elemen 5, maka node yang dianalisis adalah node 2 dan 5 Sehingga persamaan matriks defleksi pada koordinat lokal menjadi
dan ini ketika di OpenModelica
dan berikut hasil plottingnya
dimana didapatkan U2x=-0.00976 inchi dan U6x=-0.01209 inchi
Pertemuan 4
Assalamualaikum Wr,Wb Pak Dai membahas tentang perbedaan statis dan dinamis. Lalu Pak Dai membahas tentang tugas 3 yang kumarin dan kemudian Pak Dai memberikan Quiz dan menyuruh kita untuk mengumpulkan Flow Chart terlebih dahulu. Berikut Soal dan Flow Chart yang saya buat :
Pertemuan 5
Assalamualaikum wr.wb. Pada pertemuan ke-5 ini, Pak Dai menanyakan tentang 2 soal minggu lalu yang diberikan oleh Pak Dai. Pak Dai memberi kesempatan untuk mahasiswa yang sudah bisa dan berhasil dalam mengerjakan soal tersebut. Kemudian Fahmi menjelaskan tentang codingan yang sudah dia buat yang bisa diterapkan untuk mengerjakan soal seperti itu. Fahmi menggunakan 1 class dan beberapa function didalam OpenModelica untuk mengerjakan soal tersebut.
Berikut adalah coding dari Ahmad Mohammad Fahmi yang saya pelajari
Stiffness Matrix Element Function function StiffnessMatrixElement input Real [:,6] inisiasi_mat; output Real [size(inisiasi_mat,1),6,6] Ke_mat; protected Real cos_x; Real cos_y; Real cos_z; Real [6] StiffTrig; Real [6,6] StiffTrans; Real [size(inisiasi_mat,1)] L; Real [size(inisiasi_mat,1)] k_vec; algorithm L := {(sqrt(inisiasi_mat[i,2]^2 + inisiasi_mat[i,3]^2 + inisiasi_mat[i,4]^2)) for i in 1:size(inisiasi_mat,1)}; k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / L[i]) for i in 1:size(inisiasi_mat,1)}; // Finding stiffness matrix of each element member for i in 1:size(inisiasi_mat,1) loop // Clearing the matrices StiffTrig := zeros(6); StiffTrans := zeros(6,6); // Converting degrees to radians cos_x := inisiasi_mat[i,2]/L[i]; cos_y := inisiasi_mat[i,3]/L[i]; cos_z := inisiasi_mat[i,4]/L[i]; // {cos^2, sin^2, sincos} StiffTrig := {(cos_x)^2, (cos_y)^2, (cos_z)^2, (cos_x*cos_y), (cos_x*cos_z), (cos_y*cos_z)}; // Construct stiffness transformation matrix StiffTrans := [ StiffTrig[1], StiffTrig[4], StiffTrig[5], -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5]; StiffTrig[4], StiffTrig[2], StiffTrig[6], -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6]; StiffTrig[5], StiffTrig[6], StiffTrig[3], -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3]; -1*StiffTrig[1], -1*StiffTrig[4], -1*StiffTrig[5], StiffTrig[1], StiffTrig[4], StiffTrig[5]; -1*StiffTrig[4], -1*StiffTrig[2], -1*StiffTrig[6], StiffTrig[4], StiffTrig[2], StiffTrig[6]; -1*StiffTrig[5], -1*StiffTrig[6], -1*StiffTrig[3], StiffTrig[5], StiffTrig[6], StiffTrig[3]]; // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat for m in 1:6 loop for n in 1:6 loop Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n]; end for; end for; end for; end StiffnessMatrixElement; |
Stiffness Matrix Global Function function StiffnessMatrixGlobal input Integer x; input Integer [:,2] n; input Real [:,6,6] Ke_mat; output Real [size(Ke_mat,1),3*x,3*x] Kg_mat; algorithm Kg_mat := zeros(size(Ke_mat,1),3*x,3*x); for i in 1:size(Ke_mat,1) loop Kg_mat[i,3*n[i,1],3*n[i,1]]:=Ke_mat[i,3,3]; Kg_mat[i,3*n[i,1],3*n[i,1]-1]:=Ke_mat[i,3,2]; Kg_mat[i,3*n[i,1],3*n[i,1]-2]:=Ke_mat[i,3,1]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]]:=Ke_mat[i,2,3]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]-1]:=Ke_mat[i,2,2]; Kg_mat[i,3*n[i,1]-1,3*n[i,1]-2]:=Ke_mat[i,2,1]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]]:=Ke_mat[i,1,3]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]-1]:=Ke_mat[i,1,2]; Kg_mat[i,3*n[i,1]-2,3*n[i,1]-2]:=Ke_mat[i,1,1]; Kg_mat[i,3*n[i,2],3*n[i,2]]:=Ke_mat[i,6,6]; Kg_mat[i,3*n[i,2],3*n[i,2]-1]:=Ke_mat[i,6,5]; Kg_mat[i,3*n[i,2],3*n[i,2]-2]:=Ke_mat[i,6,4]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]]:=Ke_mat[i,5,6]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]-1]:=Ke_mat[i,5,5]; Kg_mat[i,3*n[i,2]-1,3*n[i,2]-2]:=Ke_mat[i,5,4]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]]:=Ke_mat[i,4,6]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]-1]:=Ke_mat[i,4,5]; Kg_mat[i,3*n[i,2]-2,3*n[i,2]-2]:=Ke_mat[i,4,4]; Kg_mat[i,3*n[i,2],3*n[i,1]]:=Ke_mat[i,6,3]; Kg_mat[i,3*n[i,2],3*n[i,1]-1]:=Ke_mat[i,6,2]; Kg_mat[i,3*n[i,2],3*n[i,1]-2]:=Ke_mat[i,6,1]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]]:=Ke_mat[i,5,3]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]-1]:=Ke_mat[i,5,2]; Kg_mat[i,3*n[i,2]-1,3*n[i,1]-2]:=Ke_mat[i,5,1]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]]:=Ke_mat[i,4,3]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]-1]:=Ke_mat[i,4,2]; Kg_mat[i,3*n[i,2]-2,3*n[i,1]-2]:=Ke_mat[i,4,1]; Kg_mat[i,3*n[i,1],3*n[i,2]]:=Ke_mat[i,3,6]; Kg_mat[i,3*n[i,1],3*n[i,2]-1]:=Ke_mat[i,3,5]; Kg_mat[i,3*n[i,1],3*n[i,2]-2]:=Ke_mat[i,3,4]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]]:=Ke_mat[i,2,6]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]-1]:=Ke_mat[i,2,5]; Kg_mat[i,3*n[i,1]-1,3*n[i,2]-2]:=Ke_mat[i,2,4]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]]:=Ke_mat[i,1,6]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]-1]:=Ke_mat[i,1,5]; Kg_mat[i,3*n[i,1]-2,3*n[i,2]-2]:=Ke_mat[i,1,4]; end for; end StiffnessMatrixGlobal; |
Sum Stiffness Matrix Element Function function SumStiffnessMatrixGlobal input Real [:,:,:] Kg_mat; output Real [size(Kg_mat,2),size(Kg_mat,2)] KgTot_mat; algorithm for a in 1:size(Kg_mat,2) loop for b in 1:size(Kg_mat,2) loop KgTot_mat[a,b] := sum(Kg_mat [:,a,b]); end for; end for; end SumStiffnessMatrixGlobal; |
Boundary Stiffness Matrix Global Function function BoundaryStiffnessMatrixGlobal input Real [:,:] KgTot_met; input Integer[:] Boundary_xyz; input Integer[:] Boundary_xy; input Integer[:] Boundary_xz; input Integer[:] Boundary_yz; input Integer[:] Boundary_x; input Integer[:] Boundary_y; input Integer[:] Boundary_z; output Real [size(KgTot_met,1),size(KgTot_met,1)] KgB_met; algorithm for a in 1:size(KgTot_met,1) loop for b in 1:size(KgTot_met,1) loop KgB_met[a,b] := KgTot_met [a,b]; end for; end for; if Boundary_xyz[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_xyz,1) loop for b in 0:2 loop KgB_met[3*(Boundary_xyz[a])-b,i]:=0; KgB_met[3*Boundary_xyz[a]-b,3*Boundary_xyz[a]-b]:=1; end for; end for; end for; end if; if Boundary_xy[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_xy,1) loop for b in 1:2 loop KgB_met[3*(Boundary_xy[a])-b,i]:=0; KgB_met[3*Boundary_xy[a]-b,3*Boundary_xy[a]-b]:=1; end for; end for; end for; end if; if Boundary_xz[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_xz,1) loop for b in 0:2:2 loop KgB_met[3*(Boundary_xz[a])-b,i]:=0; KgB_met[3*Boundary_xz[a]-b,3*Boundary_xz[a]-b]:=1; end for; end for; end for; end if; if Boundary_yz[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_yz,1) loop for b in 0:1 loop KgB_met[3*(Boundary_yz[a])-b,i]:=0; KgB_met[3*Boundary_yz[a]-b,3*Boundary_yz[a]-b]:=1; end for; end for; end for; end if; if Boundary_x[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_x,1) loop KgB_met[3*(Boundary_x[a])-2,i]:=0; KgB_met[3*Boundary_x[a]-2,3*Boundary_x[a]-2]:=1; end for; end for; end if; if Boundary_y[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_y,1) loop KgB_met[3*(Boundary_y[a])-1,i]:=0; KgB_met[3*Boundary_y[a]-1,3*Boundary_y[a]-1]:=1; end for; end for; end if; if Boundary_z[1] <> 0 then for i in 1:size(KgTot_met,1) loop for a in 1:size(Boundary_z,1) loop KgB_met[3*Boundary_z[a],i]:=0; KgB_met[3*Boundary_z[a],3*Boundary_z[a]]:=1; end for; end for; end if; end BoundaryStiffnessMatrixGlobal; |
Gauss Jordan Function function GaussJordan input Real [:,:] KgB_met; input Real [size(KgB_met,1)] load_met; output Real [size(KgB_met,1)] U_met; protected Real float_error = 10e-10; algorithm U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met); for i in 1:size(KgB_met,1) loop if abs(U_met[i]) <= float_error then U_met[i] := 0; end if; end for; end GaussJordan; |
Reaction Force Function function ReactionForce input Real [:,:] KgTot_met; input Real [size(KgTot_met,1)] U_met; input Real [size(KgTot_met,1)] load_met; output Real [size(KgTot_met,1)] R_met; protected Real float_error = 10e-10; algorithm R_met := KgTot_met*U_met-load_met; for t in 1:size(KgTot_met,1) loop if abs(R_met[t]) <= float_error then R_met[t] := 0; end if; end for; end ReactionForce; |
Check Force Function function CheckForce input Real [:] load; input Real [size(load,1)] R; output Real [3] F; protected Real float_error = 10e-10; protected Real load_x; Real load_y; Real load_z; Real R_x; Real R_y; Real R_z; algorithm load_x := sum({load[i] for i in 1:3:(size(load,1)-2)}); load_y := sum({load[i] for i in 2:3:(size(load,1)-1)}); load_z := sum({load[i] for i in 3:3:size(load,1)}); R_x := sum({R[i] for i in 1:3:(size(load,1)-2)}); R_y := sum({R[i] for i in 2:3:(size(load,1)-1)}); R_z := sum({R[i] for i in 3:3:size(load,1)}); F[1] := load_x + R_x; F[2] := load_y + R_y; F[3] := load_z + R_z; for i in 1:3 loop if abs(F[i]) <= float_error then F[i] := 0; end if; end for; end CheckForce; |
Class class QuizSoal1 //inisiasi = [ elemen#, dX, dY, dZ, A, E] parameter Real [:,6] inisiasi = [1, 6, 0, -3, 1.56, 10.6e6; //isi sesuai data 2, 0, 0, -6, 1.56, 10.6e6; 3, 0, 6, -3, 1.56, 10.6e6; 4, -6, 0, -3, 1.56, 10.6e6; 5, -6, 6, 0, 1.56, 10.6e6; 6, 0, 6, 3, 1.56, 10.6e6]; //node = [ i, j] parameter Integer [size(inisiasi,1),2] node = [1, 2; //isi sesuai data 1, 3; 1, 4; 2, 3; 2, 4; 3, 4]; //jumlah node parameter Integer n = 4; //isi sesuai data //titik node boundary xyz parameter Integer [:] Boundary_xyz = {1}; //isi sesuai data //titik node boundary xy parameter Integer [:] Boundary_xy = {4}; //isi sesuai data //titik node boundary xz parameter Integer [:] Boundary_xz = {0}; //isi sesuai data //titik node boundary yz parameter Integer [:] Boundary_yz = {0}; //isi sesuai data //titik node boundary x parameter Integer [:] Boundary_x = {3}; //isi sesuai data //titik node boundary y parameter Integer [:] Boundary_y = {0}; //isi sesuai data //titik node boundary z parameter Integer [:] Boundary_z = {0}; //isi sesuai data //load = [ F1x, F1y, F1z,..., Fnx, Fny, Fnz] parameter Real [3*n] load = {0, 0, 0, //isi sesuai data 0, -200, 0, 0, 0, 0, 0, 0, 0}; Real [size(inisiasi,1)] L; Real [size(inisiasi,1)] k; Real [size(inisiasi,1),6,6] Ke; Real [size(inisiasi,1),3*n,3*n] Kg; Real [3*n,3*n] KgTot; Real [3*n,3*n] KgB; Real [3*n] U; Real [3*n] R; //check force Real [3] F; equation L = {(sqrt(inisiasi[i,2]^2 + inisiasi[i,3]^2 + inisiasi[i,4]^2)) for i in 1:size(inisiasi,1)}; k = {(inisiasi[i,5] * inisiasi[i,6] / L[i]) for i in 1:size(inisiasi,1)}; Ke = StiffnessMatrixElement(inisiasi); Kg = StiffnessMatrixGlobal(n, node, Ke); KgTot = SumStiffnessMatrixGlobal(Kg); KgB = BoundaryStiffnessMatrixGlobal(KgTot, Boundary_xyz, Boundary_xy, Boundary_xz, Boundary_yz, Boundary_x, Boundary_y, Boundary_z); U = GaussJordan(KgB, load); R = ReactionForce(KgTot, U, load); F = CheckForce(load,R); end QuizSoal1; |
Pertemuan 6
Assalamualaikum wr.wb. Pada pertemuan ini Pak Dai meminta mahasiswanya muasabah diri untuk pencapaian dalam memahami materi Metode Numerik ini. Saya sudah agak memahami bagaimana menggunakan openmodelica walaupun belum sepenuhnya. Saya sudah mengerti flow chart dalam mengerjakan persoalan fisika tetapi untuk codingannya saya belum mengerti sepenuhnya.
Pertemuan 7
Assalamualikum Wr, Wb. Kelas pada lari ini diadakan oleh Pak Ahmad Indra
Tugas Besar
Assalamualaikum wr.wb.
Berikut merupakan progres dari tugas besar yang saya kerjakan.
Flow Chart
Mendefinisikan Permasalahan
Melakukan optimisasi pada rangka untuk mengetahui material apa yang memiliki kekuatan yang maksimal dengan harga yang minimum. Pertama-tama kita harus mengetahui profil dari besi siku dan rangka yang digunakan. Setelah itu kita juga harus menentukan elemen serta node pada rangka.
Menentukan Asumsi dan Kondisi
Asumsi:
- Diasumsikan tidak ada bending karena bersifat truss - Beban terdistribusi pada node - Safety Factor = 2 - Batas displacement 0,001m sebelum terjadi buckling - Variabel bebas Constraint" - Node 1,2,3,4 (lantai dasar) fixed - Beban F1 dan F2 terdistribusi ke node sekitaranya, sehingga: 1. Node 13 & 16 = 1000N 2. Node 14 & 15 = 500N
Research Data Profil Besi Siku
3D Trusses Model
//define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield= (nilai yield) ; //Yield Strength Material(Pa) parameter Real Area= (nilai area) ; //Luas Besi Siku (Dimension=30x30x3mm) parameter Real Elas= (nilai elastisitas) ; //Elasticity Material (Pa) //define connection parameter Integer C[:,2]=[1,5; // (Elemen 1) 2,6; // (Elemen 2) 3,7; // (Elemen 3) 4,8; // (Elemen 4) 5,6; // (Elemen 5) 6,7; // (Elemen 6) 7,8; // (Elemen 7) 5,8; // (Elemen 8) 5,9; // (Elemen 9) 6,10; // (Elemen 10) 7,11; // (Elemen 11) 8,12; // (Elemen 12) 9,10; // (Elemen 13) 10,11;// (Elemen 14) 11,12;// (Elemen 15) 9,12; // (Elemen 16) 9,13; // (Elemen 17) 10,14;// (Elemen 18) 11,15;// (Elemen 19) 12,16;// (Elemen 20) 13,14;// (Elemen 21) 14,15;// (Elemen 22) 15,16;// (Elemen 23) 13,16];//(Elemen 24) //define coordinates (please put orderly) parameter Real P[:,6]=[ 0 ,0 ,0,1,1,1; //node 1 0.75,0 ,0,1,1,1; //node 2 0.75,0.6,0,1,1,1; //node 3 0 ,0.6,0,1,1,1; //node 4 0 ,0 ,0.3,0,0,0; //node 5 0.75,0 ,0.3,0,0,0; //node 6 0.75,0.6,0.3,0,0,0; //node 7 0 ,0.6,0.3,0,0,0; //node 8 0 ,0 ,1.05,0,0,0; //node 9 0.75,0 ,1.05,0,0,0; //node 10 0.75,0.6,1.05,0,0,0; //node 11 0 ,0.6,1.05,0,0,0; //node 12 0 ,0 ,1.8,0,0,0; //node 13 0.75,0 ,1.8,0,0,0; //node 14 0.75,0.6,1.8,0,0,0; //node 15 0 ,0.6,1.8,0,0,0]; //node 16 //define external force (please put orderly) parameter Real F[Points*3]={0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,-1000, 0,0,-500, 0,0,-500, 0,0,-1000}; //solution Real displacement[N], reaction[N]; Real check[3]; Real stress1[Trusses]; Real safety[Trusses]; Real dis[3]; Real Str[3]; protected parameter Integer N=3*Points; Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3]; Real err=10e-15, ers=10e-8; algorithm //Creating Global Matrix G:=id; for i in 1:Trusses loop for j in 1:3 loop q1[j]:=P[C[i,1],j]; q2[j]:=P[C[i,2],j]; end for; //Solving Matrix L:=Modelica.Math.Vectors.length(q2-q1); cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz; cy*cx,cy^2,cy*cz; cz*cx,cz*cy,cz^2]; //Transforming to global matrix g:=zeros(N,N); for m,n in 1:3 loop g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n]; g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n]; g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n]; g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n]; end for; G_star:=G+g; G:=G_star; end for; //Implementing boundary for x in 1:Points loop if P[x,4] <> 0 then for a in 1:Points*3 loop G[(x*3)-2,a]:=0; G[(x*3)-2,(x*3)-2]:=1; end for; end if; if P[x,5] <> 0 then for a in 1:Points*3 loop G[(x*3)-1,a]:=0; G[(x*3)-1,(x*3)-1]:=1; end for; end if; if P[x,6] <> 0 then for a in 1:Points*3 loop G[x*3,a]:=0; G[x*3,x*3]:=1; end for; end if; end for; //Solving displacement displacement:=Modelica.Math.Matrices.solve(G,F); //Solving reaction reaction:=(G_star*displacement)-F; //Eliminating float error for i in 1:N loop reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i]; displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i]; end for; //Checking Force check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))}); check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))}); check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)}); for i in 1:3 loop check[i] := if abs(check[i])<=ers then 0 else check[i]; end for; //Calculating stress in each truss for i in 1:Trusses loop for j in 1:3 loop q1[j]:=P[C[i,1],j]; q2[j]:=P[C[i,2],j]; dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]); end for; //Solving Matrix L:=Modelica.Math.Vectors.length(q2-q1); cx:=(q2[1]-q1[1])/L; cy:=(q2[2]-q1[2])/L; cz:=(q2[3]-q1[3])/L; X:=(Elas/L)*[cx^2,cx*cy,cx*cz; cy*cx,cy^2,cy*cz; cz*cx,cz*cy,cz^2]; Str:=(X*dis); stress1[i]:=Modelica.Math.Vectors.length(Str); end for; //Safety factor for i in 1:Trusses loop if stress1[i]>0 then safety[i]:=Yield/stress1[i]; else safety[i]:=0; end if; end for; end Trusses_3D_Tugas_Besar;
Komputasi
function Curve_Fitting input Real X[:]; input Real Y[size(X,1)]; input Integer order=2; output Real Coe[order+1]; protected Real Z[size(X,1),order+1]; Real ZTr[order+1,size(X,1)]; Real A[order+1,order+1]; Real B[order+1]; algorithm for i in 1:size(X,1) loop for j in 1:(order+1) loop Z[i,j]:=X[i]^(order+1-j); end for; end for; ZTr:=transpose(Z); A:=ZTr*Z; B:=ZTr*Y; Coe:=Modelica.Math.Matrices.solve(A,B); //Coe:=fill(2,size(Coe,1)); end Curve_Fitting; /* for i in 1:3 loop for j in 1:Points loop R[j]:=reaction[3*(j-1)+i]; end for; Sur[i]:=sum(R); end for; */
Komputasi
Berikut merupakan progres yang saya lakukan yang pertama saya mengisi data didalam excel untuk input dari catalog yang sudah saya dapatkan, dan disini saya menggunakan SS304
Berikut merupakan codingan yang saya lakukan
Berikut Merupakan hasil grafik yang saya dapatkan dari cost dan stress
Jawaban UAS
Berikut merupakan jawaban UAS saya nomor 1 sampai 6
Berikut merupakan codingan pemodelan yang saya lakukan di OpenModelica
Dan berikut merupakan hasil simulasi dari Stress 1, 2 , dan 3