Difference between revisions of "Kelompok 2"

From ccitonlinewiki
Jump to: navigation, search
(Tugas Besar)
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
1. [[Ryanson Jonathan]]
 +
 +
2. [[Agis Gilang Setiawan]]
 +
 +
3. [[Ales Daniel]]
 +
 +
 +
===Eliminasi Gauss===
 +
<youtube width="200" height="100">Ysrz1P3X-_s</youtube>
 +
 
Pengerjaan dilakukan menggunakan algoritma Gauss seperti yang ada di buku Phyton. Namun, yang membedakan adalah tidak menggunakan ''module'' pada pengerjaan ini. Berikut adalah algoritma yang sudah dirancang berdasarkan soal pada buku Phyton :
 
Pengerjaan dilakukan menggunakan algoritma Gauss seperti yang ada di buku Phyton. Namun, yang membedakan adalah tidak menggunakan ''module'' pada pengerjaan ini. Berikut adalah algoritma yang sudah dirancang berdasarkan soal pada buku Phyton :
  
 
Algoritma yang kami gunakan adalah sebagai berikut:
 
Algoritma yang kami gunakan adalah sebagai berikut:
  
a = [[2,-3,-1], \
+
a = [[2,-3,-1], \
[3,2,5], \
+
[3,2,5], \
[2,4,4]]
+
[2,4,4]]
b = [[3], \
+
b = [[3], \
[-9], \
+
[-9], \
[-5]]
+
[-5]]
 
 
 
  n = len(b)
 
  n = len(b)
 
  for k in range(0, n-1):
 
  for k in range(0, n-1):
Line 18: Line 27:
 
       for f in range(0,n):
 
       for f in range(0,n):
 
         a[i][f]=a[i][f]-op*a[i-1][f]
 
         a[i][f]=a[i][f]-op*a[i-1][f]
 
 
  Hasil=['Hasilnya']
 
  Hasil=['Hasilnya']
 
  if a[2][2] !=0:
 
  if a[2][2] !=0:
Line 37: Line 45:
  
 
[[File:Gauss_test_kelompok2.jpg|800px]]
 
[[File:Gauss_test_kelompok2.jpg|800px]]
 +
 +
===Runge-Kutta Method===
 +
<youtube width="200" height="100">QfEgmJaGOAE</youtube>
 +
<youtube width="200" height="100">BMm8E_PxccE</youtube>
 +
 +
 +
Pengerjaan dilakukan dan kode dirancang untuk mengikuti contoh soal.
 +
 +
# Di sini, kita akan menggunakan x0 dan y sebagai titik asal, x sebagai t yang diinginkan, dan h sebagai increment. Kita menggunakan h = 0.01.
 +
x0 = 0
 +
y = 0
 +
h = 0.01
 +
x = float(input("Masukkan nilai t: "))
 +
if 0 <= x < 2:
 +
  # dydx menyatakan persamaan awal dalam soal. Persamaan harus diintegralkan sekali untuk menghasilkan persamaan kecepatan.
 +
  # Didapat hasil 2x^2 - 30xy karena dipakai massa m = 2,5 kg dan konstanta pegas k = 75 N/m.
 +
  # P(t) dinyatakan dalam x.
 +
  def dydx(x, y):
 +
    return (2*x**2 - 30*x*y)
 +
  # Ini merupakan implementasi perhitungan Runge-Kutta.
 +
  def rungeKutta(x0, y0, x, h):
 +
    n = (int)((x - x0)/h) 
 +
    y = y0
 +
    for i in range(1, n + 1):
 +
        k1 = h * dydx(x0, y)
 +
        k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1)
 +
        k3 = h * dydx(x0 + 0.5 * h, y + 0.5 * k2)
 +
        k4 = h * dydx(x0 + h, y + k3)
 +
 
 +
        # untuk y selanjutnya
 +
        y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4)
 +
 
 +
        # untuk x selanjutnya
 +
        x0 = x0 + h
 +
    return y
 +
  print("Nilai y pada t =", x, "adalah", rungeKutta(x0, y, x, h))
 +
elif x >= 2:
 +
  # Ketika x >= 2, perhitungan harus diganti karena P(t) sudah konstan di angka 20 N.
 +
  def dydx(x, y):
 +
    return (8 - 30*x*y)
 +
  def rungeKutta(x0, y0, x, h):
 +
    n = (int)((x - x0)/h) 
 +
    y = y0
 +
    for i in range(1, n + 1):
 +
        k1 = h * dydx(x0, y)
 +
        k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1)
 +
        k3 = h * dydx(x0 + 0.5 * h, y + 0.5 * k2)
 +
        k4 = h * dydx(x0 + h, y + k3)
 +
        y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4)
 +
        x0 = x0 + h
 +
    return y
 +
  print("Nilai y pada t =", x, "adalah", rungeKutta(x0, y, x, h))
 +
else:
 +
  print("Mohon masukkan nilai t positif.")
 +
 +
[[File:Flowdiagram_RungeKutta_Kelompok2.jpg]]
 +
 +
===CFD CAR DRAG ANALYSIS===
 +
 +
Analysis drag dilakukan terlebih dahulu input data yang diperlukan pada ''CFD-Pre'' dan ''CFD-Solve''. Berikut adalah hasil setelah dilakukan ''Mesh Geometry'' dan ''Run Solver'' dari mobil yang akan dianalisa.
 +
 +
[[File:testcfdkel2_1.jpg|400px]]
 +
 +
Kemudian, pada bagian ''tab'' ''CFD-Post'', dilakukan running dengan aplikasi ''Paraview'' untuk mengetahui drag force yang ingin dicari tahu.
 +
 +
[[File:testcfdkel2_2.jpg|400px]]
 +
 +
Lalu, dilakukan pengerjaan dengan filter ''Generate Surface Normal'', dengan mengapply tampak car_body saja yang terlihat. Kemudian, dilakukan kalkulasi besar P terhadap gaya normal sumbu x. Hasil tersebut kemudian di apply kembali sehingga menghasilkan perhitungan yang diinginkan yaitu ''Drag Force'' yang ditentukan. Didapatkan besarnya setelah dilakukan ''filter'' dan integrasi perhitungan yang ada. Berikut adalah skema yang dilakukan:
 +
 +
[[File:testcfdkel2_3.jpg|400px]]
 +
 +
Kemudian, dilakukan percobaan lainnya dengan variasi V dengan interval 1 dari 10 hingga 20. Akhirnya, didapatkan data yang kemudian dibentuk grafiknya serta ''trendline'' yang berbentuk kurva sebagai berikut:
 +
 +
[[File:testcfdkel2_4.jpg|400px]]
 +
 +
 +
===Optimasi===
 +
Optimasi untuk kasus airfoil dilakukan menggunakan kode sbb:
 +
 +
# -*- coding: utf-8 -*-
 +
"""
 +
Created on Mon Dec 2 14:39:11 2019
 +
 +
@author: rjsec
 +
"""
 +
 +
import numpy as np
 +
from scipy.optimize import minimize
 +
 +
 +
def cdrag(x):
 +
    x1 = x[0]
 +
    drag = 0.0000003*x1**4-0.00002*x1**3+0.0008*x1**2+0.0026*x1-0.0517
 +
    return drag
 +
 +
def clift(x):
 +
    x1 = x[0]
 +
    lift = 0.0000001*x1**4+0.00001*x1**3+0.0003*x1**2+0.0052*x1+0.0187
 +
    return lift
 +
 +
def objective(x):
 +
    return cdrag(x)
 +
 +
def constraint1(x):
 +
    return 90 - cdrag(x)
 +
def constraint2(x):
 +
    return 90 - clift(x)
 +
 +
con1=({'type':'ineq','fun':constraint1})
 +
con2=({'type':'ineq','fun':constraint2})
 +
cons = (con1,con2)
 +
 +
x1_guess = 50
 +
 +
x0 = np.array([x1_guess])
 +
 +
sol = minimize(objective,x0, method='SLSQP',constraints=cons, options={'disp':True})
 +
 +
xopt = sol.x
 +
forceopt = -sol.fun
 +
 +
dragopt = cdrag(xopt)
 +
liftopt = clift(xopt)
 +
 +
print ("")
 +
print ("Hasil optimasi:")
 +
print ("Sudut optimal = "+str(-xopt[0]))
 +
print ("Total force optimal = "+str(forceopt))
 +
print ("Drag force optimal = "+str(-dragopt))
 +
print ("Lift force optimal = "+str(liftopt))
 +
 +
 +
== Tugas Besar ==
 +
'''Spesifikasi Airfoil'''
 +
[[File:TB1.png]]
 +
Airfoil yang digunakan adalah MH 70 11.08% - Martin Hepperle MH70
 +
Span = 2 mm
 +
Root and Tip Chord = 10 mm
 +
 +
'''Pembuatan model airfoil'''
 +
Airfoil dibuat dengan menggunakan software Autodesk Inventor
 +
[[File:TB2.png]]
 +
 +
'''Simulasi menggunakan CFD'''
 +
Model yang sudah dibuat diimport ke CFDSOF
 +
[[File:TB3.png]]
 +
Model memasuki tahap ''meshing''
 +
 
 +
Berikut adalah ''Boundary geometry'' untuk proses ''meshing''
 +
[[File:TB4.png]]
 +
 +
Model memasuki tahap-tahap analisis sebagai berikut
 +
[[File:TB5.png]]
 +
 +
[[File:TB6.png]]
 +
 +
[[File:TB7.png]]
 +
 +
[[File:TB8.png]]
 +
 +
[[File:TB9.png]]
 +
 +
[[File:TB10.png]]
 +
 +
[[File:TB11.png]]
 +
 +
[[File:TB12.png]]
 +
 +
'''Perhitungan menggunakan Paraview'''
 +
Model ''meshing'' diimport ke Paraview
 +
Perhitungan dilakukan dengan tahap berikut
 +
[[File:TB12.png]]
 +
 +
[[File:TB13.png]]
 +
 +
[[File:TB14.png]]
 +
 +
[[File:TB15.png]]
 +
 +
[[File:TB16.png]]
 +
 +
[[File:TB17.png]]
 +
 +
[[File:TB18.png]]
 +
 +
'''Hasil Percobaan'''
 +
''Data Percobaan''
 +
Data Percobaan
 +
[[File:TB19.png]]
 +
 +
''Grafik Percobaan''
 +
Berikut adalah grafik lift dan drag kami
 +
[[File:TB20.png]]
 +
 +
''Optimasi''
 +
Kode yang digunakan
 +
[[File:TB21.png]]
 +
 +
Berikut hasil optimasi yang dilakukan
 +
[[File:TB22.png]]
 +
 +
Grafik hasil optimasi Lift vs Drag
 +
 +
[[File:TB23.png]]

Latest revision as of 17:50, 8 December 2019

1. Ryanson Jonathan

2. Agis Gilang Setiawan

3. Ales Daniel


Eliminasi Gauss

Pengerjaan dilakukan menggunakan algoritma Gauss seperti yang ada di buku Phyton. Namun, yang membedakan adalah tidak menggunakan module pada pengerjaan ini. Berikut adalah algoritma yang sudah dirancang berdasarkan soal pada buku Phyton :

Algoritma yang kami gunakan adalah sebagai berikut:

a = [[2,-3,-1], \
[3,2,5], \
[2,4,4]]
b = [[3], \
[-9], \
[-5]]
n = len(b)
for k in range(0, n-1):
  for i in range(n-1, k, -1):
    if a[i][k] != 0.0:
      op= a[i][k]/a[i-1][k]
      b[i][0]=b[i][0]-op*b[i-1][0]
      for f in range(0,n):
        a[i][f]=a[i][f]-op*a[i-1][f]
Hasil=['Hasilnya']
if a[2][2] !=0:
  z=b[2][0]/a[2][2]
else:
  z=0
if a[0][0] !=0:
  y=(b[1][0]-z*a[1][2])/a[1][1]
else:
  y=0
if a[0][0] !=0:
  x=(b[0][0]-z*a[0][2]-y*a[0][1])/a[0][0]
else:
  x=0
hasil=(x,y,z)
print(a)


Gauss test kelompok2.jpg

Runge-Kutta Method


Pengerjaan dilakukan dan kode dirancang untuk mengikuti contoh soal.

# Di sini, kita akan menggunakan x0 dan y sebagai titik asal, x sebagai t yang diinginkan, dan h sebagai increment. Kita menggunakan h = 0.01. 
x0 = 0
y = 0
h = 0.01
x = float(input("Masukkan nilai t: "))
if 0 <= x < 2:
  # dydx menyatakan persamaan awal dalam soal. Persamaan harus diintegralkan sekali untuk menghasilkan persamaan kecepatan.
  # Didapat hasil 2x^2 - 30xy karena dipakai massa m = 2,5 kg dan konstanta pegas k = 75 N/m.
  # P(t) dinyatakan dalam x. 
  def dydx(x, y): 
    return (2*x**2 - 30*x*y) 
  # Ini merupakan implementasi perhitungan Runge-Kutta.
  def rungeKutta(x0, y0, x, h): 
    n = (int)((x - x0)/h)  
    y = y0 
    for i in range(1, n + 1): 
       k1 = h * dydx(x0, y) 
       k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1) 
       k3 = h * dydx(x0 + 0.5 * h, y + 0.5 * k2) 
       k4 = h * dydx(x0 + h, y + k3) 
 
       # untuk y selanjutnya 
       y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4) 
 
       # untuk x selanjutnya
       x0 = x0 + h 
    return y 
  print("Nilai y pada t =", x, "adalah", rungeKutta(x0, y, x, h))
elif x >= 2:
  # Ketika x >= 2, perhitungan harus diganti karena P(t) sudah konstan di angka 20 N.
  def dydx(x, y): 
    return (8 - 30*x*y) 
  def rungeKutta(x0, y0, x, h): 
    n = (int)((x - x0)/h)  
    y = y0 
    for i in range(1, n + 1): 
       k1 = h * dydx(x0, y) 
       k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1) 
       k3 = h * dydx(x0 + 0.5 * h, y + 0.5 * k2) 
       k4 = h * dydx(x0 + h, y + k3) 
       y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4)
       x0 = x0 + h 
    return y 
  print("Nilai y pada t =", x, "adalah", rungeKutta(x0, y, x, h))
else:
  print("Mohon masukkan nilai t positif.")

Flowdiagram RungeKutta Kelompok2.jpg

CFD CAR DRAG ANALYSIS

Analysis drag dilakukan terlebih dahulu input data yang diperlukan pada CFD-Pre dan CFD-Solve. Berikut adalah hasil setelah dilakukan Mesh Geometry dan Run Solver dari mobil yang akan dianalisa.

Testcfdkel2 1.jpg

Kemudian, pada bagian tab CFD-Post, dilakukan running dengan aplikasi Paraview untuk mengetahui drag force yang ingin dicari tahu.

Testcfdkel2 2.jpg

Lalu, dilakukan pengerjaan dengan filter Generate Surface Normal, dengan mengapply tampak car_body saja yang terlihat. Kemudian, dilakukan kalkulasi besar P terhadap gaya normal sumbu x. Hasil tersebut kemudian di apply kembali sehingga menghasilkan perhitungan yang diinginkan yaitu Drag Force yang ditentukan. Didapatkan besarnya setelah dilakukan filter dan integrasi perhitungan yang ada. Berikut adalah skema yang dilakukan:

Testcfdkel2 3.jpg

Kemudian, dilakukan percobaan lainnya dengan variasi V dengan interval 1 dari 10 hingga 20. Akhirnya, didapatkan data yang kemudian dibentuk grafiknya serta trendline yang berbentuk kurva sebagai berikut:

Testcfdkel2 4.jpg


Optimasi

Optimasi untuk kasus airfoil dilakukan menggunakan kode sbb:

# -*- coding: utf-8 -*-
"""
Created on Mon Dec 2 14:39:11 2019

@author: rjsec
"""

import numpy as np
from scipy.optimize import minimize


def cdrag(x):
    x1 = x[0]
    drag = 0.0000003*x1**4-0.00002*x1**3+0.0008*x1**2+0.0026*x1-0.0517
    return drag

def clift(x):
    x1 = x[0]
    lift = 0.0000001*x1**4+0.00001*x1**3+0.0003*x1**2+0.0052*x1+0.0187
    return lift

def objective(x):
    return cdrag(x)

def constraint1(x): 
    return 90 - cdrag(x)
def constraint2(x):
    return 90 - clift(x)

con1=({'type':'ineq','fun':constraint1})
con2=({'type':'ineq','fun':constraint2})
cons = (con1,con2)

x1_guess = 50

x0 = np.array([x1_guess]) 

sol = minimize(objective,x0, method='SLSQP',constraints=cons, options={'disp':True})

xopt = sol.x
forceopt = -sol.fun 

dragopt = cdrag(xopt)
liftopt = clift(xopt) 

print ("")
print ("Hasil optimasi:")
print ("Sudut optimal = "+str(-xopt[0]))
print ("Total force optimal = "+str(forceopt))
print ("Drag force optimal = "+str(-dragopt))
print ("Lift force optimal = "+str(liftopt))


Tugas Besar

Spesifikasi Airfoil
TB1.png
Airfoil yang digunakan adalah MH 70 11.08% - Martin Hepperle MH70
Span = 2 mm
Root and Tip Chord = 10 mm 
Pembuatan model airfoil
Airfoil dibuat dengan menggunakan software Autodesk Inventor
TB2.png
Simulasi menggunakan CFD
Model yang sudah dibuat diimport ke CFDSOF
TB3.png
Model memasuki tahap meshing
 
Berikut adalah Boundary geometry untuk proses meshing
TB4.png

Model memasuki tahap-tahap analisis sebagai berikut 
TB5.png

TB6.png

TB7.png

TB8.png

TB9.png

TB10.png

TB11.png

TB12.png
Perhitungan menggunakan Paraview
Model meshing diimport ke Paraview
Perhitungan dilakukan dengan tahap berikut
TB12.png

TB13.png

TB14.png

TB15.png

TB16.png

TB17.png

TB18.png
Hasil Percobaan
Data Percobaan
Data Percobaan
TB19.png

Grafik Percobaan
Berikut adalah grafik lift dan drag kami
TB20.png

Optimasi
Kode yang digunakan
TB21.png

Berikut hasil optimasi yang dilakukan
TB22.png

Grafik hasil optimasi Lift vs Drag

TB23.png