Difference between revisions of "Metnum03-Naufal Ihsan Kamal"

From ccitonlinewiki
Jump to: navigation, search
(Tugas Besar)
Line 180: Line 180:
  
 
[[File:subet1.png]]
 
[[File:subet1.png]]
 +
 +
'''Constraint:'''
 +
 +
- Spesifikasi L (Panjang) dan geometri rangka truss
 +
 +
- Gaya beban terhadap struktur (1000 N dan 2000 N)
 +
 +
'''Asumsi:'''
 +
 +
- Diasumsikan tidak ada bending karena bersifat truss
 +
 +
- Beban terdistribusi pada node
 +
 +
- Safety Factor = 2
 +
 +
- Batas displacement 0,001m sebelum terjadi buckling
 +
 +
- Variabel bebas
 +
 +
'''Metode Mengerjakan'''
 +
 +
1. Pilih material dengan 3 variasi,area ,dan elastisitas material
 +
 +
2. Buat 2 grafik perbandingan yang pertama  grafik dengan material locked dan variasi area,lalu yg ke dua grafik dengan area locked dan variasi elastisitas
 +
 +
3. Setelah itu kita hitung stress/cost
 +
 +
'''Data Material'''
 +
 +
[[File:subet2.png]]
 +
 +
'''Pembuatan Numerik'''
 +
 +
Koding Numerik ini dibuat untuk mencari nilai stress, safety factor,dan untuk mencari data untuk curve fitting
 +
 +
model Trusses_3D_Tugas_Besar_Safety
 +
 +
//define initial variable
 +
parameter Integer Points=size(P,1); //Number of Points
 +
parameter Integer Trusses=size(C,1); //Number of Trusses
 +
parameter Real Yield=215e6; //Yield Strength (Pa)
 +
parameter Real Area=0.000224;  //Area L Profile (Dimension=0.03, Thickness=0,004) (m2)
 +
parameter Real Elas=193e9;    //Elasticity SS 304  (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 Trusses_3D_Tugas_Besar_Safety;
 +
 +
'''Membuat Curve Fitting'''
 +
 +
Curve fitting digunakan untuk mencari nilai cost terhadap fungsi area/elastisitas
 +
 +
model callcurve
 +
parameter Real [8] X={1.11e-4,1.41e-4,1.71e-4,2.31e-4,3.04e-4,3.75e-4,7.44e-4,8.64e-4};
 +
parameter Real [8] Y={273700 ,318800 ,381200 ,512800 ,683700 ,838000 ,1663100,1986400};
 +
Real [3] Coe;
 +
algorithm
 +
Coe:=Curve_Fitting(X,Y);
 +
end callcurve;
 +
 +
 +
function Curve_Fitting
 +
  input Real X[:];
 +
  input Real Y[size(X,1)];
 +
  input Integer order=2;
 +
  output Real Coe[order+1];
 +
protected
 +
  Real Z[size(X,1),order+1];
 +
  Real ZTr[order+1,size(X,1)];
 +
  Real A[order+1,order+1];
 +
  Real B[order+1];
 +
algorithm
 +
for i in 1:size(X,1) loop
 +
  for j in 1:(order+1) loop
 +
  Z[i,j]:=X[i]^(order+1-j);
 +
  end for;
 +
end for;
 +
ZTr:=transpose(Z);
 +
A:=ZTr*Z;
 +
B:=ZTr*Y;
 +
Coe:=Modelica.Math.Matrices.solve(A,B); //Coe:=fill(2,size(Coe,1));
 +
end Curve_Fitting;

Revision as of 12:46, 4 January 2021

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

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


BIODATA DIRI

Pasfotonaufal.jpg

Nama  : Naufal Ihsan Kamal

NPM  : 1706026670

Program Studi : S1 Teknik Mesin Pararel Universitas Indonesia

Semoga sedikit ilmu yang saya sampaikan disini dapat memberi manfaat bagi kita semua

Pertemuan 1 (19 November 2020)

Sebelum memulai pertemuan pertama,kami menginstall sebuah aplikasi bernama OpenModelica yang memiliki fungsi untuk mensimulaikan suatu sistem yang didistribusikan dalam bentuk kode dan biner untuk penelitian.Dalam kuliah pertemuan kali ini Pak Dai menyebutkan bahwa ada 4 penilaian utama dari kelas Metnum ini,yaitu mengenal atau mengetahui progres pengetahuannya,mengerti Konsep,mampu membantu dalam memecahkan masalah dengan pemahaman tersebut di dunia keteknikan,dan yang terakhir mendapat nilai tambah (moral value) dan lebih mengetahui diri sendiri.

Pertemuan 2 (16 November 2020)

Pada pertemuan kedua kita belajar cara menggunakan function kedalam sebuah persamaan

pertama kita masukan numeric pada class seperti gambar dibawah ini

Metnumnaufal1.png

Lalu kita buat class baru dengan format function,kemudian masukan numeric seperti gambar dibawah ini

Metnumnaufal2.png

Setelah itu kita coba simulate dengar opsi seperti ini

Metnumnaufal3.png

Dan kemudian kita bisa melihat hasilnya

Metnumnaufal4.png

TUGAS 2

Tugas kali ini kita membuat sebuah class untuk menyelesaikan persamaa2n aljabar simultan (metoda gauss elim, gauss seidel ataupun metoda lain).

Saya menggunakan metode Gauss Elemination untuk menyelesaikan sebuah class bilangan Real A[5,7] = [11,-2,3,13,8,6,7;-3,14,-2,6,5,10,13;4,-2,9,-1,8,22,4;0,4,-1,9,8,7,2;10,26,47,51,83,20,33]

Lalu kita menggunakan Fungsi dan Algoritma seperti gambar dibawah ini

Metnumnaufal7.png

Setelah itu kita Simulate dan liat hasilnya

Metnumnaufal8.png


Pertemuan 3 (23 November 2020)

Pertemuan kali ini membahas tentang aplikasi metnum dalam permasalahan teknik.Contoh yang kita ambil yaitu bagaimana penyelesaian masalah teknik dalam Pegas-massa menggunakan OpenModelica Metnumnaufal9.png

Pertama kita buat matriksnya dari persamaan yang ada kemudian kita masukan juga Fuction nya

extends Modelica.Icons.Function;

 input Real K[:, size(K, 1)];
 input Real W[size(K, 1)] ;
 output Real x[size(W, 1)] ;

Setelah itu kita masukan juga algoritma x:=Modelica.Math.Matrices.solve(K,W);

Metnumnaufal10.png

Setelah itu kita Simulate untuk melihat nilai X nya

Metnumnaufal11.png

Latihan 2.1

Mn1.png

Latihan kali ini kita akan menganalisis Defleksi yang terjadi pada setiap Joint,Dengan mengikuti cara dibuku,kita akan mengerjakannya dalam beberapa step

1.Ubah Problem menjadi element dan node

Mn2.png

2.Stiffness Equation

Karena element 1,3,4,6 memiliki kesamaan panjang,cross-sectional area,dan modulus elasticity,maka kita bisa menggunakan persamaan yang sama,tetapi berbeda dengan element 2,5

Mn3.png

3.Develop equations for elements

Karena elements 1,3,6 sejajar maka kita menggunakan sudut yang sama

Mn4.png Mn5.png Mn6.png

Element 4 memiliki sudut berbeda yaitu 90,Element 2 memiliki sudut 135,dan Element 5 memiliki sudut 45

Mn7.png Mn8.png Mn9.png

4.Assemble Elements

Global Stiffness Matrix

Mn10.png

5.Boundery and Loads

Batas untuk node 1 dan 3 fixed,lalu pada node 4 dan 5 memiliki external loads

Mn11a.png

Mn12.png

Hukum Hooke, F= k. x ,maka dalam persamaan matrix menjadi [F]=[K].[U]

Mn13.png

6.Solusi menggunakan Modelica

Mn15.png Mn14.png

Gaya Reaksi

Kita bisa mencari gaya reaksi dengan memasukan rumus:

Mn16.png

Setelah itu kita masukan kedalam Modelica dengan numeric,dan setelah itu kita bisa lihat hasilnya

Mn17.png

Mn18.png

Pertemuan 4 (30 November 2020)

Pada awal pertemuan,kita membahas tentang perbedaan antara Statis dengan Dinamis.Perbedaan paling utama pada 2 hal ini yaitu pada kondisi statis,beban tetap,tidak dipengaruhi oleh waktu.Sedangkan pada keadaan Dinamis,beban tidak tetap karena berubah terhadap waktu

Setelah itu kita Quiz dengan mengerjakan 2 soal lalu kami diminta untuk membuat flowchart pengerjaan nya,untuk soal pertamaa kurang lebih mirip seperti soal latihan 2.1 Quizzmetnum2.jpg

Pertemuan 5 (7 Desember 2020)

Pertemuan 6 (14 Desember 2020)

Pada pertemuan kali ini,kami diminta untuk muhasabah diri sendiri terkait pembelajaran Metnum sampai saat ini,Berikut adalah hasil muhasabah saya:

Menurut saya,saya selalu berusaha untuk mengikuti pembelajaran Metnum disetiap pertemuan,untuk dasar-dasar terkait penggunaan software OpenModelica saya masih cukup paham.Kemudian untuk penggunaan OpenModelica dalam penyelesaian trus 2 Dimensi seperti contoh dibuku saya masih cukup paham terkait flowchartnya,hanya saja saya masih belum cukup paham terkait dengan materi yang terdapat pada akhir akhir pembelajaran kemarin,terutama penggunaan metode Looping dalam aplikasi trus 3 dimensi.Oleh karena itu disisa pertemuan Metnum ini saya masih berusaha untuk bisa mengerti terkait penggunaan metode Looping tersebut dikarenakan keterbatasan pengetahuan saya terkait coding codingnya.

Aplikasi metode numerik dalam kasus optimisasi

Hari ini kita belajar membuat struktur rangka seperti gambar yg dikirm di WA, Dalam menyelesaikan persamaan ini kita jg hrus bisa membuat persm aljabar dan metode numeriknya Tugas besarnya ialah mencari nilai optimal untuk meminimalkan biaya dan konstrainnya yaitu strukturnya mampu menahan beban dan reliable,caranya mnentukan gaya2 yang bekerja,lalu ada apa aja stressnya yg diizinkan yaitu setengah dari material allowence.

One-Dimensional Unconstrained Optimization

Optimasi adalah suatu cara untuk mendapatkan nilai max atau min dari suatu permasalahan.

Metode yang digunakan kali ini adalah gOLDEN rATIO Method

Langkah pertama adalah mengetahui penyelsaian matematis Obejektif pertama adalah mencari nilai Fx Global Maximum

Langkah 2 kita melakkukan iterasi pertama nilai X thd calon nilai Fx Maksimum dengan batasan Xl dan Xu

Setelah kita dapat Xl dan Xu,kita masukan ke dalam persamaan untuk mencari X1 dan X2,lalu mengikuti aturan seperti yg tertera di gambar

Exercise kali ni kita menggunakan fungsi non-linier Fx=2sinx-x^2/10

Tugas Besar

Tujuan

Pada tugas besar kali ini kami diminta untuk mencari optimisasi desain untuk menekan biaya pada kasus yang diberikan. Optimisasi adalah suatu cara untuk mencari nilai ekstrim.

Subet1.png

Constraint:

- Spesifikasi L (Panjang) dan geometri rangka truss

- Gaya beban terhadap struktur (1000 N dan 2000 N)

Asumsi:

- Diasumsikan tidak ada bending karena bersifat truss

- Beban terdistribusi pada node

- Safety Factor = 2

- Batas displacement 0,001m sebelum terjadi buckling

- Variabel bebas

Metode Mengerjakan

1. Pilih material dengan 3 variasi,area ,dan elastisitas material

2. Buat 2 grafik perbandingan yang pertama grafik dengan material locked dan variasi area,lalu yg ke dua grafik dengan area locked dan variasi elastisitas

3. Setelah itu kita hitung stress/cost

Data Material

Subet2.png

Pembuatan Numerik

Koding Numerik ini dibuat untuk mencari nilai stress, safety factor,dan untuk mencari data untuk curve fitting

model Trusses_3D_Tugas_Besar_Safety

//define initial variable parameter Integer Points=size(P,1); //Number of Points parameter Integer Trusses=size(C,1); //Number of Trusses parameter Real Yield=215e6; //Yield Strength (Pa) parameter Real Area=0.000224; //Area L Profile (Dimension=0.03, Thickness=0,004) (m2) parameter Real Elas=193e9; //Elasticity SS 304 (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 Trusses_3D_Tugas_Besar_Safety;

Membuat Curve Fitting

Curve fitting digunakan untuk mencari nilai cost terhadap fungsi area/elastisitas

model callcurve

parameter Real [8] X={1.11e-4,1.41e-4,1.71e-4,2.31e-4,3.04e-4,3.75e-4,7.44e-4,8.64e-4};
parameter Real [8] Y={273700 ,318800 ,381200 ,512800 ,683700 ,838000 ,1663100,1986400};
Real [3] Coe;

algorithm

Coe:=Curve_Fitting(X,Y);

end callcurve;


function Curve_Fitting

 input Real X[:];
 input Real Y[size(X,1)];
 input Integer order=2;
 output Real Coe[order+1];

protected

 Real Z[size(X,1),order+1];
 Real ZTr[order+1,size(X,1)];
 Real A[order+1,order+1];
 Real B[order+1];

algorithm

for i in 1:size(X,1) loop
 for j in 1:(order+1) loop
 Z[i,j]:=X[i]^(order+1-j);
 end for;
end for;

ZTr:=transpose(Z); A:=ZTr*Z; B:=ZTr*Y; Coe:=Modelica.Math.Matrices.solve(A,B); //Coe:=fill(2,size(Coe,1)); end Curve_Fitting;