Output yang akan dikeluarkan dari coding ini adalah:
J2:
Persamaan Temperatur: T(x) = -211.36x² + 229.68x + 290.78
Persamaan Heat Flux: q_x = 6848.18x + -3720.85 W/m²
Daya: -575.25 W
J3:
Persamaan Temperatur: T(x) = -221.97x² + 238.38x + 291.29
Persamaan Heat Flux: q_x = 7191.82x + -3861.74 W/m²
Daya: -562.88 W
J4:
Persamaan Temperatur: T(x) = -232.58x² + 247.08x + 291.80
Persamaan Heat Flux: q_x = 7535.45x + -4002.63 W/m²
Daya: -550.51 W
J5:
Persamaan Temperatur: T(x) = -243.18x² + 255.77x + 292.31
Persamaan Heat Flux: q_x = 7879.09x + -4143.52 W/m²
Daya: -538.13 W
J6:
Persamaan Temperatur: T(x) = -253.79x² + 264.47x + 292.82
Persamaan Heat Flux: q_x = 8222.73x + -4284.41 W/m²
Daya: -525.76 W
J7:
Persamaan Temperatur: T(x) = -264.39x² + 273.17x + 293.33
Persamaan Heat Flux: q_x = 8566.36x + -4425.30 W/m²
Daya: -513.39 W
J8:
Persamaan Temperatur: T(x) = -275.00x² + 281.86x + 293.84
Persamaan Heat Flux: q_x = 8910.00x + -4566.19 W/m²
Daya: -501.02 W
J9:
Persamaan Temperatur: T(x) = -285.61x² + 290.56x + 294.35
Persamaan Heat Flux: q_x = 9253.64x + -4707.08 W/m²
Daya: -488.65 W
J10:
Persamaan Temperatur: T(x) = -296.21x² + 299.26x + 294.85
Persamaan Heat Flux: q_x = 9597.27x + -4847.97 W/m²
Daya: -476.28 W
Total Daya Sistem: -4731.87 W
File ‘curve_fitting_and_heat_flux_results.html’ telah disimpan.
====================================================
Setelah melakukan semua itu, kita lakukan langkah terakhir yaitu pembuatan heat map agar kita lebih mudah dalam memvisualisasikan pola distribusi daya yang terjadi. Langkah ini bisa dilakukan dengan meggunakan coding seperti dibawah ini:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.interpolate import griddata
from scipy.optimize import curve_fit
# Data posisi dan temperatur
positions = np.array([2, 3, 4, 5, 6, 7, 8, 9, 10]) # POSISI-J dari J2 hingga J10
lengths = np.linspace(0, 1, 10) # ARAH-I dari 0 hingga 0.9 meter (10 titik: I2 hingga I11)
data = {
2: [303, 310, 320, 330, 340, 350, 360, 370, 353, 303], # J2
3: [303, 312, 322, 332, 342, 352, 362, 372, 353, 303], # J3
4: [303, 314, 324, 334, 344, 354, 364, 374, 353, 303], # J4
5: [303, 316, 326, 336, 346, 356, 366, 376, 353, 303], # J5
6: [303, 318, 328, 338, 348, 358, 368, 378, 353, 303], # J6
7: [303, 320, 330, 340, 350, 360, 370, 380, 353, 303], # J7
8: [303, 322, 332, 342, 352, 362, 372, 382, 353, 303], # J8
9: [303, 324, 334, 344, 354, 364, 374, 384, 353, 303], # J9
10: [303, 326, 336, 346, 356, 366, 376, 386, 353, 303] # J10
}
# Koefisien konduktivitas termal (W/m·K)
k = 16.2
# Fungsi kuadratik untuk fitting
def quadratic(x, a, b, c):
return a * x**2 + b * x + c
# Fungsi untuk menghitung turunan dT/dx
def dT_dx(x, a, b):
return 2 * a * x + b
# Fungsi untuk menghitung heat flux q_x = -k * dT/dx
def heat_flux(x, a, b):
return -k * dT_dx(x, a, b)
# Data asli untuk grid
original_x, original_y = np.meshgrid(lengths, positions)
original_z = np.array([data[pos] for pos in positions])
# Interpolasi ke grid 12x12 (opsional memperluas untuk visualisasi halus)
grid_x = np.linspace(0, 1, 12)
grid_y = np.linspace(2, 10, 12)
grid_x_mesh, grid_y_mesh = np.meshgrid(grid_x, grid_y)
# Fitting untuk setiap baris untuk mendapatkan gradien
heat_flux_data = np.zeros((len(positions), len(lengths)))
for i, pos in enumerate(positions):
params, _ = curve_fit(quadratic, lengths, data[pos])
a, b, c = params
heat_flux_data[i, :] = heat_flux(lengths, a, b)
# Interpolasi heat flux ke grid 12x12
distributed_power = griddata((original_x.flatten(), original_y.flatten()), heat_flux_data.flatten(),
(grid_x_mesh, grid_y_mesh), method='cubic')
# Plot heatmap distribusi daya
plt.figure(figsize=(12, 10))
cmap = sns.color_palette("blend:#800080,#0000FF", as_cmap=True)
ax = sns.heatmap(distributed_power, cmap=cmap, annot=True, fmt=".1f",
cbar_kws={'label': 'Heat Flux (W/m²)'},
xticklabels=np.round(grid_x, 2),
yticklabels=np.round(grid_y, 2))
plt.xlabel('Panjang (m)')
plt.ylabel('Posisi (J)')
plt.title('Distribusi Heat Flux pada Grid 12x12')
# Hitung daya untuk setiap sisi (aproksimasi berdasarkan heat flux rata-rata)
power_top = np.trapz(heat_flux_data[-1, :], lengths) # J10 (sisi atas)
power_bottom = np.trapz(heat_flux_data[0, :], lengths) # J2 (sisi bawah)
power_left = np.mean([heat_flux_data[i, 0] for i in range(len(positions))]) * (grid_y[-1] - grid_y[0])
power_right = np.mean([heat_flux_data[i, -1] for i in range(len(positions))]) * (grid_y[-1] - grid_y[0])
total_power = power_top + power_bottom + power_left + power_right
# Tambahkan kotak energi panas di bagian bawah
energy_text = (
f"Energi Panas (W):\n"
f"Sisi Atas (J10): {power_top:.2f} W\n"
f"Sisi Bawah (J2): {power_bottom:.2f} W\n"
f"Sisi Kiri: {power_left:.2f} W\n"
f"Sisi Kanan: {power_right:.2f} W\n"
f"TOTAL (harus ≈ 0): {total_power:.2f} W"
)
plt.figtext(0.5, -0.08, energy_text, wrap=True, horizontalalignment='center', fontsize=10, bbox=dict(facecolor='white', alpha=0.8))
plt.tight_layout()
plt.show()
One response to “Studi Kasus Integrasi Numerik Menggunakan DAI5 Untuk Konduksi Panas Steady State 2D PART 3– Golda Meirstein (2306155395)”
blog ini terdiri dari beberapa part
1. part 1 (https://ccitonline.com/wp/2025/03/10/studi-kasus-integrasi-numerik-menggunakan-dai5-untuk-konduksi-panas-steady-state-2d-golda-meirstein-2306155395/)
2. part 2(https://ccitonline.com/wp/2025/03/10/2775/)
3. part 3 (https://ccitonline.com/wp/2025/03/10/studi-kasus-integrasi-numerik-menggunakan-dai5-untuk-konduksi-panas-steady-state-2d-part-3-golda-meirstein-2306155395/)
4. part 4 (https://ccitonline.com/wp/2025/03/10/studi-kasus-integrasi-numerik-menggunakan-dai5-untuk-konduksi-panas-steady-state-2d-part-4-golda-meirstein-2306155395/)