Difference between revisions of "Oka Widiantara Suputra"

From ccitonlinewiki
Jump to: navigation, search
 
(One intermediate revision by the same user not shown)
Line 619: Line 619:
  
 
== UAS ==
 
== UAS ==
 +
Berikut merupakan hasil jawaban UAS Saya
 +
 +
[[File:OkaUAS1.jpg|360px|center]]
 +
 +
[[File:OkaUAS2.jpg|360px|center]]
 +
 +
[[File:OkaUAS3.jpg|360px|center]]
 +
 +
 +
'''Coding OM'''
 +
 +
model UAS_2DTrussSafety
 +
//Oka W Suputra 1806149236 Metnum 02
 +
  //define initial variable
 +
  parameter Integer Points = size(P, 1);
 +
    //Number of Points
 +
  parameter Integer Trusses = size(C, 1);
 +
    //Number of Trusses
 +
  parameter Real Yield = 214e6;
 +
    //Yield Strength (Pa)
 +
  parameter Real Area = 25;
 +
    //Area L Profile
 +
  parameter Real Elas = 68.9e9;
 +
    //Elasticity Al 6061  (Pa)
 +
    //define connection
 +
  parameter Integer C[:, 2] = [1, 2; 1, 3; 1, 4];
 +
    //define coordinates (please put orderly)
 +
  parameter Real P[:, 6] = [0, 0, 0, 1, 1, 1;          //1
 +
                            6.5, 6.5, 36.5, 1, 1, 1;  //2
 +
                            6.5, 6.5, 36.5, 1, 1, 1;  //3
 +
                            6.5, 6.5, 36.5, 1, 1, 1];  //4
 +
    //define external force (please put orderly)
 +
  parameter Real F[Points * 3] = {0,0,0,0,3708180,0,0,3708180,0,0,3708180,0};
 +
    //solution
 +
  Real displacement[N], reaction[N];
 +
  Real check[3];
 +
  Real stress1[Trusses];
 +
  Real safety[Trusses];
 +
  Real dis[3];
 +
  Real Str[3];
 +
protected
 +
  parameter Integer N = 3 * Points;
 +
  Real q1[3], q2[3], g[N, N], G[N, N], G_star[N, N], id[N, N] = identity(N), cx, cy, cz, L, X[3, 3];
 +
  Real err = 10e-10, ers = 10e-4;
 +
algorithm
 +
    //Creating Global Matrix
 +
  G := id;
 +
  for i in 1:Trusses loop
 +
    for j in 1:3 loop
 +
      q1[j] := P[C[i, 1], j];
 +
      q2[j] := P[C[i, 2], j];
 +
    end for;
 +
    L := Modelica.Math.Vectors.length(q2 - q1);
 +
    cx := (q2[1] - q1[1]) / L;
 +
    cy := (q2[2] - q1[2]) / L;
 +
    cz := (q2[3] - q1[3]) / L;
 +
    X := Area * Elas / L * [cx ^ 2, cx * cy, cx * cz; cy * cx, cy ^ 2, cy * cz; cz * cx, cz * cy, cz ^ 2];
 +
    g := zeros(N, N);
 +
    for m, n in 1:3 loop
 +
      g[3 * (C[i, 1] - 1) + m, 3 * (C[i, 1] - 1) + n] := X[m, n];
 +
      g[3 * (C[i, 2] - 1) + m, 3 * (C[i, 2] - 1) + n] := X[m, n];
 +
      g[3 * (C[i, 2] - 1) + m, 3 * (C[i, 1] - 1) + n] := -X[m, n];
 +
      g[3 * (C[i, 1] - 1) + m, 3 * (C[i, 2] - 1) + n] := -X[m, n];
 +
    end for;
 +
    G_star := G + g;
 +
    G := G_star;
 +
  end for;
 +
//Solving Matrix
 +
//Transforming to global matrix
 +
//Implementing boundary
 +
  for x in 1:Points loop
 +
    if P[x, 4] <> 0 then
 +
      for a in 1:Points * 3 loop
 +
        G[x * 3 - 2, a] := 0;
 +
        G[x * 3 - 2, x * 3 - 2] := 1;
 +
      end for;
 +
    end if;
 +
    if P[x, 5] <> 0 then
 +
      for a in 1:Points * 3 loop
 +
        G[x * 3 - 1, a] := 0;
 +
        G[x * 3 - 1, x * 3 - 1] := 1;
 +
      end for;
 +
    end if;
 +
    if P[x, 6] <> 0 then
 +
      for a in 1:Points * 3 loop
 +
        G[x * 3, a] := 0;
 +
        G[x * 3, x * 3] := 1;
 +
      end for;
 +
    end if;
 +
  end for;
 +
//Solving displacement
 +
  displacement := Modelica.Math.Matrices.solve(G, F);
 +
//Solving reaction
 +
  reaction := G_star * displacement - F;
 +
//Eliminating float error
 +
  for i in 1:N loop
 +
    reaction[i] := if abs(reaction[i]) <= err then 0 else reaction[i];
 +
    displacement[i] := if abs(displacement[i]) <= err then 0 else displacement[i];
 +
  end for;
 +
//Checking Force
 +
  check[1] := sum({reaction[i] for i in 1:3:N - 2}) + sum({F[i] for i in 1:3:N - 2});
 +
  check[2] := sum({reaction[i] for i in 2:3:N - 1}) + sum({F[i] for i in 2:3:N - 1});
 +
  check[3] := sum({reaction[i] for i in 3:3:N}) + sum({F[i] for i in 3:3:N});
 +
  for i in 1:3 loop
 +
    check[i] := if abs(check[i]) <= ers then 0 else check[i];
 +
  end for;
 +
//Calculating stress in each truss
 +
  for i in 1:Trusses loop
 +
    for j in 1:3 loop
 +
      q1[j] := P[C[i, 1], j];
 +
      q2[j] := P[C[i, 2], j];
 +
      dis[j] := abs(displacement[3 * (C[i, 1] - 1) + j] - displacement[3 * (C[i, 2] - 1) + j]);
 +
    end for;
 +
    L := Modelica.Math.Vectors.length(q2 - q1);
 +
    cx := (q2[1] - q1[1]) / L;
 +
    cy := (q2[2] - q1[2]) / L;
 +
    cz := (q2[3] - q1[3]) / L;
 +
    X := Elas / L * [cx ^ 2, cx * cy, cx * cz; cy * cx, cy ^ 2, cy * cz; cz * cx, cz * cy, cz ^ 2];
 +
    Str := X * dis;
 +
    stress1[i] := Modelica.Math.Vectors.length(Str);
 +
  end for;
 +
//Solving Matrix
 +
//Safety factor
 +
  for i in 1:Trusses loop
 +
    if stress1[i] > 0 then
 +
      safety[i] := Yield / stress1[i];
 +
    else
 +
      safety[i] := 0;
 +
    end if;
 +
  end for;
 +
end UAS_2DTrussSafety;
 +
 +
'''Hasil'''
 +
 +
[[File:OkaUAS4.png|360px|center]]
 +
[[File:OkaUAS5.png|360px|center]]

Latest revision as of 16:11, 14 January 2021

Salam hangat! Selamat datang di laman saya :D

Oka Suputra

Biodata

Perkenalkan, nama saya Oka sebagai mahasiswa Teknik Mesin UI angkatan 2018. Saya bersyukur bisa mendapatkan kesempatan untuk bisa belajar dan berkembang selama 20 tahun kehidupan yang telah saya lalui. Sekilas tentang saya, berinteraksi dengan orang lain merupakan hal yang menyenangkan untuk saya karena setiap orang memiliki kisah yang unik sehingga dapat membuka wawasan ataupun perspektif. Dari situ, kita bisa menggabungkan perspektif yang ada di dunia ini sehingga didapatkan berbagai jenis cara untuk memecahkan permasalahan yang ada dan bahkan menolong orang lain. Saya percaya apabila kita ingin terus belajar, memiliki niat yang baik, berusaha, dan beribadah, pasti akan diberikan jalan yang baik untuk kedepannya.

Pertemuan-1 11/11/2020

Tujuan Pembelajaran Metode Numerik

  • Memahami prinsip dasar dan konsep metode numerik sebagai bekal perjalanan kita untuk mencapai tahap selanjutnya sebagai seorang engineer
  • Mampu mengerti aplikasi yang ada dalam metode numerik
  • Bisa menerapkan konsep di dalam pemodelan numerik dan persoalan teknik(menyelesaikan problem dengan numerik)
  • Mendapatkan nilai tambah atau value sebagai manusia yang beradab

Materi Sebelum UTS

  • Pseudocode
  • Sistem Persamaan
  • Turunan Numerik
  • Metode Newton Rhapson, Secant, Bisection
  • Regresi Linear
  • Interpolasi

Tugas 1

Dalam tugas yang pertama ini, saya mempelajari penggunaan Open Modelica melalui beberapa source dari youtube seperti:

Setelah itu saya membuat video pembelajaran saya sendiri akan Open Modelica dengan mengaplikasikan basic nya ke dalam permasalahan Cantilever Beam

Pertemuan-2 18/11/2020

Mengapa Open Modelica?

Pada pertemuan kedua kali ini, salah satu teman saya, Yogi Gunawan memberikan suatu pertanyaan menarik kepada Pak DAI "Dari sekian program yang ada, mengapa kita memilih Open Modelica?". Kemudian Pak DAI memberikan beberapa key takeaways untuk menjawab perihal tersebut.

  • Open Modelica lebih di fokuskan kepada design permodelan yang akan membantu kita, para engineers, untuk bisa menyelesaikan real case baik dari control system, heat transfer, sistem fluida dan sebagainya.
  • Memudahkan kita untuk cross function (mempelajari berbagai dasar ilmu) dalam 1 software
  • Open Source, berarti dia free untuk digunakan dan dapat melakukan interaksi dengan pengguna lainnya. Bahkan sekarang banyak sekali open source yang memiliki kelebihan lebih banyak dari software yang telah dilegalisasi

Tugas 2

Overview

Setelah kami diajarkan oleh Pak DAI beberapa tipe modelica seperti Class dan Function, kami diberikan tugas untuk melatih implementasi tersebut ke dalam persoalan aljabar simultan.

[Aljabar Simultan merupakan metode penyelesaian persamaan matematik yang kompleks dalam satu waktu yang sama. Salah satu metode yang bisa digunakan adalah Gauss Jordan]

Saya mengambil contoh permasalahan dari Buku Numerical Method 7th Edition oleh Steven C. Chapra pada bab 12 problem 8 untuk dijadikan study case dalam pemrograman Open Modelica.

Studycase Aljabar Simultan 1.png

Pada gambar di atas, perlu diselesaikan transformasi matrix yang ada untuk bisa mendapatkan nilai c1, c2, c3, can c4 sebagai konsentrasi dari chlorida yang dibutuhkan pada masing-masing reservoir/lake. Oleh karena itu kita bisa implementasikan ke dalam Open Modelica bagian class seperti di bawah

Modelica Class

Studycase Aljabar Simultan 2.png

Modelica Function

Studycase Aljabar Simultan 3.png

Setelah disimulasi maka akan didapatkan nilai masing-masing sebagai berikut:

  • c1= 0.558325
  • c2= 0.857411
  • c3= 0.0931163
  • c4= 0.100237

Untuk mendapatkan guide secara visual, dapat dilihat di video bawah ini

Video

Pertemuan-3 25/11/2020

Materi

Pada pertemuan ini, kita mempelajari mengenai aplikasi metode numerik terhadap dunia Engineering. Adapun metode yang secara umum digunakan untuk bisa membantu kita yaitu CFD, Stokastik, dan FEA. Adapun step by step alur berpikir dalam mengerjakan sebuah engineering problem

Logic.jpeg
  • Masalah Teknik
  • Analisis Model
  • Model Matematis
  • Model Numerik
  • Komputer & Solusi


Gauss Elimination

Kami mencoba mengerjakan problem pseudocode pada bagian 9.4 di buku Numerical Method 7th Edition Chapra. Ini diinspirasikan oleh Christo

Pseudo 9.4.png
Screenshot (605).png

Setelah itu coding disimulasikan untuk membuktikan Example 9.5

Example 9.5.png
Open Modelica 9.5.png

Setelah check model dan melakukan simulasi, maka hasil dibuktikan sesuai

Solution 9.5.png

Tugas 3

9.5 Truss.jpeg

Dibuat FBD terlebih dahulu

Screenshot 606.jpg

Class KG

model TugasNo4
parameter Real A=0.001;//luas
parameter Real E=200*10^9;//modulus elastisitas
parameter Real L1=1;//Panjang batang 1,2
parameter Real L2=1.25;//Panjang batang 4
parameter Real L3=1.6;//panjang batang 3,5
parameter Real t1=0;//sudut batang 1.Node 1 dan 2.
parameter Real t2=0;//sudut batang 2. Node 2 dan 3.
parameter Real t3=4.04;//sudut batang 3.Node 3 dan 4.
parameter Real t4=4.7;//sudut batang 4. Node 2 dan 4.
parameter Real t5=5.4;//sudut batang 5. Node 1 dan 4.
Real d1[8,8]=[(cos(t1))^2,sin(t1)*cos(t1),-(cos(t1))^2,-sin(t1)*cos(t1),0,0,0,0;
             sin(t1)*cos(t1),(sin(t1))^2,-sin(t1)*cos(t1),-(sin(t1))^2,0,0,0,0;
             -(cos(t1))^2,-sin(t1)*cos(t1),(cos(t1))^2,sin(t1)*cos(t1),0,0,0,0;
             -sin(t1)*cos(t1),-(sin(t1))^2,sin(t1)*cos(t1),(sin(t1))^2,0,0,0,0;
             0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0];           
Real d2[8,8]=[0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0;
            0,0,(cos(t2))^2,sin(t2)*cos(t2),-(cos(t2))^2,-(sin(t2)*cos(t2)),0,0;
            0,0,sin(t2)*cos(t2),(sin(t2))^2,-(sin(t2)*cos(t2)),-(sin(t2))^2,0,0;
            0,0,-(cos(t2))^2,-(sin(t2)*cos(t2)),(cos(t2))^2,sin(t2)*cos(t2),0,0;
            0,0,-(sin(t2)*cos(t2)),-(sin(t2))^2,sin(t2)*cos(t2),(sin(t2))^2,0,0;
            0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0];
Real d3[8,8]=[0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0;
            0,0,0,0,(cos(t3))^2,sin(t3)*cos(t3),-(cos(t3))^2,-sin(t3)*cos(t3);
            0,0,0,0,sin(t3)*cos(t3),(sin(t3))^2,-sin(t3)*cos(t3),-(sin(t3))^2;
            0,0,0,0,-(cos(t3))^2,-sin(t3)*cos(t3),(cos(t3))^2,sin(t3)*cos(t3);
            0,0,0,0,-sin(t3)*cos(t3),-(sin(t3))^2,sin(t3)*cos(t3),(sin(t3))^2];               
Real d4[8,8]=[0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0;
            0,0,(cos(t4))^2,sin(t4)*cos(t4),0,0,-(cos(t4))^2,-sin(t4)*cos(t4);
            0,0,sin(t4)*cos(t4),(sin(t4))^2,0,0,-sin(t4)*cos(t4),-(sin(t4))^2;
            0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0;
            0,0,-(cos(t4))^2,-sin(t3)*cos(t4),0,0,(cos(t4))^2,sin(t4)*cos(t4);
            0,0,-sin(t4)*cos(t4),-(sin(t4))^2,0,0,sin(t4)*cos(t4),(sin(t4))^2];             
Real d5[8,8]=[cos(t5)^2,sin(t5)*cos(t2),0,0,0,0,-(cos(t5))^2,-(sin(t5)*cos(t5));
            sin(t5)*cos(t5),(sin(t5))^2,0,0,0,0,-(sin(t5)*cos(t5)),-(sin(t5))^2;           
            0,0,0,0,0,0,0,0;  
            0,0,0,0,0,0,0,0;   
            0,0,0,0,0,0,0,0;
            0,0,0,0,0,0,0,0;   
           -(cos(t5))^2,-(sin(t5)*cos(t5)),0,0,0,0,(cos(t5))^2,sin(t5)*cos(t5);
           -(sin(t5)*cos(t5)),-(sin(t5))^2,0,0,0,0,sin(t5)*cos(t5),(sin(t5))^2];
Real k1;
Real k2;
Real k3;
Real K1[8,8];
Real K2[8,8];
Real K3[8,8];
Real K4[8,8];
Real K5[8,8];
Real KG[8,8];
equation
k1=A*E/L1;
k2=A*E/L2;
k3=A*E/L3;
K1=k1*d1;
K2=k1*d2;
K3=k3*d3;
K4=k2*d4;
K5=k3*d5;
KG=K1+K2+K3+K4+K5;
end TugasNo4;

Class U & R

class URTugasNo4
parameter Real A[8,8]=[10^6,0,0,0,0,0,0,0;
                     0,10^6,0,0,0,0,0,0;
                    -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6;
                     0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8;
                     0,0,0,0,10^6,0,0,0;
                     0,0,0,0,0,10^6,0,0;
                     -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6;
                     6.13*10^6,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8];//apply boundary
parameter Real B[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//external load
parameter Real KG[8,8]=[2.5*10^8,-9.6*10^7,-2*10^8,0,0,0,-5*10^7,6.13*10^7;
                     -6.1*10^7,7.46*10^7,0,0,0,0,6.13*10^7,-7.4*10^7;
                    -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6;
                     0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8;
                     0,0,-2*10^8,0,2.48*10^8,6.09*10^7,-4.8*10^7,-6*10^7;
                     0,0,0,0,6.09*10^7,7.65*10^7,-6*10^7,-7.6*10^7;
                     -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6;
                     6.13*10^7,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8];                         
parameter Real F[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//force
Real U[8];//displacement
Real R[8];//reaction
equation
U=GaussElimination(A,B);
R=(KG*U)-F;
end URTugasNo4;

Pertemuan-4 2/12/2020

Quiz Block Diagram

Quiz Metnum Oka.jpg

Tugas 4

Tugas ke-4 kali ini memecahkan permasalahan Truss 3 Dimensi dengan membuat class diagram, flow chart, serta pengerjaannya di Open Modelica. Di bawah ini merupakan soal no.8 yang akan dipecahkan serta sudah di breakdown beberapa parameter yang ada secara manual

SoalParameter Oka.png

Setelah itu dibuat class diagram dan flow chart di bawah sebagai berikut

8ClassDiagram FlowChart.jpg

Kemudian dengan referensi code dari ananda Mohammad Fahmi

  • 1st step yang akan dilakukan yaitu mencari k dengan rumus k=AE/L yang akan digunakan untuk forming matriks stiffness elemental (Ke) pada setiap truss
StiffnessKe Oka.png
  • 2nd step yaitu mentransfer matrix element 6x6 menjadi matrix global 12x12 untuk forming matriks stiffness global (Kg) yang disesuaikan dengan jumlah truss (3) dikali dengan jumlah node (4)
Stiffness Global Oka.png
  • 3rd step yaitu menjumlahkan semua matriks stiffness global pada setiap truss menjadi sum of matriks stifness global (Kgtot)
Total Global Oka.png
  • 4th step yaitu menetapkan boundaries pada sum of matriks stifness global menjadi (KgB), dimana kasusnya setiap node berupa tumpuan pinned
Boundary Global Oka.png
  • 5th step yaitu mencari displacement (U) dari masing-masing titik matrix, dengan equation XU=F, dimana X adalah KGB, U merupakan displacement, dan F adalah Gaya Eksternal. Untuk bisa mendapatkan nilai U maka dilakukan fungsi Gauss Jordan
GaussJordan Oka.png
  • 6th step yaitu mencari gaya reaksi (R) dengan persamaan R=Kg*U - f yang dimasukan ke dalam function
Reaksi Oka.png
  • 7th step yaitu membuat Class yang diinput data-datanya dari parameter soal kemudian dipanggil semua fungsi yang ada untuk mendapatkan nilai yang dicari
Class Oka.png
  • 8th step yaitu melakukan simulasi sehingga mendapatkan U dan R
U Oka.png
R Oka.png

Untuk video penjelasan ada di bawah ini:


Pertemuan-5 16/12/2020

Di awal pertemuan kami diberikan intro mengenai pentingnya optimasi dalan permasalahan engineering. Salah satu contohnya diterapkan di mata kuliah Sistem Fluida

Sisflu Curve.jpg

Gambar di atas menunjukkan persamaan sistem dalam pump dari Head, Efficiency (%), Energy Capacity dari Fluida (Q), and Horsepower. Mengapa diperlukan adanya optimasi di aplikasi ini? Fungsinya untuk mendapatkan design pump dengan efficiency tertinggi (Best Efficiency Point) sehingga dapat menentukan faktor-faktor lainnya berdasarkan curve yang ada

Adapun metode yang kami pelajari mengenai teori optimasi yyaitu menggunakan Golden ratio yang diberikan oleh Ibu Chandra. Di sini secara fundamental kami diberikan pembelajaran serta bagaimana mengaplikasikannya ke dalam Open Modelica. Video yang dapat dilihat sebagai berikut

Setelah itu kami mencoba untuk melakukannya di Open Modelica masing-masing. Di mulai dengan membuat model

Screenshot (566).png

Kemudian membuat fungsi panggil

Screnshot (567).png

Akhirnya disimulasikan untuk mendapatkan hasil

Screenshot (568).png
Screenshot (569).png

Tugas Besar

Pada kali ini, kami diberikan Tugas Besar sebagai proses mengimplementasikan apa yang telah dipelajari yaitu optimasi dan truss. Disini akan diberikan suatu permasalahan dalam membuat kerangka batang dengan struktur yang akan dioptimasi jenis material dan costnya

Structure Tubes.jpg
Parameter1 Tubes.jpg

Step by step secara general yang perlu kita konsiderasi yaitu:

  • Menentukan jenis materialnya (Elasticity, Yield Strength, beserta Harga)
  • Menentukan luas area cross section rangka
  • Menghitung displacement dan stress
  • Melakukan optimasi dengan cara 2 metode perbandingan harga (kondisi material sama untuk mencari area optimal, dan kondisi area sama untuk mencari material yang efektif)

Berdasarkan problem di atas, maka ada beberapa hal yang bisa diasumsikan yaitu:

  • Beban akan terdistribusi hanya pada node (karena bersifat trusses).
  • Safety factor minimal bernilai 2.
  • Batas displacement 0,001 m sebelum buckling (pada truss paling atas).
  • Ketinggian trusses pada tiap lantai sama yaitu 0,6 m.

Adapun parameter yang bisa kita hitung dari rangkaian tersebut, dimana total length pipa yang dibutuhkan dari dimensi sebesar 15,3 meter. Ini akan menjadi indikasi yang penting untuk pemasukan data-data berikutnya

Coding Mencari Displacement, RF, stress, and Safety factor

Saya mengambil pilihan material awal berupa SS 210 dengan area penampang dengan dimension 0.03x0.03 meter dengan thickens 0,003 sehingga didapatkan profile area sebesar 0.000171 m^2. Codingan sebagai berikut merupakan hasil diskusi bersama yang dipimpin oleh Christopher, Josiah, dan Muhammad Fahmi

Model TugasBesar_3DTrussSafety 
//define initial variable
parameter Integer Points=size(P,1); //Number of Points
parameter Integer Trusses=size(C,1); //Number of Trusses
parameter Real Yield=292e6; //Yield Strength (Pa)
parameter Real Area=0.000171;   //Area L Profile (Dimension=0.03, Thickness=0,003) (m2)
parameter Real Elas=197e9;     //Elasticity SS 201  (Pa)

//define connection
parameter Integer C[:,2]=[1,5; 
                          2,6;
                          3,7;
                          4,8;
                          5,6;  //1st floor
                          6,7;  //1st floor
                          7,8;  //1st floor
                          5,8;  //1st floor
                          5,9;
                         6,10;
                         7,11;
                         8,12;
                         9,10; //2nd floor
                         10,11;//2nd floor 
                         11,12;//2nd floor
                          9,12; //2nd floor
                          9,13;
                         10,14;
                         11,15;
                         12,16;
                         13,14;//3rd floor
                         14,15;//3rd floor
                         15,16;//3rd floor
                        13,16];//3rd floor
                                                              
//define coordinates (please put orderly)
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1;   //1
                     -0.3,-0.375,0,1,1,1;    //2
                     -0.3,0.375,0,1,1,1;     //3
                     0.3,0.375,0,1,1,1;      //4
                         
                     0.3,-0.375,0.6,0,0,0;   //5
                     -0.3,-0.375,0.6,0,0,0;  //6
                     -0.3,0.375,0.6,0,0,0;   //7
                     0.3,0.375,0.6,0,0,0;    //8
                          
                     0.3,-0.375,1.2,0,0,0;   //9
                     -0.3,-0.375,1.2,0,0,0;  //10  
                     -0.3,0.375,1.2,0,0,0;   //11
                     0.3,0.375,1.2,0,0,0;    //12
                          
                     0.3,-0.375,1.8,0,0,0;   //13
                     -0.3,-0.375,1.8,0,0,0;  //14
                     -0.3,0.375,1.8,0,0,0;   //15
                     0.3,0.375,1.8,0,0,0];   //16 
                          
//define external force (please put orderly)
parameter Real F[Points*3]={0,0,0,
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,0, 
                            0,0,-500, 
                            0,0,-1000, 
                            0,0,-1000, 
                            0,0,-500}; 

//solution
Real displacement[N], reaction[N];
Real check[3];

Real stress1[Trusses];
Real safety[Trusses];
Real dis[3];
Real Str[3];
 
protected
parameter Integer N=3*Points;
Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3];
Real err=10e-10, ers=10e-4;

algorithm
//Creating Global Matrix
G:=id;
for i in 1:Trusses loop
 for j in 1:3 loop
  q1[j]:=P[C[i,1],j];
  q2[j]:=P[C[i,2],j];
 end for;
      
   //Solving Matrix
   L:=Modelica.Math.Vectors.length(q2-q1);
   cx:=(q2[1]-q1[1])/L;
   cy:=(q2[2]-q1[2])/L;
   cz:=(q2[3]-q1[3])/L; 
   X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;
                     cy*cx,cy^2,cy*cz;
                     cz*cx,cz*cy,cz^2];

   //Transforming to global matrix
   g:=zeros(N,N); 
   for m,n in 1:3 loop
     g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];
     g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];
     g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];
     g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];
   end for;  

 G_star:=G+g;
 G:=G_star;
end for;

//Implementing boundary
for x in 1:Points loop
 if P[x,4] <> 0 then
   for a in 1:Points*3 loop
     G[(x*3)-2,a]:=0;
     G[(x*3)-2,(x*3)-2]:=1;
   end for;
 end if;
 if P[x,5] <> 0 then
   for a in 1:Points*3 loop
     G[(x*3)-1,a]:=0;
     G[(x*3)-1,(x*3)-1]:=1;
   end for;
 end if;
 if P[x,6] <> 0 then
   for a in 1:Points*3 loop
     G[x*3,a]:=0;
     G[x*3,x*3]:=1;
   end for;
 end if;
end for;

//Solving displacement
displacement:=Modelica.Math.Matrices.solve(G,F);

//Solving reaction
reaction:=(G_star*displacement)-F;

//Eliminating float error
for i in 1:N loop
 reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
 displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];
end for;

//Checking Force
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});
  
for i in 1:3 loop
 check[i] := if abs(check[i])<=ers then 0 else check[i];
end for;

//Calculating stress in each truss
for i in 1:Trusses loop
for j in 1:3 loop
  q1[j]:=P[C[i,1],j];
  q2[j]:=P[C[i,2],j];
  dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);
end for;
      
   //Solving Matrix
   L:=Modelica.Math.Vectors.length(q2-q1);
   cx:=(q2[1]-q1[1])/L;
   cy:=(q2[2]-q1[2])/L;
   cz:=(q2[3]-q1[3])/L; 
   X:=(Elas/L)*[cx^2,cx*cy,cx*cz;
                cy*cx,cy^2,cy*cz;
                cz*cx,cz*cy,cz^2];
   
   Str:=(X*dis);
   stress1[i]:=Modelica.Math.Vectors.length(Str);
end for;

//Safety factor
for i in 1:Trusses loop
 if stress1[i]>0 then
   safety[i]:=Yield/stress1[i];
 else
   safety[i]:=0;
 end if; 
end for;
end TugasBesar_3DTrussSafety; 

Hasil Perhitungan Komputasi

Screnshot (600).png

Perbandingan Metode Analisis Untuk Optimasi

  • Metode 1: Material Tetap, Variasi Area

Penyesuaian pemilihan jenis material berupa Stainless Steel dengan grade SS 210 sebagai material acuan yang bisa dilihat data-data nya di referensi https://www.azom.com/article.aspx?ArticleID=6780

Screnshot (590).png

Kemudian kita tentukan beberapa variasi cross section mengambil sumber siku truss berdasarkan referensi https://wijayamakmur.com/siku/. Disini saya memilih 6 variasi dari segi dimensi beserta harga yang ada sehingga bisa dilanjutkan ke proses curve fitting

Screnshot (591).png

Kemudian kita melakukan curve fitting yang bisa menggunakan online plotter ataupun open modelica untuk bisa merepresentasikan hubungan area vs harga per satuan meter sehingga didapatkan nilai cost total yang representatif untuk setiap data, stress, safety factor, serta Ratio

Screnshot (592).png

Data di atas kemudian dioptimasikan dengan metode golden pada open modelica sehingga mendapat nilai di open modelica sebagai berikut

Screnshot (589).png

Dapat disimpulkan dari metode 1 ini bahwa menggunakan material SS 210, luas cross section maximum berupa 0.000315114 m^2

  • Metode 2: Area Tetap, Jenis Material Bervariasi

Menetapkan dimensi dan design factor yang tetap sebagai bahan acuan

Screnshot (594).png

Melakukan pemilihan variasi material. Saya mengambil 4 jenis variasi material stainless steel dengan grade SS201 SS304 SS316 dan SS403. Harga-harga yang didapatkan berdasarkan referensi https://www.tokopedia.com/kingsteelid

Screnshot (597).png

Kemudian kita melakukan curve fitting yang bisa menggunakan online plotter ataupun open modelica untuk bisa merepresentasikan hubungan elastisitas vs harga per kg, elastisitas vs density, dan elastisitas vs yield sehingga didapatkan nilai cost total yang representatif untuk setiap data, stress, safety factor, serta Ratio

Screnshot (595).png

Data di atas kemudian dioptimasikan dengan metode golden pada open modelica sehingga mendapat nilai di open modelica sebagai berikut

Screnshot (588).png

Dapat disimpulkan dari metode 2 ini bahwa type elastisitas yang optimal dalam design sebesar 1,979e+11 dimana nilai itu paling mendekati material SS210 sebagai material yang paling efektif

  • Codingan untuk Curve Fitting dan Golden Optimization (Optimasi material dan area)
function TugasBesar_Curve_Fitting
input Real X[:];
input Real Y[size(X,1)];
input Integer order=2;
output Real Coe[order+1];
protected
Real Z[size(X,1),order+1];
Real ZTr[order+1,size(X,1)];
Real A[order+1,order+1];
Real B[order+1];
algorithm
for i in 1:size(X,1) loop
for j in 1:(order+1) loop
Z[i,j]:=X[i]^(order+1-j);
end for;
end for;
ZTr:=transpose(Z);
A:=ZTr*Z;
B:=ZTr*Y;
Coe:=Modelica.Math.Matrices.solve(A,B);
end TugasBesar_Curve_Fitting;
Model TugasBesar_Golden_section

parameter Real xd[:]={}; //Input xd
parameter Real yd[:]={}; // Input yd
parameter Real xlo=; //Input xlo
parameter Real xhi=; // Input xhi
parameter Integer N=10; // maximum iteration
parameter Real es=0.0001; // maximum error

Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3];
Real xopt,  fx;
protected
Real d, xl, xu, xint, R=(5^(1/2)-1)/2;

algorithm

xl := xlo; 
xu := xhi;
y  := TugasBesar_Curve_Fitting(xd,yd);
 
for i in 1:N loop
d:= R*(xu-xl);
x1[i]:=xl+d;
x2[i]:=xu-d;
f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3];
f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3];
xint:=xu-xl;
 
if f1[i]>f2[i] then 
  xl:=x2[i];
  xopt:=x1[i];
  fx:=f1[i];
  else
    xu:=x1[i];
    xopt:=x2[i];
    fx:=f2[i];
end if;
 
ea[i]:=(1-R)*abs((xint)/xopt);
if ea[i]<es then
  break;
end if;
end for;

end TugasBesar_Golden_section;

UAS

Berikut merupakan hasil jawaban UAS Saya

OkaUAS1.jpg
OkaUAS2.jpg
OkaUAS3.jpg


Coding OM

model UAS_2DTrussSafety
//Oka W Suputra 1806149236 Metnum 02
 //define initial variable
  parameter Integer Points = size(P, 1);
    //Number of Points
  parameter Integer Trusses = size(C, 1);
    //Number of Trusses
  parameter Real Yield = 214e6;
    //Yield Strength (Pa)
  parameter Real Area = 25;
    //Area L Profile
  parameter Real Elas = 68.9e9;
    //Elasticity Al 6061  (Pa)
    //define connection
  parameter Integer C[:, 2] = [1, 2; 1, 3; 1, 4];
    //define coordinates (please put orderly)
  parameter Real P[:, 6] = [0, 0, 0, 1, 1, 1;          //1
                            6.5, 6.5, 36.5, 1, 1, 1;   //2
                            6.5, 6.5, 36.5, 1, 1, 1;   //3
                            6.5, 6.5, 36.5, 1, 1, 1];  //4
    //define external force (please put orderly)
  parameter Real F[Points * 3] = {0,0,0,0,3708180,0,0,3708180,0,0,3708180,0};
    //solution
  Real displacement[N], reaction[N];
  Real check[3];
  Real stress1[Trusses];
  Real safety[Trusses];
  Real dis[3];
  Real Str[3];
protected
 parameter Integer N = 3 * Points;
  Real q1[3], q2[3], g[N, N], G[N, N], G_star[N, N], id[N, N] = identity(N), cx, cy, cz, L, X[3, 3];
  Real err = 10e-10, ers = 10e-4;
algorithm
    //Creating Global Matrix
  G := id;
  for i in 1:Trusses loop
    for j in 1:3 loop
      q1[j] := P[C[i, 1], j];
      q2[j] := P[C[i, 2], j];
    end for;
    L := Modelica.Math.Vectors.length(q2 - q1);
    cx := (q2[1] - q1[1]) / L;
    cy := (q2[2] - q1[2]) / L;
    cz := (q2[3] - q1[3]) / L;
    X := Area * Elas / L * [cx ^ 2, cx * cy, cx * cz; cy * cx, cy ^ 2, cy * cz; cz * cx, cz * cy, cz ^ 2];
    g := zeros(N, N);
    for m, n in 1:3 loop
      g[3 * (C[i, 1] - 1) + m, 3 * (C[i, 1] - 1) + n] := X[m, n];
      g[3 * (C[i, 2] - 1) + m, 3 * (C[i, 2] - 1) + n] := X[m, n];
      g[3 * (C[i, 2] - 1) + m, 3 * (C[i, 1] - 1) + n] := -X[m, n];
      g[3 * (C[i, 1] - 1) + m, 3 * (C[i, 2] - 1) + n] := -X[m, n];
    end for;
    G_star := G + g;
    G := G_star;
  end for;
//Solving Matrix
//Transforming to global matrix
//Implementing boundary
  for x in 1:Points loop
    if P[x, 4] <> 0 then
      for a in 1:Points * 3 loop
        G[x * 3 - 2, a] := 0;
        G[x * 3 - 2, x * 3 - 2] := 1;
      end for;
    end if;
    if P[x, 5] <> 0 then
      for a in 1:Points * 3 loop
        G[x * 3 - 1, a] := 0;
        G[x * 3 - 1, x * 3 - 1] := 1;
      end for;
    end if;
    if P[x, 6] <> 0 then
      for a in 1:Points * 3 loop
        G[x * 3, a] := 0;
        G[x * 3, x * 3] := 1;
      end for;
    end if;
  end for;
//Solving displacement
  displacement := Modelica.Math.Matrices.solve(G, F);
//Solving reaction
  reaction := G_star * displacement - F;
//Eliminating float error
  for i in 1:N loop
    reaction[i] := if abs(reaction[i]) <= err then 0 else reaction[i];
    displacement[i] := if abs(displacement[i]) <= err then 0 else displacement[i];
  end for;
//Checking Force
  check[1] := sum({reaction[i] for i in 1:3:N - 2}) + sum({F[i] for i in 1:3:N - 2});
  check[2] := sum({reaction[i] for i in 2:3:N - 1}) + sum({F[i] for i in 2:3:N - 1});
  check[3] := sum({reaction[i] for i in 3:3:N}) + sum({F[i] for i in 3:3:N});
  for i in 1:3 loop
    check[i] := if abs(check[i]) <= ers then 0 else check[i];
  end for;
//Calculating stress in each truss
  for i in 1:Trusses loop
    for j in 1:3 loop
      q1[j] := P[C[i, 1], j];
      q2[j] := P[C[i, 2], j];
      dis[j] := abs(displacement[3 * (C[i, 1] - 1) + j] - displacement[3 * (C[i, 2] - 1) + j]);
    end for;
    L := Modelica.Math.Vectors.length(q2 - q1);
    cx := (q2[1] - q1[1]) / L;
    cy := (q2[2] - q1[2]) / L;
    cz := (q2[3] - q1[3]) / L;
    X := Elas / L * [cx ^ 2, cx * cy, cx * cz; cy * cx, cy ^ 2, cy * cz; cz * cx, cz * cy, cz ^ 2];
    Str := X * dis;
    stress1[i] := Modelica.Math.Vectors.length(Str);
  end for;
//Solving Matrix
//Safety factor
  for i in 1:Trusses loop
    if stress1[i] > 0 then
      safety[i] := Yield / stress1[i];
    else
      safety[i] := 0;
    end if;
  end for;
end UAS_2DTrussSafety;

Hasil

OkaUAS4.png
OkaUAS5.png