Difference between revisions of "Metnum03 Bhismantyo Tsaqif Daniswara"

From ccitonlinewiki
Jump to: navigation, search
 
(28 intermediate revisions by the same user not shown)
Line 28: Line 28:
  
 
   '''1.Hitung fungsi pada interval yang sama dari x sampai pada    perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu :f(xn) . f(xn+1) < 0
 
   '''1.Hitung fungsi pada interval yang sama dari x sampai pada    perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu :f(xn) . f(xn+1) < 0
   '''2. Estimasi pertama dari akar xt dihitung dengan '''
+
   '''2.Estimasi pertama dari akar xt dihitung dengan
                       
+
  '''[[File:AkarbiseksiBhisma.png|150px|center]]
 +
  '''3.Buat evaluasi berikut untuk menentukan di dalam sub interval mana akar persamaan berada :
 +
  '''a.f(xn).f(xt) < 0, akar persamaan berada pada sub interval pertama, kemudian tetapkan xn+1 = xt dan lanjutkan pada langkah ke-4
 +
  '''b.f(xn).f(xt) > 0, akar persamaan berada pada sub interval kedua, kemudian tetapkan xn = xt dan lanjutkan pada langkah ke-4
 +
  '''c.f(xn).f(xt) = 0, akar persamaan adalah xt dan hitungan selesai
 +
  '''4.Hitung perkiraan baru dari akar dengan
 +
  '''[[File:AkarbiseksiBhisma.png|150px|center]]
 +
  '''5.Apabila perkiraan baru sudah cukup kecil (sesuai dengan batasan yang ditentukan), maka hitungan selesai, dan xt adalah akar persamaan yang dicari. Jika belum, maka hitungan kembali ke langkah ke-3'''
  
 +
b. Metode Regulasi Falsi
  
 +
Metode Regula Falsi didasarkan pada interpolasi antara dua nilai dari fungsi yang mempunyai tanda berlawanan. Metode regulasi falsi memiliki langkah-langkah sebagai berikut :
 +
 +
  '''1.Hitung fungsi pada interval yang sama dari x sampai pada perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu f(xn) . f(xn+1) < 0
 +
  '''2.Mencari nilai x* dengan persamaan :
 +
  '''[[File:AkarfalsiBhisma.png|150px|center]]
 +
  '''3.Nilai tersebut digunakan untuk menghitung nilai f(x*), yang kemudian digunakan lagi untuk interpolasi linier dengan nilai f(xn) atau f(xn+1) sedemikian sehingga kedua fungsi mempunyai tanda berbeda.
 +
  '''4.Prosedur diulang lagi sampai didapat nilai f(x*) mendekati nol'''
 +
 +
'''2. Metode Terbuka'''
 +
 +
a. Metode Newton Raphson
 +
 +
Metode Newton Raphson memiliki langkah-langkah sebagai perikut:
 +
 +
  '''1.Pilih nilai awal xi sembarang
 +
  '''2.Hitung xi+1  dan f (xi+1) dengan rumus :
 +
  '''[[File:AkarnewtonBhisma.png|150px|center]]
 +
  '''3.Demikian seterusnya sampai didapatkan f (xi+1) yang kecil'''
 +
 +
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.
 +
 +
  [[File:AkarsecantBhismantyo.png|150px|center]]
 +
 +
Dalam metode ini pendekatan memerlukan dua nilai awal dari x
 +
 +
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 :
 +
 +
  [[File:Akariterasi1Bhisma.png|150px|center]]
 +
 +
Besar kesalahan dihitung dengan rumus berikut :
 +
 +
  [[File:Akariterasi2Bhisma.png|200px|center]]
 +
 +
'''Pemahaman Modelica'''
 +
 +
Lampiran :
 +
 +
[[File:FeedbackBhisma.png|800px|center]]
 +
 +
[[File:CheckFeedbackBhisma.png|800px|center]]
 +
 +
[[File:GrafikFeedbackBhisma.png|800px|center]]
 +
 +
'''Link Video : https://youtu.be/nZLv1rvAdu8'''
 
   
 
   
 +
== Pertemuan 02 ==
 +
 +
Pada pertemuan ini, Pak Dai kembali menjelaskan mengenai program OpenModelica. Pada pertemuan ini Pak Dai memberi tugas yaitu menyelesaikan persamaan aljabar dengan metode Gauss Jordan, pada aplikasi OpenModelica ini.
 +
 +
'''1. Membuat Formula'''
 +
 +
Pada tahap ini, saya terlebih dahulu membuat formula yang akan diproses oleh OpenModelica.
 +
 +
[[File:PersamaanBhismaMetnum.png|600px|center]]
 +
 +
[[File:FormulaBhisma.png|800px|center]]
 +
 +
'''2. Check Formula'''
 +
 +
[[File:CheckBhisma.png|800px|center]]
 +
 +
'''3. Hasil Simulation'''
 +
 +
[[File:HasilBhismaOMEdit.png|800px|center]]
 +
 +
didapat hasil '''x = 26, y = -2, z = -8'''
 +
 +
== Pertemuan 03 ==
 +
 +
Pada Pertemuan ini, Pak Dai menjelaskan mengenai bagaimana aplikasi metode numerik dalam permasalahan teknik.
 +
 +
  '''Step :''' Masalah teknik -  Analisis masalah - Model Matematis - Metode Numerik - Komputer - Solusi
 +
 +
[[File:MetnumMasalahteknikBhisma.png|800px|center]]
 +
 +
Pada pertemuan ini, Pak Dai menugaskan kami untuk mencoba menyelesaikan permasalahan pegas 12.11 pada buku "'''Numerical Methods for Engineers 7th Edition'''"
 +
 +
 +
[[File:12.11MetnumBhisma.png|800px|center]]
 +
 +
[[File:12.11MetnumBhisma2.png|800px|center]]
 +
 +
Setelah itu, saya memasukan rumus matrix yang tertera pada buku ke dalam aplikasi OpenModelica
 +
 +
[[File:FormulapegasBhisma.png|800px|center]]
 +
 +
Setelah itu sebelum masuk ke simulasi, saya check formula saya  terlebih dahulu
 +
 +
[[File:CheckPegasBhisma.png|800px|center]]
 +
 +
Setelah itu, baru saya simulasi untuk mendapatkan jawaban dari permasalahan tersebut
 +
 +
[[File:GrafikPegasBhisma.png|800px|center]]
 +
 +
'''Didapatkan hasil : x1 = 7.357, x2 = 10.055, x3 = 12.507'''
 +
 +
Setelah itu, Pak Dai menugaskan kami untuk mengerjakan PR yakni :
 +
 +
[[File:Soaltugas3Bhisma.png|800px|center]]
 +
 +
1. Mengubah problem menjadi node
 +
 +
[[File:NodeBhisma.png|500px|center]]
 +
 +
2. Menentukan Konstanta
 +
 +
a. Elemen 1,3,4,6
 +
 +
[[File:1346Bhisma.png|400px|center]]
 +
 +
b. Elemen 2,5
 +
 +
[[File:25Bhisma.png|400px|center]]
 +
 +
3. Membuat matriks elemen
 +
 +
a. Analisis Elemen 1,3,6
 +
 +
[[File:Analisis136Bhisma.png|800px|center]]
 +
 +
b. Analisis Elemen 4
 +
 +
[[File:Analisis4Bhisma.png|400px|center]]
 +
 +
c. Analisis Elemen 2,5
 +
 +
[[File:Analisis25Bhisma.png|500px|center]]
 +
 +
4. Menyusun matriks elemen
 +
 +
[[File:MatriksBhisma.png|600px|center]]
 +
 +
5. Menerapkan batas
 +
 +
a. node 1 dan 3 Fixed
 +
 +
[[File:13FixedBhisma.png|500px|center]]
 +
 +
b. External Force 4 dan 5
 +
 +
[[File:45nodeBhisma.png|500px|center]]
 +
 +
Dengan Hukum Hooke, diadapat matriks :
 +
 +
[[File:Matrixfku.png|600px|center]]
 +
 +
6. Mencari Solusi Menggunakan OpenModelica
 +
 +
[[File:ModelicaTugas3aBhisma.png|800px|center]]
 +
 +
[[File:SimulTugas3aBhisma.png|800px|center]]
 +
 +
7. Mendapatkan nilai gaya reaksi
 +
 +
[[File:10x10Bhisma.png|600px|center]]
 +
 +
Lalu dimasukan pada OpenModelica untuk mencari solusinya
 +
 +
[[File:ModelicaTugas3bBhisma.png|800px|center]]
 +
 +
[[File:SimulTugas3bBhisma.png|800px|center]]
 +
 +
8. Mendapat gaya internal dan stress
 +
 +
[[File:InternaldanstressBhisma.png|600px|center]]
 +
 +
[[File:LokalinternalBhisma.png|400px|center]]
 +
 +
Lalu saya masukan ke program OpenModelica untuk mencari solusinya
 +
 +
[[File:ModelicaTugas3cBhisma.png|800px|center]]
 +
 +
[[File:SimulTugas3cBhisma.png|800px|center]]
 +
 +
Didapatkan U2x = -0.00976 inch dan U6x = -0.01209 inch
 +
 +
Didapatkan  internal force pada elemen 5 sebesar 696lb.
 +
 +
Didapatkan normal stress pada elemen 5 sebesar 87lb/in^2
 +
 +
== Pertemuan 04 ==
 +
 +
Pada pertemuan ini, Pak Dai memberi kami quiz sebagai bahan pembelajaran
 +
 +
[[File:SOal4Bhisma.jpeg|400px|center]]
 +
 +
[[File:Soal8Bhisma.jpeg|400px|center]]
 +
 +
Setelah itu, saya mengerjakan flow chart (cara pengerjaan) dari soal ini.
 +
 +
[[File:Quizno4Bhisma.png|800px|center]]
 +
 +
[[File:Quizno8Bhisma.png|800px|center]]
 +
 +
== Pertemuan 05 ==
 +
 +
Pada pertemuan ini, kami mempelajari coding dari Ahmad Mohammad Fahmi mengenai penyelesaian soal quiz
 +
 +
Berikut ialah codingannya
 +
 +
{| 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;
  
== Pertemuan 02 ==
+
|}
 +
 
 +
{| 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 06 ==
 +
 
 +
Pada pertemuan ini, Pak Dai mengarahkan kami untuk muhasabah diri mengenai materi Metode Numerik yang telah dipelajari
 +
 
 +
Menurut saya, Metode Numerik merupakan sebuah metode untuk menyelesaikan berbagai macam masalah keteknikan yang ada. Dalam Materi ini pun, kami diajarkan juga mengenai software OpenModelica, yang dapat membantu menyelesaikan masalah keteknikan yang saya hadapi.
 +
 
 +
== Pertemuan 07 ==
 +
 
 +
Pada pertemuan ini, Pak Dai mengarahkan kami untuk membuat Tugas Besar Metode Numerik. Berikut rincian tugas besar saya :
 +
 
 +
== Tugas Besar Metode Numerik ==
 +
 
 +
'''Soal TUBES'''
 +
 
 +
[[File:TubesBhisma.jpeg|600px|centre]]
 +
[[File:RincianTubesBhisma.jpeg|600px|centre]]
 +
 
 +
'''Metode Pengerjaan'''
 +
 
 +
1. Membuat Asumsi
 +
 
 +
2. Mencari nilai spesifikasi  batang
 +
 
 +
[[File:OpenModelicaTubes1Bhisma.png|800px|centre]]
 +
[[File:OpenModelicaTubes2Bhisma.png|800px|centre]]
 +
[[File:DataBatangBhisma.PNG|800px|centre]]
 +
 
 +
== UAS METNUM ==
 +
 
 +
1. Buatlah urutan langkah-langkah (prosedur) pemodelan numerik untuk optimasi struktur tersebut
 +
 
 +
[[File:SoalUASMETNUMBhisma.jpeg|800px|centre]]
 +
 
 +
'''Jawaban'''
 +
 
 +
[[File:UASno1BhismaMetnum.jpg|800px|centre]]
 +
 
 +
2. Jelaskan tujuan pemodelan numerik soal no 1 diatas, hukum/dalil (fisika) yang dipakai dan asumsi-asumsi yang akan digunakan dalam perhitungan
 +
 
 +
'''Jawaban'''
 +
 
 +
[[File:UASno2BhismaMetnum.jpg|800px|centre]]
 +
 
 +
3. Untuk pemodelan numerik analisis strukturnya nya gunakan pendekatan 1D truss dgn membagi kolum (tiang) water tower kedalam 3 elemen (1D). a). Susunlah persamaan aljabar kesetimbangan statik setiap elemen tsb. (matriks kesetimbangan lokal) b) Matriks kesetimbangan global
 +
 
 +
'''Jawaban'''
 +
 
 +
[[File:UASno3BhismaMetnum.jpg|800px|centre]]
 +
 
 +
4. Susun urutan langkah-langkah (pseudocode) perhitungan matriks kesetimbangan global soal no 3 termasuk pengecekan kesalahan (verifikasi) perhitungannya
 +
 
 +
5. Tulis dan jelaskan fungsi objektif dan constraint untuk optimasi struktur water tower tersebut
 +
 
 +
6. Tuliskan asumsi nilai-nilai parameter dan variable untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 elemnt 1 D diatas
 +
 
 +
'''Jawaban'''
 +
 
 +
[[File:UASno456BhismaMetnum.jpg|800px|centre]]
 +
 
 +
7. Gunakan program modelica anda untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 element 1 D berdasarkan asumsi no 6
 +
 
 +
'''Jawaban'''
 +
 
 +
Coding :
 +
 
 +
  model UASMetnum
 +
 
 +
  parameter Real P[3]={10000,0,10000};
 +
 
 +
 
 +
  parameter Real a=4e-4;
 +
  parameter Real e=200e+9;
 +
  parameter Real l=2;
 +
 
 +
  /*parameter yang akan dicari*/
 +
  Real k;
 +
  Real kg[3,3];
 +
  Real u[3];
 +
  Real stress[3];
 +
 
 +
 
 +
  algorithm
 +
  k := a*e/1;
 +
 
 +
  kg := [k, 2*k, 0;
 +
        -k, 2*k, -k;
 +
        0, -k, 2*k];
 +
 
 +
  u := Modelica.Math.Matrices.solve(kg,P);
 +
 
 +
  stress[1] := u[1]*k/a;
 +
  stress[2] := u[2]*k/a;
 +
  stress[3] := u[3]*k/a;
 +
 
 +
  end UASMetnum;
 +
 
 +
Hasil Simulasi :
 +
 
 +
[[File:UASno7BhismaMetnum.png|800px|centre]]

Latest revision as of 18:34, 14 January 2021

Bhismantyo Tsaqif Daniswara, Mahasiswa Teknik Mesin, Fakultas Teknik Universitas Indonesia

بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيْمِ

السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُ

Biodata Diri

Nama  : Bhismantyo Tsaqif Daniswara

NPM  : 1806181754

Program Studi : S1 Pararel Teknik Mesin

Pertemuan 01

Pada pertemuan pertama ini, Pak Dai menjelaskan dan mengarahkan mengenai pelajaran Metode Numerik sebelum UTS. Pada page ini, saya akan menjelaskan apa yang sudah saya pelajari mengenai Metode Numerik.

Metode untuk mencari akar-akar persamaan

1. Metode Tertutup

a. Metode Biseksi

Metode Biseksi memiliki beberapa langkah-langkah penyelesaian sebagai berikut :

  1.Hitung fungsi pada interval yang sama dari x sampai pada    perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu :f(xn) . f(xn+1) < 0
  2.Estimasi pertama dari akar xt dihitung dengan
AkarbiseksiBhisma.png
  3.Buat evaluasi berikut untuk menentukan di dalam sub interval mana akar persamaan berada :
  a.f(xn).f(xt) < 0, akar persamaan berada pada sub interval pertama, kemudian tetapkan xn+1 = xt dan lanjutkan pada langkah ke-4
  b.f(xn).f(xt) > 0, akar persamaan berada pada sub interval kedua, kemudian tetapkan xn = xt dan lanjutkan pada langkah ke-4
  c.f(xn).f(xt) = 0, akar persamaan adalah xt dan hitungan selesai
  4.Hitung perkiraan baru dari akar dengan
AkarbiseksiBhisma.png
  5.Apabila perkiraan baru sudah cukup kecil (sesuai dengan batasan yang ditentukan), maka hitungan selesai, dan xt adalah akar persamaan yang dicari. Jika belum, maka hitungan kembali ke langkah ke-3

b. Metode Regulasi Falsi

Metode Regula Falsi didasarkan pada interpolasi antara dua nilai dari fungsi yang mempunyai tanda berlawanan. Metode regulasi falsi memiliki langkah-langkah sebagai berikut :

  1.Hitung fungsi pada interval yang sama dari x sampai pada perubahan tanda dari fungsi f(xn) dan f(xn+1), yaitu f(xn) . f(xn+1) < 0
  2.Mencari nilai x* dengan persamaan :
AkarfalsiBhisma.png
  3.Nilai tersebut digunakan untuk menghitung nilai f(x*), yang kemudian digunakan lagi untuk interpolasi linier dengan nilai f(xn) atau f(xn+1) sedemikian sehingga kedua fungsi mempunyai tanda berbeda.
  4.Prosedur diulang lagi sampai didapat nilai f(x*) mendekati nol

2. Metode Terbuka

a. Metode Newton Raphson

Metode Newton Raphson memiliki langkah-langkah sebagai perikut:

  1.Pilih nilai awal xi sembarang
  2.Hitung xi+1  dan f (xi+1) dengan rumus :
AkarnewtonBhisma.png
  3.Demikian seterusnya sampai didapatkan f (xi+1) yang kecil

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.

AkarsecantBhismantyo.png

Dalam metode ini pendekatan memerlukan dua nilai awal dari x

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 :

Akariterasi1Bhisma.png

Besar kesalahan dihitung dengan rumus berikut :

Akariterasi2Bhisma.png

Pemahaman Modelica

Lampiran :

FeedbackBhisma.png
CheckFeedbackBhisma.png
GrafikFeedbackBhisma.png

Link Video : https://youtu.be/nZLv1rvAdu8

Pertemuan 02

Pada pertemuan ini, Pak Dai kembali menjelaskan mengenai program OpenModelica. Pada pertemuan ini Pak Dai memberi tugas yaitu menyelesaikan persamaan aljabar dengan metode Gauss Jordan, pada aplikasi OpenModelica ini.

1. Membuat Formula

Pada tahap ini, saya terlebih dahulu membuat formula yang akan diproses oleh OpenModelica.

PersamaanBhismaMetnum.png
FormulaBhisma.png

2. Check Formula

CheckBhisma.png

3. Hasil Simulation

HasilBhismaOMEdit.png

didapat hasil x = 26, y = -2, z = -8

Pertemuan 03

Pada Pertemuan ini, Pak Dai menjelaskan mengenai bagaimana aplikasi metode numerik dalam permasalahan teknik.

 Step : Masalah teknik -  Analisis masalah - Model Matematis - Metode Numerik - Komputer - Solusi
MetnumMasalahteknikBhisma.png

Pada pertemuan ini, Pak Dai menugaskan kami untuk mencoba menyelesaikan permasalahan pegas 12.11 pada buku "Numerical Methods for Engineers 7th Edition"


12.11MetnumBhisma.png
12.11MetnumBhisma2.png

Setelah itu, saya memasukan rumus matrix yang tertera pada buku ke dalam aplikasi OpenModelica

FormulapegasBhisma.png

Setelah itu sebelum masuk ke simulasi, saya check formula saya terlebih dahulu

CheckPegasBhisma.png

Setelah itu, baru saya simulasi untuk mendapatkan jawaban dari permasalahan tersebut

GrafikPegasBhisma.png

Didapatkan hasil : x1 = 7.357, x2 = 10.055, x3 = 12.507

Setelah itu, Pak Dai menugaskan kami untuk mengerjakan PR yakni :

Soaltugas3Bhisma.png

1. Mengubah problem menjadi node

NodeBhisma.png

2. Menentukan Konstanta

a. Elemen 1,3,4,6

1346Bhisma.png

b. Elemen 2,5

25Bhisma.png

3. Membuat matriks elemen

a. Analisis Elemen 1,3,6

Analisis136Bhisma.png

b. Analisis Elemen 4

Analisis4Bhisma.png

c. Analisis Elemen 2,5

Analisis25Bhisma.png

4. Menyusun matriks elemen

MatriksBhisma.png

5. Menerapkan batas

a. node 1 dan 3 Fixed

13FixedBhisma.png

b. External Force 4 dan 5

45nodeBhisma.png

Dengan Hukum Hooke, diadapat matriks :

Matrixfku.png

6. Mencari Solusi Menggunakan OpenModelica

ModelicaTugas3aBhisma.png
SimulTugas3aBhisma.png

7. Mendapatkan nilai gaya reaksi

10x10Bhisma.png

Lalu dimasukan pada OpenModelica untuk mencari solusinya

ModelicaTugas3bBhisma.png
SimulTugas3bBhisma.png

8. Mendapat gaya internal dan stress

InternaldanstressBhisma.png
LokalinternalBhisma.png

Lalu saya masukan ke program OpenModelica untuk mencari solusinya

ModelicaTugas3cBhisma.png
SimulTugas3cBhisma.png

Didapatkan U2x = -0.00976 inch dan U6x = -0.01209 inch

Didapatkan internal force pada elemen 5 sebesar 696lb.

Didapatkan normal stress pada elemen 5 sebesar 87lb/in^2

Pertemuan 04

Pada pertemuan ini, Pak Dai memberi kami quiz sebagai bahan pembelajaran

SOal4Bhisma.jpeg
Soal8Bhisma.jpeg

Setelah itu, saya mengerjakan flow chart (cara pengerjaan) dari soal ini.

Quizno4Bhisma.png
Quizno8Bhisma.png

Pertemuan 05

Pada pertemuan ini, kami mempelajari coding dari Ahmad Mohammad Fahmi mengenai penyelesaian soal quiz

Berikut ialah codingannya

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 06

Pada pertemuan ini, Pak Dai mengarahkan kami untuk muhasabah diri mengenai materi Metode Numerik yang telah dipelajari

Menurut saya, Metode Numerik merupakan sebuah metode untuk menyelesaikan berbagai macam masalah keteknikan yang ada. Dalam Materi ini pun, kami diajarkan juga mengenai software OpenModelica, yang dapat membantu menyelesaikan masalah keteknikan yang saya hadapi.

Pertemuan 07

Pada pertemuan ini, Pak Dai mengarahkan kami untuk membuat Tugas Besar Metode Numerik. Berikut rincian tugas besar saya :

Tugas Besar Metode Numerik

Soal TUBES

TubesBhisma.jpeg
RincianTubesBhisma.jpeg

Metode Pengerjaan

1. Membuat Asumsi

2. Mencari nilai spesifikasi batang

OpenModelicaTubes1Bhisma.png
OpenModelicaTubes2Bhisma.png
DataBatangBhisma.PNG

UAS METNUM

1. Buatlah urutan langkah-langkah (prosedur) pemodelan numerik untuk optimasi struktur tersebut

SoalUASMETNUMBhisma.jpeg

Jawaban

UASno1BhismaMetnum.jpg

2. Jelaskan tujuan pemodelan numerik soal no 1 diatas, hukum/dalil (fisika) yang dipakai dan asumsi-asumsi yang akan digunakan dalam perhitungan

Jawaban

UASno2BhismaMetnum.jpg

3. Untuk pemodelan numerik analisis strukturnya nya gunakan pendekatan 1D truss dgn membagi kolum (tiang) water tower kedalam 3 elemen (1D). a). Susunlah persamaan aljabar kesetimbangan statik setiap elemen tsb. (matriks kesetimbangan lokal) b) Matriks kesetimbangan global

Jawaban

UASno3BhismaMetnum.jpg

4. Susun urutan langkah-langkah (pseudocode) perhitungan matriks kesetimbangan global soal no 3 termasuk pengecekan kesalahan (verifikasi) perhitungannya

5. Tulis dan jelaskan fungsi objektif dan constraint untuk optimasi struktur water tower tersebut

6. Tuliskan asumsi nilai-nilai parameter dan variable untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 elemnt 1 D diatas

Jawaban

UASno456BhismaMetnum.jpg

7. Gunakan program modelica anda untuk menghitung displacement, restraint dan stress utk model struktur water tower dgn 3 element 1 D berdasarkan asumsi no 6

Jawaban

Coding :

 model UASMetnum
 
 parameter Real P[3]={10000,0,10000};
 
 
 parameter Real a=4e-4;
 parameter Real e=200e+9;
 parameter Real l=2;
 /*parameter yang akan dicari*/
 Real k;
 Real kg[3,3];
 Real u[3];
 Real stress[3];
 
 
 algorithm
 k := a*e/1;
 kg := [k, 2*k, 0;
       -k, 2*k, -k;
        0, -k, 2*k];
 u := Modelica.Math.Matrices.solve(kg,P);
 stress[1] := u[1]*k/a;
 stress[2] := u[2]*k/a;
 stress[3] := u[3]*k/a;
 end UASMetnum;

Hasil Simulasi :

UASno7BhismaMetnum.png