Difference between revisions of "Ethanael Hanusa"

From ccitonlinewiki
Jump to: navigation, search
Line 173: Line 173:
 
Selanjutnya ada tugas 3 dimana saya membuat pr dari buku mengenai trust dan saya membuat pseucodenya seperti berikut yang dijalankan dalam openmodelica
 
Selanjutnya ada tugas 3 dimana saya membuat pr dari buku mengenai trust dan saya membuat pseucodenya seperti berikut yang dijalankan dalam openmodelica
 
====OpenModelica====
 
====OpenModelica====
 +
 
  '''Truss'''
 
  '''Truss'''
 +
 
  class PR3
 
  class PR3
 
  parameter Integer N=8; //Bentuk Matrix, 2 titik bertemu
 
  parameter Integer N=8; //Bentuk Matrix, 2 titik bertemu
 
   parameter Real A=0.001;// luas cross section truss
 
   parameter Real A=0.001;// luas cross section truss
   parameter Real E=200e9;//Modulus Elastisitas  
+
   parameter Real E=200e9;//Modulus Elastisitas   
   
 
 
   Real Kg[N,N];  
 
   Real Kg[N,N];  
 
   Real Kginitial[N,N];  
 
   Real Kginitial[N,N];  
Line 185: Line 186:
 
   Real R[N];
 
   Real R[N];
 
   Real SolMat[N,1];
 
   Real SolMat[N,1];
   Real XMat[N,1];
+
   Real XMat[N,1];
 
 
 
   Real L1=1;
 
   Real L1=1;
 
   Real L2=1;
 
   Real L2=1;
Line 192: Line 192:
 
   Real L4=1.25;
 
   Real L4=1.25;
 
   Real L5=1.6;
 
   Real L5=1.6;
 
 
   Real Tetha1=functiondegtorad(0);//Diperoleh dari perhitungan
 
   Real Tetha1=functiondegtorad(0);//Diperoleh dari perhitungan
 
   Real Tetha2=functiondegtorad(0);//Diperoleh dari perhitungan
 
   Real Tetha2=functiondegtorad(0);//Diperoleh dari perhitungan
Line 198: Line 197:
 
   Real Tetha4=functiondegtorad(270);//Diperoleh dari perhitungan
 
   Real Tetha4=functiondegtorad(270);//Diperoleh dari perhitungan
 
   Real Tetha5=functiondegtorad(308.66);//Diperoleh dari perhitungan
 
   Real Tetha5=functiondegtorad(308.66);//Diperoleh dari perhitungan
 
+
    //Boundary
  //Boundary
 
 
   Integer b1=1;
 
   Integer b1=1;
   Integer b2=3;
+
   Integer b2=3;  
 
 
  //Truss 1
 
  //Truss 1
 
   Real X1=Tetha1;
 
   Real X1=Tetha1;
Line 209: Line 206:
 
   Integer p1x=1;
 
   Integer p1x=1;
 
   Integer p1y=2;
 
   Integer p1y=2;
   Real Kg1[N,N];
+
   Real Kg1[N,N];  
 
 
  //Truss 2
 
  //Truss 2
 
   Real X2=Tetha2;
 
   Real X2=Tetha2;
Line 217: Line 213:
 
   Integer p2x=2;
 
   Integer p2x=2;
 
   Integer p2y=3;
 
   Integer p2y=3;
   Real Kg2[N,N];
+
   Real Kg2[N,N];  
 
 
  //Truss 3
 
  //Truss 3
 
   Real X3=Tetha3;
 
   Real X3=Tetha3;
Line 225: Line 220:
 
   Integer p3x=2;
 
   Integer p3x=2;
 
   Integer p3y=4;
 
   Integer p3y=4;
   Real Kg3[N,N];
+
   Real Kg3[N,N];  
 
 
  //Truss 4
 
  //Truss 4
 
   Real X4=Tetha4;
 
   Real X4=Tetha4;
Line 233: Line 227:
 
   Integer p4x=1;
 
   Integer p4x=1;
 
   Integer p4y=4;
 
   Integer p4y=4;
   Real Kg4[N,N];
+
   Real Kg4[N,N];  
 
 
  //Truss 5
 
  //Truss 5
 
   Real X5=Tetha5;
 
   Real X5=Tetha5;
Line 241: Line 234:
 
   Integer p5x=3;
 
   Integer p5x=3;
 
   Integer p5y=4;
 
   Integer p5y=4;
   Real Kg5[N,N];
+
   Real Kg5[N,N];  
+
  algorithm  
  algorithm
 
 
 
  //Pembuatan K Global
 
  //Pembuatan K Global
 
   K1:=Matrix(X1);
 
   K1:=Matrix(X1);
   Kg1:=k1*Lokal(K1,N,p1x,p1y);
+
   Kg1:=k1*Lokal(K1,N,p1x,p1y);  
 
 
   K2:=Matrix(X2);
 
   K2:=Matrix(X2);
   Kg2:=k2*Lokal(K2,N,p2x,p2y);
+
   Kg2:=k2*Lokal(K2,N,p2x,p2y);  
 
 
   K3:=Matrix(X3);
 
   K3:=Matrix(X3);
   Kg3:=k3*Lokal(K3,N,p3x,p3y);
+
   Kg3:=k3*Lokal(K3,N,p3x,p3y);  
 
 
   K4:=Matrix(X4);
 
   K4:=Matrix(X4);
   Kg4:=k4*Lokal(K4,N,p4x,p4y);
+
   Kg4:=k4*Lokal(K4,N,p4x,p4y);  
 
 
   K5:=Matrix(X5);
 
   K5:=Matrix(X5);
   Kg5:=k5*Lokal(K5,N,p5x,p5y);
+
   Kg5:=k5*Lokal(K5,N,p5x,p5y);  
 
 
   Kg:=Kg1+Kg2+Kg3+Kg4+Kg5;
 
   Kg:=Kg1+Kg2+Kg3+Kg4+Kg5;
   Kginitial:=Kg;
+
   Kginitial:=Kg;  
 
 
  //Implementing boundary
 
  //Implementing boundary
 
   for i in 1:N loop
 
   for i in 1:N loop
Line 270: Line 255:
 
   Kg[2*b2-1,i]:=0;
 
   Kg[2*b2-1,i]:=0;
 
   Kg[2*b2,i]:=0;
 
   Kg[2*b2,i]:=0;
   end for;
+
   end for;  
 
 
   Kg[2*b1-1,2*b1-1]:=1;
 
   Kg[2*b1-1,2*b1-1]:=1;
 
   Kg[2*b1,2*b1]:=1;
 
   Kg[2*b1,2*b1]:=1;
 
   Kg[2*b2-1,2*b2-1]:=1;
 
   Kg[2*b2-1,2*b2-1]:=1;
 
   Kg[2*b2,2*b2]:=1;
 
   Kg[2*b2,2*b2]:=1;
+
  //Displacement
  //Solving displacement
+
   Sol:=gaussjordan(N,Kg,X);  
   Sol:=gaussjordan(N,Kg,X);
+
  //Gaya reaksi
 
  //Solving reaction force
 
 
   SolMat:=matrix(Sol);
 
   SolMat:=matrix(Sol);
 
   XMat:=matrix(X);
 
   XMat:=matrix(X);
Line 287: Line 269:
  
 
  '''Lokal'''
 
  '''Lokal'''
 +
 
  function Lokal
 
  function Lokal
 
  input Real Y[4,4];
 
  input Real Y[4,4];
Line 293: Line 276:
 
  input Integer p2;
 
  input Integer p2;
 
  output Real G[B,B];
 
  output Real G[B,B];
 
 
  algorithm
 
  algorithm
 
 
  for i in 1:B loop
 
  for i in 1:B loop
 
  for j in 1:B loop
 
  for j in 1:B loop
Line 301: Line 282:
 
  end for;
 
  end for;
 
  end for;
 
  end for;
 
 
  G[2*p1,2*p1]:=Y[2,2];
 
  G[2*p1,2*p1]:=Y[2,2];
 
  G[2*p1-1,2*p1-1]:=Y[1,1];
 
  G[2*p1-1,2*p1-1]:=Y[1,1];
 
  G[2*p1,2*p1-1]:=Y[2,1];
 
  G[2*p1,2*p1-1]:=Y[2,1];
 
  G[2*p1-1,2*p1]:=Y[1,2];
 
  G[2*p1-1,2*p1]:=Y[1,2];
 
 
  G[2*p2,2*p2]:=Y[4,4];
 
  G[2*p2,2*p2]:=Y[4,4];
 
  G[2*p2-1,2*p2-1]:=Y[3,3];
 
  G[2*p2-1,2*p2-1]:=Y[3,3];
 
  G[2*p2,2*p2-1]:=Y[4,3];
 
  G[2*p2,2*p2-1]:=Y[4,3];
 
  G[2*p2-1,2*p2]:=Y[3,4];
 
  G[2*p2-1,2*p2]:=Y[3,4];
 
 
  G[2*p2,2*p1]:=Y[4,2];
 
  G[2*p2,2*p1]:=Y[4,2];
 
  G[2*p2-1,2*p1-1]:=Y[3,1];
 
  G[2*p2-1,2*p1-1]:=Y[3,1];
 
  G[2*p2,2*p1-1]:=Y[4,1];
 
  G[2*p2,2*p1-1]:=Y[4,1];
 
  G[2*p2-1,2*p1]:=Y[3,2];
 
  G[2*p2-1,2*p1]:=Y[3,2];
 
 
  G[2*p1,2*p2]:=Y[2,4];
 
  G[2*p1,2*p2]:=Y[2,4];
 
  G[2*p1-1,2*p2-1]:=Y[1,3];
 
  G[2*p1-1,2*p2-1]:=Y[1,3];
Line 324: Line 301:
  
 
  '''Reaksi'''
 
  '''Reaksi'''
 +
 
  function Reaksi
 
  function Reaksi
 
  input Integer N;
 
  input Integer N;
Line 333: Line 311:
 
  Real X[N,1];
 
  Real X[N,1];
 
  Real float_error = 10e-10;
 
  Real float_error = 10e-10;
 
 
  algorithm
 
  algorithm
 
  X:=A*B-C;
 
  X:=A*B-C;
 
 
  for i in 1:N loop
 
  for i in 1:N loop
 
  if abs(X[i,1]) <= float_error then
 
  if abs(X[i,1]) <= float_error then
Line 342: Line 318:
 
  end if;
 
  end if;
 
  end for;
 
  end for;
 
 
  for i in 1:N loop
 
  for i in 1:N loop
 
   Sol[i]:=X[i,1];
 
   Sol[i]:=X[i,1];
Line 349: Line 324:
  
 
  '''Matrix'''
 
  '''Matrix'''
 +
 
  function Matrix
 
  function Matrix
 
  input Real A;
 
  input Real A;
 
  output Real X[4,4];
 
  output Real X[4,4];
 
 
  protected
 
  protected
 
   Real Y;
 
   Real Y;
 
   Real float_error = 10e-10;
 
   Real float_error = 10e-10;
 
   final constant Real pi=2*Modelica.Math.asin(1.0);
 
   final constant Real pi=2*Modelica.Math.asin(1.0);
 
 
  algorithm
 
  algorithm
 
+
  Y:=A/180*pi;
  Y:=A/180*pi;
 
   
 
 
  X:=[(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y);
 
  X:=[(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y);
 
 
  Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2;
 
  Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2;
 
 
  -(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y);
 
  -(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y);
 
 
  -Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2];
 
  -Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2];
 
 
  for i in 1:4 loop
 
  for i in 1:4 loop
 
  for j in 1:4 loop
 
  for j in 1:4 loop
Line 377: Line 345:
 
  end for;
 
  end for;
 
  end for;
 
  end for;
 
 
  end Matrix;
 
  end Matrix;
  
 
  '''functiondegtorad'''
 
  '''functiondegtorad'''
 +
 
  function functiondegtorad
 
  function functiondegtorad
 
  input Real deg;
 
  input Real deg;
Line 387: Line 355:
 
  constant Real pi = 3.14;
 
  constant Real pi = 3.14;
 
  algorithm
 
  algorithm
 
 
  rad:=deg*pi/180;
 
  rad:=deg*pi/180;
 
 
  end functiondegtorad;
 
  end functiondegtorad;
  
 
  '''gaussjordan'''
 
  '''gaussjordan'''
 +
 
  function gaussjordan
 
  function gaussjordan
 
 
 
  input Integer N;
 
  input Integer N;
 
  input Real A[N,N];
 
  input Real A[N,N];
 
  input Real B[N];
 
  input Real B[N];
 
  output Real X[N];
 
  output Real X[N];
 
 
 
  protected
 
  protected
 
  Real float_error = 10e-10;
 
  Real float_error = 10e-10;
 
 
  algorithm
 
  algorithm
 
  X:=Modelica.Math.Matrices.solve(A,B);
 
  X:=Modelica.Math.Matrices.solve(A,B);
 
 
  for i in 1:N loop
 
  for i in 1:N loop
 
   if abs(X[i]) <= float_error then
 
   if abs(X[i]) <= float_error then
Line 413: Line 374:
 
   end if;
 
   end if;
 
  end for;
 
  end for;
 
 
  end gaussjordan;
 
  end gaussjordan;

Revision as of 14:51, 2 December 2020

Ethanael Hanusa

Biodata Diri

Nama  :Ethanael Hanusa

Tempat,Tanggal Lahir:Jakarta,24 oktober 2000


Saya merupakan seorang mahasiswa FTUI angkatan 2018 jurusan Teknik Mesin. Saya merupakan salah satu ciptaan terbaik Tuhan yang Maha Esa, karena pada prinsipnya Tuhan Yang Maha Esa itu mendesain manusia dengan sebaik-baiknya makhluk.

Metode Numerik

Selama mengikuti perkuliahan di jurusan teknik mesin, saya telah mempelajari mata kuliah metode numerik selama 1/2 semester. Selama 1/2 semester saya telah mempelajari banyak hal seperti, metode Newton Raphson, metode seccant, metode bisection, interpolasi, regresi liner, dan lain-lain. Setelah mempelajari hal tersebut saya merasa metode numerik berguna dalam kehidupan saya sehari-hari, dimana saat saya melakukan percobaan di lab, akan memperoleh data, data tersebut dapat diolah menggunakan regresi linear agar mendapatkan jawaban yang dicari.

Tujuan Metode Numerik:

  • 1. Memahami konsep-konsep dan prinsip-prinsip dasar dalam metode numerik. Contoh:Persamaan Alajabar, algoritma, dan lain-lain
  • 2. Mengerti aplikasi metode numerik
  • 3. Mampu menerapkan metode numerik dalam persoalan teknik
  • 4. Mendapat nilai tambah /adab sehingga kita menjadi orang yang lebih beradab

Sebelum UTS saya sudah emmeplajari banyak hal seperti: Metode Newton raphson, metode seccat, regresi linear, interpolasi, dan lain-lian, dan belajar menggunakan excel untuk menyelesaikan persamaan-persamaan tersebut

Pertemuan 11 November 2020

Pada pertemuan hari Rabu, 11 November 2020 saya mempelajari bahwa walaupun dengan menggunakan komputer yang katanya "pintar" tidak selalu dapat memcahkan semua masalah karena memiliki limit ,dan sebenarnya bodoh. Kitalah sebagai user dari komputer tersebut yang pintar dan dapat memperoleh pemecahan masalah tersebut. Namun tidak semua masalah dapt dipecahkan oleh manusia karena banyak ketidaktahuan manusia. Ketidaktahuan manusia inilah yang harus membuat kita sebagai manusia tidak sombong. karena pada sejatinya hanyalah Tuhan yang Maha Esa yang mengetahui semua hal.

Openmodelica

Saya belajar mengenai openmodelica secara online dan akan saya share apa yang sudah saya pelajari

Pertemuan Rabu 18 November 2020

Pada hari rabu 18 November 2020 saya mengikuti kelas metode numerik pukul 16.00 Pada hari ini saya belajar mengenai openmodelica dari teman-teman sekelas saya dengan berbagai macam kasus yang ada. Setelah saya belajar mengenai specialization model pada openmodelica pada sebelumnya, pada hari ini saya mempelajari mengenai openmodelica dengan specialization class dan function, saya membuat fungsi sebuah kelas dan membuat fungsi yang dapat memanggil fungsi kelas tersebut

Openmodelica

Saya belajar mengenai fungsi panggil dan dapat menyelesaikan persamaan menggunakan metode gauss di openmodelica

Pertemuan Rabu, 25 November 2020

Pada pertemuan hari rabu.25 november 2020 ada diskusi mengenai openmeodelica yang dijelaskan oleh teman kami, josiah enrico. josiah membuat openmodelica untuk menjelaskan mengenai fungsi array, menggunakan pembuatan metode newton raphson. Untuk fungsi array sendiri diperlukan karena ada banyak masalah yang tidak selesai berupa satu solusi namun berupa himpunan penyelesaian. Selanjutnya saya mempelajari bagaimana cara membuat openmodelica untuk gauss jordan dengan membuat fungsi sendiri. Saudara christo mengajarkan kami di kelas bagaimana cara membuatnya. Saudara Christo mengajarkan saya menggunakan kode dengan cara seperti berikut:

GaussJordan.mo

function GaussJordan

input Real [:,:] A;
output Real [:,:] B;

protected // untuk local variable
Integer h = 1;    //pivot row
Integer k = 1;    //pivot coloumn
Integer m = size(A,1); //Number of row
Integer n = size(A,2); //Number of column
Integer c = 0;
Integer max_row; // Row index of max number in pivot column

Real [:] pivot_column;
Real [:] pivot_row;
Real [:,:] temp_array;
Real r;

Real float_error = 10e-10;


algorithm

//fungsi input A dan output B 
B := A;
  
while h <= m and k <= n loop

  for i in 1 : m loop
    for j in 1 : n loop
     if abs(B[i,j]) <= float_error then
       B[i,j] := 0;
      end if;
    end for;
  end for;

//Finding pivot 
  pivot_column:= {B[i,h] for i in h:m};
  
    //Mencari baris terbawah yang mempunyai nilai pivot tertinggi
    c:=h-1;
    for element in pivot_column loop
      c:= c+1;
      if abs(element)== max(abs(pivot_column)) then
        max_row :=c;
      end if;
    end for;
    
  //Jika tidak ada pivot di kolom ini, pindah ke kolom selanjutnya
  if B[max_row,k] == 0 then
    k:=k+1;
   
  else 
    // tukar row h - max_row
    temp_array := B;
    temp_array[h] := B[max_row];
    temp_array[max_row] := B[h];
    B:= temp_array;
    
    //devide pivot row by pivot number
     B[h] := B[h]/B[h,k];
     
     for i in (h+1) :m loop
       r := B[i,k]/B[h,k];
      
      B[i,k]:=0;
      
      for j in (k+1) : n loop
        B[i,j] := B[i,j]-B[h,j] * r;
      end for;
    end for;
    
    //move ke pivot kolom dan row selanjutnya
    h := h+1;
    k := k+1;
    
  end if;
  
end while;

// proses dari kanan atas
h :=m;
k :=n;

while h >=1 and k>=1 loop
  
  //dealing with error
  for i in 1:m loop
    for j in 1:n loop
      if abs(B[i,j]) <=float_error then
        B[i,j]:=0;
      end if;
    end for;
  end for; 

//finding pivot 
    pivot_row := {B[h,i] for i in 1:k};
    
    //Get position index k of pivot 
    c := 0;
    for element in pivot_row loop
      c := c+1;
      if element <> 0 then
        break;
      end if;
    end for;
    k:= c;
    
  // no pivot in this row, move to next row
  if B[h,k] == 0 then 
    h:= h-1;
    
  else
    //perform row operatation
    for i in 1:(h-1) loop
      r := B[i,k];
      B[i] := B[i] - B[h] *r;
    end for;
    
    //move to next pivot row dan column
    h:=h+1;
    k:=k+1;
    
  end if;
  
end while;
    
     
end GaussJordan;

Tugas 3

Selanjutnya ada tugas 3 dimana saya membuat pr dari buku mengenai trust dan saya membuat pseucodenya seperti berikut yang dijalankan dalam openmodelica

OpenModelica

Truss
class PR3
parameter Integer N=8; //Bentuk Matrix, 2 titik bertemu
 parameter Real A=0.001;// luas cross section truss
 parameter Real E=200e9;//Modulus Elastisitas  
 Real Kg[N,N]; 
 Real Kginitial[N,N]; 
 Real Sol[N]; 
 Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};
 Real R[N];
 Real SolMat[N,1];
 Real XMat[N,1];  
 Real L1=1;
 Real L2=1;
 Real L3=1.6;
 Real L4=1.25;
 Real L5=1.6;
 Real Tetha1=functiondegtorad(0);//Diperoleh dari perhitungan
 Real Tetha2=functiondegtorad(0);//Diperoleh dari perhitungan
 Real Tetha3=functiondegtorad(231.34);//Diperoleh dari perhitungan
 Real Tetha4=functiondegtorad(270);//Diperoleh dari perhitungan
 Real Tetha5=functiondegtorad(308.66);//Diperoleh dari perhitungan
   //Boundary
  Integer b1=1;
  Integer b2=3; 
//Truss 1
 Real X1=Tetha1;
 Real k1=A*E/L1;
 Real K1[4,4];
 Integer p1x=1;
 Integer p1y=2;
 Real Kg1[N,N]; 
//Truss 2
 Real X2=Tetha2;
 Real k2=A*E/L2;
 Real K2[4,4];
 Integer p2x=2;
 Integer p2y=3;
 Real Kg2[N,N]; 
//Truss 3
 Real X3=Tetha3;
 Real k3=A*E/L3;
 Real K3[4,4];
 Integer p3x=2;
 Integer p3y=4;
 Real Kg3[N,N]; 
//Truss 4
 Real X4=Tetha4;
 Real k4=A*E/L4;
 Real K4[4,4];
 Integer p4x=1;
 Integer p4y=4;
 Real Kg4[N,N]; 
//Truss 5
 Real X5=Tetha5;
 Real k5=A*E/L5;
 Real K5[4,4];
 Integer p5x=3;
 Integer p5y=4;
 Real Kg5[N,N]; 
algorithm 
//Pembuatan K Global
 K1:=Matrix(X1);
 Kg1:=k1*Lokal(K1,N,p1x,p1y); 
 K2:=Matrix(X2);
 Kg2:=k2*Lokal(K2,N,p2x,p2y); 
 K3:=Matrix(X3);
 Kg3:=k3*Lokal(K3,N,p3x,p3y); 
 K4:=Matrix(X4);
 Kg4:=k4*Lokal(K4,N,p4x,p4y); 
 K5:=Matrix(X5);
 Kg5:=k5*Lokal(K5,N,p5x,p5y); 
 Kg:=Kg1+Kg2+Kg3+Kg4+Kg5;
 Kginitial:=Kg; 
//Implementing boundary
 for i in 1:N loop
  Kg[2*b1-1,i]:=0;
  Kg[2*b1,i]:=0;
  Kg[2*b2-1,i]:=0;
  Kg[2*b2,i]:=0;
 end for; 
 Kg[2*b1-1,2*b1-1]:=1;
 Kg[2*b1,2*b1]:=1;
 Kg[2*b2-1,2*b2-1]:=1;
 Kg[2*b2,2*b2]:=1;
//Displacement
 Sol:=gaussjordan(N,Kg,X); 
//Gaya reaksi
 SolMat:=matrix(Sol);
 XMat:=matrix(X);
 R:=Reaksi(N,Kginitial,SolMat,XMat);
end PR3;
Lokal
function Lokal
input Real Y[4,4];
input Integer B;
input Integer p1;
input Integer p2;
output Real G[B,B];
algorithm
for i in 1:B loop
for j in 1:B loop
    G[i,j]:=0;
end for;
end for;
G[2*p1,2*p1]:=Y[2,2];
G[2*p1-1,2*p1-1]:=Y[1,1];
G[2*p1,2*p1-1]:=Y[2,1];
G[2*p1-1,2*p1]:=Y[1,2];
G[2*p2,2*p2]:=Y[4,4];
G[2*p2-1,2*p2-1]:=Y[3,3];
G[2*p2,2*p2-1]:=Y[4,3];
G[2*p2-1,2*p2]:=Y[3,4];
G[2*p2,2*p1]:=Y[4,2];
G[2*p2-1,2*p1-1]:=Y[3,1];
G[2*p2,2*p1-1]:=Y[4,1];
G[2*p2-1,2*p1]:=Y[3,2];
G[2*p1,2*p2]:=Y[2,4];
G[2*p1-1,2*p2-1]:=Y[1,3];
G[2*p1,2*p2-1]:=Y[2,3];
G[2*p1-1,2*p2]:=Y[1,4];
end Lokal;
Reaksi
function Reaksi
input Integer N;
input Real A[N,N];
input Real B[N,1];
input Real C[N,1];
output Real Sol[N];
protected
Real X[N,1];
Real float_error = 10e-10;
algorithm
X:=A*B-C;
for i in 1:N loop
if abs(X[i,1]) <= float_error then
  X[i,1] := 0;
end if;
end for;
for i in 1:N loop
 Sol[i]:=X[i,1];
end for;
end Reaksi;
Matrix
function Matrix
input Real A;
output Real X[4,4];
protected
 Real Y;
 Real float_error = 10e-10;
 final constant Real pi=2*Modelica.Math.asin(1.0);
algorithm
Y:=A/180*pi;  
X:=[(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y);
Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2;
-(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y);
-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2];
for i in 1:4 loop
for j in 1:4 loop
  if abs(X[i,j]) <= float_error then
    X[i,j] := 0;
  end if;
end for;
end for;
end Matrix;
functiondegtorad
function functiondegtorad
input Real deg;
output Real rad;
protected
constant Real pi = 3.14;
algorithm
rad:=deg*pi/180;
end functiondegtorad;
gaussjordan
function gaussjordan
input Integer N;
input Real A[N,N];
input Real B[N];
output Real X[N];
protected
Real float_error = 10e-10;
algorithm
X:=Modelica.Math.Matrices.solve(A,B);
for i in 1:N loop
 if abs(X[i]) <= float_error then
   X[i] := 0;
 end if;
end for;
end gaussjordan;