Difference between revisions of "Metnum03-Ahmad Mohammad Fahmi"

From ccitonlinewiki
Jump to: navigation, search
(Pertemuan 3)
(PERTEMUAN 4)
Line 411: Line 411:
 
'''Untuk menyelesaikan soal no.4 saya menggunakan coding berikut:'''
 
'''Untuk menyelesaikan soal no.4 saya menggunakan coding berikut:'''
  
*Class
+
*Classd
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 430: Line 430:
 
                                   2, 4;
 
                                   2, 4;
 
                                   3, 4];
 
                                   3, 4];
                                 
+
           
 
   parameter Integer y = size(node,1);
 
   parameter Integer y = size(node,1);
 
    
 
    
Line 479: Line 479:
  
  
*Funcion
+
*Function
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 486: Line 486:
 
''Stiffness Matrix Element''
 
''Stiffness Matrix Element''
  
 +
function StiffnessMatrixElement
 +
 +
  input Real [:,7] inisiasi_mat;
 +
  output Real [size(inisiasi_mat,1),4,4] Ke_mat;
 +
 +
  protected
 +
    Real theta;
 +
    Real [3] StiffTrig;
 +
    Real [4,4] StiffTrans;
 +
    Real [size(inisiasi_mat,1)] k_vec;
 +
    Real float_error = 10e-10;
  
 +
algorithm
 +
  k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / inisiasi_mat[i,7]) 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(3);
 +
  StiffTrans := zeros(4,4);
 +
 
 +
  // Converting degrees to radians
 +
  theta := Modelica.SIunits.Conversions.from_deg(inisiasi_mat[i,4]);
 +
 +
  // {cos^2, sin^2, sincos}
 +
  StiffTrig := {(Modelica.Math.cos(theta))^2,
 +
                (Modelica.Math.sin(theta))^2,
 +
                (Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
 +
 
 +
  // Handle float error elements in StiffTrig
 +
  for t in 1:size(StiffTrig,1) loop
 +
    if abs(StiffTrig[t]) <= float_error then
 +
      StiffTrig[t] := 0;
 +
    end if;
 +
  end for;
 +
 
 +
  // Construct stiffness transformation matrix
 +
  StiffTrans := [  StiffTrig[1],    StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
 +
                  StiffTrig[3],    StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
 +
                -1*StiffTrig[1], -1*StiffTrig[3],    StiffTrig[1],    StiffTrig[3];
 +
                -1*StiffTrig[3], -1*StiffTrig[2],    StiffTrig[3],    StiffTrig[2]];
 +
 
 +
  // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
 +
  for m in 1:4 loop
 +
    for n in 1:4 loop
 +
      Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];
 +
    end for;
 +
  end for;
 +
 +
end for;
 +
end StiffnessMatrixElement;
  
 
|}
 
|}
Line 496: Line 547:
 
''Stiffness Matrix Global''
 
''Stiffness Matrix Global''
  
 +
function StiffnessMatrixGlobal
 +
  input Integer [:,2] n;
 +
  input Integer x;
 +
  input Integer y;
 +
  input Real [y,4,4] Ke_mat;
 +
  output Real [y,x,x] Kg_mat;
 +
 
 +
algorithm
 +
  for i in 1:y loop
 +
    for a in 1:x loop
 +
      for b in 1:x loop
 +
        Kg_mat[i,a,b]:=0;
 +
      end for;
 +
    end for;
 +
  end for;
 +
 +
  for i in 1:y loop
 +
    Kg_mat[i,2*n[i,1],2*n[i,1]]:=Ke_mat[i,2,2];
 +
    Kg_mat[i,2*n[i,1]-1,2*n[i,1]-1]:=Ke_mat[i,1,1];
 +
    Kg_mat[i,2*n[i,1],2*n[i,1]-1]:=Ke_mat[i,2,1];
 +
    Kg_mat[i,2*n[i,1]-1,2*n[i,1]]:=Ke_mat[i,1,2];
 +
 +
    Kg_mat[i,2*n[i,2],2*n[i,2]]:=Ke_mat[i,4,4];
 +
    Kg_mat[i,2*n[i,2]-1,2*n[i,2]-1]:=Ke_mat[i,3,3];
 +
    Kg_mat[i,2*n[i,2],2*n[i,2]-1]:=Ke_mat[i,4,3];
 +
    Kg_mat[i,2*n[i,2]-1,2*n[i,2]]:=Ke_mat[i,3,4];
 +
 +
    Kg_mat[i,2*n[i,2],2*n[i,1]]:=Ke_mat[i,4,2];
 +
    Kg_mat[i,2*n[i,2]-1,2*n[i,1]-1]:=Ke_mat[i,3,1];
 +
    Kg_mat[i,2*n[i,2],2*n[i,1]-1]:=Ke_mat[i,4,1];
 +
    Kg_mat[i,2*n[i,2]-1,2*n[i,1]]:=Ke_mat[i,3,2];
  
 +
    Kg_mat[i,2*n[i,1],2*n[i,2]]:=Ke_mat[i,2,4];
 +
    Kg_mat[i,2*n[i,1]-1,2*n[i,2]-1]:=Ke_mat[i,1,3];
 +
    Kg_mat[i,2*n[i,1],2*n[i,2]-1]:=Ke_mat[i,2,3];
 +
    Kg_mat[i,2*n[i,1]-1,2*n[i,2]]:=Ke_mat[i,1,4];
 +
  end for;
 +
end StiffnessMatrixGlobal;
  
 
|}
 
|}
Line 506: Line 594:
 
''Sum of Stiffness Matrix Global''
 
''Sum of Stiffness Matrix Global''
  
 +
function SumStiffnessMatrixGlobal
 +
  input Integer x;
 +
  input Integer y;
 +
  input Real [y,x,x] Kg_mat;
 +
  output Real [x,x] KgTot_mat;
 +
 
 +
algorithm
 +
  for a in 1:x loop
 +
    for b in 1:x loop
 +
      KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);
 +
    end for;
 +
    end for;
  
 +
end SumStiffnessMatrixGlobal;
  
 
|}
 
|}
Line 516: Line 617:
 
''Implement Boundary Condition''
 
''Implement Boundary Condition''
  
 +
function BoundaryStiffnessMatrixGlobal
 +
  input Integer x;
 +
  input Integer z;
 +
  input Real [x,x] KgTot_met;
 +
  input Integer[z] Boundary_met;
 +
  output Real [x,x] KgB_met;
 +
 
 +
algorithm
 +
  for a in 1:x loop
 +
    for b in 1:x loop
 +
    KgB_met[a,b] := KgTot_met [a,b];
 +
    end for;
 +
  end for;
 +
 
 +
  for i in 1:x loop
 +
  for a in 1:z loop
 +
    for b in 0:1 loop
 +
      KgB_met[2*(Boundary_met[a])-b,i]:=0;
 +
    end for;
 +
  end for;
 +
  end for;
  
 +
  for a in 1:z loop
 +
    for b in 0:1 loop
 +
      KgB_met[2*Boundary_met[a]-b,z*Boundary_met[a]-b]:=1;
 +
    end for;
 +
  end for;
 +
 
 +
end BoundaryStiffnessMatrixGlobal;
  
 
|}
 
|}
Line 526: Line 655:
 
''Gauss-Jordan''
 
''Gauss-Jordan''
  
 +
function GaussJordan
 +
  input Integer x;
 +
  input Real [x,x] KgB_met;
 +
  input Real [x] load_met;
 +
  output Real [x] U_met;
 +
  Real float_error = 10e-10;
  
 +
algorithm
 +
  U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);
 +
 +
  for i in 1:x loop
 +
    if abs(U_met[i]) <= float_error then
 +
    U_met[i] := 0;
 +
    end if;
 +
  end for;
 +
 +
end GaussJordan;
  
 
|}
 
|}
Line 536: Line 681:
 
''Reaction Force''
 
''Reaction Force''
  
 +
function ReactionForce
 +
  input Integer x;
 +
  input Real [x,x] KgTot_met;
 +
  input Real [x] U_met;
 +
  input Real [x] load_met;
 +
  output Real [x] R_met;
  
 +
algorithm
 +
  R_met := (KgTot_met*U_met)-load_met;
 +
end ReactionForce;
  
 
|}
 
|}
 +
  
  
Line 612: Line 767:
  
  
*Funcion
+
*Function
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 619: Line 774:
 
''Stiffness Matrix Element''
 
''Stiffness Matrix Element''
  
 +
function StiffnessMatrixElement
 +
 +
  input Real [:,9] 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)] k_vec;
 +
 +
algorithm
 +
  k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) 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,4];
 +
  cos_y := inisiasi_mat[i,5];
 +
  cos_z := inisiasi_mat[i,6];
  
 +
  // {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;
 +
 
|}
 
|}
  
Line 629: Line 836:
 
''Stiffness Matrix Global''
 
''Stiffness Matrix Global''
  
 +
function StiffnessMatrixGlobal
 +
  input Integer [:,2] n;
 +
  input Integer x;
 +
  input Integer y;
 +
  input Real [y,6,6] Ke_mat;
 +
  output Real [y,x,x] Kg_mat;
 +
 
 +
algorithm
 +
  for i in 1:y loop
 +
    for a in 1:x loop
 +
      for b in 1:x loop
 +
        Kg_mat[i,a,b]:=0;
 +
      end for;
 +
    end for;
 +
  end for;
 +
 +
  for i in 1:y 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;
  
 
|}
 
|}
Line 639: Line 903:
 
''Sum of Stiffness Matrix Global''
 
''Sum of Stiffness Matrix Global''
  
 +
function SumStiffnessMatrixGlobal
 +
  input Integer x;
 +
  input Integer y;
 +
  input Real [y,x,x] Kg_mat;
 +
  output Real [x,x] KgTot_mat;
 +
 
 +
algorithm
 +
  for a in 1:x loop
 +
    for b in 1:x loop
 +
      KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);
 +
    end for;
 +
    end for;
  
 +
end SumStiffnessMatrixGlobal;
  
 
|}
 
|}
Line 649: Line 926:
 
''Implement Boundary Condition''
 
''Implement Boundary Condition''
  
 +
function BoundaryStiffnessMatrixGlobal
 +
  input Integer x;
 +
  input Integer z;
 +
  input Real [x,x] KgTot_met;
 +
  input Integer[z] Boundary_met;
 +
  output Real [x,x] KgB_met;
 +
 
 +
algorithm
 +
  for a in 1:x loop
 +
    for b in 1:x loop
 +
    KgB_met[a,b] := KgTot_met [a,b];
 +
    end for;
 +
  end for;
 +
 
 +
  for i in 1:x loop
 +
  for a in 1:z loop
 +
    for b in 0:2 loop
 +
      KgB_met[3*(Boundary_met[a])-b,i]:=0;
 +
    end for;
 +
  end for;
 +
  end for;
  
 +
  for a in 1:z loop
 +
    for b in 0:2 loop
 +
      KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;
 +
    end for;
 +
  end for;
 +
 
 +
end BoundaryStiffnessMatrixGlobal;
  
 
|}
 
|}
Line 659: Line 964:
 
''Gauss-Jordan''
 
''Gauss-Jordan''
  
 +
function GaussJordan
 +
  input Integer x;
 +
  input Real [x,x] KgB_met;
 +
  input Real [x] load_met;
 +
  output Real [x] U_met;
 +
 
 +
  protected
 +
  Real float_error = 10e-10;
  
 +
algorithm
 +
  U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);
 +
 +
  for i in 1:x loop
 +
    if abs(U_met[i]) <= float_error then
 +
    U_met[i] := 0;
 +
    end if;
 +
  end for;
 +
 +
end GaussJordan;
  
 
|}
 
|}
Line 669: Line 992:
 
''Reaction Force''
 
''Reaction Force''
  
 +
function ReactionForce
 +
  input Integer x;
 +
  input Real [x,x] KgTot_met;
 +
  input Real [x] U_met;
 +
  input Real [x] load_met;
 +
  output Real [x] R_met;
  
 +
algorithm
 +
  R_met := (KgTot_met*U_met)-load_met;
 +
end ReactionForce;
  
 
|}
 
|}
Line 675: Line 1,007:
  
 
Hasil yang didapat sebagai berikut:
 
Hasil yang didapat sebagai berikut:
[[File:|300px|center]]
+
[[File:AlalaaaalaPNG.png|300px|center]]
 +
 
 +
'''File yang saya guanakan dapat didownload di:'''
 +
https://drive.google.com/drive/folders/1AnQHiRUe-K2XEDtH4xx4_cW30bjYSly-?usp=sharing

Revision as of 11:43, 7 December 2020

BIODATA


Ahmad Mohammad Fahmi

Nama  : Ahmad Mohammad Fahmi

NPM  : 1806181836

Kelas : Metoda Numerik - 03


Materi Sebelum UTS


1. Deret Maclaurin

Deret maclaurin digunakan untuk memudahkan mencari nilai akar persamaan yang nilainya tidak bulat.

Deret Maclaurin

2. Turunan Numerik

Sebuah fungsi yang digunakan untuk mencari nilai turunan dari sebuah persamaan secara numerik yang asal rumusnya berasal dari deret maclaurin.

Turunan Numerik

3. Metode pencarian akar

Metode Bracket

Pada metode ini, pemilihan dua angka yang akan menjadi nilai inisiasi dari perhitungan harus mengapit nilai akar yang dicari. Salah satu metode yang diajarkan oleh pak engkos adalah metode Bisection.

Metode Bisection

Metode Open

Pada metode ini, pemilihan angka yang akan menjadi nilai inisiasi dari perhitungan tidak harus mengapit nilai akar yang dicari. Metode yang diajarkan oleh pak engkos adalah metode Newton Rhapson dan Secant.

Metode Newton Rhapson
Metode Secant

4. Pencocokan Kurva

Metode pencocokan kurva dapat dilakukan dengan melakukan regresi linear.


PERTEMUAN 1


Tugas 1


Pada tugas ini, saya coba mempelajari cara membuat simulasi feedback yang menggunakan sistem PID melalui video berikut:

https://www.youtube.com/watch?v=Dw66ODbMS2A

PERTEMUAN 2


Pada pertemuan ini, kami diajarkan bagaimana cara melakukan perhitungan menggunakan openmodelica.

Kami diberikan tugas untuk melakukan perhitungan rata-rata dari beberapa data. Berikut ini adalah hasil dari perhitungan saya:

Fahmimean.jpg
Fahmimeanhasil.PNG

Selain menghitung rata-rata, saya juga mencoba melakukan perhitungan sederhana sebagai berikut:

Fahmilat.jpg
Fahmilathasil.PNG

Tugas 2


Pada tugas ini, saya mencoba menyelesaikan persamaan-persamaan berikut:

Gambar 2020-11-23 083156.png

Untuk mencari nilai variabel dari persamaan-persamaan tersebut, saya coba menyelesaikannya dengan menggunakan metode eliminasi gauss dengan sumber referensi https://build.openmodelica.org/Documentation/Modelica.Math.Matrices.solve.html

Berikut adalah hasil dari percobaan saya:

Pada bagian function:

Gambar 2020-11-23 084157.png

Pada bagian class:

Gambar 2020-11-23 094830.png

Hasil perhitungan:

Capturea.PNG
Gambar 2020-11-23 095456.png

Dari hasil perhitungan didapat nilai variabel a=20.9375, b=-18.8125, c=-11.1875, dan d=15,0625


Pertemuan 3


Pada pertemuan ini, kami diminta untuk mencoba mengerjakan soal dari buku Metode Numerik edisi ke 7 karangan Steven C.Chapra dan Raymond P.Canel pada hal 328 latihan 12.11.

Metnum radit 7 3.png

Pada open modelica, saya menggunakan coding sebagai berikut:

Metnum radit 7 1.png

Hail yang didapat adalah sebagai berikut:

Gambar 2020-11-30 092507.png

TUGAS 3


Pada tugas ini kami diminta untuk menghitung defleksi pada setiap batang dan gaya reaksinya.

GambarF.jpg

Coding yang saya guanakan untuk soal ini adalah sebagai kerikut:

  • Class

Fungsi Utama

class QuizSoal1
 parameter Real [:,7] inisiasi = [1, 1, 2,      0, 8, 1.9e6, 36.00;
                                  2, 2, 3, 135.00, 8, 1.9e6, 50.90;
                                  3, 3, 4,      0, 8, 1.9e6, 36.00;
                                  4, 2, 4,  90.00, 8, 1.9e6, 36.00; 
                                  5, 2, 5,  45.00, 8, 1.9e6, 50.90;
                                  6, 4, 5,      0, 8, 1.9e6, 36.00];
                                  
 parameter Integer [:,2] node = [1, 2;
                                 2, 3;
                                 3, 4;
                                 2, 4;
                                 2, 5;
                                 4, 5];
                                 
 parameter Integer y = size(node,1);
 
 parameter Integer x = 2*(size(node_load,1));
 
 parameter Integer z = size(Boundary,1);
 
 parameter Integer [:] Boundary = {1,3};
                              
 parameter Real [:,3] node_load = [1, 0,    0;
                                   2, 0,   -0;
                                   3, 0,    0;
                                   4, 0, -500;
                                   5, 0, -500];
                                   
 parameter Real [2*(size(node_load,1))] load = {0,0,0,0,0,0,0,-500,0,-500};
                                  
 Real [y] k;
 Real [y,4,4] Ke;
 
 Real [y,x,x] Kg;
 
 Real [x,x] KgTot;
 
 Real [x,x] KgB;
 
 Real [x] U;
 
 Real [x] R;
 
equation
 k = {(inisiasi[i,5] * inisiasi[i,6] / inisiasi[i,7]) for i in 1:size(inisiasi,1)};
 Ke = StiffnessMatrixElement(inisiasi);
 
 Kg = StiffnessMatrixGlobal(node, x, y, Ke);
 
 KgTot = SumStiffnessMatrixGlobal(x, y, Kg);

 KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);

 U = GaussJordan(x, KgB, load);

 R = ReactionForce(x, KgTot, U, load);
end QuizSoal1;


  • Funcion

Stiffness Matrix Element

function StiffnessMatrixElement
 input Real [:,7] inisiasi_mat;
 output Real [size(inisiasi_mat,1),4,4] Ke_mat;
 protected
   Real theta;
   Real [3] StiffTrig;
   Real [4,4] StiffTrans;
   Real [size(inisiasi_mat,1)] k_vec;
   Real float_error = 10e-10;
algorithm
 k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / inisiasi_mat[i,7]) 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(3);
 StiffTrans := zeros(4,4);
 
 // Converting degrees to radians
 theta := Modelica.SIunits.Conversions.from_deg(inisiasi_mat[i,4]);
 // {cos^2, sin^2, sincos}
 StiffTrig := {(Modelica.Math.cos(theta))^2,
               (Modelica.Math.sin(theta))^2,
               (Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
 
 // Handle float error elements in StiffTrig
 for t in 1:size(StiffTrig,1) loop
   if abs(StiffTrig[t]) <= float_error then
     StiffTrig[t] := 0;
   end if;
 end for;
 
 // Construct stiffness transformation matrix
 StiffTrans := [  StiffTrig[1],    StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
                  StiffTrig[3],    StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
               -1*StiffTrig[1], -1*StiffTrig[3],    StiffTrig[1],    StiffTrig[3];
               -1*StiffTrig[3], -1*StiffTrig[2],    StiffTrig[3],    StiffTrig[2]];
 
 // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
 for m in 1:4 loop
   for n in 1:4 loop
     Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];
   end for;
 end for;
end for;
end StiffnessMatrixElement;


Stiffness Matrix Global

function StiffnessMatrixGlobal
 input Integer [:,2] n;
 input Integer x;
 input Integer y;
 input Real [y,4,4] Ke_mat; 
 output Real [y,x,x] Kg_mat;
 
algorithm
 for i in 1:y loop
   for a in 1:x loop
     for b in 1:x loop
       Kg_mat[i,a,b]:=0;
     end for;
   end for;
  end for;
 for i in 1:y loop
   Kg_mat[i,2*n[i,1],2*n[i,1]]:=Ke_mat[i,2,2];
   Kg_mat[i,2*n[i,1]-1,2*n[i,1]-1]:=Ke_mat[i,1,1];
   Kg_mat[i,2*n[i,1],2*n[i,1]-1]:=Ke_mat[i,2,1];
   Kg_mat[i,2*n[i,1]-1,2*n[i,1]]:=Ke_mat[i,1,2];
   Kg_mat[i,2*n[i,2],2*n[i,2]]:=Ke_mat[i,4,4];
   Kg_mat[i,2*n[i,2]-1,2*n[i,2]-1]:=Ke_mat[i,3,3];
   Kg_mat[i,2*n[i,2],2*n[i,2]-1]:=Ke_mat[i,4,3];
   Kg_mat[i,2*n[i,2]-1,2*n[i,2]]:=Ke_mat[i,3,4];
   Kg_mat[i,2*n[i,2],2*n[i,1]]:=Ke_mat[i,4,2];
   Kg_mat[i,2*n[i,2]-1,2*n[i,1]-1]:=Ke_mat[i,3,1];
   Kg_mat[i,2*n[i,2],2*n[i,1]-1]:=Ke_mat[i,4,1];
   Kg_mat[i,2*n[i,2]-1,2*n[i,1]]:=Ke_mat[i,3,2];
   Kg_mat[i,2*n[i,1],2*n[i,2]]:=Ke_mat[i,2,4];
   Kg_mat[i,2*n[i,1]-1,2*n[i,2]-1]:=Ke_mat[i,1,3];
   Kg_mat[i,2*n[i,1],2*n[i,2]-1]:=Ke_mat[i,2,3];
   Kg_mat[i,2*n[i,1]-1,2*n[i,2]]:=Ke_mat[i,1,4];
 end for;
end StiffnessMatrixGlobal;


Sum of Stiffness Matrix Global

function SumStiffnessMatrixGlobal
 input Integer x;
 input Integer y;
 input Real [y,x,x] Kg_mat;
 output Real [x,x] KgTot_mat;
 
algorithm
  for a in 1:x loop
   for b in 1:x loop
     KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);
    end for;
   end for;
end SumStiffnessMatrixGlobal;


Implement Boundary Condition

function BoundaryStiffnessMatrixGlobal
 input Integer x;
 input Integer z;
 input Real [x,x] KgTot_met;
 input Integer[z] Boundary_met;
 output Real [x,x] KgB_met;
 
algorithm
 for a in 1:x loop
   for b in 1:x loop
    KgB_met[a,b] := KgTot_met [a,b];
   end for;
  end for; 
 
 for i in 1:x loop
  for a in 1:z loop
   for b in 0:1 loop
     KgB_met[2*(Boundary_met[a])-b,i]:=0;
   end for;
  end for;
 end for;
 for a in 1:z loop
   for b in 0:1 loop
     KgB_met[2*Boundary_met[a]-b,z*Boundary_met[a]-b]:=1;
   end for;
 end for;
  
end BoundaryStiffnessMatrixGlobal;


Gauss-Jordan

function GaussJordan
 input Integer x;
 input Real [x,x] KgB_met;
 input Real [x] load_met;
 output Real [x] U_met;
 Real float_error = 10e-10;
algorithm
 U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);
 for i in 1:x loop
   if abs(U_met[i]) <= float_error then
    U_met[i] := 0;
   end if;
 end for;
end GaussJordan;


Reaction Force

function ReactionForce
 input Integer x;
 input Real [x,x] KgTot_met;
 input Real [x] U_met;
 input Real [x] load_met;
 output Real [x] R_met;
algorithm
 R_met := (KgTot_met*U_met)-load_met;
end ReactionForce;


  Hasil yang didapat adalah sebagai berikut:
Aaaaaaaaaa.PNG

Berikut link untuk mendownload file yang saya gunakan:

https://drive.google.com/drive/folders/1XSDTQOP8a5lig-JMByNTwxOiMWsp_qe8?usp=sharing

PERTEMUAN 4


Membahas tentang pembebeanan statik dan dinamik serta hubungan statika struktur dengan metode numerik.

QUIZ


Pada quiz ini kami diminta mencari defleksi dan gaya reaksi pada struktur berikut.

Soal qius 2.1.jpeg
Soal qius 2.2.jpeg

Pertama kami diminta untuk membuat flowchart untuk proses pengerjaan soal. Flowchart yang digunakan untuk kedua soal ini sama, yaitu:

172900.jpg
172901.jpg


Untuk menyelesaikan soal no.4 saya menggunakan coding berikut:

  • Classd

Fungsi Utama

class QuizSoal1
 parameter Real [:,7] inisiasi = [1, 1, 2,      0, 10e-4, 200e9, 1.00;
                                  2, 2, 3,      0, 10e-4, 200e9, 1.00;
                                  3, 1, 4, 308.66, 10e-4, 200e9, 1.60;
                                  4, 2, 4, 270.00, 10e-4, 200e9, 1.25; 
                                  5, 3, 4, 231.34, 10e-4, 200e9, 1.60];
                                  
 parameter Integer [:,2] node = [1, 2;
                                 2, 3;
                                 1, 4;
                                 2, 4;
                                 3, 4];
            
 parameter Integer y = size(node,1);
 
 parameter Integer x = 2*(size(node_load,1));
 
 parameter Integer z = size(Boundary,1);
 
 parameter Integer [:] Boundary = {1,3};
                              
 parameter Real [:,3] node_load = [1,        0,        0;
                                   2, -1035.28, -3863.70;
                                   3,        0,        0;
                                   4, -1035.28, -3863.70];
                                   
 parameter Real [2*(size(node_load,1))] load = {0,0,-1035.28,-3863.70,0,0,-1035.28,-3863.70};
                                  
 Real [y] k;
 Real [y,4,4] Ke;
 
 Real [y,x,x] Kg;
 
 Real [x,x] KgTot;
 
 Real [x,x] KgB;
 
 Real [x] U;
 
 Real [x] R;
 
equation
 k = {(inisiasi[i,5] * inisiasi[i,6] / inisiasi[i,7]) for i in 1:size(inisiasi,1)};
 Ke = StiffnessMatrixElement(inisiasi);
 
 Kg = StiffnessMatrixGlobal(node, x, y, Ke);
 
 KgTot = SumStiffnessMatrixGlobal(x, y, Kg);

 KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);

 U = GaussJordan(x, KgB, load);

 R = ReactionForce(x, KgTot, U, load);
end QuizSoal1;


  • Function

Stiffness Matrix Element

function StiffnessMatrixElement
 input Real [:,7] inisiasi_mat;
 output Real [size(inisiasi_mat,1),4,4] Ke_mat;
 protected
   Real theta;
   Real [3] StiffTrig;
   Real [4,4] StiffTrans;
   Real [size(inisiasi_mat,1)] k_vec;
   Real float_error = 10e-10;
algorithm
 k_vec := {(inisiasi_mat[i,5] * inisiasi_mat[i,6] / inisiasi_mat[i,7]) 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(3);
 StiffTrans := zeros(4,4);
 
 // Converting degrees to radians
 theta := Modelica.SIunits.Conversions.from_deg(inisiasi_mat[i,4]);
 // {cos^2, sin^2, sincos}
 StiffTrig := {(Modelica.Math.cos(theta))^2,
               (Modelica.Math.sin(theta))^2,
               (Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
 
 // Handle float error elements in StiffTrig
 for t in 1:size(StiffTrig,1) loop
   if abs(StiffTrig[t]) <= float_error then
     StiffTrig[t] := 0;
   end if;
 end for;
 
 // Construct stiffness transformation matrix
 StiffTrans := [  StiffTrig[1],    StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
                  StiffTrig[3],    StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
               -1*StiffTrig[1], -1*StiffTrig[3],    StiffTrig[1],    StiffTrig[3];
               -1*StiffTrig[3], -1*StiffTrig[2],    StiffTrig[3],    StiffTrig[2]];
 
 // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
 for m in 1:4 loop
   for n in 1:4 loop
     Ke_mat[i,m,n] := k_vec[i] * StiffTrans[m,n];
   end for;
 end for;
end for;
end StiffnessMatrixElement;


Stiffness Matrix Global

function StiffnessMatrixGlobal
 input Integer [:,2] n;
 input Integer x;
 input Integer y;
 input Real [y,4,4] Ke_mat; 
 output Real [y,x,x] Kg_mat;
 
algorithm
 for i in 1:y loop
   for a in 1:x loop
     for b in 1:x loop
       Kg_mat[i,a,b]:=0;
     end for;
   end for;
  end for;
 for i in 1:y loop
   Kg_mat[i,2*n[i,1],2*n[i,1]]:=Ke_mat[i,2,2];
   Kg_mat[i,2*n[i,1]-1,2*n[i,1]-1]:=Ke_mat[i,1,1];
   Kg_mat[i,2*n[i,1],2*n[i,1]-1]:=Ke_mat[i,2,1];
   Kg_mat[i,2*n[i,1]-1,2*n[i,1]]:=Ke_mat[i,1,2];
   Kg_mat[i,2*n[i,2],2*n[i,2]]:=Ke_mat[i,4,4];
   Kg_mat[i,2*n[i,2]-1,2*n[i,2]-1]:=Ke_mat[i,3,3];
   Kg_mat[i,2*n[i,2],2*n[i,2]-1]:=Ke_mat[i,4,3];
   Kg_mat[i,2*n[i,2]-1,2*n[i,2]]:=Ke_mat[i,3,4];
   Kg_mat[i,2*n[i,2],2*n[i,1]]:=Ke_mat[i,4,2];
   Kg_mat[i,2*n[i,2]-1,2*n[i,1]-1]:=Ke_mat[i,3,1];
   Kg_mat[i,2*n[i,2],2*n[i,1]-1]:=Ke_mat[i,4,1];
   Kg_mat[i,2*n[i,2]-1,2*n[i,1]]:=Ke_mat[i,3,2];
   Kg_mat[i,2*n[i,1],2*n[i,2]]:=Ke_mat[i,2,4];
   Kg_mat[i,2*n[i,1]-1,2*n[i,2]-1]:=Ke_mat[i,1,3];
   Kg_mat[i,2*n[i,1],2*n[i,2]-1]:=Ke_mat[i,2,3];
   Kg_mat[i,2*n[i,1]-1,2*n[i,2]]:=Ke_mat[i,1,4];
 end for;
end StiffnessMatrixGlobal;


Sum of Stiffness Matrix Global

function SumStiffnessMatrixGlobal
 input Integer x;
 input Integer y;
 input Real [y,x,x] Kg_mat;
 output Real [x,x] KgTot_mat;
 
algorithm
  for a in 1:x loop
   for b in 1:x loop
     KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);
    end for;
   end for;
end SumStiffnessMatrixGlobal;


Implement Boundary Condition

function BoundaryStiffnessMatrixGlobal
 input Integer x;
 input Integer z;
 input Real [x,x] KgTot_met;
 input Integer[z] Boundary_met;
 output Real [x,x] KgB_met;
 
algorithm
 for a in 1:x loop
   for b in 1:x loop
    KgB_met[a,b] := KgTot_met [a,b];
   end for;
  end for; 
 
 for i in 1:x loop
  for a in 1:z loop
   for b in 0:1 loop
     KgB_met[2*(Boundary_met[a])-b,i]:=0;
   end for;
  end for;
 end for;
 for a in 1:z loop
   for b in 0:1 loop
     KgB_met[2*Boundary_met[a]-b,z*Boundary_met[a]-b]:=1;
   end for;
 end for;
  
end BoundaryStiffnessMatrixGlobal;


Gauss-Jordan

function GaussJordan
 input Integer x;
 input Real [x,x] KgB_met;
 input Real [x] load_met;
 output Real [x] U_met;
 Real float_error = 10e-10;
algorithm
 U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);
 for i in 1:x loop
   if abs(U_met[i]) <= float_error then
    U_met[i] := 0;
   end if;
 end for;
end GaussJordan;


Reaction Force

function ReactionForce
 input Integer x;
 input Real [x,x] KgTot_met;
 input Real [x] U_met;
 input Real [x] load_met;
 output Real [x] R_met;
algorithm
 R_met := (KgTot_met*U_met)-load_met;
end ReactionForce;


Hasil yang didapat sebagai berikut:

Adad.PNG


Untuk menyelesaikan soal no.8 saya menggunakan coding berikut:

  • Class

Fungsi Utama

class QuizSoal1
 parameter Real [:,9] inisiasi = [1, 1, 2, -0.8,    0, -0.6, 15e-4, 70e9, 2.5;
                                  2, 1, 3, -0.8, -0.6,    0, 15e-4, 70e9, 2.5;
                                  3, 1, 4, -0.8,    0,  0.6, 15e-4, 70e9, 2.5];
                                  
 parameter Integer [:,2] node = [1, 2;
                                 1, 3;
                                 1, 4];
                                 
 parameter Integer y = size(node,1);
 
 parameter Integer x = 3*(size(node_load,1));
 
 parameter Integer z = size(Boundary,1);
 
 parameter Integer [:] Boundary = {2,3,4};
                              
 parameter Real [:,4] node_load = [1, 0, -5000, 0;
                                   2, 0,     0, 0;
                                   3, 0,     0, 0;
                                   4, 0,     0, 0];
                                   
 parameter Real [x] load = {0,-5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
                                  
 Real [y] k;
 Real [y,6,6] Ke;
 
 Real [y,x,x] Kg;
 
 Real [x,x] KgTot;
 
 Real [x,x] KgB;
 
 Real [x] U;
 
 Real [x] R;
 
equation
 k = {(inisiasi[i,7] * inisiasi[i,8] / inisiasi[i,9]) for i in 1:y};
 Ke = StiffnessMatrixElement(inisiasi);

 Kg = StiffnessMatrixGlobal(node, x, y, Ke);

 KgTot = SumStiffnessMatrixGlobal(x, y, Kg);

 KgB = BoundaryStiffnessMatrixGlobal(x, z, KgTot, Boundary);

 U = GaussJordan(x, KgB, load);

 R = ReactionForce(x, KgTot, U, load);
end QuizSoal1;


  • Function

Stiffness Matrix Element

function StiffnessMatrixElement
 input Real [:,9] 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)] k_vec;
algorithm
 k_vec := {(inisiasi_mat[i,7] * inisiasi_mat[i,8] / inisiasi_mat[i,9]) 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,4];
 cos_y := inisiasi_mat[i,5];
 cos_z := inisiasi_mat[i,6];
 // {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 StiffnessMatrixGlobal
 input Integer [:,2] n;
 input Integer x;
 input Integer y;
 input Real [y,6,6] Ke_mat; 
 output Real [y,x,x] Kg_mat;
 
algorithm
 for i in 1:y loop
   for a in 1:x loop
     for b in 1:x loop
       Kg_mat[i,a,b]:=0;
     end for;
   end for;
  end for;
 for i in 1:y 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 of Stiffness Matrix Global

function SumStiffnessMatrixGlobal
 input Integer x;
 input Integer y;
 input Real [y,x,x] Kg_mat;
 output Real [x,x] KgTot_mat;
 
algorithm
  for a in 1:x loop
   for b in 1:x loop
     KgTot_mat[a,b] := sum(Kg_mat [:,a,b]);
    end for;
   end for;
end SumStiffnessMatrixGlobal;


Implement Boundary Condition

function BoundaryStiffnessMatrixGlobal
 input Integer x;
 input Integer z;
 input Real [x,x] KgTot_met;
 input Integer[z] Boundary_met;
 output Real [x,x] KgB_met;
 
algorithm
 for a in 1:x loop
   for b in 1:x loop
    KgB_met[a,b] := KgTot_met [a,b];
   end for;
  end for; 
 
 for i in 1:x loop
  for a in 1:z loop
   for b in 0:2 loop
     KgB_met[3*(Boundary_met[a])-b,i]:=0;
   end for;
  end for;
 end for;
 for a in 1:z loop
   for b in 0:2 loop
     KgB_met[3*Boundary_met[a]-b,3*Boundary_met[a]-b]:=1;
   end for;
 end for;
  
end BoundaryStiffnessMatrixGlobal;


Gauss-Jordan

function GaussJordan
 input Integer x;
 input Real [x,x] KgB_met;
 input Real [x] load_met;
 output Real [x] U_met;
 
 protected
 Real float_error = 10e-10;
algorithm
 U_met:=Modelica.Math.Matrices.solve(KgB_met,load_met);
 for i in 1:x loop
   if abs(U_met[i]) <= float_error then
    U_met[i] := 0;
   end if;
 end for;
end GaussJordan;


Reaction Force

function ReactionForce
 input Integer x;
 input Real [x,x] KgTot_met;
 input Real [x] U_met;
 input Real [x] load_met;
 output Real [x] R_met;
algorithm
 R_met := (KgTot_met*U_met)-load_met;
end ReactionForce;


Hasil yang didapat sebagai berikut:

AlalaaaalaPNG.png

File yang saya guanakan dapat didownload di: https://drive.google.com/drive/folders/1AnQHiRUe-K2XEDtH4xx4_cW30bjYSly-?usp=sharing