Difference between revisions of "Kelompok 2"

From ccitonlinewiki
Jump to: navigation, search
(CFD CAR DRAG ANALYSIS)
(Optimasi)
Line 119: Line 119:
  
 
[[File:testcfdkel2_4.jpg|400px]]
 
[[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))

Revision as of 11:30, 4 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))