Difference between revisions of "Metnum03-Raditya Aryaputra Adityawarman"
(→Pertemuan 5: Senin, 7 Desember 2020) |
(→Quiz) |
||
Line 329: | Line 329: | ||
end for; | end for; | ||
end StiffnessMatrixElement; | end StiffnessMatrixElement; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Matriks Global''' | ||
+ | <syntaxhighlight lang="modelica"> | ||
+ | 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; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Total Matriks Global''' | ||
+ | <syntaxhighlight lang="modelica"> | ||
+ | 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; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Boundary''' | ||
+ | <syntaxhighlight lang="modelica"> | ||
+ | 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:z-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:z-1 loop | ||
+ | KgB_met[2*Boundary_met[a]-b,z*Boundary_met[a]-b]:=1; | ||
+ | end for; | ||
+ | end for; | ||
+ | |||
+ | end BoundaryStiffnessMatrixGlobal; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Gauss Jordan''' | ||
+ | <syntaxhighlight lang="modelica"> | ||
+ | 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; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Reaction Force''' | ||
+ | <syntaxhighlight lang="modelica"> | ||
+ | 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; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Pertemuan 5: Senin, 7 Desember 2020 == | == Pertemuan 5: Senin, 7 Desember 2020 == | ||
Pada pertemuan ini, Pak Dai membahas mengenai proses pengerjaan soal quiz minggu lalu. Kemudian kami mengerjakan soal truss pada 3 dimensi. | Pada pertemuan ini, Pak Dai membahas mengenai proses pengerjaan soal quiz minggu lalu. Kemudian kami mengerjakan soal truss pada 3 dimensi. |
Revision as of 14:03, 7 December 2020
Contents
Biodata Diri
Nama: Raditya Aryaputra Adityawarman
NPM:1806181691
Program Studi: S1 Teknik Mesin Paralel
Kelas: Metode Numerik-03
Pertemuan 1: Senin, 9 November 2020
Pada pertemuan pertama setelah UTS, Pak Dai memberikan arahan kepada kami untuk memanfaatkan air.eng.ui.ac.id sebagai bahan untuk belajar. Selain itu, Pak Dai menjelaskan 4 indikator penilaian untuk pembelajaran metode numerik. Indikator pertama adalah memahami konsep dan prinsip. Konsep yaitu gagasa pemikiran mengenai apa saja yang sudah dipelajari, sedangkan prinsip yaitu pemahaman kita dalam memasukkan rumus-rumus. Indikator kedua adalah menerapkan konsep tersebut dalam memecahkan sebuah masalah. Indikator ketiga memahami aplikasi metode numerik ke dalam masalah keteknikan. Indikator yang terakhir adalah nilai tambah dalam mengenal diri kita sendiri sebagai tolak ukur apakah dari pembelajaran metode numerik diri kita bisa berkembang
Materi Sebelum UTS
Pada pertemuan sebelum UTS, kami telah belajar 3 materi utama, yaitu turunan numerik, mencari akar-akar, dan membaca pola.
1. Turunan Numerik
- turunan numerik adalah menentukan hampiran nilai turunan fungsi f yang diberikan dalam bentuk tabel. Terdapat 3 pendekatan dalam menentukan turunan:
- Turunan maju
- Turunan mundur
- Turunan pusat
2. Mencari Akar
- Pada materi ini, kami belajar cara mencari akar dengan metode numerik. Ada 2 cara dalam mengerjakannya, yaitu bracketing method dan open method.
- Bracketing method
- Bracketing method adalah metode mencari akar dengan cara menebak dua nilai, kemudian mengurung kedua nilai tersebut sehingga kita dapat menemukan akar-akar dari persamaan. Pada metode ini, ada beberapa cara penyelesaian, yaitu metode graphical, metode bisection, dan false-position.
- Metode Graphical
- Metode ini digunakan dengan cara membuat grafik fungsi dan melihat perpotongan sumbu horizontal atau sumbu x.
- Metode Bisection
- Metode ini dilakukan dengan cara membagi dua kurva yang diwakili oleh suatu titik yang nilainya dikalikan oleh nilai tertinggi dan yang terendah. Metode ini terus dilakukan hingga menemukan akar.
- False Position
- Metode ini mirip dengan bisection, namun bedanya untuk penentuan titik tengah menggunakan segitiga dari titik perpotongan kurva dengan garis yang ditentukan.
- Open Method
- Metode ini hanya menggunakan 1 titik sebagai acuan pertama untuk menemukan akar yang dicari. Open method terbagi menjadi 3 cara, yaitu newton rhapson, secant, dan simple fix point.
- Newton Rhapson
- Metode ini dilakukan dengan cara menentukan suatu titik dan menarik garis singgung terhadap kurva. Cara menentukan garis singgung tersebut dengan turunan.
- Secant
- Metode ini mirip dengan Newton Rhapson, tapi estimasi dengan 2 titik jika pada newton rhapson f'(x) tidak dapat dicari.
- Simple Fix Point
- Metode ini menghitung seluruh kemungkinan x yang dihasilkan dan dicari x konvergen sehingga x=g(x).
3. Membaca Pola
- Ada dua cara dalam membaca pola suatu data, yaitu dengan regresi dan interpolasi
- Regresi
- Interpolasi
Tugas 1 Software OpenModelica
Saya mempelajari OpenModelica dengan referensi sebagai berikut:
https://www.youtube.com/watch?v=Dw66ODbMS2A&feature=youtu.be
Video tersebut menjelaskan tutorial simulasi feedback control system. Berikut tahapan-tahapan simulasi:
- Pertama, buka OpenModelica dengan nama feedback
- Semua diagram blok yang akan disimulasikan terdapat pada tab blocks modelica. Pada simulasi ini, saya menggunakan sistem linear dan simple second order system untuk kontrol.
- Kemudian saya memakai PID controller pada menu continuous
- Pilih blok PID dan second order
- Pada menu math, pilih blok feedback
- Pada menu sources, pilih step sebagai input
- Setelah itu, blok-blok tersebut dihubungkan dengan cara menarik garis antar blok sehingga sistem menjadi closed loop
- Kemudian mengatur parameter yang diinginkan. Sistem tersebut underdamped, sehingga nilai damping yang dimasukkan <0.7
- Cek model apakah sudah siap untuk diset up atau belum
- Setelah siap untuk disimulasikan, kita menyimpan terlebih dahulu pada tempat default
- Jalankan simulasi dan tunggu hingga selesai
- Setelah simulasi selesai dilakukan, untuk melihat kurva centang y pada PID, step, dan second order
- Hasil simulasi didapatkan. Kita bisa mengubah parameter sehingga hasil simulasi lebih jelas
Lampiran
Pertemuan 2: Senin, 16 November 2020
Pada pertemuan ini, Pak Dai meminta setiap mahasiswa menunjukkan tugas minggu lalu, yaitu belajar OpenModelica. Lalu kami simulasi membuat program sederhana didalam modelica untuk menjumlahkan angka 10 kepada sebuah variabel. Berikut parameter dan hasilnya:
Lalu kami diminta untuk membuat program untuk mencari nilai rata-rata. Berikut parameter dan hasilnya:
Tugas 2 Menyelesaikan Aljabar Simultan
Pada tugas ini saya menggunakan persamaan berikut untuk mengerjakan tugas 2.
Dalam hal ini, bisa dilakukan beberapa metode dalam mengerjakannya, seperti menggunakan eliminasi gauss, gauss jordan, crammer, dan gauss seidel.
- Eliminasi gauss adalah suatu tahapan untuk memecahkan persamaan dengan cara mereduksi / menyederhanakan matriks persamaan tersebut. Prosedur dalam metode Gauuss akan menghasilkan bentuk matrik pada eselon tereduksi.
- Gauss jordan merupakan pengembangan metode eliminasi Gauss, hanya saja augmented matrik, pada sebelah kiri diubah menjadi matrik diagonal.
- Metode Cramer menggunakan determinan suatu matriks dan matriks lain yang diperoleh dengan mengganti salah satu kolom dengan vektor yang terdiri dari angka di sebelah kanan persamaannya.
- Gauss seidel digunakan untuk menyelesaikan sistem persamaan linear (SPL) berukuran besar dan proporsi koefisien nolnya besar, seperti sistem-sistem yang banyak ditemukan dalam sistem persamaan diferensial.
Pada tugas ini, saya memakai metode eliminasi gauss dalam menyelesaikannya. Berikut percobaan yang saya lakukan:
Dari simulasi ini didapatkan hasil x=2.5, y=0.66667, dan z=0.22222
Referensi dari percobaan di atas didapat dari https://build.openmodelica.org/Documentation/Modelica.Math.Matrices.solve.html.
Selain itu, saya mencoba membuat persamaan Newton Rhapson. Metode ini dilakukan dengan cara menentukan suatu titik dan menarik garis singgung terhadap kurva. Cara menentukan garis singgung tersebut dengan turunan. Kelebihan dari metode ini adalah hasilnya didapatkan dengan cepat, hanya memerlukan satu titik saja, dan caranya sederhana. Namun, kekurangan dari metode ini adalah tidak semua persamaan konvergen sehingga beberapa persamaan tidak mempunyai solusi dengan metode ini. Selain itu ketika memilih titik yang turunannya=0, cara ini tidak bisa digunakan.
Pertama-tama saya membuat fungsi pada function. Persamaan yang saya gunakan yaitu y=2x^2+20x+50. Selanjutnya, saya membuat fungsi turunan dengan persamaan y'=4x+20.
Kemudian saya membuat rumus newton rhapson pada function solve. Rumusnya yaitu Xn=(xn-1)-(f(xn-1)/f'(xn-1)). Input yang dimasukkan x0, i=0, dan x1. X sebagai variabel yang dimasukkan. Sementara i merupakan iterasi. Saya menggunakan loop while, sehingga program terus melakukan looping selama error lebih besar dari 10^-9.
Lalu saya membuat equation. Equation ini untuk menghitung fungsi-fungsi yang sudah dibuat. Parameternya yaitu x0=7 dan x1. x0=7 merupakan titik yang ditentukan.
Setelah dilakukan simulasi, maka didapatkan hasil dari persamaan y=2x^2+20x+50 yaitu titik yang memotong garis horizontal x=-5.
Pertemuan 3: Senin, 23 November 2020
Pada pertemuan ini, kami diminta untuk menjelaskan tugas minggu lalu, yaitu penyelesaian aljabar simultan. Selain itu, Pak Dai menjelaskan aplikasi metode numerik dalam permasalahan teknik. Urutan penyelesaiannya yaitu:
- masalah teknik, yaitu tahapan membuat gambaran mengenai masalah yang ada, seperti parameter dan metode yang digunakan.
- analisis masalah, yaitu respon dari kasus yang ada. Pada tahap ini menganalisis permasalahan dari parameter-parameter yang sudah diketahui
- model matematis, membuat model matematika dari variabel yang ada dengan hukum fisika.
- model numerik, yaitu menggunakan bahasa pemrograman untuk menyelesaikan permasalahan yang ada, contohnya menggunakan open modelica untuk menyelesaikan aljabar simultan.
- komputer, yaitu menggunakan software untuk menyelesaikan perhitungan, seperti open modelica, cfdsof, mathlab, dll.
- solusi, hasil dari simulasi didapatkan.
Selanjutnya Pak Dai memberi tugas untuk menyelesaikan permasalahan pegas massa yang terdapat pada bab 12 dari buku Numerical Method. Berikut soalnya:
Untuk menyelesaikan soal ini, pertama-tama membuat free body diagram dari masing-masing sistem. Kemudian menuliskan persamaannya. Setelah itu, persamaan tersebut dapat diselesaikan dengan metode numerik, yaitu membuat matriks dan diselesaikan dengan eliminasi gauss. Berikut kode yang digunakan:
Berikut hasilnya, di mana x1 = 7,36, x2 = 10,06, x3 = 12,51
Tugas 3 Menghitung Displacement dan Gaya Reaksi pada Trusses
Tugas yang diberikan pada pertemuan ketiga yaitu menghitung displacement dan gaya reaksi pada balcony truss dengan metode Finite Element Analysis (FEA) menggunakan aplikasi open modelica.
Penyelesaiannya sebagai berikut: 1.Pertama-tama, menentukan elemen-elemen setiap batang, menentukan sudut, dan node-nodenya.
2.Lalu menentukan kekakuan setiap batang. Rumus dari konstanta kekakuan yaitu k=AE/L dengan A luas penampang, E modulus elastisitas, dan L panjang batang. Karena batang 1,3,4,6 mempunyai panjang yang sama sebesar 36 in maka k juga sama. Begitu pula dengan k pada batang 2 dan 5 dengan panjang 50.9 in.
3. Kemudian membuat persamaan matriks pada elemen. Rumusnya sebagai berikut:
Persamaan tersebut kemudian dihitung pada tiap elemen menjadi matriks lokal. Dalam perhitungan, perhatikan juga nodenya karena akan dimasukkan ke dalam matriks global.
4. Gabungkan semua matriks lokal tiap elemen ke matriks global. Rumusnya: [K]G=[K1]+[K2]+[K3]+[k4]+[k5]+[k6]
Berikut kode yang sudah saya buat dalam aplikasi openmodelica:
Berikut hasilnya:
5. Lalu masukkan boundary conditionnya. Pada node 1 dan 3 fix, sehingga U1x,U1y,U3x,U3y=0. Pada node 4 dan 5 diberikan gaya eksternal dengan F4y = -500 lb dan F5y = -500 lb. Boundary condition tersebut kemudian dimasukkan dalam persamaan {F}=[K]g*[U].
6. Dari matriks tersebut bisa diselesaikan dengan eliminasi gauss, menghasilkan displacement U2x=-0.00355 in, U2Y=-0.01026 in, U4x=0.00118 in, U4y= -0.0114 in, U5x = 0.00240 in, dan U5y = -0.0195 in. Berikut matriks globalnya:
Berikut kode yang sudah saya buat dalam aplikasi openmodelica:
Berikut hasilnya:
7. Kemudian menentukan gaya reaksi dengan rumus {R}=[K]g{U}-{F}. Berikut hasilnya:
Berikut kode yang sudah saya buat dalam aplikasi openmodelica:
Berikut hasilnya:
Berikut file openmodelica yang saya buat: https://drive.google.com/drive/folders/1VxlNZBhgml-QFlUVyLImvTKod26Yo2i7?usp=sharing
Pertemuan 4: Senin, 30 November 2020
Quiz
Pada pertemuan ini diberikan quiz menghitung defleksi dan gaya reaksi dengan menggunakan Openmodelica. Berikut soal yang diberikan:
Berikut flow chart urutan pengerjaan soal di atas:
Kemudian berikut cara manual mengerjakan soal nomor 4 dan 8:
Berikut kode yang saya gunakan dalam mengerjakan soal nomor 4:
Fungsi Utama
class truss
//Data inisiasi [elemen #, node i, node j, theta(degrees), area(m^2), modulus(Pa), panjang(m)]
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];
//Data node [node i, node j]
parameter Integer [:,2] node = [1, 2;
2, 3;
1, 4;
2, 4;
3, 4];
//External load pada tiap node [node #, FX, FY]
parameter Real [:,3] node_load = [1, 0, 0;
2, -1035.28, -3863.70;
3, 0, 0;
4, -1035.28, -3863.70];
parameter Integer y = size(node,1); //jumlah node
parameter Integer x = 2*(size(node_load,1)); //total node tiap batang
parameter Integer [:] Boundary = {1,3}; //node pada boundary
parameter Real [x] load = {0,0,-1035.28,-3863.70,0,0,-1035.28,-3863.70}; //load tiap node
Integer z = sum(Boundary); //jumlah boundary
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)}; //stiffness constant
Ke = StiffnessMatrixElement(inisiasi); //matriks lokal
Kg = StiffnessMatrixGlobal(node, x, y, Ke); //matriks global
KgTot = SumStiffnessMatrixGlobal(x,y,Kg); //total matriks global
KgB = BoundaryStiffnessMatrixGlobal(x,z,KgTot,Boundary); //boundary
U = GaussJordan(x,KgB,load); //displacement
R = ReactionForce(x,KgTot,U,load); //reaction force
end truss;
Matriks elemen
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;
Matriks 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;
Total Matriks 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;
Boundary
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:z-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:z-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;
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;
Pertemuan 5: Senin, 7 Desember 2020
Pada pertemuan ini, Pak Dai membahas mengenai proses pengerjaan soal quiz minggu lalu. Kemudian kami mengerjakan soal truss pada 3 dimensi.